Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_KEYCHAIN_MAC_H_
      6 #define CHROME_BROWSER_KEYCHAIN_MAC_H_
      7 #pragma once
      8 
      9 #include <Security/Security.h>
     10 
     11 #include "base/basictypes.h"
     12 
     13 // Wraps the KeychainServices API in a very thin layer, to allow it to be
     14 // mocked out for testing.
     15 
     16 // See Keychain Services documentation for function documentation, as these call
     17 // through directly to their Keychain Services equivalents (Foo ->
     18 // SecKeychainFoo). The only exception is Free, which should be used for
     19 // anything returned from this class that would normally be freed with
     20 // CFRelease (to aid in testing).
     21 class MacKeychain {
     22  public:
     23   MacKeychain() {}
     24   virtual ~MacKeychain() {}
     25 
     26   virtual OSStatus ItemCopyAttributesAndData(
     27       SecKeychainItemRef itemRef, SecKeychainAttributeInfo *info,
     28       SecItemClass *itemClass, SecKeychainAttributeList **attrList,
     29       UInt32 *length, void **outData) const;
     30 
     31   virtual OSStatus ItemModifyAttributesAndData(
     32       SecKeychainItemRef itemRef, const SecKeychainAttributeList *attrList,
     33       UInt32 length, const void *data) const;
     34 
     35   virtual OSStatus ItemFreeAttributesAndData(SecKeychainAttributeList *attrList,
     36                                              void *data) const;
     37 
     38   virtual OSStatus ItemDelete(SecKeychainItemRef itemRef) const;
     39 
     40   virtual OSStatus SearchCreateFromAttributes(
     41       CFTypeRef keychainOrArray, SecItemClass itemClass,
     42       const SecKeychainAttributeList *attrList,
     43       SecKeychainSearchRef *searchRef) const;
     44 
     45   virtual OSStatus SearchCopyNext(SecKeychainSearchRef searchRef,
     46                                   SecKeychainItemRef *itemRef) const;
     47 
     48   virtual OSStatus AddInternetPassword(SecKeychainRef keychain,
     49                                        UInt32 serverNameLength,
     50                                        const char *serverName,
     51                                        UInt32 securityDomainLength,
     52                                        const char *securityDomain,
     53                                        UInt32 accountNameLength,
     54                                        const char *accountName,
     55                                        UInt32 pathLength, const char *path,
     56                                        UInt16 port, SecProtocolType protocol,
     57                                        SecAuthenticationType authenticationType,
     58                                        UInt32 passwordLength,
     59                                        const void *passwordData,
     60                                        SecKeychainItemRef *itemRef) const;
     61 
     62   virtual OSStatus FindGenericPassword(CFTypeRef keychainOrArray,
     63                                        UInt32 serviceNameLength,
     64                                        const char *serviceName,
     65                                        UInt32 accountNameLength,
     66                                        const char *accountName,
     67                                        UInt32 *passwordLength,
     68                                        void **passwordData,
     69                                        SecKeychainItemRef *itemRef) const;
     70 
     71   virtual OSStatus ItemFreeContent(SecKeychainAttributeList *attrList,
     72                                    void *data) const;
     73 
     74   virtual OSStatus AddGenericPassword(SecKeychainRef keychain,
     75                                       UInt32 serviceNameLength,
     76                                       const char *serviceName,
     77                                       UInt32 accountNameLength,
     78                                       const char *accountName,
     79                                       UInt32 passwordLength,
     80                                       const void *passwordData,
     81                                       SecKeychainItemRef *itemRef) const;
     82 
     83   // Calls CFRelease on the given ref, after checking that |ref| is non-NULL.
     84   virtual void Free(CFTypeRef ref) const;
     85 
     86  private:
     87   DISALLOW_COPY_AND_ASSIGN(MacKeychain);
     88 };
     89 
     90 #endif  // CHROME_BROWSER_KEYCHAIN_MAC_H_
     91