| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- //
- // SSKeychain.h
- // SSToolkit
- //
- // Created by Sam Soffes on 5/19/10.
- // Copyright (c) 2009-2011 Sam Soffes. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #import <Security/Security.h>
- /** Error codes that can be returned in NSError objects. */
- typedef enum {
- /** No error. */
- SSKeychainErrorNone = noErr,
-
- /** Some of the arguments were invalid. */
- SSKeychainErrorBadArguments = -1001,
-
- /** There was no password. */
- SSKeychainErrorNoPassword = -1002,
-
- /** One or more parameters passed internally were not valid. */
- SSKeychainErrorInvalidParameter = errSecParam,
-
- /** Failed to allocate memory. */
- SSKeychainErrorFailedToAllocated = errSecAllocate,
-
- /** No trust results are available. */
- SSKeychainErrorNotAvailable = errSecNotAvailable,
-
- /** Authorization/Authentication failed. */
- SSKeychainErrorAuthorizationFailed = errSecAuthFailed,
-
- /** The item already exists. */
- SSKeychainErrorDuplicatedItem = errSecDuplicateItem,
-
- /** The item cannot be found.*/
- SSKeychainErrorNotFound = errSecItemNotFound,
-
- /** Interaction with the Security Server is not allowed. */
- SSKeychainErrorInteractionNotAllowed = errSecInteractionNotAllowed,
-
- /** Unable to decode the provided data. */
- SSKeychainErrorFailedToDecode = errSecDecode
- } SSKeychainErrorCode;
- extern NSString *const kSSKeychainErrorDomain;
- /** Account name. */
- extern NSString *const kSSKeychainAccountKey;
- /**
- Time the item was created.
-
- The value will be a string.
- */
- extern NSString *const kSSKeychainCreatedAtKey;
- /** Item class. */
- extern NSString *const kSSKeychainClassKey;
- /** Item description. */
- extern NSString *const kSSKeychainDescriptionKey;
- /** Item label. */
- extern NSString *const kSSKeychainLabelKey;
- /** Time the item was last modified.
-
- The value will be a string.
- */
- extern NSString *const kSSKeychainLastModifiedKey;
- /** Where the item was created. */
- extern NSString *const kSSKeychainWhereKey;
- /**
- Simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system
- Keychain on Mac OS X and iOS.
-
- This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors.
- SSKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](http://sstoolk.it).
- */
- @interface SSKeychain : NSObject
- ///-----------------------
- /// @name Getting Accounts
- ///-----------------------
- /**
- Returns an array containing the Keychain's accounts, or `nil` if the Keychain has no accounts.
-
- See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the
- dictionaries returned by this method.
-
- @return An array of dictionaries containing the Keychain's accounts, or `nil` if the Keychain doesn't have any
- accounts. The order of the objects in the array isn't defined.
-
- @see allAccounts:
- */
- + (NSArray *)allAccounts;
- /**
- Returns an array containing the Keychain's accounts, or `nil` if the Keychain doesn't have any
- accounts.
-
- See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the
- dictionaries returned by this method.
-
- @param error If accessing the accounts fails, upon return contains an error that describes the problem.
-
- @return An array of dictionaries containing the Keychain's accounts, or `nil` if the Keychain doesn't have any
- accounts. The order of the objects in the array isn't defined.
-
- @see allAccounts
- */
- + (NSArray *)allAccounts:(NSError **)error;
- /**
- Returns an array containing the Keychain's accounts for a given service, or `nil` if the Keychain doesn't have any
- accounts for the given service.
-
- See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the
- dictionaries returned by this method.
-
- @param serviceName The service for which to return the corresponding accounts.
-
- @return An array of dictionaries containing the Keychain's accountsfor a given `serviceName`, or `nil` if the Keychain
- doesn't have any accounts for the given `serviceName`. The order of the objects in the array isn't defined.
-
- @see accountsForService:error:
- */
- + (NSArray *)accountsForService:(NSString *)serviceName;
- /**
- Returns an array containing the Keychain's accounts for a given service, or `nil` if the Keychain doesn't have any
- accounts for the given service.
-
- @param serviceName The service for which to return the corresponding accounts.
-
- @param error If accessing the accounts fails, upon return contains an error that describes the problem.
-
- @return An array of dictionaries containing the Keychain's accountsfor a given `serviceName`, or `nil` if the Keychain
- doesn't have any accounts for the given `serviceName`. The order of the objects in the array isn't defined.
-
- @see accountsForService:
- */
- + (NSArray *)accountsForService:(NSString *)serviceName error:(NSError **)error;
- ///------------------------
- /// @name Getting Passwords
- ///------------------------
- /**
- Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't have a
- password for the given parameters.
-
- @param serviceName The service for which to return the corresponding password.
-
- @param account The account for which to return the corresponding password.
-
- @return Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't
- have a password for the given parameters.
-
- @see passwordForService:account:error:
- */
- + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
- /**
- Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't have a
- password for the given parameters.
-
- @param serviceName The service for which to return the corresponding password.
-
- @param account The account for which to return the corresponding password.
-
- @param error If accessing the password fails, upon return contains an error that describes the problem.
-
- @return Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't
- have a password for the given parameters.
-
- @see passwordForService:account:
- */
- + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
- /**
- Returns the password data for a given account and service, or `nil` if the Keychain doesn't have data
- for the given parameters.
-
- @param serviceName The service for which to return the corresponding password.
-
- @param account The account for which to return the corresponding password.
-
- @return Returns a the password data for the given account and service, or `nil` if the Keychain doesn't
- have data for the given parameters.
-
- @see passwordDataForService:account:error:
- */
- + (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account;
- /**
- Returns the password data for a given account and service, or `nil` if the Keychain doesn't have data
- for the given parameters.
-
- @param serviceName The service for which to return the corresponding password.
-
- @param account The account for which to return the corresponding password.
-
- @param error If accessing the password fails, upon return contains an error that describes the problem.
-
- @return Returns a the password data for the given account and service, or `nil` if the Keychain doesn't
- have a password for the given parameters.
-
- @see passwordDataForService:account:
- */
- + (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
- ///-------------------------
- /// @name Deleting Passwords
- ///-------------------------
- /**
- Deletes a password from the Keychain.
-
- @param serviceName The service for which to delete the corresponding password.
-
- @param account The account for which to delete the corresponding password.
-
- @return Returns `YES` on success, or `NO` on failure.
-
- @see deletePasswordForService:account:error:
- */
- + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
- /**
- Deletes a password from the Keychain.
-
- @param serviceName The service for which to delete the corresponding password.
-
- @param account The account for which to delete the corresponding password.
-
- @param error If deleting the password fails, upon return contains an error that describes the problem.
-
- @return Returns `YES` on success, or `NO` on failure.
-
- @see deletePasswordForService:account:
- */
- + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
- ///------------------------
- /// @name Setting Passwords
- ///------------------------
- /**
- Sets a password in the Keychain.
-
- @param password The password to store in the Keychain.
-
- @param serviceName The service for which to set the corresponding password.
-
- @param account The account for which to set the corresponding password.
-
- @return Returns `YES` on success, or `NO` on failure.
-
- @see setPassword:forService:account:error:
- */
- + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;
- /**
- Sets a password in the Keychain.
-
- @param password The password to store in the Keychain.
-
- @param serviceName The service for which to set the corresponding password.
-
- @param account The account for which to set the corresponding password.
-
- @param error If setting the password fails, upon return contains an error that describes the problem.
-
- @return Returns `YES` on success, or `NO` on failure.
-
- @see setPassword:forService:account:
- */
- + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
- /**
- Sets arbirary data in the Keychain.
-
- @param password The data to store in the Keychain.
-
- @param serviceName The service for which to set the corresponding password.
-
- @param account The account for which to set the corresponding password.
-
- @return Returns `YES` on success, or `NO` on failure.
-
- @see setPasswordData:forService:account:error:
- */
- + (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account;
- /**
- Sets arbirary data in the Keychain.
-
- @param password The data to store in the Keychain.
-
- @param serviceName The service for which to set the corresponding password.
-
- @param account The account for which to set the corresponding password.
-
- @param error If setting the password fails, upon return contains an error that describes the problem.
-
- @return Returns `YES` on success, or `NO` on failure.
-
- @see setPasswordData:forService:account:
- */
- + (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;
- ///--------------------
- /// @name Configuration
- ///--------------------
- #if __IPHONE_4_0 && TARGET_OS_IPHONE
- /**
- Returns the accessibility type for all future passwords saved to the Keychain.
-
- @return Returns the accessibility type.
-
- The return value will be `NULL` or one of the "Keychain Item Accessibility Constants" used for determining when a
- keychain item should be readable.
-
- @see accessibilityType
- */
- + (CFTypeRef)accessibilityType;
- /**
- Sets the accessibility type for all future passwords saved to the Keychain.
-
- @param accessibilityType One of the "Keychain Item Accessibility Constants" used for determining when a keychain item
- should be readable.
-
- If the value is `NULL` (the default), the Keychain default will be used.
-
- @see accessibilityType
- */
- + (void)setAccessibilityType:(CFTypeRef)accessibilityType;
- #endif
- @end
|