Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ?package
- {
- public class GACodec extends Object
- {
- private static var SHIFT:Number = 60;
- private static var CAPS_ON:Number = 61;
- private static var CAPS_OFF:Number = 62;
- private static var UNICODE:Number = 63;
- private static var PADLENGTH:Number = 64;
- private static var BASELENGTH:Number = 128;
- private static var INVALID:Number = -1;
- private static var bDebug:Boolean = false;
- private static var s_cLPad:Array = new Array(" ", "!", "\"", "#", "$", "\'", "(", ")", "*", "+", ",", "-", ".", "/", "&", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "@", "[", "]", "_", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
- private static var s_bReverseLPad:Array = new Array(BASELENGTH);
- private static var s_cUPad:Array = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
- private static var s_bReverseUPad:Array = new Array(BASELENGTH);
- private static var s_cEncodePad:Array = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/");
- private static var s_bDecodePad:Array = new Array(BASELENGTH);
- public function GACodec()
- {
- var _loc_1:* = NaN;
- _loc_1 = 0;
- while (_loc_1 < BASELENGTH)
- {
- s_bReverseLPad[_loc_1] = INVALID;
- s_bReverseUPad[_loc_1] = INVALID;
- s_bDecodePad[_loc_1] = INVALID;
- _loc_1 = _loc_1 + 1;
- }
- _loc_1 = 0;
- while (_loc_1 < PADLENGTH)
- {
- if (_loc_1 < s_cLPad.length)
- {
- s_bReverseLPad[s_cLPad[_loc_1].charCodeAt(0)] = _loc_1;
- }
- if (_loc_1 < s_cUPad.length)
- {
- s_bReverseUPad[s_cUPad[_loc_1].charCodeAt(0)] = _loc_1;
- }
- s_bDecodePad[s_cEncodePad[_loc_1].charCodeAt(0)] = _loc_1;
- _loc_1 = _loc_1 + 1;
- }
- return;
- }// end function
- private function toCharArray(param1:String) : Array
- {
- var _loc_2:* = new Array();
- var _loc_3:* = 0;
- while (_loc_3 <= (param1.length - 1))
- {
- _loc_2.push(param1.charCodeAt(_loc_3));
- _loc_3++;
- }
- return _loc_2;
- }// end function
- public function isWhiteSpace(param1:Number) : Boolean
- {
- return param1 == 32 || param1 == 13 || param1 == 10 || param1 == 9;
- }// end function
- private function removeWhiteSpace(param1:Array) : Number
- {
- if (param1 == null)
- {
- return 0;
- }
- var _loc_2:* = 0;
- var _loc_3:* = param1.length;
- var _loc_4:* = 0;
- while (_loc_4 < _loc_3)
- {
- if (!isWhiteSpace(param1[_loc_4]))
- {
- param1[++_loc_2] = param1[_loc_4];
- }
- _loc_4++;
- }
- return _loc_2;
- }// end function
- private function convertToBytes(param1:String) : Array
- {
- var _loc_5:* = NaN;
- if (param1 == null)
- {
- return null;
- }
- var _loc_2:* = toCharArray(param1);
- var _loc_3:* = removeWhiteSpace(_loc_2);
- var _loc_4:* = new Array(_loc_3);
- var _loc_6:* = 0;
- while (_loc_6 < _loc_3)
- {
- _loc_5 = s_bDecodePad[_loc_2[_loc_6]];
- if (_loc_5 != INVALID)
- {
- _loc_4[_loc_6] = _loc_5;
- }
- else
- {
- throw new Error("Bad char (=" + _loc_2[_loc_6] + "\') at pos " + _loc_6);
- }
- _loc_6++;
- }
- return _loc_4;
- }// end function
- private function convertToString(param1:Array) : String
- {
- var _loc_2:* = "";
- if (param1 == null)
- {
- return null;
- }
- var _loc_3:* = new Array(param1.length);
- var _loc_4:* = 0;
- while (_loc_4 < param1.length)
- {
- if (param1[_loc_4] > PADLENGTH || param1[_loc_4] < 0)
- {
- throw new Error("Bad byte (=" + param1[_loc_4] + ") at pos " + _loc_4);
- }
- _loc_3[_loc_4] = s_cEncodePad[param1[_loc_4]];
- _loc_2 = _loc_2 + _loc_3[_loc_4];
- _loc_4++;
- }
- return _loc_2;
- }// end function
- public function decode(param1:String) : String
- {
- var bUnicode:Array;
- var strInput:* = param1;
- if (strInput == null)
- {
- return null;
- }
- var aData:* = convertToBytes(strInput);
- if (bDebug)
- {
- trace("Pre encode [" + aData.toString() + "]");
- }
- var sbOut:* = new String("");
- var bShift:Boolean;
- var i:int;
- while (i < aData.length)
- {
- switch(aData[i])
- {
- case CAPS_ON:
- {
- bShift;
- break;
- }
- case CAPS_OFF:
- {
- bShift;
- break;
- }
- case SHIFT:
- {
- i = (i + 1);
- sbOut = sbOut + s_cUPad[aData[(i + 1)]];
- break;
- }
- case UNICODE:
- {
- bUnicode = new Array(2);
- i = (i + 1);
- i = (i + 1);
- bUnicode[0] = aData[(i + 1)] << 2 | aData[(i + 1)] >> 4;
- i = (i + 1);
- bUnicode[1] = aData[i] << 4 | aData[(i + 1)] >> 2;
- try
- {
- sbOut = sbOut + String.fromCharCode(bUnicode[0] + bUnicode[1]);
- }
- catch (err:Error)
- {
- throw new Error("Cannot decode");
- }
- break;
- }
- default:
- {
- if (!bShift)
- {
- sbOut = sbOut + s_cLPad[aData[i]];
- }
- else
- {
- sbOut = sbOut + s_cUPad[aData[i]];
- }
- break;
- }
- }
- i = (i + 1);
- }
- return sbOut;
- }// end function
- public function encode(param1:String) : String
- {
- var c:Number;
- var bL:Number;
- var bU:Number;
- var n1:Number;
- var n2:Number;
- var strInput:* = param1;
- if (strInput == null)
- {
- return null;
- }
- var aData:* = toCharArray(strInput);
- var bOut:* = new Array();
- var bShift:Boolean;
- var i:int;
- while (i < aData.length)
- {
- c = aData[i];
- if (isWhiteSpace(c))
- {
- c;
- }
- bL = c > BASELENGTH ? (INVALID) : (s_bReverseLPad[c]);
- bU = c > BASELENGTH ? (INVALID) : (s_bReverseUPad[c]);
- if (bL != INVALID)
- {
- if (bShift)
- {
- bOut.push(CAPS_OFF);
- bShift;
- }
- bOut.push(bL);
- }
- else if (bU != INVALID)
- {
- if (!bShift)
- {
- if ((i + 1) < aData.length && s_bReverseUPad[aData[(i + 1)]] != INVALID)
- {
- bOut.push(CAPS_ON);
- bShift;
- }
- else
- {
- bOut.push(SHIFT);
- }
- }
- bOut.push(bU);
- }
- else
- {
- bOut.push(UNICODE);
- try
- {
- n1;
- n2 = c < 0 ? (c + 256) : (c);
- bOut.push(n1 >> 2 & 63);
- bOut.push((n1 << 4 | n2 >> 4) & 63);
- bOut.push(n2 << 2 & 63);
- }
- catch (err:Error)
- {
- throw new Error("Cannot encode");
- }
- }
- i = (i + 1);
- }
- if (bDebug)
- {
- trace("Pre decode [" + bOut.toString() + "]");
- }
- return convertToString(bOut);
- }// end function
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement