/** * Requête de lecture */ private function select() { // Par défault utilise un select * \Origami\DB::get($this->config->getDataBase())->select("{$this->config->getTable()}.*"); // Si le cryptage est activé et si il y a des champs cryptés if ($this->config->getOrigami('encryption_enable')) { // Les champs cryptés $fields = $this->config->getFieldEncrypt(); // Si il y a des champs cryptés if (!empty($fields)) { foreach ($fields as $field) { \Origami\DB::get($this->config->getDataBase())->select("CONVERT(AES_DECRYPT(FROM_BASE64(`{$field['name']}`), UNHEX('{$this->config->getOrigami('encryption_key')}'), UNHEX(`vector`)) USING 'utf8') AS `{$field['name']}`", FALSE); } } } // Si le binaire est activé et si il y a des champs binaires if ($this->config->getOrigami('binary_enable')) { // Les champs binaires $fields = $this->config->getFieldBinary(); // Si il y a des champs binaires if (!empty($fields)) { foreach ($fields as $field) { \Origami\DB::get($this->config->getDataBase())->select("TO_BASE64(`{$field['name']}`) AS `{$field['name']}`", FALSE); } } } return \Origami\DB::get($this->config->getDataBase()); }
/** * Requête d'écruture */ private function write() { // Liste des champs modifiés $fields = $this->_storage->get(NULL, TRUE); // Si il y a des champs modifiés if (!empty($fields)) { // Si le cryptage est activé et si il y a un champ vecteur if ($this->_config->getOrigami('encryption_enable') && $this->_storage->get('vector') !== FALSE) { // Récupération du champ vecteur $vector = $this->_storage->get('vector'); $value = $vector->getValue(); // Si le vecteur n'a pas de valeur if (empty($value)) { // Créer un vecteur $this->_storage->set('vector', random_string('unique')); // Recharge l'object le vecteur $vector = $this->_storage->get('vector'); // Prépare l'insertion vecteur $this->db()->set($vector->getName(), $vector->getValue(), TRUE); } } // Parcours les champs modifiés foreach ($fields as $field) { // Si le cryptage est activé et qu'il y a des champs crypté if ($this->_config->getOrigami('encryption_enable') && $field->getEncrypt()) { // Récupération du champ vecteur $vector = $this->_storage->get('vector'); // Encryptage de la valeur $this->db()->set("`{$field->getName()}`", "TO_BASE64(AES_ENCRYPT('{$this->db()->escape_str($field->getValue())}', UNHEX('{$this->_config->getOrigami('encryption_key')}'), UNHEX('{$vector->getValue()}')))", FALSE); // Si le champ est un binaire } else { if ($this->_config->getOrigami('binary_enable') && $field->getBinary()) { // Transformation de la valeur $this->db()->set("`{$field->getName()}`", "FROM_BASE64('{$this->db()->escape_str($field->getValue())}')", FALSE); // Si c'est un champ normal } else { $this->db()->set($field->getName(), $field->getValue(), TRUE); } } } } return $this->db(); }