package com.hurlant { import com.hurlant.crypto.symmetric.ICipher; import com.hurlant.crypto.symmetric.IVMode; import com.hurlant.crypto.symmetric.IMode; import com.hurlant.crypto.symmetric.NullPad; import com.hurlant.crypto.symmetric.PKCS5; import com.hurlant.crypto.symmetric.IPad; import com.hurlant.crypto.prng.Random; import com.hurlant.crypto.hash.HMAC; import com.hurlant.util.Base64; import com.hurlant.util.Hex; import com.hurlant.crypto.Crypto; import com.hurlant.crypto.hash.IHash; import flash.utils.*; public class SecretTab { private static const sSecretKey_str:String = "guruEncrypt!on2010"; private static var currentInput:ByteArray; private static var currentResult:ByteArray; public function SecretTab() { } public static function gen(v:int):String { //keyFormat.selectedIndex=1; var r:Random = new Random(); var b:ByteArray = new ByteArray(); r.nextBytes(b, v / 8); return Hex.fromArray(b); //key.text = Hex.fromArray(b); } public static function genIV(encType, modeType):String { var name:String = encType+"-"+modeType; var mode:ICipher = Crypto.getCipher(name, null); var bs:uint = mode.getBlockSize(); var r:Random = new Random(); var b:ByteArray = new ByteArray(); r.nextBytes(b, bs); //iv.text = Hex.fromArray(b); return Hex.fromArray(b); } public static function encrypt(input):String { return SecretTab.doEncrypt(input, "rc4", "cbc"); } public static function doEncrypt(input, encType, modeType):String { // 2: get a key var k:String = sSecretKey_str; var kdata:ByteArray; var kformat:String = String("Text"); switch (kformat) { case "hex": kdata = Hex.toArray(k); break; case "b64": kdata = Base64.decodeToByteArray(k); break; default: kdata = Hex.toArray(Hex.fromString(k)); } // 3: get an input var txt:String = input; var data:ByteArray; var format:String = String("Text"); switch (format) { case "hex": data = Hex.toArray(txt); break; case "b64": data = Base64.decodeToByteArray(txt); break; default: data = Hex.toArray(Hex.fromString(txt)); } // 1: get an algorithm.. var name:String = encType+"-"+modeType; /*if (simple.selected) { name = "simple-"+name; }*/ var pad:IPad = new NullPad; var mode:ICipher = Crypto.getCipher(name, kdata, pad); pad.setBlockSize(mode.getBlockSize()); mode.encrypt(data); currentResult = data; return (displayOutput(currentResult)); // populate IV. /*if (mode is IVMode) { var ivmode:IVMode = mode as IVMode; ///iv.text= Hex.fromArray(ivmode.IV); }*/ } public static function decrypt(output):String { return SecretTab.doDecrypt(output, "rc4", "cbc"); } public static function doDecrypt(output, encType, modeType):String { // 2: get a key var k:String = sSecretKey_str; var kdata:ByteArray; var kformat:String = String("Text"); switch (kformat) { case "hex": kdata = Hex.toArray(k); break; case "b64": kdata = Base64.decodeToByteArray(k); break; default: kdata = Hex.toArray(Hex.fromString(k)); } // 3: get an output var txt:String = output; var data:ByteArray; var format:String = String("hex"); switch (format) { case "hex": data = Hex.toArray(txt); break; case "b64": data = Base64.decodeToByteArray(txt); break; default: data = Hex.toArray(Hex.fromString(txt)); } // 1: get an algorithm.. var name:String = encType+"-"+modeType; /*if (simple.selected) { name = "simple-"+name; }*/ var pad:IPad = new NullPad; var mode:ICipher = Crypto.getCipher(name, kdata, pad); pad.setBlockSize(mode.getBlockSize()); // if an IV is there, set it. /*if (mode is IVMode) { var ivmode:IVMode = mode as IVMode; ivmode.IV = Hex.toArray(iv.text); }*/ mode.decrypt(data); currentInput = data; return (displayInput(currentInput)); } public static function displayInput(currentInput):String { //if (currentInput==null) return; var txt:String; var format:String = String("Text"); switch (format) { case "hex": txt = Hex.fromArray(currentInput); break; case "b64": txt = Base64.encodeByteArray(currentInput); break; default: txt = Hex.toString(Hex.fromArray(currentInput)); break; } //input.text = txt; return txt; } public static function displayOutput(currentResult):String { //if (currentResult==null) return; var txt:String; var format:String = String("hex"); switch (format) { case "hex": txt = Hex.fromArray(currentResult); break; case "b64": txt = Base64.encodeByteArray(currentResult); break; default: txt = Hex.toString(Hex.fromArray(currentResult)); break; } //output.text = txt; return txt; } } }