. * */ /** * transparent encryption */ class OC_FileProxy_Encryption extends OC_FileProxy{ public function preFile_put_contents($path,&$data){ if(substr($path,-4)=='.enc'){ OC_Log::write('files_encryption','file put contents',OC_Log::DEBUG); if (is_resource($data)) { $newData=''; while(!feof($data)){ $block=fread($data,8192); $newData.=OC_Crypt::encrypt($block); } $data=$newData; }else{ $data=OC_Crypt::blockEncrypt($data); } } } public function postFile_get_contents($path,$data){ if(substr($path,-4)=='.enc'){ OC_Log::write('files_encryption','file get contents',OC_Log::DEBUG); return OC_Crypt::blockDecrypt($data); } } public function postFopen($path,&$result){ if(substr($path,-4)=='.enc'){ OC_Log::write('files_encryption','fopen',OC_Log::DEBUG); fclose($result); $result=fopen('crypt://'.substr($path,0,-4));//remove the .enc extention so we don't catch the fopen request made by cryptstream } } public function preReadFile($path){ if(substr($path,-4)=='.enc'){ OC_Log::write('files_encryption','readline',OC_Log::DEBUG); $stream=fopen('crypt://'.substr($path,0,-4)); while(!feof($stream)){ print(fread($stream,8192)); } return false;//cancel the original request } } }