1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/keychain_mac.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::ItemCopyAttributesAndData(
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecKeychainItemRef itemRef, SecKeychainAttributeInfo *info,
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecItemClass *itemClass, SecKeychainAttributeList **attrList,
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt32 *length, void **outData) const {
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainItemCopyAttributesAndData(itemRef, info, itemClass,
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                              attrList, length, outData);
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::ItemModifyAttributesAndData(
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecKeychainItemRef itemRef, const SecKeychainAttributeList *attrList,
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt32 length, const void *data) const {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainItemModifyAttributesAndData(itemRef, attrList, length,
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                data);
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::ItemFreeAttributesAndData(
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecKeychainAttributeList *attrList, void *data) const {
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainItemFreeAttributesAndData(attrList, data);
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::ItemDelete(SecKeychainItemRef itemRef) const {
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainItemDelete(itemRef);
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::SearchCreateFromAttributes(
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CFTypeRef keychainOrArray, SecItemClass itemClass,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const SecKeychainAttributeList *attrList,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecKeychainSearchRef *searchRef) const {
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainSearchCreateFromAttributes(keychainOrArray, itemClass,
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               attrList, searchRef);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::SearchCopyNext(SecKeychainSearchRef searchRef,
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                     SecKeychainItemRef *itemRef) const {
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainSearchCopyNext(searchRef, itemRef);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::AddInternetPassword(
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecKeychainRef keychain,
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt32 serverNameLength, const char *serverName,
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt32 securityDomainLength, const char *securityDomain,
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt32 accountNameLength, const char *accountName,
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt32 pathLength, const char *path,
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt16 port, SecProtocolType protocol,
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecAuthenticationType authenticationType,
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UInt32 passwordLength, const void *passwordData,
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SecKeychainItemRef *itemRef) const {
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainAddInternetPassword(keychain,
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        serverNameLength, serverName,
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        securityDomainLength, securityDomain,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        accountNameLength, accountName,
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        pathLength, path,
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        port, protocol, authenticationType,
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        passwordLength, passwordData,
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        itemRef);
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::FindGenericPassword(CFTypeRef keychainOrArray,
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          UInt32 serviceNameLength,
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          const char *serviceName,
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          UInt32 accountNameLength,
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          const char *accountName,
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          UInt32 *passwordLength,
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          void **passwordData,
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          SecKeychainItemRef *itemRef) const {
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainFindGenericPassword(keychainOrArray,
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        serviceNameLength,
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        serviceName,
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        accountNameLength,
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        accountName,
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        passwordLength,
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        passwordData,
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        itemRef);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::ItemFreeContent(SecKeychainAttributeList *attrList,
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                      void *data) const {
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainItemFreeContent(attrList, data);
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochOSStatus MacKeychain::AddGenericPassword(SecKeychainRef keychain,
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         UInt32 serviceNameLength,
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const char *serviceName,
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         UInt32 accountNameLength,
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const char *accountName,
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         UInt32 passwordLength,
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const void *passwordData,
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         SecKeychainItemRef *itemRef) const {
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return SecKeychainAddGenericPassword(keychain,
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       serviceNameLength,
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       serviceName,
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       accountNameLength,
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       accountName,
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       passwordLength,
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       passwordData,
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                       itemRef);
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MacKeychain::Free(CFTypeRef ref) const {
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (ref) {
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CFRelease(ref);
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
110