ok; still some bugs that had to be fixed

This commit is contained in:
jknockaert 2014-10-20 00:28:41 +02:00
parent 3be57d0169
commit 1b7e9d66b3
1 changed files with 36 additions and 40 deletions

View File

@ -392,59 +392,55 @@ class Util {
$size = $this->view->filesize($path);
// open stream
$stream = fopen($path, "r");
// if the file contains a encryption header we
// we set the cipher
// and we update the size
if ($this->containHeader($path)) {
$data = fread($stream,Crypt::BLOCKSIZE);
$header = Crypt::parseHeader($data);
$cipher = Crypt::getCipher($header);
$size -= Crypt::BLOCKSIZE;
}
// fast path, else the calculation for $lastChunkNr is bogus
if ($size === 0) {
\OC_FileProxy::$enabled = $proxyStatus;
return 0;
}
// calculate last chunk nr
// next highest is end of chunks, one subtracted is last one
// we have to read the last chunk, we can't just calculate it (because of padding etc)
$lastChunkNr = ceil($size/Crypt::BLOCKSIZE)-1;
$stream = $this->view->fopen($path, "r");
if (is_resource($stream)) {
// if the file contains a encryption header we
// we set the cipher
// and we update the size
if ($this->containHeader($path)) {
$data = fread($stream,Crypt::BLOCKSIZE);
$header = Crypt::parseHeader($data);
$cipher = Crypt::getCipher($header);
$size -= Crypt::BLOCKSIZE;
}
// fast path, else the calculation for $lastChunkNr is bogus
if ($size === 0) {
\OC_FileProxy::$enabled = $proxyStatus;
return 0;
}
// calculate last chunk nr
// next highest is end of chunks, one subtracted is last one
// we have to read the last chunk, we can't just calculate it (because of padding etc)
$lastChunkNr = ceil($size/Crypt::BLOCKSIZE)-1;
// calculate last chunk position
$lastChunkPos = ($lastChunkNr * Crypt::BLOCKSIZE);
// get the content of the last chunk
$lastChunkContentEncrypted='';
$count=Crypt::BLOCKSIZE;
if (@fseek($stream, $lastChunkPos, SEEK_CUR) === 0) {
$realSize+=$lastChunkNr*6126;
while ($count>0) {
$data=fread($stream,Crypt::BLOCKSIZE);
$count=strlen($data);
$lastChunkContentEncrypted.=$data;
}
} else {
while ($count>0) {
if(strlen($lastChunkContentEncrypted)>Crypt::BLOCKSIZE) {
$realSize+=6126;
$lastChunkContentEncrypted=substr($lastChunkContentEncrypted,Crypt::BLOCKSIZE);
}
$data=fread($stream,Crypt::BLOCKSIZE);
$count=strlen($data);
$lastChunkContentEncrypted.=$data;
}
$lastChunkContentEncrypted='';
$count=Crypt::BLOCKSIZE;
while ($count>0) {
$data=fread($stream,Crypt::BLOCKSIZE);
$count=strlen($data);
$lastChunkContentEncrypted.=$data;
if(strlen($lastChunkContentEncrypted)>Crypt::BLOCKSIZE) {
$realSize+=6126;
$lastChunkContentEncrypted=substr($lastChunkContentEncrypted,Crypt::BLOCKSIZE);
}
}
$relPath = \OCA\Encryption\Helper::stripUserFilesPath($path);
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
$privateKey = $session->getPrivateKey();
$plainKeyfile = $this->decryptKeyfile($path, $privateKey);
$shareKey = Keymanager::getShareKey($this->view, $this->keyId, $this, $path);
$plainKeyfile = $this->decryptKeyfile($relPath, $privateKey);
$shareKey = Keymanager::getShareKey($this->view, $this->keyId, $this, $relPath);
$plainKey = Crypt::multiKeyDecrypt($plainKeyfile, $shareKey, $privateKey);