]> git.saurik.com Git - apple/security.git/blob - Keychain/KeyItem.cpp
bfb10ec0edea4479b0e54150fdece00265f13eb8
[apple/security.git] / Keychain / KeyItem.cpp
1 /*
2 * Copyright (c) 2002 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 // KeyItem.cpp
20 //
21 #include <Security/KeyItem.h>
22 #include <CoreServices/../Frameworks/CarbonCore.framework/Headers/MacErrors.h>
23
24 using namespace KeychainCore;
25
26 KeyItem::KeyItem(const Keychain &keychain, const PrimaryKey &primaryKey, const CssmClient::DbUniqueRecord &uniqueId) :
27 ItemImpl(keychain, primaryKey, uniqueId),
28 mKey(NULL)
29 {
30 }
31
32 KeyItem::KeyItem(const Keychain &keychain, const PrimaryKey &primaryKey) :
33 ItemImpl(keychain, primaryKey),
34 mKey(NULL)
35 {
36 }
37
38 KeyItem::KeyItem(KeyItem &keyItem) :
39 ItemImpl(keyItem),
40 mKey(NULL)
41 {
42 }
43
44 KeyItem::~KeyItem()
45 {
46 if (mKey)
47 {
48 CssmClient::SSDbUniqueRecord uniqueId(ssDbUniqueRecord());
49 uniqueId->database()->csp()->freeKey(*mKey);
50 uniqueId->allocator().free(mKey);
51 }
52 }
53
54 void
55 KeyItem::update()
56 {
57 MacOSError::throwMe(unimpErr);
58 }
59
60 Item
61 KeyItem::copyTo(const Keychain &keychain)
62 {
63 MacOSError::throwMe(unimpErr);
64 }
65
66 void
67 KeyItem::didModify()
68 {
69 }
70
71 PrimaryKey
72 KeyItem::add(Keychain &keychain)
73 {
74 MacOSError::throwMe(unimpErr);
75 }
76
77 CssmClient::SSDbUniqueRecord
78 KeyItem::ssDbUniqueRecord()
79 {
80 DbUniqueRecordImpl *impl = &*dbUniqueRecord();
81 return CssmClient::SSDbUniqueRecord(safe_cast<Security::CssmClient::SSDbUniqueRecordImpl *>(impl));
82 }
83
84 const CssmKey &
85 KeyItem::cssmKey()
86 {
87 if (!mKey)
88 {
89 CssmClient::SSDbUniqueRecord uniqueId(ssDbUniqueRecord());
90 CssmDataContainer dataBlob(uniqueId->allocator());
91 uniqueId->get(NULL, &dataBlob);
92 mKey = reinterpret_cast<CssmKey *>(dataBlob.Data);
93 dataBlob.Data = NULL;
94 dataBlob.Length = 0;
95 }
96
97 return *mKey;
98 }