Index: crypto/apple_keychain.h |
diff --git a/crypto/apple_keychain.h b/crypto/apple_keychain.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..840ccee8c2032cc4b3914443d6c1f381eccd703f |
--- /dev/null |
+++ b/crypto/apple_keychain.h |
@@ -0,0 +1,108 @@ |
+// 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_KEYCHAIN_MAC_H_ |
+#define CRYPTO_KEYCHAIN_MAC_H_ |
+ |
+#include <Security/Security.h> |
+ |
+#include "base/basictypes.h" |
+#include "crypto/crypto_export.h" |
+ |
+#if defined (OS_IOS) |
+typedef void* SecKeychainRef; |
+typedef void* SecKeychainItemRef; |
+typedef void SecKeychainAttributeList; |
+#endif |
+ |
+namespace crypto { |
+ |
+// 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(CFTypeRef keychainOrArray, |
+ UInt32 serviceNameLength, |
+ const char* serviceName, |
+ UInt32 accountNameLength, |
+ const char* accountName, |
+ UInt32* passwordLength, |
+ void** passwordData, |
+ SecKeychainItemRef* itemRef) const; |
+ |
+ virtual OSStatus ItemFreeContent(SecKeychainAttributeList* attrList, |
+ void* data) const; |
+ |
+ virtual OSStatus AddGenericPassword(SecKeychainRef keychain, |
+ UInt32 serviceNameLength, |
+ const char* serviceName, |
+ UInt32 accountNameLength, |
+ const char* accountName, |
+ UInt32 passwordLength, |
+ const void* passwordData, |
+ SecKeychainItemRef* itemRef) const; |
+ |
+#if !defined(OS_IOS) |
+ virtual OSStatus ItemCopyAttributesAndData( |
+ SecKeychainItemRef itemRef, |
+ SecKeychainAttributeInfo* info, |
+ SecItemClass* itemClass, |
+ SecKeychainAttributeList** attrList, |
+ UInt32* length, |
+ void** outData) const; |
+ |
+ virtual OSStatus ItemModifyAttributesAndData( |
+ SecKeychainItemRef itemRef, |
+ const SecKeychainAttributeList* attrList, |
+ UInt32 length, |
+ const void* data) const; |
+ |
+ virtual OSStatus ItemFreeAttributesAndData(SecKeychainAttributeList* attrList, |
+ void* data) const; |
+ |
+ virtual OSStatus ItemDelete(SecKeychainItemRef itemRef) const; |
+ |
+ virtual OSStatus SearchCreateFromAttributes( |
+ CFTypeRef keychainOrArray, |
+ SecItemClass itemClass, |
+ const SecKeychainAttributeList* attrList, |
+ SecKeychainSearchRef* searchRef) const; |
+ |
+ virtual OSStatus SearchCopyNext(SecKeychainSearchRef searchRef, |
+ SecKeychainItemRef* itemRef) const; |
+ |
+ virtual OSStatus AddInternetPassword(SecKeychainRef keychain, |
+ UInt32 serverNameLength, |
+ const char* serverName, |
+ UInt32 securityDomainLength, |
+ const char* securityDomain, |
+ UInt32 accountNameLength, |
+ const char* accountName, |
+ UInt32 pathLength, const char* path, |
+ UInt16 port, SecProtocolType protocol, |
+ SecAuthenticationType authenticationType, |
+ UInt32 passwordLength, |
+ const void* passwordData, |
+ SecKeychainItemRef* itemRef) const; |
+ |
+ // Calls CFRelease on the given ref, after checking that |ref| is non-NULL. |
+ virtual void Free(CFTypeRef ref) const; |
+#endif // !defined(OS_IOS) |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(AppleKeychain); |
+}; |
+ |
+} // namespace crypto |
+ |
+#endif // CRYPTO_KEYCHAIN_MAC_H_ |