summaryrefslogtreecommitdiffstats
path: root/apps/encryption
diff options
context:
space:
mode:
Diffstat (limited to 'apps/encryption')
-rw-r--r--apps/encryption/appinfo/application.php23
-rw-r--r--apps/encryption/appinfo/register_command.php7
-rw-r--r--apps/encryption/command/enablemasterkey.php86
-rw-r--r--apps/encryption/controller/settingscontroller.php20
-rw-r--r--apps/encryption/hooks/userhooks.php6
-rw-r--r--apps/encryption/l10n/ast.js2
-rw-r--r--apps/encryption/l10n/ast.json2
-rw-r--r--apps/encryption/l10n/az.js1
-rw-r--r--apps/encryption/l10n/az.json1
-rw-r--r--apps/encryption/l10n/bg_BG.js2
-rw-r--r--apps/encryption/l10n/bg_BG.json2
-rw-r--r--apps/encryption/l10n/bn_BD.js1
-rw-r--r--apps/encryption/l10n/bn_BD.json1
-rw-r--r--apps/encryption/l10n/bs.js2
-rw-r--r--apps/encryption/l10n/bs.json2
-rw-r--r--apps/encryption/l10n/ca.js2
-rw-r--r--apps/encryption/l10n/ca.json2
-rw-r--r--apps/encryption/l10n/cs_CZ.js3
-rw-r--r--apps/encryption/l10n/cs_CZ.json3
-rw-r--r--apps/encryption/l10n/da.js7
-rw-r--r--apps/encryption/l10n/da.json7
-rw-r--r--apps/encryption/l10n/de.js2
-rw-r--r--apps/encryption/l10n/de.json2
-rw-r--r--apps/encryption/l10n/de_DE.js2
-rw-r--r--apps/encryption/l10n/de_DE.json2
-rw-r--r--apps/encryption/l10n/el.js5
-rw-r--r--apps/encryption/l10n/el.json5
-rw-r--r--apps/encryption/l10n/en_GB.js2
-rw-r--r--apps/encryption/l10n/en_GB.json2
-rw-r--r--apps/encryption/l10n/es.js5
-rw-r--r--apps/encryption/l10n/es.json5
-rw-r--r--apps/encryption/l10n/es_AR.js2
-rw-r--r--apps/encryption/l10n/es_AR.json2
-rw-r--r--apps/encryption/l10n/es_MX.js2
-rw-r--r--apps/encryption/l10n/es_MX.json2
-rw-r--r--apps/encryption/l10n/et_EE.js10
-rw-r--r--apps/encryption/l10n/et_EE.json10
-rw-r--r--apps/encryption/l10n/eu.js2
-rw-r--r--apps/encryption/l10n/eu.json2
-rw-r--r--apps/encryption/l10n/fa.js1
-rw-r--r--apps/encryption/l10n/fa.json1
-rw-r--r--apps/encryption/l10n/fi_FI.js3
-rw-r--r--apps/encryption/l10n/fi_FI.json3
-rw-r--r--apps/encryption/l10n/fr.js5
-rw-r--r--apps/encryption/l10n/fr.json5
-rw-r--r--apps/encryption/l10n/gl.js2
-rw-r--r--apps/encryption/l10n/gl.json2
-rw-r--r--apps/encryption/l10n/hr.js2
-rw-r--r--apps/encryption/l10n/hr.json2
-rw-r--r--apps/encryption/l10n/hu_HU.js2
-rw-r--r--apps/encryption/l10n/hu_HU.json2
-rw-r--r--apps/encryption/l10n/ia.js7
-rw-r--r--apps/encryption/l10n/ia.json5
-rw-r--r--apps/encryption/l10n/id.js5
-rw-r--r--apps/encryption/l10n/id.json5
-rw-r--r--apps/encryption/l10n/is.js7
-rw-r--r--apps/encryption/l10n/is.json5
-rw-r--r--apps/encryption/l10n/it.js7
-rw-r--r--apps/encryption/l10n/it.json7
-rw-r--r--apps/encryption/l10n/ja.js2
-rw-r--r--apps/encryption/l10n/ja.json2
-rw-r--r--apps/encryption/l10n/kn.js1
-rw-r--r--apps/encryption/l10n/kn.json1
-rw-r--r--apps/encryption/l10n/ko.js5
-rw-r--r--apps/encryption/l10n/ko.json5
-rw-r--r--apps/encryption/l10n/lb.js1
-rw-r--r--apps/encryption/l10n/lb.json1
-rw-r--r--apps/encryption/l10n/lt_LT.js2
-rw-r--r--apps/encryption/l10n/lt_LT.json2
-rw-r--r--apps/encryption/l10n/mk.js1
-rw-r--r--apps/encryption/l10n/mk.json1
-rw-r--r--apps/encryption/l10n/nb_NO.js5
-rw-r--r--apps/encryption/l10n/nb_NO.json5
-rw-r--r--apps/encryption/l10n/nl.js5
-rw-r--r--apps/encryption/l10n/nl.json5
-rw-r--r--apps/encryption/l10n/oc.js2
-rw-r--r--apps/encryption/l10n/oc.json2
-rw-r--r--apps/encryption/l10n/pl.js2
-rw-r--r--apps/encryption/l10n/pl.json2
-rw-r--r--apps/encryption/l10n/pt_BR.js5
-rw-r--r--apps/encryption/l10n/pt_BR.json5
-rw-r--r--apps/encryption/l10n/pt_PT.js16
-rw-r--r--apps/encryption/l10n/pt_PT.json16
-rw-r--r--apps/encryption/l10n/ro.js1
-rw-r--r--apps/encryption/l10n/ro.json1
-rw-r--r--apps/encryption/l10n/ru.js2
-rw-r--r--apps/encryption/l10n/ru.json2
-rw-r--r--apps/encryption/l10n/sk_SK.js2
-rw-r--r--apps/encryption/l10n/sk_SK.json2
-rw-r--r--apps/encryption/l10n/sl.js2
-rw-r--r--apps/encryption/l10n/sl.json2
-rw-r--r--apps/encryption/l10n/sq.js2
-rw-r--r--apps/encryption/l10n/sq.json2
-rw-r--r--apps/encryption/l10n/sr.js2
-rw-r--r--apps/encryption/l10n/sr.json2
-rw-r--r--apps/encryption/l10n/sr@latin.js2
-rw-r--r--apps/encryption/l10n/sr@latin.json2
-rw-r--r--apps/encryption/l10n/sv.js2
-rw-r--r--apps/encryption/l10n/sv.json2
-rw-r--r--apps/encryption/l10n/th_TH.js5
-rw-r--r--apps/encryption/l10n/th_TH.json5
-rw-r--r--apps/encryption/l10n/tr.js5
-rw-r--r--apps/encryption/l10n/tr.json5
-rw-r--r--apps/encryption/l10n/uk.js2
-rw-r--r--apps/encryption/l10n/uk.json2
-rw-r--r--apps/encryption/l10n/ur_PK.js6
-rw-r--r--apps/encryption/l10n/ur_PK.json4
-rw-r--r--apps/encryption/l10n/vi.js2
-rw-r--r--apps/encryption/l10n/vi.json2
-rw-r--r--apps/encryption/l10n/zh_CN.js3
-rw-r--r--apps/encryption/l10n/zh_CN.json3
-rw-r--r--apps/encryption/l10n/zh_TW.js2
-rw-r--r--apps/encryption/l10n/zh_TW.json2
-rw-r--r--apps/encryption/lib/crypto/crypt.php144
-rw-r--r--apps/encryption/lib/crypto/encryptall.php424
-rw-r--r--apps/encryption/lib/crypto/encryption.php57
-rw-r--r--apps/encryption/lib/keymanager.php95
-rw-r--r--apps/encryption/lib/recovery.php5
-rw-r--r--apps/encryption/lib/users/setup.php3
-rw-r--r--apps/encryption/lib/util.php10
-rw-r--r--apps/encryption/templates/altmail.php16
-rw-r--r--apps/encryption/templates/mail.php39
-rw-r--r--apps/encryption/tests/command/testenablemasterkey.php103
-rw-r--r--apps/encryption/tests/controller/SettingsControllerTest.php34
-rw-r--r--apps/encryption/tests/hooks/UserHooksTest.php2
-rw-r--r--apps/encryption/tests/lib/KeyManagerTest.php152
-rw-r--r--apps/encryption/tests/lib/RecoveryTest.php2
-rw-r--r--apps/encryption/tests/lib/UtilTest.php21
-rw-r--r--apps/encryption/tests/lib/crypto/cryptTest.php126
-rw-r--r--apps/encryption/tests/lib/crypto/encryptalltest.php291
-rw-r--r--apps/encryption/tests/lib/crypto/encryptionTest.php7
-rw-r--r--apps/encryption/tests/lib/users/SetupTest.php2
-rw-r--r--apps/encryption/vendor/pbkdf2fallback.php87
133 files changed, 2031 insertions, 85 deletions
diff --git a/apps/encryption/appinfo/application.php b/apps/encryption/appinfo/application.php
index d4804394c5f..75107b2723c 100644
--- a/apps/encryption/appinfo/application.php
+++ b/apps/encryption/appinfo/application.php
@@ -30,6 +30,7 @@ use OCA\Encryption\Controller\RecoveryController;
use OCA\Encryption\Controller\SettingsController;
use OCA\Encryption\Controller\StatusController;
use OCA\Encryption\Crypto\Crypt;
+use OCA\Encryption\Crypto\EncryptAll;
use OCA\Encryption\Crypto\Encryption;
use OCA\Encryption\HookManager;
use OCA\Encryption\Hooks\UserHooks;
@@ -42,6 +43,7 @@ use OCP\App;
use OCP\AppFramework\IAppContainer;
use OCP\Encryption\IManager;
use OCP\IConfig;
+use Symfony\Component\Console\Helper\QuestionHelper;
class Application extends \OCP\AppFramework\App {
@@ -111,6 +113,7 @@ class Application extends \OCP\AppFramework\App {
$container->query('Crypt'),
$container->query('KeyManager'),
$container->query('Util'),
+ $container->query('EncryptAll'),
$container->getServer()->getLogger(),
$container->getServer()->getL10N($container->getAppName())
);
@@ -195,7 +198,8 @@ class Application extends \OCP\AppFramework\App {
$server->getUserSession(),
$c->query('KeyManager'),
$c->query('Crypt'),
- $c->query('Session')
+ $c->query('Session'),
+ $server->getSession()
);
});
@@ -221,6 +225,23 @@ class Application extends \OCP\AppFramework\App {
$server->getUserManager());
});
+ $container->registerService('EncryptAll',
+ function (IAppContainer $c) {
+ $server = $c->getServer();
+ return new EncryptAll(
+ $c->query('UserSetup'),
+ $c->getServer()->getUserManager(),
+ new View(),
+ $c->query('KeyManager'),
+ $server->getConfig(),
+ $server->getMailer(),
+ $server->getL10N('encryption'),
+ new QuestionHelper(),
+ $server->getSecureRandom()
+ );
+ }
+ );
+
}
public function registerSettings() {
diff --git a/apps/encryption/appinfo/register_command.php b/apps/encryption/appinfo/register_command.php
index 4fdf7ecec38..0f03b63560a 100644
--- a/apps/encryption/appinfo/register_command.php
+++ b/apps/encryption/appinfo/register_command.php
@@ -21,10 +21,17 @@
*/
use OCA\Encryption\Command\MigrateKeys;
+use Symfony\Component\Console\Helper\QuestionHelper;
$userManager = OC::$server->getUserManager();
$view = new \OC\Files\View();
$config = \OC::$server->getConfig();
+$userSession = \OC::$server->getUserSession();
$connection = \OC::$server->getDatabaseConnection();
$logger = \OC::$server->getLogger();
+$questionHelper = new QuestionHelper();
+$crypt = new \OCA\Encryption\Crypto\Crypt($logger, $userSession, $config);
+$util = new \OCA\Encryption\Util($view, $crypt, $logger, $userSession, $config, $userManager);
+
$application->add(new MigrateKeys($userManager, $view, $connection, $config, $logger));
+$application->add(new \OCA\Encryption\Command\EnableMasterKey($util, $config, $questionHelper));
diff --git a/apps/encryption/command/enablemasterkey.php b/apps/encryption/command/enablemasterkey.php
new file mode 100644
index 00000000000..f49579a3b81
--- /dev/null
+++ b/apps/encryption/command/enablemasterkey.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\Encryption\Command;
+
+
+use OCA\Encryption\Util;
+use OCP\IConfig;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Helper\QuestionHelper;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\ConfirmationQuestion;
+
+class EnableMasterKey extends Command {
+
+ /** @var Util */
+ protected $util;
+
+ /** @var IConfig */
+ protected $config;
+
+ /** @var QuestionHelper */
+ protected $questionHelper;
+
+ /**
+ * @param Util $util
+ * @param IConfig $config
+ * @param QuestionHelper $questionHelper
+ */
+ public function __construct(Util $util,
+ IConfig $config,
+ QuestionHelper $questionHelper) {
+
+ $this->util = $util;
+ $this->config = $config;
+ $this->questionHelper = $questionHelper;
+ parent::__construct();
+ }
+
+ protected function configure() {
+ $this
+ ->setName('encryption:enable-master-key')
+ ->setDescription('Enable the master key. Only available for fresh installations with no existing encrypted data! There is also no way to disable it again.');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+
+ $isAlreadyEnabled = $this->util->isMasterKeyEnabled();
+
+ if($isAlreadyEnabled) {
+ $output->writeln('Master key already enabled');
+ } else {
+ $question = new ConfirmationQuestion(
+ 'Warning: Only available for fresh installations with no existing encrypted data! '
+ . 'There is also no way to disable it again. Do you want to continue? (y/n) ', false);
+ if ($this->questionHelper->ask($input, $output, $question)) {
+ $this->config->setAppValue('encryption', 'useMasterKey', '1');
+ $output->writeln('Master key successfully enabled.');
+ } else {
+ $output->writeln('aborted.');
+ }
+ }
+
+ }
+
+}
diff --git a/apps/encryption/controller/settingscontroller.php b/apps/encryption/controller/settingscontroller.php
index 641c97e1d6e..8e6de19e784 100644
--- a/apps/encryption/controller/settingscontroller.php
+++ b/apps/encryption/controller/settingscontroller.php
@@ -31,6 +31,7 @@ use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\IL10N;
use OCP\IRequest;
+use OCP\ISession;
use OCP\IUserManager;
use OCP\IUserSession;
@@ -54,6 +55,9 @@ class SettingsController extends Controller {
/** @var Session */
private $session;
+ /** @var ISession */
+ private $ocSession;
+
/**
* @param string $AppName
* @param IRequest $request
@@ -63,6 +67,7 @@ class SettingsController extends Controller {
* @param KeyManager $keyManager
* @param Crypt $crypt
* @param Session $session
+ * @param ISession $ocSession
*/
public function __construct($AppName,
IRequest $request,
@@ -71,7 +76,8 @@ class SettingsController extends Controller {
IUserSession $userSession,
KeyManager $keyManager,
Crypt $crypt,
- Session $session) {
+ Session $session,
+ ISession $ocSession) {
parent::__construct($AppName, $request);
$this->l = $l10n;
$this->userSession = $userSession;
@@ -79,6 +85,7 @@ class SettingsController extends Controller {
$this->keyManager = $keyManager;
$this->crypt = $crypt;
$this->session = $session;
+ $this->ocSession = $ocSession;
}
@@ -97,13 +104,20 @@ class SettingsController extends Controller {
//check if password is correct
$passwordCorrect = $this->userManager->checkPassword($uid, $newPassword);
+ if ($passwordCorrect === false) {
+ // if check with uid fails we need to check the password with the login name
+ // e.g. in the ldap case. For local user we need to check the password with
+ // the uid because in this case the login name is case insensitive
+ $loginName = $this->ocSession->get('loginname');
+ $passwordCorrect = $this->userManager->checkPassword($loginName, $newPassword);
+ }
if ($passwordCorrect !== false) {
$encryptedKey = $this->keyManager->getPrivateKey($uid);
- $decryptedKey = $this->crypt->decryptPrivateKey($encryptedKey, $oldPassword);
+ $decryptedKey = $this->crypt->decryptPrivateKey($encryptedKey, $oldPassword, $uid);
if ($decryptedKey) {
- $encryptedKey = $this->crypt->symmetricEncryptFileContent($decryptedKey, $newPassword);
+ $encryptedKey = $this->crypt->encryptPrivateKey($decryptedKey, $newPassword, $uid);
$header = $this->crypt->generateHeader();
if ($encryptedKey) {
$this->keyManager->setPrivateKey($uid, $header . $encryptedKey);
diff --git a/apps/encryption/hooks/userhooks.php b/apps/encryption/hooks/userhooks.php
index a86b8662781..8b6f17bec6d 100644
--- a/apps/encryption/hooks/userhooks.php
+++ b/apps/encryption/hooks/userhooks.php
@@ -220,8 +220,7 @@ class UserHooks implements IHook {
if ($user && $params['uid'] === $user->getUID() && $privateKey) {
// Encrypt private key with new user pwd as passphrase
- $encryptedPrivateKey = $this->crypt->symmetricEncryptFileContent($privateKey,
- $params['password']);
+ $encryptedPrivateKey = $this->crypt->encryptPrivateKey($privateKey, $params['password'], $params['uid']);
// Save private key
if ($encryptedPrivateKey) {
@@ -259,8 +258,7 @@ class UserHooks implements IHook {
$this->keyManager->setPublicKey($user, $keyPair['publicKey']);
// Encrypt private key with new password
- $encryptedKey = $this->crypt->symmetricEncryptFileContent($keyPair['privateKey'],
- $newUserPassword);
+ $encryptedKey = $this->crypt->encryptPrivateKey($keyPair['privateKey'], $newUserPassword, $user);
if ($encryptedKey) {
$this->keyManager->setPrivateKey($user, $this->crypt->generateHeader() . $encryptedKey);
diff --git a/apps/encryption/l10n/ast.js b/apps/encryption/l10n/ast.js
index 94a164ff65d..eb732bada56 100644
--- a/apps/encryption/l10n/ast.js
+++ b/apps/encryption/l10n/ast.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.",
+ "The share will expire on %s." : "La compartición va caducar el %s.",
+ "Cheers!" : "¡Salú!",
"Recovery key password" : "Contraseña de clave de recuperación",
"Change recovery key password:" : "Camudar la contraseña de la clave de recuperación",
"Change Password" : "Camudar contraseña",
diff --git a/apps/encryption/l10n/ast.json b/apps/encryption/l10n/ast.json
index ecd1c2ff2e3..501e4757acf 100644
--- a/apps/encryption/l10n/ast.json
+++ b/apps/encryption/l10n/ast.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.",
+ "The share will expire on %s." : "La compartición va caducar el %s.",
+ "Cheers!" : "¡Salú!",
"Recovery key password" : "Contraseña de clave de recuperación",
"Change recovery key password:" : "Camudar la contraseña de la clave de recuperación",
"Change Password" : "Camudar contraseña",
diff --git a/apps/encryption/l10n/az.js b/apps/encryption/l10n/az.js
index a8897f9ec18..0b429f903fa 100644
--- a/apps/encryption/l10n/az.js
+++ b/apps/encryption/l10n/az.js
@@ -20,6 +20,7 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu faylı deşifrə etmək olmur və ola bilər ki, bu paylaşımda olan fayldır. Xahiş olunur faylın sahibinə həmin faylı sizinlə yenidən paylaşım etməsini bildirəsiniz. ",
+ "Cheers!" : "Şərəfə!",
"Recovery key password" : "Açar şifrənin bərpa edilməsi",
"Change recovery key password:" : "Bərpa açarın şifrəsini dəyişdir:",
"Change Password" : "Şifrəni dəyişdir",
diff --git a/apps/encryption/l10n/az.json b/apps/encryption/l10n/az.json
index 1dae4fbeaf9..fc5ab73b8b4 100644
--- a/apps/encryption/l10n/az.json
+++ b/apps/encryption/l10n/az.json
@@ -18,6 +18,7 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu faylı deşifrə etmək olmur və ola bilər ki, bu paylaşımda olan fayldır. Xahiş olunur faylın sahibinə həmin faylı sizinlə yenidən paylaşım etməsini bildirəsiniz. ",
+ "Cheers!" : "Şərəfə!",
"Recovery key password" : "Açar şifrənin bərpa edilməsi",
"Change recovery key password:" : "Bərpa açarın şifrəsini dəyişdir:",
"Change Password" : "Şifrəni dəyişdir",
diff --git a/apps/encryption/l10n/bg_BG.js b/apps/encryption/l10n/bg_BG.js
index 0a5de0eab85..f099d9462b7 100644
--- a/apps/encryption/l10n/bg_BG.js
+++ b/apps/encryption/l10n/bg_BG.js
@@ -20,6 +20,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.",
+ "The share will expire on %s." : "Споделянето ще изтече на %s.",
+ "Cheers!" : "Поздрави!",
"Recovery key password" : "Парола за възстановяане на ключа",
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
"Change Password" : "Промени Паролата",
diff --git a/apps/encryption/l10n/bg_BG.json b/apps/encryption/l10n/bg_BG.json
index 12729417191..d4aa2e521c9 100644
--- a/apps/encryption/l10n/bg_BG.json
+++ b/apps/encryption/l10n/bg_BG.json
@@ -18,6 +18,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.",
+ "The share will expire on %s." : "Споделянето ще изтече на %s.",
+ "Cheers!" : "Поздрави!",
"Recovery key password" : "Парола за възстановяане на ключа",
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
"Change Password" : "Промени Паролата",
diff --git a/apps/encryption/l10n/bn_BD.js b/apps/encryption/l10n/bn_BD.js
index f91008e2408..2d20f4caa26 100644
--- a/apps/encryption/l10n/bn_BD.js
+++ b/apps/encryption/l10n/bn_BD.js
@@ -4,6 +4,7 @@ OC.L10N.register(
"Recovery key successfully enabled" : "পূনরুদ্ধার চাবি সার্থকভাবে কার্যকর করা হয়েছে",
"Recovery key successfully disabled" : "পূনরুদ্ধার চাবি সার্থকভাবে অকার্যকর করা হয়েছে",
"Password successfully changed." : "আপনার কূটশব্দটি সার্থকভাবে পরিবর্তন করা হয়েছে ",
+ "Cheers!" : "শুভেচ্ছা!",
"Change recovery key password:" : "পূণরূদ্ধার কি এর কুটশব্দ পরিবর্তন করুন:",
"Change Password" : "কূটশব্দ পরিবর্তন করুন",
"Enabled" : "কার্যকর",
diff --git a/apps/encryption/l10n/bn_BD.json b/apps/encryption/l10n/bn_BD.json
index 375bbd517a7..4c2c9c14b95 100644
--- a/apps/encryption/l10n/bn_BD.json
+++ b/apps/encryption/l10n/bn_BD.json
@@ -2,6 +2,7 @@
"Recovery key successfully enabled" : "পূনরুদ্ধার চাবি সার্থকভাবে কার্যকর করা হয়েছে",
"Recovery key successfully disabled" : "পূনরুদ্ধার চাবি সার্থকভাবে অকার্যকর করা হয়েছে",
"Password successfully changed." : "আপনার কূটশব্দটি সার্থকভাবে পরিবর্তন করা হয়েছে ",
+ "Cheers!" : "শুভেচ্ছা!",
"Change recovery key password:" : "পূণরূদ্ধার কি এর কুটশব্দ পরিবর্তন করুন:",
"Change Password" : "কূটশব্দ পরিবর্তন করুন",
"Enabled" : "কার্যকর",
diff --git a/apps/encryption/l10n/bs.js b/apps/encryption/l10n/bs.js
index bd38f94486e..41d7074d5a4 100644
--- a/apps/encryption/l10n/bs.js
+++ b/apps/encryption/l10n/bs.js
@@ -3,6 +3,8 @@ OC.L10N.register(
{
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
+ "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.",
+ "Cheers!" : "Cheers!",
"Enabled" : "Aktivirano",
"Disabled" : "Onemogućeno"
},
diff --git a/apps/encryption/l10n/bs.json b/apps/encryption/l10n/bs.json
index 4d858dbb966..0beb35f1558 100644
--- a/apps/encryption/l10n/bs.json
+++ b/apps/encryption/l10n/bs.json
@@ -1,6 +1,8 @@
{ "translations": {
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite",
+ "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.",
+ "Cheers!" : "Cheers!",
"Enabled" : "Aktivirano",
"Disabled" : "Onemogućeno"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/apps/encryption/l10n/ca.js b/apps/encryption/l10n/ca.js
index e160a23b722..9a318f2d4c2 100644
--- a/apps/encryption/l10n/ca.js
+++ b/apps/encryption/l10n/ca.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.",
+ "The share will expire on %s." : "La compartició venç el %s.",
+ "Cheers!" : "Salut!",
"Recovery key password" : "Clau de recuperació de la contrasenya",
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
"Change Password" : "Canvia la contrasenya",
diff --git a/apps/encryption/l10n/ca.json b/apps/encryption/l10n/ca.json
index 464c6e86342..b172da4a0df 100644
--- a/apps/encryption/l10n/ca.json
+++ b/apps/encryption/l10n/ca.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.",
+ "The share will expire on %s." : "La compartició venç el %s.",
+ "Cheers!" : "Salut!",
"Recovery key password" : "Clau de recuperació de la contrasenya",
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
"Change Password" : "Canvia la contrasenya",
diff --git a/apps/encryption/l10n/cs_CZ.js b/apps/encryption/l10n/cs_CZ.js
index 7b138c80086..661731c31d3 100644
--- a/apps/encryption/l10n/cs_CZ.js
+++ b/apps/encryption/l10n/cs_CZ.js
@@ -25,8 +25,11 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
"Encryption App is enabled and ready" : "Aplikace šifrování je již povolena",
+ "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Soubor nelze načíst, pravděpodobně se jedná o sdílený soubor. Požádejte prosím vlastníka souboru, aby vám jej znovu sdílel.",
+ "The share will expire on %s." : "Sdílení vyprší %s.",
+ "Cheers!" : "Ať slouží!",
"Enable recovery key" : "Povolit záchranný klíč",
"Disable recovery key" : "Vypnout záchranný klíč",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Záchranný klíč je dodatečný šifrovací klíč použitý pro\nšifrování souborů. S jeho pomocí lze obnovit soubory uživatele při zapomenutí hesla.",
diff --git a/apps/encryption/l10n/cs_CZ.json b/apps/encryption/l10n/cs_CZ.json
index ab0fd8b2e4f..1b530d137ed 100644
--- a/apps/encryption/l10n/cs_CZ.json
+++ b/apps/encryption/l10n/cs_CZ.json
@@ -23,8 +23,11 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste",
"Encryption App is enabled and ready" : "Aplikace šifrování je již povolena",
+ "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Soubor nelze načíst, pravděpodobně se jedná o sdílený soubor. Požádejte prosím vlastníka souboru, aby vám jej znovu sdílel.",
+ "The share will expire on %s." : "Sdílení vyprší %s.",
+ "Cheers!" : "Ať slouží!",
"Enable recovery key" : "Povolit záchranný klíč",
"Disable recovery key" : "Vypnout záchranný klíč",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Záchranný klíč je dodatečný šifrovací klíč použitý pro\nšifrování souborů. S jeho pomocí lze obnovit soubory uživatele při zapomenutí hesla.",
diff --git a/apps/encryption/l10n/da.js b/apps/encryption/l10n/da.js
index 5d97843f77c..b5ca0a29e0c 100644
--- a/apps/encryption/l10n/da.js
+++ b/apps/encryption/l10n/da.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.",
"Encryption App is enabled and ready" : "App til kryptering er slået til og er klar",
+ "one-time password for server-side-encryption" : "Engangs password for kryptering på serverdelen",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi filen er delt. Bed venligst filens ejer om at dele den med dig på ny.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig påny.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig på ny.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hejsa,\n\nadministrator aktiveret kryptering på serverdelen. '%s'.\n\nVenligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.\n\n",
+ "The share will expire on %s." : "Delingen vil udløbe om %s.",
+ "Cheers!" : "Hej!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hejsa,<br><br>administrator aktiveret kryptering på serverdelen. Dine file er blevet krypteret med kodeordet <strong>%s</strong>.<br><br>Venligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.<br><br>",
"Enable recovery key" : "Aktivér gendannelsesnøgle",
"Disable recovery key" : "Deaktivér gendannelsesnøgle",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Den tillader gendannelse af en brugers filer, hvis brugeren glemmer sin adgangskode.",
diff --git a/apps/encryption/l10n/da.json b/apps/encryption/l10n/da.json
index d90d030f45b..1ead926ca7c 100644
--- a/apps/encryption/l10n/da.json
+++ b/apps/encryption/l10n/da.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.",
"Encryption App is enabled and ready" : "App til kryptering er slået til og er klar",
+ "one-time password for server-side-encryption" : "Engangs password for kryptering på serverdelen",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi filen er delt. Bed venligst filens ejer om at dele den med dig på ny.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig påny.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig på ny.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hejsa,\n\nadministrator aktiveret kryptering på serverdelen. '%s'.\n\nVenligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.\n\n",
+ "The share will expire on %s." : "Delingen vil udløbe om %s.",
+ "Cheers!" : "Hej!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hejsa,<br><br>administrator aktiveret kryptering på serverdelen. Dine file er blevet krypteret med kodeordet <strong>%s</strong>.<br><br>Venligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.<br><br>",
"Enable recovery key" : "Aktivér gendannelsesnøgle",
"Disable recovery key" : "Deaktivér gendannelsesnøgle",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Den tillader gendannelse af en brugers filer, hvis brugeren glemmer sin adgangskode.",
diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js
index df1566adb28..18e74fb9ed1 100644
--- a/apps/encryption/l10n/de.js
+++ b/apps/encryption/l10n/de.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.",
+ "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
+ "Cheers!" : "Noch einen schönen Tag!",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein oder ihr Passwort vergessen hat.",
diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json
index 1fe237562f2..e15fe7e1cd1 100644
--- a/apps/encryption/l10n/de.json
+++ b/apps/encryption/l10n/de.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.",
+ "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
+ "Cheers!" : "Noch einen schönen Tag!",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein oder ihr Passwort vergessen hat.",
diff --git a/apps/encryption/l10n/de_DE.js b/apps/encryption/l10n/de_DE.js
index 5d5911c91eb..eb87c998259 100644
--- a/apps/encryption/l10n/de_DE.js
+++ b/apps/encryption/l10n/de_DE.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
+ "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
+ "Cheers!" : "Noch einen schönen Tag!",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein Passwort vergessen hat.",
diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json
index f67d5dfd4c5..8971978dd78 100644
--- a/apps/encryption/l10n/de_DE.json
+++ b/apps/encryption/l10n/de_DE.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.",
+ "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
+ "Cheers!" : "Noch einen schönen Tag!",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein Passwort vergessen hat.",
diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js
index 078b66d6784..d27098ddb04 100644
--- a/apps/encryption/l10n/el.js
+++ b/apps/encryption/l10n/el.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Encryption App is enabled and ready" : "Η Εφαρμογή Κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη.",
+ "one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Χαίρετε,\n\nο διαχειριστής ενεργοποίηση την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό '%s'.\n\nΠαρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα 'μονάδα βασικής κρυπτογράφησης ownCloud' στις προσωπικές σας ρυθμίσεις και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο 'παλιός κωδικός σύνδεσης' και τον τωρινό σας κωδικό σύνδεσης.\n",
+ "The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
+ "Cheers!" : "Χαιρετισμούς!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης ownCloud\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
"Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Το κλειδί ανάκτησης είναι ένα επιπλέον κλειδί κρυπτογράφησης που χρησιμοποιείται για να κρυπτογραφήσει αρχεία. Επιτρέπει την ανάκτηση των αρχείων ενός χρήστη αν αυτός/αυτή ξεχάσει τον κωδικό πρόσβασης.",
diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json
index c50f4cf938b..3ed5e39b7c0 100644
--- a/apps/encryption/l10n/el.json
+++ b/apps/encryption/l10n/el.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Encryption App is enabled and ready" : "Η Εφαρμογή Κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη.",
+ "one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Χαίρετε,\n\nο διαχειριστής ενεργοποίηση την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό '%s'.\n\nΠαρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα 'μονάδα βασικής κρυπτογράφησης ownCloud' στις προσωπικές σας ρυθμίσεις και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο 'παλιός κωδικός σύνδεσης' και τον τωρινό σας κωδικό σύνδεσης.\n",
+ "The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
+ "Cheers!" : "Χαιρετισμούς!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης ownCloud\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
"Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Το κλειδί ανάκτησης είναι ένα επιπλέον κλειδί κρυπτογράφησης που χρησιμοποιείται για να κρυπτογραφήσει αρχεία. Επιτρέπει την ανάκτηση των αρχείων ενός χρήστη αν αυτός/αυτή ξεχάσει τον κωδικό πρόσβασης.",
diff --git a/apps/encryption/l10n/en_GB.js b/apps/encryption/l10n/en_GB.js
index 13b103dee12..50835a334f2 100644
--- a/apps/encryption/l10n/en_GB.js
+++ b/apps/encryption/l10n/en_GB.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : "Encryption App is enabled and ready",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you.",
+ "The share will expire on %s." : "The share will expire on %s.",
+ "Cheers!" : "Cheers!",
"Enable recovery key" : "Enable recovery key",
"Disable recovery key" : "Disable recovery key",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password.",
diff --git a/apps/encryption/l10n/en_GB.json b/apps/encryption/l10n/en_GB.json
index e1d20385f6e..3c2e115290d 100644
--- a/apps/encryption/l10n/en_GB.json
+++ b/apps/encryption/l10n/en_GB.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : "Encryption App is enabled and ready",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you.",
+ "The share will expire on %s." : "The share will expire on %s.",
+ "Cheers!" : "Cheers!",
"Enable recovery key" : "Enable recovery key",
"Disable recovery key" : "Disable recovery key",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password.",
diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js
index cd800250be2..cadedbcc0d4 100644
--- a/apps/encryption/l10n/es.js
+++ b/apps/encryption/l10n/es.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.",
"Encryption App is enabled and ready" : "Cifrado App está habilitada y lista",
+ "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente sea un archivo compartido. Consulte con el propietario del mismo y que lo vuelva a compartir con usted.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: '%s'.\n\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.\n\n",
+ "The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola,\n<br><br>\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: <strong>%s</strong>\n<br><br>\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.<br><br>",
"Enable recovery key" : "Activa la clave de recuperación",
"Disable recovery key" : "Desactiva la clave de recuperación",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.",
diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json
index 69c14e008c2..9bdad94cb6d 100644
--- a/apps/encryption/l10n/es.json
+++ b/apps/encryption/l10n/es.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.",
"Encryption App is enabled and ready" : "Cifrado App está habilitada y lista",
+ "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente sea un archivo compartido. Consulte con el propietario del mismo y que lo vuelva a compartir con usted.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: '%s'.\n\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.\n\n",
+ "The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola,\n<br><br>\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: <strong>%s</strong>\n<br><br>\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.<br><br>",
"Enable recovery key" : "Activa la clave de recuperación",
"Disable recovery key" : "Desactiva la clave de recuperación",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.",
diff --git a/apps/encryption/l10n/es_AR.js b/apps/encryption/l10n/es_AR.js
index e2fed7c3d38..bff5b7c593e 100644
--- a/apps/encryption/l10n/es_AR.js
+++ b/apps/encryption/l10n/es_AR.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.",
+ "The share will expire on %s." : "El compartir expirará en %s.",
+ "Cheers!" : "¡Saludos!",
"Recovery key password" : "Contraseña de recuperación de clave",
"Change recovery key password:" : "Cambiar contraseña para recuperar la clave:",
"Change Password" : "Cambiar contraseña",
diff --git a/apps/encryption/l10n/es_AR.json b/apps/encryption/l10n/es_AR.json
index b938c1d6e38..0cdcd9cd121 100644
--- a/apps/encryption/l10n/es_AR.json
+++ b/apps/encryption/l10n/es_AR.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.",
+ "The share will expire on %s." : "El compartir expirará en %s.",
+ "Cheers!" : "¡Saludos!",
"Recovery key password" : "Contraseña de recuperación de clave",
"Change recovery key password:" : "Cambiar contraseña para recuperar la clave:",
"Change Password" : "Cambiar contraseña",
diff --git a/apps/encryption/l10n/es_MX.js b/apps/encryption/l10n/es_MX.js
index 12836faa54d..ad94a24e114 100644
--- a/apps/encryption/l10n/es_MX.js
+++ b/apps/encryption/l10n/es_MX.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
+ "The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
"Recovery key password" : "Contraseña de clave de recuperación",
"Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación",
"Change Password" : "Cambiar contraseña",
diff --git a/apps/encryption/l10n/es_MX.json b/apps/encryption/l10n/es_MX.json
index f8332799f15..5a64c7c8777 100644
--- a/apps/encryption/l10n/es_MX.json
+++ b/apps/encryption/l10n/es_MX.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
+ "The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
"Recovery key password" : "Contraseña de clave de recuperación",
"Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación",
"Change Password" : "Cambiar contraseña",
diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js
index 0c33015cdf1..501772c2808 100644
--- a/apps/encryption/l10n/et_EE.js
+++ b/apps/encryption/l10n/et_EE.js
@@ -14,6 +14,8 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli",
"Password successfully changed." : "Parool edukalt vahetatud.",
"Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.",
+ "Recovery Key disabled" : "Taastevõti on välja lülitatud",
+ "Recovery Key enabled" : "Taastevõti on sisse lülitatud",
"Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.",
"The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.",
"The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.",
@@ -21,8 +23,16 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.",
+ "The share will expire on %s." : "Jagamine aegub %s.",
+ "Cheers!" : "Terekest!",
+ "Enable recovery key" : "Luba taastevõtme kasutamine",
+ "Disable recovery key" : "Keela taastevõtme kasutamine",
"Recovery key password" : "Taastevõtme parool",
+ "Repeat recovery key password" : "Korda taastevõtme parooli",
"Change recovery key password:" : "Muuda taastevõtme parooli:",
+ "Old recovery key password" : "Vana taastevõtme parool",
+ "New recovery key password" : "Uus taastevõtme parool",
+ "Repeat new recovery key password" : "Korda uut taastevõtme parooli",
"Change Password" : "Muuda parooli",
"Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.",
"Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.",
diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json
index 1f8f74dc7fe..14d4c59f9fc 100644
--- a/apps/encryption/l10n/et_EE.json
+++ b/apps/encryption/l10n/et_EE.json
@@ -12,6 +12,8 @@
"Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli",
"Password successfully changed." : "Parool edukalt vahetatud.",
"Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.",
+ "Recovery Key disabled" : "Taastevõti on välja lülitatud",
+ "Recovery Key enabled" : "Taastevõti on sisse lülitatud",
"Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.",
"The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.",
"The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.",
@@ -19,8 +21,16 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.",
+ "The share will expire on %s." : "Jagamine aegub %s.",
+ "Cheers!" : "Terekest!",
+ "Enable recovery key" : "Luba taastevõtme kasutamine",
+ "Disable recovery key" : "Keela taastevõtme kasutamine",
"Recovery key password" : "Taastevõtme parool",
+ "Repeat recovery key password" : "Korda taastevõtme parooli",
"Change recovery key password:" : "Muuda taastevõtme parooli:",
+ "Old recovery key password" : "Vana taastevõtme parool",
+ "New recovery key password" : "Uus taastevõtme parool",
+ "Repeat new recovery key password" : "Korda uut taastevõtme parooli",
"Change Password" : "Muuda parooli",
"Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.",
"Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.",
diff --git a/apps/encryption/l10n/eu.js b/apps/encryption/l10n/eu.js
index 1e0cffe4662..1c8bdf4fa04 100644
--- a/apps/encryption/l10n/eu.js
+++ b/apps/encryption/l10n/eu.js
@@ -20,6 +20,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
+ "The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
+ "Cheers!" : "Ongi izan!",
"Recovery key password" : "Berreskuratze gako pasahitza",
"Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:",
"Change Password" : "Aldatu Pasahitza",
diff --git a/apps/encryption/l10n/eu.json b/apps/encryption/l10n/eu.json
index b896698f6d6..0c07ebd477f 100644
--- a/apps/encryption/l10n/eu.json
+++ b/apps/encryption/l10n/eu.json
@@ -18,6 +18,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.",
+ "The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.",
+ "Cheers!" : "Ongi izan!",
"Recovery key password" : "Berreskuratze gako pasahitza",
"Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:",
"Change Password" : "Aldatu Pasahitza",
diff --git a/apps/encryption/l10n/fa.js b/apps/encryption/l10n/fa.js
index 493b3992a62..706491f45a4 100644
--- a/apps/encryption/l10n/fa.js
+++ b/apps/encryption/l10n/fa.js
@@ -8,6 +8,7 @@ OC.L10N.register(
"Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.",
"Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
+ "Cheers!" : "سلامتی!",
"Recovery key password" : "رمزعبور کلید بازیابی",
"Change recovery key password:" : "تغییر رمزعبور کلید بازیابی:",
"Change Password" : "تغییر رمزعبور",
diff --git a/apps/encryption/l10n/fa.json b/apps/encryption/l10n/fa.json
index ccb7949e7e5..1071fd6e110 100644
--- a/apps/encryption/l10n/fa.json
+++ b/apps/encryption/l10n/fa.json
@@ -6,6 +6,7 @@
"Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.",
"Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.",
"Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.",
+ "Cheers!" : "سلامتی!",
"Recovery key password" : "رمزعبور کلید بازیابی",
"Change recovery key password:" : "تغییر رمزعبور کلید بازیابی:",
"Change Password" : "تغییر رمزعبور",
diff --git a/apps/encryption/l10n/fi_FI.js b/apps/encryption/l10n/fi_FI.js
index a3ea0bf761e..cac43eae16f 100644
--- a/apps/encryption/l10n/fi_FI.js
+++ b/apps/encryption/l10n/fi_FI.js
@@ -25,8 +25,11 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.",
"Encryption App is enabled and ready" : "Salaussovellus on käytössä ja valmis",
+ "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tämän tiedoston salauksen purkaminen ei onnistu. Kyseessä on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto kanssasi uudelleen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.",
+ "The share will expire on %s." : "Jakaminen päättyy %s.",
+ "Cheers!" : "Kiitos!",
"Enable recovery key" : "Ota palautusavain käyttöön",
"Disable recovery key" : "Poista palautusavain käytöstä",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Palautusavain on ylimääräinen salausavain, jota käytetään tiedostojen salaamiseen. Sen avulla on mahdollista palauttaa käyttäjien tiedostot, vaikka käyttäjä unohtaisi oman salasanansa.",
diff --git a/apps/encryption/l10n/fi_FI.json b/apps/encryption/l10n/fi_FI.json
index 1c0faa5921a..7f5bec24f8b 100644
--- a/apps/encryption/l10n/fi_FI.json
+++ b/apps/encryption/l10n/fi_FI.json
@@ -23,8 +23,11 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.",
"Encryption App is enabled and ready" : "Salaussovellus on käytössä ja valmis",
+ "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tämän tiedoston salauksen purkaminen ei onnistu. Kyseessä on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto kanssasi uudelleen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.",
+ "The share will expire on %s." : "Jakaminen päättyy %s.",
+ "Cheers!" : "Kiitos!",
"Enable recovery key" : "Ota palautusavain käyttöön",
"Disable recovery key" : "Poista palautusavain käytöstä",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Palautusavain on ylimääräinen salausavain, jota käytetään tiedostojen salaamiseen. Sen avulla on mahdollista palauttaa käyttäjien tiedostot, vaikka käyttäjä unohtaisi oman salasanansa.",
diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js
index 6eaf7b125a5..0de35f8ec1c 100644
--- a/apps/encryption/l10n/fr.js
+++ b/apps/encryption/l10n/fr.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
"Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête",
+ "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de lire ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le repartager avec vous. ",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe '%s'.\n\nVeuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel.\n",
+ "The share will expire on %s." : "Le partage expirera le %s.",
+ "Cheers!" : "À bientôt !",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour,<br><br>L'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe <strong>%s</strong>. <br><br>Veuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel. <br><br>",
"Enable recovery key" : "Activer la clé de récupération",
"Disable recovery key" : "Désactiver la clé de récupération",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clé de récupération est une clé supplémentaire utilisée pour chiffrer les fichiers. Elle permet de récupérer les fichiers des utilisateurs s'ils oublient leur mot de passe.",
diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json
index 8e319e87fde..3fa598a72ce 100644
--- a/apps/encryption/l10n/fr.json
+++ b/apps/encryption/l10n/fr.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
"Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête",
+ "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de lire ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le repartager avec vous. ",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe '%s'.\n\nVeuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel.\n",
+ "The share will expire on %s." : "Le partage expirera le %s.",
+ "Cheers!" : "À bientôt !",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour,<br><br>L'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe <strong>%s</strong>. <br><br>Veuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel. <br><br>",
"Enable recovery key" : "Activer la clé de récupération",
"Disable recovery key" : "Désactiver la clé de récupération",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clé de récupération est une clé supplémentaire utilisée pour chiffrer les fichiers. Elle permet de récupérer les fichiers des utilisateurs s'ils oublient leur mot de passe.",
diff --git a/apps/encryption/l10n/gl.js b/apps/encryption/l10n/gl.js
index b1c38910786..d6a5d03e938 100644
--- a/apps/encryption/l10n/gl.js
+++ b/apps/encryption/l10n/gl.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : " A aplicación de cifrado está activada e lista",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
+ "The share will expire on %s." : "Esta compartición caduca o %s.",
+ "Cheers!" : "Saúdos!",
"Enable recovery key" : "Activar a chave de recuperación",
"Disable recovery key" : "Desactivar a chave de recuperación",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperación é unha chave de cifrado adicional que se utiliza para cifrar ficheiros. Permite a recuperación de ficheiros dun usuario se o usuario esquece o seu contrasinal.",
diff --git a/apps/encryption/l10n/gl.json b/apps/encryption/l10n/gl.json
index 4fa779248fe..78c781acaa9 100644
--- a/apps/encryption/l10n/gl.json
+++ b/apps/encryption/l10n/gl.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : " A aplicación de cifrado está activada e lista",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.",
+ "The share will expire on %s." : "Esta compartición caduca o %s.",
+ "Cheers!" : "Saúdos!",
"Enable recovery key" : "Activar a chave de recuperación",
"Disable recovery key" : "Desactivar a chave de recuperación",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperación é unha chave de cifrado adicional que se utiliza para cifrar ficheiros. Permite a recuperación de ficheiros dun usuario se o usuario esquece o seu contrasinal.",
diff --git a/apps/encryption/l10n/hr.js b/apps/encryption/l10n/hr.js
index f6cf942edfb..2965961be00 100644
--- a/apps/encryption/l10n/hr.js
+++ b/apps/encryption/l10n/hr.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je aktivirana ali vaši ključevi nisu inicijalizirani, molimo odjavite se iponovno prijavite.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.",
+ "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.",
+ "Cheers!" : "Cheers!",
"Recovery key password" : "Lozinka ključa za oporavak",
"Change recovery key password:" : "Promijenite lozinku ključa za oporavak",
"Change Password" : "Promijenite lozinku",
diff --git a/apps/encryption/l10n/hr.json b/apps/encryption/l10n/hr.json
index acfd057ec62..f5260508404 100644
--- a/apps/encryption/l10n/hr.json
+++ b/apps/encryption/l10n/hr.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je aktivirana ali vaši ključevi nisu inicijalizirani, molimo odjavite se iponovno prijavite.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.",
+ "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.",
+ "Cheers!" : "Cheers!",
"Recovery key password" : "Lozinka ključa za oporavak",
"Change recovery key password:" : "Promijenite lozinku ključa za oporavak",
"Change Password" : "Promijenite lozinku",
diff --git a/apps/encryption/l10n/hu_HU.js b/apps/encryption/l10n/hu_HU.js
index 15611a77d05..d13459e4902 100644
--- a/apps/encryption/l10n/hu_HU.js
+++ b/apps/encryption/l10n/hu_HU.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "The share will expire on %s." : "A megosztás lejár ekkor %s",
+ "Cheers!" : "Üdv.",
"Recovery key password" : "A helyreállítási kulcs jelszava",
"Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:",
"Change Password" : "Jelszó megváltoztatása",
diff --git a/apps/encryption/l10n/hu_HU.json b/apps/encryption/l10n/hu_HU.json
index 3214000e1a1..2e77ff30182 100644
--- a/apps/encryption/l10n/hu_HU.json
+++ b/apps/encryption/l10n/hu_HU.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "The share will expire on %s." : "A megosztás lejár ekkor %s",
+ "Cheers!" : "Üdv.",
"Recovery key password" : "A helyreállítási kulcs jelszava",
"Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:",
"Change Password" : "Jelszó megváltoztatása",
diff --git a/apps/encryption/l10n/ia.js b/apps/encryption/l10n/ia.js
new file mode 100644
index 00000000000..27932deb15e
--- /dev/null
+++ b/apps/encryption/l10n/ia.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "encryption",
+ {
+ "The share will expire on %s." : "Le compartir expirara le %s.",
+ "Cheers!" : "Acclamationes!"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/ia.json b/apps/encryption/l10n/ia.json
new file mode 100644
index 00000000000..a935ab07c57
--- /dev/null
+++ b/apps/encryption/l10n/ia.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "The share will expire on %s." : "Le compartir expirara le %s.",
+ "Cheers!" : "Acclamationes!"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js
index e1de33fe156..1247b35bad6 100644
--- a/apps/encryption/l10n/id.js
+++ b/apps/encryption/l10n/id.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
"Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap",
+ "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hai,\n\nadmin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi '%s'.\n\nSilakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi-masuk saat ini.\n\n",
+ "The share will expire on %s." : "Pembagian akan berakhir pada %s.",
+ "Cheers!" : "Horee!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
"Enable recovery key" : "Aktifkan kunci pemulihan",
"Disable recovery key" : "Nonaktifkan kunci pemulihan",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kunci pemulihan adalah kunci enkripsi tambahan yang digunakan untuk mengenkripsi berkas. Kunci pemulihan memungkinkan untuk memulihkan berkas-berkas pengguna ketika pengguna tersebut melupakan sandi mereka.",
diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json
index 66d7f6c8991..3771f7e935f 100644
--- a/apps/encryption/l10n/id.json
+++ b/apps/encryption/l10n/id.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi",
"Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap",
+ "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hai,\n\nadmin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi '%s'.\n\nSilakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi-masuk saat ini.\n\n",
+ "The share will expire on %s." : "Pembagian akan berakhir pada %s.",
+ "Cheers!" : "Horee!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>",
"Enable recovery key" : "Aktifkan kunci pemulihan",
"Disable recovery key" : "Nonaktifkan kunci pemulihan",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kunci pemulihan adalah kunci enkripsi tambahan yang digunakan untuk mengenkripsi berkas. Kunci pemulihan memungkinkan untuk memulihkan berkas-berkas pengguna ketika pengguna tersebut melupakan sandi mereka.",
diff --git a/apps/encryption/l10n/is.js b/apps/encryption/l10n/is.js
new file mode 100644
index 00000000000..afdf2b02f4c
--- /dev/null
+++ b/apps/encryption/l10n/is.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "encryption",
+ {
+ "The share will expire on %s." : "Gildistími deilingar rennur út %s.",
+ "Cheers!" : "Skál!"
+},
+"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/encryption/l10n/is.json b/apps/encryption/l10n/is.json
new file mode 100644
index 00000000000..6c56e00be82
--- /dev/null
+++ b/apps/encryption/l10n/is.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "The share will expire on %s." : "Gildistími deilingar rennur út %s.",
+ "Cheers!" : "Skál!"
+},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/it.js b/apps/encryption/l10n/it.js
index 9980396f6e9..c0d42e17f74 100644
--- a/apps/encryption/l10n/it.js
+++ b/apps/encryption/l10n/it.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso",
"Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta",
+ "one-time password for server-side-encryption" : "password monouso per la cifratura lato server",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile leggere questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Ciao,\n\nl'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati\ncifrati utilizzando la password '%s'.\n\nAccedi all'interfaccia web, vai alla sezione 'modulo di cifratura base di ownCloud' dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo 'vecchia password di accesso' e la tua nuova password.\n\n",
+ "The share will expire on %s." : "La condivisione scadrà il %s.",
+ "Cheers!" : "Saluti!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Ciao,<br><br>l'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati cifrati utilizzando la password <strong>%s</strong>.<br><br>Accedi all'interfaccia web, vai alla sezione \"modulo di cifratura base di ownCloud\" dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo \"vecchia password di accesso\" e la tua nuova password.",
"Enable recovery key" : "Abilita chiave di ripristino",
"Disable recovery key" : "Disabilita chiave di ripristino",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La chiave di ripristino è una chiave di cifratura aggiuntiva utilizzata per cifrare i file. Consente di ripristinare i file di un utente se l'utente dimentica la propria password.",
@@ -37,7 +42,7 @@ OC.L10N.register(
"New recovery key password" : "Nuova password della chiave di ripristino",
"Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino",
"Change Password" : "Modifica password",
- "ownCloud basic encryption module" : "Modulo di cifratura di base di ownCloud",
+ "ownCloud basic encryption module" : "Modulo di cifratura base di ownCloud",
"Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.",
"Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Se non ricordi la vecchia password puoi chiedere al tuo amministratore di recuperare i file.",
diff --git a/apps/encryption/l10n/it.json b/apps/encryption/l10n/it.json
index 69b31b7d3da..ee3f487c54f 100644
--- a/apps/encryption/l10n/it.json
+++ b/apps/encryption/l10n/it.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso",
"Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta",
+ "one-time password for server-side-encryption" : "password monouso per la cifratura lato server",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile leggere questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Ciao,\n\nl'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati\ncifrati utilizzando la password '%s'.\n\nAccedi all'interfaccia web, vai alla sezione 'modulo di cifratura base di ownCloud' dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo 'vecchia password di accesso' e la tua nuova password.\n\n",
+ "The share will expire on %s." : "La condivisione scadrà il %s.",
+ "Cheers!" : "Saluti!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Ciao,<br><br>l'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati cifrati utilizzando la password <strong>%s</strong>.<br><br>Accedi all'interfaccia web, vai alla sezione \"modulo di cifratura base di ownCloud\" dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo \"vecchia password di accesso\" e la tua nuova password.",
"Enable recovery key" : "Abilita chiave di ripristino",
"Disable recovery key" : "Disabilita chiave di ripristino",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La chiave di ripristino è una chiave di cifratura aggiuntiva utilizzata per cifrare i file. Consente di ripristinare i file di un utente se l'utente dimentica la propria password.",
@@ -35,7 +40,7 @@
"New recovery key password" : "Nuova password della chiave di ripristino",
"Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino",
"Change Password" : "Modifica password",
- "ownCloud basic encryption module" : "Modulo di cifratura di base di ownCloud",
+ "ownCloud basic encryption module" : "Modulo di cifratura base di ownCloud",
"Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.",
"Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:",
" If you don't remember your old password you can ask your administrator to recover your files." : "Se non ricordi la vecchia password puoi chiedere al tuo amministratore di recuperare i file.",
diff --git a/apps/encryption/l10n/ja.js b/apps/encryption/l10n/ja.js
index f76b215fe1f..5c4f470def8 100644
--- a/apps/encryption/l10n/ja.js
+++ b/apps/encryption/l10n/ja.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを読み取ることができません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
+ "The share will expire on %s." : "共有は %s で有効期限が切れます。",
+ "Cheers!" : "それでは!",
"Enable recovery key" : "復旧キーを有効にする",
"Disable recovery key" : "復旧キーを無効にする",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "復旧キーは、ファイルの暗号化に使う特別な暗号化キーです。ユーザがパスワードを忘れてしまった場合には、リカバリキーを使ってユーザのファイルを復元することができます。",
diff --git a/apps/encryption/l10n/ja.json b/apps/encryption/l10n/ja.json
index 58b32ebdd2e..9e04dd87f83 100644
--- a/apps/encryption/l10n/ja.json
+++ b/apps/encryption/l10n/ja.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを読み取ることができません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
+ "The share will expire on %s." : "共有は %s で有効期限が切れます。",
+ "Cheers!" : "それでは!",
"Enable recovery key" : "復旧キーを有効にする",
"Disable recovery key" : "復旧キーを無効にする",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "復旧キーは、ファイルの暗号化に使う特別な暗号化キーです。ユーザがパスワードを忘れてしまった場合には、リカバリキーを使ってユーザのファイルを復元することができます。",
diff --git a/apps/encryption/l10n/kn.js b/apps/encryption/l10n/kn.js
index aca1cf249b1..3f0108db173 100644
--- a/apps/encryption/l10n/kn.js
+++ b/apps/encryption/l10n/kn.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"encryption",
{
+ "Cheers!" : "ಆನಂದಿಸಿ !",
"Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ",
"Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
},
diff --git a/apps/encryption/l10n/kn.json b/apps/encryption/l10n/kn.json
index 8387e3890da..3b78ba1f13e 100644
--- a/apps/encryption/l10n/kn.json
+++ b/apps/encryption/l10n/kn.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Cheers!" : "ಆನಂದಿಸಿ !",
"Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ",
"Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/encryption/l10n/ko.js b/apps/encryption/l10n/ko.js
index 891265e8c91..8bf099b6b36 100644
--- a/apps/encryption/l10n/ko.js
+++ b/apps/encryption/l10n/ko.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
"Encryption App is enabled and ready" : "암호화 앱이 활성화되었고 준비됨",
+ "one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 읽을 수 없습니다. 공유된 파일이라면 파일 소유자에게 연락하여 다시 공유해 달라고 요청하십시오.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "안녕하세요,\n\n시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 '%s'으(로) 암호화되었습니다.\n\n웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.\n\n",
+ "The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.",
+ "Cheers!" : "감사합니다!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "안녕하세요,<br><br>시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 <strong>%s</strong>으(로) 암호화되었습니다.<br><br>웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.<br><br>",
"Enable recovery key" : "복구 키 활성화",
"Disable recovery key" : "복구 키 비활성화",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "복구 키는 파일을 암호화하는 추가 키입니다. 사용자가 암호를 잊었을 때 복구할 수 있도록 해 줍니다.",
diff --git a/apps/encryption/l10n/ko.json b/apps/encryption/l10n/ko.json
index 0231412e29a..a6843bdda45 100644
--- a/apps/encryption/l10n/ko.json
+++ b/apps/encryption/l10n/ko.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오",
"Encryption App is enabled and ready" : "암호화 앱이 활성화되었고 준비됨",
+ "one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 읽을 수 없습니다. 공유된 파일이라면 파일 소유자에게 연락하여 다시 공유해 달라고 요청하십시오.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "안녕하세요,\n\n시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 '%s'으(로) 암호화되었습니다.\n\n웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.\n\n",
+ "The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.",
+ "Cheers!" : "감사합니다!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "안녕하세요,<br><br>시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 <strong>%s</strong>으(로) 암호화되었습니다.<br><br>웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.<br><br>",
"Enable recovery key" : "복구 키 활성화",
"Disable recovery key" : "복구 키 비활성화",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "복구 키는 파일을 암호화하는 추가 키입니다. 사용자가 암호를 잊었을 때 복구할 수 있도록 해 줍니다.",
diff --git a/apps/encryption/l10n/lb.js b/apps/encryption/l10n/lb.js
index 0e57555bb19..478426b6a1c 100644
--- a/apps/encryption/l10n/lb.js
+++ b/apps/encryption/l10n/lb.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"encryption",
{
+ "Cheers!" : "Prost!",
"Change Password" : "Passwuert änneren",
"Enabled" : "Aktivéiert",
"Disabled" : "Deaktivéiert"
diff --git a/apps/encryption/l10n/lb.json b/apps/encryption/l10n/lb.json
index 08afbc43c83..53692b969e1 100644
--- a/apps/encryption/l10n/lb.json
+++ b/apps/encryption/l10n/lb.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "Cheers!" : "Prost!",
"Change Password" : "Passwuert änneren",
"Enabled" : "Aktivéiert",
"Disabled" : "Deaktivéiert"
diff --git a/apps/encryption/l10n/lt_LT.js b/apps/encryption/l10n/lt_LT.js
index 03a825d1e3a..627be83860b 100644
--- a/apps/encryption/l10n/lt_LT.js
+++ b/apps/encryption/l10n/lt_LT.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
+ "The share will expire on %s." : "Bendrinimo laikas baigsis %s.",
+ "Cheers!" : "Sveikinimai!",
"Recovery key password" : "Atkūrimo rakto slaptažodis",
"Change recovery key password:" : "Pakeisti atkūrimo rakto slaptažodį:",
"Change Password" : "Pakeisti slaptažodį",
diff --git a/apps/encryption/l10n/lt_LT.json b/apps/encryption/l10n/lt_LT.json
index fcfee0f3e5e..7a38dca5a97 100644
--- a/apps/encryption/l10n/lt_LT.json
+++ b/apps/encryption/l10n/lt_LT.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.",
+ "The share will expire on %s." : "Bendrinimo laikas baigsis %s.",
+ "Cheers!" : "Sveikinimai!",
"Recovery key password" : "Atkūrimo rakto slaptažodis",
"Change recovery key password:" : "Pakeisti atkūrimo rakto slaptažodį:",
"Change Password" : "Pakeisti slaptažodį",
diff --git a/apps/encryption/l10n/mk.js b/apps/encryption/l10n/mk.js
index f1abdd2f518..c2f503a4495 100644
--- a/apps/encryption/l10n/mk.js
+++ b/apps/encryption/l10n/mk.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Password successfully changed." : "Лозинката е успешно променета.",
"Could not change the password. Maybe the old password was not correct." : "Лозинката не можеше да се промени. Можеби старата лозинка не беше исправна.",
+ "Cheers!" : "Поздрав!",
"Change Password" : "Смени лозинка",
"Old log-in password" : "Старата лозинка за најавување",
"Current log-in password" : "Тековната лозинка за најавување",
diff --git a/apps/encryption/l10n/mk.json b/apps/encryption/l10n/mk.json
index 112d818347c..fb521ea75fb 100644
--- a/apps/encryption/l10n/mk.json
+++ b/apps/encryption/l10n/mk.json
@@ -1,6 +1,7 @@
{ "translations": {
"Password successfully changed." : "Лозинката е успешно променета.",
"Could not change the password. Maybe the old password was not correct." : "Лозинката не можеше да се промени. Можеби старата лозинка не беше исправна.",
+ "Cheers!" : "Поздрав!",
"Change Password" : "Смени лозинка",
"Old log-in password" : "Старата лозинка за најавување",
"Current log-in password" : "Тековната лозинка за најавување",
diff --git a/apps/encryption/l10n/nb_NO.js b/apps/encryption/l10n/nb_NO.js
index 295621f9caa..d5ce6618689 100644
--- a/apps/encryption/l10n/nb_NO.js
+++ b/apps/encryption/l10n/nb_NO.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
"Encryption App is enabled and ready" : "Krypterings-appen er aktivert og klar",
+ "one-time password for server-side-encryption" : "engangspassord for serverkryptering",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'ownCloud grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n",
+ "The share will expire on %s." : "Delingen vil opphøre %s.",
+ "Cheers!" : "Ha det!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hei,<br><br>Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Vennligst logg inn på web-grensesnittet, gå til seksjonen \"ownCloud grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
"Enable recovery key" : "Aktiver gjenopprettingsnøkkel",
"Disable recovery key" : "Deaktiver gjenopprettingsnøkkel",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gjenopprettingsnøkkelen er en ekstra krypteringsnøkkel som brukes til å kryptere filer. Den tillater gjenoppretting av en brukers filer i tilfelle brukeren glemmer passordet sitt.",
diff --git a/apps/encryption/l10n/nb_NO.json b/apps/encryption/l10n/nb_NO.json
index bb95014e967..8b3e8c11747 100644
--- a/apps/encryption/l10n/nb_NO.json
+++ b/apps/encryption/l10n/nb_NO.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.",
"Encryption App is enabled and ready" : "Krypterings-appen er aktivert og klar",
+ "one-time password for server-side-encryption" : "engangspassord for serverkryptering",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'ownCloud grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n",
+ "The share will expire on %s." : "Delingen vil opphøre %s.",
+ "Cheers!" : "Ha det!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hei,<br><br>Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Vennligst logg inn på web-grensesnittet, gå til seksjonen \"ownCloud grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
"Enable recovery key" : "Aktiver gjenopprettingsnøkkel",
"Disable recovery key" : "Deaktiver gjenopprettingsnøkkel",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gjenopprettingsnøkkelen er en ekstra krypteringsnøkkel som brukes til å kryptere filer. Den tillater gjenoppretting av en brukers filer i tilfelle brukeren glemmer passordet sitt.",
diff --git a/apps/encryption/l10n/nl.js b/apps/encryption/l10n/nl.js
index 4a3115d46a7..0655b6d29bd 100644
--- a/apps/encryption/l10n/nl.js
+++ b/apps/encryption/l10n/nl.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.",
"Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed",
+ "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet lezen, waarschijnlijk is het een gedeeld bestand. Vraag de eigenaar om het bestand opnieuw met u te delen.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hallo daar,\n\nde beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord '%s'.\n\nLogin op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het 'oude inlog wachtwoord' veld in te vullen alsmede in uw huidige inlogwachtwoord.\n",
+ "The share will expire on %s." : "De share vervalt op %s.",
+ "Cheers!" : "Proficiat!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hallo daar,<br><br>de beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord <strong>%s</strong>.<br><br>Login op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het \"oude inlog wachtwoord\" veld in te vullen alsmede in uw huidige inlogwachtwoord.<br><br>",
"Enable recovery key" : "Activeer herstelsleutel",
"Disable recovery key" : "Deactiveer herstelsleutel",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "De herstelsleutel is een extra cryptografische sleutel die wordt gebruikt om bestanden te versleutelen. Die maakt het mogelijk bestanden te herstellen als de gebruiker zijn of haar wachtwoord vergeet.",
diff --git a/apps/encryption/l10n/nl.json b/apps/encryption/l10n/nl.json
index 1689a418f98..00f6e67822e 100644
--- a/apps/encryption/l10n/nl.json
+++ b/apps/encryption/l10n/nl.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.",
"Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed",
+ "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet lezen, waarschijnlijk is het een gedeeld bestand. Vraag de eigenaar om het bestand opnieuw met u te delen.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hallo daar,\n\nde beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord '%s'.\n\nLogin op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het 'oude inlog wachtwoord' veld in te vullen alsmede in uw huidige inlogwachtwoord.\n",
+ "The share will expire on %s." : "De share vervalt op %s.",
+ "Cheers!" : "Proficiat!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hallo daar,<br><br>de beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord <strong>%s</strong>.<br><br>Login op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het \"oude inlog wachtwoord\" veld in te vullen alsmede in uw huidige inlogwachtwoord.<br><br>",
"Enable recovery key" : "Activeer herstelsleutel",
"Disable recovery key" : "Deactiveer herstelsleutel",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "De herstelsleutel is een extra cryptografische sleutel die wordt gebruikt om bestanden te versleutelen. Die maakt het mogelijk bestanden te herstellen als de gebruiker zijn of haar wachtwoord vergeet.",
diff --git a/apps/encryption/l10n/oc.js b/apps/encryption/l10n/oc.js
index 34d8782b2f8..8715fd378b8 100644
--- a/apps/encryption/l10n/oc.js
+++ b/apps/encryption/l10n/oc.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : "L'aplicacion de chiframent es activada e prèsta",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de deschifrar aqueste fichièr : s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo partejar tornamai amb vos.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de legir aqueste fichièr, s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo repartejar amb vos. ",
+ "The share will expire on %s." : "Lo partiment expirarà lo %s.",
+ "Cheers!" : "A lèu !",
"Enable recovery key" : "Activar la clau de recuperacion",
"Disable recovery key" : "Desactivar la clau de recuperacion",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clau de recuperacion es una clau suplementària utilizada per chifrar los fichièrs. Permet de recuperar los fichièrs dels utilizaires se doblidan lor senhal.",
diff --git a/apps/encryption/l10n/oc.json b/apps/encryption/l10n/oc.json
index e3afad2db1b..ec4406dd77e 100644
--- a/apps/encryption/l10n/oc.json
+++ b/apps/encryption/l10n/oc.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : "L'aplicacion de chiframent es activada e prèsta",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de deschifrar aqueste fichièr : s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo partejar tornamai amb vos.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de legir aqueste fichièr, s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo repartejar amb vos. ",
+ "The share will expire on %s." : "Lo partiment expirarà lo %s.",
+ "Cheers!" : "A lèu !",
"Enable recovery key" : "Activar la clau de recuperacion",
"Disable recovery key" : "Desactivar la clau de recuperacion",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clau de recuperacion es una clau suplementària utilizada per chifrar los fichièrs. Permet de recuperar los fichièrs dels utilizaires se doblidan lor senhal.",
diff --git a/apps/encryption/l10n/pl.js b/apps/encryption/l10n/pl.js
index 016671e88b7..fda41f57147 100644
--- a/apps/encryption/l10n/pl.js
+++ b/apps/encryption/l10n/pl.js
@@ -20,6 +20,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.",
+ "The share will expire on %s." : "Ten zasób wygaśnie %s",
+ "Cheers!" : "Pozdrawiam!",
"Recovery key password" : "Hasło klucza odzyskiwania",
"Change recovery key password:" : "Zmień hasło klucza odzyskiwania",
"Change Password" : "Zmień hasło",
diff --git a/apps/encryption/l10n/pl.json b/apps/encryption/l10n/pl.json
index 3b6e4a18e49..7de8c5ad595 100644
--- a/apps/encryption/l10n/pl.json
+++ b/apps/encryption/l10n/pl.json
@@ -18,6 +18,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.",
+ "The share will expire on %s." : "Ten zasób wygaśnie %s",
+ "Cheers!" : "Pozdrawiam!",
"Recovery key password" : "Hasło klucza odzyskiwania",
"Change recovery key password:" : "Zmień hasło klucza odzyskiwania",
"Change Password" : "Zmień hasło",
diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js
index faac7ca03a6..09ed1910c1a 100644
--- a/apps/encryption/l10n/pt_BR.js
+++ b/apps/encryption/l10n/pt_BR.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
"Encryption App is enabled and ready" : "Aplicativo de criptografia está ativado e pronto",
+ "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Por favor peça ao dono do arquivo para compartilha-lo com você.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n",
+ "The share will expire on %s." : "O compartilhamento irá expirar em %s.",
+ "Cheers!" : "Saúde!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..<br><br>",
"Enable recovery key" : "Habilitar recuperação de chave",
"Disable recovery key" : "Dasabilitar chave de recuperação",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar arquivos. Ela permite a recuperação de arquivos de um usuário esquecer sua senha.",
diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json
index fd8fd33d8c9..1682ec44b28 100644
--- a/apps/encryption/l10n/pt_BR.json
+++ b/apps/encryption/l10n/pt_BR.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente",
"Encryption App is enabled and ready" : "Aplicativo de criptografia está ativado e pronto",
+ "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Por favor peça ao dono do arquivo para compartilha-lo com você.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n",
+ "The share will expire on %s." : "O compartilhamento irá expirar em %s.",
+ "Cheers!" : "Saúde!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..<br><br>",
"Enable recovery key" : "Habilitar recuperação de chave",
"Disable recovery key" : "Dasabilitar chave de recuperação",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar arquivos. Ela permite a recuperação de arquivos de um usuário esquecer sua senha.",
diff --git a/apps/encryption/l10n/pt_PT.js b/apps/encryption/l10n/pt_PT.js
index c02efa4c1fe..fc93818e9ec 100644
--- a/apps/encryption/l10n/pt_PT.js
+++ b/apps/encryption/l10n/pt_PT.js
@@ -1,9 +1,9 @@
OC.L10N.register(
"encryption",
{
- "Missing recovery key password" : "Palavra-passe da chave de recuperação em falta",
- "Please repeat the recovery key password" : "Por favor, insira a palavra-passe da chave de recuperação",
- "Repeated recovery key password does not match the provided recovery key password" : "A palavra-passe de recuperação repetida não corresponde à palavra-passe fornecida",
+ "Missing recovery key password" : "Senha da chave de recuperação em falta",
+ "Please repeat the recovery key password" : "Por favor, repita a senha da chave de recuperação",
+ "Repeated recovery key password does not match the provided recovery key password" : "A contrassenha da chave de recuperação não corresponde à senha fornecida",
"Recovery key successfully enabled" : "A chave de recuperação foi ativada com sucesso",
"Could not enable recovery key. Please check your recovery key password!" : "Não foi possível ativar a chave de recuperação. Por favor, verifique a sua senha da chave de recuperação!",
"Recovery key successfully disabled" : "A chave de recuperação foi desativada com sucesso",
@@ -14,20 +14,30 @@ OC.L10N.register(
"Please repeat the new recovery password" : "Escreva de novo a nova palavra-passe de recuperação",
"Password successfully changed." : "Palavra-passe alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.",
+ "Recovery Key disabled" : "Chave de recuperação desativada",
"Recovery Key enabled" : "Chave de Recuperação ativada",
"Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a chave de recuperação, por favor, tente de novo ou contacte o seu administrador",
"Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
"The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.",
"The current log-in password was not correct, please try again." : "A senha de iniciar a sessão atual não estava correta, por favor, tente de novo.",
"Private key password successfully updated." : "A senha da chave privada foi atualizada com sucesso. ",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, execute 'occ encryption:migrate' ou contacte o seu administrador",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente",
"Encryption App is enabled and ready" : "A aplicação de encriptação está ativa e pronta",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este ficheiro, provavelmente isto é um ficheiro compartilhado. Por favor, peça ao dono do ficheiro para voltar a partilhar o ficheiro consigo.",
+ "The share will expire on %s." : "Esta partilha irá expirar em %s.",
+ "Cheers!" : "Parabéns!",
"Enable recovery key" : "Ativar a chave de recuperação",
"Disable recovery key" : "Desativar a chave de recuperação",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar os ficheiros. Esta permite a recuperação dos ficheiros do utilizador se este esquecer a sua senha.",
"Recovery key password" : "Senha da chave de recuperação",
+ "Repeat recovery key password" : "Repetir a senha da chave de recuperação",
"Change recovery key password:" : "Alterar a senha da chave de recuperação:",
+ "Old recovery key password" : "Senha da chave de recuperação antiga",
+ "New recovery key password" : "Nova senha da chave de recuperação",
+ "Repeat new recovery key password" : "Repetir senha da chave de recuperação",
"Change Password" : "Alterar a Senha",
"ownCloud basic encryption module" : "módulo de encriptação básico da ownCloud",
"Your private key password no longer matches your log-in password." : "A Password da sua chave privada não coincide mais com a password do seu login.",
diff --git a/apps/encryption/l10n/pt_PT.json b/apps/encryption/l10n/pt_PT.json
index 32f1d984ff1..de139edfffa 100644
--- a/apps/encryption/l10n/pt_PT.json
+++ b/apps/encryption/l10n/pt_PT.json
@@ -1,7 +1,7 @@
{ "translations": {
- "Missing recovery key password" : "Palavra-passe da chave de recuperação em falta",
- "Please repeat the recovery key password" : "Por favor, insira a palavra-passe da chave de recuperação",
- "Repeated recovery key password does not match the provided recovery key password" : "A palavra-passe de recuperação repetida não corresponde à palavra-passe fornecida",
+ "Missing recovery key password" : "Senha da chave de recuperação em falta",
+ "Please repeat the recovery key password" : "Por favor, repita a senha da chave de recuperação",
+ "Repeated recovery key password does not match the provided recovery key password" : "A contrassenha da chave de recuperação não corresponde à senha fornecida",
"Recovery key successfully enabled" : "A chave de recuperação foi ativada com sucesso",
"Could not enable recovery key. Please check your recovery key password!" : "Não foi possível ativar a chave de recuperação. Por favor, verifique a sua senha da chave de recuperação!",
"Recovery key successfully disabled" : "A chave de recuperação foi desativada com sucesso",
@@ -12,20 +12,30 @@
"Please repeat the new recovery password" : "Escreva de novo a nova palavra-passe de recuperação",
"Password successfully changed." : "Palavra-passe alterada com sucesso.",
"Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.",
+ "Recovery Key disabled" : "Chave de recuperação desativada",
"Recovery Key enabled" : "Chave de Recuperação ativada",
"Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a chave de recuperação, por favor, tente de novo ou contacte o seu administrador",
"Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
"The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.",
"The current log-in password was not correct, please try again." : "A senha de iniciar a sessão atual não estava correta, por favor, tente de novo.",
"Private key password successfully updated." : "A senha da chave privada foi atualizada com sucesso. ",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, execute 'occ encryption:migrate' ou contacte o seu administrador",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente",
"Encryption App is enabled and ready" : "A aplicação de encriptação está ativa e pronta",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este ficheiro, provavelmente isto é um ficheiro compartilhado. Por favor, peça ao dono do ficheiro para voltar a partilhar o ficheiro consigo.",
+ "The share will expire on %s." : "Esta partilha irá expirar em %s.",
+ "Cheers!" : "Parabéns!",
"Enable recovery key" : "Ativar a chave de recuperação",
"Disable recovery key" : "Desativar a chave de recuperação",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar os ficheiros. Esta permite a recuperação dos ficheiros do utilizador se este esquecer a sua senha.",
"Recovery key password" : "Senha da chave de recuperação",
+ "Repeat recovery key password" : "Repetir a senha da chave de recuperação",
"Change recovery key password:" : "Alterar a senha da chave de recuperação:",
+ "Old recovery key password" : "Senha da chave de recuperação antiga",
+ "New recovery key password" : "Nova senha da chave de recuperação",
+ "Repeat new recovery key password" : "Repetir senha da chave de recuperação",
"Change Password" : "Alterar a Senha",
"ownCloud basic encryption module" : "módulo de encriptação básico da ownCloud",
"Your private key password no longer matches your log-in password." : "A Password da sua chave privada não coincide mais com a password do seu login.",
diff --git a/apps/encryption/l10n/ro.js b/apps/encryption/l10n/ro.js
index 3f699577243..88af06692ac 100644
--- a/apps/encryption/l10n/ro.js
+++ b/apps/encryption/l10n/ro.js
@@ -17,6 +17,7 @@ OC.L10N.register(
"Private key password successfully updated." : "Cheia privata a fost actualizata cu succes",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va",
+ "The share will expire on %s." : "Partajarea va expira în data de %s.",
"Change Password" : "Schimbă parola",
"ownCloud basic encryption module" : "modul de ecnriptie bazic ownCloud",
"Enabled" : "Activat",
diff --git a/apps/encryption/l10n/ro.json b/apps/encryption/l10n/ro.json
index e546b400935..9251037e35f 100644
--- a/apps/encryption/l10n/ro.json
+++ b/apps/encryption/l10n/ro.json
@@ -15,6 +15,7 @@
"Private key password successfully updated." : "Cheia privata a fost actualizata cu succes",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va",
+ "The share will expire on %s." : "Partajarea va expira în data de %s.",
"Change Password" : "Schimbă parola",
"ownCloud basic encryption module" : "modul de ecnriptie bazic ownCloud",
"Enabled" : "Activat",
diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js
index 7907c8aaeb9..2b64fa66ed9 100644
--- a/apps/encryption/l10n/ru.js
+++ b/apps/encryption/l10n/ru.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : "Приложение шифрования включено и готово",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удается прочитать файл, возможно это публичный файл. Пожалуйста попросите владельца открыть доступ снова.",
+ "The share will expire on %s." : "Доступ будет закрыт %s",
+ "Cheers!" : "Всего наилучшего!",
"Enable recovery key" : "Включить ключ восстановления",
"Disable recovery key" : "Отключить ключ восстановления",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.",
diff --git a/apps/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json
index 87378952dba..229d4e32dee 100644
--- a/apps/encryption/l10n/ru.json
+++ b/apps/encryption/l10n/ru.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : "Приложение шифрования включено и готово",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удается прочитать файл, возможно это публичный файл. Пожалуйста попросите владельца открыть доступ снова.",
+ "The share will expire on %s." : "Доступ будет закрыт %s",
+ "Cheers!" : "Всего наилучшего!",
"Enable recovery key" : "Включить ключ восстановления",
"Disable recovery key" : "Отключить ключ восстановления",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.",
diff --git a/apps/encryption/l10n/sk_SK.js b/apps/encryption/l10n/sk_SK.js
index 3f3b93f043e..6b97ef32683 100644
--- a/apps/encryption/l10n/sk_SK.js
+++ b/apps/encryption/l10n/sk_SK.js
@@ -23,6 +23,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.",
+ "The share will expire on %s." : "Zdieľanie vyprší %s.",
+ "Cheers!" : "Pekný deň!",
"Enable recovery key" : "Povoliť obnovovací kľúč",
"Disable recovery key" : "Zakázať obnovovací kľúč",
"Recovery key password" : "Heslo obnovovacieho kľúča",
diff --git a/apps/encryption/l10n/sk_SK.json b/apps/encryption/l10n/sk_SK.json
index 05371299dbc..92ef811db23 100644
--- a/apps/encryption/l10n/sk_SK.json
+++ b/apps/encryption/l10n/sk_SK.json
@@ -21,6 +21,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.",
+ "The share will expire on %s." : "Zdieľanie vyprší %s.",
+ "Cheers!" : "Pekný deň!",
"Enable recovery key" : "Povoliť obnovovací kľúč",
"Disable recovery key" : "Zakázať obnovovací kľúč",
"Recovery key password" : "Heslo obnovovacieho kľúča",
diff --git a/apps/encryption/l10n/sl.js b/apps/encryption/l10n/sl.js
index 7c90ba7e9a7..4e4e9998b0d 100644
--- a/apps/encryption/l10n/sl.js
+++ b/apps/encryption/l10n/sl.js
@@ -23,6 +23,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.",
+ "The share will expire on %s." : "Povezava souporabe bo potekla %s.",
+ "Cheers!" : "Na zdravje!",
"Enable recovery key" : "Omogoči obnovitev gesla",
"Disable recovery key" : "Onemogoči obnovitev gesla",
"Recovery key password" : "Ključ za obnovitev gesla",
diff --git a/apps/encryption/l10n/sl.json b/apps/encryption/l10n/sl.json
index 82d23fc6e74..34829a2280e 100644
--- a/apps/encryption/l10n/sl.json
+++ b/apps/encryption/l10n/sl.json
@@ -21,6 +21,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.",
+ "The share will expire on %s." : "Povezava souporabe bo potekla %s.",
+ "Cheers!" : "Na zdravje!",
"Enable recovery key" : "Omogoči obnovitev gesla",
"Disable recovery key" : "Onemogoči obnovitev gesla",
"Recovery key password" : "Ključ za obnovitev gesla",
diff --git a/apps/encryption/l10n/sq.js b/apps/encryption/l10n/sq.js
index be24512a35c..9a9230e86fb 100644
--- a/apps/encryption/l10n/sq.js
+++ b/apps/encryption/l10n/sq.js
@@ -2,6 +2,8 @@ OC.L10N.register(
"encryption",
{
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.",
+ "The share will expire on %s." : "Ndarja do të skadojë në %s.",
+ "Cheers!" : "Gjithë të mirat",
"Enabled" : "Aktivizuar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/sq.json b/apps/encryption/l10n/sq.json
index 48f32535ac0..87481aa3349 100644
--- a/apps/encryption/l10n/sq.json
+++ b/apps/encryption/l10n/sq.json
@@ -1,5 +1,7 @@
{ "translations": {
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.",
+ "The share will expire on %s." : "Ndarja do të skadojë në %s.",
+ "Cheers!" : "Gjithë të mirat",
"Enabled" : "Aktivizuar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/sr.js b/apps/encryption/l10n/sr.js
index 9c37a8a3b30..e351a739234 100644
--- a/apps/encryption/l10n/sr.js
+++ b/apps/encryption/l10n/sr.js
@@ -27,6 +27,8 @@ OC.L10N.register(
"Encryption App is enabled and ready" : "Апликација шифровања је укључена и спремна",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са вама.",
+ "The share will expire on %s." : "Дељење истиче %s.",
+ "Cheers!" : "Здраво!",
"Enable recovery key" : "Омогући кључ за опоравак",
"Disable recovery key" : "Онемогући кључ за опоравак",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Кључ за опоравак је додатни шифрарски кључ који се користи за шифровање фајлова. Он омогућава опоравак корисничких фајлова ако корисник заборави своју лозинку.",
diff --git a/apps/encryption/l10n/sr.json b/apps/encryption/l10n/sr.json
index cd648279e9e..7fe6e1672d2 100644
--- a/apps/encryption/l10n/sr.json
+++ b/apps/encryption/l10n/sr.json
@@ -25,6 +25,8 @@
"Encryption App is enabled and ready" : "Апликација шифровања је укључена и спремна",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са вама.",
+ "The share will expire on %s." : "Дељење истиче %s.",
+ "Cheers!" : "Здраво!",
"Enable recovery key" : "Омогући кључ за опоравак",
"Disable recovery key" : "Онемогући кључ за опоравак",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Кључ за опоравак је додатни шифрарски кључ који се користи за шифровање фајлова. Он омогућава опоравак корисничких фајлова ако корисник заборави своју лозинку.",
diff --git a/apps/encryption/l10n/sr@latin.js b/apps/encryption/l10n/sr@latin.js
index b078b50fce7..d784912394c 100644
--- a/apps/encryption/l10n/sr@latin.js
+++ b/apps/encryption/l10n/sr@latin.js
@@ -3,6 +3,8 @@ OC.L10N.register(
{
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.",
+ "The share will expire on %s." : "Deljeni sadržaj će isteći: %s",
+ "Cheers!" : "U zdravlje!",
"Disabled" : "Onemogućeno"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/encryption/l10n/sr@latin.json b/apps/encryption/l10n/sr@latin.json
index 08f90ad5912..cb3a38ecf72 100644
--- a/apps/encryption/l10n/sr@latin.json
+++ b/apps/encryption/l10n/sr@latin.json
@@ -1,6 +1,8 @@
{ "translations": {
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.",
+ "The share will expire on %s." : "Deljeni sadržaj će isteći: %s",
+ "Cheers!" : "U zdravlje!",
"Disabled" : "Onemogućeno"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js
index d68e3274ad6..16f9d00cd3b 100644
--- a/apps/encryption/l10n/sv.js
+++ b/apps/encryption/l10n/sv.js
@@ -20,6 +20,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
+ "The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
+ "Cheers!" : "Ha de fint!",
"Recovery key password" : "Lösenord för återställningsnyckel",
"Change recovery key password:" : "Ändra lösenord för återställningsnyckel:",
"Change Password" : "Byt lösenord",
diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json
index 2ab5025fb25..c8f65966705 100644
--- a/apps/encryption/l10n/sv.json
+++ b/apps/encryption/l10n/sv.json
@@ -18,6 +18,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.",
+ "The share will expire on %s." : "Utdelningen kommer att upphöra %s.",
+ "Cheers!" : "Ha de fint!",
"Recovery key password" : "Lösenord för återställningsnyckel",
"Change recovery key password:" : "Ändra lösenord för återställningsnyckel:",
"Change Password" : "Byt lösenord",
diff --git a/apps/encryption/l10n/th_TH.js b/apps/encryption/l10n/th_TH.js
index d6a2d00d123..3c4a5d696fa 100644
--- a/apps/encryption/l10n/th_TH.js
+++ b/apps/encryption/l10n/th_TH.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง",
"Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน",
+ "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถถอดรหัสไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาถามเจ้าของไฟล์เพื่อยกเลิกการใช้งานร่วมกัน ",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถอ่านไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาสอบถามเจ้าของไฟล์เพื่อแชร์ไฟล์กับคุณ",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "นี่คุณ<br>\n<br> \nผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong><br>\n<br>\nกรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br>\n<br>\n",
+ "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s",
+ "Cheers!" : "ไชโย!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "นี่คุณ <br><br> ผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong> <br><br>กรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br><br>",
"Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส",
"Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน",
diff --git a/apps/encryption/l10n/th_TH.json b/apps/encryption/l10n/th_TH.json
index 5c904340983..b69cdb8a871 100644
--- a/apps/encryption/l10n/th_TH.json
+++ b/apps/encryption/l10n/th_TH.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง",
"Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน",
+ "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถถอดรหัสไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาถามเจ้าของไฟล์เพื่อยกเลิกการใช้งานร่วมกัน ",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถอ่านไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาสอบถามเจ้าของไฟล์เพื่อแชร์ไฟล์กับคุณ",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "นี่คุณ<br>\n<br> \nผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong><br>\n<br>\nกรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br>\n<br>\n",
+ "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s",
+ "Cheers!" : "ไชโย!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "นี่คุณ <br><br> ผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong> <br><br>กรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br><br>",
"Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส",
"Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน",
diff --git a/apps/encryption/l10n/tr.js b/apps/encryption/l10n/tr.js
index 065c0d16d1c..96db8f91209 100644
--- a/apps/encryption/l10n/tr.js
+++ b/apps/encryption/l10n/tr.js
@@ -25,8 +25,13 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın",
"Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır",
+ "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan okunamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Selam,\n\nsistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız '%s' parolası kullanılarak şifrelendi.\n\nLütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.\n\n",
+ "The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.",
+ "Cheers!" : "Hoşçakalın!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Selam,<br><br>sistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız <strong>%s</strong> parolası kullanılarak şifrelendi.<br><br>Lütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.<br><br>",
"Enable recovery key" : "Kurtarma anahtarını etkinleştir",
"Disable recovery key" : "Kurtarma anahtarını devre dışı bırak",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kurtarma anahtarı, dosyaların şifrelenmesi için daha fazla \nşifreleme sunar. Bu kullanıcının dosyasının şifresini unuttuğunda kurtarmasına imkan verir.",
diff --git a/apps/encryption/l10n/tr.json b/apps/encryption/l10n/tr.json
index b21a019bb64..be6f6a5dfdd 100644
--- a/apps/encryption/l10n/tr.json
+++ b/apps/encryption/l10n/tr.json
@@ -23,8 +23,13 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın",
"Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır",
+ "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan okunamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Selam,\n\nsistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız '%s' parolası kullanılarak şifrelendi.\n\nLütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.\n\n",
+ "The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.",
+ "Cheers!" : "Hoşçakalın!",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Selam,<br><br>sistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız <strong>%s</strong> parolası kullanılarak şifrelendi.<br><br>Lütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.<br><br>",
"Enable recovery key" : "Kurtarma anahtarını etkinleştir",
"Disable recovery key" : "Kurtarma anahtarını devre dışı bırak",
"The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kurtarma anahtarı, dosyaların şifrelenmesi için daha fazla \nşifreleme sunar. Bu kullanıcının dosyasının şifresini unuttuğunda kurtarmasına imkan verir.",
diff --git a/apps/encryption/l10n/uk.js b/apps/encryption/l10n/uk.js
index 4c7143800d8..553478a7f4c 100644
--- a/apps/encryption/l10n/uk.js
+++ b/apps/encryption/l10n/uk.js
@@ -25,6 +25,8 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
"Encryption App is enabled and ready" : "Додаток кодування дозволений і готовий",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.",
+ "The share will expire on %s." : "Спільний доступ закінчиться %s.",
+ "Cheers!" : "Будьмо!",
"Enable recovery key" : "Увімкнути ключ відновлення",
"Disable recovery key" : "Вимкнути ключ відновлення",
"Recovery key password" : "Пароль ключа відновлення",
diff --git a/apps/encryption/l10n/uk.json b/apps/encryption/l10n/uk.json
index 3be3a35b2f1..e474e25cea4 100644
--- a/apps/encryption/l10n/uk.json
+++ b/apps/encryption/l10n/uk.json
@@ -23,6 +23,8 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
"Encryption App is enabled and ready" : "Додаток кодування дозволений і готовий",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.",
+ "The share will expire on %s." : "Спільний доступ закінчиться %s.",
+ "Cheers!" : "Будьмо!",
"Enable recovery key" : "Увімкнути ключ відновлення",
"Disable recovery key" : "Вимкнути ключ відновлення",
"Recovery key password" : "Пароль ключа відновлення",
diff --git a/apps/encryption/l10n/ur_PK.js b/apps/encryption/l10n/ur_PK.js
new file mode 100644
index 00000000000..9fbed2e780f
--- /dev/null
+++ b/apps/encryption/l10n/ur_PK.js
@@ -0,0 +1,6 @@
+OC.L10N.register(
+ "encryption",
+ {
+ "Cheers!" : "واہ!"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/ur_PK.json b/apps/encryption/l10n/ur_PK.json
new file mode 100644
index 00000000000..f798bdf2a7b
--- /dev/null
+++ b/apps/encryption/l10n/ur_PK.json
@@ -0,0 +1,4 @@
+{ "translations": {
+ "Cheers!" : "واہ!"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/encryption/l10n/vi.js b/apps/encryption/l10n/vi.js
index b9956551622..d325fc71661 100644
--- a/apps/encryption/l10n/vi.js
+++ b/apps/encryption/l10n/vi.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Could not change the password. Maybe the old password was not correct." : "Không thể đổi mật khẩu. Có lẽ do mật khẩu cũ không đúng.",
"Private key password successfully updated." : "Cập nhật thành công mật khẩu khóa cá nhân",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
+ "The share will expire on %s." : "Chia sẻ này sẽ hết hiệu lực vào %s.",
+ "Cheers!" : "Chúc mừng!",
"Change Password" : "Đổi Mật khẩu",
" If you don't remember your old password you can ask your administrator to recover your files." : "Nếu bạn không nhớ mật khẩu cũ, bạn có thể yêu cầu quản trị viên khôi phục tập tin của bạn.",
"Old log-in password" : "Mật khẩu đăng nhập cũ",
diff --git a/apps/encryption/l10n/vi.json b/apps/encryption/l10n/vi.json
index eaaa3d1c038..78ed43b7047 100644
--- a/apps/encryption/l10n/vi.json
+++ b/apps/encryption/l10n/vi.json
@@ -9,6 +9,8 @@
"Could not change the password. Maybe the old password was not correct." : "Không thể đổi mật khẩu. Có lẽ do mật khẩu cũ không đúng.",
"Private key password successfully updated." : "Cập nhật thành công mật khẩu khóa cá nhân",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
+ "The share will expire on %s." : "Chia sẻ này sẽ hết hiệu lực vào %s.",
+ "Cheers!" : "Chúc mừng!",
"Change Password" : "Đổi Mật khẩu",
" If you don't remember your old password you can ask your administrator to recover your files." : "Nếu bạn không nhớ mật khẩu cũ, bạn có thể yêu cầu quản trị viên khôi phục tập tin của bạn.",
"Old log-in password" : "Mật khẩu đăng nhập cũ",
diff --git a/apps/encryption/l10n/zh_CN.js b/apps/encryption/l10n/zh_CN.js
index e38e6f03227..93a1b13996a 100644
--- a/apps/encryption/l10n/zh_CN.js
+++ b/apps/encryption/l10n/zh_CN.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "不能启用恢复密钥。请检查恢复密钥密码!",
"Recovery key successfully disabled" : "恢复密钥成功禁用",
"Could not disable recovery key. Please check your recovery key password!" : "不能禁用恢复密钥。请检查恢复密钥密码!",
+ "Missing parameters" : "缺少参数",
"Please provide the old recovery password" : "请提供原来的恢复密码",
"Please provide a new recovery password" : "请提供一个新的恢复密码",
"Please repeat the new recovery password" : "请替换新的恢复密码",
@@ -18,6 +19,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
+ "The share will expire on %s." : "此分享将在 %s 过期。",
+ "Cheers!" : "干杯!",
"Recovery key password" : "恢复密钥密码",
"Change recovery key password:" : "更改恢复密钥密码",
"Change Password" : "修改密码",
diff --git a/apps/encryption/l10n/zh_CN.json b/apps/encryption/l10n/zh_CN.json
index 0a1c7b5b899..0fb653b232c 100644
--- a/apps/encryption/l10n/zh_CN.json
+++ b/apps/encryption/l10n/zh_CN.json
@@ -5,6 +5,7 @@
"Could not enable recovery key. Please check your recovery key password!" : "不能启用恢复密钥。请检查恢复密钥密码!",
"Recovery key successfully disabled" : "恢复密钥成功禁用",
"Could not disable recovery key. Please check your recovery key password!" : "不能禁用恢复密钥。请检查恢复密钥密码!",
+ "Missing parameters" : "缺少参数",
"Please provide the old recovery password" : "请提供原来的恢复密码",
"Please provide a new recovery password" : "请提供一个新的恢复密码",
"Please repeat the new recovery password" : "请替换新的恢复密码",
@@ -16,6 +17,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。",
+ "The share will expire on %s." : "此分享将在 %s 过期。",
+ "Cheers!" : "干杯!",
"Recovery key password" : "恢复密钥密码",
"Change recovery key password:" : "更改恢复密钥密码",
"Change Password" : "修改密码",
diff --git a/apps/encryption/l10n/zh_TW.js b/apps/encryption/l10n/zh_TW.js
index 01b35d4661a..17893b44b67 100644
--- a/apps/encryption/l10n/zh_TW.js
+++ b/apps/encryption/l10n/zh_TW.js
@@ -11,6 +11,8 @@ OC.L10N.register(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。",
+ "The share will expire on %s." : "這個分享將會於 %s 過期",
+ "Cheers!" : "太棒了!",
"Recovery key password" : "還原金鑰密碼",
"Change recovery key password:" : "變更還原金鑰密碼:",
"Change Password" : "變更密碼",
diff --git a/apps/encryption/l10n/zh_TW.json b/apps/encryption/l10n/zh_TW.json
index a1617eec761..ce2e07228fc 100644
--- a/apps/encryption/l10n/zh_TW.json
+++ b/apps/encryption/l10n/zh_TW.json
@@ -9,6 +9,8 @@
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。",
+ "The share will expire on %s." : "這個分享將會於 %s 過期",
+ "Cheers!" : "太棒了!",
"Recovery key password" : "還原金鑰密碼",
"Change recovery key password:" : "變更還原金鑰密碼:",
"Change Password" : "變更密碼",
diff --git a/apps/encryption/lib/crypto/crypt.php b/apps/encryption/lib/crypto/crypt.php
index f3cf38fb96c..5d1bb92460a 100644
--- a/apps/encryption/lib/crypto/crypt.php
+++ b/apps/encryption/lib/crypto/crypt.php
@@ -30,6 +30,7 @@ use OC\Encryption\Exceptions\DecryptionFailedException;
use OC\Encryption\Exceptions\EncryptionFailedException;
use OCA\Encryption\Exceptions\MultiKeyDecryptException;
use OCA\Encryption\Exceptions\MultiKeyEncryptException;
+use OCA\Encryption\Vendor\PBKDF2Fallback;
use OCP\Encryption\Exceptions\GenericEncryptionException;
use OCP\IConfig;
use OCP\ILogger;
@@ -42,6 +43,10 @@ class Crypt {
// default cipher from old ownCloud versions
const LEGACY_CIPHER = 'AES-128-CFB';
+ // default key format, old ownCloud version encrypted the private key directly
+ // with the user password
+ const LEGACY_KEY_FORMAT = 'password';
+
const HEADER_START = 'HBEGIN';
const HEADER_END = 'HEND';
/**
@@ -58,6 +63,11 @@ class Crypt {
private $config;
/**
+ * @var array
+ */
+ private $supportedKeyFormats;
+
+ /**
* @param ILogger $logger
* @param IUserSession $userSession
* @param IConfig $config
@@ -66,6 +76,7 @@ class Crypt {
$this->logger = $logger;
$this->user = $userSession && $userSession->isLoggedIn() ? $userSession->getUser() : false;
$this->config = $config;
+ $this->supportedKeyFormats = ['hash', 'password'];
}
/**
@@ -161,10 +172,23 @@ class Crypt {
/**
* generate header for encrypted file
+ *
+ * @param string $keyFormat (can be 'hash' or 'password')
+ * @return string
+ * @throws \InvalidArgumentException
*/
- public function generateHeader() {
+ public function generateHeader($keyFormat = 'hash') {
+
+ if (in_array($keyFormat, $this->supportedKeyFormats, true) === false) {
+ throw new \InvalidArgumentException('key format "' . $keyFormat . '" is not supported');
+ }
+
$cipher = $this->getCipher();
- $header = self::HEADER_START . ':cipher:' . $cipher . ':' . self::HEADER_END;
+
+ $header = self::HEADER_START
+ . ':cipher:' . $cipher
+ . ':keyFormat:' . $keyFormat
+ . ':' . self::HEADER_END;
return $header;
}
@@ -212,6 +236,25 @@ class Crypt {
}
/**
+ * get key size depending on the cipher
+ *
+ * @param string $cipher supported ('AES-256-CFB' and 'AES-128-CFB')
+ * @return int
+ * @throws \InvalidArgumentException
+ */
+ protected function getKeySize($cipher) {
+ if ($cipher === 'AES-256-CFB') {
+ return 32;
+ } else if ($cipher === 'AES-128-CFB') {
+ return 16;
+ }
+
+ throw new \InvalidArgumentException(
+ 'Wrong cipher defined only AES-128-CFB and AES-256-CFB are supported.'
+ );
+ }
+
+ /**
* get legacy cipher
*
* @return string
@@ -238,11 +281,71 @@ class Crypt {
}
/**
+ * generate password hash used to encrypt the users private key
+ *
+ * @param string $password
+ * @param string $cipher
+ * @param string $uid only used for user keys
+ * @return string
+ */
+ protected function generatePasswordHash($password, $cipher, $uid = '') {
+ $instanceId = $this->config->getSystemValue('instanceid');
+ $instanceSecret = $this->config->getSystemValue('secret');
+ $salt = hash('sha256', $uid . $instanceId . $instanceSecret, true);
+ $keySize = $this->getKeySize($cipher);
+
+ if (function_exists('hash_pbkdf2')) {
+ $hash = hash_pbkdf2(
+ 'sha256',
+ $password,
+ $salt,
+ 100000,
+ $keySize,
+ true
+ );
+ } else {
+ // fallback to 3rdparty lib for PHP <= 5.4.
+ // FIXME: Can be removed as soon as support for PHP 5.4 was dropped
+ $fallback = new PBKDF2Fallback();
+ $hash = $fallback->pbkdf2(
+ 'sha256',
+ $password,
+ $salt,
+ 100000,
+ $keySize,
+ true
+ );
+ }
+
+ return $hash;
+ }
+
+ /**
+ * encrypt private key
+ *
* @param string $privateKey
* @param string $password
+ * @param string $uid for regular users, empty for system keys
* @return bool|string
*/
- public function decryptPrivateKey($privateKey, $password = '') {
+ public function encryptPrivateKey($privateKey, $password, $uid = '') {
+ $cipher = $this->getCipher();
+ $hash = $this->generatePasswordHash($password, $cipher, $uid);
+ $encryptedKey = $this->symmetricEncryptFileContent(
+ $privateKey,
+ $hash
+ );
+
+ return $encryptedKey;
+ }
+
+ /**
+ * @param string $privateKey
+ * @param string $password
+ * @param string $uid for regular users, empty for system keys
+ * @return bool|string
+ */
+ public function decryptPrivateKey($privateKey, $password = '', $uid = '') {
$header = $this->parseHeader($privateKey);
@@ -252,6 +355,16 @@ class Crypt {
$cipher = self::LEGACY_CIPHER;
}
+ if (isset($header['keyFormat'])) {
+ $keyFormat = $header['keyFormat'];
+ } else {
+ $keyFormat = self::LEGACY_KEY_FORMAT;
+ }
+
+ if ($keyFormat === 'hash') {
+ $password = $this->generatePasswordHash($password, $cipher, $uid);
+ }
+
// If we found a header we need to remove it from the key we want to decrypt
if (!empty($header)) {
$privateKey = substr($privateKey,
@@ -263,18 +376,29 @@ class Crypt {
$password,
$cipher);
- // Check if this is a valid private key
+ if ($this->isValidPrivateKey($plainKey) === false) {
+ return false;
+ }
+
+ return $plainKey;
+ }
+
+ /**
+ * check if it is a valid private key
+ *
+ * @param $plainKey
+ * @return bool
+ */
+ protected function isValidPrivateKey($plainKey) {
$res = openssl_get_privatekey($plainKey);
if (is_resource($res)) {
$sslInfo = openssl_pkey_get_details($res);
- if (!isset($sslInfo['key'])) {
- return false;
+ if (isset($sslInfo['key'])) {
+ return true;
}
- } else {
- return false;
}
- return $plainKey;
+ return false;
}
/**
@@ -358,7 +482,7 @@ class Crypt {
* @param $data
* @return array
*/
- private function parseHeader($data) {
+ protected function parseHeader($data) {
$result = [];
if (substr($data, 0, strlen(self::HEADER_START)) === self::HEADER_START) {
diff --git a/apps/encryption/lib/crypto/encryptall.php b/apps/encryption/lib/crypto/encryptall.php
new file mode 100644
index 00000000000..a0c69c13fdd
--- /dev/null
+++ b/apps/encryption/lib/crypto/encryptall.php
@@ -0,0 +1,424 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\Encryption\Crypto;
+
+use OC\Encryption\Exceptions\DecryptionFailedException;
+use OC\Files\View;
+use OCA\Encryption\KeyManager;
+use OCA\Encryption\Users\Setup;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\IUserManager;
+use OCP\Mail\IMailer;
+use OCP\Security\ISecureRandom;
+use Symfony\Component\Console\Helper\ProgressBar;
+use Symfony\Component\Console\Helper\QuestionHelper;
+use Symfony\Component\Console\Helper\Table;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\ConfirmationQuestion;
+
+class EncryptAll {
+
+ /** @var Setup */
+ protected $userSetup;
+
+ /** @var IUserManager */
+ protected $userManager;
+
+ /** @var View */
+ protected $rootView;
+
+ /** @var KeyManager */
+ protected $keyManager;
+
+ /** @var array */
+ protected $userPasswords;
+
+ /** @var IConfig */
+ protected $config;
+
+ /** @var IMailer */
+ protected $mailer;
+
+ /** @var IL10N */
+ protected $l;
+
+ /** @var QuestionHelper */
+ protected $questionHelper;
+
+ /** @var OutputInterface */
+ protected $output;
+
+ /** @var InputInterface */
+ protected $input;
+
+ /** @var ISecureRandom */
+ protected $secureRandom;
+
+ /**
+ * @param Setup $userSetup
+ * @param IUserManager $userManager
+ * @param View $rootView
+ * @param KeyManager $keyManager
+ * @param IConfig $config
+ * @param IMailer $mailer
+ * @param IL10N $l
+ * @param QuestionHelper $questionHelper
+ * @param ISecureRandom $secureRandom
+ */
+ public function __construct(
+ Setup $userSetup,
+ IUserManager $userManager,
+ View $rootView,
+ KeyManager $keyManager,
+ IConfig $config,
+ IMailer $mailer,
+ IL10N $l,
+ QuestionHelper $questionHelper,
+ ISecureRandom $secureRandom
+ ) {
+ $this->userSetup = $userSetup;
+ $this->userManager = $userManager;
+ $this->rootView = $rootView;
+ $this->keyManager = $keyManager;
+ $this->config = $config;
+ $this->mailer = $mailer;
+ $this->l = $l;
+ $this->questionHelper = $questionHelper;
+ $this->secureRandom = $secureRandom;
+ // store one time passwords for the users
+ $this->userPasswords = array();
+ }
+
+ /**
+ * start to encrypt all files
+ *
+ * @param InputInterface $input
+ * @param OutputInterface $output
+ */
+ public function encryptAll(InputInterface $input, OutputInterface $output) {
+
+ $this->input = $input;
+ $this->output = $output;
+
+ $headline = 'Encrypt all files with the ' . Encryption::DISPLAY_NAME;
+ $this->output->writeln("\n");
+ $this->output->writeln($headline);
+ $this->output->writeln(str_pad('', strlen($headline), '='));
+
+ //create private/public keys for each user and store the private key password
+ $this->output->writeln("\n");
+ $this->output->writeln('Create key-pair for every user');
+ $this->output->writeln('------------------------------');
+ $this->output->writeln('');
+ $this->output->writeln('This module will encrypt all files in the users files folder initially.');
+ $this->output->writeln('Already existing versions and files in the trash bin will not be encrypted.');
+ $this->output->writeln('');
+ $this->createKeyPairs();
+
+ //setup users file system and encrypt all files one by one (take should encrypt setting of storage into account)
+ $this->output->writeln("\n");
+ $this->output->writeln('Start to encrypt users files');
+ $this->output->writeln('----------------------------');
+ $this->output->writeln('');
+ $this->encryptAllUsersFiles();
+ //send-out or display password list and write it to a file
+ $this->output->writeln("\n");
+ $this->output->writeln('Generated encryption key passwords');
+ $this->output->writeln('----------------------------------');
+ $this->output->writeln('');
+ $this->outputPasswords();
+ $this->output->writeln("\n");
+ }
+
+ /**
+ * create key-pair for every user
+ */
+ protected function createKeyPairs() {
+ $this->output->writeln("\n");
+ $progress = new ProgressBar($this->output);
+ $progress->setFormat(" %message% \n [%bar%]");
+ $progress->start();
+
+ foreach($this->userManager->getBackends() as $backend) {
+ $limit = 500;
+ $offset = 0;
+ do {
+ $users = $backend->getUsers('', $limit, $offset);
+ foreach ($users as $user) {
+ if ($this->keyManager->userHasKeys($user) === false) {
+ $progress->setMessage('Create key-pair for ' . $user);
+ $progress->advance();
+ $this->setupUserFS($user);
+ $password = $this->generateOneTimePassword($user);
+ $this->userSetup->setupUser($user, $password);
+ } else {
+ // users which already have a key-pair will be stored with a
+ // empty password and filtered out later
+ $this->userPasswords[$user] = '';
+ }
+ }
+ $offset += $limit;
+ } while(count($users) >= $limit);
+ }
+
+ $progress->setMessage('Key-pair created for all users');
+ $progress->finish();
+ }
+
+ /**
+ * iterate over all user and encrypt their files
+ */
+ protected function encryptAllUsersFiles() {
+ $this->output->writeln("\n");
+ $progress = new ProgressBar($this->output);
+ $progress->setFormat(" %message% \n [%bar%]");
+ $progress->start();
+ $numberOfUsers = count($this->userPasswords);
+ $userNo = 1;
+ foreach ($this->userPasswords as $uid => $password) {
+ $userCount = "$uid ($userNo of $numberOfUsers)";
+ $this->encryptUsersFiles($uid, $progress, $userCount);
+ $userNo++;
+ }
+ $progress->setMessage("all files encrypted");
+ $progress->finish();
+
+ }
+
+ /**
+ * encrypt files from the given user
+ *
+ * @param string $uid
+ * @param ProgressBar $progress
+ * @param string $userCount
+ */
+ protected function encryptUsersFiles($uid, ProgressBar $progress, $userCount) {
+
+ $this->setupUserFS($uid);
+ $directories = array();
+ $directories[] = '/' . $uid . '/files';
+
+ while($root = array_pop($directories)) {
+ $content = $this->rootView->getDirectoryContent($root);
+ foreach ($content as $file) {
+ $path = $root . '/' . $file['name'];
+ if ($this->rootView->is_dir($path)) {
+ $directories[] = $path;
+ continue;
+ } else {
+ $progress->setMessage("encrypt files for user $userCount: $path");
+ $progress->advance();
+ if($this->encryptFile($path) === false) {
+ $progress->setMessage("encrypt files for user $userCount: $path (already encrypted)");
+ $progress->advance();
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * encrypt file
+ *
+ * @param string $path
+ * @return bool
+ */
+ protected function encryptFile($path) {
+
+ $source = $path;
+ $target = $path . '.encrypted.' . time();
+
+ try {
+ $this->rootView->copy($source, $target);
+ $this->rootView->rename($target, $source);
+ } catch (DecryptionFailedException $e) {
+ if ($this->rootView->file_exists($target)) {
+ $this->rootView->unlink($target);
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * output one-time encryption passwords
+ */
+ protected function outputPasswords() {
+ $table = new Table($this->output);
+ $table->setHeaders(array('Username', 'Private key password'));
+
+ //create rows
+ $newPasswords = array();
+ $unchangedPasswords = array();
+ foreach ($this->userPasswords as $uid => $password) {
+ if (empty($password)) {
+ $unchangedPasswords[] = $uid;
+ } else {
+ $newPasswords[] = [$uid, $password];
+ }
+ }
+ $table->setRows($newPasswords);
+ $table->render();
+
+ if (!empty($unchangedPasswords)) {
+ $this->output->writeln("\nThe following users already had a key-pair which was reused without setting a new password:\n");
+ foreach ($unchangedPasswords as $uid) {
+ $this->output->writeln(" $uid");
+ }
+ }
+
+ $this->writePasswordsToFile($newPasswords);
+
+ $this->output->writeln('');
+ $question = new ConfirmationQuestion('Do you want to send the passwords directly to the users by mail? (y/n) ', false);
+ if ($this->questionHelper->ask($this->input, $this->output, $question)) {
+ $this->sendPasswordsByMail();
+ }
+ }
+
+ /**
+ * write one-time encryption passwords to a csv file
+ *
+ * @param array $passwords
+ */
+ protected function writePasswordsToFile(array $passwords) {
+ $fp = $this->rootView->fopen('oneTimeEncryptionPasswords.csv', 'w');
+ foreach ($passwords as $pwd) {
+ fputcsv($fp, $pwd);
+ }
+ fclose($fp);
+ $this->output->writeln("\n");
+ $this->output->writeln('A list of all newly created passwords was written to data/oneTimeEncryptionPasswords.csv');
+ $this->output->writeln('');
+ $this->output->writeln('Each of these users need to login to the web interface, go to the');
+ $this->output->writeln('personal settings section "ownCloud basic encryption module" and');
+ $this->output->writeln('update the private key password to match the login password again by');
+ $this->output->writeln('entering the one-time password into the "old log-in password" field');
+ $this->output->writeln('and their current login password');
+ }
+
+ /**
+ * setup user file system
+ *
+ * @param string $uid
+ */
+ protected function setupUserFS($uid) {
+ \OC_Util::tearDownFS();
+ \OC_Util::setupFS($uid);
+ }
+
+ /**
+ * generate one time password for the user and store it in a array
+ *
+ * @param string $uid
+ * @return string password
+ */
+ protected function generateOneTimePassword($uid) {
+ $password = $this->secureRandom->getMediumStrengthGenerator()->generate(8);
+ $this->userPasswords[$uid] = $password;
+ return $password;
+ }
+
+ /**
+ * send encryption key passwords to the users by mail
+ */
+ protected function sendPasswordsByMail() {
+ $noMail = [];
+
+ $this->output->writeln('');
+ $progress = new ProgressBar($this->output, count($this->userPasswords));
+ $progress->start();
+
+ foreach ($this->userPasswords as $recipient => $password) {
+ $progress->advance();
+ if (!empty($password)) {
+ $recipientDisplayName = $this->userManager->get($recipient)->getDisplayName();
+ $to = $this->config->getUserValue($recipient, 'settings', 'email', '');
+
+ if ($to === '') {
+ $noMail[] = $recipient;
+ continue;
+ }
+
+ $subject = (string)$this->l->t('one-time password for server-side-encryption');
+ list($htmlBody, $textBody) = $this->createMailBody($password);
+
+ // send it out now
+ try {
+ $message = $this->mailer->createMessage();
+ $message->setSubject($subject);
+ $message->setTo([$to => $recipientDisplayName]);
+ $message->setHtmlBody($htmlBody);
+ $message->setPlainBody($textBody);
+ $message->setFrom([
+ \OCP\Util::getDefaultEmailAddress('admin-noreply')
+ ]);
+
+ $this->mailer->send($message);
+ } catch (\Exception $e) {
+ $noMail[] = $recipient;
+ }
+ }
+ }
+
+ $progress->finish();
+
+ if (empty($noMail)) {
+ $this->output->writeln("\n\nPassword successfully send to all users");
+ } else {
+ $table = new Table($this->output);
+ $table->setHeaders(array('Username', 'Private key password'));
+ $this->output->writeln("\n\nCould not send password to following users:\n");
+ $rows = [];
+ foreach ($noMail as $uid) {
+ $rows[] = [$uid, $this->userPasswords[$uid]];
+ }
+ $table->setRows($rows);
+ $table->render();
+ }
+
+ }
+
+ /**
+ * create mail body for plain text and html mail
+ *
+ * @param string $password one-time encryption password
+ * @return array an array of the html mail body and the plain text mail body
+ */
+ protected function createMailBody($password) {
+
+ $html = new \OC_Template("encryption", "mail", "");
+ $html->assign ('password', $password);
+ $htmlMail = $html->fetchPage();
+
+ $plainText = new \OC_Template("encryption", "altmail", "");
+ $plainText->assign ('password', $password);
+ $plainTextMail = $plainText->fetchPage();
+
+ return [$htmlMail, $plainTextMail];
+ }
+
+}
diff --git a/apps/encryption/lib/crypto/encryption.php b/apps/encryption/lib/crypto/encryption.php
index 1fa0581506b..c62afac83c1 100644
--- a/apps/encryption/lib/crypto/encryption.php
+++ b/apps/encryption/lib/crypto/encryption.php
@@ -35,6 +35,8 @@ use OCP\Encryption\IEncryptionModule;
use OCA\Encryption\KeyManager;
use OCP\IL10N;
use OCP\ILogger;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
class Encryption implements IEncryptionModule {
@@ -79,24 +81,34 @@ class Encryption implements IEncryptionModule {
/** @var IL10N */
private $l;
+ /** @var EncryptAll */
+ private $encryptAll;
+
+ /** @var bool */
+ private $useMasterPassword;
+
/**
*
* @param Crypt $crypt
* @param KeyManager $keyManager
* @param Util $util
+ * @param EncryptAll $encryptAll
* @param ILogger $logger
* @param IL10N $il10n
*/
public function __construct(Crypt $crypt,
KeyManager $keyManager,
Util $util,
+ EncryptAll $encryptAll,
ILogger $logger,
IL10N $il10n) {
$this->crypt = $crypt;
$this->keyManager = $keyManager;
$this->util = $util;
+ $this->encryptAll = $encryptAll;
$this->logger = $logger;
$this->l = $il10n;
+ $this->useMasterPassword = $util->isMasterKeyEnabled();
}
/**
@@ -185,23 +197,26 @@ class Encryption implements IEncryptionModule {
$this->writeCache = '';
}
$publicKeys = array();
- foreach ($this->accessList['users'] as $uid) {
- try {
- $publicKeys[$uid] = $this->keyManager->getPublicKey($uid);
- } catch (PublicKeyMissingException $e) {
- $this->logger->warning(
- 'no public key found for user "{uid}", user will not be able to read the file',
- ['app' => 'encryption', 'uid' => $uid]
- );
- // if the public key of the owner is missing we should fail
- if ($uid === $this->user) {
- throw $e;
+ if ($this->useMasterPassword === true) {
+ $publicKeys[$this->keyManager->getMasterKeyId()] = $this->keyManager->getPublicMasterKey();
+ } else {
+ foreach ($this->accessList['users'] as $uid) {
+ try {
+ $publicKeys[$uid] = $this->keyManager->getPublicKey($uid);
+ } catch (PublicKeyMissingException $e) {
+ $this->logger->warning(
+ 'no public key found for user "{uid}", user will not be able to read the file',
+ ['app' => 'encryption', 'uid' => $uid]
+ );
+ // if the public key of the owner is missing we should fail
+ if ($uid === $this->user) {
+ throw $e;
+ }
}
}
}
$publicKeys = $this->keyManager->addSystemKeys($this->accessList, $publicKeys, $this->user);
-
$encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys);
$this->keyManager->setAllFileKeys($this->path, $encryptedKeyfiles);
}
@@ -310,8 +325,12 @@ class Encryption implements IEncryptionModule {
if (!empty($fileKey)) {
$publicKeys = array();
- foreach ($accessList['users'] as $user) {
- $publicKeys[$user] = $this->keyManager->getPublicKey($user);
+ if ($this->useMasterPassword === true) {
+ $publicKeys[$this->keyManager->getMasterKeyId()] = $this->keyManager->getPublicMasterKey();
+ } else {
+ foreach ($accessList['users'] as $user) {
+ $publicKeys[$user] = $this->keyManager->getPublicKey($user);
+ }
}
$publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys, $uid);
@@ -398,6 +417,16 @@ class Encryption implements IEncryptionModule {
}
/**
+ * Initial encryption of all files
+ *
+ * @param InputInterface $input
+ * @param OutputInterface $output write some status information to the terminal during encryption
+ */
+ public function encryptAll(InputInterface $input, OutputInterface $output) {
+ $this->encryptAll->encryptAll($input, $output);
+ }
+
+ /**
* @param string $path
* @return string
*/
diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php
index 8c8c1f8fd78..c4507228878 100644
--- a/apps/encryption/lib/keymanager.php
+++ b/apps/encryption/lib/keymanager.php
@@ -55,6 +55,10 @@ class KeyManager {
*/
private $publicShareKeyId;
/**
+ * @var string
+ */
+ private $masterKeyId;
+ /**
* @var string UserID
*/
private $keyId;
@@ -131,10 +135,20 @@ class KeyManager {
$this->config->setAppValue('encryption', 'publicShareKeyId', $this->publicShareKeyId);
}
+ $this->masterKeyId = $this->config->getAppValue('encryption',
+ 'masterKeyId');
+ if (empty($this->masterKeyId)) {
+ $this->masterKeyId = 'master_' . substr(md5(time()), 0, 8);
+ $this->config->setAppValue('encryption', 'masterKeyId', $this->masterKeyId);
+ }
+
$this->keyId = $userSession && $userSession->isLoggedIn() ? $userSession->getUser()->getUID() : false;
$this->log = $log;
}
+ /**
+ * check if key pair for public link shares exists, if not we create one
+ */
public function validateShareKey() {
$shareKey = $this->getPublicShareKey();
if (empty($shareKey)) {
@@ -146,13 +160,33 @@ class KeyManager {
Encryption::ID);
// Encrypt private key empty passphrase
- $encryptedKey = $this->crypt->symmetricEncryptFileContent($keyPair['privateKey'], '');
+ $encryptedKey = $this->crypt->encryptPrivateKey($keyPair['privateKey'], '');
$header = $this->crypt->generateHeader();
$this->setSystemPrivateKey($this->publicShareKeyId, $header . $encryptedKey);
}
}
/**
+ * check if a key pair for the master key exists, if not we create one
+ */
+ public function validateMasterKey() {
+ $masterKey = $this->getPublicMasterKey();
+ if (empty($masterKey)) {
+ $keyPair = $this->crypt->createKeyPair();
+
+ // Save public key
+ $this->keyStorage->setSystemUserKey(
+ $this->masterKeyId . '.publicKey', $keyPair['publicKey'],
+ Encryption::ID);
+
+ // Encrypt private key with system password
+ $encryptedKey = $this->crypt->encryptPrivateKey($keyPair['privateKey'], $this->getMasterKeyPassword(), $this->masterKeyId);
+ $header = $this->crypt->generateHeader();
+ $this->setSystemPrivateKey($this->masterKeyId, $header . $encryptedKey);
+ }
+ }
+
+ /**
* @return bool
*/
public function recoveryKeyExists() {
@@ -184,8 +218,7 @@ class KeyManager {
*/
public function checkRecoveryPassword($password) {
$recoveryKey = $this->keyStorage->getSystemUserKey($this->recoveryKeyId . '.privateKey', Encryption::ID);
- $decryptedRecoveryKey = $this->crypt->decryptPrivateKey($recoveryKey,
- $password);
+ $decryptedRecoveryKey = $this->crypt->decryptPrivateKey($recoveryKey, $password);
if ($decryptedRecoveryKey) {
return true;
@@ -203,8 +236,8 @@ class KeyManager {
// Save Public Key
$this->setPublicKey($uid, $keyPair['publicKey']);
- $encryptedKey = $this->crypt->symmetricEncryptFileContent($keyPair['privateKey'],
- $password);
+ $encryptedKey = $this->crypt->encryptPrivateKey($keyPair['privateKey'], $password, $uid);
+
$header = $this->crypt->generateHeader();
if ($encryptedKey) {
@@ -226,8 +259,7 @@ class KeyManager {
$keyPair['publicKey'],
Encryption::ID);
- $encryptedKey = $this->crypt->symmetricEncryptFileContent($keyPair['privateKey'],
- $password);
+ $encryptedKey = $this->crypt->encryptPrivateKey($keyPair['privateKey'], $password);
$header = $this->crypt->generateHeader();
if ($encryptedKey) {
@@ -306,10 +338,16 @@ class KeyManager {
$this->session->setStatus(Session::INIT_EXECUTED);
+
try {
- $privateKey = $this->getPrivateKey($uid);
- $privateKey = $this->crypt->decryptPrivateKey($privateKey,
- $passPhrase);
+ if($this->util->isMasterKeyEnabled()) {
+ $uid = $this->getMasterKeyId();
+ $passPhrase = $this->getMasterKeyPassword();
+ $privateKey = $this->getSystemPrivateKey($uid);
+ } else {
+ $privateKey = $this->getPrivateKey($uid);
+ }
+ $privateKey = $this->crypt->decryptPrivateKey($privateKey, $passPhrase, $uid);
} catch (PrivateKeyMissingException $e) {
return false;
} catch (DecryptionFailedException $e) {
@@ -348,6 +386,10 @@ class KeyManager {
public function getFileKey($path, $uid) {
$encryptedFileKey = $this->keyStorage->getFileKey($path, $this->fileKeyId, Encryption::ID);
+ if ($this->util->isMasterKeyEnabled()) {
+ $uid = $this->getMasterKeyId();
+ }
+
if (is_null($uid)) {
$uid = $this->getPublicShareKeyId();
$shareKey = $this->getShareKey($path, $uid);
@@ -569,4 +611,37 @@ class KeyManager {
return $publicKeys;
}
+
+ /**
+ * get master key password
+ *
+ * @return string
+ * @throws \Exception
+ */
+ protected function getMasterKeyPassword() {
+ $password = $this->config->getSystemValue('secret');
+ if (empty($password)){
+ throw new \Exception('Can not get secret from ownCloud instance');
+ }
+
+ return $password;
+ }
+
+ /**
+ * return master key id
+ *
+ * @return string
+ */
+ public function getMasterKeyId() {
+ return $this->masterKeyId;
+ }
+
+ /**
+ * get public master key
+ *
+ * @return string
+ */
+ public function getPublicMasterKey() {
+ return $this->keyStorage->getSystemUserKey($this->masterKeyId . '.publicKey', Encryption::ID);
+ }
}
diff --git a/apps/encryption/lib/recovery.php b/apps/encryption/lib/recovery.php
index e31a14fba63..b22e3265628 100644
--- a/apps/encryption/lib/recovery.php
+++ b/apps/encryption/lib/recovery.php
@@ -136,7 +136,7 @@ class Recovery {
public function changeRecoveryKeyPassword($newPassword, $oldPassword) {
$recoveryKey = $this->keyManager->getSystemPrivateKey($this->keyManager->getRecoveryKeyId());
$decryptedRecoveryKey = $this->crypt->decryptPrivateKey($recoveryKey, $oldPassword);
- $encryptedRecoveryKey = $this->crypt->symmetricEncryptFileContent($decryptedRecoveryKey, $newPassword);
+ $encryptedRecoveryKey = $this->crypt->encryptPrivateKey($decryptedRecoveryKey, $newPassword);
$header = $this->crypt->generateHeader();
if ($encryptedRecoveryKey) {
$this->keyManager->setSystemPrivateKey($this->keyManager->getRecoveryKeyId(), $header . $encryptedRecoveryKey);
@@ -263,8 +263,7 @@ class Recovery {
public function recoverUsersFiles($recoveryPassword, $user) {
$encryptedKey = $this->keyManager->getSystemPrivateKey($this->keyManager->getRecoveryKeyId());
- $privateKey = $this->crypt->decryptPrivateKey($encryptedKey,
- $recoveryPassword);
+ $privateKey = $this->crypt->decryptPrivateKey($encryptedKey, $recoveryPassword);
$this->recoverAllFiles('/' . $user . '/files/', $privateKey, $user);
}
diff --git a/apps/encryption/lib/users/setup.php b/apps/encryption/lib/users/setup.php
index f224826ed52..d4f7c374547 100644
--- a/apps/encryption/lib/users/setup.php
+++ b/apps/encryption/lib/users/setup.php
@@ -76,12 +76,15 @@ class Setup {
}
/**
+ * check if user has a key pair, if not we create one
+ *
* @param string $uid userid
* @param string $password user password
* @return bool
*/
public function setupServerSide($uid, $password) {
$this->keyManager->validateShareKey();
+ $this->keyManager->validateMasterKey();
// Check if user already has keys
if (!$this->keyManager->userHasKeys($uid)) {
return $this->keyManager->storeKeyPair($uid, $password,
diff --git a/apps/encryption/lib/util.php b/apps/encryption/lib/util.php
index fbedc5d6077..e9f916eff38 100644
--- a/apps/encryption/lib/util.php
+++ b/apps/encryption/lib/util.php
@@ -102,6 +102,16 @@ class Util {
}
/**
+ * check if master key is enabled
+ *
+ * @return bool
+ */
+ public function isMasterKeyEnabled() {
+ $userMasterKey = $this->config->getAppValue('encryption', 'useMasterKey', '0');
+ return ($userMasterKey === '1');
+ }
+
+ /**
* @param $enabled
* @return bool
*/
diff --git a/apps/encryption/templates/altmail.php b/apps/encryption/templates/altmail.php
new file mode 100644
index 00000000000..b92c6b4a7c4
--- /dev/null
+++ b/apps/encryption/templates/altmail.php
@@ -0,0 +1,16 @@
+<?php
+/** @var OC_Theme $theme */
+/** @var array $_ */
+
+print_unescaped($l->t("Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n", array($_['password'])));
+if ( isset($_['expiration']) ) {
+ print_unescaped($l->t("The share will expire on %s.", array($_['expiration'])));
+ print_unescaped("\n\n");
+}
+// TRANSLATORS term at the end of a mail
+p($l->t("Cheers!"));
+?>
+
+ --
+<?php p($theme->getName() . ' - ' . $theme->getSlogan()); ?>
+<?php print_unescaped("\n".$theme->getBaseUrl());
diff --git a/apps/encryption/templates/mail.php b/apps/encryption/templates/mail.php
new file mode 100644
index 00000000000..2b61e915dec
--- /dev/null
+++ b/apps/encryption/templates/mail.php
@@ -0,0 +1,39 @@
+<?php
+/** @var OC_Theme $theme */
+/** @var array $_ */
+?>
+<table cellspacing="0" cellpadding="0" border="0" width="100%">
+ <tr><td>
+ <table cellspacing="0" cellpadding="0" border="0" width="600px">
+ <tr>
+ <td bgcolor="<?php p($theme->getMailHeaderColor());?>" width="20px">&nbsp;</td>
+ <td bgcolor="<?php p($theme->getMailHeaderColor());?>">
+ <img src="<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
+ </td>
+ </tr>
+ <tr><td colspan="2">&nbsp;</td></tr>
+ <tr>
+ <td width="20px">&nbsp;</td>
+ <td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;">
+ <?php
+ print_unescaped($l->t('Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section "ownCloud basic encryption module" of your personal settings and update your encryption password by entering this password into the "old log-in password" field and your current login-password.<br><br>', array($_['password'])));
+ // TRANSLATORS term at the end of a mail
+ p($l->t('Cheers!'));
+ ?>
+ </td>
+ </tr>
+ <tr><td colspan="2">&nbsp;</td></tr>
+ <tr>
+ <td width="20px">&nbsp;</td>
+ <td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;">--<br>
+ <?php p($theme->getName()); ?> -
+ <?php p($theme->getSlogan()); ?>
+ <br><a href="<?php p($theme->getBaseUrl()); ?>"><?php p($theme->getBaseUrl());?></a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">&nbsp;</td>
+ </tr>
+ </table>
+ </td></tr>
+</table>
diff --git a/apps/encryption/tests/command/testenablemasterkey.php b/apps/encryption/tests/command/testenablemasterkey.php
new file mode 100644
index 00000000000..c905329269e
--- /dev/null
+++ b/apps/encryption/tests/command/testenablemasterkey.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\Encryption\Tests\Command;
+
+
+use OCA\Encryption\Command\EnableMasterKey;
+use Test\TestCase;
+
+class TestEnableMasterKey extends TestCase {
+
+ /** @var EnableMasterKey */
+ protected $enableMasterKey;
+
+ /** @var Util | \PHPUnit_Framework_MockObject_MockObject */
+ protected $util;
+
+ /** @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject */
+ protected $config;
+
+ /** @var \Symfony\Component\Console\Helper\QuestionHelper | \PHPUnit_Framework_MockObject_MockObject */
+ protected $questionHelper;
+
+ /** @var \Symfony\Component\Console\Output\OutputInterface | \PHPUnit_Framework_MockObject_MockObject */
+ protected $output;
+
+ /** @var \Symfony\Component\Console\Input\InputInterface | \PHPUnit_Framework_MockObject_MockObject */
+ protected $input;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->util = $this->getMockBuilder('OCA\Encryption\Util')
+ ->disableOriginalConstructor()->getMock();
+ $this->config = $this->getMockBuilder('OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')
+ ->disableOriginalConstructor()->getMock();
+ $this->output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')
+ ->disableOriginalConstructor()->getMock();
+ $this->input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->enableMasterKey = new EnableMasterKey($this->util, $this->config, $this->questionHelper);
+ }
+
+ /**
+ * @dataProvider dataTestExecute
+ *
+ * @param bool $isAlreadyEnabled
+ * @param string $answer
+ */
+ public function testExecute($isAlreadyEnabled, $answer) {
+
+ $this->util->expects($this->once())->method('isMasterKeyEnabled')
+ ->willReturn($isAlreadyEnabled);
+
+ if ($isAlreadyEnabled) {
+ $this->output->expects($this->once())->method('writeln')
+ ->with('Master key already enabled');
+ } else {
+ if ($answer === 'y') {
+ $this->questionHelper->expects($this->once())->method('ask')->willReturn(true);
+ $this->config->expects($this->once())->method('setAppValue')
+ ->with('encryption', 'useMasterKey', '1');
+ } else {
+ $this->questionHelper->expects($this->once())->method('ask')->willReturn(false);
+ $this->config->expects($this->never())->method('setAppValue');
+
+ }
+ }
+
+ $this->invokePrivate($this->enableMasterKey, 'execute', [$this->input, $this->output]);
+ }
+
+ public function dataTestExecute() {
+ return [
+ [true, ''],
+ [false, 'y'],
+ [false, 'n'],
+ [false, '']
+ ];
+ }
+}
diff --git a/apps/encryption/tests/controller/SettingsControllerTest.php b/apps/encryption/tests/controller/SettingsControllerTest.php
index ed8135b9c4d..34aa5a27a75 100644
--- a/apps/encryption/tests/controller/SettingsControllerTest.php
+++ b/apps/encryption/tests/controller/SettingsControllerTest.php
@@ -54,6 +54,9 @@ class SettingsControllerTest extends TestCase {
/** @var \PHPUnit_Framework_MockObject_MockObject */
private $sessionMock;
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
+ private $ocSessionMock;
+
protected function setUp() {
parent::setUp();
@@ -91,9 +94,11 @@ class SettingsControllerTest extends TestCase {
])
->getMock();
+ $this->ocSessionMock = $this->getMockBuilder('\OCP\ISession')->disableOriginalConstructor()->getMock();
+
$this->userSessionMock->expects($this->any())
->method('getUID')
- ->willReturn('testUser');
+ ->willReturn('testUserUid');
$this->userSessionMock->expects($this->any())
->method($this->anything())
@@ -110,7 +115,8 @@ class SettingsControllerTest extends TestCase {
$this->userSessionMock,
$this->keyManagerMock,
$this->cryptMock,
- $this->sessionMock
+ $this->sessionMock,
+ $this->ocSessionMock
);
}
@@ -122,8 +128,10 @@ class SettingsControllerTest extends TestCase {
$oldPassword = 'old';
$newPassword = 'new';
+ $this->userSessionMock->expects($this->once())->method('getUID')->willReturn('uid');
+
$this->userManagerMock
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('checkPassword')
->willReturn(false);
@@ -171,16 +179,22 @@ class SettingsControllerTest extends TestCase {
$oldPassword = 'old';
$newPassword = 'new';
- $this->userSessionMock
- ->expects($this->once())
- ->method('getUID')
- ->willReturn('testUser');
+ $this->ocSessionMock->expects($this->once())
+ ->method('get')->with('loginname')->willReturn('testUser');
$this->userManagerMock
- ->expects($this->once())
+ ->expects($this->at(0))
+ ->method('checkPassword')
+ ->with('testUserUid', 'new')
+ ->willReturn(false);
+ $this->userManagerMock
+ ->expects($this->at(1))
->method('checkPassword')
+ ->with('testUser', 'new')
->willReturn(true);
+
+
$this->cryptMock
->expects($this->once())
->method('decryptPrivateKey')
@@ -188,7 +202,7 @@ class SettingsControllerTest extends TestCase {
$this->cryptMock
->expects($this->once())
- ->method('symmetricEncryptFileContent')
+ ->method('encryptPrivateKey')
->willReturn('encryptedKey');
$this->cryptMock
@@ -200,7 +214,7 @@ class SettingsControllerTest extends TestCase {
$this->keyManagerMock
->expects($this->once())
->method('setPrivateKey')
- ->with($this->equalTo('testUser'), $this->equalTo('header.encryptedKey'));
+ ->with($this->equalTo('testUserUid'), $this->equalTo('header.encryptedKey'));
$this->sessionMock
->expects($this->once())
diff --git a/apps/encryption/tests/hooks/UserHooksTest.php b/apps/encryption/tests/hooks/UserHooksTest.php
index 921c924d015..aa16a4d8703 100644
--- a/apps/encryption/tests/hooks/UserHooksTest.php
+++ b/apps/encryption/tests/hooks/UserHooksTest.php
@@ -114,7 +114,7 @@ class UserHooksTest extends TestCase {
->willReturnOnConsecutiveCalls(true, false);
$this->cryptMock->expects($this->exactly(4))
- ->method('symmetricEncryptFileContent')
+ ->method('encryptPrivateKey')
->willReturn(true);
$this->cryptMock->expects($this->any())
diff --git a/apps/encryption/tests/lib/KeyManagerTest.php b/apps/encryption/tests/lib/KeyManagerTest.php
index 0bac5e0341b..8f1da623efb 100644
--- a/apps/encryption/tests/lib/KeyManagerTest.php
+++ b/apps/encryption/tests/lib/KeyManagerTest.php
@@ -27,6 +27,7 @@ namespace OCA\Encryption\Tests;
use OCA\Encryption\KeyManager;
+use OCA\Encryption\Session;
use Test\TestCase;
class KeyManagerTest extends TestCase {
@@ -237,30 +238,68 @@ class KeyManagerTest extends TestCase {
}
+ /**
+ * @dataProvider dataTestInit
+ *
+ * @param bool $useMasterKey
+ */
+ public function testInit($useMasterKey) {
+
+ $instance = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ ->setConstructorArgs(
+ [
+ $this->keyStorageMock,
+ $this->cryptMock,
+ $this->configMock,
+ $this->userMock,
+ $this->sessionMock,
+ $this->logMock,
+ $this->utilMock
+ ]
+ )->setMethods(['getMasterKeyId', 'getMasterKeyPassword', 'getSystemPrivateKey', 'getPrivateKey'])
+ ->getMock();
- public function testInit() {
- $this->keyStorageMock->expects($this->any())
- ->method('getUserKey')
- ->with($this->equalTo($this->userId), $this->equalTo('privateKey'))
- ->willReturn('privateKey');
- $this->cryptMock->expects($this->any())
- ->method('decryptPrivateKey')
- ->with($this->equalTo('privateKey'), $this->equalTo('pass'))
- ->willReturn('decryptedPrivateKey');
+ $this->utilMock->expects($this->once())->method('isMasterKeyEnabled')
+ ->willReturn($useMasterKey);
+
+ $this->sessionMock->expects($this->at(0))->method('setStatus')
+ ->with(Session::INIT_EXECUTED);
+
+ $instance->expects($this->any())->method('getMasterKeyId')->willReturn('masterKeyId');
+ $instance->expects($this->any())->method('getMasterKeyPassword')->willReturn('masterKeyPassword');
+ $instance->expects($this->any())->method('getSystemPrivateKey')->with('masterKeyId')->willReturn('privateMasterKey');
+ $instance->expects($this->any())->method('getPrivateKey')->with($this->userId)->willReturn('privateUserKey');
+
+ if($useMasterKey) {
+ $this->cryptMock->expects($this->once())->method('decryptPrivateKey')
+ ->with('privateMasterKey', 'masterKeyPassword', 'masterKeyId')
+ ->willReturn('key');
+ } else {
+ $this->cryptMock->expects($this->once())->method('decryptPrivateKey')
+ ->with('privateUserKey', 'pass', $this->userId)
+ ->willReturn('key');
+ }
+ $this->sessionMock->expects($this->once())->method('setPrivateKey')
+ ->with('key');
- $this->assertTrue(
- $this->instance->init($this->userId, 'pass')
- );
+ $this->assertTrue($instance->init($this->userId, 'pass'));
+ }
+ public function dataTestInit() {
+ return [
+ [true],
+ [false]
+ ];
}
+
public function testSetRecoveryKey() {
$this->keyStorageMock->expects($this->exactly(2))
->method('setSystemUserKey')
->willReturn(true);
$this->cryptMock->expects($this->any())
- ->method('symmetricEncryptFileContent')
+ ->method('encryptPrivateKey')
->with($this->equalTo('privateKey'), $this->equalTo('pass'))
->willReturn('decryptedPrivateKey');
@@ -401,5 +440,92 @@ class KeyManagerTest extends TestCase {
);
}
+ public function testGetMasterKeyId() {
+ $this->assertSame('systemKeyId', $this->instance->getMasterKeyId());
+ }
+
+ public function testGetPublicMasterKey() {
+ $this->keyStorageMock->expects($this->once())->method('getSystemUserKey')
+ ->with('systemKeyId.publicKey', \OCA\Encryption\Crypto\Encryption::ID)
+ ->willReturn(true);
+
+ $this->assertTrue(
+ $this->instance->getPublicMasterKey()
+ );
+ }
+
+ public function testGetMasterKeyPassword() {
+ $this->configMock->expects($this->once())->method('getSystemValue')->with('secret')
+ ->willReturn('password');
+
+ $this->assertSame('password',
+ $this->invokePrivate($this->instance, 'getMasterKeyPassword', [])
+ );
+ }
+
+ /**
+ * @expectedException \Exception
+ */
+ public function testGetMasterKeyPasswordException() {
+ $this->configMock->expects($this->once())->method('getSystemValue')->with('secret')
+ ->willReturn('');
+
+ $this->invokePrivate($this->instance, 'getMasterKeyPassword', []);
+ }
+
+ /**
+ * @dataProvider dataTestValidateMasterKey
+ *
+ * @param $masterKey
+ */
+ public function testValidateMasterKey($masterKey) {
+
+ /** @var \OCA\Encryption\KeyManager | \PHPUnit_Framework_MockObject_MockObject $instance */
+ $instance = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ ->setConstructorArgs(
+ [
+ $this->keyStorageMock,
+ $this->cryptMock,
+ $this->configMock,
+ $this->userMock,
+ $this->sessionMock,
+ $this->logMock,
+ $this->utilMock
+ ]
+ )->setMethods(['getPublicMasterKey', 'setSystemPrivateKey', 'getMasterKeyPassword'])
+ ->getMock();
+
+ $instance->expects($this->once())->method('getPublicMasterKey')
+ ->willReturn($masterKey);
+
+ $instance->expects($this->any())->method('getMasterKeyPassword')->willReturn('masterKeyPassword');
+ $this->cryptMock->expects($this->any())->method('generateHeader')->willReturn('header');
+
+ if(empty($masterKey)) {
+ $this->cryptMock->expects($this->once())->method('createKeyPair')
+ ->willReturn(['publicKey' => 'public', 'privateKey' => 'private']);
+ $this->keyStorageMock->expects($this->once())->method('setSystemUserKey')
+ ->with('systemKeyId.publicKey', 'public', \OCA\Encryption\Crypto\Encryption::ID);
+ $this->cryptMock->expects($this->once())->method('encryptPrivateKey')
+ ->with('private', 'masterKeyPassword', 'systemKeyId')
+ ->willReturn('EncryptedKey');
+ $instance->expects($this->once())->method('setSystemPrivateKey')
+ ->with('systemKeyId', 'headerEncryptedKey');
+ } else {
+ $this->cryptMock->expects($this->never())->method('createKeyPair');
+ $this->keyStorageMock->expects($this->never())->method('setSystemUserKey');
+ $this->cryptMock->expects($this->never())->method('encryptPrivateKey');
+ $instance->expects($this->never())->method('setSystemPrivateKey');
+ }
+
+ $instance->validateMasterKey();
+ }
+
+ public function dataTestValidateMasterKey() {
+ return [
+ ['masterKey'],
+ ['']
+ ];
+ }
}
diff --git a/apps/encryption/tests/lib/RecoveryTest.php b/apps/encryption/tests/lib/RecoveryTest.php
index 8d5d31af0b8..c0624a36be9 100644
--- a/apps/encryption/tests/lib/RecoveryTest.php
+++ b/apps/encryption/tests/lib/RecoveryTest.php
@@ -96,7 +96,7 @@ class RecoveryTest extends TestCase {
->method('decryptPrivateKey');
$this->cryptMock->expects($this->once())
- ->method('symmetricEncryptFileContent')
+ ->method('encryptPrivateKey')
->willReturn(true);
$this->assertTrue($this->instance->changeRecoveryKeyPassword('password',
diff --git a/apps/encryption/tests/lib/UtilTest.php b/apps/encryption/tests/lib/UtilTest.php
index e75e8ea36b4..9988ff93f43 100644
--- a/apps/encryption/tests/lib/UtilTest.php
+++ b/apps/encryption/tests/lib/UtilTest.php
@@ -132,4 +132,25 @@ class UtilTest extends TestCase {
return $default ?: null;
}
+ /**
+ * @dataProvider dataTestIsMasterKeyEnabled
+ *
+ * @param string $value
+ * @param bool $expect
+ */
+ public function testIsMasterKeyEnabled($value, $expect) {
+ $this->configMock->expects($this->once())->method('getAppValue')
+ ->with('encryption', 'useMasterKey', '0')->willReturn($value);
+ $this->assertSame($expect,
+ $this->instance->isMasterKeyEnabled()
+ );
+ }
+
+ public function dataTestIsMasterKeyEnabled() {
+ return [
+ ['0', false],
+ ['1', true]
+ ];
+ }
+
}
diff --git a/apps/encryption/tests/lib/crypto/cryptTest.php b/apps/encryption/tests/lib/crypto/cryptTest.php
index 14ed1513e1e..c6f16e952d7 100644
--- a/apps/encryption/tests/lib/crypto/cryptTest.php
+++ b/apps/encryption/tests/lib/crypto/cryptTest.php
@@ -98,18 +98,41 @@ class cryptTest extends TestCase {
/**
- * test generateHeader
+ * test generateHeader with valid key formats
+ *
+ * @dataProvider dataTestGenerateHeader
*/
- public function testGenerateHeader() {
+ public function testGenerateHeader($keyFormat, $expected) {
$this->config->expects($this->once())
->method('getSystemValue')
->with($this->equalTo('cipher'), $this->equalTo('AES-256-CFB'))
->willReturn('AES-128-CFB');
- $this->assertSame('HBEGIN:cipher:AES-128-CFB:HEND',
- $this->crypt->generateHeader()
- );
+ if ($keyFormat) {
+ $result = $this->crypt->generateHeader($keyFormat);
+ } else {
+ $result = $this->crypt->generateHeader();
+ }
+
+ $this->assertSame($expected, $result);
+ }
+
+ /**
+ * test generateHeader with invalid key format
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testGenerateHeaderInvalid() {
+ $this->crypt->generateHeader('unknown');
+ }
+
+ public function dataTestGenerateHeader() {
+ return [
+ [null, 'HBEGIN:cipher:AES-128-CFB:keyFormat:hash:HEND'],
+ ['password', 'HBEGIN:cipher:AES-128-CFB:keyFormat:password:HEND'],
+ ['hash', 'HBEGIN:cipher:AES-128-CFB:keyFormat:hash:HEND']
+ ];
}
/**
@@ -262,4 +285,97 @@ class cryptTest extends TestCase {
}
+ /**
+ * test return values of valid ciphers
+ *
+ * @dataProvider dataTestGetKeySize
+ */
+ public function testGetKeySize($cipher, $expected) {
+ $result = $this->invokePrivate($this->crypt, 'getKeySize', [$cipher]);
+ $this->assertSame($expected, $result);
+ }
+
+ /**
+ * test exception if cipher is unknown
+ *
+ * @expectedException \InvalidArgumentException
+ */
+ public function testGetKeySizeFailure() {
+ $this->invokePrivate($this->crypt, 'getKeySize', ['foo']);
+ }
+
+ public function dataTestGetKeySize() {
+ return [
+ ['AES-256-CFB', 32],
+ ['AES-128-CFB', 16],
+ ];
+ }
+
+ /**
+ * @dataProvider dataTestDecryptPrivateKey
+ */
+ public function testDecryptPrivateKey($header, $privateKey, $expectedCipher, $isValidKey, $expected) {
+ /** @var \OCA\Encryption\Crypto\Crypt | \PHPUnit_Framework_MockObject_MockObject $crypt */
+ $crypt = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt')
+ ->setConstructorArgs(
+ [
+ $this->logger,
+ $this->userSession,
+ $this->config
+ ]
+ )
+ ->setMethods(
+ [
+ 'parseHeader',
+ 'generatePasswordHash',
+ 'symmetricDecryptFileContent',
+ 'isValidPrivateKey'
+ ]
+ )
+ ->getMock();
+
+ $crypt->expects($this->once())->method('parseHeader')->willReturn($header);
+ if (isset($header['keyFormat']) && $header['keyFormat'] === 'hash') {
+ $crypt->expects($this->once())->method('generatePasswordHash')->willReturn('hash');
+ $password = 'hash';
+ } else {
+ $crypt->expects($this->never())->method('generatePasswordHash');
+ $password = 'password';
+ }
+
+ $crypt->expects($this->once())->method('symmetricDecryptFileContent')
+ ->with('privateKey', $password, $expectedCipher)->willReturn('key');
+ $crypt->expects($this->once())->method('isValidPrivateKey')->willReturn($isValidKey);
+
+ $result = $crypt->decryptPrivateKey($privateKey, 'password');
+
+ $this->assertSame($expected, $result);
+ }
+
+ public function dataTestDecryptPrivateKey() {
+ return [
+ [['cipher' => 'AES-128-CFB', 'keyFormat' => 'password'], 'HBEGIN:HENDprivateKey', 'AES-128-CFB', true, 'key'],
+ [['cipher' => 'AES-256-CFB', 'keyFormat' => 'password'], 'HBEGIN:HENDprivateKey', 'AES-256-CFB', true, 'key'],
+ [['cipher' => 'AES-256-CFB', 'keyFormat' => 'password'], 'HBEGIN:HENDprivateKey', 'AES-256-CFB', false, false],
+ [['cipher' => 'AES-256-CFB', 'keyFormat' => 'hash'], 'HBEGIN:HENDprivateKey', 'AES-256-CFB', true, 'key'],
+ [['cipher' => 'AES-256-CFB'], 'HBEGIN:HENDprivateKey', 'AES-256-CFB', true, 'key'],
+ [[], 'privateKey', 'AES-128-CFB', true, 'key'],
+ ];
+ }
+
+ public function testIsValidPrivateKey() {
+ $res = openssl_pkey_new();
+ openssl_pkey_export($res, $privateKey);
+
+ // valid private key
+ $this->assertTrue(
+ $this->invokePrivate($this->crypt, 'isValidPrivateKey', [$privateKey])
+ );
+
+ // invalid private key
+ $this->assertFalse(
+ $this->invokePrivate($this->crypt, 'isValidPrivateKey', ['foo'])
+ );
+ }
+
}
diff --git a/apps/encryption/tests/lib/crypto/encryptalltest.php b/apps/encryption/tests/lib/crypto/encryptalltest.php
new file mode 100644
index 00000000000..e907d154a2d
--- /dev/null
+++ b/apps/encryption/tests/lib/crypto/encryptalltest.php
@@ -0,0 +1,291 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OCA\Encryption\Tests\lib\Crypto;
+
+
+use OCA\Encryption\Crypto\EncryptAll;
+use Test\TestCase;
+
+class EncryptAllTest extends TestCase {
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCA\Encryption\KeyManager */
+ protected $keyManager;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IUserManager */
+ protected $userManager;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCA\Encryption\Users\Setup */
+ protected $setupUser;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OC\Files\View */
+ protected $view;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IConfig */
+ protected $config;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\Mail\IMailer */
+ protected $mailer;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IL10N */
+ protected $l;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Helper\QuestionHelper */
+ protected $questionHelper;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Input\InputInterface */
+ protected $inputInterface;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Output\OutputInterface */
+ protected $outputInterface;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\UserInterface */
+ protected $userInterface;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\Security\ISecureRandom */
+ protected $secureRandom;
+
+ /** @var EncryptAll */
+ protected $encryptAll;
+
+ function setUp() {
+ parent::setUp();
+ $this->setupUser = $this->getMockBuilder('OCA\Encryption\Users\Setup')
+ ->disableOriginalConstructor()->getMock();
+ $this->keyManager = $this->getMockBuilder('OCA\Encryption\KeyManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->userManager = $this->getMockBuilder('OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->view = $this->getMockBuilder('OC\Files\View')
+ ->disableOriginalConstructor()->getMock();
+ $this->config = $this->getMockBuilder('OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->mailer = $this->getMockBuilder('OCP\Mail\IMailer')
+ ->disableOriginalConstructor()->getMock();
+ $this->l = $this->getMockBuilder('OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper')
+ ->disableOriginalConstructor()->getMock();
+ $this->inputInterface = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')
+ ->disableOriginalConstructor()->getMock();
+ $this->outputInterface = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface')
+ ->disableOriginalConstructor()->getMock();
+ $this->userInterface = $this->getMockBuilder('OCP\UserInterface')
+ ->disableOriginalConstructor()->getMock();
+
+
+ $this->outputInterface->expects($this->any())->method('getFormatter')
+ ->willReturn($this->getMock('\Symfony\Component\Console\Formatter\OutputFormatterInterface'));
+
+ $this->userManager->expects($this->any())->method('getBackends')->willReturn([$this->userInterface]);
+ $this->userInterface->expects($this->any())->method('getUsers')->willReturn(['user1', 'user2']);
+
+ $this->secureRandom = $this->getMockBuilder('OCP\Security\ISecureRandom')->disableOriginalConstructor()->getMock();
+ $this->secureRandom->expects($this->any())->method('getMediumStrengthGenerator')->willReturn($this->secureRandom);
+ $this->secureRandom->expects($this->any())->method('getLowStrengthGenerator')->willReturn($this->secureRandom);
+ $this->secureRandom->expects($this->any())->method('generate')->willReturn('12345678');
+
+
+ $this->encryptAll = new EncryptAll(
+ $this->setupUser,
+ $this->userManager,
+ $this->view,
+ $this->keyManager,
+ $this->config,
+ $this->mailer,
+ $this->l,
+ $this->questionHelper,
+ $this->secureRandom
+ );
+ }
+
+ public function testEncryptAll() {
+ /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
+ $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ ->setConstructorArgs(
+ [
+ $this->setupUser,
+ $this->userManager,
+ $this->view,
+ $this->keyManager,
+ $this->config,
+ $this->mailer,
+ $this->l,
+ $this->questionHelper,
+ $this->secureRandom
+ ]
+ )
+ ->setMethods(['createKeyPairs', 'encryptAllUsersFiles', 'outputPasswords'])
+ ->getMock();
+
+ $encryptAll->expects($this->at(0))->method('createKeyPairs')->with();
+ $encryptAll->expects($this->at(1))->method('encryptAllUsersFiles')->with();
+ $encryptAll->expects($this->at(2))->method('outputPasswords')->with();
+
+ $encryptAll->encryptAll($this->inputInterface, $this->outputInterface);
+
+ }
+
+ public function testCreateKeyPairs() {
+ /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
+ $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ ->setConstructorArgs(
+ [
+ $this->setupUser,
+ $this->userManager,
+ $this->view,
+ $this->keyManager,
+ $this->config,
+ $this->mailer,
+ $this->l,
+ $this->questionHelper,
+ $this->secureRandom
+ ]
+ )
+ ->setMethods(['setupUserFS', 'generateOneTimePassword'])
+ ->getMock();
+
+
+ // set protected property $output
+ $this->invokePrivate($encryptAll, 'output', [$this->outputInterface]);
+
+ $this->keyManager->expects($this->exactly(2))->method('userHasKeys')
+ ->willReturnCallback(
+ function ($user) {
+ if ($user === 'user1') {
+ return false;
+ }
+ return true;
+ }
+ );
+
+ $encryptAll->expects($this->once())->method('setupUserFS')->with('user1');
+ $encryptAll->expects($this->once())->method('generateOneTimePassword')->with('user1')->willReturn('password');
+ $this->setupUser->expects($this->once())->method('setupUser')->with('user1', 'password');
+
+ $this->invokePrivate($encryptAll, 'createKeyPairs');
+
+ $userPasswords = $this->invokePrivate($encryptAll, 'userPasswords');
+
+ // we only expect the skipped user, because generateOneTimePassword which
+ // would set the user with the new password was mocked.
+ // This method will be tested separately
+ $this->assertSame(1, count($userPasswords));
+ $this->assertSame('', $userPasswords['user2']);
+ }
+
+ public function testEncryptAllUsersFiles() {
+ /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
+ $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ ->setConstructorArgs(
+ [
+ $this->setupUser,
+ $this->userManager,
+ $this->view,
+ $this->keyManager,
+ $this->config,
+ $this->mailer,
+ $this->l,
+ $this->questionHelper,
+ $this->secureRandom
+ ]
+ )
+ ->setMethods(['encryptUsersFiles'])
+ ->getMock();
+
+ // set protected property $output
+ $this->invokePrivate($encryptAll, 'output', [$this->outputInterface]);
+ $this->invokePrivate($encryptAll, 'userPasswords', [['user1' => 'pwd1', 'user2' => 'pwd2']]);
+
+ $encryptAll->expects($this->at(0))->method('encryptUsersFiles')->with('user1');
+ $encryptAll->expects($this->at(1))->method('encryptUsersFiles')->with('user2');
+
+ $this->invokePrivate($encryptAll, 'encryptAllUsersFiles');
+
+ }
+
+ public function testEncryptUsersFiles() {
+ /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */
+ $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ ->setConstructorArgs(
+ [
+ $this->setupUser,
+ $this->userManager,
+ $this->view,
+ $this->keyManager,
+ $this->config,
+ $this->mailer,
+ $this->l,
+ $this->questionHelper,
+ $this->secureRandom
+ ]
+ )
+ ->setMethods(['encryptFile'])
+ ->getMock();
+
+
+ $this->view->expects($this->at(0))->method('getDirectoryContent')
+ ->with('/user1/files')->willReturn(
+ [
+ ['name' => 'foo', 'type'=>'dir'],
+ ['name' => 'bar', 'type'=>'file'],
+ ]
+ );
+
+ $this->view->expects($this->at(3))->method('getDirectoryContent')
+ ->with('/user1/files/foo')->willReturn(
+ [
+ ['name' => 'subfile', 'type'=>'file']
+ ]
+ );
+
+ $this->view->expects($this->any())->method('is_dir')
+ ->willReturnCallback(
+ function($path) {
+ if ($path === '/user1/files/foo') {
+ return true;
+ }
+ return false;
+ }
+ );
+
+ $encryptAll->expects($this->at(0))->method('encryptFile')->with('/user1/files/bar');
+ $encryptAll->expects($this->at(1))->method('encryptFile')->with('/user1/files/foo/subfile');
+
+ $progressBar = $this->getMockBuilder('Symfony\Component\Console\Helper\ProgressBar')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->invokePrivate($encryptAll, 'encryptUsersFiles', ['user1', $progressBar, '']);
+
+ }
+
+ public function testGenerateOneTimePassword() {
+ $password = $this->invokePrivate($this->encryptAll, 'generateOneTimePassword', ['user1']);
+ $this->assertTrue(is_string($password));
+ $this->assertSame(8, strlen($password));
+
+ $userPasswords = $this->invokePrivate($this->encryptAll, 'userPasswords');
+ $this->assertSame(1, count($userPasswords));
+ $this->assertSame($password, $userPasswords['user1']);
+ }
+
+}
diff --git a/apps/encryption/tests/lib/crypto/encryptionTest.php b/apps/encryption/tests/lib/crypto/encryptionTest.php
index 7b0b29fe197..f58aa5d3ccb 100644
--- a/apps/encryption/tests/lib/crypto/encryptionTest.php
+++ b/apps/encryption/tests/lib/crypto/encryptionTest.php
@@ -37,6 +37,9 @@ class EncryptionTest extends TestCase {
private $keyManagerMock;
/** @var \PHPUnit_Framework_MockObject_MockObject */
+ private $encryptAllMock;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
private $cryptMock;
/** @var \PHPUnit_Framework_MockObject_MockObject */
@@ -60,6 +63,9 @@ class EncryptionTest extends TestCase {
$this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager')
->disableOriginalConstructor()
->getMock();
+ $this->encryptAllMock = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll')
+ ->disableOriginalConstructor()
+ ->getMock();
$this->loggerMock = $this->getMockBuilder('OCP\ILogger')
->disableOriginalConstructor()
->getMock();
@@ -75,6 +81,7 @@ class EncryptionTest extends TestCase {
$this->cryptMock,
$this->keyManagerMock,
$this->utilMock,
+ $this->encryptAllMock,
$this->loggerMock,
$this->l10nMock
);
diff --git a/apps/encryption/tests/lib/users/SetupTest.php b/apps/encryption/tests/lib/users/SetupTest.php
index e6936c5c12e..bca3ff58b07 100644
--- a/apps/encryption/tests/lib/users/SetupTest.php
+++ b/apps/encryption/tests/lib/users/SetupTest.php
@@ -43,6 +43,8 @@ class SetupTest extends TestCase {
private $instance;
public function testSetupServerSide() {
+ $this->keyManagerMock->expects($this->exactly(2))->method('validateShareKey');
+ $this->keyManagerMock->expects($this->exactly(2))->method('validateMasterKey');
$this->keyManagerMock->expects($this->exactly(2))
->method('userHasKeys')
->with('admin')
diff --git a/apps/encryption/vendor/pbkdf2fallback.php b/apps/encryption/vendor/pbkdf2fallback.php
new file mode 100644
index 00000000000..ca579f8e7dc
--- /dev/null
+++ b/apps/encryption/vendor/pbkdf2fallback.php
@@ -0,0 +1,87 @@
+<?php
+/* Note; This class can be removed as soon as we drop PHP 5.4 support.
+ *
+ *
+ * Password Hashing With PBKDF2 (http://crackstation.net/hashing-security.htm).
+ * Copyright (c) 2013, Taylor Hornby
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+namespace OCA\Encryption\Vendor;
+
+class PBKDF2Fallback {
+
+ /*
+ * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt
+ * $algorithm - The hash algorithm to use. Recommended: SHA256
+ * $password - The password.
+ * $salt - A salt that is unique to the password.
+ * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000.
+ * $key_length - The length of the derived key in bytes.
+ * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise.
+ * Returns: A $key_length-byte key derived from the password and salt.
+ *
+ * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt
+ *
+ * This implementation of PBKDF2 was originally created by https://defuse.ca
+ * With improvements by http://www.variations-of-shadow.com
+ */
+ public function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false) {
+ $algorithm = strtolower($algorithm);
+ if (!in_array($algorithm, hash_algos(), true))
+ trigger_error('PBKDF2 ERROR: Invalid hash algorithm.', E_USER_ERROR);
+ if ($count <= 0 || $key_length <= 0)
+ trigger_error('PBKDF2 ERROR: Invalid parameters.', E_USER_ERROR);
+
+ if (function_exists("hash_pbkdf2")) {
+ // The output length is in NIBBLES (4-bits) if $raw_output is false!
+ if (!$raw_output) {
+ $key_length = $key_length * 2;
+ }
+ return hash_pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output);
+ }
+
+ $hash_length = strlen(hash($algorithm, "", true));
+ $block_count = ceil($key_length / $hash_length);
+
+ $output = "";
+ for ($i = 1; $i <= $block_count; $i++) {
+ // $i encoded as 4 bytes, big endian.
+ $last = $salt . pack("N", $i);
+ // first iteration
+ $last = $xorsum = hash_hmac($algorithm, $last, $password, true);
+ // perform the other $count - 1 iterations
+ for ($j = 1; $j < $count; $j++) {
+ $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true));
+ }
+ $output .= $xorsum;
+ }
+
+ if ($raw_output)
+ return substr($output, 0, $key_length);
+ else
+ return bin2hex(substr($output, 0, $key_length));
+ }
+}