blob: 240c32067bcf147858e21746affbe2883cd3d171 [file] [log] [blame]
Daniel Erat59c5f4b2015-08-24 12:50:25 -06001// Copyright (c) 2012 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#include "crypto/apple_keychain.h"
6
7#import <Foundation/Foundation.h>
8
9#include "base/synchronization/lock.h"
10#include "crypto/mac_security_services_lock.h"
11
12namespace crypto {
13
14AppleKeychain::AppleKeychain() {}
15
16AppleKeychain::~AppleKeychain() {}
17
18OSStatus AppleKeychain::ItemCopyAttributesAndData(
19 SecKeychainItemRef itemRef,
20 SecKeychainAttributeInfo* info,
21 SecItemClass* itemClass,
22 SecKeychainAttributeList** attrList,
23 UInt32* length,
24 void** outData) const {
25 base::AutoLock lock(GetMacSecurityServicesLock());
26 return SecKeychainItemCopyAttributesAndData(itemRef, info, itemClass,
27 attrList, length, outData);
28}
29
30OSStatus AppleKeychain::ItemModifyAttributesAndData(
31 SecKeychainItemRef itemRef,
32 const SecKeychainAttributeList* attrList,
33 UInt32 length,
34 const void* data) const {
35 base::AutoLock lock(GetMacSecurityServicesLock());
36 return SecKeychainItemModifyAttributesAndData(itemRef, attrList, length,
37 data);
38}
39
40OSStatus AppleKeychain::ItemFreeAttributesAndData(
41 SecKeychainAttributeList* attrList,
42 void* data) const {
43 base::AutoLock lock(GetMacSecurityServicesLock());
44 return SecKeychainItemFreeAttributesAndData(attrList, data);
45}
46
47OSStatus AppleKeychain::ItemDelete(SecKeychainItemRef itemRef) const {
48 base::AutoLock lock(GetMacSecurityServicesLock());
49 return SecKeychainItemDelete(itemRef);
50}
51
52OSStatus AppleKeychain::SearchCreateFromAttributes(
53 CFTypeRef keychainOrArray,
54 SecItemClass itemClass,
55 const SecKeychainAttributeList* attrList,
56 SecKeychainSearchRef* searchRef) const {
57 base::AutoLock lock(GetMacSecurityServicesLock());
58 return SecKeychainSearchCreateFromAttributes(keychainOrArray, itemClass,
59 attrList, searchRef);
60}
61
62OSStatus AppleKeychain::SearchCopyNext(SecKeychainSearchRef searchRef,
63 SecKeychainItemRef* itemRef) const {
64 base::AutoLock lock(GetMacSecurityServicesLock());
65 return SecKeychainSearchCopyNext(searchRef, itemRef);
66}
67
68OSStatus AppleKeychain::AddInternetPassword(
69 SecKeychainRef keychain,
70 UInt32 serverNameLength,
71 const char* serverName,
72 UInt32 securityDomainLength,
73 const char* securityDomain,
74 UInt32 accountNameLength,
75 const char* accountName,
76 UInt32 pathLength,
77 const char* path,
78 UInt16 port,
79 SecProtocolType protocol,
80 SecAuthenticationType authenticationType,
81 UInt32 passwordLength,
82 const void* passwordData,
83 SecKeychainItemRef* itemRef) const {
84 base::AutoLock lock(GetMacSecurityServicesLock());
85 return SecKeychainAddInternetPassword(keychain,
86 serverNameLength, serverName,
87 securityDomainLength, securityDomain,
88 accountNameLength, accountName,
89 pathLength, path,
90 port, protocol, authenticationType,
91 passwordLength, passwordData,
92 itemRef);
93}
94
95OSStatus AppleKeychain::FindGenericPassword(CFTypeRef keychainOrArray,
96 UInt32 serviceNameLength,
97 const char* serviceName,
98 UInt32 accountNameLength,
99 const char* accountName,
100 UInt32* passwordLength,
101 void** passwordData,
102 SecKeychainItemRef* itemRef) const {
103 base::AutoLock lock(GetMacSecurityServicesLock());
104 return SecKeychainFindGenericPassword(keychainOrArray,
105 serviceNameLength,
106 serviceName,
107 accountNameLength,
108 accountName,
109 passwordLength,
110 passwordData,
111 itemRef);
112}
113
114OSStatus AppleKeychain::ItemFreeContent(SecKeychainAttributeList* attrList,
115 void* data) const {
116 base::AutoLock lock(GetMacSecurityServicesLock());
117 return SecKeychainItemFreeContent(attrList, data);
118}
119
120OSStatus AppleKeychain::AddGenericPassword(SecKeychainRef keychain,
121 UInt32 serviceNameLength,
122 const char* serviceName,
123 UInt32 accountNameLength,
124 const char* accountName,
125 UInt32 passwordLength,
126 const void* passwordData,
127 SecKeychainItemRef* itemRef) const {
128 base::AutoLock lock(GetMacSecurityServicesLock());
129 return SecKeychainAddGenericPassword(keychain,
130 serviceNameLength,
131 serviceName,
132 accountNameLength,
133 accountName,
134 passwordLength,
135 passwordData,
136 itemRef);
137}
138
139void AppleKeychain::Free(CFTypeRef ref) const {
140 if (ref)
141 CFRelease(ref);
142}
143
144} // namespace crypto