// // UICKeyChainStore.h // UICKeyChainStore // // Created by Kishikawa Katsumi on 11/11/20. // Copyright (c) 2011 Kishikawa Katsumi. All rights reserved. // #import #if !__has_feature(nullability) #define NS_ASSUME_NONNULL_BEGIN #define NS_ASSUME_NONNULL_END #define nullable #define nonnull #define null_unspecified #define null_resettable #define __nullable #define __nonnull #define __null_unspecified #endif #if __has_extension(objc_generics) #define UIC_KEY_TYPE #define UIC_CREDENTIAL_TYPE *> #else #define UIC_KEY_TYPE #define UIC_CREDENTIAL_TYPE #endif NS_ASSUME_NONNULL_BEGIN extern NSString * const UICKeyChainStoreErrorDomain; typedef NS_ENUM(NSInteger, UICKeyChainStoreErrorCode) { UICKeyChainStoreErrorInvalidArguments = 1, }; typedef NS_ENUM(NSInteger, UICKeyChainStoreItemClass) { UICKeyChainStoreItemClassGenericPassword = 1, UICKeyChainStoreItemClassInternetPassword, }; typedef NS_ENUM(NSInteger, UICKeyChainStoreProtocolType) { UICKeyChainStoreProtocolTypeFTP = 1, UICKeyChainStoreProtocolTypeFTPAccount, UICKeyChainStoreProtocolTypeHTTP, UICKeyChainStoreProtocolTypeIRC, UICKeyChainStoreProtocolTypeNNTP, UICKeyChainStoreProtocolTypePOP3, UICKeyChainStoreProtocolTypeSMTP, UICKeyChainStoreProtocolTypeSOCKS, UICKeyChainStoreProtocolTypeIMAP, UICKeyChainStoreProtocolTypeLDAP, UICKeyChainStoreProtocolTypeAppleTalk, UICKeyChainStoreProtocolTypeAFP, UICKeyChainStoreProtocolTypeTelnet, UICKeyChainStoreProtocolTypeSSH, UICKeyChainStoreProtocolTypeFTPS, UICKeyChainStoreProtocolTypeHTTPS, UICKeyChainStoreProtocolTypeHTTPProxy, UICKeyChainStoreProtocolTypeHTTPSProxy, UICKeyChainStoreProtocolTypeFTPProxy, UICKeyChainStoreProtocolTypeSMB, UICKeyChainStoreProtocolTypeRTSP, UICKeyChainStoreProtocolTypeRTSPProxy, UICKeyChainStoreProtocolTypeDAAP, UICKeyChainStoreProtocolTypeEPPC, UICKeyChainStoreProtocolTypeNNTPS, UICKeyChainStoreProtocolTypeLDAPS, UICKeyChainStoreProtocolTypeTelnetS, UICKeyChainStoreProtocolTypeIRCS, UICKeyChainStoreProtocolTypePOP3S, }; typedef NS_ENUM(NSInteger, UICKeyChainStoreAuthenticationType) { UICKeyChainStoreAuthenticationTypeNTLM = 1, UICKeyChainStoreAuthenticationTypeMSN, UICKeyChainStoreAuthenticationTypeDPA, UICKeyChainStoreAuthenticationTypeRPA, UICKeyChainStoreAuthenticationTypeHTTPBasic, UICKeyChainStoreAuthenticationTypeHTTPDigest, UICKeyChainStoreAuthenticationTypeHTMLForm, UICKeyChainStoreAuthenticationTypeDefault, }; typedef NS_ENUM(NSInteger, UICKeyChainStoreAccessibility) { UICKeyChainStoreAccessibilityWhenUnlocked = 1, UICKeyChainStoreAccessibilityAfterFirstUnlock, UICKeyChainStoreAccessibilityAlways, UICKeyChainStoreAccessibilityWhenPasscodeSetThisDeviceOnly __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0), UICKeyChainStoreAccessibilityWhenUnlockedThisDeviceOnly, UICKeyChainStoreAccessibilityAfterFirstUnlockThisDeviceOnly, UICKeyChainStoreAccessibilityAlwaysThisDeviceOnly, } __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); typedef NS_ENUM(NSInteger, UICKeyChainStoreAuthenticationPolicy) { UICKeyChainStoreAuthenticationPolicyUserPresence = kSecAccessControlUserPresence, }; @interface UICKeyChainStore : NSObject @property (nonatomic, readonly) UICKeyChainStoreItemClass itemClass; @property (nonatomic, readonly, nullable) NSString *service; @property (nonatomic, readonly, nullable) NSString *accessGroup; @property (nonatomic, readonly, nullable) NSURL *server; @property (nonatomic, readonly) UICKeyChainStoreProtocolType protocolType; @property (nonatomic, readonly) UICKeyChainStoreAuthenticationType authenticationType; @property (nonatomic) UICKeyChainStoreAccessibility accessibility; @property (nonatomic, readonly) UICKeyChainStoreAuthenticationPolicy authenticationPolicy __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0); @property (nonatomic) BOOL synchronizable; @property (nonatomic, nullable) NSString *authenticationPrompt __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0); @property (nonatomic, readonly, nullable) NSArray UIC_KEY_TYPE *allKeys; @property (nonatomic, readonly, nullable) NSArray *allItems; + (NSString *)defaultService; + (void)setDefaultService:(NSString *)defaultService; + (UICKeyChainStore *)keyChainStore; + (UICKeyChainStore *)keyChainStoreWithService:(nullable NSString *)service; + (UICKeyChainStore *)keyChainStoreWithService:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; + (UICKeyChainStore *)keyChainStoreWithServer:(NSURL *)server protocolType:(UICKeyChainStoreProtocolType)protocolType; + (UICKeyChainStore *)keyChainStoreWithServer:(NSURL *)server protocolType:(UICKeyChainStoreProtocolType)protocolType authenticationType:(UICKeyChainStoreAuthenticationType)authenticationType; - (instancetype)init; - (instancetype)initWithService:(nullable NSString *)service; - (instancetype)initWithService:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; - (instancetype)initWithServer:(NSURL *)server protocolType:(UICKeyChainStoreProtocolType)protocolType; - (instancetype)initWithServer:(NSURL *)server protocolType:(UICKeyChainStoreProtocolType)protocolType authenticationType:(UICKeyChainStoreAuthenticationType)authenticationType; + (nullable NSString *)stringForKey:(NSString *)key; + (nullable NSString *)stringForKey:(NSString *)key service:(nullable NSString *)service; + (nullable NSString *)stringForKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; + (nullable NSData *)dataForKey:(NSString *)key; + (nullable NSData *)dataForKey:(NSString *)key service:(nullable NSString *)service; + (nullable NSData *)dataForKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; - (BOOL)contains:(nullable NSString *)key; - (BOOL)setString:(nullable NSString *)string forKey:(nullable NSString *)key; - (BOOL)setString:(nullable NSString *)string forKey:(nullable NSString *)key label:(nullable NSString *)label comment:(nullable NSString *)comment; - (nullable NSString *)stringForKey:(NSString *)key; - (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key; - (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key label:(nullable NSString *)label comment:(nullable NSString *)comment; - (nullable NSData *)dataForKey:(NSString *)key; + (BOOL)removeItemForKey:(NSString *)key; + (BOOL)removeItemForKey:(NSString *)key service:(nullable NSString *)service; + (BOOL)removeItemForKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; + (BOOL)removeAllItems; + (BOOL)removeAllItemsForService:(nullable NSString *)service; + (BOOL)removeAllItemsForService:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup; - (BOOL)removeItemForKey:(NSString *)key; - (BOOL)removeAllItems; - (nullable NSString *)objectForKeyedSubscript:(NSString *)key; - (void)setObject:(nullable NSString *)obj forKeyedSubscript:(NSString *)key; + (nullable NSArray UIC_KEY_TYPE *)allKeysWithItemClass:(UICKeyChainStoreItemClass)itemClass; - (nullable NSArray UIC_KEY_TYPE *)allKeys; + (nullable NSArray *)allItemsWithItemClass:(UICKeyChainStoreItemClass)itemClass; - (nullable NSArray *)allItems; - (void)setAccessibility:(UICKeyChainStoreAccessibility)accessibility authenticationPolicy:(UICKeyChainStoreAuthenticationPolicy)authenticationPolicy __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0); #if TARGET_OS_IOS - (void)sharedPasswordWithCompletion:(nullable void (^)(NSString * __nullable account, NSString * __nullable password, NSError * __nullable error))completion; - (void)sharedPasswordForAccount:(NSString *)account completion:(nullable void (^)(NSString * __nullable password, NSError * __nullable error))completion; - (void)setSharedPassword:(nullable NSString *)password forAccount:(NSString *)account completion:(nullable void (^)(NSError * __nullable error))completion; - (void)removeSharedPasswordForAccount:(NSString *)account completion:(nullable void (^)(NSError * __nullable error))completion; + (void)requestSharedWebCredentialWithCompletion:(nullable void (^)(NSArray UIC_CREDENTIAL_TYPE *credentials, NSError * __nullable error))completion; + (void)requestSharedWebCredentialForDomain:(nullable NSString *)domain account:(nullable NSString *)account completion:(nullable void (^)(NSArray UIC_CREDENTIAL_TYPE *credentials, NSError * __nullable error))completion; + (NSString *)generatePassword; #endif @end @interface UICKeyChainStore (ErrorHandling) + (nullable NSString *)stringForKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; + (nullable NSString *)stringForKey:(NSString *)key service:(nullable NSString *)service error:(NSError * __nullable __autoreleasing * __nullable)error; + (nullable NSString *)stringForKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup error:(NSError * __nullable __autoreleasing * __nullable)error; + (nullable NSData *)dataForKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; + (nullable NSData *)dataForKey:(NSString *)key service:(nullable NSString *)service error:(NSError * __nullable __autoreleasing * __nullable)error; + (nullable NSData *)dataForKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)setString:(nullable NSString *)string forKey:(NSString * )key error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)setString:(nullable NSString *)string forKey:(NSString * )key label:(nullable NSString *)label comment:(nullable NSString *)comment error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key label:(nullable NSString *)label comment:(nullable NSString *)comment error:(NSError * __nullable __autoreleasing * __nullable)error; - (nullable NSString *)stringForKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; - (nullable NSData *)dataForKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)removeItemForKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)removeItemForKey:(NSString *)key service:(nullable NSString *)service error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)removeItemForKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)removeAllItemsWithError:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)removeAllItemsForService:(nullable NSString *)service error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)removeAllItemsForService:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)removeItemForKey:(NSString *)key error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)removeAllItemsWithError:(NSError * __nullable __autoreleasing * __nullable)error; @end @interface UICKeyChainStore (ForwardCompatibility) + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service genericAttribute:(nullable id)genericAttribute; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup genericAttribute:(nullable id)genericAttribute; + (BOOL)setString:(nullable NSString *)value forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service genericAttribute:(nullable id)genericAttribute; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup genericAttribute:(nullable id)genericAttribute; + (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key service:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)setString:(nullable NSString *)string forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute; - (BOOL)setString:(nullable NSString *)string forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; - (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute; - (BOOL)setData:(nullable NSData *)data forKey:(NSString *)key genericAttribute:(nullable id)genericAttribute error:(NSError * __nullable __autoreleasing * __nullable)error; @end @interface UICKeyChainStore (Deprecation) - (void)synchronize __attribute__((deprecated("calling this method is no longer required"))); - (BOOL)synchronizeWithError:(NSError * __nullable __autoreleasing * __nullable)error __attribute__((deprecated("calling this method is no longer required"))); @end NS_ASSUME_NONNULL_END