]>
Commit | Line | Data |
---|---|---|
b1ab9ed8 | 1 | /* |
d8f41ccd | 2 | * Copyright (c) 2003,2011-2012,2014 Apple Inc. All Rights Reserved. |
b1ab9ed8 A |
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 | |
7 | * obtain a copy of the License at http://www.apple.com/publicsource and | |
8 | * read it before 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 | |
12 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
13 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
14 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | |
15 | * Please see the License for the specific language governing rights and | |
16 | * limitations under the License. | |
17 | */ | |
18 | /* | |
19 | * AppleCSPKeys.cpp - Key support | |
20 | */ | |
21 | ||
22 | #include "AppleCSPKeys.h" | |
23 | #include "AppleCSPUtils.h" | |
24 | /* | |
25 | * CSPKeyInfoProvider for symmetric keys. | |
26 | */ | |
27 | CSPKeyInfoProvider *SymmetricKeyInfoProvider::provider( | |
28 | const CssmKey &cssmKey, | |
29 | AppleCSPSession &session) | |
30 | { | |
31 | if(cssmKey.blobType() != CSSM_KEYBLOB_RAW) { | |
32 | errorLog0("KeyInfoProvider deals only with RAW keys!\n"); | |
33 | CssmError::throwMe(CSSMERR_CSP_INTERNAL_ERROR); | |
34 | } | |
35 | if(cssmKey.keyClass() != CSSM_KEYCLASS_SESSION_KEY) { | |
36 | /* that's all we need to know */ | |
37 | return NULL; | |
38 | } | |
39 | return new SymmetricKeyInfoProvider(cssmKey, session); | |
40 | } | |
41 | ||
42 | SymmetricKeyInfoProvider::SymmetricKeyInfoProvider( | |
43 | const CssmKey &cssmKey, | |
44 | AppleCSPSession &session) : | |
45 | CSPKeyInfoProvider(cssmKey, session) | |
46 | { | |
47 | } | |
48 | ||
49 | /* cook up a Binary key */ | |
50 | void SymmetricKeyInfoProvider::CssmKeyToBinary( | |
51 | CssmKey *paramKey, // ignored | |
52 | CSSM_KEYATTR_FLAGS &attrFlags, // IN/OUT | |
53 | BinaryKey **binKey) | |
54 | { | |
55 | CASSERT(mKey.keyClass() == CSSM_KEYCLASS_SESSION_KEY); | |
56 | SymmetricBinaryKey *symBinKey = new SymmetricBinaryKey( | |
57 | mKey.KeyHeader.LogicalKeySizeInBits); | |
58 | copyCssmData(mKey, | |
59 | symBinKey->mKeyData, | |
60 | symBinKey->mAllocator); | |
61 | *binKey = symBinKey; | |
62 | } | |
63 | ||
64 | /* obtain key size in bits */ | |
65 | void SymmetricKeyInfoProvider::QueryKeySizeInBits( | |
66 | CSSM_KEY_SIZE &keySize) | |
67 | { | |
68 | /* FIXME - do we ever need to calculate RC2 effective size here? */ | |
69 | keySize.LogicalKeySizeInBits = keySize.EffectiveKeySizeInBits = | |
427c49bc | 70 | (uint32)(mKey.length() * 8); |
b1ab9ed8 A |
71 | } |
72 | ||
73 | /* | |
74 | * Obtain blob suitable for hashing in CSSM_APPLECSP_KEYDIGEST | |
75 | * passthrough. | |
76 | */ | |
77 | bool SymmetricKeyInfoProvider::getHashableBlob( | |
78 | Allocator &allocator, | |
79 | CssmData &blob) // blob to hash goes here | |
80 | { | |
81 | /* | |
82 | * This is trivial: the raw key is already in the "proper" format. | |
83 | */ | |
84 | assert(mKey.blobType() == CSSM_KEYBLOB_RAW); | |
85 | const CssmData &keyBlob = CssmData::overlay(mKey.KeyData); | |
86 | copyCssmData(keyBlob, blob, allocator); | |
87 | return true; | |
88 | } | |
89 |