]>
git.saurik.com Git - apple/security.git/blob - Keychain/Item.h
2 * Copyright (c) 2000-2002 Apple Computer, Inc. All Rights Reserved.
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
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.
22 #ifndef _SECURITY_ITEM_H_
23 #define _SECURITY_ITEM_H_
25 #include <Security/Keychains.h>
26 #include <Security/PrimaryKey.h>
27 #include <Security/securestorage.h>
28 #include <Security/Access.h>
33 using namespace CssmClient
;
35 namespace KeychainCore
39 class ItemImpl
: public SecCFObject
42 SECCFFUNCTIONS(ItemImpl
, SecKeychainItemRef
, errSecInvalidItemRef
)
45 friend class KeychainImpl
;
48 // new item constructors
49 ItemImpl(SecItemClass itemClass
, OSType itemCreator
, UInt32 length
, const void* data
);
51 ItemImpl(SecItemClass itemClass
, SecKeychainAttributeList
*attrList
, UInt32 length
, const void* data
);
53 // db item contstructor
54 ItemImpl(const Keychain
&keychain
, const PrimaryKey
&primaryKey
, const CssmClient::DbUniqueRecord
&uniqueId
);
56 // PrimaryKey item contstructor
57 ItemImpl(const Keychain
&keychain
, const PrimaryKey
&primaryKey
);
59 ItemImpl(ItemImpl
&item
);
61 void getAttributeFrom(CssmDbAttributeData
*data
, SecKeychainAttribute
&attr
, UInt32
*actualLength
);
62 void getClass(SecKeychainAttribute
&attr
, UInt32
*actualLength
);
65 // Methods called by KeychainImpl;
67 // Add the receiver to keychain
68 virtual PrimaryKey
add(Keychain
&keychain
);
70 // Get the default value for an attribute
71 static const CSSM_DATA
&defaultAttributeValue(const CSSM_DB_ATTRIBUTE_INFO
&info
);
74 virtual ~ItemImpl() throw();
75 bool isPersistant() const;
76 bool isModified() const;
78 virtual void update();
80 // put a copy of the item into a given keychain
81 virtual Item
copyTo(const Keychain
&keychain
, Access
*newAccess
= NULL
);
83 CSSM_DB_RECORDTYPE
recordType() const;
85 // Used for writing the record to the database.
86 CssmClient::DbUniqueRecord
dbUniqueRecord();
87 const CssmClient::DbAttributes
*modifiedAttributes() const;
88 const CssmData
*modifiedData() const;
89 virtual void didModify(); // Forget any attributes and data we just wrote to the db
91 Keychain
keychain() const;
92 PrimaryKey
primaryKey() const;
93 bool operator <(const ItemImpl
&other
) const;
95 void getAttribute(SecKeychainAttribute
& attr
, UInt32
*actualLength
);
96 void getData(CssmDataContainer
& outData
);
98 void modifyContent(const SecKeychainAttributeList
*attrList
, UInt32 dataLength
, const void *inData
);
99 void getContent(SecItemClass
*itemClass
, SecKeychainAttributeList
*attrList
, UInt32
*length
, void **outData
);
100 static void freeContent(SecKeychainAttributeList
*attrList
, void *data
);
101 static void freeAttributesAndData(SecKeychainAttributeList
*attrList
, void *data
);
103 void getAttributesAndData(SecKeychainAttributeInfo
*info
, SecItemClass
*itemClass
, SecKeychainAttributeList
**attrList
, UInt32
*length
, void **outData
);
104 void modifyAttributesAndData(const SecKeychainAttributeList
*attrList
, UInt32 dataLength
, const void *inData
);
106 void setAttribute(SecKeychainAttribute
& attr
);
107 void setAttribute(const CssmDbAttributeInfo
&info
, const CssmPolyData
&data
);
108 void setData(UInt32 length
,const void *data
);
109 void setAccess(Access
*newAccess
);
114 void getContent(DbAttributes
*dbAttributes
, CssmDataContainer
*itemData
);
115 void getLocalContent(SecKeychainAttributeList
&attributeList
);
117 bool useSecureStorage(const CssmClient::Db
&db
);
120 auto_ptr
<CssmDataContainer
> mData
;
121 auto_ptr
<CssmClient::DbAttributes
> mDbAttributes
;
122 SecPointer
<Access
> mAccess
;
125 CssmClient::DbUniqueRecord mUniqueId
;
127 PrimaryKey mPrimaryKey
;
131 class Item
: public SecPointer
<ItemImpl
>
135 Item(ItemImpl
*impl
);
136 Item(SecItemClass itemClass
, OSType itemCreator
, UInt32 length
, const void* data
);
137 Item(SecItemClass itemClass
, SecKeychainAttributeList
*attrList
, UInt32 length
, const void* data
);
138 Item(const Keychain
&keychain
, const PrimaryKey
&primaryKey
, const CssmClient::DbUniqueRecord
&uniqueId
);
139 Item(const Keychain
&keychain
, const PrimaryKey
&primaryKey
);
140 Item(ItemImpl
&item
);
144 } // end namespace KeychainCore
146 } // end namespace Security
148 #endif // !_SECURITY_ITEM_H_