Esempio n. 1
0
 /**
  * Procesar los datos encriptados y añadirlos al árbol DOM desencriptados
  */
 protected function processEncrypted()
 {
     foreach ($this->_xmlDOM->getElementsByTagName('Data') as $node) {
         $data = base64_decode($node->nodeValue);
         $iv = base64_decode($node->getAttribute('iv'));
         $xmlDecrypted = Crypt::getDecrypt($data, $iv, $this->getImportPass());
         $newXmlData = new \DOMDocument();
         //            $newXmlData->preserveWhiteSpace = true;
         $newXmlData->loadXML($xmlDecrypted);
         $newNode = $this->_xmlDOM->importNode($newXmlData->documentElement, TRUE);
         $this->_xmlDOM->documentElement->appendChild($newNode);
     }
     // Eliminar los datos encriptados tras desencriptar los mismos
     if ($this->_xmlDOM->getElementsByTagName('Data')->length > 0) {
         $nodeData = $this->_xmlDOM->getElementsByTagName('Encrypted')->item(0);
         $nodeData->parentNode->removeChild($nodeData);
     }
 }
Esempio n. 2
0
 /**
  * Actualizar los datos encriptados con una nueva clave
  *
  * @param string $currentMasterPass La clave maestra actual
  * @param string $newMasterPassword La nueva clave maestra
  * @return bool
  * @throws SPException
  */
 public static function updateCustomFieldsCrypt($currentMasterPass, $newMasterPassword)
 {
     $Log = new Log();
     $Log->setAction(_('Campos Personalizados'));
     $query = 'SELECT customfielddata_id, customfielddata_data, customfielddata_iv FROM customFieldsData';
     DB::setReturnArray();
     $queryRes = DB::getResults($query, __FUNCTION__);
     if ($queryRes === false) {
         $Log->addDescription(_('Fin'));
         $Log->writeLog();
         return true;
     }
     $Log->addDescription(_('Actualizando datos encriptados'));
     $Log->writeLog(true);
     $errors = array();
     $success = array();
     foreach ($queryRes as $customField) {
         $fieldData = Crypt::getDecrypt($customField->customfielddata_data, $customField->customfielddata_iv, $currentMasterPass);
         $fieldCryptData = Crypt::encryptData($fieldData, $newMasterPassword);
         $query = 'UPDATE customFieldsData SET ' . 'customfielddata_data = :data, ' . 'customfielddata_iv = :iv ' . 'WHERE customfielddata_id = :id ';
         $data['id'] = $customField->customfielddata_id;
         $data['data'] = $fieldCryptData['data'];
         $data['iv'] = $fieldCryptData['iv'];
         if (DB::getQuery($query, __FUNCTION__, $data) === false) {
             $errors[] = $customField->customfielddata_id;
         } else {
             $success[] = $customField->customfielddata_id;
         }
     }
     if (count($errors) > 0) {
         $Log->addDescription(_('Registros no actualizados') . ': ' . implode(',', $errors));
         $Log->writeLog(true);
     }
     if (count($success) > 0) {
         $Log->addDescription(_('Registros actualizados') . ': ' . implode(',', $success));
         $Log->writeLog(true);
     }
     $Log->addDescription(_('Fin'));
     $Log->writeLog();
     return count($errors) === 0;
 }
Esempio n. 3
0
 /**
  * Desencriptar la clave maestra de la sesión.
  *
  * @return string con la clave maestra
  */
 public static function getSessionMPass()
 {
     $cryptPass = Crypt::generateAesKey(session_id());
     return Crypt::getDecrypt(Session::getMPass(), Session::getMPassIV(), $cryptPass);
 }
Esempio n. 4
0
 /**
  * Desencriptar la clave maestra del usuario para la sesión.
  *
  * @param bool $showPass opcional, para devolver la clave desencriptada
  * @return false|string Devuelve bool se hay error o string si se devuelve la clave
  */
 public function getUserMPass($showPass = false)
 {
     $query = 'SELECT user_mPass, user_mIV FROM usrData WHERE user_id = :id LIMIT 1';
     $data['id'] = $this->_userId;
     $queryRes = DB::getResults($query, __FUNCTION__, $data);
     if ($queryRes === false) {
         return false;
     }
     if ($queryRes->user_mPass && $queryRes->user_mIV) {
         $clearMasterPass = Crypt::getDecrypt($queryRes->user_mPass, $queryRes->user_mIV, $this->getCypherPass());
         if (!$clearMasterPass) {
             return false;
         }
         return $showPass === true ? $clearMasterPass : SessionUtil::saveSessionMPass($clearMasterPass);
     }
     return false;
 }
Esempio n. 5
0
 /**
  * Actualiza las claves de todas las cuentas con la nueva clave maestra.
  *
  * @param string $currentMasterPass con la clave maestra actual
  * @param string $newMasterPass     con la nueva clave maestra
  * @param string $newHash           con el nuevo hash de la clave maestra
  * @return bool
  */
 public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null)
 {
     $accountsOk = array();
     $userId = Session::getUserId();
     $demoEnabled = Util::demoIsEnabled();
     $errorCount = 0;
     $Log = new Log(_('Actualizar Clave Maestra'));
     $Log->addDescription(_('Inicio'));
     $Log->writeLog();
     $Log->resetDescription();
     if (!Crypt::checkCryptModule()) {
         $Log->addDescription(_('Error en el módulo de encriptación'));
         $Log->writeLog();
         return false;
     }
     $accountsPass = $this->getAccountsPassData();
     if (!$accountsPass) {
         $Log->addDescription(_('Error al obtener las claves de las cuentas'));
         $Log->writeLog();
         return false;
     }
     foreach ($accountsPass as $account) {
         $this->setAccountId($account->account_id);
         $this->setAccountUserEditId($userId);
         // No realizar cambios si está en modo demo
         if ($demoEnabled) {
             $accountsOk[] = $this->getAccountId();
             continue;
         }
         if (strlen($account->account_pass) === 0) {
             $Log->addDescription(_('Clave de cuenta vacía') . ' (' . $account->account_id . ') ' . $account->account_name);
             continue;
         }
         if (strlen($account->account_IV) < 32) {
             $Log->addDescription(_('IV de encriptación incorrecto') . ' (' . $account->account_id . ') ' . $account->account_name);
         }
         $decryptedPass = Crypt::getDecrypt($account->account_pass, $account->account_IV);
         $this->setAccountPass(Crypt::mkEncrypt($decryptedPass, $newMasterPass));
         $this->setAccountIV(Crypt::$strInitialVector);
         if ($this->getAccountPass() === false) {
             $errorCount++;
             $Log->addDescription(_('No es posible desencriptar la clave de la cuenta') . ' (' . $account->account_id . ') ' . $account->account_name);
             continue;
         }
         if (!$this->updateAccountPass(true)) {
             $errorCount++;
             $Log->addDescription(_('Fallo al actualizar la clave de la cuenta') . ' (' . $this->getAccountId() . ') ' . $account->acchistory_name);
             continue;
         }
         $accountsOk[] = $this->getAccountId();
     }
     // Vaciar el array de mensajes de log
     if (count($Log->getDescription()) > 0) {
         $Log->writeLog();
         $Log->resetDescription();
     }
     if ($accountsOk) {
         $Log->addDescription(_('Cuentas actualizadas') . ': ' . implode(',', $accountsOk));
         $Log->writeLog();
         $Log->resetDescription();
     }
     $Log->addDescription(_('Fin'));
     $Log->writeLog();
     Email::sendEmail($Log);
     return true;
 }
Esempio n. 6
0
 /**
  * Devuelve la clave maestra que ha sido encriptada con la clave temporal
  *
  * @param $pass string con la clave utilizada para encriptar
  * @return string con la clave maestra desencriptada
  */
 public static function getTempMasterPass($pass)
 {
     $passLogin = hex2bin(ConfigDB::getValue('tempmaster_pass'));
     $passLoginIV = hex2bin(ConfigDB::getValue('tempmaster_passiv'));
     return Crypt::getDecrypt($passLogin, $passLoginIV, $pass);
 }