1/* 2 * Copyright (c) 2002-2008,2011 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24// 25// IdentityCursor.h - Working with IdentityCursors 26// 27#ifndef _SECURITY_IDENTITYCURSOR_H_ 28#define _SECURITY_IDENTITYCURSOR_H_ 29 30#include <Security/SecCertificate.h> 31#include <Security/SecIdentity.h> 32#include <Security/SecIdentitySearch.h> 33#include <security_cdsa_client/securestorage.h> 34#include <security_keychain/KCCursor.h> 35#include <CoreFoundation/CFArray.h> 36 37namespace Security 38{ 39 40namespace KeychainCore 41{ 42 43class Identity; 44class KeyItem; 45 46class IdentityCursor : public SecCFObject 47{ 48 NOCOPY(IdentityCursor) 49public: 50 SECCFFUNCTIONS(IdentityCursor, SecIdentitySearchRef, errSecInvalidSearchRef, gTypes().IdentityCursor) 51 52 IdentityCursor(const StorageManager::KeychainList &searchList, CSSM_KEYUSE keyUsage); 53 virtual ~IdentityCursor() throw(); 54 virtual bool next(SecPointer<Identity> &identity); 55 56 CFDataRef pubKeyHashForSystemIdentity(CFStringRef domain); 57 58protected: 59 StorageManager::KeychainList mSearchList; 60 61private: 62 KCCursor mKeyCursor; 63 KCCursor mCertificateCursor; 64 SecPointer<KeyItem> mCurrentKey; 65 Mutex mMutex; 66}; 67 68class IdentityCursorPolicyAndID : public IdentityCursor 69{ 70public: 71 IdentityCursorPolicyAndID(const StorageManager::KeychainList &searchList, CSSM_KEYUSE keyUsage, CFStringRef idString, SecPolicyRef policy, bool returnOnlyValidIdentities); 72 virtual ~IdentityCursorPolicyAndID() throw(); 73 virtual bool next(SecPointer<Identity> &identity); 74 virtual void findPreferredIdentity(); 75 76private: 77 SecPolicyRef mPolicy; 78 CFStringRef mIDString; 79 bool mReturnOnlyValidIdentities; 80 bool mPreferredIdentityChecked; 81 SecPointer<Identity> mPreferredIdentity; 82}; 83 84 85} // end namespace KeychainCore 86 87} // end namespace Security 88 89#endif // !_SECURITY_IDENTITYCURSOR_H_ 90