| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CRYPTO_APPLE_KEYCHAIN_H_ |
| #define CRYPTO_APPLE_KEYCHAIN_H_ |
| |
| #include <Security/Security.h> |
| |
| #include "base/macros.h" |
| #include "build/build_config.h" |
| #include "crypto/crypto_export.h" |
| |
| namespace crypto { |
| |
| #if defined(OS_IOS) |
| using AppleSecKeychainItemRef = void*; |
| #else |
| using AppleSecKeychainItemRef = SecKeychainItemRef; |
| #endif |
| |
| // Wraps the KeychainServices API in a very thin layer, to allow it to be |
| // mocked out for testing. |
| |
| // See Keychain Services documentation for function documentation, as these call |
| // through directly to their Keychain Services equivalents (Foo -> |
| // SecKeychainFoo). The only exception is Free, which should be used for |
| // anything returned from this class that would normally be freed with |
| // CFRelease (to aid in testing). |
| class CRYPTO_EXPORT AppleKeychain { |
| public: |
| AppleKeychain(); |
| virtual ~AppleKeychain(); |
| |
| virtual OSStatus FindGenericPassword(UInt32 serviceNameLength, |
| const char* serviceName, |
| UInt32 accountNameLength, |
| const char* accountName, |
| UInt32* passwordLength, |
| void** passwordData, |
| AppleSecKeychainItemRef* itemRef) const; |
| |
| virtual OSStatus ItemFreeContent(void* data) const; |
| |
| virtual OSStatus AddGenericPassword(UInt32 serviceNameLength, |
| const char* serviceName, |
| UInt32 accountNameLength, |
| const char* accountName, |
| UInt32 passwordLength, |
| const void* passwordData, |
| AppleSecKeychainItemRef* itemRef) const; |
| |
| #if !defined(OS_IOS) |
| virtual OSStatus ItemDelete(AppleSecKeychainItemRef itemRef) const; |
| #endif // !defined(OS_IOS) |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(AppleKeychain); |
| }; |
| |
| } // namespace crypto |
| |
| #endif // CRYPTO_APPLE_KEYCHAIN_H_ |