]>
Commit | Line | Data |
---|---|---|
b1ab9ed8 A |
1 | /* |
2 | * Copyright (c) 2006-2010 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 | ||
24 | /*! | |
25 | @header SecCode | |
26 | SecCode represents separately indentified running code in the system. | |
27 | In addition to UNIX processes, this can also include (with suitable support) | |
28 | scripts, applets, widgets, etc. | |
29 | */ | |
30 | #ifndef _H_SECCODE | |
31 | #define _H_SECCODE | |
32 | ||
33 | #include <Security/CSCommon.h> | |
34 | ||
35 | #ifdef __cplusplus | |
36 | extern "C" { | |
37 | #endif | |
38 | ||
39 | ||
40 | /*! | |
41 | @function SecCodeGetTypeID | |
42 | Returns the type identifier of all SecCode instances. | |
43 | */ | |
44 | CFTypeID SecCodeGetTypeID(void); | |
45 | ||
46 | ||
47 | /*! | |
48 | @function SecCodeCopySelf | |
49 | Obtains a SecCode object for the code making the call. | |
50 | The calling code is determined in a way that is subject to modification over | |
51 | time, but obeys the following rules. If it is a UNIX process, its process id (pid) | |
52 | is always used. If it is an active code host that has a dedicated guest, such a guest | |
53 | is always preferred. If it is a host that has called SecHostSelectGuest, such selection | |
54 | is considered until revoked. | |
55 | ||
56 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. | |
57 | @param self Upon successful return, contains a SecCodeRef representing the caller. | |
58 | ||
427c49bc | 59 | @result Upon success, errSecSuccess. Upon error, an OSStatus value documented in |
b1ab9ed8 A |
60 | CSCommon.h or certain other Security framework headers. |
61 | */ | |
62 | OSStatus SecCodeCopySelf(SecCSFlags flags, SecCodeRef *self); | |
63 | ||
64 | ||
65 | /*! | |
66 | @function SecCodeCopyStaticCode | |
67 | Given a SecCode object, locate its origin in the file system and return | |
68 | a SecStaticCode object representing it. | |
69 | ||
70 | The link established by this call is generally reliable but is NOT guaranteed | |
71 | to be secure. | |
72 | ||
73 | Many API functions taking SecStaticCodeRef arguments will also directly | |
74 | accept a SecCodeRef and apply this translation implicitly, operating on | |
75 | its result or returning its error code if any. Each of these functions | |
76 | calls out that behavior in its documentation. | |
77 | ||
78 | If the code was obtained from a universal (aka "fat") program file, | |
79 | the resulting SecStaticCodeRef will refer only to the architecture actually | |
80 | being used. This means that multiple running codes started from the same file | |
81 | may conceivably result in different static code references if they ended up | |
82 | using different execution architectures. (This is unusual but possible.) | |
83 | ||
84 | @param code A valid SecCode object reference representing code running | |
85 | on the system. | |
427c49bc | 86 | |
b1ab9ed8 | 87 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. |
427c49bc A |
88 | @constant kSecCSUseAllArchitectures |
89 | If code refers to a single architecture of a universal binary, return a SecStaticCodeRef | |
90 | that refers to the entire universal code with all its architectures. By default, the | |
91 | returned static reference identifies only the actual architecture of the running program. | |
92 | ||
b1ab9ed8 A |
93 | @param staticCode On successful return, a SecStaticCode object reference representing |
94 | the file system origin of the given SecCode. On error, unchanged. | |
427c49bc | 95 | @result Upon success, errSecSuccess. Upon error, an OSStatus value documented in |
b1ab9ed8 A |
96 | CSCommon.h or certain other Security framework headers. |
97 | */ | |
427c49bc A |
98 | enum { |
99 | kSecCSUseAllArchitectures = 1 << 0, | |
100 | }; | |
101 | ||
b1ab9ed8 A |
102 | OSStatus SecCodeCopyStaticCode(SecCodeRef code, SecCSFlags flags, SecStaticCodeRef *staticCode); |
103 | ||
104 | ||
105 | /*! | |
106 | @function SecCodeCopyHost | |
107 | Given a SecCode object, identify the (different) SecCode object that acts | |
108 | as its host. A SecCode's host acts as a supervisor and controller, | |
109 | and is the ultimate authority on the its dynamic validity and status. | |
110 | The host relationship is securely established (absent reported errors). | |
111 | ||
112 | @param code A valid SecCode object reference representing code running | |
113 | on the system. | |
114 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. | |
115 | @param host On successful return, a SecCode object reference identifying | |
116 | the code's host. | |
427c49bc | 117 | @result Upon success, errSecSuccess. Upon error, an OSStatus value documented in |
b1ab9ed8 A |
118 | CSCommon.h or certain other Security framework headers. |
119 | */ | |
120 | OSStatus SecCodeCopyHost(SecCodeRef guest, SecCSFlags flags, SecCodeRef *host); | |
121 | ||
122 | ||
123 | /*! | |
124 | @function SecCodeCopyGuestWithAttributes | |
125 | This is the omnibus API function for obtaining dynamic code references. | |
126 | In general, it asks a particular code acting as a code host to locate | |
127 | and return a guest with given attributes. Different hosts support | |
128 | different combinations of attributes and values for guest selection. | |
129 | ||
130 | Asking the NULL host invokes system default procedures for obtaining | |
131 | any running code in the system with the attributes given. The returned | |
132 | code may be anywhere in the system. | |
133 | ||
134 | The methods a host uses to identify, separate, and control its guests | |
135 | are specific to each type of host. This call provides a generic abstraction layer | |
136 | that allows uniform interrogation of all hosts. A SecCode that does not | |
137 | act as a host will always return errSecCSNoSuchCode. A SecCode that does | |
138 | support hosting may return itself to signify that the attribute refers to | |
139 | itself rather than one of its hosts. | |
140 | ||
141 | @param host A valid SecCode object reference representing code running | |
142 | on the system that acts as a Code Signing host. As a special case, passing | |
143 | NULL indicates that the Code Signing root of trust should be used as a starting | |
144 | point. Currently, that is the system kernel. | |
145 | @param attributes A CFDictionary containing zero or more attribute selector | |
146 | values. Each selector has a CFString key and associated CFTypeRef value. | |
147 | The key name identifies the attribute being specified; the associated value, | |
148 | whose type depends on the the key name, selects a particular value or other | |
149 | constraint on that attribute. Each host only supports particular combinations | |
150 | of keys and values, and errors will be returned if any unsupported set is requested. | |
151 | As a special case, NULL is taken to mean an empty attribute set. | |
152 | Note that some hosts that support hosting chains (guests being hosts) | |
153 | may return sub-guests in this call. In other words, do not assume that | |
154 | a SecCodeRef returned by this call is a direct guest of the queried host | |
155 | (though it will be a proximate guest, i.e. a guest's guest some way down). | |
156 | Asking the NULL host for NULL attributes returns a code reference for the system root | |
157 | of trust (at present, the running Darwin kernel). | |
158 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. | |
159 | @param guest On successful return, a SecCode object reference identifying | |
160 | the particular guest of the host that owns the attribute value(s) specified. | |
427c49bc A |
161 | This argument will not be changed if the call fails (does not return errSecSuccess). |
162 | @result Upon success, errSecSuccess. Upon error, an OSStatus value documented in | |
b1ab9ed8 A |
163 | CSCommon.h or certain other Security framework headers. In particular: |
164 | @error errSecCSUnsupportedGuestAttributes The host does not support the attribute | |
165 | type given by attributeType. | |
166 | @error errSecCSInvalidAttributeValues The type of value given for a guest | |
167 | attribute is not supported by the host. | |
168 | @error errSecCSNoSuchCode The host has no guest with the attribute value given | |
169 | by attributeValue, even though the value is of a supported type. This may also | |
170 | be returned if the host code does not currently act as a Code Signing host. | |
171 | @error errSecCSNotAHost The specified host cannot, in fact, act as a code | |
172 | host. (It is missing the kSecCodeSignatureHost option flag in its code | |
173 | signature.) | |
174 | @error errSecCSMultipleGuests The attributes specified do not uniquely identify | |
175 | a guest (the specification is ambiguous). | |
176 | */ | |
177 | extern const CFStringRef kSecGuestAttributeCanonical; | |
178 | extern const CFStringRef kSecGuestAttributeHash; | |
179 | extern const CFStringRef kSecGuestAttributeMachPort; | |
180 | extern const CFStringRef kSecGuestAttributePid; | |
427c49bc A |
181 | extern const CFStringRef kSecGuestAttributeDynamicCode; |
182 | extern const CFStringRef kSecGuestAttributeDynamicCodeInfoPlist; | |
b1ab9ed8 A |
183 | extern const CFStringRef kSecGuestAttributeArchitecture; |
184 | extern const CFStringRef kSecGuestAttributeSubarchitecture; | |
185 | ||
186 | OSStatus SecCodeCopyGuestWithAttributes(SecCodeRef host, | |
187 | CFDictionaryRef attributes, SecCSFlags flags, SecCodeRef *guest); | |
188 | ||
189 | ||
190 | /*! | |
191 | @function SecCodeCheckValidity | |
192 | Performs dynamic validation of the given SecCode object. The call obtains and | |
193 | verifies the signature on the code object. It checks the validity of only those | |
194 | sealed components required to establish identity. It checks the SecCode's | |
195 | dynamic validity status as reported by its host. It ensures that the SecCode's | |
196 | host is in turn valid. Finally, it validates the code against a SecRequirement | |
197 | if one is given. The call succeeds if all these conditions are satisfactory. | |
198 | It fails otherwise. | |
199 | ||
200 | This call is secure against attempts to modify the file system source of the | |
201 | SecCode. | |
202 | ||
203 | @param code The code object to be validated. | |
204 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. | |
205 | @param requirement An optional code requirement specifying additional conditions | |
206 | the code object must satisfy to be considered valid. If NULL, no additional | |
207 | requirements are imposed. | |
208 | @param errors An optional pointer to a CFErrorRef variable. If the call fails | |
427c49bc | 209 | (and something other than errSecSuccess is returned), and this argument is non-NULL, |
b1ab9ed8 A |
210 | a CFErrorRef is stored there further describing the nature and circumstances |
211 | of the failure. The caller must CFRelease() this error object when done with it. | |
427c49bc | 212 | @result If validation passes, errSecSuccess. If validation fails, an OSStatus value |
b1ab9ed8 A |
213 | documented in CSCommon.h or certain other Security framework headers. |
214 | */ | |
215 | OSStatus SecCodeCheckValidity(SecCodeRef code, SecCSFlags flags, | |
216 | SecRequirementRef requirement); | |
217 | ||
218 | OSStatus SecCodeCheckValidityWithErrors(SecCodeRef code, SecCSFlags flags, | |
219 | SecRequirementRef requirement, CFErrorRef *errors); | |
220 | ||
221 | ||
222 | /*! | |
223 | @function SecCodeCopyPath | |
224 | For a given Code or StaticCode object, returns a URL to a location on disk where the | |
225 | code object can be found. For single files, the URL points to that file. | |
226 | For bundles, it points to the directory containing the entire bundle. | |
227 | ||
228 | This returns the same URL as the kSecCodeInfoMainExecutable key returned | |
229 | by SecCodeCopySigningInformation. | |
230 | ||
231 | @param code The Code or StaticCode object to be located. For a Code | |
232 | argument, its StaticCode is processed as per SecCodeCopyStaticCode. | |
233 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. | |
234 | @param path On successful return, contains a CFURL identifying the location | |
235 | on disk of the staticCode object. | |
427c49bc | 236 | @result On success, errSecSuccess. On error, an OSStatus value |
b1ab9ed8 A |
237 | documented in CSCommon.h or certain other Security framework headers. |
238 | */ | |
239 | OSStatus SecCodeCopyPath(SecStaticCodeRef staticCode, SecCSFlags flags, | |
240 | CFURLRef *path); | |
241 | ||
242 | ||
243 | /*! | |
244 | @function SecCodeCopyDesignatedRequirement | |
245 | For a given Code or StaticCode object, determines its Designated Code Requirement. | |
246 | The Designated Requirement is the SecRequirement that the code believes | |
247 | should be used to properly identify it in the future. | |
248 | ||
249 | If the SecCode contains an explicit Designated Requirement, a copy of that | |
250 | is returned. If it does not, a SecRequirement is implicitly constructed from | |
251 | its signing authority and its embedded unique identifier. No Designated | |
252 | Requirement can be obtained from code that is unsigned. Code that is modified | |
253 | after signature, improperly signed, or has become invalid, may or may not yield | |
254 | a Designated Requirement. This call does not validate the SecStaticCode argument. | |
255 | ||
256 | @param code The Code or StaticCode object to be interrogated. For a Code | |
257 | argument, its StaticCode is processed as per SecCodeCopyStaticCode. | |
258 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. | |
259 | @param requirement On successful return, contains a copy of a SecRequirement | |
260 | object representing the code's Designated Requirement. On error, unchanged. | |
427c49bc | 261 | @result On success, errSecSuccess. On error, an OSStatus value |
b1ab9ed8 A |
262 | documented in CSCommon.h or certain other Security framework headers. |
263 | */ | |
264 | OSStatus SecCodeCopyDesignatedRequirement(SecStaticCodeRef code, SecCSFlags flags, | |
265 | SecRequirementRef *requirement); | |
266 | ||
267 | ||
268 | /* | |
269 | @function SecCodeCopySigningInformation | |
270 | For a given Code or StaticCode object, extract various pieces of information | |
271 | from its code signature and return them in the form of a CFDictionary. The amount | |
272 | and detail level of the data is controlled by the flags passed to the call. | |
273 | ||
274 | If the code exists but is not signed at all, this call will succeed and return | |
275 | a dictionary that does NOT contain the kSecCodeInfoIdentifier key. This is the | |
276 | recommended way to check quickly whether a code is signed. | |
277 | ||
278 | If the signing data for the code is corrupt or invalid, this call may fail or it | |
279 | may return partial data. To ensure that only valid data is returned (and errors | |
280 | are raised for invalid data), you must successfully call one of the CheckValidity | |
281 | functions on the code before calling CopySigningInformation. | |
282 | ||
283 | @param code The Code or StaticCode object to be interrogated. For a Code | |
284 | argument, its StaticCode is processed as per SecCodeCopyStaticCode. | |
285 | Note that dynamic information (kSecCSDynamicInformation) cannot be obtained | |
286 | for a StaticCode argument. | |
287 | @param flags Optional flags. Use any or all of the kSecCS*Information flags | |
288 | to select what information to return. A generic set of entries is returned | |
289 | regardless; you may specify kSecCSDefaultFlags for just those. | |
290 | @param information A CFDictionary containing information about the code is stored | |
291 | here on successful completion. The contents of the dictionary depend on | |
292 | the flags passed. Regardless of flags, the kSecCodeInfoIdentifier key is | |
293 | always present if the code is signed, and always absent if the code is | |
294 | unsigned. | |
295 | Note that some of the objects returned are (retained) "live" API objects | |
296 | used by the code signing infrastructure. Making changes to these objects | |
297 | is unsupported and may cause subsequent code signing operations on the | |
298 | affected code to behave in undefined ways. | |
427c49bc | 299 | @result On success, errSecSuccess. On error, an OSStatus value |
b1ab9ed8 A |
300 | documented in CSCommon.h or certain other Security framework headers. |
301 | ||
302 | Flags: | |
303 | ||
304 | @constant kSecCSSigningInformation Return cryptographic signing information, | |
305 | including the certificate chain and CMS data (if any). For ad-hoc signed | |
306 | code, there are no certificates and the CMS data is empty. | |
307 | @constant kSecCSRequirementInformation Return information about internal code | |
308 | requirements embedded in the code. This includes the Designated Requirement. | |
309 | @constant kSecCSInternalInformation Return internal code signing information. | |
310 | This information is for use by Apple, and is subject to change without notice. | |
311 | It will not be further documented here. | |
312 | @constant kSecCSDynamicInformation Return dynamic validity information about | |
313 | the Code. The subject code must be a SecCodeRef (not a SecStaticCodeRef). | |
314 | @constant kSecCSContentInformation Return more information about the file system | |
315 | contents making up the signed code on disk. It is not generally advisable to | |
316 | make use of this information, but some utilities (such as software-update | |
317 | tools) may find it useful. | |
318 | ||
319 | Dictionary keys: | |
320 | ||
321 | @constant kSecCodeInfoCertificates A CFArray of SecCertificates identifying the | |
322 | certificate chain of the signing certificate as seen by the system. Absent | |
323 | for ad-hoc signed code. May be partial or absent in error cases. | |
324 | @constant kSecCodeInfoChangedFiles A CFArray of CFURLs identifying all files in | |
325 | the code that may have been modified by the process of signing it. (In other | |
326 | words, files not in this list will not have been touched by the signing operation.) | |
327 | @constant kSecCodeInfoCMS A CFData containing the CMS cryptographic object that | |
328 | secures the code signature. Empty for ad-hoc signed code. | |
329 | @constant kSecCodeInfoDesignatedRequirement A SecRequirement describing the | |
330 | actual Designated Requirement of the code. | |
331 | @constant kSecCodeInfoEntitlements A CFData containing the embedded entitlement | |
332 | blob of the code, if any. | |
333 | @constant kSecCodeInfoEntitlementsDict A CFDictionary containing the embedded entitlements | |
334 | of the code if it has entitlements and they are in standard dictionary form. | |
335 | Absent if the code has no entitlements, or they are in a different format (in which | |
336 | case, see kSecCodeInfoEntitlements). | |
427c49bc A |
337 | @constant kSecCodeInfoFlags A CFNumber with the static (on-disk) state of the object. |
338 | Contants are defined by the type SecCodeSignatureFlags. | |
b1ab9ed8 A |
339 | @constant kSecCodeInfoFormat A CFString characterizing the type and format of |
340 | the code. Suitable for display to a (knowledeable) user. | |
341 | @constant kSecCodeInfoDigestAlgorithm A CFNumber indicating the kind of cryptographic | |
342 | hash function used within the signature to seal its pieces together. | |
343 | @constant kSecCodeInfoIdentifier A CFString with the actual signing identifier | |
344 | sealed into the signature. Absent for unsigned code. | |
345 | @constant kSecCodeInfoImplicitDesignatedRequirement A SecRequirement describing | |
346 | the designated requirement that the system did generate, or would have generated, | |
347 | for the code. If the Designated Requirement was implicitly generated, this is | |
348 | the same object as kSecCodeInfoDesignatedRequirement; this can be used to test | |
349 | for an explicit Designated Requirement. | |
350 | @constant kSecCodeInfoMainExecutable A CFURL identifying the main executable file | |
351 | of the code. For single files, that is the file itself. For bundles, it is the | |
352 | main executable as identified by its Info.plist. | |
353 | @constant kSecCodeInfoPList A retained CFDictionary referring to the secured Info.plist | |
354 | as seen by code signing. Absent if no Info.plist is known to the code signing | |
355 | subsystem. Note that this is not the same dictionary as the one CFBundle would | |
356 | give you (CFBundle is free to add entries to the on-disk plist). | |
357 | @constant kSecCodeInfoRequirements A CFString describing the internal requirements | |
358 | of the code in canonical syntax. | |
359 | @constant kSecCodeInfoRequirementsData A CFData containing the internal requirements | |
360 | of the code as a binary blob. | |
361 | @constant kSecCodeInfoSource A CFString describing the source of the code signature | |
362 | used for the code object. The values are meant to be shown in informational | |
363 | displays; do not rely on the precise value returned. | |
364 | @constant kSecCodeInfoStatus A CFNumber containing the dynamic status word of the | |
365 | (running) code. This is a snapshot at the time the API is executed and may be | |
366 | out of date by the time you examine it. Do note however that most of the bits | |
367 | are sticky and thus some values are permanently reliable. Be careful. | |
368 | @constant kSecCodeInfoTime A CFDate describing the signing date (securely) embedded | |
369 | in the code signature. Note that a signer is able to omit this date or pre-date | |
370 | it. Nobody certifies that this was really the date the code was signed; however, | |
371 | you do know that this is the date the signer wanted you to see. | |
372 | Ad-hoc signatures have no CMS and thus never have secured signing dates. | |
373 | @constant kSecCodeInfoTimestamp A CFDate describing the signing date as (securely) | |
374 | certified by a timestamp authority service. This time cannot be falsified by the | |
375 | signer; you trust the timestamp authority's word on this. | |
376 | Ad-hoc signatures have no CMS and thus never have secured signing dates. | |
377 | @constant kSecCodeInfoTrust The (retained) SecTrust object the system uses to | |
378 | evaluate the validity of the code's signature. You may use the SecTrust API | |
379 | to extract detailed information, particularly for reasons why certificate | |
380 | validation may have failed. This object may continue to be used for further | |
381 | evaluations of this code; if you make any changes to it, behavior is undefined. | |
382 | @constant kSecCodeInfoUnique A CFData binary identifier that uniquely identifies | |
383 | the static code in question. It can be used to recognize this particular code | |
384 | (and none other) now or in the future. Compare to kSecCodeInfoIdentifier, which | |
385 | remains stable across (developer-approved) updates. | |
386 | This is currently the SHA-1 hash of the code's CodeDirectory. However, future | |
387 | versions of the system may use a different algorithm for newly signed code. | |
388 | Already-signed code not change the reported value in this case. | |
b1ab9ed8 A |
389 | */ |
390 | enum { | |
391 | kSecCSInternalInformation = 1 << 0, | |
392 | kSecCSSigningInformation = 1 << 1, | |
393 | kSecCSRequirementInformation = 1 << 2, | |
394 | kSecCSDynamicInformation = 1 << 3, | |
395 | kSecCSContentInformation = 1 << 4 | |
396 | }; | |
397 | ||
398 | /* flag required to get this value */ | |
399 | extern const CFStringRef kSecCodeInfoCertificates; /* Signing */ | |
400 | extern const CFStringRef kSecCodeInfoChangedFiles; /* Content */ | |
401 | extern const CFStringRef kSecCodeInfoCMS; /* Signing */ | |
402 | extern const CFStringRef kSecCodeInfoDesignatedRequirement; /* Requirement */ | |
403 | extern const CFStringRef kSecCodeInfoEntitlements; /* Requirement */ | |
404 | extern const CFStringRef kSecCodeInfoEntitlementsDict; /* Requirement */ | |
427c49bc | 405 | extern const CFStringRef kSecCodeInfoFlags; /* generic */ |
b1ab9ed8 A |
406 | extern const CFStringRef kSecCodeInfoFormat; /* generic */ |
407 | extern const CFStringRef kSecCodeInfoDigestAlgorithm; /* generic */ | |
408 | extern const CFStringRef kSecCodeInfoIdentifier; /* generic */ | |
409 | extern const CFStringRef kSecCodeInfoImplicitDesignatedRequirement; /* Requirement */ | |
410 | extern const CFStringRef kSecCodeInfoMainExecutable; /* generic */ | |
411 | extern const CFStringRef kSecCodeInfoPList; /* generic */ | |
412 | extern const CFStringRef kSecCodeInfoRequirements; /* Requirement */ | |
413 | extern const CFStringRef kSecCodeInfoRequirementData; /* Requirement */ | |
414 | extern const CFStringRef kSecCodeInfoSource; /* generic */ | |
415 | extern const CFStringRef kSecCodeInfoStatus; /* Dynamic */ | |
420ff9d9 | 416 | extern const CFStringRef kSecCodeInfoTeamIdentifier; /* Signing */ |
b1ab9ed8 A |
417 | extern const CFStringRef kSecCodeInfoTime; /* Signing */ |
418 | extern const CFStringRef kSecCodeInfoTimestamp; /* Signing */ | |
419 | extern const CFStringRef kSecCodeInfoTrust; /* Signing */ | |
420 | extern const CFStringRef kSecCodeInfoUnique; /* generic */ | |
b1ab9ed8 A |
421 | |
422 | OSStatus SecCodeCopySigningInformation(SecStaticCodeRef code, SecCSFlags flags, | |
423 | CFDictionaryRef *information); | |
424 | ||
425 | ||
426 | /* | |
427 | @function SecCodeMapMemory | |
428 | For a given Code or StaticCode object, ask the kernel to accept the signing information | |
429 | currently attached to it in the caller and use it to validate memory page-ins against it, | |
430 | updating dynamic validity state accordingly. This change affects all processes that have | |
431 | the main executable of this code mapped. | |
432 | ||
433 | @param code A Code or StaticCode object representing the signed code whose main executable | |
434 | should be subject to page-in validation. | |
435 | @param flags Optional flags. Pass kSecCSDefaultFlags for standard behavior. | |
436 | */ | |
437 | OSStatus SecCodeMapMemory(SecStaticCodeRef code, SecCSFlags flags); | |
438 | ||
439 | ||
440 | #ifdef __cplusplus | |
441 | } | |
442 | #endif | |
443 | ||
444 | #endif //_H_SECCODE |