 }
 
 extension NSMutableDictionary {
+    subscript(key: Keychain.UseKey) -> AnyObject? {
+        get {
+            return self[key.stringValue()]
+        }
+        set {
+            self[key.stringValue()] = newValue
+        }
+    }
+    
+    subscript(key: Keychain.MatchKey) -> AnyObject? {
+        get {
+            return self[key.stringValue()]
+        }
+        set {
+            self[key.stringValue()] = newValue
+        }
+    }
+    
+    subscript(key: Keychain.ReturnKey) -> AnyObject? {
+        get {
+            return self[key.stringValue()]
+        }
+        set {
+            self[key.stringValue()] = newValue
+        }
+    }
+    
+    subscript(key: Keychain.ValueKey) -> AnyObject? {
+        get {
+            return self[key.stringValue()]
+        }
+        set {
+            self[key.stringValue()] = newValue
+        }
+    }
+    
+    subscript(key: Keychain.DictionaryKey) -> AnyObject? {
+        get {
+            return self[key.stringValue()]
+        }
+        set {
+            self[key.stringValue()] = newValue
+        }
+    }
+    
     subscript(key: Keychain.AttributeKey) -> AnyObject? {
         get {
             return self[key.stringValue()]

        }
    }
    
    struct Match {
        static let Policy = Match(value: kSecMatchPolicy)
        static let ItemList = Match(value: kSecMatchItemList)
        static let SearchList = Match(value: kSecMatchSearchList)
        static let Issuers = Match(value: kSecMatchIssuers)
        static let EmailAddressIfPresent = Match(value: kSecMatchEmailAddressIfPresent)
        static let SubjectContains = Match(value: kSecMatchSubjectContains)
        static let CaseInsensitive = Match(value: kSecMatchCaseInsensitive)
        static let TrustedOnly = Match(value: kSecMatchTrustedOnly)
        static let ValidOnDate = Match(value: kSecMatchValidOnDate)
        static let Limit = Match(value: kSecMatchLimit)
        static let LimitOne = Match(value: kSecMatchLimitOne)
        static let LimitAll = Match(value: kSecMatchLimitAll)
        
        let value: CFStringRef
        
        func stringValue() -> NSString {
            return value as NSString
        }
    }
    
    struct Return {
        static let Data = Return(value: kSecReturnData)
        static let Attributes = Return(value: kSecReturnAttributes)
        static let Reference = Return(value: kSecReturnRef)
        static let PersistentReference = Return(value: kSecReturnPersistentRef)
        
        let value: CFStringRef
        
        func stringValue() -> NSString {
            return value as NSString
        }
    }
    
    struct Value {
        static let Data = Value(value: kSecValueData)
        static let Reference = Value(value: kSecValueRef)
        static let PersistentReference = Value(value: kSecValuePersistentRef)
        
        let value: CFStringRef
        
        func stringValue() -> NSString {
            return value as NSString
        }
    }
    
    struct Use {
        static let ItemList = Use(value: kSecUseItemList)
        static let OperationPrompt = Use(value: kSecUseOperationPrompt)
        static let NoAuthenticationUI = Use(value: kSecUseNoAuthenticationUI)
        
        let value: CFStringRef
        
        func stringValue() -> NSString {
            return value as NSString
        }
    }
    
    func search(item: SecureItem) {
//        func SecItemCopyMatching(query: CFDictionary!, result: UnsafeMutablePointer<Unmanaged<AnyObject>?>) -> OSStatus
    }
    
    func add(item: SecureItem) {
//        func SecItemAdd(attributes: CFDictionary!, result: UnsafeMutablePointer<Unmanaged<AnyObject>?>) -> OSStatus
    }
    
    func update(item: SecureItem) {
//        func SecItemUpdate(query: CFDictionary!, attributesToUpdate: CFDictionary!) -> OSStatus
    }
    
    func delete(item: SecureItem) {
//        func SecItemDelete(query: CFDictionary!) -> OSStatus
    }
}

            return kSecClassIdentity as NSString
        }
        
        func attributes() -> NSDictionary {
            let dictionary = NSMutableDictionary(capacity: 18)
            
            if let value = accessible { dictionary[AttributeKey.Accessible] = value.stringValue() }
