示例#1
0
 /**
  * @brief Decrypt a keyfile without knowing how it was encrypted
  * @param string $filePath
  * @param string $fileOwner
  * @param string $privateKey
  * @return bool|string
  * @note Checks whether file was encrypted with openssl_seal or
  *       openssl_encrypt, and decrypts accrdingly
  * @note This was used when 2 types of encryption for keyfiles was used,
  *       but now we've switched to exclusively using openssl_seal()
  */
 public function decryptUnknownKeyfile($filePath, $fileOwner, $privateKey)
 {
     // Get the encrypted keyfile
     // NOTE: the keyfile format depends on how it was encrypted! At
     // this stage we don't know how it was encrypted
     $encKeyfile = Keymanager::getFileKey($this->view, $this->userId, $filePath);
     // We need to decrypt the keyfile
     // Has the file been shared yet?
     if ($this->userId === $fileOwner && !Keymanager::getShareKey($this->view, $this->userId, $filePath)) {
         // The file has no shareKey, and its keyfile must be
         // decrypted conventionally
         $plainKeyfile = Crypt::keyDecrypt($encKeyfile, $privateKey);
     } else {
         // The file has a shareKey and must use it for decryption
         $shareKey = Keymanager::getShareKey($this->view, $this->userId, $filePath);
         $plainKeyfile = Crypt::multiKeyDecrypt($encKeyfile, $shareKey, $privateKey);
     }
     return $plainKeyfile;
 }