123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- //
- // 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 AWSUICKeyChainStoreErrorDomain;
-
- typedef NS_ENUM(NSInteger, AWSUICKeyChainStoreErrorCode) {
- AWSUICKeyChainStoreErrorInvalidArguments = 1,
- };
-
- typedef NS_ENUM(NSInteger, AWSUICKeyChainStoreItemClass) {
- AWSUICKeyChainStoreItemClassGenericPassword = 1,
- AWSUICKeyChainStoreItemClassInternetPassword,
- };
-
- typedef NS_ENUM(NSInteger, AWSUICKeyChainStoreProtocolType) {
- AWSUICKeyChainStoreProtocolTypeFTP = 1,
- AWSUICKeyChainStoreProtocolTypeFTPAccount,
- AWSUICKeyChainStoreProtocolTypeHTTP,
- AWSUICKeyChainStoreProtocolTypeIRC,
- AWSUICKeyChainStoreProtocolTypeNNTP,
- AWSUICKeyChainStoreProtocolTypePOP3,
- AWSUICKeyChainStoreProtocolTypeSMTP,
- AWSUICKeyChainStoreProtocolTypeSOCKS,
- AWSUICKeyChainStoreProtocolTypeIMAP,
- AWSUICKeyChainStoreProtocolTypeLDAP,
- AWSUICKeyChainStoreProtocolTypeAppleTalk,
- AWSUICKeyChainStoreProtocolTypeAFP,
- AWSUICKeyChainStoreProtocolTypeTelnet,
- AWSUICKeyChainStoreProtocolTypeSSH,
- AWSUICKeyChainStoreProtocolTypeFTPS,
- AWSUICKeyChainStoreProtocolTypeHTTPS,
- AWSUICKeyChainStoreProtocolTypeHTTPProxy,
- AWSUICKeyChainStoreProtocolTypeHTTPSProxy,
- AWSUICKeyChainStoreProtocolTypeFTPProxy,
- AWSUICKeyChainStoreProtocolTypeSMB,
- AWSUICKeyChainStoreProtocolTypeRTSP,
- AWSUICKeyChainStoreProtocolTypeRTSPProxy,
- AWSUICKeyChainStoreProtocolTypeDAAP,
- AWSUICKeyChainStoreProtocolTypeEPPC,
- AWSUICKeyChainStoreProtocolTypeNNTPS,
- AWSUICKeyChainStoreProtocolTypeLDAPS,
- AWSUICKeyChainStoreProtocolTypeTelnetS,
- AWSUICKeyChainStoreProtocolTypeIRCS,
- AWSUICKeyChainStoreProtocolTypePOP3S,
- };
-
- typedef NS_ENUM(NSInteger, AWSUICKeyChainStoreAuthenticationType) {
- AWSUICKeyChainStoreAuthenticationTypeNTLM = 1,
- AWSUICKeyChainStoreAuthenticationTypeMSN,
- AWSUICKeyChainStoreAuthenticationTypeDPA,
- AWSUICKeyChainStoreAuthenticationTypeRPA,
- AWSUICKeyChainStoreAuthenticationTypeHTTPBasic,
- AWSUICKeyChainStoreAuthenticationTypeHTTPDigest,
- AWSUICKeyChainStoreAuthenticationTypeHTMLForm,
- AWSUICKeyChainStoreAuthenticationTypeDefault,
- };
-
- typedef NS_ENUM(NSInteger, AWSUICKeyChainStoreAccessibility) {
- AWSUICKeyChainStoreAccessibilityWhenUnlocked = 1,
- AWSUICKeyChainStoreAccessibilityAfterFirstUnlock,
- AWSUICKeyChainStoreAccessibilityAlways,
- AWSUICKeyChainStoreAccessibilityWhenPasscodeSetThisDeviceOnly
- __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0),
- AWSUICKeyChainStoreAccessibilityWhenUnlockedThisDeviceOnly,
- AWSUICKeyChainStoreAccessibilityAfterFirstUnlockThisDeviceOnly,
- AWSUICKeyChainStoreAccessibilityAlwaysThisDeviceOnly,
- }
- __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0);
-
- typedef NS_ENUM(NSInteger, AWSUICKeyChainStoreAuthenticationPolicy) {
- AWSUICKeyChainStoreAuthenticationPolicyUserPresence = kSecAccessControlUserPresence,
- };
-
- @interface AWSUICKeyChainStore : NSObject
-
- @property (nonatomic, readonly) AWSUICKeyChainStoreItemClass itemClass;
-
- @property (nonatomic, readonly, nullable) NSString *service;
- @property (nonatomic, readonly, nullable) NSString *accessGroup;
-
- @property (nonatomic, readonly, nullable) NSURL *server;
- @property (nonatomic, readonly) AWSUICKeyChainStoreProtocolType protocolType;
- @property (nonatomic, readonly) AWSUICKeyChainStoreAuthenticationType authenticationType;
-
- @property (nonatomic) AWSUICKeyChainStoreAccessibility accessibility;
- @property (nonatomic, readonly) AWSUICKeyChainStoreAuthenticationPolicy 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;
-
- + (AWSUICKeyChainStore *)keyChainStore;
- + (AWSUICKeyChainStore *)keyChainStoreWithService:(nullable NSString *)service;
- + (AWSUICKeyChainStore *)keyChainStoreWithService:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup;
-
- + (AWSUICKeyChainStore *)keyChainStoreWithServer:(NSURL *)server protocolType:(AWSUICKeyChainStoreProtocolType)protocolType;
- + (AWSUICKeyChainStore *)keyChainStoreWithServer:(NSURL *)server protocolType:(AWSUICKeyChainStoreProtocolType)protocolType authenticationType:(AWSUICKeyChainStoreAuthenticationType)authenticationType;
-
- - (instancetype)init;
- - (instancetype)initWithService:(nullable NSString *)service;
- - (instancetype)initWithService:(nullable NSString *)service accessGroup:(nullable NSString *)accessGroup;
-
- - (instancetype)initWithServer:(NSURL *)server protocolType:(AWSUICKeyChainStoreProtocolType)protocolType;
- - (instancetype)initWithServer:(NSURL *)server protocolType:(AWSUICKeyChainStoreProtocolType)protocolType authenticationType:(AWSUICKeyChainStoreAuthenticationType)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:(AWSUICKeyChainStoreItemClass)itemClass;
- - (nullable NSArray UIC_KEY_TYPE *)allKeys;
-
- + (nullable NSArray *)allItemsWithItemClass:(AWSUICKeyChainStoreItemClass)itemClass;
- - (nullable NSArray *)allItems;
-
- - (void)setAccessibility:(AWSUICKeyChainStoreAccessibility)accessibility authenticationPolicy:(AWSUICKeyChainStoreAuthenticationPolicy)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 AWSUICKeyChainStore (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 AWSUICKeyChainStore (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
-
- NS_ASSUME_NONNULL_END
|