// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "crypto/apple_keychain_util.h" #include #import #include "base/apple/bridging.h" #include "base/apple/foundation_util.h" #include "base/apple/scoped_cftyperef.h" #include "base/strings/sys_string_conversions.h" #include "crypto/apple_keychain_v2.h" namespace crypto { #if !BUILDFLAG(IS_IOS) bool ExecutableHasKeychainAccessGroupEntitlement( const std::string& keychain_access_group) { base::apple::ScopedCFTypeRef task(SecTaskCreateFromSelf(nullptr)); if (!task) { return false; } base::apple::ScopedCFTypeRef entitlement_value_cftype( AppleKeychainV2::GetInstance().TaskCopyValueForEntitlement( task.get(), CFSTR("keychain-access-groups"), nullptr)); if (!entitlement_value_cftype) { return false; } NSArray* entitlement_value_nsarray = base::apple::CFToNSPtrCast( base::apple::CFCast(entitlement_value_cftype.get())); if (!entitlement_value_nsarray) { return false; } return [entitlement_value_nsarray containsObject:base::SysUTF8ToNSString(keychain_access_group)]; } #endif // !BUILDFLAG(IS_IOS) } // namespace crypto