path($filePath); return hash_file('sha256', $fullPath); } public function verifyIntegrity(string $filePath, string $expectedHash): bool { $actualHash = $this->generateHash($filePath); return hash_equals($expectedHash, $actualHash); } public function composeSigned( string $originalPath, array $signerImages, array $signFields ): string { // FPDI/FPDF 기반 PDF 합성 - 추후 구현 // 현재는 원본 파일을 signed 경로로 복사 $signedPath = str_replace('originals/', 'signed/', $originalPath); $signedDir = dirname(Storage::disk('local')->path($signedPath)); if (! is_dir($signedDir)) { mkdir($signedDir, 0755, true); } Storage::disk('local')->copy($originalPath, $signedPath); return $signedPath; } public function addAuditPage(string $pdfPath, array $auditData): string { // 감사 증적 페이지 추가 - 추후 FPDI/FPDF로 구현 return $pdfPath; } }