Component Builder (v.3.1.12)
+ Component Builder (v.3.1.13)
The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.
diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml
index 2d25cb5ba..a2c6c5520 100644
--- a/componentbuilder_update_server.xml
+++ b/componentbuilder_update_server.xml
@@ -1109,4 +1109,21 @@
https://dev.vdm.io
+
+ Component Builder
+ Builds Complex Joomla Components
+ com_componentbuilder
+ component
+ 3.1.13
+ https://dev.vdm.io
+
+ http://domain.com/demo.zip
+
+
+ stable
+
+ Llewellyn van der Merwe
+ https://dev.vdm.io
+
+
\ No newline at end of file
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseConfig.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseConfig.php
index 4cfe4a71b..438c931e0 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseConfig.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseConfig.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseRegistry.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseRegistry.php
index 97eb954ba..b74a095d2 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseRegistry.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/BaseRegistry.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/Database.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/Database.php
index cb2588f12..5e1453547 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/Database.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Abstraction/Database.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php
index 1613c1e48..8eb3e3556 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Config.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Config.php
index 59a3e5e2c..cad4fad30 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Config.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Config.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Content.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Content.php
new file mode 100644
index 000000000..2da198f39
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Content.php
@@ -0,0 +1,183 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Compiler;
+
+
+use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
+
+
+/**
+ * Compiler Content
+ *
+ * @since 3.2.0
+ */
+class Content
+{
+ /**
+ * The Content
+ *
+ * @var array
+ * @since 3.2.0
+ **/
+ public array $active = [];
+
+ /**
+ * The Dynamic Content
+ *
+ * @var array
+ * @since 3.2.0
+ **/
+ public array $_active = [];
+
+ /**
+ * Set content
+ *
+ * @param string $key The main string key
+ * @param mixed $value The values to set
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ public function set(string $key, $value)
+ {
+ $this->active[Placefix::_h($key)] = $value;
+ }
+
+ /**
+ * Get content
+ *
+ * @param string $key The main string key
+ * @param mixed $value The values to set
+ *
+ * @return mixed
+ * @since 3.2.0
+ */
+ public function get(string $key)
+ {
+ return $this->active[Placefix::_h($key)] ?? null;
+ }
+
+ /**
+ * Does key exist
+ *
+ * @param string $key The main string key
+ *
+ * @return bool
+ * @since 3.2.0
+ */
+ public function exist(string $key): bool
+ {
+ if (isset($this->active[Placefix::_h($key)]))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Add content
+ *
+ * @param string $key The main string key
+ * @param mixed $value The values to set
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ public function add(string $key, $value)
+ {
+ if (isset($this->active[Placefix::_h($key)]))
+ {
+ $this->active[Placefix::_h($key)] .= $value;
+ }
+ else
+ {
+ $this->active[Placefix::_h($key)] = $value;
+ }
+ }
+
+ /**
+ * Set dynamic content
+ *
+ * @param string $view The view key
+ * @param string $key The main string key
+ * @param mixed $value The values to set
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ public function set_(string $view, string $key, $value)
+ {
+ $this->_active[$view][Placefix::_h($key)] = $value;
+ }
+
+ /**
+ * Get dynamic content
+ *
+ * @param string $view The view key
+ * @param string $key The main string key
+ *
+ * @return mixed
+ * @since 3.2.0
+ */
+ public function get_(string $view, string $key = null)
+ {
+ if (!is_null($key))
+ {
+ return $this->_active[$view][Placefix::_h($key)] ?? null;
+ }
+ return $this->_active[$view] ?? null;
+ }
+
+ /**
+ * Does view key exist
+ *
+ * @param string $view The view key
+ * @param string $key The main string key
+ *
+ * @return bool
+ * @since 3.2.0
+ */
+ public function exist_(string $view, string $key): bool
+ {
+ if (isset($this->_active[$view]) &&
+ isset($this->_active[$view][Placefix::_h($key)]))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Add dynamic content
+ *
+ * @param string $view The view key
+ * @param string $key The main string key
+ * @param mixed $value The values to set
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ public function add_(string $view, string $key, $value)
+ {
+ if (isset($this->_active[$view]) &&
+ isset($this->_active[$view][Placefix::_h($key)]))
+ {
+ $this->_active[$view][Placefix::_h($key)] .= $value;
+ }
+ else
+ {
+ $this->_active[$view][Placefix::_h($key)] = $value;
+ }
+ }
+
+}
+
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php
index ce4b2c897..0799b067d 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php
index 55dc03833..33135d9fc 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Dispenser.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php
index 18bcf409e..d2ac77a87 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php
index 93436c153..4ce8ee646 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php
index c101cb196..e52ba2e77 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php
index 7452c7c55..4c2cceaf8 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Hash.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Hash.php
index 60decea28..a6b5aa657 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Hash.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Hash.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/LockBase.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/LockBase.php
index 4b423c0d9..8ee23fcf6 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/LockBase.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/LockBase.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Extension/JoomlaThree/InstallScript.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Extension/JoomlaThree/InstallScript.php
index 540b71ff8..3685cb035 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Extension/JoomlaThree/InstallScript.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Extension/JoomlaThree/InstallScript.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php
index eef69a8a3..59b108ce8 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field.php
index 9da4dadb8..313372995 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Customcode.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Customcode.php
index 5dfd327e5..32d66c9ba 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Customcode.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Customcode.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php
index f2f170f03..c53702aa6 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/DatabaseName.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/DatabaseName.php
index 2e8f703ff..345146ee3 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/DatabaseName.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/DatabaseName.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/JoomlaThree/CoreValidation.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/JoomlaThree/CoreValidation.php
index 4e1169060..ef2c2159c 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/JoomlaThree/CoreValidation.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/JoomlaThree/CoreValidation.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Name.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Name.php
index 9ff1277d4..bd2c05532 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Name.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Name.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/TypeName.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/TypeName.php
index 14372d020..5bf841ece 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/TypeName.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/TypeName.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/UniqueName.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/UniqueName.php
index e199e7001..affe4c299 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/UniqueName.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/UniqueName.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Validation.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Validation.php
index 6edbaf4a5..ea1144798 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Validation.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Field/Validation.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Component/PlaceholderInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Component/PlaceholderInterface.php
index 3d8756359..74ff3f8aa 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Component/PlaceholderInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Component/PlaceholderInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/DispenserInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/DispenserInterface.php
index cb61f60f2..d5366d95e 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/DispenserInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/DispenserInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExternalInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExternalInterface.php
index 63f4fca9c..1a889fe48 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExternalInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExternalInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExtractorInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExtractorInterface.php
index 3c956dbe9..dcbd15a79 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExtractorInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/ExtractorInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/GuiInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/GuiInterface.php
index 389526315..6db8b6b6c 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/GuiInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/GuiInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/LockBaseInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/LockBaseInterface.php
index f1d04811d..f892db12d 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/LockBaseInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Customcode/LockBaseInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/CustomcodeInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/CustomcodeInterface.php
index 807dfd728..77f03a74c 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/CustomcodeInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/CustomcodeInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/EventInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/EventInterface.php
index c89423427..0f9b96010 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/EventInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/EventInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Extension/InstallInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Extension/InstallInterface.php
index 615b68985..24baca06e 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Extension/InstallInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Extension/InstallInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Field/CoreValidationInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Field/CoreValidationInterface.php
index f0c075a17..8bf9641d8 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Field/CoreValidationInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Field/CoreValidationInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/GetScriptInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/GetScriptInterface.php
index 249ce99aa..c4a3530bc 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/GetScriptInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/GetScriptInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/HistoryInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/HistoryInterface.php
index 8f653ef0c..7bd07c7c2 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/HistoryInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/HistoryInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/LanguageInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/LanguageInterface.php
index 46552e62a..f7d40d5fa 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/LanguageInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/LanguageInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PlaceholderInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PlaceholderInterface.php
index fd2fb40cc..dc6b8cee5 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PlaceholderInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PlaceholderInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PowerInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PowerInterface.php
index b8d1eb3aa..88a3ec3fb 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PowerInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/PowerInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Event.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Event.php
index b5c016cf2..6dda2dc28 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Event.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/Event.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php
index 6efb8a78d..9e6b86ea2 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language.php
index 0008b1616..8370943a1 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language/Extractor.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language/Extractor.php
index a9d3a8214..c3a8cbc7e 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language/Extractor.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Language/Extractor.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder.php
index f1c98abad..102bd0f98 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder/Reverse.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder/Reverse.php
index 04038b14a..6e400fa93 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder/Reverse.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Placeholder/Reverse.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Power.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Power.php
index eba3a4a89..b18500817 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Power.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Power.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
@@ -216,7 +216,7 @@ class Power implements PowerInterface
$tmp_lang_target = $this->config->lang_target;
$this->config->lang_target = 'both';
- // we set the fix usr if needed
+ // we set the fix url if needed
$this->fixUrl
= '"index.php?option=com_componentbuilder&view=powers&task=power.edit&id='
. $this->active[$guid]->id . '" target="_blank"';
@@ -313,6 +313,13 @@ class Power implements PowerInterface
$guiMapper
) . PHP_EOL;
}
+ else
+ {
+ $this->active[$guid]->head = '';
+ }
+
+ // set composer
+ $this->setComposer($guid);
// now set the description
$this->active[$guid]->description = (StringHelper::check($this->active[$guid]->description)) ? $this->placeholder->update(
@@ -400,7 +407,7 @@ class Power implements PowerInterface
$path_array = (array) explode('\\', $this->active[$guid]->namespace);
// make sure all sub folders in src dir is set and remove all characters that will not work in folders naming
- $this->active[$guid]->namespace = NamespaceHelper::safe(str_replace('.', '\\', $this->active[$guid]->namespace));
+ $this->active[$guid]->namespace = $this->getCleanNamespace(str_replace('.', '\\', $this->active[$guid]->namespace));
// make sure it has two or more
if (ArrayHelper::check($path_array) <= 1)
@@ -463,10 +470,10 @@ class Power implements PowerInterface
// make sure the arrays are namespace safe
$path_array = array_map(function ($val) {
- return NamespaceHelper::safe($val);
+ return $this->getCleanNamespace($val);
}, $path_array);
$namespace_array = array_map(function ($val) {
- return NamespaceHelper::safe($val);
+ return $this->getCleanNamespace($val);
}, $namespace_array);
// set the actual class namespace
$this->active[$guid]->_namespace = implode('\\', $namespace_array);
@@ -481,7 +488,7 @@ class Power implements PowerInterface
{
// make sure the arrays are namespace safe
$sub_folder = '/' . implode('/', array_map(function ($val) {
- return NamespaceHelper::safe($val);
+ return $this->getCleanNamespace($val);
}, $src_array));
}
@@ -555,6 +562,69 @@ class Power implements PowerInterface
}
}
+ /**
+ * Set Composer Linked Use and Access Point
+ *
+ * @param string $guid The global unique id of the power
+ * @param array $use The use array
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ protected function setComposer(string $guid)
+ {
+ // does this have composer powers
+ $_composer = (isset($this->active[$guid]->composer)
+ && JsonHelper::check(
+ $this->active[$guid]->composer
+ )) ? json_decode($this->active[$guid]->composer, true) : null;
+
+ if (ArrayHelper::check($_composer))
+ {
+ $this->active[$guid]->composer = [];
+
+ foreach ($_composer as $composer)
+ {
+ if (isset($composer['access_point']) && StringHelper::check($composer['access_point']))
+ {
+ if (isset($composer['namespace']) && ArrayHelper::check($composer['namespace']))
+ {
+ foreach ($composer['namespace'] as $_namespace)
+ {
+ // make sure we have a valid namespace
+ if (isset($_namespace['use']) && StringHelper::check($_namespace['use']) &&
+ strpos($_namespace['use'], '\\') !== false)
+ {
+ // trim possible use or ; added to the namespace
+ $namespace = $this->getCleanNamespace($_namespace['use']);
+
+ // check if still valid
+ if (!StringHelper::check($namespace))
+ {
+ continue;
+ }
+
+ // add to the header of the class
+ $this->addToHeader($guid, $this->getUseNamespace($namespace));
+
+ // add the namespace to this access point
+ if (strpos($namespace, ' as ') !== false)
+ {
+ $namespace = $this->getCleanNamespace(explode(' as ', $namespace)[0]);
+ }
+ $this->active[$guid]->composer[$namespace] = $composer['access_point'];
+ }
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ $this->active[$guid]->composer = null;
+ }
+ }
+
/**
* Set Implements Interface classes
*
@@ -663,27 +733,75 @@ class Power implements PowerInterface
if ($this->set($u))
{
// get the namespace
- $add_use = $this->get($u, 1)->namespace;
+ $namespace = $this->get($u, 1)->namespace;
// check if it has an AS option
- if (isset($as[$u]) && StringHelper::check($as[$u]) && $as[$u] !== 'default')
+ if (isset($as[$u]) && StringHelper::check($as[$u]))
{
- $add_use = 'use ' . $add_use . ' as ' . $as[$u] . ';';
+ // add to the header of the class
+ $this->addToHeader($guid, $this->getUseNamespace($namespace, $as[$u]));
}
else
{
- $add_use = 'use ' . $add_use . ';';
- }
-
- // check if it is already added manually
- if (strpos($this->active[$guid]->head, $add_use) === false)
- {
- $this->active[$guid]->head .= $add_use . PHP_EOL;
+ // add to the header of the class
+ $this->addToHeader($guid, $this->getUseNamespace($namespace));
}
}
}
}
}
+
+ /**
+ * Get Clean Namespace without use or ; as part of the name space
+ *
+ * @param string $namespace The actual name space
+ *
+ * @return string
+ * @since 3.2.0
+ */
+ protected function getCleanNamespace(string $namespace): string
+ {
+ // trim possible (use) or (;) or (starting or ending \) added to the namespace
+ return NamespaceHelper::safe(str_replace(['use ', ';'], '', $namespace));
+ }
+
+ /**
+ * Get [use Namespace\Class;]
+ *
+ * @param string $namespace The actual name space
+ * @param string $as The use as name (default is none)
+ *
+ * @return string
+ * @since 3.2.0
+ */
+ protected function getUseNamespace(string $namespace, string $as = 'default'): string
+ {
+ // check if it has an AS option
+ if ($as !== 'default')
+ {
+ return 'use ' . $namespace . ' as ' . $as . ';';
+ }
+ return 'use ' . $namespace . ';';
+ }
+
+ /**
+ * Add to class header
+ *
+ * @param string $guid The global unique id of the power
+ * @param string $string The string to add to header
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ protected function addToHeader(string $guid, string $string)
+ {
+ // check if it is already added manually
+ if (isset($this->active[$guid]->head) &&
+ strpos($this->active[$guid]->head, $string) === false)
+ {
+ $this->active[$guid]->head .= $string . PHP_EOL;
+ }
+ }
}
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Registry.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Registry.php
index a0cfeb17a..fd315fc31 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Registry.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Registry.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Compiler.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Compiler.php
index f51b43992..c2c332f46 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Compiler.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Compiler.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
@@ -16,6 +16,7 @@ use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Registry;
+use VDM\Joomla\Componentbuilder\Compiler\Content;
/**
@@ -40,6 +41,9 @@ class Compiler implements ServiceProviderInterface
$container->alias(Registry::class, 'Registry')
->share('Registry', [$this, 'getRegistry'], true);
+
+ $container->alias(Content::class, 'Content')
+ ->share('Content', [$this, 'getContent'], true);
}
/**
@@ -67,6 +71,19 @@ class Compiler implements ServiceProviderInterface
{
return new Registry();
}
+
+ /**
+ * Get the Compiler Content
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Content
+ * @since 3.2.0
+ */
+ public function getContent(Container $container): Content
+ {
+ return new Content();
+ }
}
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php
index 828c11dcf..7c7008f61 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php
index 230618e19..152fc59a6 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Event.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Event.php
index bb34683bf..091f7c2ea 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Event.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Event.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Extension.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Extension.php
index 9b093debf..50d751bae 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Extension.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Extension.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php
index f3d8448c2..5bbd6ace1 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php
index 243960b27..7b3a67d4e 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php
index 6547fa84e..de702b881 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Placeholder.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Placeholder.php
index 7b72e53a9..c25b86f29 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Placeholder.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Placeholder.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php
index 00498ff0d..83fd34c36 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Indent.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Indent.php
index 6f6af75e3..7ec5a2a39 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Indent.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Indent.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Line.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Line.php
index 2bde1fca5..45bdf9527 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Line.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Line.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Path.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Path.php
index 2f796c6f7..0826d9bbd 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Path.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Path.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Placefix.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Placefix.php
index 0d74d5fd0..57b47be99 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Placefix.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Placefix.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Insert.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Insert.php
index 73a8f9cae..bf119f340 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Insert.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Insert.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Load.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Load.php
index fe83d8b91..743e504b0 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Load.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Database/Load.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/FactoryInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/FactoryInterface.php
index 2ea589c1a..aff54067b 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/FactoryInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/FactoryInterface.php
@@ -1,13 +1,13 @@
- * @git Joomla Component Builder
- * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
- * @license GNU General Public License version 2 or later; see LICENSE.txt
- */
+/**
+ * @package Joomla.Component.Builder
+ *
+ * @created 4th September, 2022
+ * @author Llewellyn van der Merwe
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
namespace VDM\Joomla\Componentbuilder\Interfaces;
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/InsertInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/InsertInterface.php
index dc05284ca..59481aec3 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/InsertInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/InsertInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/LoadInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/LoadInterface.php
index 4da8975ea..e8c441874 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/LoadInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/LoadInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/Tableinterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/Tableinterface.php
index c4e344404..5996ebea8 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/Tableinterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Interfaces/Tableinterface.php
@@ -1,13 +1,13 @@
- * @git Joomla Component Builder
- * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
- * @license GNU General Public License version 2 or later; see LICENSE.txt
- */
+/**
+ * @package Joomla.Component.Builder
+ *
+ * @created 4th September, 2022
+ * @author Llewellyn van der Merwe
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
namespace VDM\Joomla\Componentbuilder\Interfaces;
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/Insert.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/Insert.php
new file mode 100644
index 000000000..7c1a968c1
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/Insert.php
@@ -0,0 +1,187 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Package\Database;
+
+
+use Joomla\CMS\Factory as JoomlaFactory;
+use VDM\Joomla\Componentbuilder\Search\Factory;
+use VDM\Joomla\Componentbuilder\Search\Config;
+use VDM\Joomla\Componentbuilder\Table;
+use VDM\Joomla\Componentbuilder\Search\Model\Insert as Model;
+use VDM\Joomla\Utilities\ArrayHelper;
+
+
+/**
+ * Package Database Insert
+ *
+ * @since 3.2.0
+ */
+class Insert
+{
+ /**
+ * Search Config
+ *
+ * @var Config
+ * @since 3.2.0
+ */
+ protected Config $config;
+
+ /**
+ * Search Table
+ *
+ * @var Table
+ * @since 3.2.0
+ */
+ protected Table $table;
+
+ /**
+ * Search Model
+ *
+ * @var Model
+ * @since 3.2.0
+ */
+ protected Model $model;
+
+ /**
+ * Database object to query local DB
+ *
+ * @var \JDatabaseDriver
+ * @since 3.2.0
+ **/
+ protected \JDatabaseDriver $db;
+
+ /**
+ * Constructor
+ *
+ * @param Config|null $config The search config object.
+ * @param Table|null $table The search table object.
+ * @param Model|null $model The search get model object.
+ * @param \JDatabaseDriver|null $db The database object.
+ *
+ * @since 3.2.0
+ */
+ public function __construct(?Config $config = null, ?Table $table = null,
+ ?Model $model = null, ?\JDatabaseDriver $db = null)
+ {
+ $this->config = $config ?: Factory::_('Config');
+ $this->table = $table ?: Factory::_('Table');
+ $this->model = $model ?: Factory::_('Set.Model');
+ $this->db = $db ?: JoomlaFactory::getDbo();
+ }
+
+ /**
+ * Set values to a given table
+ * Example: $this->value(Value, 23, 'value_key', 'table_name');
+ *
+ * @param mixed $value The field value
+ * @param int $id The item ID
+ * @param string $field The field key
+ * @param string|null $table The table
+ *
+ * @return bool
+ * @since 3.2.0
+ */
+ public function value($value, int $id, string $field, ?string $table = null): bool
+ {
+ // load the table
+ if (empty($table))
+ {
+ $table = $this->config->table_name;
+ }
+
+ // check if this is a valid field and table
+ if ($id > 0 && ($name = $this->table->get($table, $field, 'name')) !== null)
+ {
+ // build the object
+ $item = new \stdClass();
+ $item->id = $id;
+ $item->{$name} = $this->model->value($value, $name, $table);
+
+ // Update the column of this table using id as the primary key.
+ return $this->db->updateObject('#__componentbuilder_' . $table, $item, 'id');
+ }
+ return false;
+ }
+
+ /**
+ * Set values to a given table
+ * Example: $this->item(Object, 23, 'table_name');
+ *
+ * @param object $item The item to save
+ * @param string|null $table The table
+ *
+ * @return bool
+ * @since 3.2.0
+ */
+ public function item(object $item, ?string $table = null): bool
+ {
+ // load the table
+ if (empty($table))
+ {
+ $table = $this->config->table_name;
+ }
+
+ // check if this is a valid table
+ if (($fields = $this->table->fields($table)) !== null)
+ {
+ // model the item values
+ foreach ($fields as $field)
+ {
+ if (isset($item->{$field}))
+ {
+ $item->{$field} = $this->model->value($item->{$field}, $field, $table);
+ }
+ }
+
+ // Update the column of this table using id as the primary key.
+ return $this->db->updateObject('#__componentbuilder_' . $table, $item, 'id');
+ }
+ return false;
+ }
+
+ /**
+ * Set values to a given table
+ * Example: $this->items(Array, 'table_name');
+ *
+ * @param array|null $items The items being saved
+ * @param string|null $table The table
+ *
+ * @return bool
+ * @since 3.2.0
+ */
+ public function items(?array $items, string $table = null): bool
+ {
+ // load the table
+ if (empty($table))
+ {
+ $table = $this->config->table_name;
+ }
+
+ // check if this is a valid table
+ if (ArrayHelper::check($items))
+ {
+ $success = true;
+ foreach ($items as $item)
+ {
+ if ($this->item($item, $table) !== true)
+ {
+ $success = false;
+ break;
+ }
+ }
+ return $success;
+ }
+ return false;
+ }
+
+}
+
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/Load.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/Load.php
new file mode 100644
index 000000000..0d32dcea6
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/Load.php
@@ -0,0 +1,128 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Package\Database;
+
+
+use VDM\Joomla\Componentbuilder\Package\Factory;
+use VDM\Joomla\Componentbuilder\Table;
+use VDM\Joomla\Componentbuilder\Database\Load as Database;
+
+
+/**
+ * Package Database Load
+ *
+ * @since 3.2.0
+ */
+class Load
+{
+ /**
+ * Search Table
+ *
+ * @var Table
+ * @since 3.2.0
+ */
+ protected Table $table;
+
+ /**
+ * Database Load
+ *
+ * @var Database
+ * @since 3.2.0
+ */
+ protected Database $load;
+
+ /**
+ * Constructor
+ *
+ * @param Table|null $table The core table object.
+ * @param Database|null $load The database object.
+ *
+ * @since 3.2.0
+ */
+ public function __construct(?Table $table = null, ?Database $load = null)
+ {
+ $this->table = $table ?: Factory::_('Table');
+ $this->load = $load ?: Factory::_('Load');
+ }
+
+ /**
+ * Get a value from a given table
+ * Example: $this->value(23, 'value_key', 'table_name');
+ *
+ * @param int $id The item ID
+ * @param string $field The field key
+ * @param string $table The table
+ *
+ * @return mixed
+ * @since 3.2.0
+ */
+ public function value(int $id, string $field, string $table)
+ {
+ // check if this is a valid table
+ if ($id > 0 && $this->table->exist($table, $field))
+ {
+ return $this->load->value(
+ ["a.${field}" => $field], ['a' => $table], ['a.id' => $id]
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * Get values from a given table
+ * Example: $this->item(23, 'table_name');
+ *
+ * @param int $id The item ID
+ * @param string $table The table
+ *
+ * @return object|null
+ * @since 3.2.0
+ */
+ public function item(int $id, ?string $table): ?object
+ {
+ // check if this is a valid table
+ if ($id > 0 && $this->table->exist($table))
+ {
+ return $this->load->item(
+ ['all' => 'a.*'], ['a' => $table], ['a.id' => $id]
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * Get values from a given table
+ * Example: $this->items($ids, 'table_name');
+ *
+ * @param array $ids The item ids
+ * @param string $table The table
+ *
+ * @return array|null
+ * @since 3.2.0
+ */
+ public function items(array $ids, string $table): ?array
+ {
+ // check if this is a valid table
+ if ($this->table->exist($table))
+ {
+ return $this->load->items(
+ ['all' => 'a.*'], ['a' => $table], ['a.id' => $ids]
+ );
+ }
+
+ return null;
+ }
+
+}
+
diff --git a/libraries/phpseclib/index.html b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/index.html
similarity index 100%
rename from libraries/phpseclib/index.html
rename to libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Database/index.html
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Factory.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Factory.php
new file mode 100644
index 000000000..5492bbafc
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Factory.php
@@ -0,0 +1,81 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Package;
+
+
+use Joomla\DI\Container;
+use VDM\Joomla\Componentbuilder\Service\Crypt;
+use VDM\Joomla\Componentbuilder\Package\Service\Database;
+use VDM\Joomla\Componentbuilder\Interfaces\FactoryInterface;
+
+
+/**
+ * Package Factory
+ *
+ * @since 3.2.0
+ */
+abstract class Factory implements FactoryInterface
+{
+ /**
+ * Global Package Container
+ *
+ * @var Container
+ * @since 3.2.0
+ **/
+ protected static $container = null;
+
+ /**
+ * Get any class from the package container
+ *
+ * @param string $key The container class key
+ *
+ * @return Mixed
+ * @since 3.2.0
+ */
+ public static function _($key)
+ {
+ return self::getContainer()->get($key);
+ }
+
+ /**
+ * Get the global package container
+ *
+ * @return Container
+ * @since 3.2.0
+ */
+ public static function getContainer(): Container
+ {
+ if (!self::$container)
+ {
+ self::$container = self::createContainer();
+ }
+
+ return self::$container;
+ }
+
+ /**
+ * Create a container object
+ *
+ * @return Container
+ * @since 3.2.0
+ */
+ protected static function createContainer(): Container
+ {
+ $container = (new Container())
+ ->registerServiceProvider(new Database())
+ ->registerServiceProvider(new Crypt());
+
+ return $container;
+ }
+
+}
+
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Service/Database.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Service/Database.php
new file mode 100644
index 000000000..a57688eee
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Service/Database.php
@@ -0,0 +1,112 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Package\Service;
+
+
+use Joomla\DI\Container;
+use Joomla\DI\ServiceProviderInterface;
+use VDM\Joomla\Componentbuilder\Package\Database\Load as LoadDatabase;
+use VDM\Joomla\Componentbuilder\Database\Load;
+use VDM\Joomla\Componentbuilder\Package\Database\Insert as InsertDatabase;
+use VDM\Joomla\Componentbuilder\Database\Insert;
+
+
+/**
+ * Database Service Provider
+ *
+ * @since 3.2.0
+ */
+class Database implements ServiceProviderInterface
+{
+ /**
+ * Registers the service provider with a DI container.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ public function register(Container $container)
+ {
+ $container->alias(Load::class, 'Load')
+ ->share('Load', [$this, 'getLoad'], true);
+
+ $container->alias(LoadDatabase::class, 'Load.Database')
+ ->share('Load.Database', [$this, 'getDatabaseLoad'], true);
+
+ $container->alias(Insert::class, 'Insert')
+ ->share('Insert', [$this, 'getInsert'], true);
+
+ $container->alias(InsertDatabase::class, 'Insert.Database')
+ ->share('Insert.Database', [$this, 'getDatabaseInsert'], true);
+ }
+
+ /**
+ * Get the Core Load Database
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Load
+ * @since 3.2.0
+ */
+ public function getLoad(Container $container): Load
+ {
+ return new Load();
+ }
+
+ /**
+ * Get the Load Database
+ *
+ * @param Container $container The DI container.
+ *
+ * @return LoadDatabase
+ * @since 3.2.0
+ */
+ public function getDatabaseLoad(Container $container): LoadDatabase
+ {
+ return new LoadDatabase(
+ $container->get('Table'),
+ $container->get('Load')
+ );
+ }
+
+ /**
+ * Get the Core Insert Database
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Insert
+ * @since 3.2.0
+ */
+ public function getInsert(Container $container): Insert
+ {
+ return new Insert();
+ }
+
+ /**
+ * Get the Insert Database
+ *
+ * @param Container $container The DI container.
+ *
+ * @return InsertDatabase
+ * @since 3.2.0
+ */
+ public function getDatabaseInsert(Container $container): InsertDatabase
+ {
+ return new InsertDatabase(
+ $container->get('Table'),
+ $container->get('Insert')
+ );
+ }
+
+}
+
diff --git a/libraries/phpseclib/vendor/index.html b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Service/index.html
similarity index 100%
rename from libraries/phpseclib/vendor/index.html
rename to libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/Service/index.html
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/index.html b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Package/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Engine.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Engine.php
index 9ab995a9f..4aa4982f8 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Engine.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Engine.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Model.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Model.php
index 59a789516..794dd9dd1 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Model.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Abstraction/Model.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent.php
index 6a8865955..ef7d34241 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Find.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Find.php
index ecad98aa8..dda386d24 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Find.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Find.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Replace.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Replace.php
index 042418e95..2fd4bae01 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Replace.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Replace.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Search.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Search.php
index 619c69ca6..7f2ef7641 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Search.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Search.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Update.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Update.php
index 155de4252..f5f4cb6ea 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Update.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Agent/Update.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Config.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Config.php
index 7645f40fc..004d4c76f 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Config.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Config.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php
index 667bb81df..0c3cc724b 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php
index 6bb7eba15..682a0aae5 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
@@ -181,7 +181,7 @@ class Load implements LoadInterface
// get the title value
$title = $this->table->titleName($table);
// set order
- $order = [$title => 'ASC'];
+ $order = ['a.' . $title => 'ASC'];
// select all
$where = null;
// no limit
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Basic.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Basic.php
index 533314b4d..b7ae7c612 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Basic.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Basic.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Regex.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Regex.php
index a13cd9c33..26119258c 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Regex.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Engine/Regex.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Factory.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Factory.php
index fa2066ef9..6a80674e5 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Factory.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Factory.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/FindInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/FindInterface.php
index 08082791d..ea34b2d00 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/FindInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/FindInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php
index c00df007e..171b1e5d5 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php
index 548a67a56..6c38fcc42 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ModelInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ModelInterface.php
index 4b91bd55e..b0abef9da 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ModelInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ModelInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ReplaceInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ReplaceInterface.php
index a284bd543..6bc17f5d3 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ReplaceInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/ReplaceInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchInterface.php
index bffbc6420..29e944e95 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchTypeInterface.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchTypeInterface.php
index 869fc0096..d120860da 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchTypeInterface.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Interfaces/SearchTypeInterface.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Insert.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Insert.php
index ebde3c5e2..bfc3eca4d 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Insert.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Insert.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Load.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Load.php
index 75eccec8e..dd0cb981f 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Load.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Model/Load.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Agent.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Agent.php
index 62899ea25..17ad513e3 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Agent.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Agent.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Database.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Database.php
index 252b9e02b..cd0aece92 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Database.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Database.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
@@ -16,7 +16,6 @@ use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;
use VDM\Joomla\Componentbuilder\Database\Load;
use VDM\Joomla\Componentbuilder\Search\Database\Load as LoadDatabase;
-use VDM\Joomla\Componentbuilder\Database\Insert;
use VDM\Joomla\Componentbuilder\Search\Database\Insert as InsertDatabase;
@@ -43,9 +42,6 @@ class Database implements ServiceProviderInterface
$container->alias(LoadDatabase::class, 'Load.Database')
->share('Load.Database', [$this, 'getDatabaseLoad'], true);
- $container->alias(Insert::class, 'Insert')
- ->share('Insert', [$this, 'getInsert'], true);
-
$container->alias(InsertDatabase::class, 'Insert.Database')
->share('Insert.Database', [$this, 'getDatabaseInsert'], true);
}
@@ -81,19 +77,6 @@ class Database implements ServiceProviderInterface
);
}
- /**
- * Get the Core Insert Database
- *
- * @param Container $container The DI container.
- *
- * @return Insert
- * @since 3.2.0
- */
- public function getInsert(Container $container): Insert
- {
- return new Insert();
- }
-
/**
* Get the Insert Database
*
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Model.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Model.php
index 1af1977a2..f53b7afde 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Model.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Model.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Search.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Search.php
index 2ba396339..945be9885 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Search.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Search/Service/Search.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Service/Crypt.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Service/Crypt.php
new file mode 100644
index 000000000..963b1e8a3
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Service/Crypt.php
@@ -0,0 +1,397 @@
+
+ * @git Joomla Component Builder
+ * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace VDM\Joomla\Componentbuilder\Service;
+
+
+use Joomla\DI\Container;
+use Joomla\DI\ServiceProviderInterface;
+use phpseclibthree\Crypt\AES;
+use phpseclibthree\Crypt\Rijndael;
+use phpseclibthree\Crypt\DES;
+
+
+/**
+ * Phpseclib Crypt Service Provider
+ *
+ * @since 3.2.0
+ */
+class Crypt implements ServiceProviderInterface
+{
+ /**
+ * Registers the service provider with a DI container.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return void
+ * @since 3.2.0
+ */
+ public function register(Container $container)
+ {
+ $container->alias(AES::class, 'Crypt.AES')
+ ->share('Crypt.AES', [$this, 'getAesCBC'], true)
+ ->share('Crypt.AES.CTR', [$this, 'getAesCTR'], true)
+ ->share('Crypt.AES.ECB', [$this, 'getAesECB'], true)
+ ->share('Crypt.AES.CBC3', [$this, 'getAesCBC3'], true)
+ ->share('Crypt.AES.CFB', [$this, 'getAesCFB'], true)
+ ->share('Crypt.AES.CFB8', [$this, 'getAesCFB8'], true)
+ ->share('Crypt.AES.OFB', [$this, 'getAesOFB'], true)
+ ->share('Crypt.AES.GCM', [$this, 'getAesGCM'], true);
+
+ $container->alias(Rijndael::class, 'Crypt.Rijndael')
+ ->share('Crypt.Rijndael', [$this, 'getRijndaelCBC'], true)
+ ->share('Crypt.Rijndael.CTR', [$this, 'getRijndaelCTR'], true)
+ ->share('Crypt.Rijndael.ECB', [$this, 'getRijndaelECB'], true)
+ ->share('Crypt.Rijndael.CBC3', [$this, 'getRijndaelCBC3'], true)
+ ->share('Crypt.Rijndael.CFB', [$this, 'getRijndaelCFB'], true)
+ ->share('Crypt.Rijndael.CFB8', [$this, 'getRijndaelCFB8'], true)
+ ->share('Crypt.Rijndael.OFB', [$this, 'getRijndaelOFB'], true)
+ ->share('Crypt.Rijndael.GCM', [$this, 'getRijndaelGCM'], true);
+
+ $container->alias(DES::class, 'Crypt.DES')
+ ->share('Crypt.DES', [$this, 'getDesCBC'], true)
+ ->share('Crypt.DES.CTR', [$this, 'getDesCTR'], true)
+ ->share('Crypt.DES.ECB', [$this, 'getDesECB'], true)
+ ->share('Crypt.DES.CBC3', [$this, 'getDesCBC3'], true)
+ ->share('Crypt.DES.CFB', [$this, 'getDesCFB'], true)
+ ->share('Crypt.DES.CFB8', [$this, 'getDesCFB8'], true)
+ ->share('Crypt.DES.OFB', [$this, 'getDesOFB'], true)
+ ->share('Crypt.DES.GCM', [$this, 'getDesGCM'], true)
+ ->share('Crypt.DES.STREAM', [$this, 'getDesSTREAM'], true);
+ }
+
+ /**
+ * Get the AES Cyper with CBC mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesCBC(Container $container): AES
+ {
+ return new AES('cbc');
+ }
+
+ /**
+ * Get the AES Cyper with CTR mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesCTR(Container $container): AES
+ {
+ return new AES('ctr');
+ }
+
+ /**
+ * Get the AES Cyper with ECB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesECB(Container $container): AES
+ {
+ return new AES('ecb');
+ }
+
+ /**
+ * Get the AES Cyper with CBC3 mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesCBC3(Container $container): AES
+ {
+ return new AES('cbc3');
+ }
+
+ /**
+ * Get the AES Cyper with CFB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesCFB(Container $container): AES
+ {
+ return new AES('cfb');
+ }
+
+ /**
+ * Get the AES Cyper with CFB8 mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesCFB8(Container $container): AES
+ {
+ return new AES('cfb8');
+ }
+
+ /**
+ * Get the AES Cyper with OFB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesOFB(Container $container): AES
+ {
+ return new AES('ofb');
+ }
+
+ /**
+ * Get the AES Cyper with GCM mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return AES
+ * @since 3.2.0
+ */
+ public function getAesGCM(Container $container): AES
+ {
+ return new AES('gcm');
+ }
+
+ /**
+ * Get the Rijndael Cyper with CBC mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelCBC(Container $container): Rijndael
+ {
+ return new Rijndael('cbc');
+ }
+
+ /**
+ * Get the Rijndael Cyper with CTR mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelCTR(Container $container): Rijndael
+ {
+ return new Rijndael('ctr');
+ }
+
+ /**
+ * Get the Rijndael Cyper with ECB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelECB(Container $container): Rijndael
+ {
+ return new Rijndael('ecb');
+ }
+
+ /**
+ * Get the Rijndael Cyper with CBC3 mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelCBC3(Container $container): Rijndael
+ {
+ return new Rijndael('cbc3');
+ }
+
+ /**
+ * Get the Rijndael Cyper with CFB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelCFB(Container $container): Rijndael
+ {
+ return new Rijndael('cfb');
+ }
+
+ /**
+ * Get the Rijndael Cyper with CFB8 mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelCFB8(Container $container): Rijndael
+ {
+ return new Rijndael('cfb8');
+ }
+
+ /**
+ * Get the Rijndael Cyper with OFB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelOFB(Container $container): Rijndael
+ {
+ return new Rijndael('ofb');
+ }
+
+ /**
+ * Get the Rijndael Cyper with GCM mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return Rijndael
+ * @since 3.2.0
+ */
+ public function getRijndaelGCM(Container $container): Rijndael
+ {
+ return new Rijndael('gcm');
+ }
+
+ /**
+ * Get the DES Cyper with CBC mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesCBC(Container $container): DES
+ {
+ return new DES('cbc');
+ }
+
+ /**
+ * Get the DES Cyper with CTR mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesCTR(Container $container): DES
+ {
+ return new DES('ctr');
+ }
+
+ /**
+ * Get the DES Cyper with ECB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesECB(Container $container): DES
+ {
+ return new DES('ecb');
+ }
+
+ /**
+ * Get the DES Cyper with CBC3 mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesCBC3(Container $container): DES
+ {
+ return new DES('cbc3');
+ }
+
+ /**
+ * Get the DES Cyper with CFB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesCFB(Container $container): DES
+ {
+ return new DES('cfb');
+ }
+
+ /**
+ * Get the DES Cyper with CFB8 mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesCFB8(Container $container): DES
+ {
+ return new DES('cfb8');
+ }
+
+ /**
+ * Get the DES Cyper with OFB mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesOFB(Container $container): DES
+ {
+ return new DES('ofb');
+ }
+
+ /**
+ * Get the DES Cyper with GCM mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesGCM(Container $container): DES
+ {
+ return new DES('gcm');
+ }
+
+ /**
+ * Get the DES Cyper with STREAM mode
+ *
+ * @param Container $container The DI container.
+ *
+ * @return DES
+ * @since 3.2.0
+ */
+ public function getDesSTREAM(Container $container): DES
+ {
+ return new DES('stream');
+ }
+
+}
+
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Service/index.html b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Service/index.html
new file mode 100644
index 000000000..fa6d84e80
--- /dev/null
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Service/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php
index a5b45b2ca..097f721a3 100644
--- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php
+++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php
@@ -2,7 +2,7 @@
/**
* @package Joomla.Component.Builder
*
- * @created 3rd September, 2022
+ * @created 4th September, 2022
* @author Llewellyn van der Merwe
* @git Joomla Component Builder
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
@@ -28,7 +28,7 @@ class Table implements Tableinterface
* @var array
* @since 3.2.0
**/
- protected $tables = [
+ protected array $tables = [
'joomla_component' => [
'system_name' => [
'name' => 'system_name',
@@ -756,14 +756,6 @@ class Table implements Tableinterface
'store' => 'json',
'tab_name' => 'Code',
],
- 'main_class_code' => [
- 'name' => 'main_class_code',
- 'type' => 'editor',
- 'title' => false,
- 'list' => 'powers',
- 'store' => 'base64',
- 'tab_name' => 'Code',
- ],
'description' => [
'name' => 'description',
'type' => 'textarea',
@@ -780,6 +772,14 @@ class Table implements Tableinterface
'store' => 'base64',
'tab_name' => 'Licensing',
],
+ 'composer' => [
+ 'name' => 'composer',
+ 'type' => 'subform',
+ 'title' => false,
+ 'list' => 'powers',
+ 'store' => 'json',
+ 'tab_name' => 'Composer',
+ ],
'property_selection' => [
'name' => 'property_selection',
'type' => 'subform',
@@ -828,6 +828,14 @@ class Table implements Tableinterface
'store' => 'json',
'tab_name' => 'Code',
],
+ 'main_class_code' => [
+ 'name' => 'main_class_code',
+ 'type' => 'editor',
+ 'title' => false,
+ 'list' => 'powers',
+ 'store' => 'base64',
+ 'tab_name' => 'Code',
+ ],
'guid' => [
'name' => 'guid',
'type' => 'text',
diff --git a/libraries/phpseclib/vendor/.htaccess b/libraries/phpseclib/vendor/.htaccess
deleted file mode 100644
index 9afb1a1b3..000000000
--- a/libraries/phpseclib/vendor/.htaccess
+++ /dev/null
@@ -1,9 +0,0 @@
-# Apache 2.4+
-
- Require all denied
-
-
-# Apache 2.0-2.2
-
- Deny from all
-
diff --git a/libraries/phpseclib/vendor/autoload.php b/libraries/phpseclib/vendor/autoload.php
deleted file mode 100644
index 87a2a0a05..000000000
--- a/libraries/phpseclib/vendor/autoload.php
+++ /dev/null
@@ -1,7 +0,0 @@
-
- * Jordi Boggiano
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer\Autoload;
-
-/**
- * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
- *
- * $loader = new \Composer\Autoload\ClassLoader();
- *
- * // register classes with namespaces
- * $loader->add('Symfony\Component', __DIR__.'/component');
- * $loader->add('Symfony', __DIR__.'/framework');
- *
- * // activate the autoloader
- * $loader->register();
- *
- * // to enable searching the include path (eg. for PEAR packages)
- * $loader->setUseIncludePath(true);
- *
- * In this example, if you try to use a class in the Symfony\Component
- * namespace or one of its children (Symfony\Component\Console for instance),
- * the autoloader will first look for the class under the component/
- * directory, and it will then fallback to the framework/ directory if not
- * found before giving up.
- *
- * This class is loosely based on the Symfony UniversalClassLoader.
- *
- * @author Fabien Potencier
- * @author Jordi Boggiano
- * @see https://www.php-fig.org/psr/psr-0/
- * @see https://www.php-fig.org/psr/psr-4/
- */
-class ClassLoader
-{
- /** @var ?string */
- private $vendorDir;
-
- // PSR-4
- /**
- * @var array[]
- * @psalm-var array>
- */
- private $prefixLengthsPsr4 = array();
- /**
- * @var array[]
- * @psalm-var array>
- */
- private $prefixDirsPsr4 = array();
- /**
- * @var array[]
- * @psalm-var array
- */
- private $fallbackDirsPsr4 = array();
-
- // PSR-0
- /**
- * @var array[]
- * @psalm-var array>
- */
- private $prefixesPsr0 = array();
- /**
- * @var array[]
- * @psalm-var array
- */
- private $fallbackDirsPsr0 = array();
-
- /** @var bool */
- private $useIncludePath = false;
-
- /**
- * @var string[]
- * @psalm-var array
- */
- private $classMap = array();
-
- /** @var bool */
- private $classMapAuthoritative = false;
-
- /**
- * @var bool[]
- * @psalm-var array
- */
- private $missingClasses = array();
-
- /** @var ?string */
- private $apcuPrefix;
-
- /**
- * @var self[]
- */
- private static $registeredLoaders = array();
-
- /**
- * @param ?string $vendorDir
- */
- public function __construct($vendorDir = null)
- {
- $this->vendorDir = $vendorDir;
- }
-
- /**
- * @return string[]
- */
- public function getPrefixes()
- {
- if (!empty($this->prefixesPsr0)) {
- return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
- }
-
- return array();
- }
-
- /**
- * @return array[]
- * @psalm-return array>
- */
- public function getPrefixesPsr4()
- {
- return $this->prefixDirsPsr4;
- }
-
- /**
- * @return array[]
- * @psalm-return array
- */
- public function getFallbackDirs()
- {
- return $this->fallbackDirsPsr0;
- }
-
- /**
- * @return array[]
- * @psalm-return array
- */
- public function getFallbackDirsPsr4()
- {
- return $this->fallbackDirsPsr4;
- }
-
- /**
- * @return string[] Array of classname => path
- * @psalm-var array
- */
- public function getClassMap()
- {
- return $this->classMap;
- }
-
- /**
- * @param string[] $classMap Class to filename map
- * @psalm-param array $classMap
- *
- * @return void
- */
- public function addClassMap(array $classMap)
- {
- if ($this->classMap) {
- $this->classMap = array_merge($this->classMap, $classMap);
- } else {
- $this->classMap = $classMap;
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix, either
- * appending or prepending to the ones previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param string[]|string $paths The PSR-0 root directories
- * @param bool $prepend Whether to prepend the directories
- *
- * @return void
- */
- public function add($prefix, $paths, $prepend = false)
- {
- if (!$prefix) {
- if ($prepend) {
- $this->fallbackDirsPsr0 = array_merge(
- (array) $paths,
- $this->fallbackDirsPsr0
- );
- } else {
- $this->fallbackDirsPsr0 = array_merge(
- $this->fallbackDirsPsr0,
- (array) $paths
- );
- }
-
- return;
- }
-
- $first = $prefix[0];
- if (!isset($this->prefixesPsr0[$first][$prefix])) {
- $this->prefixesPsr0[$first][$prefix] = (array) $paths;
-
- return;
- }
- if ($prepend) {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- (array) $paths,
- $this->prefixesPsr0[$first][$prefix]
- );
- } else {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- $this->prefixesPsr0[$first][$prefix],
- (array) $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace, either
- * appending or prepending to the ones previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param string[]|string $paths The PSR-4 base directories
- * @param bool $prepend Whether to prepend the directories
- *
- * @throws \InvalidArgumentException
- *
- * @return void
- */
- public function addPsr4($prefix, $paths, $prepend = false)
- {
- if (!$prefix) {
- // Register directories for the root namespace.
- if ($prepend) {
- $this->fallbackDirsPsr4 = array_merge(
- (array) $paths,
- $this->fallbackDirsPsr4
- );
- } else {
- $this->fallbackDirsPsr4 = array_merge(
- $this->fallbackDirsPsr4,
- (array) $paths
- );
- }
- } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
- // Register directories for a new namespace.
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
- } elseif ($prepend) {
- // Prepend directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- (array) $paths,
- $this->prefixDirsPsr4[$prefix]
- );
- } else {
- // Append directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- $this->prefixDirsPsr4[$prefix],
- (array) $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix,
- * replacing any others previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param string[]|string $paths The PSR-0 base directories
- *
- * @return void
- */
- public function set($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr0 = (array) $paths;
- } else {
- $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace,
- * replacing any others previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param string[]|string $paths The PSR-4 base directories
- *
- * @throws \InvalidArgumentException
- *
- * @return void
- */
- public function setPsr4($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr4 = (array) $paths;
- } else {
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
- }
- }
-
- /**
- * Turns on searching the include path for class files.
- *
- * @param bool $useIncludePath
- *
- * @return void
- */
- public function setUseIncludePath($useIncludePath)
- {
- $this->useIncludePath = $useIncludePath;
- }
-
- /**
- * Can be used to check if the autoloader uses the include path to check
- * for classes.
- *
- * @return bool
- */
- public function getUseIncludePath()
- {
- return $this->useIncludePath;
- }
-
- /**
- * Turns off searching the prefix and fallback directories for classes
- * that have not been registered with the class map.
- *
- * @param bool $classMapAuthoritative
- *
- * @return void
- */
- public function setClassMapAuthoritative($classMapAuthoritative)
- {
- $this->classMapAuthoritative = $classMapAuthoritative;
- }
-
- /**
- * Should class lookup fail if not found in the current class map?
- *
- * @return bool
- */
- public function isClassMapAuthoritative()
- {
- return $this->classMapAuthoritative;
- }
-
- /**
- * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
- *
- * @param string|null $apcuPrefix
- *
- * @return void
- */
- public function setApcuPrefix($apcuPrefix)
- {
- $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
- }
-
- /**
- * The APCu prefix in use, or null if APCu caching is not enabled.
- *
- * @return string|null
- */
- public function getApcuPrefix()
- {
- return $this->apcuPrefix;
- }
-
- /**
- * Registers this instance as an autoloader.
- *
- * @param bool $prepend Whether to prepend the autoloader or not
- *
- * @return void
- */
- public function register($prepend = false)
- {
- spl_autoload_register(array($this, 'loadClass'), true, $prepend);
-
- if (null === $this->vendorDir) {
- return;
- }
-
- if ($prepend) {
- self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
- } else {
- unset(self::$registeredLoaders[$this->vendorDir]);
- self::$registeredLoaders[$this->vendorDir] = $this;
- }
- }
-
- /**
- * Unregisters this instance as an autoloader.
- *
- * @return void
- */
- public function unregister()
- {
- spl_autoload_unregister(array($this, 'loadClass'));
-
- if (null !== $this->vendorDir) {
- unset(self::$registeredLoaders[$this->vendorDir]);
- }
- }
-
- /**
- * Loads the given class or interface.
- *
- * @param string $class The name of the class
- * @return true|null True if loaded, null otherwise
- */
- public function loadClass($class)
- {
- if ($file = $this->findFile($class)) {
- includeFile($file);
-
- return true;
- }
-
- return null;
- }
-
- /**
- * Finds the path to the file where the class is defined.
- *
- * @param string $class The name of the class
- *
- * @return string|false The path if found, false otherwise
- */
- public function findFile($class)
- {
- // class map lookup
- if (isset($this->classMap[$class])) {
- return $this->classMap[$class];
- }
- if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
- return false;
- }
- if (null !== $this->apcuPrefix) {
- $file = apcu_fetch($this->apcuPrefix.$class, $hit);
- if ($hit) {
- return $file;
- }
- }
-
- $file = $this->findFileWithExtension($class, '.php');
-
- // Search for Hack files if we are running on HHVM
- if (false === $file && defined('HHVM_VERSION')) {
- $file = $this->findFileWithExtension($class, '.hh');
- }
-
- if (null !== $this->apcuPrefix) {
- apcu_add($this->apcuPrefix.$class, $file);
- }
-
- if (false === $file) {
- // Remember that this class does not exist.
- $this->missingClasses[$class] = true;
- }
-
- return $file;
- }
-
- /**
- * Returns the currently registered loaders indexed by their corresponding vendor directories.
- *
- * @return self[]
- */
- public static function getRegisteredLoaders()
- {
- return self::$registeredLoaders;
- }
-
- /**
- * @param string $class
- * @param string $ext
- * @return string|false
- */
- private function findFileWithExtension($class, $ext)
- {
- // PSR-4 lookup
- $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
-
- $first = $class[0];
- if (isset($this->prefixLengthsPsr4[$first])) {
- $subPath = $class;
- while (false !== $lastPos = strrpos($subPath, '\\')) {
- $subPath = substr($subPath, 0, $lastPos);
- $search = $subPath . '\\';
- if (isset($this->prefixDirsPsr4[$search])) {
- $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
- foreach ($this->prefixDirsPsr4[$search] as $dir) {
- if (file_exists($file = $dir . $pathEnd)) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-4 fallback dirs
- foreach ($this->fallbackDirsPsr4 as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
- return $file;
- }
- }
-
- // PSR-0 lookup
- if (false !== $pos = strrpos($class, '\\')) {
- // namespaced class name
- $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
- . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
- } else {
- // PEAR-like class name
- $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
- }
-
- if (isset($this->prefixesPsr0[$first])) {
- foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
- if (0 === strpos($class, $prefix)) {
- foreach ($dirs as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-0 fallback dirs
- foreach ($this->fallbackDirsPsr0 as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
-
- // PSR-0 include paths.
- if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
- return $file;
- }
-
- return false;
- }
-}
-
-/**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- *
- * @param string $file
- * @return void
- * @private
- */
-function includeFile($file)
-{
- include $file;
-}
diff --git a/libraries/phpseclib/vendor/composer/InstalledVersions.php b/libraries/phpseclib/vendor/composer/InstalledVersions.php
deleted file mode 100644
index d50e0c9fc..000000000
--- a/libraries/phpseclib/vendor/composer/InstalledVersions.php
+++ /dev/null
@@ -1,350 +0,0 @@
-
- * Jordi Boggiano
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer;
-
-use Composer\Autoload\ClassLoader;
-use Composer\Semver\VersionParser;
-
-/**
- * This class is copied in every Composer installed project and available to all
- *
- * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
- *
- * To require its presence, you can require `composer-runtime-api ^2.0`
- */
-class InstalledVersions
-{
- /**
- * @var mixed[]|null
- * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null
- */
- private static $installed;
-
- /**
- * @var bool|null
- */
- private static $canGetVendors;
-
- /**
- * @var array[]
- * @psalm-var array}>
- */
- private static $installedByVendor = array();
-
- /**
- * Returns a list of all package names which are present, either by being installed, replaced or provided
- *
- * @return string[]
- * @psalm-return list
- */
- public static function getInstalledPackages()
- {
- $packages = array();
- foreach (self::getInstalled() as $installed) {
- $packages[] = array_keys($installed['versions']);
- }
-
- if (1 === \count($packages)) {
- return $packages[0];
- }
-
- return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
- }
-
- /**
- * Returns a list of all package names with a specific type e.g. 'library'
- *
- * @param string $type
- * @return string[]
- * @psalm-return list
- */
- public static function getInstalledPackagesByType($type)
- {
- $packagesByType = array();
-
- foreach (self::getInstalled() as $installed) {
- foreach ($installed['versions'] as $name => $package) {
- if (isset($package['type']) && $package['type'] === $type) {
- $packagesByType[] = $name;
- }
- }
- }
-
- return $packagesByType;
- }
-
- /**
- * Checks whether the given package is installed
- *
- * This also returns true if the package name is provided or replaced by another package
- *
- * @param string $packageName
- * @param bool $includeDevRequirements
- * @return bool
- */
- public static function isInstalled($packageName, $includeDevRequirements = true)
- {
- foreach (self::getInstalled() as $installed) {
- if (isset($installed['versions'][$packageName])) {
- return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
- }
- }
-
- return false;
- }
-
- /**
- * Checks whether the given package satisfies a version constraint
- *
- * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
- *
- * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
- *
- * @param VersionParser $parser Install composer/semver to have access to this class and functionality
- * @param string $packageName
- * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
- * @return bool
- */
- public static function satisfies(VersionParser $parser, $packageName, $constraint)
- {
- $constraint = $parser->parseConstraints($constraint);
- $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
-
- return $provided->matches($constraint);
- }
-
- /**
- * Returns a version constraint representing all the range(s) which are installed for a given package
- *
- * It is easier to use this via isInstalled() with the $constraint argument if you need to check
- * whether a given version of a package is installed, and not just whether it exists
- *
- * @param string $packageName
- * @return string Version constraint usable with composer/semver
- */
- public static function getVersionRanges($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- $ranges = array();
- if (isset($installed['versions'][$packageName]['pretty_version'])) {
- $ranges[] = $installed['versions'][$packageName]['pretty_version'];
- }
- if (array_key_exists('aliases', $installed['versions'][$packageName])) {
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
- }
- if (array_key_exists('replaced', $installed['versions'][$packageName])) {
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
- }
- if (array_key_exists('provided', $installed['versions'][$packageName])) {
- $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
- }
-
- return implode(' || ', $ranges);
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
- */
- public static function getVersion($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- if (!isset($installed['versions'][$packageName]['version'])) {
- return null;
- }
-
- return $installed['versions'][$packageName]['version'];
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
- */
- public static function getPrettyVersion($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- if (!isset($installed['versions'][$packageName]['pretty_version'])) {
- return null;
- }
-
- return $installed['versions'][$packageName]['pretty_version'];
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
- */
- public static function getReference($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- if (!isset($installed['versions'][$packageName]['reference'])) {
- return null;
- }
-
- return $installed['versions'][$packageName]['reference'];
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
- */
- public static function getInstallPath($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
- /**
- * @return array
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
- */
- public static function getRootPackage()
- {
- $installed = self::getInstalled();
-
- return $installed[0]['root'];
- }
-
- /**
- * Returns the raw installed.php data for custom implementations
- *
- * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
- * @return array[]
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}
- */
- public static function getRawData()
- {
- @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
-
- if (null === self::$installed) {
- // only require the installed.php file if this file is loaded from its dumped location,
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C') {
- self::$installed = include __DIR__ . '/installed.php';
- } else {
- self::$installed = array();
- }
- }
-
- return self::$installed;
- }
-
- /**
- * Returns the raw data of all installed.php which are currently loaded for custom implementations
- *
- * @return array[]
- * @psalm-return list}>
- */
- public static function getAllRawData()
- {
- return self::getInstalled();
- }
-
- /**
- * Lets you reload the static array from another file
- *
- * This is only useful for complex integrations in which a project needs to use
- * this class but then also needs to execute another project's autoloader in process,
- * and wants to ensure both projects have access to their version of installed.php.
- *
- * A typical case would be PHPUnit, where it would need to make sure it reads all
- * the data it needs from this class, then call reload() with
- * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
- * the project in which it runs can then also use this class safely, without
- * interference between PHPUnit's dependencies and the project's dependencies.
- *
- * @param array[] $data A vendor/composer/installed.php data set
- * @return void
- *
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data
- */
- public static function reload($data)
- {
- self::$installed = $data;
- self::$installedByVendor = array();
- }
-
- /**
- * @return array[]
- * @psalm-return list}>
- */
- private static function getInstalled()
- {
- if (null === self::$canGetVendors) {
- self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
- }
-
- $installed = array();
-
- if (self::$canGetVendors) {
- foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
- if (isset(self::$installedByVendor[$vendorDir])) {
- $installed[] = self::$installedByVendor[$vendorDir];
- } elseif (is_file($vendorDir.'/composer/installed.php')) {
- $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
- if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
- self::$installed = $installed[count($installed) - 1];
- }
- }
- }
- }
-
- if (null === self::$installed) {
- // only require the installed.php file if this file is loaded from its dumped location,
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C') {
- self::$installed = require __DIR__ . '/installed.php';
- } else {
- self::$installed = array();
- }
- }
- $installed[] = self::$installed;
-
- return $installed;
- }
-}
diff --git a/libraries/phpseclib/vendor/composer/LICENSE b/libraries/phpseclib/vendor/composer/LICENSE
deleted file mode 100644
index f27399a04..000000000
--- a/libraries/phpseclib/vendor/composer/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-
-Copyright (c) Nils Adermann, Jordi Boggiano
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
diff --git a/libraries/phpseclib/vendor/composer/autoload_classmap.php b/libraries/phpseclib/vendor/composer/autoload_classmap.php
deleted file mode 100644
index b26f1b13b..000000000
--- a/libraries/phpseclib/vendor/composer/autoload_classmap.php
+++ /dev/null
@@ -1,10 +0,0 @@
- $vendorDir . '/composer/InstalledVersions.php',
-);
diff --git a/libraries/phpseclib/vendor/composer/autoload_files.php b/libraries/phpseclib/vendor/composer/autoload_files.php
deleted file mode 100644
index 9a9a17de8..000000000
--- a/libraries/phpseclib/vendor/composer/autoload_files.php
+++ /dev/null
@@ -1,10 +0,0 @@
- $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
-);
diff --git a/libraries/phpseclib/vendor/composer/autoload_namespaces.php b/libraries/phpseclib/vendor/composer/autoload_namespaces.php
deleted file mode 100644
index b7fc0125d..000000000
--- a/libraries/phpseclib/vendor/composer/autoload_namespaces.php
+++ /dev/null
@@ -1,9 +0,0 @@
- array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
-);
diff --git a/libraries/phpseclib/vendor/composer/autoload_real.php b/libraries/phpseclib/vendor/composer/autoload_real.php
deleted file mode 100644
index bd5b5f004..000000000
--- a/libraries/phpseclib/vendor/composer/autoload_real.php
+++ /dev/null
@@ -1,75 +0,0 @@
-= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
- if ($useStaticLoader) {
- require __DIR__ . '/autoload_static.php';
-
- call_user_func(\Composer\Autoload\ComposerStaticInit10d22a526bd476954b93748a871e7ad4::getInitializer($loader));
- } else {
- $map = require __DIR__ . '/autoload_namespaces.php';
- foreach ($map as $namespace => $path) {
- $loader->set($namespace, $path);
- }
-
- $map = require __DIR__ . '/autoload_psr4.php';
- foreach ($map as $namespace => $path) {
- $loader->setPsr4($namespace, $path);
- }
-
- $classMap = require __DIR__ . '/autoload_classmap.php';
- if ($classMap) {
- $loader->addClassMap($classMap);
- }
- }
-
- $loader->register(true);
-
- if ($useStaticLoader) {
- $includeFiles = Composer\Autoload\ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$files;
- } else {
- $includeFiles = require __DIR__ . '/autoload_files.php';
- }
- foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequire10d22a526bd476954b93748a871e7ad4($fileIdentifier, $file);
- }
-
- return $loader;
- }
-}
-
-function composerRequire10d22a526bd476954b93748a871e7ad4($fileIdentifier, $file)
-{
- if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
- require $file;
-
- $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
- }
-}
diff --git a/libraries/phpseclib/vendor/composer/autoload_static.php b/libraries/phpseclib/vendor/composer/autoload_static.php
deleted file mode 100644
index e4fa4644c..000000000
--- a/libraries/phpseclib/vendor/composer/autoload_static.php
+++ /dev/null
@@ -1,40 +0,0 @@
- __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
- );
-
- public static $prefixLengthsPsr4 = array (
- 'p' =>
- array (
- 'phpseclib\\' => 10,
- ),
- );
-
- public static $prefixDirsPsr4 = array (
- 'phpseclib\\' =>
- array (
- 0 => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib',
- ),
- );
-
- public static $classMap = array (
- 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
- );
-
- public static function getInitializer(ClassLoader $loader)
- {
- return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$prefixDirsPsr4;
- $loader->classMap = ComposerStaticInit10d22a526bd476954b93748a871e7ad4::$classMap;
-
- }, null, ClassLoader::class);
- }
-}
diff --git a/libraries/phpseclib/vendor/composer/installed.json b/libraries/phpseclib/vendor/composer/installed.json
deleted file mode 100644
index 7a6f24266..000000000
--- a/libraries/phpseclib/vendor/composer/installed.json
+++ /dev/null
@@ -1,114 +0,0 @@
-{
- "packages": [
- {
- "name": "phpseclib/phpseclib",
- "version": "2.0.35",
- "version_normalized": "2.0.35.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "4e16cf3f5f927a7d3f5317820af795c0366c0420"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4e16cf3f5f927a7d3f5317820af795c0366c0420",
- "reference": "4e16cf3f5f927a7d3f5317820af795c0366c0420",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phing/phing": "~2.7",
- "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4",
- "squizlabs/php_codesniffer": "~2.0"
- },
- "suggest": {
- "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
- "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
- "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
- "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
- },
- "time": "2021-11-28T23:30:39+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "files": [
- "phpseclib/bootstrap.php"
- ],
- "psr-4": {
- "phpseclib\\": "phpseclib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jim Wigginton",
- "email": "terrafrost@php.net",
- "role": "Lead Developer"
- },
- {
- "name": "Patrick Monnerat",
- "email": "pm@datasphere.ch",
- "role": "Developer"
- },
- {
- "name": "Andreas Fischer",
- "email": "bantu@phpbb.com",
- "role": "Developer"
- },
- {
- "name": "Hans-Jürgen Petrich",
- "email": "petrich@tronic-media.com",
- "role": "Developer"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com",
- "role": "Developer"
- }
- ],
- "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
- "homepage": "http://phpseclib.sourceforge.net",
- "keywords": [
- "BigInteger",
- "aes",
- "asn.1",
- "asn1",
- "blowfish",
- "crypto",
- "cryptography",
- "encryption",
- "rsa",
- "security",
- "sftp",
- "signature",
- "signing",
- "ssh",
- "twofish",
- "x.509",
- "x509"
- ],
- "funding": [
- {
- "url": "https://github.com/terrafrost",
- "type": "github"
- },
- {
- "url": "https://www.patreon.com/phpseclib",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
- "type": "tidelift"
- }
- ],
- "install-path": "../phpseclib/phpseclib"
- }
- ],
- "dev": true,
- "dev-package-names": []
-}
diff --git a/libraries/phpseclib/vendor/composer/installed.php b/libraries/phpseclib/vendor/composer/installed.php
deleted file mode 100644
index 8c4ca830b..000000000
--- a/libraries/phpseclib/vendor/composer/installed.php
+++ /dev/null
@@ -1,32 +0,0 @@
- array(
- 'pretty_version' => '1.0.0+no-version-set',
- 'version' => '1.0.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../../',
- 'aliases' => array(),
- 'reference' => NULL,
- 'name' => '__root__',
- 'dev' => true,
- ),
- 'versions' => array(
- '__root__' => array(
- 'pretty_version' => '1.0.0+no-version-set',
- 'version' => '1.0.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../../',
- 'aliases' => array(),
- 'reference' => NULL,
- 'dev_requirement' => false,
- ),
- 'phpseclib/phpseclib' => array(
- 'pretty_version' => '2.0.35',
- 'version' => '2.0.35.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpseclib/phpseclib',
- 'aliases' => array(),
- 'reference' => '4e16cf3f5f927a7d3f5317820af795c0366c0420',
- 'dev_requirement' => false,
- ),
- ),
-);
diff --git a/libraries/phpseclib/vendor/composer/platform_check.php b/libraries/phpseclib/vendor/composer/platform_check.php
deleted file mode 100644
index 7f0d16c70..000000000
--- a/libraries/phpseclib/vendor/composer/platform_check.php
+++ /dev/null
@@ -1,26 +0,0 @@
-= 50303)) {
- $issues[] = 'Your Composer dependencies require a PHP version ">= 5.3.3". You are running ' . PHP_VERSION . '.';
-}
-
-if ($issues) {
- if (!headers_sent()) {
- header('HTTP/1.1 500 Internal Server Error');
- }
- if (!ini_get('display_errors')) {
- if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
- fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
- } elseif (!headers_sent()) {
- echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
- }
- }
- trigger_error(
- 'Composer detected issues in your platform: ' . implode(' ', $issues),
- E_USER_ERROR
- );
-}
diff --git a/libraries/phpseclib/vendor/htaccess.txt b/libraries/phpseclib/vendor/htaccess.txt
deleted file mode 100644
index 9afb1a1b3..000000000
--- a/libraries/phpseclib/vendor/htaccess.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# Apache 2.4+
-
- Require all denied
-
-
-# Apache 2.0-2.2
-
- Deny from all
-
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/AUTHORS b/libraries/phpseclib/vendor/phpseclib/phpseclib/AUTHORS
deleted file mode 100644
index a08b3099c..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-phpseclib Lead Developer: TerraFrost (Jim Wigginton)
-
-phpseclib Developers: monnerat (Patrick Monnerat)
- bantu (Andreas Fischer)
- petrich (Hans-Jürgen Petrich)
- GrahamCampbell (Graham Campbell)
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/BACKERS.md b/libraries/phpseclib/vendor/phpseclib/phpseclib/BACKERS.md
deleted file mode 100644
index a78bca691..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/BACKERS.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Backers
-
-phpseclib ongoing development is made possible by [Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme) and by contributions by users like you. Thank you.
-
-## Backers
-
-- Zane Hooper
-- [Setasign](https://www.setasign.com/)
-- Allan Simon
\ No newline at end of file
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/LICENSE b/libraries/phpseclib/vendor/phpseclib/phpseclib/LICENSE
deleted file mode 100644
index e7214ebbe..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2011-2019 TerraFrost and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/README.md b/libraries/phpseclib/vendor/phpseclib/phpseclib/README.md
deleted file mode 100644
index c81c46920..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/README.md
+++ /dev/null
@@ -1,100 +0,0 @@
-# phpseclib - PHP Secure Communications Library
-
-[![Build Status](https://travis-ci.com/phpseclib/phpseclib.svg?branch=2.0)](https://travis-ci.com/phpseclib/phpseclib)
-
-## Supporting phpseclib
-
-- [Become a backer or sponsor on Patreon](https://www.patreon.com/phpseclib)
-- [One-time donation via PayPal or crypto-currencies](http://sourceforge.net/donate/index.php?group_id=198487)
-- [Subscribe to Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme)
-
-## Introduction
-
-MIT-licensed pure-PHP implementations of the following:
-
-SSH-2, SFTP, X.509, an arbitrary-precision integer arithmetic library, Ed25519 / Ed449 / Curve25519 / Curve449, ECDSA / ECDH (with support for 66 curves), RSA (PKCS#1 v2.2 compliant), DSA / DH, DES / 3DES / RC4 / Rijndael / AES / Blowfish / Twofish / Salsa20 / ChaCha20, GCM / Poly1305
-
-* [Browse Git](https://github.com/phpseclib/phpseclib)
-
-## Documentation
-
-* [Documentation / Manual](https://phpseclib.com/)
-* [API Documentation](https://api.phpseclib.com/2.0/) (generated by Doctum)
-
-## Branches
-
-### master
-
-* Development Branch
-* Unstable API
-* Do not use in production
-
-### 3.0
-
-* Long term support (LTS) release
-* Major expansion of cryptographic primitives
-* Minimum PHP version: 5.6.1
-* PSR-4 autoloading with namespace rooted at `\phpseclib3`
-* Install via Composer: `composer require phpseclib/phpseclib:~3.0`
-
-### 2.0
-
-* Long term support (LTS) release
-* Modernized version of 1.0
-* Minimum PHP version: 5.3.3
-* PSR-4 autoloading with namespace rooted at `\phpseclib`
-* Install via Composer: `composer require phpseclib/phpseclib:~2.0`
-
-### 1.0
-
-* Long term support (LTS) release
-* PHP4 compatible
-* Composer compatible (PSR-0 autoloading)
-* Install using Composer: `composer require phpseclib/phpseclib:~1.0`
-* Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm)
-* [Download 1.0.19 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.19.zip/download)
-
-## Security contact information
-
-To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
-
-## Support
-
-Need Support?
-
-* [Checkout Questions and Answers on Stack Overflow](http://stackoverflow.com/questions/tagged/phpseclib)
-* [Create a Support Ticket on GitHub](https://github.com/phpseclib/phpseclib/issues/new)
-* [Browse the Support Forum](http://www.frostjedi.com/phpbb/viewforum.php?f=46) (no longer in use)
-
-## Special Thanks
-
-Special Thanks to our Patreon sponsors!:
-
-- Allan Simon
-
-## Contributing
-
-1. Fork the Project
-
-2. Ensure you have Composer installed (see [Composer Download Instructions](https://getcomposer.org/download/))
-
-3. Install Development Dependencies
-
- ``` sh
- composer install
- ```
-
-4. Create a Feature Branch
-
-5. (Recommended) Run the Test Suite
-
- ``` sh
- vendor/bin/phpunit
- ```
-6. (Recommended) Check whether your code conforms to our Coding Standards by running
-
- ``` sh
- vendor/bin/phing -f build/build.xml sniff
- ```
-
-7. Send us a Pull Request
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/appveyor.yml b/libraries/phpseclib/vendor/phpseclib/phpseclib/appveyor.yml
deleted file mode 100644
index 210a90347..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/appveyor.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-build: false
-shallow_clone: false
-platform:
- - x86
- - x64
-clone_folder: C:\projects\phpseclib
-
-install:
- - cinst -y OpenSSL.Light
- - SET PATH=C:\Program Files\OpenSSL;%PATH%
- - sc config wuauserv start= auto
- - net start wuauserv
- - cinst -y php --version 5.6.30
- - cd c:\tools\php56
- - copy php.ini-production php.ini
- - echo date.timezone="UTC" >> php.ini
- - echo extension_dir=ext >> php.ini
- - echo extension=php_openssl.dll >> php.ini
- - echo extension=php_gmp.dll >> php.ini
- - cd C:\projects\phpseclib
- - SET PATH=C:\tools\php56;%PATH%
- - php.exe -r "readfile('http://getcomposer.org/installer');" | php.exe
- - php.exe composer.phar install --prefer-source --no-interaction
-
-test_script:
- - cd C:\projects\phpseclib
- - vendor\bin\phpunit.bat tests/Windows32Test.php
\ No newline at end of file
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/composer.json b/libraries/phpseclib/vendor/phpseclib/phpseclib/composer.json
deleted file mode 100644
index 08b9c7c91..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/composer.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "name": "phpseclib/phpseclib",
- "type": "library",
- "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
- "keywords": [
- "security",
- "crypto",
- "cryptography",
- "encryption",
- "signature",
- "signing",
- "rsa",
- "aes",
- "blowfish",
- "twofish",
- "ssh",
- "sftp",
- "x509",
- "x.509",
- "asn1",
- "asn.1",
- "BigInteger"
- ],
- "homepage": "http://phpseclib.sourceforge.net",
- "license": "MIT",
- "authors": [
- {
- "name": "Jim Wigginton",
- "email": "terrafrost@php.net",
- "role": "Lead Developer"
- },
- {
- "name": "Patrick Monnerat",
- "email": "pm@datasphere.ch",
- "role": "Developer"
- },
- {
- "name": "Andreas Fischer",
- "email": "bantu@phpbb.com",
- "role": "Developer"
- },
- {
- "name": "Hans-Jürgen Petrich",
- "email": "petrich@tronic-media.com",
- "role": "Developer"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com",
- "role": "Developer"
- }
- ],
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phing/phing": "~2.7",
- "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4",
- "squizlabs/php_codesniffer": "~2.0"
- },
- "suggest": {
- "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
- "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.",
- "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
- "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations."
- },
- "autoload": {
- "files": [
- "phpseclib/bootstrap.php"
- ],
- "psr-4": {
- "phpseclib\\": "phpseclib/"
- }
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php
deleted file mode 100644
index 7d8cb8b03..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php
+++ /dev/null
@@ -1,126 +0,0 @@
-
- * setKey('abcdefghijklmnop');
- *
- * $size = 10 * 1024;
- * $plaintext = '';
- * for ($i = 0; $i < $size; $i++) {
- * $plaintext.= 'a';
- * }
- *
- * echo $aes->decrypt($aes->encrypt($plaintext));
- * ?>
- *
- *
- * @category Crypt
- * @package AES
- * @author Jim Wigginton
- * @copyright 2008 Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
- */
-
-namespace phpseclib\Crypt;
-
-/**
- * Pure-PHP implementation of AES.
- *
- * @package AES
- * @author Jim Wigginton
- * @access public
- */
-class AES extends Rijndael
-{
- /**
- * Dummy function
- *
- * Since \phpseclib\Crypt\AES extends \phpseclib\Crypt\Rijndael, this function is, technically, available, but it doesn't do anything.
- *
- * @see \phpseclib\Crypt\Rijndael::setBlockLength()
- * @access public
- * @param int $length
- */
- function setBlockLength($length)
- {
- return;
- }
-
- /**
- * Sets the key length
- *
- * Valid key lengths are 128, 192, and 256. If the length is less than 128, it will be rounded up to
- * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
- *
- * @see \phpseclib\Crypt\Rijndael:setKeyLength()
- * @access public
- * @param int $length
- */
- function setKeyLength($length)
- {
- switch ($length) {
- case 160:
- $length = 192;
- break;
- case 224:
- $length = 256;
- }
- parent::setKeyLength($length);
- }
-
- /**
- * Sets the key.
- *
- * Rijndael supports five different key lengths, AES only supports three.
- *
- * @see \phpseclib\Crypt\Rijndael:setKey()
- * @see setKeyLength()
- * @access public
- * @param string $key
- */
- function setKey($key)
- {
- parent::setKey($key);
-
- if (!$this->explicit_key_length) {
- $length = strlen($key);
- switch (true) {
- case $length <= 16:
- $this->key_length = 16;
- break;
- case $length <= 24:
- $this->key_length = 24;
- break;
- default:
- $this->key_length = 32;
- }
- $this->_setEngine();
- }
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
deleted file mode 100644
index 8822b9b88..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
+++ /dev/null
@@ -1,2724 +0,0 @@
-
- * @author Hans-Juergen Petrich
- * @copyright 2007 Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
- */
-
-namespace phpseclib\Crypt;
-
-/**
- * Base Class for all \phpseclib\Crypt\* cipher classes
- *
- * @package Base
- * @author Jim Wigginton
- * @author Hans-Juergen Petrich
- */
-abstract class Base
-{
- /**#@+
- * @access public
- * @see \phpseclib\Crypt\Base::encrypt()
- * @see \phpseclib\Crypt\Base::decrypt()
- */
- /**
- * Encrypt / decrypt using the Counter mode.
- *
- * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
- */
- const MODE_CTR = -1;
- /**
- * Encrypt / decrypt using the Electronic Code Book mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
- */
- const MODE_ECB = 1;
- /**
- * Encrypt / decrypt using the Code Book Chaining mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
- */
- const MODE_CBC = 2;
- /**
- * Encrypt / decrypt using the Cipher Feedback mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
- */
- const MODE_CFB = 3;
- /**
- * Encrypt / decrypt using the Cipher Feedback mode (8bit)
- */
- const MODE_CFB8 = 38;
- /**
- * Encrypt / decrypt using the Output Feedback mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
- */
- const MODE_OFB = 4;
- /**
- * Encrypt / decrypt using streaming mode.
- */
- const MODE_STREAM = 5;
- /**#@-*/
-
- /**
- * Whirlpool available flag
- *
- * @see \phpseclib\Crypt\Base::_hashInlineCryptFunction()
- * @var bool
- * @access private
- */
- static $WHIRLPOOL_AVAILABLE;
-
- /**#@+
- * @access private
- * @see \phpseclib\Crypt\Base::__construct()
- */
- /**
- * Base value for the internal implementation $engine switch
- */
- const ENGINE_INTERNAL = 1;
- /**
- * Base value for the mcrypt implementation $engine switch
- */
- const ENGINE_MCRYPT = 2;
- /**
- * Base value for the mcrypt implementation $engine switch
- */
- const ENGINE_OPENSSL = 3;
- /**#@-*/
-
- /**
- * The Encryption Mode
- *
- * @see self::__construct()
- * @var int
- * @access private
- */
- var $mode;
-
- /**
- * The Block Length of the block cipher
- *
- * @var int
- * @access private
- */
- var $block_size = 16;
-
- /**
- * The Key
- *
- * @see self::setKey()
- * @var string
- * @access private
- */
- var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-
- /**
- * The Initialization Vector
- *
- * @see self::setIV()
- * @var string
- * @access private
- */
- var $iv;
-
- /**
- * A "sliding" Initialization Vector
- *
- * @see self::enableContinuousBuffer()
- * @see self::_clearBuffers()
- * @var string
- * @access private
- */
- var $encryptIV;
-
- /**
- * A "sliding" Initialization Vector
- *
- * @see self::enableContinuousBuffer()
- * @see self::_clearBuffers()
- * @var string
- * @access private
- */
- var $decryptIV;
-
- /**
- * Continuous Buffer status
- *
- * @see self::enableContinuousBuffer()
- * @var bool
- * @access private
- */
- var $continuousBuffer = false;
-
- /**
- * Encryption buffer for CTR, OFB and CFB modes
- *
- * @see self::encrypt()
- * @see self::_clearBuffers()
- * @var array
- * @access private
- */
- var $enbuffer;
-
- /**
- * Decryption buffer for CTR, OFB and CFB modes
- *
- * @see self::decrypt()
- * @see self::_clearBuffers()
- * @var array
- * @access private
- */
- var $debuffer;
-
- /**
- * mcrypt resource for encryption
- *
- * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
- * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
- *
- * @see self::encrypt()
- * @var resource
- * @access private
- */
- var $enmcrypt;
-
- /**
- * mcrypt resource for decryption
- *
- * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
- * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
- *
- * @see self::decrypt()
- * @var resource
- * @access private
- */
- var $demcrypt;
-
- /**
- * Does the enmcrypt resource need to be (re)initialized?
- *
- * @see \phpseclib\Crypt\Twofish::setKey()
- * @see \phpseclib\Crypt\Twofish::setIV()
- * @var bool
- * @access private
- */
- var $enchanged = true;
-
- /**
- * Does the demcrypt resource need to be (re)initialized?
- *
- * @see \phpseclib\Crypt\Twofish::setKey()
- * @see \phpseclib\Crypt\Twofish::setIV()
- * @var bool
- * @access private
- */
- var $dechanged = true;
-
- /**
- * mcrypt resource for CFB mode
- *
- * mcrypt's CFB mode, in (and only in) buffered context,
- * is broken, so phpseclib implements the CFB mode by it self,
- * even when the mcrypt php extension is available.
- *
- * In order to do the CFB-mode work (fast) phpseclib
- * use a separate ECB-mode mcrypt resource.
- *
- * @link http://phpseclib.sourceforge.net/cfb-demo.phps
- * @see self::encrypt()
- * @see self::decrypt()
- * @see self::_setupMcrypt()
- * @var resource
- * @access private
- */
- var $ecb;
-
- /**
- * Optimizing value while CFB-encrypting
- *
- * Only relevant if $continuousBuffer enabled
- * and $engine == self::ENGINE_MCRYPT
- *
- * It's faster to re-init $enmcrypt if
- * $buffer bytes > $cfb_init_len than
- * using the $ecb resource furthermore.
- *
- * This value depends of the chosen cipher
- * and the time it would be needed for it's
- * initialization [by mcrypt_generic_init()]
- * which, typically, depends on the complexity
- * on its internaly Key-expanding algorithm.
- *
- * @see self::encrypt()
- * @var int
- * @access private
- */
- var $cfb_init_len = 600;
-
- /**
- * Does internal cipher state need to be (re)initialized?
- *
- * @see self::setKey()
- * @see self::setIV()
- * @see self::disableContinuousBuffer()
- * @var bool
- * @access private
- */
- var $changed = true;
-
- /**
- * Padding status
- *
- * @see self::enablePadding()
- * @var bool
- * @access private
- */
- var $padding = true;
-
- /**
- * Is the mode one that is paddable?
- *
- * @see self::__construct()
- * @var bool
- * @access private
- */
- var $paddable = false;
-
- /**
- * Holds which crypt engine internaly should be use,
- * which will be determined automatically on __construct()
- *
- * Currently available $engines are:
- * - self::ENGINE_OPENSSL (very fast, php-extension: openssl, extension_loaded('openssl') required)
- * - self::ENGINE_MCRYPT (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)
- * - self::ENGINE_INTERNAL (slower, pure php-engine, no php-extension required)
- *
- * @see self::_setEngine()
- * @see self::encrypt()
- * @see self::decrypt()
- * @var int
- * @access private
- */
- var $engine;
-
- /**
- * Holds the preferred crypt engine
- *
- * @see self::_setEngine()
- * @see self::setPreferredEngine()
- * @var int
- * @access private
- */
- var $preferredEngine;
-
- /**
- * The mcrypt specific name of the cipher
- *
- * Only used if $engine == self::ENGINE_MCRYPT
- *
- * @link http://www.php.net/mcrypt_module_open
- * @link http://www.php.net/mcrypt_list_algorithms
- * @see self::_setupMcrypt()
- * @var string
- * @access private
- */
- var $cipher_name_mcrypt;
-
- /**
- * The openssl specific name of the cipher
- *
- * Only used if $engine == self::ENGINE_OPENSSL
- *
- * @link http://www.php.net/openssl-get-cipher-methods
- * @var string
- * @access private
- */
- var $cipher_name_openssl;
-
- /**
- * The openssl specific name of the cipher in ECB mode
- *
- * If OpenSSL does not support the mode we're trying to use (CTR)
- * it can still be emulated with ECB mode.
- *
- * @link http://www.php.net/openssl-get-cipher-methods
- * @var string
- * @access private
- */
- var $cipher_name_openssl_ecb;
-
- /**
- * The default salt used by setPassword()
- *
- * @see self::setPassword()
- * @var string
- * @access private
- */
- var $password_default_salt = 'phpseclib/salt';
-
- /**
- * The name of the performance-optimized callback function
- *
- * Used by encrypt() / decrypt()
- * only if $engine == self::ENGINE_INTERNAL
- *
- * @see self::encrypt()
- * @see self::decrypt()
- * @see self::_setupInlineCrypt()
- * @see self::$use_inline_crypt
- * @var Callback
- * @access private
- */
- var $inline_crypt;
-
- /**
- * Holds whether performance-optimized $inline_crypt() can/should be used.
- *
- * @see self::encrypt()
- * @see self::decrypt()
- * @see self::inline_crypt
- * @var mixed
- * @access private
- */
- var $use_inline_crypt = true;
-
- /**
- * If OpenSSL can be used in ECB but not in CTR we can emulate CTR
- *
- * @see self::_openssl_ctr_process()
- * @var bool
- * @access private
- */
- var $openssl_emulate_ctr = false;
-
- /**
- * Determines what options are passed to openssl_encrypt/decrypt
- *
- * @see self::isValidEngine()
- * @var mixed
- * @access private
- */
- var $openssl_options;
-
- /**
- * Has the key length explicitly been set or should it be derived from the key, itself?
- *
- * @see self::setKeyLength()
- * @var bool
- * @access private
- */
- var $explicit_key_length = false;
-
- /**
- * Don't truncate / null pad key
- *
- * @see self::_clearBuffers()
- * @var bool
- * @access private
- */
- var $skip_key_adjustment = false;
-
- /**
- * Default Constructor.
- *
- * Determines whether or not the mcrypt extension should be used.
- *
- * $mode could be:
- *
- * - self::MODE_ECB
- *
- * - self::MODE_CBC
- *
- * - self::MODE_CTR
- *
- * - self::MODE_CFB
- *
- * - self::MODE_OFB
- *
- * If not explicitly set, self::MODE_CBC will be used.
- *
- * @param int $mode
- * @access public
- */
- function __construct($mode = self::MODE_CBC)
- {
- // $mode dependent settings
- switch ($mode) {
- case self::MODE_ECB:
- $this->paddable = true;
- $this->mode = self::MODE_ECB;
- break;
- case self::MODE_CTR:
- case self::MODE_CFB:
- case self::MODE_CFB8:
- case self::MODE_OFB:
- case self::MODE_STREAM:
- $this->mode = $mode;
- break;
- case self::MODE_CBC:
- default:
- $this->paddable = true;
- $this->mode = self::MODE_CBC;
- }
-
- $this->_setEngine();
- }
-
- /**
- * Sets the initialization vector. (optional)
- *
- * SetIV is not required when self::MODE_ECB (or ie for AES: \phpseclib\Crypt\AES::MODE_ECB) is being used. If not explicitly set, it'll be assumed
- * to be all zero's.
- *
- * @access public
- * @param string $iv
- * @internal Can be overwritten by a sub class, but does not have to be
- */
- function setIV($iv)
- {
- if ($this->mode == self::MODE_ECB) {
- return;
- }
-
- $this->iv = $iv;
- $this->changed = true;
- }
-
- /**
- * Sets the key length.
- *
- * Keys with explicitly set lengths need to be treated accordingly
- *
- * @access public
- * @param int $length
- */
- function setKeyLength($length)
- {
- $this->explicit_key_length = true;
- $this->changed = true;
- $this->_setEngine();
- }
-
- /**
- * Returns the current key length in bits
- *
- * @access public
- * @return int
- */
- function getKeyLength()
- {
- return $this->key_length << 3;
- }
-
- /**
- * Returns the current block length in bits
- *
- * @access public
- * @return int
- */
- function getBlockLength()
- {
- return $this->block_size << 3;
- }
-
- /**
- * Sets the key.
- *
- * The min/max length(s) of the key depends on the cipher which is used.
- * If the key not fits the length(s) of the cipher it will paded with null bytes
- * up to the closest valid key length. If the key is more than max length,
- * we trim the excess bits.
- *
- * If the key is not explicitly set, it'll be assumed to be all null bytes.
- *
- * @access public
- * @param string $key
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function setKey($key)
- {
- if (!$this->explicit_key_length) {
- $this->setKeyLength(strlen($key) << 3);
- $this->explicit_key_length = false;
- }
-
- $this->key = $key;
- $this->changed = true;
- $this->_setEngine();
- }
-
- /**
- * Sets the password.
- *
- * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
- * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:
- * $hash, $salt, $count, $dkLen
- *
- * Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php
- *
- * @see Crypt/Hash.php
- * @param string $password
- * @param string $method
- * @return bool
- * @access public
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function setPassword($password, $method = 'pbkdf2')
- {
- $key = '';
-
- switch ($method) {
- default: // 'pbkdf2' or 'pbkdf1'
- $func_args = func_get_args();
-
- // Hash function
- $hash = isset($func_args[2]) ? $func_args[2] : 'sha1';
-
- // WPA and WPA2 use the SSID as the salt
- $salt = isset($func_args[3]) ? $func_args[3] : $this->password_default_salt;
-
- // RFC2898#section-4.2 uses 1,000 iterations by default
- // WPA and WPA2 use 4,096.
- $count = isset($func_args[4]) ? $func_args[4] : 1000;
-
- // Keylength
- if (isset($func_args[5])) {
- $dkLen = $func_args[5];
- } else {
- $dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
- }
-
- switch (true) {
- case $method == 'pbkdf1':
- $hashObj = new Hash();
- $hashObj->setHash($hash);
- if ($dkLen > $hashObj->getLength()) {
- user_error('Derived key too long');
- return false;
- }
- $t = $password . $salt;
- for ($i = 0; $i < $count; ++$i) {
- $t = $hashObj->hash($t);
- }
- $key = substr($t, 0, $dkLen);
-
- $this->setKey(substr($key, 0, $dkLen >> 1));
- $this->setIV(substr($key, $dkLen >> 1));
-
- return true;
- // Determining if php[>=5.5.0]'s hash_pbkdf2() function avail- and useable
- case !function_exists('hash_pbkdf2'):
- case !function_exists('hash_algos'):
- case !in_array($hash, hash_algos()):
- $i = 1;
- $hmac = new Hash();
- $hmac->setHash($hash);
- $hmac->setKey($password);
- while (strlen($key) < $dkLen) {
- $f = $u = $hmac->hash($salt . pack('N', $i++));
- for ($j = 2; $j <= $count; ++$j) {
- $u = $hmac->hash($u);
- $f^= $u;
- }
- $key.= $f;
- }
- $key = substr($key, 0, $dkLen);
- break;
- default:
- $key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);
- }
- }
-
- $this->setKey($key);
-
- return true;
- }
-
- /**
- * Encrypts a message.
- *
- * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher
- * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's
- * necessary are discussed in the following
- * URL:
- *
- * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
- *
- * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
- * strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that
- * length.
- *
- * @see self::decrypt()
- * @access public
- * @param string $plaintext
- * @return string $ciphertext
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function encrypt($plaintext)
- {
- if ($this->paddable) {
- $plaintext = $this->_pad($plaintext);
- }
-
- if ($this->engine === self::ENGINE_OPENSSL) {
- if ($this->changed) {
- $this->_clearBuffers();
- $this->changed = false;
- }
- switch ($this->mode) {
- case self::MODE_STREAM:
- return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
- case self::MODE_ECB:
- $result = @openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
- return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
- case self::MODE_CBC:
- $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
- if (!defined('OPENSSL_RAW_DATA')) {
- $result = substr($result, 0, -$this->block_size);
- }
- if ($this->continuousBuffer) {
- $this->encryptIV = substr($result, -$this->block_size);
- }
- return $result;
- case self::MODE_CTR:
- return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
- case self::MODE_CFB:
- // cfb loosely routines inspired by openssl's:
- // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
- $ciphertext = '';
- if ($this->continuousBuffer) {
- $iv = &$this->encryptIV;
- $pos = &$this->enbuffer['pos'];
- } else {
- $iv = $this->encryptIV;
- $pos = 0;
- }
- $len = strlen($plaintext);
- $i = 0;
- if ($pos) {
- $orig_pos = $pos;
- $max = $this->block_size - $pos;
- if ($len >= $max) {
- $i = $max;
- $len-= $max;
- $pos = 0;
- } else {
- $i = $len;
- $pos+= $len;
- $len = 0;
- }
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
- $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
- $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
- $plaintext = substr($plaintext, $i);
- }
-
- $overflow = $len % $this->block_size;
-
- if ($overflow) {
- $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
- $iv = $this->_string_pop($ciphertext, $this->block_size);
-
- $size = $len - $overflow;
- $block = $iv ^ substr($plaintext, -$overflow);
- $iv = substr_replace($iv, $block, 0, $overflow);
- $ciphertext.= $block;
- $pos = $overflow;
- } elseif ($len) {
- $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
- $iv = substr($ciphertext, -$this->block_size);
- }
-
- return $ciphertext;
- case self::MODE_CFB8:
- $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
- if ($this->continuousBuffer) {
- if (($len = strlen($ciphertext)) >= $this->block_size) {
- $this->encryptIV = substr($ciphertext, -$this->block_size);
- } else {
- $this->encryptIV = substr($this->encryptIV, $len - $this->block_size) . substr($ciphertext, -$len);
- }
- }
- return $ciphertext;
- case self::MODE_OFB:
- return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
- }
- }
-
- if ($this->engine === self::ENGINE_MCRYPT) {
- set_error_handler(array($this, 'do_nothing'));
-
- if ($this->changed) {
- $this->_setupMcrypt();
- $this->changed = false;
- }
- if ($this->enchanged) {
- mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
- $this->enchanged = false;
- }
-
- // re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
- // using mcrypt's default handing of CFB the above would output two different things. using phpseclib's
- // rewritten CFB implementation the above outputs the same thing twice.
- if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {
- $block_size = $this->block_size;
- $iv = &$this->encryptIV;
- $pos = &$this->enbuffer['pos'];
- $len = strlen($plaintext);
- $ciphertext = '';
- $i = 0;
- if ($pos) {
- $orig_pos = $pos;
- $max = $block_size - $pos;
- if ($len >= $max) {
- $i = $max;
- $len-= $max;
- $pos = 0;
- } else {
- $i = $len;
- $pos+= $len;
- $len = 0;
- }
- $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
- $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
- $this->enbuffer['enmcrypt_init'] = true;
- }
- if ($len >= $block_size) {
- if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
- if ($this->enbuffer['enmcrypt_init'] === true) {
- mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
- $this->enbuffer['enmcrypt_init'] = false;
- }
- $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
- $iv = substr($ciphertext, -$block_size);
- $len%= $block_size;
- } else {
- while ($len >= $block_size) {
- $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
- $ciphertext.= $iv;
- $len-= $block_size;
- $i+= $block_size;
- }
- }
- }
-
- if ($len) {
- $iv = mcrypt_generic($this->ecb, $iv);
- $block = $iv ^ substr($plaintext, -$len);
- $iv = substr_replace($iv, $block, 0, $len);
- $ciphertext.= $block;
- $pos = $len;
- }
-
- restore_error_handler();
-
- return $ciphertext;
- }
-
- $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
-
- if (!$this->continuousBuffer) {
- mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
- }
-
- restore_error_handler();
-
- return $ciphertext;
- }
-
- if ($this->changed) {
- $this->_setup();
- $this->changed = false;
- }
- if ($this->use_inline_crypt) {
- $inline = $this->inline_crypt;
- return $inline('encrypt', $this, $plaintext);
- }
-
- $buffer = &$this->enbuffer;
- $block_size = $this->block_size;
- $ciphertext = '';
- switch ($this->mode) {
- case self::MODE_ECB:
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
- }
- break;
- case self::MODE_CBC:
- $xor = $this->encryptIV;
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $block = substr($plaintext, $i, $block_size);
- $block = $this->_encryptBlock($block ^ $xor);
- $xor = $block;
- $ciphertext.= $block;
- }
- if ($this->continuousBuffer) {
- $this->encryptIV = $xor;
- }
- break;
- case self::MODE_CTR:
- $xor = $this->encryptIV;
- if (strlen($buffer['ciphertext'])) {
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $block = substr($plaintext, $i, $block_size);
- if (strlen($block) > strlen($buffer['ciphertext'])) {
- $buffer['ciphertext'].= $this->_encryptBlock($xor);
- }
- $this->_increment_str($xor);
- $key = $this->_string_shift($buffer['ciphertext'], $block_size);
- $ciphertext.= $block ^ $key;
- }
- } else {
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $block = substr($plaintext, $i, $block_size);
- $key = $this->_encryptBlock($xor);
- $this->_increment_str($xor);
- $ciphertext.= $block ^ $key;
- }
- }
- if ($this->continuousBuffer) {
- $this->encryptIV = $xor;
- if ($start = strlen($plaintext) % $block_size) {
- $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
- }
- }
- break;
- case self::MODE_CFB:
- // cfb loosely routines inspired by openssl's:
- // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
- if ($this->continuousBuffer) {
- $iv = &$this->encryptIV;
- $pos = &$buffer['pos'];
- } else {
- $iv = $this->encryptIV;
- $pos = 0;
- }
- $len = strlen($plaintext);
- $i = 0;
- if ($pos) {
- $orig_pos = $pos;
- $max = $block_size - $pos;
- if ($len >= $max) {
- $i = $max;
- $len-= $max;
- $pos = 0;
- } else {
- $i = $len;
- $pos+= $len;
- $len = 0;
- }
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
- $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
- $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
- }
- while ($len >= $block_size) {
- $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
- $ciphertext.= $iv;
- $len-= $block_size;
- $i+= $block_size;
- }
- if ($len) {
- $iv = $this->_encryptBlock($iv);
- $block = $iv ^ substr($plaintext, $i);
- $iv = substr_replace($iv, $block, 0, $len);
- $ciphertext.= $block;
- $pos = $len;
- }
- break;
- case self::MODE_CFB8:
- $ciphertext = '';
- $len = strlen($plaintext);
- $iv = $this->encryptIV;
-
- for ($i = 0; $i < $len; ++$i) {
- $ciphertext .= ($c = $plaintext[$i] ^ $this->_encryptBlock($iv));
- $iv = substr($iv, 1) . $c;
- }
-
- if ($this->continuousBuffer) {
- if ($len >= $block_size) {
- $this->encryptIV = substr($ciphertext, -$block_size);
- } else {
- $this->encryptIV = substr($this->encryptIV, $len - $block_size) . substr($ciphertext, -$len);
- }
- }
- break;
- case self::MODE_OFB:
- $xor = $this->encryptIV;
- if (strlen($buffer['xor'])) {
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $block = substr($plaintext, $i, $block_size);
- if (strlen($block) > strlen($buffer['xor'])) {
- $xor = $this->_encryptBlock($xor);
- $buffer['xor'].= $xor;
- }
- $key = $this->_string_shift($buffer['xor'], $block_size);
- $ciphertext.= $block ^ $key;
- }
- } else {
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $xor = $this->_encryptBlock($xor);
- $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
- }
- $key = $xor;
- }
- if ($this->continuousBuffer) {
- $this->encryptIV = $xor;
- if ($start = strlen($plaintext) % $block_size) {
- $buffer['xor'] = substr($key, $start) . $buffer['xor'];
- }
- }
- break;
- case self::MODE_STREAM:
- $ciphertext = $this->_encryptBlock($plaintext);
- break;
- }
-
- return $ciphertext;
- }
-
- /**
- * Decrypts a message.
- *
- * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
- * it is.
- *
- * @see self::encrypt()
- * @access public
- * @param string $ciphertext
- * @return string $plaintext
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function decrypt($ciphertext)
- {
- if ($this->paddable) {
- // we pad with chr(0) since that's what mcrypt_generic does. to quote from {@link http://www.php.net/function.mcrypt-generic}:
- // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
- $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
- }
-
- if ($this->engine === self::ENGINE_OPENSSL) {
- if ($this->changed) {
- $this->_clearBuffers();
- $this->changed = false;
- }
- switch ($this->mode) {
- case self::MODE_STREAM:
- $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
- break;
- case self::MODE_ECB:
- if (!defined('OPENSSL_RAW_DATA')) {
- $ciphertext.= @openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
- }
- $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
- break;
- case self::MODE_CBC:
- if (!defined('OPENSSL_RAW_DATA')) {
- $padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
- $ciphertext.= substr(@openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
- $offset = 2 * $this->block_size;
- } else {
- $offset = $this->block_size;
- }
- $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
- if ($this->continuousBuffer) {
- $this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
- }
- break;
- case self::MODE_CTR:
- $plaintext = $this->_openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);
- break;
- case self::MODE_CFB:
- // cfb loosely routines inspired by openssl's:
- // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
- $plaintext = '';
- if ($this->continuousBuffer) {
- $iv = &$this->decryptIV;
- $pos = &$this->buffer['pos'];
- } else {
- $iv = $this->decryptIV;
- $pos = 0;
- }
- $len = strlen($ciphertext);
- $i = 0;
- if ($pos) {
- $orig_pos = $pos;
- $max = $this->block_size - $pos;
- if ($len >= $max) {
- $i = $max;
- $len-= $max;
- $pos = 0;
- } else {
- $i = $len;
- $pos+= $len;
- $len = 0;
- }
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize
- $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
- $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
- $ciphertext = substr($ciphertext, $i);
- }
- $overflow = $len % $this->block_size;
- if ($overflow) {
- $plaintext.= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
- if ($len - $overflow) {
- $iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);
- }
- $iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
- $plaintext.= $iv ^ substr($ciphertext, -$overflow);
- $iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);
- $pos = $overflow;
- } elseif ($len) {
- $plaintext.= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
- $iv = substr($ciphertext, -$this->block_size);
- }
- break;
- case self::MODE_CFB8:
- $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
- if ($this->continuousBuffer) {
- if (($len = strlen($ciphertext)) >= $this->block_size) {
- $this->decryptIV = substr($ciphertext, -$this->block_size);
- } else {
- $this->decryptIV = substr($this->decryptIV, $len - $this->block_size) . substr($ciphertext, -$len);
- }
- }
- break;
- case self::MODE_OFB:
- $plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
- }
-
- return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
- }
-
- if ($this->engine === self::ENGINE_MCRYPT) {
- set_error_handler(array($this, 'do_nothing'));
- $block_size = $this->block_size;
- if ($this->changed) {
- $this->_setupMcrypt();
- $this->changed = false;
- }
- if ($this->dechanged) {
- mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
- $this->dechanged = false;
- }
-
- if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {
- $iv = &$this->decryptIV;
- $pos = &$this->debuffer['pos'];
- $len = strlen($ciphertext);
- $plaintext = '';
- $i = 0;
- if ($pos) {
- $orig_pos = $pos;
- $max = $block_size - $pos;
- if ($len >= $max) {
- $i = $max;
- $len-= $max;
- $pos = 0;
- } else {
- $i = $len;
- $pos+= $len;
- $len = 0;
- }
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
- $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
- $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
- }
- if ($len >= $block_size) {
- $cb = substr($ciphertext, $i, $len - $len % $block_size);
- $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
- $iv = substr($cb, -$block_size);
- $len%= $block_size;
- }
- if ($len) {
- $iv = mcrypt_generic($this->ecb, $iv);
- $plaintext.= $iv ^ substr($ciphertext, -$len);
- $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
- $pos = $len;
- }
-
- restore_error_handler();
-
- return $plaintext;
- }
-
- $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
-
- if (!$this->continuousBuffer) {
- mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
- }
-
- restore_error_handler();
-
- return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
- }
-
- if ($this->changed) {
- $this->_setup();
- $this->changed = false;
- }
- if ($this->use_inline_crypt) {
- $inline = $this->inline_crypt;
- return $inline('decrypt', $this, $ciphertext);
- }
-
- $block_size = $this->block_size;
-
- $buffer = &$this->debuffer;
- $plaintext = '';
- switch ($this->mode) {
- case self::MODE_ECB:
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
- $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
- }
- break;
- case self::MODE_CBC:
- $xor = $this->decryptIV;
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
- $block = substr($ciphertext, $i, $block_size);
- $plaintext.= $this->_decryptBlock($block) ^ $xor;
- $xor = $block;
- }
- if ($this->continuousBuffer) {
- $this->decryptIV = $xor;
- }
- break;
- case self::MODE_CTR:
- $xor = $this->decryptIV;
- if (strlen($buffer['ciphertext'])) {
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
- $block = substr($ciphertext, $i, $block_size);
- if (strlen($block) > strlen($buffer['ciphertext'])) {
- $buffer['ciphertext'].= $this->_encryptBlock($xor);
- $this->_increment_str($xor);
- }
- $key = $this->_string_shift($buffer['ciphertext'], $block_size);
- $plaintext.= $block ^ $key;
- }
- } else {
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
- $block = substr($ciphertext, $i, $block_size);
- $key = $this->_encryptBlock($xor);
- $this->_increment_str($xor);
- $plaintext.= $block ^ $key;
- }
- }
- if ($this->continuousBuffer) {
- $this->decryptIV = $xor;
- if ($start = strlen($ciphertext) % $block_size) {
- $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
- }
- }
- break;
- case self::MODE_CFB:
- if ($this->continuousBuffer) {
- $iv = &$this->decryptIV;
- $pos = &$buffer['pos'];
- } else {
- $iv = $this->decryptIV;
- $pos = 0;
- }
- $len = strlen($ciphertext);
- $i = 0;
- if ($pos) {
- $orig_pos = $pos;
- $max = $block_size - $pos;
- if ($len >= $max) {
- $i = $max;
- $len-= $max;
- $pos = 0;
- } else {
- $i = $len;
- $pos+= $len;
- $len = 0;
- }
- // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
- $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
- $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
- }
- while ($len >= $block_size) {
- $iv = $this->_encryptBlock($iv);
- $cb = substr($ciphertext, $i, $block_size);
- $plaintext.= $iv ^ $cb;
- $iv = $cb;
- $len-= $block_size;
- $i+= $block_size;
- }
- if ($len) {
- $iv = $this->_encryptBlock($iv);
- $plaintext.= $iv ^ substr($ciphertext, $i);
- $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
- $pos = $len;
- }
- break;
- case self::MODE_CFB8:
- $plaintext = '';
- $len = strlen($ciphertext);
- $iv = $this->decryptIV;
-
- for ($i = 0; $i < $len; ++$i) {
- $plaintext .= $ciphertext[$i] ^ $this->_encryptBlock($iv);
- $iv = substr($iv, 1) . $ciphertext[$i];
- }
-
- if ($this->continuousBuffer) {
- if ($len >= $block_size) {
- $this->decryptIV = substr($ciphertext, -$block_size);
- } else {
- $this->decryptIV = substr($this->decryptIV, $len - $block_size) . substr($ciphertext, -$len);
- }
- }
- break;
- case self::MODE_OFB:
- $xor = $this->decryptIV;
- if (strlen($buffer['xor'])) {
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
- $block = substr($ciphertext, $i, $block_size);
- if (strlen($block) > strlen($buffer['xor'])) {
- $xor = $this->_encryptBlock($xor);
- $buffer['xor'].= $xor;
- }
- $key = $this->_string_shift($buffer['xor'], $block_size);
- $plaintext.= $block ^ $key;
- }
- } else {
- for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
- $xor = $this->_encryptBlock($xor);
- $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
- }
- $key = $xor;
- }
- if ($this->continuousBuffer) {
- $this->decryptIV = $xor;
- if ($start = strlen($ciphertext) % $block_size) {
- $buffer['xor'] = substr($key, $start) . $buffer['xor'];
- }
- }
- break;
- case self::MODE_STREAM:
- $plaintext = $this->_decryptBlock($ciphertext);
- break;
- }
- return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
- }
-
- /**
- * OpenSSL CTR Processor
- *
- * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
- * for CTR is the same for both encrypting and decrypting this function is re-used by both Base::encrypt()
- * and Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
- * function will emulate CTR with ECB when necessary.
- *
- * @see self::encrypt()
- * @see self::decrypt()
- * @param string $plaintext
- * @param string $encryptIV
- * @param array $buffer
- * @return string
- * @access private
- */
- function _openssl_ctr_process($plaintext, &$encryptIV, &$buffer)
- {
- $ciphertext = '';
-
- $block_size = $this->block_size;
- $key = $this->key;
-
- if ($this->openssl_emulate_ctr) {
- $xor = $encryptIV;
- if (strlen($buffer['ciphertext'])) {
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $block = substr($plaintext, $i, $block_size);
- if (strlen($block) > strlen($buffer['ciphertext'])) {
- $result = @openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
- $result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
- $buffer['ciphertext'].= $result;
- }
- $this->_increment_str($xor);
- $otp = $this->_string_shift($buffer['ciphertext'], $block_size);
- $ciphertext.= $block ^ $otp;
- }
- } else {
- for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
- $block = substr($plaintext, $i, $block_size);
- $otp = @openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
- $otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp;
- $this->_increment_str($xor);
- $ciphertext.= $block ^ $otp;
- }
- }
- if ($this->continuousBuffer) {
- $encryptIV = $xor;
- if ($start = strlen($plaintext) % $block_size) {
- $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
- }
- }
-
- return $ciphertext;
- }
-
- if (strlen($buffer['ciphertext'])) {
- $ciphertext = $plaintext ^ $this->_string_shift($buffer['ciphertext'], strlen($plaintext));
- $plaintext = substr($plaintext, strlen($ciphertext));
-
- if (!strlen($plaintext)) {
- return $ciphertext;
- }
- }
-
- $overflow = strlen($plaintext) % $block_size;
- if ($overflow) {
- $plaintext2 = $this->_string_pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2
- $encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
- $temp = $this->_string_pop($encrypted, $block_size);
- $ciphertext.= $encrypted . ($plaintext2 ^ $temp);
- if ($this->continuousBuffer) {
- $buffer['ciphertext'] = substr($temp, $overflow);
- $encryptIV = $temp;
- }
- } elseif (!strlen($buffer['ciphertext'])) {
- $ciphertext.= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
- $temp = $this->_string_pop($ciphertext, $block_size);
- if ($this->continuousBuffer) {
- $encryptIV = $temp;
- }
- }
- if ($this->continuousBuffer) {
- if (!defined('OPENSSL_RAW_DATA')) {
- $encryptIV.= @openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
- }
- $encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
- if ($overflow) {
- $this->_increment_str($encryptIV);
- }
- }
-
- return $ciphertext;
- }
-
- /**
- * OpenSSL OFB Processor
- *
- * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
- * for OFB is the same for both encrypting and decrypting this function is re-used by both Base::encrypt()
- * and Base::decrypt().
- *
- * @see self::encrypt()
- * @see self::decrypt()
- * @param string $plaintext
- * @param string $encryptIV
- * @param array $buffer
- * @return string
- * @access private
- */
- function _openssl_ofb_process($plaintext, &$encryptIV, &$buffer)
- {
- if (strlen($buffer['xor'])) {
- $ciphertext = $plaintext ^ $buffer['xor'];
- $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
- $plaintext = substr($plaintext, strlen($ciphertext));
- } else {
- $ciphertext = '';
- }
-
- $block_size = $this->block_size;
-
- $len = strlen($plaintext);
- $key = $this->key;
- $overflow = $len % $block_size;
-
- if (strlen($plaintext)) {
- if ($overflow) {
- $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
- $xor = $this->_string_pop($ciphertext, $block_size);
- if ($this->continuousBuffer) {
- $encryptIV = $xor;
- }
- $ciphertext.= $this->_string_shift($xor, $overflow) ^ substr($plaintext, -$overflow);
- if ($this->continuousBuffer) {
- $buffer['xor'] = $xor;
- }
- } else {
- $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
- if ($this->continuousBuffer) {
- $encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);
- }
- }
- }
-
- return $ciphertext;
- }
-
- /**
- * phpseclib <-> OpenSSL Mode Mapper
- *
- * May need to be overwritten by classes extending this one in some cases
- *
- * @return int
- * @access private
- */
- function _openssl_translate_mode()
- {
- switch ($this->mode) {
- case self::MODE_ECB:
- return 'ecb';
- case self::MODE_CBC:
- return 'cbc';
- case self::MODE_CTR:
- return 'ctr';
- case self::MODE_CFB:
- return 'cfb';
- case self::MODE_CFB8:
- return 'cfb8';
- case self::MODE_OFB:
- return 'ofb';
- }
- }
-
- /**
- * Pad "packets".
- *
- * Block ciphers working by encrypting between their specified [$this->]block_size at a time
- * If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
- * pad the input so that it is of the proper length.
- *
- * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH,
- * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
- * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
- * transmitted separately)
- *
- * @see self::disablePadding()
- * @access public
- */
- function enablePadding()
- {
- $this->padding = true;
- }
-
- /**
- * Do not pad packets.
- *
- * @see self::enablePadding()
- * @access public
- */
- function disablePadding()
- {
- $this->padding = false;
- }
-
- /**
- * Treat consecutive "packets" as if they are a continuous buffer.
- *
- * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets
- * will yield different outputs:
- *
- *
- * echo $rijndael->encrypt(substr($plaintext, 0, 16));
- * echo $rijndael->encrypt(substr($plaintext, 16, 16));
- *
- *
- * echo $rijndael->encrypt($plaintext);
- *
- *
- * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
- * another, as demonstrated with the following:
- *
- *
- * $rijndael->encrypt(substr($plaintext, 0, 16));
- * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
- *
- *
- * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
- *
- *
- * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
- * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
- * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
- *
- * Put another way, when the continuous buffer is enabled, the state of the \phpseclib\Crypt\*() object changes after each
- * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
- * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
- * however, they are also less intuitive and more likely to cause you problems.
- *
- * @see self::disableContinuousBuffer()
- * @access public
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function enableContinuousBuffer()
- {
- if ($this->mode == self::MODE_ECB) {
- return;
- }
-
- $this->continuousBuffer = true;
-
- $this->_setEngine();
- }
-
- /**
- * Treat consecutive packets as if they are a discontinuous buffer.
- *
- * The default behavior.
- *
- * @see self::enableContinuousBuffer()
- * @access public
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function disableContinuousBuffer()
- {
- if ($this->mode == self::MODE_ECB) {
- return;
- }
- if (!$this->continuousBuffer) {
- return;
- }
-
- $this->continuousBuffer = false;
- $this->changed = true;
-
- $this->_setEngine();
- }
-
- /**
- * Test for engine validity
- *
- * @see self::__construct()
- * @param int $engine
- * @access public
- * @return bool
- */
- function isValidEngine($engine)
- {
- switch ($engine) {
- case self::ENGINE_OPENSSL:
- if ($this->mode == self::MODE_STREAM && $this->continuousBuffer) {
- return false;
- }
- $this->openssl_emulate_ctr = false;
- $result = $this->cipher_name_openssl &&
- extension_loaded('openssl') &&
- // PHP 5.3.0 - 5.3.2 did not let you set IV's
- version_compare(PHP_VERSION, '5.3.3', '>=');
- if (!$result) {
- return false;
- }
-
- // prior to PHP 5.4.0 OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING were not defined. instead of expecting an integer
- // $options openssl_encrypt expected a boolean $raw_data.
- if (!defined('OPENSSL_RAW_DATA')) {
- $this->openssl_options = true;
- } else {
- $this->openssl_options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
- }
-
- $methods = openssl_get_cipher_methods();
- if (in_array($this->cipher_name_openssl, $methods)) {
- return true;
- }
- // not all of openssl's symmetric cipher's support ctr. for those
- // that don't we'll emulate it
- switch ($this->mode) {
- case self::MODE_CTR:
- if (in_array($this->cipher_name_openssl_ecb, $methods)) {
- $this->openssl_emulate_ctr = true;
- return true;
- }
- }
- return false;
- case self::ENGINE_MCRYPT:
- set_error_handler(array($this, 'do_nothing'));
- $result = $this->cipher_name_mcrypt &&
- extension_loaded('mcrypt') &&
- in_array($this->cipher_name_mcrypt, mcrypt_list_algorithms());
- restore_error_handler();
- return $result;
- case self::ENGINE_INTERNAL:
- return true;
- }
-
- return false;
- }
-
- /**
- * Sets the preferred crypt engine
- *
- * Currently, $engine could be:
- *
- * - \phpseclib\Crypt\Base::ENGINE_OPENSSL [very fast]
- *
- * - \phpseclib\Crypt\Base::ENGINE_MCRYPT [fast]
- *
- * - \phpseclib\Crypt\Base::ENGINE_INTERNAL [slow]
- *
- * If the preferred crypt engine is not available the fastest available one will be used
- *
- * @see self::__construct()
- * @param int $engine
- * @access public
- */
- function setPreferredEngine($engine)
- {
- switch ($engine) {
- //case self::ENGINE_OPENSSL;
- case self::ENGINE_MCRYPT:
- case self::ENGINE_INTERNAL:
- $this->preferredEngine = $engine;
- break;
- default:
- $this->preferredEngine = self::ENGINE_OPENSSL;
- }
-
- $this->_setEngine();
- }
-
- /**
- * Returns the engine currently being utilized
- *
- * @see self::_setEngine()
- * @access public
- */
- function getEngine()
- {
- return $this->engine;
- }
-
- /**
- * Sets the engine as appropriate
- *
- * @see self::__construct()
- * @access private
- */
- function _setEngine()
- {
- $this->engine = null;
-
- $candidateEngines = array(
- $this->preferredEngine,
- self::ENGINE_OPENSSL,
- self::ENGINE_MCRYPT
- );
- foreach ($candidateEngines as $engine) {
- if ($this->isValidEngine($engine)) {
- $this->engine = $engine;
- break;
- }
- }
- if (!$this->engine) {
- $this->engine = self::ENGINE_INTERNAL;
- }
-
- if ($this->engine != self::ENGINE_MCRYPT && $this->enmcrypt) {
- set_error_handler(array($this, 'do_nothing'));
- // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
- // (re)open them with the module named in $this->cipher_name_mcrypt
- mcrypt_module_close($this->enmcrypt);
- mcrypt_module_close($this->demcrypt);
- $this->enmcrypt = null;
- $this->demcrypt = null;
-
- if ($this->ecb) {
- mcrypt_module_close($this->ecb);
- $this->ecb = null;
- }
- restore_error_handler();
- }
-
- $this->changed = true;
- }
-
- /**
- * Encrypts a block
- *
- * Note: Must be extended by the child \phpseclib\Crypt\* class
- *
- * @access private
- * @param string $in
- * @return string
- */
- abstract function _encryptBlock($in);
-
- /**
- * Decrypts a block
- *
- * Note: Must be extended by the child \phpseclib\Crypt\* class
- *
- * @access private
- * @param string $in
- * @return string
- */
- abstract function _decryptBlock($in);
-
- /**
- * Setup the key (expansion)
- *
- * Only used if $engine == self::ENGINE_INTERNAL
- *
- * Note: Must extend by the child \phpseclib\Crypt\* class
- *
- * @see self::_setup()
- * @access private
- */
- abstract function _setupKey();
-
- /**
- * Setup the self::ENGINE_INTERNAL $engine
- *
- * (re)init, if necessary, the internal cipher $engine and flush all $buffers
- * Used (only) if $engine == self::ENGINE_INTERNAL
- *
- * _setup() will be called each time if $changed === true
- * typically this happens when using one or more of following public methods:
- *
- * - setKey()
- *
- * - setIV()
- *
- * - disableContinuousBuffer()
- *
- * - First run of encrypt() / decrypt() with no init-settings
- *
- * @see self::setKey()
- * @see self::setIV()
- * @see self::disableContinuousBuffer()
- * @access private
- * @internal _setup() is always called before en/decryption.
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function _setup()
- {
- $this->_clearBuffers();
- $this->_setupKey();
-
- if ($this->use_inline_crypt) {
- $this->_setupInlineCrypt();
- }
- }
-
- /**
- * Setup the self::ENGINE_MCRYPT $engine
- *
- * (re)init, if necessary, the (ext)mcrypt resources and flush all $buffers
- * Used (only) if $engine = self::ENGINE_MCRYPT
- *
- * _setupMcrypt() will be called each time if $changed === true
- * typically this happens when using one or more of following public methods:
- *
- * - setKey()
- *
- * - setIV()
- *
- * - disableContinuousBuffer()
- *
- * - First run of encrypt() / decrypt()
- *
- * @see self::setKey()
- * @see self::setIV()
- * @see self::disableContinuousBuffer()
- * @access private
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function _setupMcrypt()
- {
- $this->_clearBuffers();
- $this->enchanged = $this->dechanged = true;
-
- if (!isset($this->enmcrypt)) {
- static $mcrypt_modes = array(
- self::MODE_CTR => 'ctr',
- self::MODE_ECB => MCRYPT_MODE_ECB,
- self::MODE_CBC => MCRYPT_MODE_CBC,
- self::MODE_CFB => 'ncfb',
- self::MODE_CFB8 => MCRYPT_MODE_CFB,
- self::MODE_OFB => MCRYPT_MODE_NOFB,
- self::MODE_STREAM => MCRYPT_MODE_STREAM,
- );
-
- $this->demcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
- $this->enmcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
-
- // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
- // to workaround mcrypt's broken ncfb implementation in buffered mode
- // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
- if ($this->mode == self::MODE_CFB) {
- $this->ecb = mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
- }
- } // else should mcrypt_generic_deinit be called?
-
- if ($this->mode == self::MODE_CFB) {
- mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
- }
- }
-
- /**
- * Pads a string
- *
- * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
- * $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to
- * chr($this->block_size - (strlen($text) % $this->block_size)
- *
- * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
- * and padding will, hence forth, be enabled.
- *
- * @see self::_unpad()
- * @param string $text
- * @access private
- * @return string
- */
- function _pad($text)
- {
- $length = strlen($text);
-
- if (!$this->padding) {
- if ($length % $this->block_size == 0) {
- return $text;
- } else {
- user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
- $this->padding = true;
- }
- }
-
- $pad = $this->block_size - ($length % $this->block_size);
-
- return str_pad($text, $length + $pad, chr($pad));
- }
-
- /**
- * Unpads a string.
- *
- * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
- * and false will be returned.
- *
- * @see self::_pad()
- * @param string $text
- * @access private
- * @return string
- */
- function _unpad($text)
- {
- if (!$this->padding) {
- return $text;
- }
-
- $length = ord($text[strlen($text) - 1]);
-
- if (!$length || $length > $this->block_size) {
- return false;
- }
-
- return substr($text, 0, -$length);
- }
-
- /**
- * Clears internal buffers
- *
- * Clearing/resetting the internal buffers is done everytime
- * after disableContinuousBuffer() or on cipher $engine (re)init
- * ie after setKey() or setIV()
- *
- * @access public
- * @internal Could, but not must, extend by the child Crypt_* class
- */
- function _clearBuffers()
- {
- $this->enbuffer = $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
-
- // mcrypt's handling of invalid's $iv:
- // $this->encryptIV = $this->decryptIV = strlen($this->iv) == $this->block_size ? $this->iv : str_repeat("\0", $this->block_size);
- $this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0");
-
- if (!$this->skip_key_adjustment) {
- $this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0");
- }
- }
-
- /**
- * String Shift
- *
- * Inspired by array_shift
- *
- * @param string $string
- * @param int $index
- * @access private
- * @return string
- */
- function _string_shift(&$string, $index = 1)
- {
- $substr = substr($string, 0, $index);
- $string = substr($string, $index);
- return $substr;
- }
-
- /**
- * String Pop
- *
- * Inspired by array_pop
- *
- * @param string $string
- * @param int $index
- * @access private
- * @return string
- */
- function _string_pop(&$string, $index = 1)
- {
- $substr = substr($string, -$index);
- $string = substr($string, 0, -$index);
- return $substr;
- }
-
- /**
- * Increment the current string
- *
- * @see self::decrypt()
- * @see self::encrypt()
- * @param string $var
- * @access private
- */
- function _increment_str(&$var)
- {
- for ($i = 4; $i <= strlen($var); $i+= 4) {
- $temp = substr($var, -$i, 4);
- switch ($temp) {
- case "\xFF\xFF\xFF\xFF":
- $var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
- break;
- case "\x7F\xFF\xFF\xFF":
- $var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
- return;
- default:
- $temp = unpack('Nnum', $temp);
- $var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
- return;
- }
- }
-
- $remainder = strlen($var) % 4;
-
- if ($remainder == 0) {
- return;
- }
-
- $temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
- $temp = substr(pack('N', $temp['num'] + 1), -$remainder);
- $var = substr_replace($var, $temp, 0, $remainder);
- }
-
- /**
- * Setup the performance-optimized function for de/encrypt()
- *
- * Stores the created (or existing) callback function-name
- * in $this->inline_crypt
- *
- * Internally for phpseclib developers:
- *
- * _setupInlineCrypt() would be called only if:
- *
- * - $engine == self::ENGINE_INTERNAL and
- *
- * - $use_inline_crypt === true
- *
- * - each time on _setup(), after(!) _setupKey()
- *
- *
- * This ensures that _setupInlineCrypt() has always a
- * full ready2go initializated internal cipher $engine state
- * where, for example, the keys allready expanded,
- * keys/block_size calculated and such.
- *
- * It is, each time if called, the responsibility of _setupInlineCrypt():
- *
- * - to set $this->inline_crypt to a valid and fully working callback function
- * as a (faster) replacement for encrypt() / decrypt()
- *
- * - NOT to create unlimited callback functions (for memory reasons!)
- * no matter how often _setupInlineCrypt() would be called. At some
- * point of amount they must be generic re-useable.
- *
- * - the code of _setupInlineCrypt() it self,
- * and the generated callback code,
- * must be, in following order:
- * - 100% safe
- * - 100% compatible to encrypt()/decrypt()
- * - using only php5+ features/lang-constructs/php-extensions if
- * compatibility (down to php4) or fallback is provided
- * - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)
- * - >= 10% faster than encrypt()/decrypt() [which is, by the way,
- * the reason for the existence of _setupInlineCrypt() :-)]
- * - memory-nice
- * - short (as good as possible)
- *
- * Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.
- * - In case of using inline crypting, _setupInlineCrypt() must extend by the child \phpseclib\Crypt\* class.
- * - The following variable names are reserved:
- * - $_* (all variable names prefixed with an underscore)
- * - $self (object reference to it self. Do not use $this, but $self instead)
- * - $in (the content of $in has to en/decrypt by the generated code)
- * - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only
- *
- *
- * @see self::_setup()
- * @see self::_createInlineCryptFunction()
- * @see self::encrypt()
- * @see self::decrypt()
- * @access private
- * @internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()
- */
- function _setupInlineCrypt()
- {
- // If, for any reason, an extending \phpseclib\Crypt\Base() \phpseclib\Crypt\* class
- // not using inline crypting then it must be ensured that: $this->use_inline_crypt = false
- // ie in the class var declaration of $use_inline_crypt in general for the \phpseclib\Crypt\* class,
- // in the constructor at object instance-time
- // or, if it's runtime-specific, at runtime
-
- $this->use_inline_crypt = false;
- }
-
- /**
- * Creates the performance-optimized function for en/decrypt()
- *
- * Internally for phpseclib developers:
- *
- * _createInlineCryptFunction():
- *
- * - merge the $cipher_code [setup'ed by _setupInlineCrypt()]
- * with the current [$this->]mode of operation code
- *
- * - create the $inline function, which called by encrypt() / decrypt()
- * as its replacement to speed up the en/decryption operations.
- *
- * - return the name of the created $inline callback function
- *
- * - used to speed up en/decryption
- *
- *
- *
- * The main reason why can speed up things [up to 50%] this way are:
- *
- * - using variables more effective then regular.
- * (ie no use of expensive arrays but integers $k_0, $k_1 ...
- * or even, for example, the pure $key[] values hardcoded)
- *
- * - avoiding 1000's of function calls of ie _encryptBlock()
- * but inlining the crypt operations.
- * in the mode of operation for() loop.
- *
- * - full loop unroll the (sometimes key-dependent) rounds
- * avoiding this way ++$i counters and runtime-if's etc...
- *
- * The basic code architectur of the generated $inline en/decrypt()
- * lambda function, in pseudo php, is:
- *
- *
- * +----------------------------------------------------------------------------------------------+
- * | callback $inline = create_function: |
- * | lambda_function_0001_crypt_ECB($action, $text) |
- * | { |
- * | INSERT PHP CODE OF: |
- * | $cipher_code['init_crypt']; // general init code. |
- * | // ie: $sbox'es declarations used for |
- * | // encrypt and decrypt'ing. |
- * | |
- * | switch ($action) { |
- * | case 'encrypt': |
- * | INSERT PHP CODE OF: |
- * | $cipher_code['init_encrypt']; // encrypt sepcific init code. |
- * | ie: specified $key or $box |
- * | declarations for encrypt'ing. |
- * | |
- * | foreach ($ciphertext) { |
- * | $in = $block_size of $ciphertext; |
- * | |
- * | INSERT PHP CODE OF: |
- * | $cipher_code['encrypt_block']; // encrypt's (string) $in, which is always: |
- * | // strlen($in) == $this->block_size |
- * | // here comes the cipher algorithm in action |
- * | // for encryption. |
- * | // $cipher_code['encrypt_block'] has to |
- * | // encrypt the content of the $in variable |
- * | |
- * | $plaintext .= $in; |
- * | } |
- * | return $plaintext; |
- * | |
- * | case 'decrypt': |
- * | INSERT PHP CODE OF: |
- * | $cipher_code['init_decrypt']; // decrypt sepcific init code |
- * | ie: specified $key or $box |
- * | declarations for decrypt'ing. |
- * | foreach ($plaintext) { |
- * | $in = $block_size of $plaintext; |
- * | |
- * | INSERT PHP CODE OF: |
- * | $cipher_code['decrypt_block']; // decrypt's (string) $in, which is always |
- * | // strlen($in) == $this->block_size |
- * | // here comes the cipher algorithm in action |
- * | // for decryption. |
- * | // $cipher_code['decrypt_block'] has to |
- * | // decrypt the content of the $in variable |
- * | $ciphertext .= $in; |
- * | } |
- * | return $ciphertext; |
- * | } |
- * | } |
- * +----------------------------------------------------------------------------------------------+
- *
- *
- * See also the \phpseclib\Crypt\*::_setupInlineCrypt()'s for
- * productive inline $cipher_code's how they works.
- *
- * Structure of:
- *
- * $cipher_code = array(
- * 'init_crypt' => (string) '', // optional
- * 'init_encrypt' => (string) '', // optional
- * 'init_decrypt' => (string) '', // optional
- * 'encrypt_block' => (string) '', // required
- * 'decrypt_block' => (string) '' // required
- * );
- *
- *
- * @see self::_setupInlineCrypt()
- * @see self::encrypt()
- * @see self::decrypt()
- * @param array $cipher_code
- * @access private
- * @return string (the name of the created callback function)
- */
- function _createInlineCryptFunction($cipher_code)
- {
- $block_size = $this->block_size;
-
- // optional
- $init_crypt = isset($cipher_code['init_crypt']) ? $cipher_code['init_crypt'] : '';
- $init_encrypt = isset($cipher_code['init_encrypt']) ? $cipher_code['init_encrypt'] : '';
- $init_decrypt = isset($cipher_code['init_decrypt']) ? $cipher_code['init_decrypt'] : '';
- // required
- $encrypt_block = $cipher_code['encrypt_block'];
- $decrypt_block = $cipher_code['decrypt_block'];
-
- // Generating mode of operation inline code,
- // merged with the $cipher_code algorithm
- // for encrypt- and decryption.
- switch ($this->mode) {
- case self::MODE_ECB:
- $encrypt = $init_encrypt . '
- $_ciphertext = "";
- $_plaintext_len = strlen($_text);
-
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
- $in = substr($_text, $_i, '.$block_size.');
- '.$encrypt_block.'
- $_ciphertext.= $in;
- }
-
- return $_ciphertext;
- ';
-
- $decrypt = $init_decrypt . '
- $_plaintext = "";
- $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
- $_ciphertext_len = strlen($_text);
-
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
- $in = substr($_text, $_i, '.$block_size.');
- '.$decrypt_block.'
- $_plaintext.= $in;
- }
-
- return $self->_unpad($_plaintext);
- ';
- break;
- case self::MODE_CTR:
- $encrypt = $init_encrypt . '
- $_ciphertext = "";
- $_plaintext_len = strlen($_text);
- $_xor = $self->encryptIV;
- $_buffer = &$self->enbuffer;
- if (strlen($_buffer["ciphertext"])) {
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
- $_block = substr($_text, $_i, '.$block_size.');
- if (strlen($_block) > strlen($_buffer["ciphertext"])) {
- $in = $_xor;
- '.$encrypt_block.'
- $self->_increment_str($_xor);
- $_buffer["ciphertext"].= $in;
- }
- $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
- $_ciphertext.= $_block ^ $_key;
- }
- } else {
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
- $_block = substr($_text, $_i, '.$block_size.');
- $in = $_xor;
- '.$encrypt_block.'
- $self->_increment_str($_xor);
- $_key = $in;
- $_ciphertext.= $_block ^ $_key;
- }
- }
- if ($self->continuousBuffer) {
- $self->encryptIV = $_xor;
- if ($_start = $_plaintext_len % '.$block_size.') {
- $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
- }
- }
-
- return $_ciphertext;
- ';
-
- $decrypt = $init_encrypt . '
- $_plaintext = "";
- $_ciphertext_len = strlen($_text);
- $_xor = $self->decryptIV;
- $_buffer = &$self->debuffer;
-
- if (strlen($_buffer["ciphertext"])) {
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
- $_block = substr($_text, $_i, '.$block_size.');
- if (strlen($_block) > strlen($_buffer["ciphertext"])) {
- $in = $_xor;
- '.$encrypt_block.'
- $self->_increment_str($_xor);
- $_buffer["ciphertext"].= $in;
- }
- $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
- $_plaintext.= $_block ^ $_key;
- }
- } else {
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
- $_block = substr($_text, $_i, '.$block_size.');
- $in = $_xor;
- '.$encrypt_block.'
- $self->_increment_str($_xor);
- $_key = $in;
- $_plaintext.= $_block ^ $_key;
- }
- }
- if ($self->continuousBuffer) {
- $self->decryptIV = $_xor;
- if ($_start = $_ciphertext_len % '.$block_size.') {
- $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
- }
- }
-
- return $_plaintext;
- ';
- break;
- case self::MODE_CFB:
- $encrypt = $init_encrypt . '
- $_ciphertext = "";
- $_buffer = &$self->enbuffer;
-
- if ($self->continuousBuffer) {
- $_iv = &$self->encryptIV;
- $_pos = &$_buffer["pos"];
- } else {
- $_iv = $self->encryptIV;
- $_pos = 0;
- }
- $_len = strlen($_text);
- $_i = 0;
- if ($_pos) {
- $_orig_pos = $_pos;
- $_max = '.$block_size.' - $_pos;
- if ($_len >= $_max) {
- $_i = $_max;
- $_len-= $_max;
- $_pos = 0;
- } else {
- $_i = $_len;
- $_pos+= $_len;
- $_len = 0;
- }
- $_ciphertext = substr($_iv, $_orig_pos) ^ $_text;
- $_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);
- }
- while ($_len >= '.$block_size.') {
- $in = $_iv;
- '.$encrypt_block.';
- $_iv = $in ^ substr($_text, $_i, '.$block_size.');
- $_ciphertext.= $_iv;
- $_len-= '.$block_size.';
- $_i+= '.$block_size.';
- }
- if ($_len) {
- $in = $_iv;
- '.$encrypt_block.'
- $_iv = $in;
- $_block = $_iv ^ substr($_text, $_i);
- $_iv = substr_replace($_iv, $_block, 0, $_len);
- $_ciphertext.= $_block;
- $_pos = $_len;
- }
- return $_ciphertext;
- ';
-
- $decrypt = $init_encrypt . '
- $_plaintext = "";
- $_buffer = &$self->debuffer;
-
- if ($self->continuousBuffer) {
- $_iv = &$self->decryptIV;
- $_pos = &$_buffer["pos"];
- } else {
- $_iv = $self->decryptIV;
- $_pos = 0;
- }
- $_len = strlen($_text);
- $_i = 0;
- if ($_pos) {
- $_orig_pos = $_pos;
- $_max = '.$block_size.' - $_pos;
- if ($_len >= $_max) {
- $_i = $_max;
- $_len-= $_max;
- $_pos = 0;
- } else {
- $_i = $_len;
- $_pos+= $_len;
- $_len = 0;
- }
- $_plaintext = substr($_iv, $_orig_pos) ^ $_text;
- $_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);
- }
- while ($_len >= '.$block_size.') {
- $in = $_iv;
- '.$encrypt_block.'
- $_iv = $in;
- $cb = substr($_text, $_i, '.$block_size.');
- $_plaintext.= $_iv ^ $cb;
- $_iv = $cb;
- $_len-= '.$block_size.';
- $_i+= '.$block_size.';
- }
- if ($_len) {
- $in = $_iv;
- '.$encrypt_block.'
- $_iv = $in;
- $_plaintext.= $_iv ^ substr($_text, $_i);
- $_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);
- $_pos = $_len;
- }
-
- return $_plaintext;
- ';
- break;
- case self::MODE_CFB8:
- $encrypt = $init_encrypt . '
- $_ciphertext = "";
- $_len = strlen($_text);
- $_iv = $self->encryptIV;
-
- for ($_i = 0; $_i < $_len; ++$_i) {
- $in = $_iv;
- '.$encrypt_block.'
- $_ciphertext .= ($_c = $_text[$_i] ^ $in);
- $_iv = substr($_iv, 1) . $_c;
- }
-
- if ($self->continuousBuffer) {
- if ($_len >= '.$block_size.') {
- $self->encryptIV = substr($_ciphertext, -'.$block_size.');
- } else {
- $self->encryptIV = substr($self->encryptIV, $_len - '.$block_size.') . substr($_ciphertext, -$_len);
- }
- }
-
- return $_ciphertext;
- ';
- $decrypt = $init_encrypt . '
- $_plaintext = "";
- $_len = strlen($_text);
- $_iv = $self->decryptIV;
-
- for ($_i = 0; $_i < $_len; ++$_i) {
- $in = $_iv;
- '.$encrypt_block.'
- $_plaintext .= $_text[$_i] ^ $in;
- $_iv = substr($_iv, 1) . $_text[$_i];
- }
-
- if ($self->continuousBuffer) {
- if ($_len >= '.$block_size.') {
- $self->decryptIV = substr($_text, -'.$block_size.');
- } else {
- $self->decryptIV = substr($self->decryptIV, $_len - '.$block_size.') . substr($_text, -$_len);
- }
- }
-
- return $_plaintext;
- ';
- break;
- case self::MODE_OFB:
- $encrypt = $init_encrypt . '
- $_ciphertext = "";
- $_plaintext_len = strlen($_text);
- $_xor = $self->encryptIV;
- $_buffer = &$self->enbuffer;
-
- if (strlen($_buffer["xor"])) {
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
- $_block = substr($_text, $_i, '.$block_size.');
- if (strlen($_block) > strlen($_buffer["xor"])) {
- $in = $_xor;
- '.$encrypt_block.'
- $_xor = $in;
- $_buffer["xor"].= $_xor;
- }
- $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
- $_ciphertext.= $_block ^ $_key;
- }
- } else {
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
- $in = $_xor;
- '.$encrypt_block.'
- $_xor = $in;
- $_ciphertext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
- }
- $_key = $_xor;
- }
- if ($self->continuousBuffer) {
- $self->encryptIV = $_xor;
- if ($_start = $_plaintext_len % '.$block_size.') {
- $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
- }
- }
- return $_ciphertext;
- ';
-
- $decrypt = $init_encrypt . '
- $_plaintext = "";
- $_ciphertext_len = strlen($_text);
- $_xor = $self->decryptIV;
- $_buffer = &$self->debuffer;
-
- if (strlen($_buffer["xor"])) {
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
- $_block = substr($_text, $_i, '.$block_size.');
- if (strlen($_block) > strlen($_buffer["xor"])) {
- $in = $_xor;
- '.$encrypt_block.'
- $_xor = $in;
- $_buffer["xor"].= $_xor;
- }
- $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
- $_plaintext.= $_block ^ $_key;
- }
- } else {
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
- $in = $_xor;
- '.$encrypt_block.'
- $_xor = $in;
- $_plaintext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
- }
- $_key = $_xor;
- }
- if ($self->continuousBuffer) {
- $self->decryptIV = $_xor;
- if ($_start = $_ciphertext_len % '.$block_size.') {
- $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
- }
- }
- return $_plaintext;
- ';
- break;
- case self::MODE_STREAM:
- $encrypt = $init_encrypt . '
- $_ciphertext = "";
- '.$encrypt_block.'
- return $_ciphertext;
- ';
- $decrypt = $init_decrypt . '
- $_plaintext = "";
- '.$decrypt_block.'
- return $_plaintext;
- ';
- break;
- // case self::MODE_CBC:
- default:
- $encrypt = $init_encrypt . '
- $_ciphertext = "";
- $_plaintext_len = strlen($_text);
-
- $in = $self->encryptIV;
-
- for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
- $in = substr($_text, $_i, '.$block_size.') ^ $in;
- '.$encrypt_block.'
- $_ciphertext.= $in;
- }
-
- if ($self->continuousBuffer) {
- $self->encryptIV = $in;
- }
-
- return $_ciphertext;
- ';
-
- $decrypt = $init_decrypt . '
- $_plaintext = "";
- $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
- $_ciphertext_len = strlen($_text);
-
- $_iv = $self->decryptIV;
-
- for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
- $in = $_block = substr($_text, $_i, '.$block_size.');
- '.$decrypt_block.'
- $_plaintext.= $in ^ $_iv;
- $_iv = $_block;
- }
-
- if ($self->continuousBuffer) {
- $self->decryptIV = $_iv;
- }
-
- return $self->_unpad($_plaintext);
- ';
- break;
- }
-
- // Create the $inline function and return its name as string. Ready to run!
- eval('$func = function ($_action, &$self, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' } };');
- return $func;
- }
-
- /**
- * Holds the lambda_functions table (classwide)
- *
- * Each name of the lambda function, created from
- * _setupInlineCrypt() && _createInlineCryptFunction()
- * is stored, classwide (!), here for reusing.
- *
- * The string-based index of $function is a classwide
- * unique value representing, at least, the $mode of
- * operation (or more... depends of the optimizing level)
- * for which $mode the lambda function was created.
- *
- * @access private
- * @return array &$functions
- */
- function &_getLambdaFunctions()
- {
- static $functions = array();
- return $functions;
- }
-
- /**
- * Generates a digest from $bytes
- *
- * @see self::_setupInlineCrypt()
- * @access private
- * @param string $bytes
- * @return string
- */
- function _hashInlineCryptFunction($bytes)
- {
- if (!isset(self::$WHIRLPOOL_AVAILABLE)) {
- self::$WHIRLPOOL_AVAILABLE = extension_loaded('hash') && in_array('whirlpool', hash_algos());
- }
-
- $result = '';
- $hash = $bytes;
-
- switch (true) {
- case self::$WHIRLPOOL_AVAILABLE:
- foreach (str_split($bytes, 64) as $t) {
- $hash = hash('whirlpool', $hash, true);
- $result .= $t ^ $hash;
- }
- return $result . hash('whirlpool', $hash, true);
- default:
- $len = strlen($bytes);
- for ($i = 0; $i < $len; $i+=20) {
- $t = substr($bytes, $i, 20);
- $hash = pack('H*', sha1($hash));
- $result .= $t ^ $hash;
- }
- return $result . pack('H*', sha1($hash));
- }
- }
-
- /**
- * Convert float to int
- *
- * On ARM CPUs converting floats to ints doesn't always work
- *
- * @access private
- * @param string $x
- * @return int
- */
- function safe_intval($x)
- {
- switch (true) {
- case is_int($x):
- // PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding"
- case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
- return $x;
- }
- return (fmod($x, 0x80000000) & 0x7FFFFFFF) |
- ((fmod(floor($x / 0x80000000), 2) & 1) << 31);
- }
-
- /**
- * eval()'able string for in-line float to int
- *
- * @access private
- * @return string
- */
- function safe_intval_inline()
- {
- switch (true) {
- case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:
- case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
- return '%s';
- break;
- default:
- $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';
- return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';
- }
- }
-
- /**
- * Dummy error handler to suppress mcrypt errors
- *
- * @access private
- */
- function do_nothing()
- {
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php
deleted file mode 100644
index 74cc49de8..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php
+++ /dev/null
@@ -1,571 +0,0 @@
-
- * setKey('12345678901234567890123456789012');
- *
- * $plaintext = str_repeat('a', 1024);
- *
- * echo $blowfish->decrypt($blowfish->encrypt($plaintext));
- * ?>
- *
- *
- * @category Crypt
- * @package Blowfish
- * @author Jim Wigginton
- * @author Hans-Juergen Petrich
- * @copyright 2007 Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
- */
-
-namespace phpseclib\Crypt;
-
-/**
- * Pure-PHP implementation of Blowfish.
- *
- * @package Blowfish
- * @author Jim Wigginton
- * @author Hans-Juergen Petrich
- * @access public
- */
-class Blowfish extends Base
-{
- /**
- * Block Length of the cipher
- *
- * @see \phpseclib\Crypt\Base::block_size
- * @var int
- * @access private
- */
- var $block_size = 8;
-
- /**
- * The mcrypt specific name of the cipher
- *
- * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
- * @var string
- * @access private
- */
- var $cipher_name_mcrypt = 'blowfish';
-
- /**
- * Optimizing value while CFB-encrypting
- *
- * @see \phpseclib\Crypt\Base::cfb_init_len
- * @var int
- * @access private
- */
- var $cfb_init_len = 500;
-
- /**
- * The fixed subkeys boxes ($sbox0 - $sbox3) with 256 entries each
- *
- * S-Box 0
- *
- * @access private
- * @var array
- */
- var $sbox0 = array(
- 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
- 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
- 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
- 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
- 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
- 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
- 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
- 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
- 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
- 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
- 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
- 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
- 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
- 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
- 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
- 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
- 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
- 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
- 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
- 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
- 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
- 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
- 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
- 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
- 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
- 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
- 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
- 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
- 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
- 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
- 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
- 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
- );
-
- /**
- * S-Box 1
- *
- * @access private
- * @var array
- */
- var $sbox1 = array(
- 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
- 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
- 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
- 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
- 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
- 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
- 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
- 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
- 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
- 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
- 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
- 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
- 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
- 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
- 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
- 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
- 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
- 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
- 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
- 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
- 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
- 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
- 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
- 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
- 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
- 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
- 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
- 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
- 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
- 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
- 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
- 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
- );
-
- /**
- * S-Box 2
- *
- * @access private
- * @var array
- */
- var $sbox2 = array(
- 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
- 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
- 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
- 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
- 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
- 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
- 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
- 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
- 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
- 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
- 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
- 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
- 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
- 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
- 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
- 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
- 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
- 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
- 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
- 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
- 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
- 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
- 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
- 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
- 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
- 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
- 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
- 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
- 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
- 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
- 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
- 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
- );
-
- /**
- * S-Box 3
- *
- * @access private
- * @var array
- */
- var $sbox3 = array(
- 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
- 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
- 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
- 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
- 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
- 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
- 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
- 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
- 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
- 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
- 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
- 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
- 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
- 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
- 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
- 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
- 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
- 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
- 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
- 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
- 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
- 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
- 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
- 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
- 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
- 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
- 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
- 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
- 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
- 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
- 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
- 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
- );
-
- /**
- * P-Array consists of 18 32-bit subkeys
- *
- * @var array
- * @access private
- */
- var $parray = array(
- 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
- 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
- 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b
- );
-
- /**
- * The BCTX-working Array
- *
- * Holds the expanded key [p] and the key-depended s-boxes [sb]
- *
- * @var array
- * @access private
- */
- var $bctx;
-
- /**
- * Holds the last used key
- *
- * @var array
- * @access private
- */
- var $kl;
-
- /**
- * The Key Length (in bytes)
- *
- * @see \phpseclib\Crypt\Base::setKeyLength()
- * @var int
- * @access private
- * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk
- * because the encryption / decryption / key schedule creation requires this number and not $key_length. We could
- * derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
- * of that, we'll just precompute it once.
- */
- var $key_length = 16;
-
- /**
- * Sets the key length.
- *
- * Key lengths can be between 32 and 448 bits.
- *
- * @access public
- * @param int $length
- */
- function setKeyLength($length)
- {
- if ($length < 32) {
- $this->key_length = 4;
- } elseif ($length > 448) {
- $this->key_length = 56;
- } else {
- $this->key_length = $length >> 3;
- }
-
- parent::setKeyLength($length);
- }
-
- /**
- * Test for engine validity
- *
- * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
- *
- * @see \phpseclib\Crypt\Base::isValidEngine()
- * @param int $engine
- * @access public
- * @return bool
- */
- function isValidEngine($engine)
- {
- if ($engine == self::ENGINE_OPENSSL) {
- if (version_compare(PHP_VERSION, '5.3.7') < 0 && $this->key_length != 16) {
- return false;
- }
- if ($this->key_length < 16) {
- return false;
- }
- $this->cipher_name_openssl_ecb = 'bf-ecb';
- $this->cipher_name_openssl = 'bf-' . $this->_openssl_translate_mode();
- }
-
- return parent::isValidEngine($engine);
- }
-
- /**
- * Setup the key (expansion)
- *
- * @see \phpseclib\Crypt\Base::_setupKey()
- * @access private
- */
- function _setupKey()
- {
- if (isset($this->kl['key']) && $this->key === $this->kl['key']) {
- // already expanded
- return;
- }
- $this->kl = array('key' => $this->key);
-
- /* key-expanding p[] and S-Box building sb[] */
- $this->bctx = array(
- 'p' => array(),
- 'sb' => array(
- $this->sbox0,
- $this->sbox1,
- $this->sbox2,
- $this->sbox3
- )
- );
-
- // unpack binary string in unsigned chars
- $key = array_values(unpack('C*', $this->key));
- $keyl = count($key);
- for ($j = 0, $i = 0; $i < 18; ++$i) {
- // xor P1 with the first 32-bits of the key, xor P2 with the second 32-bits ...
- for ($data = 0, $k = 0; $k < 4; ++$k) {
- $data = ($data << 8) | $key[$j];
- if (++$j >= $keyl) {
- $j = 0;
- }
- }
- $this->bctx['p'][] = $this->parray[$i] ^ $data;
- }
-
- // encrypt the zero-string, replace P1 and P2 with the encrypted data,
- // encrypt P3 and P4 with the new P1 and P2, do it with all P-array and subkeys
- $data = "\0\0\0\0\0\0\0\0";
- for ($i = 0; $i < 18; $i += 2) {
- list($l, $r) = array_values(unpack('N*', $data = $this->_encryptBlock($data)));
- $this->bctx['p'][$i ] = $l;
- $this->bctx['p'][$i + 1] = $r;
- }
- for ($i = 0; $i < 4; ++$i) {
- for ($j = 0; $j < 256; $j += 2) {
- list($l, $r) = array_values(unpack('N*', $data = $this->_encryptBlock($data)));
- $this->bctx['sb'][$i][$j ] = $l;
- $this->bctx['sb'][$i][$j + 1] = $r;
- }
- }
- }
-
- /**
- * Encrypts a block
- *
- * @access private
- * @param string $in
- * @return string
- */
- function _encryptBlock($in)
- {
- $p = $this->bctx["p"];
- // extract($this->bctx["sb"], EXTR_PREFIX_ALL, "sb"); // slower
- $sb_0 = $this->bctx["sb"][0];
- $sb_1 = $this->bctx["sb"][1];
- $sb_2 = $this->bctx["sb"][2];
- $sb_3 = $this->bctx["sb"][3];
-
- $in = unpack("N*", $in);
- $l = $in[1];
- $r = $in[2];
-
- for ($i = 0; $i < 16; $i+= 2) {
- $l^= $p[$i];
- $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^
- $sb_2[$l >> 8 & 0xff]) +
- $sb_3[$l & 0xff]);
-
- $r^= $p[$i + 1];
- $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^
- $sb_2[$r >> 8 & 0xff]) +
- $sb_3[$r & 0xff]);
- }
- return pack("N*", $r ^ $p[17], $l ^ $p[16]);
- }
-
- /**
- * Decrypts a block
- *
- * @access private
- * @param string $in
- * @return string
- */
- function _decryptBlock($in)
- {
- $p = $this->bctx["p"];
- $sb_0 = $this->bctx["sb"][0];
- $sb_1 = $this->bctx["sb"][1];
- $sb_2 = $this->bctx["sb"][2];
- $sb_3 = $this->bctx["sb"][3];
-
- $in = unpack("N*", $in);
- $l = $in[1];
- $r = $in[2];
-
- for ($i = 17; $i > 2; $i-= 2) {
- $l^= $p[$i];
- $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^
- $sb_2[$l >> 8 & 0xff]) +
- $sb_3[$l & 0xff]);
-
- $r^= $p[$i - 1];
- $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^
- $sb_2[$r >> 8 & 0xff]) +
- $sb_3[$r & 0xff]);
- }
- return pack("N*", $r ^ $p[0], $l ^ $p[1]);
- }
-
- /**
- * Setup the performance-optimized function for de/encrypt()
- *
- * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
- * @access private
- */
- function _setupInlineCrypt()
- {
- $lambda_functions =& self::_getLambdaFunctions();
-
- // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
- // (Currently, for Blowfish, one generated $lambda_function cost on php5.5@32bit ~100kb unfreeable mem and ~180kb on php5.5@64bit)
- // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one.
- $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
-
- // Generation of a unique hash for our generated code
- $code_hash = "Crypt_Blowfish, {$this->mode}";
- if ($gen_hi_opt_code) {
- $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
- }
-
- $safeint = $this->safe_intval_inline();
-
- if (!isset($lambda_functions[$code_hash])) {
- switch (true) {
- case $gen_hi_opt_code:
- $p = $this->bctx['p'];
- $init_crypt = '
- static $sb_0, $sb_1, $sb_2, $sb_3;
- if (!$sb_0) {
- $sb_0 = $self->bctx["sb"][0];
- $sb_1 = $self->bctx["sb"][1];
- $sb_2 = $self->bctx["sb"][2];
- $sb_3 = $self->bctx["sb"][3];
- }
- ';
- break;
- default:
- $p = array();
- for ($i = 0; $i < 18; ++$i) {
- $p[] = '$p_' . $i;
- }
- $init_crypt = '
- list($sb_0, $sb_1, $sb_2, $sb_3) = $self->bctx["sb"];
- list(' . implode(',', $p) . ') = $self->bctx["p"];
-
- ';
- }
-
- // Generating encrypt code:
- $encrypt_block = '
- $in = unpack("N*", $in);
- $l = $in[1];
- $r = $in[2];
- ';
- for ($i = 0; $i < 16; $i+= 2) {
- $encrypt_block.= '
- $l^= ' . $p[$i] . ';
- $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^
- $sb_2[$l >> 8 & 0xff]) +
- $sb_3[$l & 0xff]') . ';
-
- $r^= ' . $p[$i + 1] . ';
- $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^
- $sb_2[$r >> 8 & 0xff]) +
- $sb_3[$r & 0xff]') . ';
- ';
- }
- $encrypt_block.= '
- $in = pack("N*",
- $r ^ ' . $p[17] . ',
- $l ^ ' . $p[16] . '
- );
- ';
-
- // Generating decrypt code:
- $decrypt_block = '
- $in = unpack("N*", $in);
- $l = $in[1];
- $r = $in[2];
- ';
-
- for ($i = 17; $i > 2; $i-= 2) {
- $decrypt_block.= '
- $l^= ' . $p[$i] . ';
- $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^
- $sb_2[$l >> 8 & 0xff]) +
- $sb_3[$l & 0xff]') . ';
-
- $r^= ' . $p[$i - 1] . ';
- $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^
- $sb_2[$r >> 8 & 0xff]) +
- $sb_3[$r & 0xff]') . ';
- ';
- }
-
- $decrypt_block.= '
- $in = pack("N*",
- $r ^ ' . $p[0] . ',
- $l ^ ' . $p[1] . '
- );
- ';
-
- $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
- array(
- 'init_crypt' => $init_crypt,
- 'init_encrypt' => '',
- 'init_decrypt' => '',
- 'encrypt_block' => $encrypt_block,
- 'decrypt_block' => $decrypt_block
- )
- );
- }
- $this->inline_crypt = $lambda_functions[$code_hash];
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php
deleted file mode 100644
index 9a8225fb5..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php
+++ /dev/null
@@ -1,1443 +0,0 @@
-
- * setKey('abcdefgh');
- *
- * $size = 10 * 1024;
- * $plaintext = '';
- * for ($i = 0; $i < $size; $i++) {
- * $plaintext.= 'a';
- * }
- *
- * echo $des->decrypt($des->encrypt($plaintext));
- * ?>
- *
- *
- * @category Crypt
- * @package DES
- * @author Jim Wigginton
- * @copyright 2007 Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
- */
-
-namespace phpseclib\Crypt;
-
-/**
- * Pure-PHP implementation of DES.
- *
- * @package DES
- * @author Jim Wigginton
- * @access public
- */
-class DES extends Base
-{
- /**#@+
- * @access private
- * @see \phpseclib\Crypt\DES::_setupKey()
- * @see \phpseclib\Crypt\DES::_processBlock()
- */
- /**
- * Contains $keys[self::ENCRYPT]
- */
- const ENCRYPT = 0;
- /**
- * Contains $keys[self::DECRYPT]
- */
- const DECRYPT = 1;
- /**#@-*/
-
- /**
- * Block Length of the cipher
- *
- * @see \phpseclib\Crypt\Base::block_size
- * @var int
- * @access private
- */
- var $block_size = 8;
-
- /**
- * Key Length (in bytes)
- *
- * @see \phpseclib\Crypt\Base::setKeyLength()
- * @var int
- * @access private
- */
- var $key_length = 8;
-
- /**
- * The mcrypt specific name of the cipher
- *
- * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
- * @var string
- * @access private
- */
- var $cipher_name_mcrypt = 'des';
-
- /**
- * The OpenSSL names of the cipher / modes
- *
- * @see \phpseclib\Crypt\Base::openssl_mode_names
- * @var array
- * @access private
- */
- var $openssl_mode_names = array(
- self::MODE_ECB => 'des-ecb',
- self::MODE_CBC => 'des-cbc',
- self::MODE_CFB => 'des-cfb',
- self::MODE_OFB => 'des-ofb'
- // self::MODE_CTR is undefined for DES
- );
-
- /**
- * Optimizing value while CFB-encrypting
- *
- * @see \phpseclib\Crypt\Base::cfb_init_len
- * @var int
- * @access private
- */
- var $cfb_init_len = 500;
-
- /**
- * Switch for DES/3DES encryption
- *
- * Used only if $engine == self::ENGINE_INTERNAL
- *
- * @see self::_setupKey()
- * @see self::_processBlock()
- * @var int
- * @access private
- */
- var $des_rounds = 1;
-
- /**
- * max possible size of $key
- *
- * @see self::setKey()
- * @var string
- * @access private
- */
- var $key_length_max = 8;
-
- /**
- * The Key Schedule
- *
- * @see self::_setupKey()
- * @var array
- * @access private
- */
- var $keys;
-
- /**
- * Shuffle table.
- *
- * For each byte value index, the entry holds an 8-byte string
- * with each byte containing all bits in the same state as the
- * corresponding bit in the index value.
- *
- * @see self::_processBlock()
- * @see self::_setupKey()
- * @var array
- * @access private
- */
- var $shuffle = array(
- "\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\xFF",
- "\x00\x00\x00\x00\x00\x00\xFF\x00", "\x00\x00\x00\x00\x00\x00\xFF\xFF",
- "\x00\x00\x00\x00\x00\xFF\x00\x00", "\x00\x00\x00\x00\x00\xFF\x00\xFF",
- "\x00\x00\x00\x00\x00\xFF\xFF\x00", "\x00\x00\x00\x00\x00\xFF\xFF\xFF",
- "\x00\x00\x00\x00\xFF\x00\x00\x00", "\x00\x00\x00\x00\xFF\x00\x00\xFF",
- "\x00\x00\x00\x00\xFF\x00\xFF\x00", "\x00\x00\x00\x00\xFF\x00\xFF\xFF",
- "\x00\x00\x00\x00\xFF\xFF\x00\x00", "\x00\x00\x00\x00\xFF\xFF\x00\xFF",
- "\x00\x00\x00\x00\xFF\xFF\xFF\x00", "\x00\x00\x00\x00\xFF\xFF\xFF\xFF",
- "\x00\x00\x00\xFF\x00\x00\x00\x00", "\x00\x00\x00\xFF\x00\x00\x00\xFF",
- "\x00\x00\x00\xFF\x00\x00\xFF\x00", "\x00\x00\x00\xFF\x00\x00\xFF\xFF",
- "\x00\x00\x00\xFF\x00\xFF\x00\x00", "\x00\x00\x00\xFF\x00\xFF\x00\xFF",
- "\x00\x00\x00\xFF\x00\xFF\xFF\x00", "\x00\x00\x00\xFF\x00\xFF\xFF\xFF",
- "\x00\x00\x00\xFF\xFF\x00\x00\x00", "\x00\x00\x00\xFF\xFF\x00\x00\xFF",
- "\x00\x00\x00\xFF\xFF\x00\xFF\x00", "\x00\x00\x00\xFF\xFF\x00\xFF\xFF",
- "\x00\x00\x00\xFF\xFF\xFF\x00\x00", "\x00\x00\x00\xFF\xFF\xFF\x00\xFF",
- "\x00\x00\x00\xFF\xFF\xFF\xFF\x00", "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF",
- "\x00\x00\xFF\x00\x00\x00\x00\x00", "\x00\x00\xFF\x00\x00\x00\x00\xFF",
- "\x00\x00\xFF\x00\x00\x00\xFF\x00", "\x00\x00\xFF\x00\x00\x00\xFF\xFF",
- "\x00\x00\xFF\x00\x00\xFF\x00\x00", "\x00\x00\xFF\x00\x00\xFF\x00\xFF",
- "\x00\x00\xFF\x00\x00\xFF\xFF\x00", "\x00\x00\xFF\x00\x00\xFF\xFF\xFF",
- "\x00\x00\xFF\x00\xFF\x00\x00\x00", "\x00\x00\xFF\x00\xFF\x00\x00\xFF",
- "\x00\x00\xFF\x00\xFF\x00\xFF\x00", "\x00\x00\xFF\x00\xFF\x00\xFF\xFF",
- "\x00\x00\xFF\x00\xFF\xFF\x00\x00", "\x00\x00\xFF\x00\xFF\xFF\x00\xFF",
- "\x00\x00\xFF\x00\xFF\xFF\xFF\x00", "\x00\x00\xFF\x00\xFF\xFF\xFF\xFF",
- "\x00\x00\xFF\xFF\x00\x00\x00\x00", "\x00\x00\xFF\xFF\x00\x00\x00\xFF",
- "\x00\x00\xFF\xFF\x00\x00\xFF\x00", "\x00\x00\xFF\xFF\x00\x00\xFF\xFF",
- "\x00\x00\xFF\xFF\x00\xFF\x00\x00", "\x00\x00\xFF\xFF\x00\xFF\x00\xFF",
- "\x00\x00\xFF\xFF\x00\xFF\xFF\x00", "\x00\x00\xFF\xFF\x00\xFF\xFF\xFF",
- "\x00\x00\xFF\xFF\xFF\x00\x00\x00", "\x00\x00\xFF\xFF\xFF\x00\x00\xFF",
- "\x00\x00\xFF\xFF\xFF\x00\xFF\x00", "\x00\x00\xFF\xFF\xFF\x00\xFF\xFF",
- "\x00\x00\xFF\xFF\xFF\xFF\x00\x00", "\x00\x00\xFF\xFF\xFF\xFF\x00\xFF",
- "\x00\x00\xFF\xFF\xFF\xFF\xFF\x00", "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF",
- "\x00\xFF\x00\x00\x00\x00\x00\x00", "\x00\xFF\x00\x00\x00\x00\x00\xFF",
- "\x00\xFF\x00\x00\x00\x00\xFF\x00", "\x00\xFF\x00\x00\x00\x00\xFF\xFF",
- "\x00\xFF\x00\x00\x00\xFF\x00\x00", "\x00\xFF\x00\x00\x00\xFF\x00\xFF",
- "\x00\xFF\x00\x00\x00\xFF\xFF\x00", "\x00\xFF\x00\x00\x00\xFF\xFF\xFF",
- "\x00\xFF\x00\x00\xFF\x00\x00\x00", "\x00\xFF\x00\x00\xFF\x00\x00\xFF",
- "\x00\xFF\x00\x00\xFF\x00\xFF\x00", "\x00\xFF\x00\x00\xFF\x00\xFF\xFF",
- "\x00\xFF\x00\x00\xFF\xFF\x00\x00", "\x00\xFF\x00\x00\xFF\xFF\x00\xFF",
- "\x00\xFF\x00\x00\xFF\xFF\xFF\x00", "\x00\xFF\x00\x00\xFF\xFF\xFF\xFF",
- "\x00\xFF\x00\xFF\x00\x00\x00\x00", "\x00\xFF\x00\xFF\x00\x00\x00\xFF",
- "\x00\xFF\x00\xFF\x00\x00\xFF\x00", "\x00\xFF\x00\xFF\x00\x00\xFF\xFF",
- "\x00\xFF\x00\xFF\x00\xFF\x00\x00", "\x00\xFF\x00\xFF\x00\xFF\x00\xFF",
- "\x00\xFF\x00\xFF\x00\xFF\xFF\x00", "\x00\xFF\x00\xFF\x00\xFF\xFF\xFF",
- "\x00\xFF\x00\xFF\xFF\x00\x00\x00", "\x00\xFF\x00\xFF\xFF\x00\x00\xFF",
- "\x00\xFF\x00\xFF\xFF\x00\xFF\x00", "\x00\xFF\x00\xFF\xFF\x00\xFF\xFF",
- "\x00\xFF\x00\xFF\xFF\xFF\x00\x00", "\x00\xFF\x00\xFF\xFF\xFF\x00\xFF",
- "\x00\xFF\x00\xFF\xFF\xFF\xFF\x00", "\x00\xFF\x00\xFF\xFF\xFF\xFF\xFF",
- "\x00\xFF\xFF\x00\x00\x00\x00\x00", "\x00\xFF\xFF\x00\x00\x00\x00\xFF",
- "\x00\xFF\xFF\x00\x00\x00\xFF\x00", "\x00\xFF\xFF\x00\x00\x00\xFF\xFF",
- "\x00\xFF\xFF\x00\x00\xFF\x00\x00", "\x00\xFF\xFF\x00\x00\xFF\x00\xFF",
- "\x00\xFF\xFF\x00\x00\xFF\xFF\x00", "\x00\xFF\xFF\x00\x00\xFF\xFF\xFF",
- "\x00\xFF\xFF\x00\xFF\x00\x00\x00", "\x00\xFF\xFF\x00\xFF\x00\x00\xFF",
- "\x00\xFF\xFF\x00\xFF\x00\xFF\x00", "\x00\xFF\xFF\x00\xFF\x00\xFF\xFF",
- "\x00\xFF\xFF\x00\xFF\xFF\x00\x00", "\x00\xFF\xFF\x00\xFF\xFF\x00\xFF",
- "\x00\xFF\xFF\x00\xFF\xFF\xFF\x00", "\x00\xFF\xFF\x00\xFF\xFF\xFF\xFF",
- "\x00\xFF\xFF\xFF\x00\x00\x00\x00", "\x00\xFF\xFF\xFF\x00\x00\x00\xFF",
- "\x00\xFF\xFF\xFF\x00\x00\xFF\x00", "\x00\xFF\xFF\xFF\x00\x00\xFF\xFF",
- "\x00\xFF\xFF\xFF\x00\xFF\x00\x00", "\x00\xFF\xFF\xFF\x00\xFF\x00\xFF",
- "\x00\xFF\xFF\xFF\x00\xFF\xFF\x00", "\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF",
- "\x00\xFF\xFF\xFF\xFF\x00\x00\x00", "\x00\xFF\xFF\xFF\xFF\x00\x00\xFF",
- "\x00\xFF\xFF\xFF\xFF\x00\xFF\x00", "\x00\xFF\xFF\xFF\xFF\x00\xFF\xFF",
- "\x00\xFF\xFF\xFF\xFF\xFF\x00\x00", "\x00\xFF\xFF\xFF\xFF\xFF\x00\xFF",
- "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF",
- "\xFF\x00\x00\x00\x00\x00\x00\x00", "\xFF\x00\x00\x00\x00\x00\x00\xFF",
- "\xFF\x00\x00\x00\x00\x00\xFF\x00", "\xFF\x00\x00\x00\x00\x00\xFF\xFF",
- "\xFF\x00\x00\x00\x00\xFF\x00\x00", "\xFF\x00\x00\x00\x00\xFF\x00\xFF",
- "\xFF\x00\x00\x00\x00\xFF\xFF\x00", "\xFF\x00\x00\x00\x00\xFF\xFF\xFF",
- "\xFF\x00\x00\x00\xFF\x00\x00\x00", "\xFF\x00\x00\x00\xFF\x00\x00\xFF",
- "\xFF\x00\x00\x00\xFF\x00\xFF\x00", "\xFF\x00\x00\x00\xFF\x00\xFF\xFF",
- "\xFF\x00\x00\x00\xFF\xFF\x00\x00", "\xFF\x00\x00\x00\xFF\xFF\x00\xFF",
- "\xFF\x00\x00\x00\xFF\xFF\xFF\x00", "\xFF\x00\x00\x00\xFF\xFF\xFF\xFF",
- "\xFF\x00\x00\xFF\x00\x00\x00\x00", "\xFF\x00\x00\xFF\x00\x00\x00\xFF",
- "\xFF\x00\x00\xFF\x00\x00\xFF\x00", "\xFF\x00\x00\xFF\x00\x00\xFF\xFF",
- "\xFF\x00\x00\xFF\x00\xFF\x00\x00", "\xFF\x00\x00\xFF\x00\xFF\x00\xFF",
- "\xFF\x00\x00\xFF\x00\xFF\xFF\x00", "\xFF\x00\x00\xFF\x00\xFF\xFF\xFF",
- "\xFF\x00\x00\xFF\xFF\x00\x00\x00", "\xFF\x00\x00\xFF\xFF\x00\x00\xFF",
- "\xFF\x00\x00\xFF\xFF\x00\xFF\x00", "\xFF\x00\x00\xFF\xFF\x00\xFF\xFF",
- "\xFF\x00\x00\xFF\xFF\xFF\x00\x00", "\xFF\x00\x00\xFF\xFF\xFF\x00\xFF",
- "\xFF\x00\x00\xFF\xFF\xFF\xFF\x00", "\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF",
- "\xFF\x00\xFF\x00\x00\x00\x00\x00", "\xFF\x00\xFF\x00\x00\x00\x00\xFF",
- "\xFF\x00\xFF\x00\x00\x00\xFF\x00", "\xFF\x00\xFF\x00\x00\x00\xFF\xFF",
- "\xFF\x00\xFF\x00\x00\xFF\x00\x00", "\xFF\x00\xFF\x00\x00\xFF\x00\xFF",
- "\xFF\x00\xFF\x00\x00\xFF\xFF\x00", "\xFF\x00\xFF\x00\x00\xFF\xFF\xFF",
- "\xFF\x00\xFF\x00\xFF\x00\x00\x00", "\xFF\x00\xFF\x00\xFF\x00\x00\xFF",
- "\xFF\x00\xFF\x00\xFF\x00\xFF\x00", "\xFF\x00\xFF\x00\xFF\x00\xFF\xFF",
- "\xFF\x00\xFF\x00\xFF\xFF\x00\x00", "\xFF\x00\xFF\x00\xFF\xFF\x00\xFF",
- "\xFF\x00\xFF\x00\xFF\xFF\xFF\x00", "\xFF\x00\xFF\x00\xFF\xFF\xFF\xFF",
- "\xFF\x00\xFF\xFF\x00\x00\x00\x00", "\xFF\x00\xFF\xFF\x00\x00\x00\xFF",
- "\xFF\x00\xFF\xFF\x00\x00\xFF\x00", "\xFF\x00\xFF\xFF\x00\x00\xFF\xFF",
- "\xFF\x00\xFF\xFF\x00\xFF\x00\x00", "\xFF\x00\xFF\xFF\x00\xFF\x00\xFF",
- "\xFF\x00\xFF\xFF\x00\xFF\xFF\x00", "\xFF\x00\xFF\xFF\x00\xFF\xFF\xFF",
- "\xFF\x00\xFF\xFF\xFF\x00\x00\x00", "\xFF\x00\xFF\xFF\xFF\x00\x00\xFF",
- "\xFF\x00\xFF\xFF\xFF\x00\xFF\x00", "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF",
- "\xFF\x00\xFF\xFF\xFF\xFF\x00\x00", "\xFF\x00\xFF\xFF\xFF\xFF\x00\xFF",
- "\xFF\x00\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF",
- "\xFF\xFF\x00\x00\x00\x00\x00\x00", "\xFF\xFF\x00\x00\x00\x00\x00\xFF",
- "\xFF\xFF\x00\x00\x00\x00\xFF\x00", "\xFF\xFF\x00\x00\x00\x00\xFF\xFF",
- "\xFF\xFF\x00\x00\x00\xFF\x00\x00", "\xFF\xFF\x00\x00\x00\xFF\x00\xFF",
- "\xFF\xFF\x00\x00\x00\xFF\xFF\x00", "\xFF\xFF\x00\x00\x00\xFF\xFF\xFF",
- "\xFF\xFF\x00\x00\xFF\x00\x00\x00", "\xFF\xFF\x00\x00\xFF\x00\x00\xFF",
- "\xFF\xFF\x00\x00\xFF\x00\xFF\x00", "\xFF\xFF\x00\x00\xFF\x00\xFF\xFF",
- "\xFF\xFF\x00\x00\xFF\xFF\x00\x00", "\xFF\xFF\x00\x00\xFF\xFF\x00\xFF",
- "\xFF\xFF\x00\x00\xFF\xFF\xFF\x00", "\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF",
- "\xFF\xFF\x00\xFF\x00\x00\x00\x00", "\xFF\xFF\x00\xFF\x00\x00\x00\xFF",
- "\xFF\xFF\x00\xFF\x00\x00\xFF\x00", "\xFF\xFF\x00\xFF\x00\x00\xFF\xFF",
- "\xFF\xFF\x00\xFF\x00\xFF\x00\x00", "\xFF\xFF\x00\xFF\x00\xFF\x00\xFF",
- "\xFF\xFF\x00\xFF\x00\xFF\xFF\x00", "\xFF\xFF\x00\xFF\x00\xFF\xFF\xFF",
- "\xFF\xFF\x00\xFF\xFF\x00\x00\x00", "\xFF\xFF\x00\xFF\xFF\x00\x00\xFF",
- "\xFF\xFF\x00\xFF\xFF\x00\xFF\x00", "\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF",
- "\xFF\xFF\x00\xFF\xFF\xFF\x00\x00", "\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF",
- "\xFF\xFF\x00\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF",
- "\xFF\xFF\xFF\x00\x00\x00\x00\x00", "\xFF\xFF\xFF\x00\x00\x00\x00\xFF",
- "\xFF\xFF\xFF\x00\x00\x00\xFF\x00", "\xFF\xFF\xFF\x00\x00\x00\xFF\xFF",
- "\xFF\xFF\xFF\x00\x00\xFF\x00\x00", "\xFF\xFF\xFF\x00\x00\xFF\x00\xFF",
- "\xFF\xFF\xFF\x00\x00\xFF\xFF\x00", "\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF",
- "\xFF\xFF\xFF\x00\xFF\x00\x00\x00", "\xFF\xFF\xFF\x00\xFF\x00\x00\xFF",
- "\xFF\xFF\xFF\x00\xFF\x00\xFF\x00", "\xFF\xFF\xFF\x00\xFF\x00\xFF\xFF",
- "\xFF\xFF\xFF\x00\xFF\xFF\x00\x00", "\xFF\xFF\xFF\x00\xFF\xFF\x00\xFF",
- "\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF",
- "\xFF\xFF\xFF\xFF\x00\x00\x00\x00", "\xFF\xFF\xFF\xFF\x00\x00\x00\xFF",
- "\xFF\xFF\xFF\xFF\x00\x00\xFF\x00", "\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF",
- "\xFF\xFF\xFF\xFF\x00\xFF\x00\x00", "\xFF\xFF\xFF\xFF\x00\xFF\x00\xFF",
- "\xFF\xFF\xFF\xFF\x00\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF",
- "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00", "\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF",
- "\xFF\xFF\xFF\xFF\xFF\x00\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF",
- "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF",
- "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
- );
-
- /**
- * IP mapping helper table.
- *
- * Indexing this table with each source byte performs the initial bit permutation.
- *
- * @var array
- * @access private
- */
- var $ipmap = array(
- 0x00, 0x10, 0x01, 0x11, 0x20, 0x30, 0x21, 0x31,
- 0x02, 0x12, 0x03, 0x13, 0x22, 0x32, 0x23, 0x33,
- 0x40, 0x50, 0x41, 0x51, 0x60, 0x70, 0x61, 0x71,
- 0x42, 0x52, 0x43, 0x53, 0x62, 0x72, 0x63, 0x73,
- 0x04, 0x14, 0x05, 0x15, 0x24, 0x34, 0x25, 0x35,
- 0x06, 0x16, 0x07, 0x17, 0x26, 0x36, 0x27, 0x37,
- 0x44, 0x54, 0x45, 0x55, 0x64, 0x74, 0x65, 0x75,
- 0x46, 0x56, 0x47, 0x57, 0x66, 0x76, 0x67, 0x77,
- 0x80, 0x90, 0x81, 0x91, 0xA0, 0xB0, 0xA1, 0xB1,
- 0x82, 0x92, 0x83, 0x93, 0xA2, 0xB2, 0xA3, 0xB3,
- 0xC0, 0xD0, 0xC1, 0xD1, 0xE0, 0xF0, 0xE1, 0xF1,
- 0xC2, 0xD2, 0xC3, 0xD3, 0xE2, 0xF2, 0xE3, 0xF3,
- 0x84, 0x94, 0x85, 0x95, 0xA4, 0xB4, 0xA5, 0xB5,
- 0x86, 0x96, 0x87, 0x97, 0xA6, 0xB6, 0xA7, 0xB7,
- 0xC4, 0xD4, 0xC5, 0xD5, 0xE4, 0xF4, 0xE5, 0xF5,
- 0xC6, 0xD6, 0xC7, 0xD7, 0xE6, 0xF6, 0xE7, 0xF7,
- 0x08, 0x18, 0x09, 0x19, 0x28, 0x38, 0x29, 0x39,
- 0x0A, 0x1A, 0x0B, 0x1B, 0x2A, 0x3A, 0x2B, 0x3B,
- 0x48, 0x58, 0x49, 0x59, 0x68, 0x78, 0x69, 0x79,
- 0x4A, 0x5A, 0x4B, 0x5B, 0x6A, 0x7A, 0x6B, 0x7B,
- 0x0C, 0x1C, 0x0D, 0x1D, 0x2C, 0x3C, 0x2D, 0x3D,
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4C, 0x5C, 0x4D, 0x5D, 0x6C, 0x7C, 0x6D, 0x7D,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x88, 0x98, 0x89, 0x99, 0xA8, 0xB8, 0xA9, 0xB9,
- 0x8A, 0x9A, 0x8B, 0x9B, 0xAA, 0xBA, 0xAB, 0xBB,
- 0xC8, 0xD8, 0xC9, 0xD9, 0xE8, 0xF8, 0xE9, 0xF9,
- 0xCA, 0xDA, 0xCB, 0xDB, 0xEA, 0xFA, 0xEB, 0xFB,
- 0x8C, 0x9C, 0x8D, 0x9D, 0xAC, 0xBC, 0xAD, 0xBD,
- 0x8E, 0x9E, 0x8F, 0x9F, 0xAE, 0xBE, 0xAF, 0xBF,
- 0xCC, 0xDC, 0xCD, 0xDD, 0xEC, 0xFC, 0xED, 0xFD,
- 0xCE, 0xDE, 0xCF, 0xDF, 0xEE, 0xFE, 0xEF, 0xFF
- );
-
- /**
- * Inverse IP mapping helper table.
- * Indexing this table with a byte value reverses the bit order.
- *
- * @var array
- * @access private
- */
- var $invipmap = array(
- 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
- 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
- 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
- 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
- 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
- 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
- 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
- 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
- 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
- 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
- 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
- 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
- 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
- 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
- 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
- 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
- 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
- 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
- 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
- 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
- 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
- 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
- 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
- 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
- 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
- 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
- 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
- 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
- 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
- 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
- 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
- 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
- );
-
- /**
- * Pre-permuted S-box1
- *
- * Each box ($sbox1-$sbox8) has been vectorized, then each value pre-permuted using the
- * P table: concatenation can then be replaced by exclusive ORs.
- *
- * @var array
- * @access private
- */
- var $sbox1 = array(
- 0x00808200, 0x00000000, 0x00008000, 0x00808202,
- 0x00808002, 0x00008202, 0x00000002, 0x00008000,
- 0x00000200, 0x00808200, 0x00808202, 0x00000200,
- 0x00800202, 0x00808002, 0x00800000, 0x00000002,
- 0x00000202, 0x00800200, 0x00800200, 0x00008200,
- 0x00008200, 0x00808000, 0x00808000, 0x00800202,
- 0x00008002, 0x00800002, 0x00800002, 0x00008002,
- 0x00000000, 0x00000202, 0x00008202, 0x00800000,
- 0x00008000, 0x00808202, 0x00000002, 0x00808000,
- 0x00808200, 0x00800000, 0x00800000, 0x00000200,
- 0x00808002, 0x00008000, 0x00008200, 0x00800002,
- 0x00000200, 0x00000002, 0x00800202, 0x00008202,
- 0x00808202, 0x00008002, 0x00808000, 0x00800202,
- 0x00800002, 0x00000202, 0x00008202, 0x00808200,
- 0x00000202, 0x00800200, 0x00800200, 0x00000000,
- 0x00008002, 0x00008200, 0x00000000, 0x00808002
- );
-
- /**
- * Pre-permuted S-box2
- *
- * @var array
- * @access private
- */
- var $sbox2 = array(
- 0x40084010, 0x40004000, 0x00004000, 0x00084010,
- 0x00080000, 0x00000010, 0x40080010, 0x40004010,
- 0x40000010, 0x40084010, 0x40084000, 0x40000000,
- 0x40004000, 0x00080000, 0x00000010, 0x40080010,
- 0x00084000, 0x00080010, 0x40004010, 0x00000000,
- 0x40000000, 0x00004000, 0x00084010, 0x40080000,
- 0x00080010, 0x40000010, 0x00000000, 0x00084000,
- 0x00004010, 0x40084000, 0x40080000, 0x00004010,
- 0x00000000, 0x00084010, 0x40080010, 0x00080000,
- 0x40004010, 0x40080000, 0x40084000, 0x00004000,
- 0x40080000, 0x40004000, 0x00000010, 0x40084010,
- 0x00084010, 0x00000010, 0x00004000, 0x40000000,
- 0x00004010, 0x40084000, 0x00080000, 0x40000010,
- 0x00080010, 0x40004010, 0x40000010, 0x00080010,
- 0x00084000, 0x00000000, 0x40004000, 0x00004010,
- 0x40000000, 0x40080010, 0x40084010, 0x00084000
- );
-
- /**
- * Pre-permuted S-box3
- *
- * @var array
- * @access private
- */
- var $sbox3 = array(
- 0x00000104, 0x04010100, 0x00000000, 0x04010004,
- 0x04000100, 0x00000000, 0x00010104, 0x04000100,
- 0x00010004, 0x04000004, 0x04000004, 0x00010000,
- 0x04010104, 0x00010004, 0x04010000, 0x00000104,
- 0x04000000, 0x00000004, 0x04010100, 0x00000100,
- 0x00010100, 0x04010000, 0x04010004, 0x00010104,
- 0x04000104, 0x00010100, 0x00010000, 0x04000104,
- 0x00000004, 0x04010104, 0x00000100, 0x04000000,
- 0x04010100, 0x04000000, 0x00010004, 0x00000104,
- 0x00010000, 0x04010100, 0x04000100, 0x00000000,
- 0x00000100, 0x00010004, 0x04010104, 0x04000100,
- 0x04000004, 0x00000100, 0x00000000, 0x04010004,
- 0x04000104, 0x00010000, 0x04000000, 0x04010104,
- 0x00000004, 0x00010104, 0x00010100, 0x04000004,
- 0x04010000, 0x04000104, 0x00000104, 0x04010000,
- 0x00010104, 0x00000004, 0x04010004, 0x00010100
- );
-
- /**
- * Pre-permuted S-box4
- *
- * @var array
- * @access private
- */
- var $sbox4 = array(
- 0x80401000, 0x80001040, 0x80001040, 0x00000040,
- 0x00401040, 0x80400040, 0x80400000, 0x80001000,
- 0x00000000, 0x00401000, 0x00401000, 0x80401040,
- 0x80000040, 0x00000000, 0x00400040, 0x80400000,
- 0x80000000, 0x00001000, 0x00400000, 0x80401000,
- 0x00000040, 0x00400000, 0x80001000, 0x00001040,
- 0x80400040, 0x80000000, 0x00001040, 0x00400040,
- 0x00001000, 0x00401040, 0x80401040, 0x80000040,
- 0x00400040, 0x80400000, 0x00401000, 0x80401040,
- 0x80000040, 0x00000000, 0x00000000, 0x00401000,
- 0x00001040, 0x00400040, 0x80400040, 0x80000000,
- 0x80401000, 0x80001040, 0x80001040, 0x00000040,
- 0x80401040, 0x80000040, 0x80000000, 0x00001000,
- 0x80400000, 0x80001000, 0x00401040, 0x80400040,
- 0x80001000, 0x00001040, 0x00400000, 0x80401000,
- 0x00000040, 0x00400000, 0x00001000, 0x00401040
- );
-
- /**
- * Pre-permuted S-box5
- *
- * @var array
- * @access private
- */
- var $sbox5 = array(
- 0x00000080, 0x01040080, 0x01040000, 0x21000080,
- 0x00040000, 0x00000080, 0x20000000, 0x01040000,
- 0x20040080, 0x00040000, 0x01000080, 0x20040080,
- 0x21000080, 0x21040000, 0x00040080, 0x20000000,
- 0x01000000, 0x20040000, 0x20040000, 0x00000000,
- 0x20000080, 0x21040080, 0x21040080, 0x01000080,
- 0x21040000, 0x20000080, 0x00000000, 0x21000000,
- 0x01040080, 0x01000000, 0x21000000, 0x00040080,
- 0x00040000, 0x21000080, 0x00000080, 0x01000000,
- 0x20000000, 0x01040000, 0x21000080, 0x20040080,
- 0x01000080, 0x20000000, 0x21040000, 0x01040080,
- 0x20040080, 0x00000080, 0x01000000, 0x21040000,
- 0x21040080, 0x00040080, 0x21000000, 0x21040080,
- 0x01040000, 0x00000000, 0x20040000, 0x21000000,
- 0x00040080, 0x01000080, 0x20000080, 0x00040000,
- 0x00000000, 0x20040000, 0x01040080, 0x20000080
- );
-
- /**
- * Pre-permuted S-box6
- *
- * @var array
- * @access private
- */
- var $sbox6 = array(
- 0x10000008, 0x10200000, 0x00002000, 0x10202008,
- 0x10200000, 0x00000008, 0x10202008, 0x00200000,
- 0x10002000, 0x00202008, 0x00200000, 0x10000008,
- 0x00200008, 0x10002000, 0x10000000, 0x00002008,
- 0x00000000, 0x00200008, 0x10002008, 0x00002000,
- 0x00202000, 0x10002008, 0x00000008, 0x10200008,
- 0x10200008, 0x00000000, 0x00202008, 0x10202000,
- 0x00002008, 0x00202000, 0x10202000, 0x10000000,
- 0x10002000, 0x00000008, 0x10200008, 0x00202000,
- 0x10202008, 0x00200000, 0x00002008, 0x10000008,
- 0x00200000, 0x10002000, 0x10000000, 0x00002008,
- 0x10000008, 0x10202008, 0x00202000, 0x10200000,
- 0x00202008, 0x10202000, 0x00000000, 0x10200008,
- 0x00000008, 0x00002000, 0x10200000, 0x00202008,
- 0x00002000, 0x00200008, 0x10002008, 0x00000000,
- 0x10202000, 0x10000000, 0x00200008, 0x10002008
- );
-
- /**
- * Pre-permuted S-box7
- *
- * @var array
- * @access private
- */
- var $sbox7 = array(
- 0x00100000, 0x02100001, 0x02000401, 0x00000000,
- 0x00000400, 0x02000401, 0x00100401, 0x02100400,
- 0x02100401, 0x00100000, 0x00000000, 0x02000001,
- 0x00000001, 0x02000000, 0x02100001, 0x00000401,
- 0x02000400, 0x00100401, 0x00100001, 0x02000400,
- 0x02000001, 0x02100000, 0x02100400, 0x00100001,
- 0x02100000, 0x00000400, 0x00000401, 0x02100401,
- 0x00100400, 0x00000001, 0x02000000, 0x00100400,
- 0x02000000, 0x00100400, 0x00100000, 0x02000401,
- 0x02000401, 0x02100001, 0x02100001, 0x00000001,
- 0x00100001, 0x02000000, 0x02000400, 0x00100000,
- 0x02100400, 0x00000401, 0x00100401, 0x02100400,
- 0x00000401, 0x02000001, 0x02100401, 0x02100000,
- 0x00100400, 0x00000000, 0x00000001, 0x02100401,
- 0x00000000, 0x00100401, 0x02100000, 0x00000400,
- 0x02000001, 0x02000400, 0x00000400, 0x00100001
- );
-
- /**
- * Pre-permuted S-box8
- *
- * @var array
- * @access private
- */
- var $sbox8 = array(
- 0x08000820, 0x00000800, 0x00020000, 0x08020820,
- 0x08000000, 0x08000820, 0x00000020, 0x08000000,
- 0x00020020, 0x08020000, 0x08020820, 0x00020800,
- 0x08020800, 0x00020820, 0x00000800, 0x00000020,
- 0x08020000, 0x08000020, 0x08000800, 0x00000820,
- 0x00020800, 0x00020020, 0x08020020, 0x08020800,
- 0x00000820, 0x00000000, 0x00000000, 0x08020020,
- 0x08000020, 0x08000800, 0x00020820, 0x00020000,
- 0x00020820, 0x00020000, 0x08020800, 0x00000800,
- 0x00000020, 0x08020020, 0x00000800, 0x00020820,
- 0x08000800, 0x00000020, 0x08000020, 0x08020000,
- 0x08020020, 0x08000000, 0x00020000, 0x08000820,
- 0x00000000, 0x08020820, 0x00020020, 0x08000020,
- 0x08020000, 0x08000800, 0x08000820, 0x00000000,
- 0x08020820, 0x00020800, 0x00020800, 0x00000820,
- 0x00000820, 0x00020020, 0x08000000, 0x08020800
- );
-
- /**
- * Test for engine validity
- *
- * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
- *
- * @see \phpseclib\Crypt\Base::isValidEngine()
- * @param int $engine
- * @access public
- * @return bool
- */
- function isValidEngine($engine)
- {
- if ($this->key_length_max == 8) {
- if ($engine == self::ENGINE_OPENSSL) {
- $this->cipher_name_openssl_ecb = 'des-ecb';
- $this->cipher_name_openssl = 'des-' . $this->_openssl_translate_mode();
- }
- }
-
- return parent::isValidEngine($engine);
- }
-
- /**
- * Sets the key.
- *
- * Keys can be of any length. DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we
- * only use the first eight, if $key has more then eight characters in it, and pad $key with the
- * null byte if it is less then eight characters long.
- *
- * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
- *
- * If the key is not explicitly set, it'll be assumed to be all zero's.
- *
- * @see \phpseclib\Crypt\Base::setKey()
- * @access public
- * @param string $key
- */
- function setKey($key)
- {
- // We check/cut here only up to max length of the key.
- // Key padding to the proper length will be done in _setupKey()
- if (strlen($key) > $this->key_length_max) {
- $key = substr($key, 0, $this->key_length_max);
- }
-
- // Sets the key
- parent::setKey($key);
- }
-
- /**
- * Encrypts a block
- *
- * @see \phpseclib\Crypt\Base::_encryptBlock()
- * @see \phpseclib\Crypt\Base::encrypt()
- * @see self::encrypt()
- * @access private
- * @param string $in
- * @return string
- */
- function _encryptBlock($in)
- {
- return $this->_processBlock($in, self::ENCRYPT);
- }
-
- /**
- * Decrypts a block
- *
- * @see \phpseclib\Crypt\Base::_decryptBlock()
- * @see \phpseclib\Crypt\Base::decrypt()
- * @see self::decrypt()
- * @access private
- * @param string $in
- * @return string
- */
- function _decryptBlock($in)
- {
- return $this->_processBlock($in, self::DECRYPT);
- }
-
- /**
- * Encrypts or decrypts a 64-bit block
- *
- * $mode should be either self::ENCRYPT or self::DECRYPT. See
- * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general
- * idea of what this function does.
- *
- * @see self::_encryptBlock()
- * @see self::_decryptBlock()
- * @access private
- * @param string $block
- * @param int $mode
- * @return string
- */
- function _processBlock($block, $mode)
- {
- static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
- if (!$sbox1) {
- $sbox1 = array_map("intval", $this->sbox1);
- $sbox2 = array_map("intval", $this->sbox2);
- $sbox3 = array_map("intval", $this->sbox3);
- $sbox4 = array_map("intval", $this->sbox4);
- $sbox5 = array_map("intval", $this->sbox5);
- $sbox6 = array_map("intval", $this->sbox6);
- $sbox7 = array_map("intval", $this->sbox7);
- $sbox8 = array_map("intval", $this->sbox8);
- /* Merge $shuffle with $[inv]ipmap */
- for ($i = 0; $i < 256; ++$i) {
- $shuffleip[] = $this->shuffle[$this->ipmap[$i]];
- $shuffleinvip[] = $this->shuffle[$this->invipmap[$i]];
- }
- }
-
- $keys = $this->keys[$mode];
- $ki = -1;
-
- // Do the initial IP permutation.
- $t = unpack('Nl/Nr', $block);
- list($l, $r) = array($t['l'], $t['r']);
- $block = ($shuffleip[ $r & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
- ($shuffleip[($r >> 8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
- ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
- ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
- ($shuffleip[ $l & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
- ($shuffleip[($l >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
- ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
- ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
-
- // Extract L0 and R0.
- $t = unpack('Nl/Nr', $block);
- list($l, $r) = array($t['l'], $t['r']);
-
- for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {
- // Perform the 16 steps.
- for ($i = 0; $i < 16; $i++) {
- // start of "the Feistel (F) function" - see the following URL:
- // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
- // Merge key schedule.
- $b1 = (($r >> 3) & 0x1FFFFFFF) ^ ($r << 29) ^ $keys[++$ki];
- $b2 = (($r >> 31) & 0x00000001) ^ ($r << 1) ^ $keys[++$ki];
-
- // S-box indexing.
- $t = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
- $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
- $sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^
- $sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ $l;
- // end of "the Feistel (F) function"
-
- $l = $r;
- $r = $t;
- }
-
- // Last step should not permute L & R.
- $t = $l;
- $l = $r;
- $r = $t;
- }
-
- // Perform the inverse IP permutation.
- return ($shuffleinvip[($r >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
- ($shuffleinvip[($l >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
- ($shuffleinvip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
- ($shuffleinvip[($l >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
- ($shuffleinvip[($r >> 8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
- ($shuffleinvip[($l >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
- ($shuffleinvip[ $r & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
- ($shuffleinvip[ $l & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
- }
-
- /**
- * Creates the key schedule
- *
- * @see \phpseclib\Crypt\Base::_setupKey()
- * @access private
- */
- function _setupKey()
- {
- if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->des_rounds === $this->kl['des_rounds']) {
- // already expanded
- return;
- }
- $this->kl = array('key' => $this->key, 'des_rounds' => $this->des_rounds);
-
- static $shifts = array( // number of key bits shifted per round
- 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
- );
-
- static $pc1map = array(
- 0x00, 0x00, 0x08, 0x08, 0x04, 0x04, 0x0C, 0x0C,
- 0x02, 0x02, 0x0A, 0x0A, 0x06, 0x06, 0x0E, 0x0E,
- 0x10, 0x10, 0x18, 0x18, 0x14, 0x14, 0x1C, 0x1C,
- 0x12, 0x12, 0x1A, 0x1A, 0x16, 0x16, 0x1E, 0x1E,
- 0x20, 0x20, 0x28, 0x28, 0x24, 0x24, 0x2C, 0x2C,
- 0x22, 0x22, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E,
- 0x30, 0x30, 0x38, 0x38, 0x34, 0x34, 0x3C, 0x3C,
- 0x32, 0x32, 0x3A, 0x3A, 0x36, 0x36, 0x3E, 0x3E,
- 0x40, 0x40, 0x48, 0x48, 0x44, 0x44, 0x4C, 0x4C,
- 0x42, 0x42, 0x4A, 0x4A, 0x46, 0x46, 0x4E, 0x4E,
- 0x50, 0x50, 0x58, 0x58, 0x54, 0x54, 0x5C, 0x5C,
- 0x52, 0x52, 0x5A, 0x5A, 0x56, 0x56, 0x5E, 0x5E,
- 0x60, 0x60, 0x68, 0x68, 0x64, 0x64, 0x6C, 0x6C,
- 0x62, 0x62, 0x6A, 0x6A, 0x66, 0x66, 0x6E, 0x6E,
- 0x70, 0x70, 0x78, 0x78, 0x74, 0x74, 0x7C, 0x7C,
- 0x72, 0x72, 0x7A, 0x7A, 0x76, 0x76, 0x7E, 0x7E,
- 0x80, 0x80, 0x88, 0x88, 0x84, 0x84, 0x8C, 0x8C,
- 0x82, 0x82, 0x8A, 0x8A, 0x86, 0x86, 0x8E, 0x8E,
- 0x90, 0x90, 0x98, 0x98, 0x94, 0x94, 0x9C, 0x9C,
- 0x92, 0x92, 0x9A, 0x9A, 0x96, 0x96, 0x9E, 0x9E,
- 0xA0, 0xA0, 0xA8, 0xA8, 0xA4, 0xA4, 0xAC, 0xAC,
- 0xA2, 0xA2, 0xAA, 0xAA, 0xA6, 0xA6, 0xAE, 0xAE,
- 0xB0, 0xB0, 0xB8, 0xB8, 0xB4, 0xB4, 0xBC, 0xBC,
- 0xB2, 0xB2, 0xBA, 0xBA, 0xB6, 0xB6, 0xBE, 0xBE,
- 0xC0, 0xC0, 0xC8, 0xC8, 0xC4, 0xC4, 0xCC, 0xCC,
- 0xC2, 0xC2, 0xCA, 0xCA, 0xC6, 0xC6, 0xCE, 0xCE,
- 0xD0, 0xD0, 0xD8, 0xD8, 0xD4, 0xD4, 0xDC, 0xDC,
- 0xD2, 0xD2, 0xDA, 0xDA, 0xD6, 0xD6, 0xDE, 0xDE,
- 0xE0, 0xE0, 0xE8, 0xE8, 0xE4, 0xE4, 0xEC, 0xEC,
- 0xE2, 0xE2, 0xEA, 0xEA, 0xE6, 0xE6, 0xEE, 0xEE,
- 0xF0, 0xF0, 0xF8, 0xF8, 0xF4, 0xF4, 0xFC, 0xFC,
- 0xF2, 0xF2, 0xFA, 0xFA, 0xF6, 0xF6, 0xFE, 0xFE
- );
-
- // Mapping tables for the PC-2 transformation.
- static $pc2mapc1 = array(
- 0x00000000, 0x00000400, 0x00200000, 0x00200400,
- 0x00000001, 0x00000401, 0x00200001, 0x00200401,
- 0x02000000, 0x02000400, 0x02200000, 0x02200400,
- 0x02000001, 0x02000401, 0x02200001, 0x02200401
- );
- static $pc2mapc2 = array(
- 0x00000000, 0x00000800, 0x08000000, 0x08000800,
- 0x00010000, 0x00010800, 0x08010000, 0x08010800,
- 0x00000000, 0x00000800, 0x08000000, 0x08000800,
- 0x00010000, 0x00010800, 0x08010000, 0x08010800,
- 0x00000100, 0x00000900, 0x08000100, 0x08000900,
- 0x00010100, 0x00010900, 0x08010100, 0x08010900,
- 0x00000100, 0x00000900, 0x08000100, 0x08000900,
- 0x00010100, 0x00010900, 0x08010100, 0x08010900,
- 0x00000010, 0x00000810, 0x08000010, 0x08000810,
- 0x00010010, 0x00010810, 0x08010010, 0x08010810,
- 0x00000010, 0x00000810, 0x08000010, 0x08000810,
- 0x00010010, 0x00010810, 0x08010010, 0x08010810,
- 0x00000110, 0x00000910, 0x08000110, 0x08000910,
- 0x00010110, 0x00010910, 0x08010110, 0x08010910,
- 0x00000110, 0x00000910, 0x08000110, 0x08000910,
- 0x00010110, 0x00010910, 0x08010110, 0x08010910,
- 0x00040000, 0x00040800, 0x08040000, 0x08040800,
- 0x00050000, 0x00050800, 0x08050000, 0x08050800,
- 0x00040000, 0x00040800, 0x08040000, 0x08040800,
- 0x00050000, 0x00050800, 0x08050000, 0x08050800,
- 0x00040100, 0x00040900, 0x08040100, 0x08040900,
- 0x00050100, 0x00050900, 0x08050100, 0x08050900,
- 0x00040100, 0x00040900, 0x08040100, 0x08040900,
- 0x00050100, 0x00050900, 0x08050100, 0x08050900,
- 0x00040010, 0x00040810, 0x08040010, 0x08040810,
- 0x00050010, 0x00050810, 0x08050010, 0x08050810,
- 0x00040010, 0x00040810, 0x08040010, 0x08040810,
- 0x00050010, 0x00050810, 0x08050010, 0x08050810,
- 0x00040110, 0x00040910, 0x08040110, 0x08040910,
- 0x00050110, 0x00050910, 0x08050110, 0x08050910,
- 0x00040110, 0x00040910, 0x08040110, 0x08040910,
- 0x00050110, 0x00050910, 0x08050110, 0x08050910,
- 0x01000000, 0x01000800, 0x09000000, 0x09000800,
- 0x01010000, 0x01010800, 0x09010000, 0x09010800,
- 0x01000000, 0x01000800, 0x09000000, 0x09000800,
- 0x01010000, 0x01010800, 0x09010000, 0x09010800,
- 0x01000100, 0x01000900, 0x09000100, 0x09000900,
- 0x01010100, 0x01010900, 0x09010100, 0x09010900,
- 0x01000100, 0x01000900, 0x09000100, 0x09000900,
- 0x01010100, 0x01010900, 0x09010100, 0x09010900,
- 0x01000010, 0x01000810, 0x09000010, 0x09000810,
- 0x01010010, 0x01010810, 0x09010010, 0x09010810,
- 0x01000010, 0x01000810, 0x09000010, 0x09000810,
- 0x01010010, 0x01010810, 0x09010010, 0x09010810,
- 0x01000110, 0x01000910, 0x09000110, 0x09000910,
- 0x01010110, 0x01010910, 0x09010110, 0x09010910,
- 0x01000110, 0x01000910, 0x09000110, 0x09000910,
- 0x01010110, 0x01010910, 0x09010110, 0x09010910,
- 0x01040000, 0x01040800, 0x09040000, 0x09040800,
- 0x01050000, 0x01050800, 0x09050000, 0x09050800,
- 0x01040000, 0x01040800, 0x09040000, 0x09040800,
- 0x01050000, 0x01050800, 0x09050000, 0x09050800,
- 0x01040100, 0x01040900, 0x09040100, 0x09040900,
- 0x01050100, 0x01050900, 0x09050100, 0x09050900,
- 0x01040100, 0x01040900, 0x09040100, 0x09040900,
- 0x01050100, 0x01050900, 0x09050100, 0x09050900,
- 0x01040010, 0x01040810, 0x09040010, 0x09040810,
- 0x01050010, 0x01050810, 0x09050010, 0x09050810,
- 0x01040010, 0x01040810, 0x09040010, 0x09040810,
- 0x01050010, 0x01050810, 0x09050010, 0x09050810,
- 0x01040110, 0x01040910, 0x09040110, 0x09040910,
- 0x01050110, 0x01050910, 0x09050110, 0x09050910,
- 0x01040110, 0x01040910, 0x09040110, 0x09040910,
- 0x01050110, 0x01050910, 0x09050110, 0x09050910
- );
- static $pc2mapc3 = array(
- 0x00000000, 0x00000004, 0x00001000, 0x00001004,
- 0x00000000, 0x00000004, 0x00001000, 0x00001004,
- 0x10000000, 0x10000004, 0x10001000, 0x10001004,
- 0x10000000, 0x10000004, 0x10001000, 0x10001004,
- 0x00000020, 0x00000024, 0x00001020, 0x00001024,
- 0x00000020, 0x00000024, 0x00001020, 0x00001024,
- 0x10000020, 0x10000024, 0x10001020, 0x10001024,
- 0x10000020, 0x10000024, 0x10001020, 0x10001024,
- 0x00080000, 0x00080004, 0x00081000, 0x00081004,
- 0x00080000, 0x00080004, 0x00081000, 0x00081004,
- 0x10080000, 0x10080004, 0x10081000, 0x10081004,
- 0x10080000, 0x10080004, 0x10081000, 0x10081004,
- 0x00080020, 0x00080024, 0x00081020, 0x00081024,
- 0x00080020, 0x00080024, 0x00081020, 0x00081024,
- 0x10080020, 0x10080024, 0x10081020, 0x10081024,
- 0x10080020, 0x10080024, 0x10081020, 0x10081024,
- 0x20000000, 0x20000004, 0x20001000, 0x20001004,
- 0x20000000, 0x20000004, 0x20001000, 0x20001004,
- 0x30000000, 0x30000004, 0x30001000, 0x30001004,
- 0x30000000, 0x30000004, 0x30001000, 0x30001004,
- 0x20000020, 0x20000024, 0x20001020, 0x20001024,
- 0x20000020, 0x20000024, 0x20001020, 0x20001024,
- 0x30000020, 0x30000024, 0x30001020, 0x30001024,
- 0x30000020, 0x30000024, 0x30001020, 0x30001024,
- 0x20080000, 0x20080004, 0x20081000, 0x20081004,
- 0x20080000, 0x20080004, 0x20081000, 0x20081004,
- 0x30080000, 0x30080004, 0x30081000, 0x30081004,
- 0x30080000, 0x30080004, 0x30081000, 0x30081004,
- 0x20080020, 0x20080024, 0x20081020, 0x20081024,
- 0x20080020, 0x20080024, 0x20081020, 0x20081024,
- 0x30080020, 0x30080024, 0x30081020, 0x30081024,
- 0x30080020, 0x30080024, 0x30081020, 0x30081024,
- 0x00000002, 0x00000006, 0x00001002, 0x00001006,
- 0x00000002, 0x00000006, 0x00001002, 0x00001006,
- 0x10000002, 0x10000006, 0x10001002, 0x10001006,
- 0x10000002, 0x10000006, 0x10001002, 0x10001006,
- 0x00000022, 0x00000026, 0x00001022, 0x00001026,
- 0x00000022, 0x00000026, 0x00001022, 0x00001026,
- 0x10000022, 0x10000026, 0x10001022, 0x10001026,
- 0x10000022, 0x10000026, 0x10001022, 0x10001026,
- 0x00080002, 0x00080006, 0x00081002, 0x00081006,
- 0x00080002, 0x00080006, 0x00081002, 0x00081006,
- 0x10080002, 0x10080006, 0x10081002, 0x10081006,
- 0x10080002, 0x10080006, 0x10081002, 0x10081006,
- 0x00080022, 0x00080026, 0x00081022, 0x00081026,
- 0x00080022, 0x00080026, 0x00081022, 0x00081026,
- 0x10080022, 0x10080026, 0x10081022, 0x10081026,
- 0x10080022, 0x10080026, 0x10081022, 0x10081026,
- 0x20000002, 0x20000006, 0x20001002, 0x20001006,
- 0x20000002, 0x20000006, 0x20001002, 0x20001006,
- 0x30000002, 0x30000006, 0x30001002, 0x30001006,
- 0x30000002, 0x30000006, 0x30001002, 0x30001006,
- 0x20000022, 0x20000026, 0x20001022, 0x20001026,
- 0x20000022, 0x20000026, 0x20001022, 0x20001026,
- 0x30000022, 0x30000026, 0x30001022, 0x30001026,
- 0x30000022, 0x30000026, 0x30001022, 0x30001026,
- 0x20080002, 0x20080006, 0x20081002, 0x20081006,
- 0x20080002, 0x20080006, 0x20081002, 0x20081006,
- 0x30080002, 0x30080006, 0x30081002, 0x30081006,
- 0x30080002, 0x30080006, 0x30081002, 0x30081006,
- 0x20080022, 0x20080026, 0x20081022, 0x20081026,
- 0x20080022, 0x20080026, 0x20081022, 0x20081026,
- 0x30080022, 0x30080026, 0x30081022, 0x30081026,
- 0x30080022, 0x30080026, 0x30081022, 0x30081026
- );
- static $pc2mapc4 = array(
- 0x00000000, 0x00100000, 0x00000008, 0x00100008,
- 0x00000200, 0x00100200, 0x00000208, 0x00100208,
- 0x00000000, 0x00100000, 0x00000008, 0x00100008,
- 0x00000200, 0x00100200, 0x00000208, 0x00100208,
- 0x04000000, 0x04100000, 0x04000008, 0x04100008,
- 0x04000200, 0x04100200, 0x04000208, 0x04100208,
- 0x04000000, 0x04100000, 0x04000008, 0x04100008,
- 0x04000200, 0x04100200, 0x04000208, 0x04100208,
- 0x00002000, 0x00102000, 0x00002008, 0x00102008,
- 0x00002200, 0x00102200, 0x00002208, 0x00102208,
- 0x00002000, 0x00102000, 0x00002008, 0x00102008,
- 0x00002200, 0x00102200, 0x00002208, 0x00102208,
- 0x04002000, 0x04102000, 0x04002008, 0x04102008,
- 0x04002200, 0x04102200, 0x04002208, 0x04102208,
- 0x04002000, 0x04102000, 0x04002008, 0x04102008,
- 0x04002200, 0x04102200, 0x04002208, 0x04102208,
- 0x00000000, 0x00100000, 0x00000008, 0x00100008,
- 0x00000200, 0x00100200, 0x00000208, 0x00100208,
- 0x00000000, 0x00100000, 0x00000008, 0x00100008,
- 0x00000200, 0x00100200, 0x00000208, 0x00100208,
- 0x04000000, 0x04100000, 0x04000008, 0x04100008,
- 0x04000200, 0x04100200, 0x04000208, 0x04100208,
- 0x04000000, 0x04100000, 0x04000008, 0x04100008,
- 0x04000200, 0x04100200, 0x04000208, 0x04100208,
- 0x00002000, 0x00102000, 0x00002008, 0x00102008,
- 0x00002200, 0x00102200, 0x00002208, 0x00102208,
- 0x00002000, 0x00102000, 0x00002008, 0x00102008,
- 0x00002200, 0x00102200, 0x00002208, 0x00102208,
- 0x04002000, 0x04102000, 0x04002008, 0x04102008,
- 0x04002200, 0x04102200, 0x04002208, 0x04102208,
- 0x04002000, 0x04102000, 0x04002008, 0x04102008,
- 0x04002200, 0x04102200, 0x04002208, 0x04102208,
- 0x00020000, 0x00120000, 0x00020008, 0x00120008,
- 0x00020200, 0x00120200, 0x00020208, 0x00120208,
- 0x00020000, 0x00120000, 0x00020008, 0x00120008,
- 0x00020200, 0x00120200, 0x00020208, 0x00120208,
- 0x04020000, 0x04120000, 0x04020008, 0x04120008,
- 0x04020200, 0x04120200, 0x04020208, 0x04120208,
- 0x04020000, 0x04120000, 0x04020008, 0x04120008,
- 0x04020200, 0x04120200, 0x04020208, 0x04120208,
- 0x00022000, 0x00122000, 0x00022008, 0x00122008,
- 0x00022200, 0x00122200, 0x00022208, 0x00122208,
- 0x00022000, 0x00122000, 0x00022008, 0x00122008,
- 0x00022200, 0x00122200, 0x00022208, 0x00122208,
- 0x04022000, 0x04122000, 0x04022008, 0x04122008,
- 0x04022200, 0x04122200, 0x04022208, 0x04122208,
- 0x04022000, 0x04122000, 0x04022008, 0x04122008,
- 0x04022200, 0x04122200, 0x04022208, 0x04122208,
- 0x00020000, 0x00120000, 0x00020008, 0x00120008,
- 0x00020200, 0x00120200, 0x00020208, 0x00120208,
- 0x00020000, 0x00120000, 0x00020008, 0x00120008,
- 0x00020200, 0x00120200, 0x00020208, 0x00120208,
- 0x04020000, 0x04120000, 0x04020008, 0x04120008,
- 0x04020200, 0x04120200, 0x04020208, 0x04120208,
- 0x04020000, 0x04120000, 0x04020008, 0x04120008,
- 0x04020200, 0x04120200, 0x04020208, 0x04120208,
- 0x00022000, 0x00122000, 0x00022008, 0x00122008,
- 0x00022200, 0x00122200, 0x00022208, 0x00122208,
- 0x00022000, 0x00122000, 0x00022008, 0x00122008,
- 0x00022200, 0x00122200, 0x00022208, 0x00122208,
- 0x04022000, 0x04122000, 0x04022008, 0x04122008,
- 0x04022200, 0x04122200, 0x04022208, 0x04122208,
- 0x04022000, 0x04122000, 0x04022008, 0x04122008,
- 0x04022200, 0x04122200, 0x04022208, 0x04122208
- );
- static $pc2mapd1 = array(
- 0x00000000, 0x00000001, 0x08000000, 0x08000001,
- 0x00200000, 0x00200001, 0x08200000, 0x08200001,
- 0x00000002, 0x00000003, 0x08000002, 0x08000003,
- 0x00200002, 0x00200003, 0x08200002, 0x08200003
- );
- static $pc2mapd2 = array(
- 0x00000000, 0x00100000, 0x00000800, 0x00100800,
- 0x00000000, 0x00100000, 0x00000800, 0x00100800,
- 0x04000000, 0x04100000, 0x04000800, 0x04100800,
- 0x04000000, 0x04100000, 0x04000800, 0x04100800,
- 0x00000004, 0x00100004, 0x00000804, 0x00100804,
- 0x00000004, 0x00100004, 0x00000804, 0x00100804,
- 0x04000004, 0x04100004, 0x04000804, 0x04100804,
- 0x04000004, 0x04100004, 0x04000804, 0x04100804,
- 0x00000000, 0x00100000, 0x00000800, 0x00100800,
- 0x00000000, 0x00100000, 0x00000800, 0x00100800,
- 0x04000000, 0x04100000, 0x04000800, 0x04100800,
- 0x04000000, 0x04100000, 0x04000800, 0x04100800,
- 0x00000004, 0x00100004, 0x00000804, 0x00100804,
- 0x00000004, 0x00100004, 0x00000804, 0x00100804,
- 0x04000004, 0x04100004, 0x04000804, 0x04100804,
- 0x04000004, 0x04100004, 0x04000804, 0x04100804,
- 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
- 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
- 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
- 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
- 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
- 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
- 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
- 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
- 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
- 0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
- 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
- 0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
- 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
- 0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
- 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
- 0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
- 0x00020000, 0x00120000, 0x00020800, 0x00120800,
- 0x00020000, 0x00120000, 0x00020800, 0x00120800,
- 0x04020000, 0x04120000, 0x04020800, 0x04120800,
- 0x04020000, 0x04120000, 0x04020800, 0x04120800,
- 0x00020004, 0x00120004, 0x00020804, 0x00120804,
- 0x00020004, 0x00120004, 0x00020804, 0x00120804,
- 0x04020004, 0x04120004, 0x04020804, 0x04120804,
- 0x04020004, 0x04120004, 0x04020804, 0x04120804,
- 0x00020000, 0x00120000, 0x00020800, 0x00120800,
- 0x00020000, 0x00120000, 0x00020800, 0x00120800,
- 0x04020000, 0x04120000, 0x04020800, 0x04120800,
- 0x04020000, 0x04120000, 0x04020800, 0x04120800,
- 0x00020004, 0x00120004, 0x00020804, 0x00120804,
- 0x00020004, 0x00120004, 0x00020804, 0x00120804,
- 0x04020004, 0x04120004, 0x04020804, 0x04120804,
- 0x04020004, 0x04120004, 0x04020804, 0x04120804,
- 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
- 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
- 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
- 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
- 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
- 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
- 0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
- 0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
- 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
- 0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
- 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
- 0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
- 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
- 0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
- 0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
- 0x04020204, 0x04120204, 0x04020A04, 0x04120A04
- );
- static $pc2mapd3 = array(
- 0x00000000, 0x00010000, 0x02000000, 0x02010000,
- 0x00000020, 0x00010020, 0x02000020, 0x02010020,
- 0x00040000, 0x00050000, 0x02040000, 0x02050000,
- 0x00040020, 0x00050020, 0x02040020, 0x02050020,
- 0x00002000, 0x00012000, 0x02002000, 0x02012000,
- 0x00002020, 0x00012020, 0x02002020, 0x02012020,
- 0x00042000, 0x00052000, 0x02042000, 0x02052000,
- 0x00042020, 0x00052020, 0x02042020, 0x02052020,
- 0x00000000, 0x00010000, 0x02000000, 0x02010000,
- 0x00000020, 0x00010020, 0x02000020, 0x02010020,
- 0x00040000, 0x00050000, 0x02040000, 0x02050000,
- 0x00040020, 0x00050020, 0x02040020, 0x02050020,
- 0x00002000, 0x00012000, 0x02002000, 0x02012000,
- 0x00002020, 0x00012020, 0x02002020, 0x02012020,
- 0x00042000, 0x00052000, 0x02042000, 0x02052000,
- 0x00042020, 0x00052020, 0x02042020, 0x02052020,
- 0x00000010, 0x00010010, 0x02000010, 0x02010010,
- 0x00000030, 0x00010030, 0x02000030, 0x02010030,
- 0x00040010, 0x00050010, 0x02040010, 0x02050010,
- 0x00040030, 0x00050030, 0x02040030, 0x02050030,
- 0x00002010, 0x00012010, 0x02002010, 0x02012010,
- 0x00002030, 0x00012030, 0x02002030, 0x02012030,
- 0x00042010, 0x00052010, 0x02042010, 0x02052010,
- 0x00042030, 0x00052030, 0x02042030, 0x02052030,
- 0x00000010, 0x00010010, 0x02000010, 0x02010010,
- 0x00000030, 0x00010030, 0x02000030, 0x02010030,
- 0x00040010, 0x00050010, 0x02040010, 0x02050010,
- 0x00040030, 0x00050030, 0x02040030, 0x02050030,
- 0x00002010, 0x00012010, 0x02002010, 0x02012010,
- 0x00002030, 0x00012030, 0x02002030, 0x02012030,
- 0x00042010, 0x00052010, 0x02042010, 0x02052010,
- 0x00042030, 0x00052030, 0x02042030, 0x02052030,
- 0x20000000, 0x20010000, 0x22000000, 0x22010000,
- 0x20000020, 0x20010020, 0x22000020, 0x22010020,
- 0x20040000, 0x20050000, 0x22040000, 0x22050000,
- 0x20040020, 0x20050020, 0x22040020, 0x22050020,
- 0x20002000, 0x20012000, 0x22002000, 0x22012000,
- 0x20002020, 0x20012020, 0x22002020, 0x22012020,
- 0x20042000, 0x20052000, 0x22042000, 0x22052000,
- 0x20042020, 0x20052020, 0x22042020, 0x22052020,
- 0x20000000, 0x20010000, 0x22000000, 0x22010000,
- 0x20000020, 0x20010020, 0x22000020, 0x22010020,
- 0x20040000, 0x20050000, 0x22040000, 0x22050000,
- 0x20040020, 0x20050020, 0x22040020, 0x22050020,
- 0x20002000, 0x20012000, 0x22002000, 0x22012000,
- 0x20002020, 0x20012020, 0x22002020, 0x22012020,
- 0x20042000, 0x20052000, 0x22042000, 0x22052000,
- 0x20042020, 0x20052020, 0x22042020, 0x22052020,
- 0x20000010, 0x20010010, 0x22000010, 0x22010010,
- 0x20000030, 0x20010030, 0x22000030, 0x22010030,
- 0x20040010, 0x20050010, 0x22040010, 0x22050010,
- 0x20040030, 0x20050030, 0x22040030, 0x22050030,
- 0x20002010, 0x20012010, 0x22002010, 0x22012010,
- 0x20002030, 0x20012030, 0x22002030, 0x22012030,
- 0x20042010, 0x20052010, 0x22042010, 0x22052010,
- 0x20042030, 0x20052030, 0x22042030, 0x22052030,
- 0x20000010, 0x20010010, 0x22000010, 0x22010010,
- 0x20000030, 0x20010030, 0x22000030, 0x22010030,
- 0x20040010, 0x20050010, 0x22040010, 0x22050010,
- 0x20040030, 0x20050030, 0x22040030, 0x22050030,
- 0x20002010, 0x20012010, 0x22002010, 0x22012010,
- 0x20002030, 0x20012030, 0x22002030, 0x22012030,
- 0x20042010, 0x20052010, 0x22042010, 0x22052010,
- 0x20042030, 0x20052030, 0x22042030, 0x22052030
- );
- static $pc2mapd4 = array(
- 0x00000000, 0x00000400, 0x01000000, 0x01000400,
- 0x00000000, 0x00000400, 0x01000000, 0x01000400,
- 0x00000100, 0x00000500, 0x01000100, 0x01000500,
- 0x00000100, 0x00000500, 0x01000100, 0x01000500,
- 0x10000000, 0x10000400, 0x11000000, 0x11000400,
- 0x10000000, 0x10000400, 0x11000000, 0x11000400,
- 0x10000100, 0x10000500, 0x11000100, 0x11000500,
- 0x10000100, 0x10000500, 0x11000100, 0x11000500,
- 0x00080000, 0x00080400, 0x01080000, 0x01080400,
- 0x00080000, 0x00080400, 0x01080000, 0x01080400,
- 0x00080100, 0x00080500, 0x01080100, 0x01080500,
- 0x00080100, 0x00080500, 0x01080100, 0x01080500,
- 0x10080000, 0x10080400, 0x11080000, 0x11080400,
- 0x10080000, 0x10080400, 0x11080000, 0x11080400,
- 0x10080100, 0x10080500, 0x11080100, 0x11080500,
- 0x10080100, 0x10080500, 0x11080100, 0x11080500,
- 0x00000008, 0x00000408, 0x01000008, 0x01000408,
- 0x00000008, 0x00000408, 0x01000008, 0x01000408,
- 0x00000108, 0x00000508, 0x01000108, 0x01000508,
- 0x00000108, 0x00000508, 0x01000108, 0x01000508,
- 0x10000008, 0x10000408, 0x11000008, 0x11000408,
- 0x10000008, 0x10000408, 0x11000008, 0x11000408,
- 0x10000108, 0x10000508, 0x11000108, 0x11000508,
- 0x10000108, 0x10000508, 0x11000108, 0x11000508,
- 0x00080008, 0x00080408, 0x01080008, 0x01080408,
- 0x00080008, 0x00080408, 0x01080008, 0x01080408,
- 0x00080108, 0x00080508, 0x01080108, 0x01080508,
- 0x00080108, 0x00080508, 0x01080108, 0x01080508,
- 0x10080008, 0x10080408, 0x11080008, 0x11080408,
- 0x10080008, 0x10080408, 0x11080008, 0x11080408,
- 0x10080108, 0x10080508, 0x11080108, 0x11080508,
- 0x10080108, 0x10080508, 0x11080108, 0x11080508,
- 0x00001000, 0x00001400, 0x01001000, 0x01001400,
- 0x00001000, 0x00001400, 0x01001000, 0x01001400,
- 0x00001100, 0x00001500, 0x01001100, 0x01001500,
- 0x00001100, 0x00001500, 0x01001100, 0x01001500,
- 0x10001000, 0x10001400, 0x11001000, 0x11001400,
- 0x10001000, 0x10001400, 0x11001000, 0x11001400,
- 0x10001100, 0x10001500, 0x11001100, 0x11001500,
- 0x10001100, 0x10001500, 0x11001100, 0x11001500,
- 0x00081000, 0x00081400, 0x01081000, 0x01081400,
- 0x00081000, 0x00081400, 0x01081000, 0x01081400,
- 0x00081100, 0x00081500, 0x01081100, 0x01081500,
- 0x00081100, 0x00081500, 0x01081100, 0x01081500,
- 0x10081000, 0x10081400, 0x11081000, 0x11081400,
- 0x10081000, 0x10081400, 0x11081000, 0x11081400,
- 0x10081100, 0x10081500, 0x11081100, 0x11081500,
- 0x10081100, 0x10081500, 0x11081100, 0x11081500,
- 0x00001008, 0x00001408, 0x01001008, 0x01001408,
- 0x00001008, 0x00001408, 0x01001008, 0x01001408,
- 0x00001108, 0x00001508, 0x01001108, 0x01001508,
- 0x00001108, 0x00001508, 0x01001108, 0x01001508,
- 0x10001008, 0x10001408, 0x11001008, 0x11001408,
- 0x10001008, 0x10001408, 0x11001008, 0x11001408,
- 0x10001108, 0x10001508, 0x11001108, 0x11001508,
- 0x10001108, 0x10001508, 0x11001108, 0x11001508,
- 0x00081008, 0x00081408, 0x01081008, 0x01081408,
- 0x00081008, 0x00081408, 0x01081008, 0x01081408,
- 0x00081108, 0x00081508, 0x01081108, 0x01081508,
- 0x00081108, 0x00081508, 0x01081108, 0x01081508,
- 0x10081008, 0x10081408, 0x11081008, 0x11081408,
- 0x10081008, 0x10081408, 0x11081008, 0x11081408,
- 0x10081108, 0x10081508, 0x11081108, 0x11081508,
- 0x10081108, 0x10081508, 0x11081108, 0x11081508
- );
-
- $keys = array();
- for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {
- // pad the key and remove extra characters as appropriate.
- $key = str_pad(substr($this->key, $des_round * 8, 8), 8, "\0");
-
- // Perform the PC/1 transformation and compute C and D.
- $t = unpack('Nl/Nr', $key);
- list($l, $r) = array($t['l'], $t['r']);
- $key = ($this->shuffle[$pc1map[ $r & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x00") |
- ($this->shuffle[$pc1map[($r >> 8) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x00") |
- ($this->shuffle[$pc1map[($r >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x00") |
- ($this->shuffle[$pc1map[($r >> 24) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x00") |
- ($this->shuffle[$pc1map[ $l & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x00") |
- ($this->shuffle[$pc1map[($l >> 8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x00") |
- ($this->shuffle[$pc1map[($l >> 16) & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x00") |
- ($this->shuffle[$pc1map[($l >> 24) & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x00");
- $key = unpack('Nc/Nd', $key);
- $c = ( $key['c'] >> 4) & 0x0FFFFFFF;
- $d = (($key['d'] >> 4) & 0x0FFFFFF0) | ($key['c'] & 0x0F);
-
- $keys[$des_round] = array(
- self::ENCRYPT => array(),
- self::DECRYPT => array_fill(0, 32, 0)
- );
- for ($i = 0, $ki = 31; $i < 16; ++$i, $ki-= 2) {
- $c <<= $shifts[$i];
- $c = ($c | ($c >> 28)) & 0x0FFFFFFF;
- $d <<= $shifts[$i];
- $d = ($d | ($d >> 28)) & 0x0FFFFFFF;
-
- // Perform the PC-2 transformation.
- $cp = $pc2mapc1[ $c >> 24 ] | $pc2mapc2[($c >> 16) & 0xFF] |
- $pc2mapc3[($c >> 8) & 0xFF] | $pc2mapc4[ $c & 0xFF];
- $dp = $pc2mapd1[ $d >> 24 ] | $pc2mapd2[($d >> 16) & 0xFF] |
- $pc2mapd3[($d >> 8) & 0xFF] | $pc2mapd4[ $d & 0xFF];
-
- // Reorder: odd bytes/even bytes. Push the result in key schedule.
- $val1 = ( $cp & 0xFF000000) | (($cp << 8) & 0x00FF0000) |
- (($dp >> 16) & 0x0000FF00) | (($dp >> 8) & 0x000000FF);
- $val2 = (($cp << 8) & 0xFF000000) | (($cp << 16) & 0x00FF0000) |
- (($dp >> 8) & 0x0000FF00) | ( $dp & 0x000000FF);
- $keys[$des_round][self::ENCRYPT][ ] = $val1;
- $keys[$des_round][self::DECRYPT][$ki - 1] = $val1;
- $keys[$des_round][self::ENCRYPT][ ] = $val2;
- $keys[$des_round][self::DECRYPT][$ki ] = $val2;
- }
- }
-
- switch ($this->des_rounds) {
- case 3: // 3DES keys
- $this->keys = array(
- self::ENCRYPT => array_merge(
- $keys[0][self::ENCRYPT],
- $keys[1][self::DECRYPT],
- $keys[2][self::ENCRYPT]
- ),
- self::DECRYPT => array_merge(
- $keys[2][self::DECRYPT],
- $keys[1][self::ENCRYPT],
- $keys[0][self::DECRYPT]
- )
- );
- break;
- // case 1: // DES keys
- default:
- $this->keys = array(
- self::ENCRYPT => $keys[0][self::ENCRYPT],
- self::DECRYPT => $keys[0][self::DECRYPT]
- );
- }
- }
-
- /**
- * Setup the performance-optimized function for de/encrypt()
- *
- * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
- * @access private
- */
- function _setupInlineCrypt()
- {
- $lambda_functions =& self::_getLambdaFunctions();
-
- // Engine configuration for:
- // - DES ($des_rounds == 1) or
- // - 3DES ($des_rounds == 3)
- $des_rounds = $this->des_rounds;
-
- // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
- // (Currently, for DES, one generated $lambda_function cost on php5.5@32bit ~135kb unfreeable mem and ~230kb on php5.5@64bit)
- // (Currently, for TripleDES, one generated $lambda_function cost on php5.5@32bit ~240kb unfreeable mem and ~340kb on php5.5@64bit)
- // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one
- $gen_hi_opt_code = (bool)( count($lambda_functions) < 10 );
-
- // Generation of a unique hash for our generated code
- $code_hash = "Crypt_DES, $des_rounds, {$this->mode}";
- if ($gen_hi_opt_code) {
- // For hi-optimized code, we create for each combination of
- // $mode, $des_rounds and $this->key its own encrypt/decrypt function.
- // After max 10 hi-optimized functions, we create generic
- // (still very fast.. but not ultra) functions for each $mode/$des_rounds
- // Currently 2 * 5 generic functions will be then max. possible.
- $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
- }
-
- // Is there a re-usable $lambda_functions in there? If not, we have to create it.
- if (!isset($lambda_functions[$code_hash])) {
- // Init code for both, encrypt and decrypt.
- $init_crypt = 'static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
- if (!$sbox1) {
- $sbox1 = array_map("intval", $self->sbox1);
- $sbox2 = array_map("intval", $self->sbox2);
- $sbox3 = array_map("intval", $self->sbox3);
- $sbox4 = array_map("intval", $self->sbox4);
- $sbox5 = array_map("intval", $self->sbox5);
- $sbox6 = array_map("intval", $self->sbox6);
- $sbox7 = array_map("intval", $self->sbox7);
- $sbox8 = array_map("intval", $self->sbox8);'
- /* Merge $shuffle with $[inv]ipmap */ . '
- for ($i = 0; $i < 256; ++$i) {
- $shuffleip[] = $self->shuffle[$self->ipmap[$i]];
- $shuffleinvip[] = $self->shuffle[$self->invipmap[$i]];
- }
- }
- ';
-
- switch (true) {
- case $gen_hi_opt_code:
- // In Hi-optimized code mode, we use our [3]DES key schedule as hardcoded integers.
- // No futher initialisation of the $keys schedule is necessary.
- // That is the extra performance boost.
- $k = array(
- self::ENCRYPT => $this->keys[self::ENCRYPT],
- self::DECRYPT => $this->keys[self::DECRYPT]
- );
- $init_encrypt = '';
- $init_decrypt = '';
- break;
- default:
- // In generic optimized code mode, we have to use, as the best compromise [currently],
- // our key schedule as $ke/$kd arrays. (with hardcoded indexes...)
- $k = array(
- self::ENCRYPT => array(),
- self::DECRYPT => array()
- );
- for ($i = 0, $c = count($this->keys[self::ENCRYPT]); $i < $c; ++$i) {
- $k[self::ENCRYPT][$i] = '$ke[' . $i . ']';
- $k[self::DECRYPT][$i] = '$kd[' . $i . ']';
- }
- $init_encrypt = '$ke = $self->keys[$self::ENCRYPT];';
- $init_decrypt = '$kd = $self->keys[$self::DECRYPT];';
- break;
- }
-
- // Creating code for en- and decryption.
- $crypt_block = array();
- foreach (array(self::ENCRYPT, self::DECRYPT) as $c) {
- /* Do the initial IP permutation. */
- $crypt_block[$c] = '
- $in = unpack("N*", $in);
- $l = $in[1];
- $r = $in[2];
- $in = unpack("N*",
- ($shuffleip[ $r & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
- ($shuffleip[($r >> 8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
- ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
- ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
- ($shuffleip[ $l & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
- ($shuffleip[($l >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
- ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
- ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01")
- );
- ' . /* Extract L0 and R0 */ '
- $l = $in[1];
- $r = $in[2];
- ';
-
- $l = '$l';
- $r = '$r';
-
- // Perform DES or 3DES.
- for ($ki = -1, $des_round = 0; $des_round < $des_rounds; ++$des_round) {
- // Perform the 16 steps.
- for ($i = 0; $i < 16; ++$i) {
- // start of "the Feistel (F) function" - see the following URL:
- // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
- // Merge key schedule.
- $crypt_block[$c].= '
- $b1 = ((' . $r . ' >> 3) & 0x1FFFFFFF) ^ (' . $r . ' << 29) ^ ' . $k[$c][++$ki] . ';
- $b2 = ((' . $r . ' >> 31) & 0x00000001) ^ (' . $r . ' << 1) ^ ' . $k[$c][++$ki] . ';' .
- /* S-box indexing. */
- $l . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
- $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
- $sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^
- $sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ ' . $l . ';
- ';
- // end of "the Feistel (F) function"
-
- // swap L & R
- list($l, $r) = array($r, $l);
- }
- list($l, $r) = array($r, $l);
- }
-
- // Perform the inverse IP permutation.
- $crypt_block[$c].= '$in =
- ($shuffleinvip[($l >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
- ($shuffleinvip[($r >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
- ($shuffleinvip[($l >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
- ($shuffleinvip[($r >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
- ($shuffleinvip[($l >> 8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
- ($shuffleinvip[($r >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
- ($shuffleinvip[ $l & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
- ($shuffleinvip[ $r & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
- ';
- }
-
- // Creates the inline-crypt function
- $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
- array(
- 'init_crypt' => $init_crypt,
- 'init_encrypt' => $init_encrypt,
- 'init_decrypt' => $init_decrypt,
- 'encrypt_block' => $crypt_block[self::ENCRYPT],
- 'decrypt_block' => $crypt_block[self::DECRYPT]
- )
- );
- }
-
- // Set the inline-crypt function as callback in: $this->inline_crypt
- $this->inline_crypt = $lambda_functions[$code_hash];
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
deleted file mode 100644
index 248b65ef7..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
+++ /dev/null
@@ -1,893 +0,0 @@
-
- * setKey('abcdefg');
- *
- * echo base64_encode($hash->hash('abcdefg'));
- * ?>
- *
- *
- * @category Crypt
- * @package Hash
- * @author Jim Wigginton
- * @copyright 2007 Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
- */
-
-namespace phpseclib\Crypt;
-
-use phpseclib\Math\BigInteger;
-
-/**
- * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
- *
- * @package Hash
- * @author Jim Wigginton
- * @access public
- */
-class Hash
-{
- /**#@+
- * @access private
- * @see \phpseclib\Crypt\Hash::__construct()
- */
- /**
- * Toggles the internal implementation
- */
- const MODE_INTERNAL = 1;
- /**
- * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+.
- */
- const MODE_MHASH = 2;
- /**
- * Toggles the hash() implementation, which works on PHP 5.1.2+.
- */
- const MODE_HASH = 3;
- /**#@-*/
-
- /**
- * Hash Parameter
- *
- * @see self::setHash()
- * @var int
- * @access private
- */
- var $hashParam;
-
- /**
- * Byte-length of compression blocks / key (Internal HMAC)
- *
- * @see self::setAlgorithm()
- * @var int
- * @access private
- */
- var $b;
-
- /**
- * Byte-length of hash output (Internal HMAC)
- *
- * @see self::setHash()
- * @var int
- * @access private
- */
- var $l = false;
-
- /**
- * Hash Algorithm
- *
- * @see self::setHash()
- * @var string
- * @access private
- */
- var $hash;
-
- /**
- * Key
- *
- * @see self::setKey()
- * @var string
- * @access private
- */
- var $key = false;
-
- /**
- * Computed Key
- *
- * @see self::_computeKey()
- * @var string
- * @access private
- */
- var $computedKey = false;
-
- /**
- * Outer XOR (Internal HMAC)
- *
- * @see self::setKey()
- * @var string
- * @access private
- */
- var $opad;
-
- /**
- * Inner XOR (Internal HMAC)
- *
- * @see self::setKey()
- * @var string
- * @access private
- */
- var $ipad;
-
- /**
- * Engine
- *
- * @see self::setHash()
- * @var string
- * @access private
- */
- var $engine;
-
- /**
- * Default Constructor.
- *
- * @param string $hash
- * @return \phpseclib\Crypt\Hash
- * @access public
- */
- function __construct($hash = 'sha1')
- {
- if (!defined('CRYPT_HASH_MODE')) {
- switch (true) {
- case extension_loaded('hash'):
- define('CRYPT_HASH_MODE', self::MODE_HASH);
- break;
- case extension_loaded('mhash'):
- define('CRYPT_HASH_MODE', self::MODE_MHASH);
- break;
- default:
- define('CRYPT_HASH_MODE', self::MODE_INTERNAL);
- }
- }
-
- $this->setHash($hash);
- }
-
- /**
- * Sets the key for HMACs
- *
- * Keys can be of any length.
- *
- * @access public
- * @param string $key
- */
- function setKey($key = false)
- {
- $this->key = $key;
- $this->_computeKey();
- }
-
- /**
- * Pre-compute the key used by the HMAC
- *
- * Quoting http://tools.ietf.org/html/rfc2104#section-2, "Applications that use keys longer than B bytes
- * will first hash the key using H and then use the resultant L byte string as the actual key to HMAC."
- *
- * As documented in https://www.reddit.com/r/PHP/comments/9nct2l/symfonypolyfill_hash_pbkdf2_correct_fix_for/
- * when doing an HMAC multiple times it's faster to compute the hash once instead of computing it during
- * every call
- *
- * @access private
- */
- function _computeKey()
- {
- if ($this->key === false) {
- $this->computedKey = false;
- return;
- }
-
- if (strlen($this->key) <= $this->b) {
- $this->computedKey = $this->key;
- return;
- }
-
- switch ($this->engine) {
- case self::MODE_MHASH:
- $this->computedKey = mhash($this->hash, $this->key);
- break;
- case self::MODE_HASH:
- $this->computedKey = hash($this->hash, $this->key, true);
- break;
- case self::MODE_INTERNAL:
- $this->computedKey = call_user_func($this->hash, $this->key);
- }
- }
-
- /**
- * Gets the hash function.
- *
- * As set by the constructor or by the setHash() method.
- *
- * @access public
- * @return string
- */
- function getHash()
- {
- return $this->hashParam;
- }
-
- /**
- * Sets the hash function.
- *
- * @access public
- * @param string $hash
- */
- function setHash($hash)
- {
- $this->hashParam = $hash = strtolower($hash);
- switch ($hash) {
- case 'md5-96':
- case 'sha1-96':
- case 'sha256-96':
- case 'sha512-96':
- $hash = substr($hash, 0, -3);
- $this->l = 12; // 96 / 8 = 12
- break;
- case 'md2':
- case 'md5':
- $this->l = 16;
- break;
- case 'sha1':
- $this->l = 20;
- break;
- case 'sha256':
- $this->l = 32;
- break;
- case 'sha384':
- $this->l = 48;
- break;
- case 'sha512':
- $this->l = 64;
- }
-
- switch ($hash) {
- case 'md2-96':
- case 'md2':
- $this->b = 16;
- case 'md5-96':
- case 'sha1-96':
- case 'sha224-96':
- case 'sha256-96':
- case 'md2':
- case 'md5':
- case 'sha1':
- case 'sha224':
- case 'sha256':
- $this->b = 64;
- break;
- default:
- $this->b = 128;
- }
-
- switch ($hash) {
- case 'md2':
- $this->engine = CRYPT_HASH_MODE == self::MODE_HASH && in_array('md2', hash_algos()) ?
- self::MODE_HASH : self::MODE_INTERNAL;
- break;
- case 'sha384':
- case 'sha512':
- $this->engine = CRYPT_HASH_MODE == self::MODE_MHASH ? self::MODE_INTERNAL : CRYPT_HASH_MODE;
- break;
- default:
- $this->engine = CRYPT_HASH_MODE;
- }
-
- switch ($this->engine) {
- case self::MODE_MHASH:
- switch ($hash) {
- case 'md5':
- $this->hash = MHASH_MD5;
- break;
- case 'sha256':
- $this->hash = MHASH_SHA256;
- break;
- case 'sha1':
- default:
- $this->hash = MHASH_SHA1;
- }
- $this->_computeKey(self::MODE_MHASH);
- return;
- case self::MODE_HASH:
- switch ($hash) {
- case 'md5':
- $this->hash = 'md5';
- return;
- case 'md2':
- case 'sha256':
- case 'sha384':
- case 'sha512':
- $this->hash = $hash;
- return;
- case 'sha1':
- default:
- $this->hash = 'sha1';
- }
- $this->_computeKey(self::MODE_HASH);
- return;
- }
-
- switch ($hash) {
- case 'md2':
- $this->hash = array($this, '_md2');
- break;
- case 'md5':
- $this->hash = array($this, '_md5');
- break;
- case 'sha256':
- $this->hash = array($this, '_sha256');
- break;
- case 'sha384':
- case 'sha512':
- $this->hash = array($this, '_sha512');
- break;
- case 'sha1':
- default:
- $this->hash = array($this, '_sha1');
- }
-
- $this->ipad = str_repeat(chr(0x36), $this->b);
- $this->opad = str_repeat(chr(0x5C), $this->b);
-
- $this->_computeKey(self::MODE_INTERNAL);
- }
-
- /**
- * Compute the HMAC.
- *
- * @access public
- * @param string $text
- * @return string
- */
- function hash($text)
- {
- if (!empty($this->key) || is_string($this->key)) {
- switch ($this->engine) {
- case self::MODE_MHASH:
- $output = mhash($this->hash, $text, $this->computedKey);
- break;
- case self::MODE_HASH:
- $output = hash_hmac($this->hash, $text, $this->computedKey, true);
- break;
- case self::MODE_INTERNAL:
- $key = str_pad($this->computedKey, $this->b, chr(0)); // step 1
- $temp = $this->ipad ^ $key; // step 2
- $temp .= $text; // step 3
- $temp = call_user_func($this->hash, $temp); // step 4
- $output = $this->opad ^ $key; // step 5
- $output.= $temp; // step 6
- $output = call_user_func($this->hash, $output); // step 7
- }
- } else {
- switch ($this->engine) {
- case self::MODE_MHASH:
- $output = mhash($this->hash, $text);
- break;
- case self::MODE_HASH:
- $output = hash($this->hash, $text, true);
- break;
- case self::MODE_INTERNAL:
- $output = call_user_func($this->hash, $text);
- }
- }
-
- return substr($output, 0, $this->l);
- }
-
- /**
- * Returns the hash length (in bytes)
- *
- * @access public
- * @return int
- */
- function getLength()
- {
- return $this->l;
- }
-
- /**
- * Wrapper for MD5
- *
- * @access private
- * @param string $m
- */
- function _md5($m)
- {
- return pack('H*', md5($m));
- }
-
- /**
- * Wrapper for SHA1
- *
- * @access private
- * @param string $m
- */
- function _sha1($m)
- {
- return pack('H*', sha1($m));
- }
-
- /**
- * Pure-PHP implementation of MD2
- *
- * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}.
- *
- * @access private
- * @param string $m
- */
- function _md2($m)
- {
- static $s = array(
- 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
- 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
- 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
- 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
- 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
- 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
- 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
- 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
- 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
- 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
- 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
- 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
- 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
- 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
- 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
- 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
- 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
- 31, 26, 219, 153, 141, 51, 159, 17, 131, 20
- );
-
- // Step 1. Append Padding Bytes
- $pad = 16 - (strlen($m) & 0xF);
- $m.= str_repeat(chr($pad), $pad);
-
- $length = strlen($m);
-
- // Step 2. Append Checksum
- $c = str_repeat(chr(0), 16);
- $l = chr(0);
- for ($i = 0; $i < $length; $i+= 16) {
- for ($j = 0; $j < 16; $j++) {
- // RFC1319 incorrectly states that C[j] should be set to S[c xor L]
- //$c[$j] = chr($s[ord($m[$i + $j] ^ $l)]);
- // per , however, C[j] should be set to S[c xor L] xor C[j]
- $c[$j] = chr($s[ord($m[$i + $j] ^ $l)] ^ ord($c[$j]));
- $l = $c[$j];
- }
- }
- $m.= $c;
-
- $length+= 16;
-
- // Step 3. Initialize MD Buffer
- $x = str_repeat(chr(0), 48);
-
- // Step 4. Process Message in 16-Byte Blocks
- for ($i = 0; $i < $length; $i+= 16) {
- for ($j = 0; $j < 16; $j++) {
- $x[$j + 16] = $m[$i + $j];
- $x[$j + 32] = $x[$j + 16] ^ $x[$j];
- }
- $t = chr(0);
- for ($j = 0; $j < 18; $j++) {
- for ($k = 0; $k < 48; $k++) {
- $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]);
- //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]);
- }
- $t = chr(ord($t) + $j);
- }
- }
-
- // Step 5. Output
- return substr($x, 0, 16);
- }
-
- /**
- * Pure-PHP implementation of SHA256
- *
- * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}.
- *
- * @access private
- * @param string $m
- */
- function _sha256($m)
- {
- if (extension_loaded('suhosin')) {
- return pack('H*', sha256($m));
- }
-
- // Initialize variables
- $hash = array(
- 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
- );
- // Initialize table of round constants
- // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)
- static $k = array(
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
- );
-
- // Pre-processing
- $length = strlen($m);
- // to round to nearest 56 mod 64, we'll add 64 - (length + (64 - 56)) % 64
- $m.= str_repeat(chr(0), 64 - (($length + 8) & 0x3F));
- $m[$length] = chr(0x80);
- // we don't support hashing strings 512MB long
- $m.= pack('N2', 0, $length << 3);
-
- // Process the message in successive 512-bit chunks
- $chunks = str_split($m, 64);
- foreach ($chunks as $chunk) {
- $w = array();
- for ($i = 0; $i < 16; $i++) {
- extract(unpack('Ntemp', $this->_string_shift($chunk, 4)));
- $w[] = $temp;
- }
-
- // Extend the sixteen 32-bit words into sixty-four 32-bit words
- for ($i = 16; $i < 64; $i++) {
- // @codingStandardsIgnoreStart
- $s0 = $this->_rightRotate($w[$i - 15], 7) ^
- $this->_rightRotate($w[$i - 15], 18) ^
- $this->_rightShift( $w[$i - 15], 3);
- $s1 = $this->_rightRotate($w[$i - 2], 17) ^
- $this->_rightRotate($w[$i - 2], 19) ^
- $this->_rightShift( $w[$i - 2], 10);
- // @codingStandardsIgnoreEnd
- $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1);
- }
-
- // Initialize hash value for this chunk
- list($a, $b, $c, $d, $e, $f, $g, $h) = $hash;
-
- // Main loop
- for ($i = 0; $i < 64; $i++) {
- $s0 = $this->_rightRotate($a, 2) ^
- $this->_rightRotate($a, 13) ^
- $this->_rightRotate($a, 22);
- $maj = ($a & $b) ^
- ($a & $c) ^
- ($b & $c);
- $t2 = $this->_add($s0, $maj);
-
- $s1 = $this->_rightRotate($e, 6) ^
- $this->_rightRotate($e, 11) ^
- $this->_rightRotate($e, 25);
- $ch = ($e & $f) ^
- ($this->_not($e) & $g);
- $t1 = $this->_add($h, $s1, $ch, $k[$i], $w[$i]);
-
- $h = $g;
- $g = $f;
- $f = $e;
- $e = $this->_add($d, $t1);
- $d = $c;
- $c = $b;
- $b = $a;
- $a = $this->_add($t1, $t2);
- }
-
- // Add this chunk's hash to result so far
- $hash = array(
- $this->_add($hash[0], $a),
- $this->_add($hash[1], $b),
- $this->_add($hash[2], $c),
- $this->_add($hash[3], $d),
- $this->_add($hash[4], $e),
- $this->_add($hash[5], $f),
- $this->_add($hash[6], $g),
- $this->_add($hash[7], $h)
- );
- }
-
- // Produce the final hash value (big-endian)
- return pack('N8', $hash[0], $hash[1], $hash[2], $hash[3], $hash[4], $hash[5], $hash[6], $hash[7]);
- }
-
- /**
- * Pure-PHP implementation of SHA384 and SHA512
- *
- * @access private
- * @param string $m
- */
- function _sha512($m)
- {
- static $init384, $init512, $k;
-
- if (!isset($k)) {
- // Initialize variables
- $init384 = array( // initial values for SHA384
- 'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939',
- '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4'
- );
- $init512 = array( // initial values for SHA512
- '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1',
- '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179'
- );
-
- for ($i = 0; $i < 8; $i++) {
- $init384[$i] = new BigInteger($init384[$i], 16);
- $init384[$i]->setPrecision(64);
- $init512[$i] = new BigInteger($init512[$i], 16);
- $init512[$i]->setPrecision(64);
- }
-
- // Initialize table of round constants
- // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)
- $k = array(
- '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',
- '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',
- 'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',
- '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',
- 'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',
- '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',
- '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',
- 'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',
- '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',
- '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',
- 'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',
- 'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',
- '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',
- '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',
- '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',
- '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',
- 'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',
- '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',
- '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',
- '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'
- );
-
- for ($i = 0; $i < 80; $i++) {
- $k[$i] = new BigInteger($k[$i], 16);
- }
- }
-
- $hash = $this->l == 48 ? $init384 : $init512;
-
- // Pre-processing
- $length = strlen($m);
- // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128
- $m.= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));
- $m[$length] = chr(0x80);
- // we don't support hashing strings 512MB long
- $m.= pack('N4', 0, 0, 0, $length << 3);
-
- // Process the message in successive 1024-bit chunks
- $chunks = str_split($m, 128);
- foreach ($chunks as $chunk) {
- $w = array();
- for ($i = 0; $i < 16; $i++) {
- $temp = new BigInteger($this->_string_shift($chunk, 8), 256);
- $temp->setPrecision(64);
- $w[] = $temp;
- }
-
- // Extend the sixteen 32-bit words into eighty 32-bit words
- for ($i = 16; $i < 80; $i++) {
- $temp = array(
- $w[$i - 15]->bitwise_rightRotate(1),
- $w[$i - 15]->bitwise_rightRotate(8),
- $w[$i - 15]->bitwise_rightShift(7)
- );
- $s0 = $temp[0]->bitwise_xor($temp[1]);
- $s0 = $s0->bitwise_xor($temp[2]);
- $temp = array(
- $w[$i - 2]->bitwise_rightRotate(19),
- $w[$i - 2]->bitwise_rightRotate(61),
- $w[$i - 2]->bitwise_rightShift(6)
- );
- $s1 = $temp[0]->bitwise_xor($temp[1]);
- $s1 = $s1->bitwise_xor($temp[2]);
- $w[$i] = $w[$i - 16]->copy();
- $w[$i] = $w[$i]->add($s0);
- $w[$i] = $w[$i]->add($w[$i - 7]);
- $w[$i] = $w[$i]->add($s1);
- }
-
- // Initialize hash value for this chunk
- $a = $hash[0]->copy();
- $b = $hash[1]->copy();
- $c = $hash[2]->copy();
- $d = $hash[3]->copy();
- $e = $hash[4]->copy();
- $f = $hash[5]->copy();
- $g = $hash[6]->copy();
- $h = $hash[7]->copy();
-
- // Main loop
- for ($i = 0; $i < 80; $i++) {
- $temp = array(
- $a->bitwise_rightRotate(28),
- $a->bitwise_rightRotate(34),
- $a->bitwise_rightRotate(39)
- );
- $s0 = $temp[0]->bitwise_xor($temp[1]);
- $s0 = $s0->bitwise_xor($temp[2]);
- $temp = array(
- $a->bitwise_and($b),
- $a->bitwise_and($c),
- $b->bitwise_and($c)
- );
- $maj = $temp[0]->bitwise_xor($temp[1]);
- $maj = $maj->bitwise_xor($temp[2]);
- $t2 = $s0->add($maj);
-
- $temp = array(
- $e->bitwise_rightRotate(14),
- $e->bitwise_rightRotate(18),
- $e->bitwise_rightRotate(41)
- );
- $s1 = $temp[0]->bitwise_xor($temp[1]);
- $s1 = $s1->bitwise_xor($temp[2]);
- $temp = array(
- $e->bitwise_and($f),
- $g->bitwise_and($e->bitwise_not())
- );
- $ch = $temp[0]->bitwise_xor($temp[1]);
- $t1 = $h->add($s1);
- $t1 = $t1->add($ch);
- $t1 = $t1->add($k[$i]);
- $t1 = $t1->add($w[$i]);
-
- $h = $g->copy();
- $g = $f->copy();
- $f = $e->copy();
- $e = $d->add($t1);
- $d = $c->copy();
- $c = $b->copy();
- $b = $a->copy();
- $a = $t1->add($t2);
- }
-
- // Add this chunk's hash to result so far
- $hash = array(
- $hash[0]->add($a),
- $hash[1]->add($b),
- $hash[2]->add($c),
- $hash[3]->add($d),
- $hash[4]->add($e),
- $hash[5]->add($f),
- $hash[6]->add($g),
- $hash[7]->add($h)
- );
- }
-
- // Produce the final hash value (big-endian)
- // (\phpseclib\Crypt\Hash::hash() trims the output for hashes but not for HMACs. as such, we trim the output here)
- $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() .
- $hash[4]->toBytes() . $hash[5]->toBytes();
- if ($this->l != 48) {
- $temp.= $hash[6]->toBytes() . $hash[7]->toBytes();
- }
-
- return $temp;
- }
-
- /**
- * Right Rotate
- *
- * @access private
- * @param int $int
- * @param int $amt
- * @see self::_sha256()
- * @return int
- */
- function _rightRotate($int, $amt)
- {
- $invamt = 32 - $amt;
- $mask = (1 << $invamt) - 1;
- return (($int << $invamt) & 0xFFFFFFFF) | (($int >> $amt) & $mask);
- }
-
- /**
- * Right Shift
- *
- * @access private
- * @param int $int
- * @param int $amt
- * @see self::_sha256()
- * @return int
- */
- function _rightShift($int, $amt)
- {
- $mask = (1 << (32 - $amt)) - 1;
- return ($int >> $amt) & $mask;
- }
-
- /**
- * Not
- *
- * @access private
- * @param int $int
- * @see self::_sha256()
- * @return int
- */
- function _not($int)
- {
- return ~$int & 0xFFFFFFFF;
- }
-
- /**
- * Add
- *
- * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the
- * possibility of overflow exists, care has to be taken. BigInteger could be used but this should be faster.
- *
- * @return int
- * @see self::_sha256()
- * @access private
- */
- function _add()
- {
- static $mod;
- if (!isset($mod)) {
- $mod = pow(2, 32);
- }
-
- $result = 0;
- $arguments = func_get_args();
- foreach ($arguments as $argument) {
- $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument;
- }
-
- if ((php_uname('m') & "\xDF\xDF\xDF") != 'ARM') {
- return fmod($result, $mod);
- }
-
- return (fmod($result, 0x80000000) & 0x7FFFFFFF) |
- ((fmod(floor($result / 0x80000000), 2) & 1) << 31);
- }
-
- /**
- * String Shift
- *
- * Inspired by array_shift
- *
- * @param string $string
- * @param int $index
- * @return string
- * @access private
- */
- function _string_shift(&$string, $index = 1)
- {
- $substr = substr($string, 0, $index);
- $string = substr($string, $index);
- return $substr;
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php
deleted file mode 100644
index b2b9d48ea..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php
+++ /dev/null
@@ -1,688 +0,0 @@
-
- * setKey('abcdefgh');
- *
- * $plaintext = str_repeat('a', 1024);
- *
- * echo $rc2->decrypt($rc2->encrypt($plaintext));
- * ?>
- *
- *
- * @category Crypt
- * @package RC2
- * @author Patrick Monnerat
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
- */
-
-namespace phpseclib\Crypt;
-
-/**
- * Pure-PHP implementation of RC2.
- *
- * @package RC2
- * @access public
- */
-class RC2 extends Base
-{
- /**
- * Block Length of the cipher
- *
- * @see \phpseclib\Crypt\Base::block_size
- * @var int
- * @access private
- */
- var $block_size = 8;
-
- /**
- * The Key
- *
- * @see \phpseclib\Crypt\Base::key
- * @see self::setKey()
- * @var string
- * @access private
- */
- var $key;
-
- /**
- * The Original (unpadded) Key
- *
- * @see \phpseclib\Crypt\Base::key
- * @see self::setKey()
- * @see self::encrypt()
- * @see self::decrypt()
- * @var string
- * @access private
- */
- var $orig_key;
-
- /**
- * Don't truncate / null pad key
- *
- * @see \phpseclib\Crypt\Base::_clearBuffers()
- * @var bool
- * @access private
- */
- var $skip_key_adjustment = true;
-
- /**
- * Key Length (in bytes)
- *
- * @see \phpseclib\Crypt\RC2::setKeyLength()
- * @var int
- * @access private
- */
- var $key_length = 16; // = 128 bits
-
- /**
- * The mcrypt specific name of the cipher
- *
- * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
- * @var string
- * @access private
- */
- var $cipher_name_mcrypt = 'rc2';
-
- /**
- * Optimizing value while CFB-encrypting
- *
- * @see \phpseclib\Crypt\Base::cfb_init_len
- * @var int
- * @access private
- */
- var $cfb_init_len = 500;
-
- /**
- * The key length in bits.
- *
- * @see self::setKeyLength()
- * @see self::setKey()
- * @var int
- * @access private
- * @internal Should be in range [1..1024].
- * @internal Changing this value after setting the key has no effect.
- */
- var $default_key_length = 1024;
-
- /**
- * The key length in bits.
- *
- * @see self::isValidEnine()
- * @see self::setKey()
- * @var int
- * @access private
- * @internal Should be in range [1..1024].
- */
- var $current_key_length;
-
- /**
- * The Key Schedule
- *
- * @see self::_setupKey()
- * @var array
- * @access private
- */
- var $keys;
-
- /**
- * Key expansion randomization table.
- * Twice the same 256-value sequence to save a modulus in key expansion.
- *
- * @see self::setKey()
- * @var array
- * @access private
- */
- var $pitable = array(
- 0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
- 0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
- 0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
- 0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
- 0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
- 0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
- 0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
- 0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
- 0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
- 0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
- 0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
- 0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
- 0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
- 0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
- 0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
- 0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
- 0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
- 0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
- 0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
- 0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
- 0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
- 0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
- 0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
- 0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
- 0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
- 0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
- 0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
- 0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
- 0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
- 0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
- 0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
- 0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD,
- 0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
- 0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
- 0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
- 0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
- 0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
- 0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
- 0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
- 0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
- 0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
- 0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
- 0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
- 0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
- 0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
- 0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
- 0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
- 0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
- 0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
- 0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
- 0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
- 0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
- 0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
- 0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
- 0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
- 0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
- 0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
- 0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
- 0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
- 0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
- 0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
- 0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
- 0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
- 0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD
- );
-
- /**
- * Inverse key expansion randomization table.
- *
- * @see self::setKey()
- * @var array
- * @access private
- */
- var $invpitable = array(
- 0xD1, 0xDA, 0xB9, 0x6F, 0x9C, 0xC8, 0x78, 0x66,
- 0x80, 0x2C, 0xF8, 0x37, 0xEA, 0xE0, 0x62, 0xA4,
- 0xCB, 0x71, 0x50, 0x27, 0x4B, 0x95, 0xD9, 0x20,
- 0x9D, 0x04, 0x91, 0xE3, 0x47, 0x6A, 0x7E, 0x53,
- 0xFA, 0x3A, 0x3B, 0xB4, 0xA8, 0xBC, 0x5F, 0x68,
- 0x08, 0xCA, 0x8F, 0x14, 0xD7, 0xC0, 0xEF, 0x7B,
- 0x5B, 0xBF, 0x2F, 0xE5, 0xE2, 0x8C, 0xBA, 0x12,
- 0xE1, 0xAF, 0xB2, 0x54, 0x5D, 0x59, 0x76, 0xDB,
- 0x32, 0xA2, 0x58, 0x6E, 0x1C, 0x29, 0x64, 0xF3,
- 0xE9, 0x96, 0x0C, 0x98, 0x19, 0x8D, 0x3E, 0x26,
- 0xAB, 0xA5, 0x85, 0x16, 0x40, 0xBD, 0x49, 0x67,
- 0xDC, 0x22, 0x94, 0xBB, 0x3C, 0xC1, 0x9B, 0xEB,
- 0x45, 0x28, 0x18, 0xD8, 0x1A, 0x42, 0x7D, 0xCC,
- 0xFB, 0x65, 0x8E, 0x3D, 0xCD, 0x2A, 0xA3, 0x60,
- 0xAE, 0x93, 0x8A, 0x48, 0x97, 0x51, 0x15, 0xF7,
- 0x01, 0x0B, 0xB7, 0x36, 0xB1, 0x2E, 0x11, 0xFD,
- 0x84, 0x2D, 0x3F, 0x13, 0x88, 0xB3, 0x34, 0x24,
- 0x1B, 0xDE, 0xC5, 0x1D, 0x4D, 0x2B, 0x17, 0x31,
- 0x74, 0xA9, 0xC6, 0x43, 0x6D, 0x39, 0x90, 0xBE,
- 0xC3, 0xB0, 0x21, 0x6B, 0xF6, 0x0F, 0xD5, 0x99,
- 0x0D, 0xAC, 0x1F, 0x5C, 0x9E, 0xF5, 0xF9, 0x4C,
- 0xD6, 0xDF, 0x89, 0xE4, 0x8B, 0xFF, 0xC7, 0xAA,
- 0xE7, 0xED, 0x46, 0x25, 0xB6, 0x06, 0x5E, 0x35,
- 0xB5, 0xEC, 0xCE, 0xE8, 0x6C, 0x30, 0x55, 0x61,
- 0x4A, 0xFE, 0xA0, 0x79, 0x03, 0xF0, 0x10, 0x72,
- 0x7C, 0xCF, 0x52, 0xA6, 0xA7, 0xEE, 0x44, 0xD3,
- 0x9A, 0x57, 0x92, 0xD0, 0x5A, 0x7A, 0x41, 0x7F,
- 0x0E, 0x00, 0x63, 0xF2, 0x4F, 0x05, 0x83, 0xC9,
- 0xA1, 0xD4, 0xDD, 0xC4, 0x56, 0xF4, 0xD2, 0x77,
- 0x81, 0x09, 0x82, 0x33, 0x9F, 0x07, 0x86, 0x75,
- 0x38, 0x4E, 0x69, 0xF1, 0xAD, 0x23, 0x73, 0x87,
- 0x70, 0x02, 0xC2, 0x1E, 0xB8, 0x0A, 0xFC, 0xE6
- );
-
- /**
- * Test for engine validity
- *
- * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
- *
- * @see \phpseclib\Crypt\Base::__construct()
- * @param int $engine
- * @access public
- * @return bool
- */
- function isValidEngine($engine)
- {
- switch ($engine) {
- case self::ENGINE_OPENSSL:
- if ($this->current_key_length != 128 || strlen($this->orig_key) < 16) {
- return false;
- }
- $this->cipher_name_openssl_ecb = 'rc2-ecb';
- $this->cipher_name_openssl = 'rc2-' . $this->_openssl_translate_mode();
- }
-
- return parent::isValidEngine($engine);
- }
-
- /**
- * Sets the key length.
- *
- * Valid key lengths are 8 to 1024.
- * Calling this function after setting the key has no effect until the next
- * \phpseclib\Crypt\RC2::setKey() call.
- *
- * @access public
- * @param int $length in bits
- */
- function setKeyLength($length)
- {
- if ($length < 8) {
- $this->default_key_length = 1;
- } elseif ($length > 1024) {
- $this->default_key_length = 128;
- } else {
- $this->default_key_length = $length;
- }
- $this->current_key_length = $this->default_key_length;
-
- parent::setKeyLength($length);
- }
-
- /**
- * Returns the current key length
- *
- * @access public
- * @return int
- */
- function getKeyLength()
- {
- return $this->current_key_length;
- }
-
- /**
- * Sets the key.
- *
- * Keys can be of any length. RC2, itself, uses 8 to 1024 bit keys (eg.
- * strlen($key) <= 128), however, we only use the first 128 bytes if $key
- * has more then 128 bytes in it, and set $key to a single null byte if
- * it is empty.
- *
- * If the key is not explicitly set, it'll be assumed to be a single
- * null byte.
- *
- * @see \phpseclib\Crypt\Base::setKey()
- * @access public
- * @param string $key
- * @param int $t1 optional Effective key length in bits.
- */
- function setKey($key, $t1 = 0)
- {
- $this->orig_key = $key;
-
- if ($t1 <= 0) {
- $t1 = $this->default_key_length;
- } elseif ($t1 > 1024) {
- $t1 = 1024;
- }
- $this->current_key_length = $t1;
- // Key byte count should be 1..128.
- $key = strlen($key) ? substr($key, 0, 128) : "\x00";
- $t = strlen($key);
-
- // The mcrypt RC2 implementation only supports effective key length
- // of 1024 bits. It is however possible to handle effective key
- // lengths in range 1..1024 by expanding the key and applying
- // inverse pitable mapping to the first byte before submitting it
- // to mcrypt.
-
- // Key expansion.
- $l = array_values(unpack('C*', $key));
- $t8 = ($t1 + 7) >> 3;
- $tm = 0xFF >> (8 * $t8 - $t1);
-
- // Expand key.
- $pitable = $this->pitable;
- for ($i = $t; $i < 128; $i++) {
- $l[$i] = $pitable[$l[$i - 1] + $l[$i - $t]];
- }
- $i = 128 - $t8;
- $l[$i] = $pitable[$l[$i] & $tm];
- while ($i--) {
- $l[$i] = $pitable[$l[$i + 1] ^ $l[$i + $t8]];
- }
-
- // Prepare the key for mcrypt.
- $l[0] = $this->invpitable[$l[0]];
- array_unshift($l, 'C*');
-
- parent::setKey(call_user_func_array('pack', $l));
- }
-
- /**
- * Encrypts a message.
- *
- * Mostly a wrapper for \phpseclib\Crypt\Base::encrypt, with some additional OpenSSL handling code
- *
- * @see self::decrypt()
- * @access public
- * @param string $plaintext
- * @return string $ciphertext
- */
- function encrypt($plaintext)
- {
- if ($this->engine == self::ENGINE_OPENSSL) {
- $temp = $this->key;
- $this->key = $this->orig_key;
- $result = parent::encrypt($plaintext);
- $this->key = $temp;
- return $result;
- }
-
- return parent::encrypt($plaintext);
- }
-
- /**
- * Decrypts a message.
- *
- * Mostly a wrapper for \phpseclib\Crypt\Base::decrypt, with some additional OpenSSL handling code
- *
- * @see self::encrypt()
- * @access public
- * @param string $ciphertext
- * @return string $plaintext
- */
- function decrypt($ciphertext)
- {
- if ($this->engine == self::ENGINE_OPENSSL) {
- $temp = $this->key;
- $this->key = $this->orig_key;
- $result = parent::decrypt($ciphertext);
- $this->key = $temp;
- return $result;
- }
-
- return parent::decrypt($ciphertext);
- }
-
- /**
- * Encrypts a block
- *
- * @see \phpseclib\Crypt\Base::_encryptBlock()
- * @see \phpseclib\Crypt\Base::encrypt()
- * @access private
- * @param string $in
- * @return string
- */
- function _encryptBlock($in)
- {
- list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
- $keys = $this->keys;
- $limit = 20;
- $actions = array($limit => 44, 44 => 64);
- $j = 0;
-
- for (;;) {
- // Mixing round.
- $r0 = (($r0 + $keys[$j++] + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
- $r0 |= $r0 >> 16;
- $r1 = (($r1 + $keys[$j++] + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
- $r1 |= $r1 >> 16;
- $r2 = (($r2 + $keys[$j++] + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
- $r2 |= $r2 >> 16;
- $r3 = (($r3 + $keys[$j++] + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
- $r3 |= $r3 >> 16;
-
- if ($j === $limit) {
- if ($limit === 64) {
- break;
- }
-
- // Mashing round.
- $r0 += $keys[$r3 & 0x3F];
- $r1 += $keys[$r0 & 0x3F];
- $r2 += $keys[$r1 & 0x3F];
- $r3 += $keys[$r2 & 0x3F];
- $limit = $actions[$limit];
- }
- }
-
- return pack('vvvv', $r0, $r1, $r2, $r3);
- }
-
- /**
- * Decrypts a block
- *
- * @see \phpseclib\Crypt\Base::_decryptBlock()
- * @see \phpseclib\Crypt\Base::decrypt()
- * @access private
- * @param string $in
- * @return string
- */
- function _decryptBlock($in)
- {
- list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
- $keys = $this->keys;
- $limit = 44;
- $actions = array($limit => 20, 20 => 0);
- $j = 64;
-
- for (;;) {
- // R-mixing round.
- $r3 = ($r3 | ($r3 << 16)) >> 5;
- $r3 = ($r3 - $keys[--$j] - ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;
- $r2 = ($r2 | ($r2 << 16)) >> 3;
- $r2 = ($r2 - $keys[--$j] - ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;
- $r1 = ($r1 | ($r1 << 16)) >> 2;
- $r1 = ($r1 - $keys[--$j] - ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;
- $r0 = ($r0 | ($r0 << 16)) >> 1;
- $r0 = ($r0 - $keys[--$j] - ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;
-
- if ($j === $limit) {
- if ($limit === 0) {
- break;
- }
-
- // R-mashing round.
- $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;
- $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;
- $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;
- $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;
- $limit = $actions[$limit];
- }
- }
-
- return pack('vvvv', $r0, $r1, $r2, $r3);
- }
-
- /**
- * Setup the \phpseclib\Crypt\Base::ENGINE_MCRYPT $engine
- *
- * @see \phpseclib\Crypt\Base::_setupMcrypt()
- * @access private
- */
- function _setupMcrypt()
- {
- if (!isset($this->key)) {
- $this->setKey('');
- }
-
- parent::_setupMcrypt();
- }
-
- /**
- * Creates the key schedule
- *
- * @see \phpseclib\Crypt\Base::_setupKey()
- * @access private
- */
- function _setupKey()
- {
- if (!isset($this->key)) {
- $this->setKey('');
- }
-
- // Key has already been expanded in \phpseclib\Crypt\RC2::setKey():
- // Only the first value must be altered.
- $l = unpack('Ca/Cb/v*', $this->key);
- array_unshift($l, $this->pitable[$l['a']] | ($l['b'] << 8));
- unset($l['a']);
- unset($l['b']);
- $this->keys = $l;
- }
-
- /**
- * Setup the performance-optimized function for de/encrypt()
- *
- * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
- * @access private
- */
- function _setupInlineCrypt()
- {
- $lambda_functions =& self::_getLambdaFunctions();
-
- // The first 10 generated $lambda_functions will use the $keys hardcoded as integers
- // for the mixing rounds, for better inline crypt performance [~20% faster].
- // But for memory reason we have to limit those ultra-optimized $lambda_functions to an amount of 10.
- // (Currently, for Crypt_RC2, one generated $lambda_function cost on php5.5@32bit ~60kb unfreeable mem and ~100kb on php5.5@64bit)
- $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
-
- // Generation of a unique hash for our generated code
- $code_hash = "Crypt_RC2, {$this->mode}";
- if ($gen_hi_opt_code) {
- $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
- }
-
- // Is there a re-usable $lambda_functions in there?
- // If not, we have to create it.
- if (!isset($lambda_functions[$code_hash])) {
- // Init code for both, encrypt and decrypt.
- $init_crypt = '$keys = $self->keys;';
-
- switch (true) {
- case $gen_hi_opt_code:
- $keys = $this->keys;
- default:
- $keys = array();
- foreach ($this->keys as $k => $v) {
- $keys[$k] = '$keys[' . $k . ']';
- }
- }
-
- // $in is the current 8 bytes block which has to be en/decrypt
- $encrypt_block = $decrypt_block = '
- $in = unpack("v4", $in);
- $r0 = $in[1];
- $r1 = $in[2];
- $r2 = $in[3];
- $r3 = $in[4];
- ';
-
- // Create code for encryption.
- $limit = 20;
- $actions = array($limit => 44, 44 => 64);
- $j = 0;
-
- for (;;) {
- // Mixing round.
- $encrypt_block .= '
- $r0 = (($r0 + ' . $keys[$j++] . ' +
- ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
- $r0 |= $r0 >> 16;
- $r1 = (($r1 + ' . $keys[$j++] . ' +
- ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
- $r1 |= $r1 >> 16;
- $r2 = (($r2 + ' . $keys[$j++] . ' +
- ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
- $r2 |= $r2 >> 16;
- $r3 = (($r3 + ' . $keys[$j++] . ' +
- ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
- $r3 |= $r3 >> 16;';
-
- if ($j === $limit) {
- if ($limit === 64) {
- break;
- }
-
- // Mashing round.
- $encrypt_block .= '
- $r0 += $keys[$r3 & 0x3F];
- $r1 += $keys[$r0 & 0x3F];
- $r2 += $keys[$r1 & 0x3F];
- $r3 += $keys[$r2 & 0x3F];';
- $limit = $actions[$limit];
- }
- }
-
- $encrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';
-
- // Create code for decryption.
- $limit = 44;
- $actions = array($limit => 20, 20 => 0);
- $j = 64;
-
- for (;;) {
- // R-mixing round.
- $decrypt_block .= '
- $r3 = ($r3 | ($r3 << 16)) >> 5;
- $r3 = ($r3 - ' . $keys[--$j] . ' -
- ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;
- $r2 = ($r2 | ($r2 << 16)) >> 3;
- $r2 = ($r2 - ' . $keys[--$j] . ' -
- ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;
- $r1 = ($r1 | ($r1 << 16)) >> 2;
- $r1 = ($r1 - ' . $keys[--$j] . ' -
- ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;
- $r0 = ($r0 | ($r0 << 16)) >> 1;
- $r0 = ($r0 - ' . $keys[--$j] . ' -
- ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;';
-
- if ($j === $limit) {
- if ($limit === 0) {
- break;
- }
-
- // R-mashing round.
- $decrypt_block .= '
- $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;
- $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;
- $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;
- $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;';
- $limit = $actions[$limit];
- }
- }
-
- $decrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';
-
- // Creates the inline-crypt function
- $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
- array(
- 'init_crypt' => $init_crypt,
- 'encrypt_block' => $encrypt_block,
- 'decrypt_block' => $decrypt_block
- )
- );
- }
-
- // Set the inline-crypt function as callback in: $this->inline_crypt
- $this->inline_crypt = $lambda_functions[$code_hash];
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php
deleted file mode 100644
index 25e4ff854..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php
+++ /dev/null
@@ -1,342 +0,0 @@
-
- * setKey('abcdefgh');
- *
- * $size = 10 * 1024;
- * $plaintext = '';
- * for ($i = 0; $i < $size; $i++) {
- * $plaintext.= 'a';
- * }
- *
- * echo $rc4->decrypt($rc4->encrypt($plaintext));
- * ?>
- *
- *
- * @category Crypt
- * @package RC4
- * @author Jim Wigginton
- * @copyright 2007 Jim Wigginton
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://phpseclib.sourceforge.net
- */
-
-namespace phpseclib\Crypt;
-
-/**
- * Pure-PHP implementation of RC4.
- *
- * @package RC4
- * @author Jim Wigginton
- * @access public
- */
-class RC4 extends Base
-{
- /**#@+
- * @access private
- * @see \phpseclib\Crypt\RC4::_crypt()
- */
- const ENCRYPT = 0;
- const DECRYPT = 1;
- /**#@-*/
-
- /**
- * Block Length of the cipher
- *
- * RC4 is a stream cipher
- * so we the block_size to 0
- *
- * @see \phpseclib\Crypt\Base::block_size
- * @var int
- * @access private
- */
- var $block_size = 0;
-
- /**
- * Key Length (in bytes)
- *
- * @see \phpseclib\Crypt\RC4::setKeyLength()
- * @var int
- * @access private
- */
- var $key_length = 128; // = 1024 bits
-
- /**
- * The mcrypt specific name of the cipher
- *
- * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
- * @var string
- * @access private
- */
- var $cipher_name_mcrypt = 'arcfour';
-
- /**
- * Holds whether performance-optimized $inline_crypt() can/should be used.
- *
- * @see \phpseclib\Crypt\Base::inline_crypt
- * @var mixed
- * @access private
- */
- var $use_inline_crypt = false; // currently not available
-
- /**
- * The Key
- *
- * @see self::setKey()
- * @var string
- * @access private
- */
- var $key;
-
- /**
- * The Key Stream for decryption and encryption
- *
- * @see self::setKey()
- * @var array
- * @access private
- */
- var $stream;
-
- /**
- * Default Constructor.
- *
- * Determines whether or not the mcrypt extension should be used.
- *
- * @see \phpseclib\Crypt\Base::__construct()
- * @return \phpseclib\Crypt\RC4
- * @access public
- */
- function __construct()
- {
- parent::__construct(Base::MODE_STREAM);
- }
-
- /**
- * Test for engine validity
- *
- * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
- *
- * @see \phpseclib\Crypt\Base::__construct()
- * @param int $engine
- * @access public
- * @return bool
- */
- function isValidEngine($engine)
- {
- if ($engine == Base::ENGINE_OPENSSL) {
- if (version_compare(PHP_VERSION, '5.3.7') >= 0) {
- $this->cipher_name_openssl = 'rc4-40';
- } else {
- switch (strlen($this->key)) {
- case 5:
- $this->cipher_name_openssl = 'rc4-40';
- break;
- case 8:
- $this->cipher_name_openssl = 'rc4-64';
- break;
- case 16:
- $this->cipher_name_openssl = 'rc4';
- break;
- default:
- return false;
- }
- }
- }
-
- return parent::isValidEngine($engine);
- }
-
- /**
- * Dummy function.
- *
- * Some protocols, such as WEP, prepend an "initialization vector" to the key, effectively creating a new key [1].
- * If you need to use an initialization vector in this manner, feel free to prepend it to the key, yourself, before
- * calling setKey().
- *
- * [1] WEP's initialization vectors (IV's) are used in a somewhat insecure way. Since, in that protocol,
- * the IV's are relatively easy to predict, an attack described by
- * {@link http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf Scott Fluhrer, Itsik Mantin, and Adi Shamir}
- * can be used to quickly guess at the rest of the key. The following links elaborate:
- *
- * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009}
- * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack}
- *
- * @param string $iv
- * @see self::setKey()
- * @access public
- */
- function setIV($iv)
- {
- }
-
- /**
- * Sets the key length
- *
- * Keys can be between 1 and 256 bytes long.
- *
- * @access public
- * @param int $length
- */
- function setKeyLength($length)
- {
- if ($length < 8) {
- $this->key_length = 1;
- } elseif ($length > 2048) {
- $this->key_length = 256;
- } else {
- $this->key_length = $length >> 3;
- }
-
- parent::setKeyLength($length);
- }
-
- /**
- * Encrypts a message.
- *
- * @see \phpseclib\Crypt\Base::decrypt()
- * @see self::_crypt()
- * @access public
- * @param string $plaintext
- * @return string $ciphertext
- */
- function encrypt($plaintext)
- {
- if ($this->engine != Base::ENGINE_INTERNAL) {
- return parent::encrypt($plaintext);
- }
- return $this->_crypt($plaintext, self::ENCRYPT);
- }
-
- /**
- * Decrypts a message.
- *
- * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
- * At least if the continuous buffer is disabled.
- *
- * @see \phpseclib\Crypt\Base::encrypt()
- * @see self::_crypt()
- * @access public
- * @param string $ciphertext
- * @return string $plaintext
- */
- function decrypt($ciphertext)
- {
- if ($this->engine != Base::ENGINE_INTERNAL) {
- return parent::decrypt($ciphertext);
- }
- return $this->_crypt($ciphertext, self::DECRYPT);
- }
-
- /**
- * Encrypts a block
- *
- * @access private
- * @param string $in
- */
- function _encryptBlock($in)
- {
- // RC4 does not utilize this method
- }
-
- /**
- * Decrypts a block
- *
- * @access private
- * @param string $in
- */
- function _decryptBlock($in)
- {
- // RC4 does not utilize this method
- }
-
- /**
- * Setup the key (expansion)
- *
- * @see \phpseclib\Crypt\Base::_setupKey()
- * @access private
- */
- function _setupKey()
- {
- $key = $this->key;
- $keyLength = strlen($key);
- $keyStream = range(0, 255);
- $j = 0;
- for ($i = 0; $i < 256; $i++) {
- $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;
- $temp = $keyStream[$i];
- $keyStream[$i] = $keyStream[$j];
- $keyStream[$j] = $temp;
- }
-
- $this->stream = array();
- $this->stream[self::DECRYPT] = $this->stream[self::ENCRYPT] = array(
- 0, // index $i
- 0, // index $j
- $keyStream
- );
- }
-
- /**
- * Encrypts or decrypts a message.
- *
- * @see self::encrypt()
- * @see self::decrypt()
- * @access private
- * @param string $text
- * @param int $mode
- * @return string $text
- */
- function _crypt($text, $mode)
- {
- if ($this->changed) {
- $this->_setup();
- $this->changed = false;
- }
-
- $stream = &$this->stream[$mode];
- if ($this->continuousBuffer) {
- $i = &$stream[0];
- $j = &$stream[1];
- $keyStream = &$stream[2];
- } else {
- $i = $stream[0];
- $j = $stream[1];
- $keyStream = $stream[2];
- }
-
- $len = strlen($text);
- for ($k = 0; $k < $len; ++$k) {
- $i = ($i + 1) & 255;
- $ksi = $keyStream[$i];
- $j = ($j + $ksi) & 255;
- $ksj = $keyStream[$j];
-
- $keyStream[$i] = $ksj;
- $keyStream[$j] = $ksi;
- $text[$k] = $text[$k] ^ chr($keyStream[($ksj + $ksi) & 255]);
- }
-
- return $text;
- }
-}
diff --git a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php b/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
deleted file mode 100644
index 22387be3a..000000000
--- a/libraries/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
+++ /dev/null
@@ -1,3265 +0,0 @@
-
- * createKey());
- *
- * $plaintext = 'terrafrost';
- *
- * $rsa->loadKey($privatekey);
- * $ciphertext = $rsa->encrypt($plaintext);
- *
- * $rsa->loadKey($publickey);
- * echo $rsa->decrypt($ciphertext);
- * ?>
- *
- *
- * Here's an example of how to create signatures and verify signatures with this library:
- *