diff --git a/admin/cli/generate_key.php b/admin/cli/generate_key.php
index 28fd0af3660..9d5e8e5294b 100644
--- a/admin/cli/generate_key.php
+++ b/admin/cli/generate_key.php
@@ -39,6 +39,8 @@ if ($unrecognized) {
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
+// TODO: MDL-71421 - Remove the openssl alternative once sodium becomes a requirement in Moodle 4.2.
+
if ($options['help']) {
echo "Generate secure key
diff --git a/admin/environment.xml b/admin/environment.xml
index 495db2b5079..6f2e8a30f62 100644
--- a/admin/environment.xml
+++ b/admin/environment.xml
@@ -3447,7 +3447,7 @@
-
+
diff --git a/lib/classes/encryption.php b/lib/classes/encryption.php
index 84560f68993..aff8599e4e5 100644
--- a/lib/classes/encryption.php
+++ b/lib/classes/encryption.php
@@ -30,10 +30,15 @@ namespace core;
* @package core
* @copyright 2020 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @deprecated since Moodle 3.11 MDL-71420 - the openssl part of the class only.
+ * @todo MDL-71421 Remove the openssl part in Moodle 4.2.
*/
class encryption {
/** @var string Encryption method: Sodium */
const METHOD_SODIUM = 'sodium';
+
+ // TODO: MDL-71421 - Remove the following openssl constants and all uses once sodium becomes a requirement in Moodle 4.2.
+
/** @var string Encryption method: hand-coded OpenSSL (less safe) */
const METHOD_OPENSSL = 'openssl-aes-256-ctr';
diff --git a/lib/upgrade.txt b/lib/upgrade.txt
index b4d58ee3f61..df17134a6ab 100644
--- a/lib/upgrade.txt
+++ b/lib/upgrade.txt
@@ -79,6 +79,8 @@ information provided here is intended especially for developers.
default the key is stored in moodledata but admins can configure a different, more secure
location in config.php if required. To get the best possible security for this feature, we
recommend enabling the Sodium PHP extension.
+ The OpenSSL alternative for this API, used when Sodium is not available, is considered deprecated
+ at all effects, and will be removed in Moodle 4.2. See MDL-71421 for more information.
* Behat timeout constants behat_base::TIMEOUT, EXTENDED_TIMEOUT, and REDUCED_TIMEOUT, which were deprecated in 3.7, have been removed.
* \core_table\local\filter\filterset::JOINTYPE_DEFAULT is being changed from 1 (ANY) to 2 (ALL). Filterset implementations
can override the default filterset join type by overriding \core_table\local\filter\filterset::get_join_type() instead.