         return backgroundImage!
     }
     
-    class func hasPassword(input: Data) -> Bool {
+    class open func hasPassword(fileURL: URL) -> Bool {
+        return autoreleasepool { () -> Bool in
+            do {
+                let data = try Data(contentsOf: fileURL)
+                return hasPassword(input: data)
+            } catch {
+                return false
+            }
+        }
+    }
+    
+    class open func hasPassword(input: Data) -> Bool {
         return autoreleasepool { () -> Bool in
             let dataProvider = CGDataProvider(data: input as CFData)
             if let provider = dataProvider {

        }
    }
    
    class func isValidPDF(input: Data) -> Bool {
        return autoreleasepool { () -> Bool in
            let dataProvider = CGDataProvider(data: input as CFData)
            if let provider = dataProvider {

        }
    }
    
    class open func canUnlock(fileURL: URL, password: String) -> Bool {
        return autoreleasepool { () -> Bool in
            do {
                let data = try Data(contentsOf: fileURL)
                return canUnlock(input: data, password: password)
            } catch {
                return false
            }
        }
    }
    
    class open func canUnlock(input: Data, password: String) -> Bool {
        return autoreleasepool { () -> Bool in
            let dataProvider = CGDataProvider(data: input as CFData)
            let pdf = CGPDFDocument(dataProvider!)
