         }
     }
     
-    private static func copy(matching query: CFDictionary) throws -> AnyObject? {
+    public static func copy(matching query: CFDictionary) throws -> AnyObject? {
         var result: AnyObject?
         let status = withUnsafeMutablePointer(&result) { SecItemCopyMatching(query, UnsafeMutablePointer($0)) }
         

        
        default:
            throw KeychainError.failedToCopyItem(status: status)
        }
    }
}


/// Provides access to the system keychain for storing, retrieving, and removing generic password items.
public final class Keychain {
    public static func add(attributes attributes: CFDictionary) throws {
        let status = SecItemAdd(attributes, nil)
        
        if status != noErr {
