]> git.saurik.com Git - apple/security.git/blob - SecurityTool/macOS/srCdsaUtils.h
Security-59306.11.20.tar.gz
[apple/security.git] / SecurityTool / macOS / srCdsaUtils.h
1 /*
2 * Copyright (c) 2001,2003-2011 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 *
23 * srCdsaUtils.h -- common CDSA access utilities
24 */
25
26 #ifndef _COMMON_CDSA_UTILS_H_
27 #define _COMMON_CDSA_UTILS_H_
28
29 #include <Security/cssm.h>
30 #include <Security/SecKeychain.h>
31 #include <CoreFoundation/CFString.h>
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 /* common memory allocators shared by app and CSSM */
38 extern void * srAppMalloc (CSSM_SIZE size, void *allocRef);
39 extern void srAppFree (void *mem_ptr, void *allocRef);
40 extern void * srAppRealloc (void *ptr, CSSM_SIZE size, void *allocRef);
41 extern void * srAppCalloc (uint32 num, CSSM_SIZE size, void *allocRef);
42
43 #define APP_MALLOC(s) srAppMalloc(s, NULL)
44 #define APP_FREE(p) srAppFree(p, NULL)
45 #define APP_REALLOC(p, s) srAppRealloc(p, s, NULL)
46 #define APP_CALLOC(n, s) srAppRealloc(n, s, NULL)
47
48 extern CSSM_BOOL srCompareCssmData(
49 const CSSM_DATA *d1,
50 const CSSM_DATA *d2);
51
52 /* OID flavor of same, which will break when an OID is not a CSSM_DATA */
53 #define srCompareOid(o1, o2) srCompareCssmData(o1, o2)
54
55 void srPrintError(const char *op, CSSM_RETURN err);
56
57 /* Init CSSM; returns CSSM_FALSE on error. Reusable. */
58 extern CSSM_BOOL srCssmStartup(void);
59
60 /* Attach to CSP. Returns zero on error. */
61 extern CSSM_CSP_HANDLE srCspStartup(
62 CSSM_BOOL bareCsp); // true ==> CSP, false ==> CSP/DL
63
64 /* Attach to DL side of CSPDL. */
65 extern CSSM_DL_HANDLE srDlStartup(void);
66
67 /* Attach to CL, TP */
68 extern CSSM_CL_HANDLE srClStartup(void);
69 extern CSSM_TP_HANDLE srTpStartup(void);
70
71 /*
72 * Derive symmetric key using PBE.
73 */
74 extern CSSM_RETURN srCspDeriveKey(CSSM_CSP_HANDLE cspHand,
75 uint32 keyAlg, // CSSM_ALGID_RC5, etc.
76 const char *keyLabel,
77 unsigned keyLabelLen,
78 uint32 keyUsage, // CSSM_KEYUSE_ENCRYPT, etc.
79 uint32 keySizeInBits,
80 CSSM_DATA_PTR password, // in PKCS-5 lingo
81 CSSM_DATA_PTR salt, // ditto
82 uint32 iterationCnt, // ditto
83 CSSM_KEY_PTR key);
84
85 /*
86 * Generate key pair of arbitrary algorithm.
87 */
88 extern CSSM_RETURN srCspGenKeyPair(CSSM_CSP_HANDLE cspHand,
89 CSSM_DL_DB_HANDLE *dlDbHand, // optional
90 uint32 algorithm,
91 const char *keyLabel,
92 unsigned keyLabelLen,
93 uint32 keySize, // in bits
94 CSSM_KEY_PTR pubKey, // mallocd by caller
95 CSSM_KEYUSE pubKeyUsage, // CSSM_KEYUSE_ENCRYPT, etc.
96 CSSM_KEYATTR_FLAGS pubAttrs, // CSSM_KEYATTR_EXTRACTABLE, etc.
97 CSSM_KEY_PTR privKey, // mallocd by caller
98 CSSM_KEYUSE privKeyUsage, // CSSM_KEYUSE_DECRYPT, etc.
99 CSSM_KEYATTR_FLAGS privAttrs); // CSSM_KEYATTR_EXTRACTABLE, etc.
100
101 /* Convert a reference key to a raw key. */
102 CSSM_RETURN srRefKeyToRaw(CSSM_CSP_HANDLE cspHand,
103 const CSSM_KEY *refKey,
104 CSSM_KEY_PTR rawKey); // RETURNED
105
106 /*
107 * Add a certificate to a keychain.
108 */
109 CSSM_RETURN srAddCertToKC(
110 SecKeychainRef keychain,
111 const CSSM_DATA *cert,
112 CSSM_CERT_TYPE certType,
113 CSSM_CERT_ENCODING certEncoding,
114 const char *printName, // C string
115 const CSSM_DATA *keyLabel); // ??
116
117 /*
118 * Convert a CSSM_DATA_PTR, referring to a DER-encoded int, to an
119 * unsigned.
120 */
121 unsigned srDER_ToInt(
122 const CSSM_DATA *DER_Data);
123
124 char *srCfStrToCString(
125 CFStringRef cfStr);
126
127 #ifdef __cplusplus
128 }
129 #endif
130
131 #endif /* _COMMON_CDSA_UTILS_H_ */