]> git.saurik.com Git - apple/security.git/blame - libsecurity_apple_csp/lib/AppleCSPUtils.h
Security-55179.13.tar.gz
[apple/security.git] / libsecurity_apple_csp / lib / AppleCSPUtils.h
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// AppleCSPUtils.h - CSP-wide utility functions
21//
22
23#ifndef _H_APPLE_CSP_UTILS
24#define _H_APPLE_CSP_UTILS
25
26#include "cspdebugging.h"
27#include <Security/cssmtype.h>
28#include <security_utilities/alloc.h>
29#include <security_cdsa_utilities/context.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35/* Key type */
36typedef enum {
37 CKT_Session,
38 CKT_Private,
39 CKT_Public
40} cspKeyType;
41
42/* Key storage type returned from cspParseKeyAttr() */
43typedef enum {
44 CKS_Ref,
45 CKS_Data,
46 CKS_None
47} cspKeyStorage;
48
49#define KEY_ATTR_RETURN_MASK (CSSM_KEYATTR_RETURN_DATA | \
50 CSSM_KEYATTR_RETURN_REF | \
51 CSSM_KEYATTR_RETURN_NONE)
52
53/*
54 * Validate key attribute bits per specified key type.
55 *
56 * Used to check requested key attributes for new keys and for validating
57 * incoming existing keys. For checking key attributes for new keys,
58 * assumes that KEYATTR_RETURN_xxx bits have been checked elsewhere
59 * and stripped off before coming here.
60 */
61void cspValidateKeyAttr(
62 cspKeyType keyType,
63 uint32 keyAttr);
64
65/*
66 * Perform sanity check of incoming key attribute bits for a given
67 * key type, and return a malKeyStorage value.
68 *
69 * Called from any routine which generates a new key. This specifically
70 * excludes WrapKey().
71 */
72cspKeyStorage cspParseKeyAttr(
73 cspKeyType keyType,
74 uint32 keyAttr);
75
76/*
77 * Validate key usage bits for specified key type.
78 */
79void cspValidateKeyUsageBits (
80 cspKeyType keyType,
81 uint32 keyUsage);
82
83/*
84 * Validate existing key's usage bits against intended use.
85 */
86void cspValidateIntendedKeyUsage(
87 const CSSM_KEYHEADER *hdr,
88 CSSM_KEYUSE intendedUsage);
89
90/*
91 * Set up a key header.
92 */
93void setKeyHeader(
94 CSSM_KEYHEADER &hdr,
95 const Guid &myGuid,
96 CSSM_ALGORITHMS alg,
97 CSSM_KEYCLASS keyClass,
98 CSSM_KEYATTR_FLAGS attrs,
99 CSSM_KEYUSE use);
100
101/*
102 * Ensure that indicated CssmData can handle 'length' bytes
103 * of data. Malloc the Data ptr if necessary.
104 */
105void setUpCssmData(
106 CssmData &data,
107 size_t length,
108 Allocator &allocator);
109
110void setUpData(
111 CSSM_DATA &data,
112 size_t length,
113 Allocator &allocator);
114
115void freeCssmData(
116 CssmData &data,
117 Allocator &allocator);
118
119void freeData(
120 CSSM_DATA *data,
121 Allocator &allocator,
122 bool freeStruct); // free the CSSM_DATA itself
123
124/*
125 * Copy source to destination, mallocing destination if necessary.
126 */
127void copyCssmData(
128 const CssmData &src,
129 CssmData &dst,
130 Allocator &allocator);
131
132void copyData(
133 const CSSM_DATA &src,
134 CSSM_DATA &dst,
135 Allocator &allocator);
136
137/*
138 * Compare two CSSM_DATAs, return CSSM_TRUE if identical.
139 */
140CSSM_BOOL cspCompareCssmData(
141 const CSSM_DATA *data1,
142 const CSSM_DATA *data2);
143
144/*
145 * This takes care of mallocing the and KeyLabel field.
146 */
147void copyCssmHeader(
148 const CssmKey::Header &src,
149 CssmKey::Header &dst,
150 Allocator &allocator);
151
152/*
153 * Given a wrapped key, infer its raw format.
154 * This is a real kludge; it only works as long as each {algorithm, keyClass}
155 * maps to exactly one format.
156 */
157CSSM_KEYBLOB_FORMAT inferFormat(
158 const CssmKey &wrappedKey);
159
160/*
161 * Given a key and a Context, obtain the optional associated
162 * CSSM_ATTRIBUTE_{PUBLIC,PRIVATE,SYMMETRIC}_KEY_FORMAT attribute as a
163 * CSSM_KEYBLOB_FORMAT.
164 */
165CSSM_KEYBLOB_FORMAT requestedKeyFormat(
166 const Context &context,
167 const CssmKey &key);
168
169/* stateless function to calculate SHA-1 hash of a blob */
170
171#define SHA1_DIGEST_SIZE 20
172void cspGenSha1Hash(
173 const void *inData,
174 size_t inDataLen,
175 void *out); // caller mallocs, digest goes here
176
177void cspVerifyKeyTimes(
178 const CSSM_KEYHEADER &hdr);
179
180#ifdef __cplusplus
181}
182#endif
183
184#endif // _H_APPLE_CSP_UTILS