4 * An ActionScript 3 implementation of the ECB confidentiality mode
\r
5 * Copyright (c) 2007 Henri Torgemane
\r
7 * See LICENSE.txt for full license information.
\r
9 package com.hurlant.crypto.symmetric
\r
11 import flash.utils.ByteArray;
\r
12 import com.hurlant.util.Memory;
\r
13 import com.hurlant.util.Hex;
\r
17 * This uses a padding and a symmetric key.
\r
18 * If no padding is given, PKCS#5 is used.
\r
20 public class ECBMode implements IMode, ICipher
\r
22 private var key:ISymmetricKey;
\r
23 private var padding:IPad;
\r
25 public function ECBMode(key:ISymmetricKey, padding:IPad = null) {
\r
27 if (padding == null) {
\r
28 padding = new PKCS5(key.getBlockSize());
\r
30 padding.setBlockSize(key.getBlockSize());
\r
32 this.padding = padding;
\r
35 public function getBlockSize():uint {
\r
36 return key.getBlockSize();
\r
39 public function encrypt(src:ByteArray):void {
\r
42 var blockSize:uint = key.getBlockSize();
\r
43 var tmp:ByteArray = new ByteArray;
\r
44 var dst:ByteArray = new ByteArray;
\r
45 for (var i:uint=0;i<src.length;i+=blockSize) {
\r
47 src.readBytes(tmp, 0, blockSize);
\r
49 dst.writeBytes(tmp);
\r
52 src.writeBytes(dst);
\r
54 public function decrypt(src:ByteArray):void {
\r
56 var blockSize:uint = key.getBlockSize();
\r
59 if (src.length%blockSize!=0) {
\r
60 throw new Error("ECB mode cipher length must be a multiple of blocksize "+blockSize);
\r
63 var tmp:ByteArray = new ByteArray;
\r
64 var dst:ByteArray = new ByteArray;
\r
65 for (var i:uint=0;i<src.length;i+=blockSize) {
\r
67 src.readBytes(tmp, 0, blockSize);
\r
70 dst.writeBytes(tmp);
\r
74 src.writeBytes(dst);
\r
76 public function dispose():void {
\r
82 public function toString():String {
\r
83 return key.toString()+"-ecb";
\r