//
|
// UICKeyChainStore.h
|
// UICKeyChainStore
|
//
|
// Created by Kishikawa Katsumi on 11/11/20.
|
// Copyright (c) 2011 Kishikawa Katsumi. All rights reserved.
|
//
|
|
#import <Foundation/Foundation.h>
|
|
#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 <NSString *>
|
#define UIC_CREDENTIAL_TYPE <NSDictionary <NSString *, NSString *>*>
|
#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<NSCopying> *)key;
|
- (void)setObject:(nullable NSString *)obj forKeyedSubscript:(NSString<NSCopying> *)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
|