aboutsummaryrefslogtreecommitdiffstats
path: root/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as
diff options
context:
space:
mode:
Diffstat (limited to 'signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as')
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as110
1 files changed, 110 insertions, 0 deletions
diff --git a/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as b/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as
new file mode 100644
index 0000000..100041a
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as
@@ -0,0 +1,110 @@
+/**
+ * IVMode
+ *
+ * An abstract class for confidentialy modes that rely on an initialization vector.
+ * Copyright (c) 2007 Henri Torgemane
+ *
+ * See LICENSE.txt for full license information.
+ */
+package com.hurlant.crypto.symmetric
+{
+ import com.hurlant.crypto.prng.Random;
+ import com.hurlant.crypto.tests.TestCase;
+ import com.hurlant.util.Memory;
+
+ import flash.utils.ByteArray;
+
+ /**
+ * An "abtract" class to avoid redundant code in subclasses
+ */
+ public class IVMode
+ {
+ protected var key:ISymmetricKey;
+ protected var padding:IPad;
+ // random generator used to generate IVs
+ protected var prng:Random;
+ // optional static IV. used for testing only.
+ protected var iv:ByteArray;
+ // generated IV is stored here.
+ protected var lastIV:ByteArray;
+ protected var blockSize:uint;
+
+
+ public function IVMode(key:ISymmetricKey, padding:IPad = null) {
+ this.key = key;
+ blockSize = key.getBlockSize();
+ if (padding == null) {
+ padding = new PKCS5(blockSize);
+ } else {
+ padding.setBlockSize(blockSize);
+ }
+ this.padding = padding;
+
+ prng = new Random;
+ iv = null;
+ lastIV = new ByteArray;
+ }
+
+ public function getBlockSize():uint {
+ return key.getBlockSize();
+ }
+ public function dispose():void {
+ var i:uint;
+ if (iv != null) {
+ for (i=0;i<iv.length;i++) {
+ iv[i] = prng.nextByte();
+ }
+ iv.length=0;
+ iv = null;
+ }
+ if (lastIV != null) {
+ for (i=0;i<iv.length;i++) {
+ lastIV[i] = prng.nextByte();
+ }
+ lastIV.length=0;
+ lastIV=null;
+ }
+ key.dispose();
+ key = null;
+ padding = null;
+ prng.dispose();
+ prng = null;
+ Memory.gc();
+ }
+ /**
+ * Optional function to force the IV value.
+ * Normally, an IV gets generated randomly at every encrypt() call.
+ * Also, use this to set the IV before calling decrypt()
+ * (if not set before decrypt(), the IV is read from the beginning of the stream.)
+ */
+ public function set IV(value:ByteArray):void {
+ iv = value;
+ lastIV.length=0;
+ lastIV.writeBytes(iv);
+ }
+ public function get IV():ByteArray {
+ return lastIV;
+ }
+
+ protected function getIV4e():ByteArray {
+ var vec:ByteArray = new ByteArray;
+ if (iv) {
+ vec.writeBytes(iv);
+ } else {
+ prng.nextBytes(vec, blockSize);
+ }
+ lastIV.length=0;
+ lastIV.writeBytes(vec);
+ return vec;
+ }
+ protected function getIV4d():ByteArray {
+ var vec:ByteArray = new ByteArray;
+ if (iv) {
+ vec.writeBytes(iv);
+ } else {
+ throw new Error("an IV must be set before calling decrypt()");
+ }
+ return vec;
+ }
+ }
+} \ No newline at end of file