1/* 2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved. 3 * 4 * The contents of this file constitute Original Code as defined in and are 5 * subject to the Apple Public Source License Version 1.2 (the 'License'). 6 * You may not use this file except in compliance with the License. Please obtain 7 * a copy of the License at http://www.apple.com/publicsource and read it before 8 * using this file. 9 * 10 * This Original Code and all software distributed under the License are 11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS 12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT 13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the 15 * specific language governing rights and limitations under the License. 16 */ 17 18 19/* 20 * CLCachedEntry.h - classes representing cached certs and CRLs. 21 * 22 * Created 9/1/2000 by Doug Mitchell. 23 * Copyright (c) 2000 by Apple Computer. 24 */ 25 26#ifndef _APPLE_X509_CL_CACHED_ENTRY_H_ 27#define _APPLE_X509_CL_CACHED_ENTRY_H_ 28 29#include <Security/cssmtype.h> 30#include <security_utilities/utilities.h> 31#include <security_cdsa_utilities/cssmdata.h> 32#include "DecodedCert.h" 33#include "DecodedCrl.h" 34 35/* 36 * There is one of these per active cached object (cert or CRL). 37 * AppleX509CLSession keeps a map of these in cacheMap. 38 */ 39class CLCachedEntry 40{ 41public: 42 CLCachedEntry(); 43 virtual ~CLCachedEntry() { } 44 CSSM_HANDLE handle() { return mHandle; } 45private: 46 CSSM_HANDLE mHandle; 47}; 48 49class CLCachedCert : public CLCachedEntry 50{ 51public: 52 CLCachedCert( 53 DecodedCert &c) : mCert(c) { } 54 ~CLCachedCert(); 55 DecodedCert &cert() { return mCert; } 56private: 57 /* decoded NSS format */ 58 DecodedCert &mCert; 59}; 60 61class CLCachedCRL : public CLCachedEntry 62{ 63public: 64 CLCachedCRL( 65 DecodedCrl &c) : mCrl(c) { } 66 ~CLCachedCRL(); 67 DecodedCrl &crl() { return mCrl; } 68private: 69 /* decoded NSS format */ 70 DecodedCrl &mCrl; 71}; 72 73/* 74 * An active query, always associated with a CLCachedEntry. 75 * AppleX509CLSession keeps a map of these in queryMap. 76 * 77 * In the case of a CLCachedEntry created by an explicit {Cert,CRL}Cache op, 78 * there can be multiple queries active for a given cached cert. In 79 * the *GetFirst*FieldValue case, there is a one-to-one relationship between 80 * the CLQUery and its associated cached object. 81 * 82 * Out of paranoia in the {Cert,CRL}Cache case, we store the handle of 83 * the associated cached object, not a ref to the object, in case the 84 * cached object has been deleted via *AbortCache. We could ref count, 85 * but that would require a lock in CLCachedEntry...looking up an object 86 * in the session's cache map should not be too expensive. 87 */ 88 89typedef enum { 90 CLQ_Cert = 1, 91 CLQ_CRL 92} CLQueryType; 93 94class CLQuery 95{ 96public: 97 CLQuery( 98 CLQueryType type, 99 const CssmOid &oid, 100 unsigned numFields, 101 bool isFromCache, 102 CSSM_HANDLE cachedObj); 103 104 ~CLQuery(); 105 106 /* 107 * Accessors - all member variables are invariant after creation, except 108 * for nextIndex which can only increment 109 */ 110 CLQueryType queryType() { return mQueryType; } 111 const CssmOid &fieldId() { return mFieldId; } 112 unsigned nextIndex() { return mNextIndex; } 113 void incrementIndex(){ mNextIndex++; } 114 unsigned numFields() { return mNumFields; } 115 bool fromCache() { return mFromCache; } 116 CSSM_HANDLE cachedObject() { return mCachedObject; } 117 CSSM_HANDLE handle() { return mHandle;} 118 119private: 120 CLQueryType mQueryType; 121 CssmAutoData mFieldId; // thing we're searching for - may be empty 122 unsigned mNextIndex; // index of next find op 123 unsigned mNumFields; // total available 124 bool mFromCache; // true : via CertGetFirstCachedFieldValue 125 // false : via CertGetFirstFieldValue 126 CSSM_HANDLE mCachedObject; // of our associated cached cert/CRL 127 CSSM_HANDLE mHandle; // ours 128}; 129 130#endif /* _APPLE_X509_CL_CACHED_ENTRY_H_ */ 131