/** * SimpleIVMode * * A convenience class that automatically places the IV * at the beginning of the encrypted stream, so it doesn't have to * be handled explicitely. * Copyright (c) 2007 Henri Torgemane * * See LICENSE.txt for full license information. */ package com.hurlant.crypto.symmetric { import flash.utils.ByteArray; import com.hurlant.util.Memory; public class SimpleIVMode implements IMode, ICipher { protected var mode:IVMode; protected var cipher:ICipher; public function SimpleIVMode(mode:IVMode) { this.mode = mode; cipher = mode as ICipher; } public function getBlockSize():uint { return mode.getBlockSize(); } public function dispose():void { mode.dispose(); mode = null; cipher = null; Memory.gc(); } public function encrypt(src:ByteArray):void { cipher.encrypt(src); var tmp:ByteArray = new ByteArray; tmp.writeBytes(mode.IV); tmp.writeBytes(src); src.position=0; src.writeBytes(tmp); } public function decrypt(src:ByteArray):void { var tmp:ByteArray = new ByteArray; tmp.writeBytes(src, 0, getBlockSize()); mode.IV = tmp; tmp = new ByteArray; tmp.writeBytes(src, getBlockSize()); cipher.decrypt(tmp); src.length=0; src.writeBytes(tmp); } public function toString():String { return "simple-"+cipher.toString(); } } }