]> git.saurik.com Git - apple/security.git/blame - libsecurity_cdsa_client/lib/wrapkey.cpp
Security-55471.14.18.tar.gz
[apple/security.git] / libsecurity_cdsa_client / lib / wrapkey.cpp
CommitLineData
b1ab9ed8
A
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// wrapkey - client interface for wrapping and unwrapping keys
21//
22#include <security_cdsa_client/wrapkey.h>
23
24namespace Security {
25namespace CssmClient {
26
27
28Key
29WrapKey::operator () (Key &keyToBeWrapped, const CssmData *descriptiveData)
30{
31 Key wrappedKey;
32
33 check(CSSM_WrapKey(handle(), neededCred(), keyToBeWrapped, descriptiveData,
34 wrappedKey.makeNewKey(attachment())));
35 wrappedKey->activate();
36
37 return wrappedKey;
38}
39
40void
41WrapKey::operator () (const CssmKey &keyToBeWrapped, CssmKey &wrappedKey,
42 const CssmData *descriptiveData)
43{
44 check(CSSM_WrapKey(handle(), neededCred(), &keyToBeWrapped,
45 descriptiveData, &wrappedKey));
46}
47
48void
49WrapKey::activate()
50{
51 if (!mActive)
52 {
53 Crypt::activate();
427c49bc 54 if (mWrappedKeyFormat != CSSM_KEYBLOB_WRAPPED_FORMAT_NONE)
b1ab9ed8
A
55 set(CSSM_ATTRIBUTE_WRAPPED_KEY_FORMAT, mWrappedKeyFormat);
56 }
57}
58
59Key
60UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec)
61{
62 CssmData data(reinterpret_cast<uint8 *>(1), 0);
63 Key unwrappedKey;
64 check(CSSM_UnwrapKey(handle(), NULL,
65 &keyToBeUnwrapped, spec.usage, spec.attributes,
66 spec.label, &compositeRcc(),
67 unwrappedKey.makeNewKey(attachment()), &data));
68 unwrappedKey->activate();
69
70 return unwrappedKey;
71}
72
73void
74UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec,
75 CssmKey &unwrappedKey)
76{
77 CssmData data(reinterpret_cast<uint8 *>(1), 0);
78 check(CSSM_UnwrapKey(handle(), NULL, &keyToBeUnwrapped, spec.usage,
79 spec.attributes, spec.label, &compositeRcc(),
80 &unwrappedKey, &data));
81}
82
83Key
84UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec,
85 Key &optionalPublicKey)
86{
87 CssmData data(reinterpret_cast<uint8 *>(1), 0);
88 Key unwrappedKey;
89 check(CSSM_UnwrapKey(handle(), optionalPublicKey,
90 &keyToBeUnwrapped, spec.usage, spec.attributes,
91 spec.label, &compositeRcc(),
92 unwrappedKey.makeNewKey(attachment()), &data));
93
94 unwrappedKey->activate();
95
96 return unwrappedKey;
97}
98
99void
100UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec,
101 CssmKey &unwrappedKey,
102 const CssmKey *optionalPublicKey)
103{
104 CssmData data(reinterpret_cast<uint8 *>(1), 0);
105 check(CSSM_UnwrapKey(handle(), optionalPublicKey, &keyToBeUnwrapped,
106 spec.usage, spec.attributes, spec.label,
107 &compositeRcc(), &unwrappedKey, &data));
108}
109
110
111Key
112UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec,
113 CssmData *descriptiveData)
114{
115 Key unwrappedKey;
116 check(CSSM_UnwrapKey(handle(), NULL, &keyToBeUnwrapped, spec.usage,
117 spec.attributes, spec.label, &compositeRcc(),
118 unwrappedKey.makeNewKey(attachment()),
119 descriptiveData));
120 unwrappedKey->activate();
121
122 return unwrappedKey;
123}
124
125void
126UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec,
127 CssmKey &unwrappedKey, CssmData *descriptiveData)
128{
129 check(CSSM_UnwrapKey(handle(), NULL, &keyToBeUnwrapped, spec.usage,
130 spec.attributes, spec.label, &compositeRcc(),
131 &unwrappedKey, descriptiveData));
132}
133
134Key
135UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec,
136 const Key &optionalPublicKey, CssmData *descriptiveData)
137{
138 Key unwrappedKey;
139 check(CSSM_UnwrapKey(handle(), optionalPublicKey, &keyToBeUnwrapped,
140 spec.usage, spec.attributes, spec.label,
141 &compositeRcc(),
142 unwrappedKey.makeNewKey(attachment()),
143 descriptiveData));
144 unwrappedKey->activate();
145
146 return unwrappedKey;
147}
148
149void
150UnwrapKey::operator () (const CssmKey &keyToBeUnwrapped, const KeySpec &spec,
151 CssmKey &unwrappedKey, CssmData *descriptiveData,
152 const CssmKey *optionalPublicKey)
153{
154 check(CSSM_UnwrapKey(handle(), optionalPublicKey, &keyToBeUnwrapped,
155 spec.usage, spec.attributes, spec.label,
156 &compositeRcc(), &unwrappedKey,
157 descriptiveData));
158}
159
160
161void DeriveKey::activate()
162{
163 if (!mActive)
164 {
165 check(CSSM_CSP_CreateDeriveKeyContext(attachment()->handle(), mAlgorithm,
166 mTargetType, mKeySize, mCred, mKey, mIterationCount, mSalt, mSeed, &mHandle));
167 mActive = true;
168 }
169}
170
171
172Key
173DeriveKey::operator () (CssmData *param, const KeySpec &spec)
174{
175 Key derivedKey;
176 check(CSSM_DeriveKey(handle(), param, spec.usage, spec.attributes,
177 spec.label, &compositeRcc(),
178 derivedKey.makeNewKey(attachment())));
179 derivedKey->activate();
180
181 return derivedKey;
182}
183
184void
185DeriveKey::operator () (CssmData *param, const KeySpec &spec,
186 CssmKey &derivedKey)
187{
188 check(CSSM_DeriveKey(handle(), param, spec.usage, spec.attributes,
189 spec.label, &compositeRcc(), &derivedKey));
190}
191
192} // end namespace CssmClient
193} // end namespace Security