• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
MacKeychain()23   MacKeychain() {}
~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