// Copyright (c) 2009 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 CHROME_BROWSER_KEYCHAIN_MAC_H_ #define CHROME_BROWSER_KEYCHAIN_MAC_H_ #pragma once #include #include "base/basictypes.h" // 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 MacKeychain { public: MacKeychain() {} virtual ~MacKeychain() {} 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; 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; // Calls CFRelease on the given ref, after checking that |ref| is non-NULL. virtual void Free(CFTypeRef ref) const; private: DISALLOW_COPY_AND_ASSIGN(MacKeychain); }; #endif // CHROME_BROWSER_KEYCHAIN_MAC_H_