Validates a static code object.
SDK
- macOS 10.6+
Framework
- Security
Declaration
func SecStaticCodeCheckValidity(_ staticCode: Sec Static Code, _ flags: Sec CSFlags, _ requirement: Sec Requirement?) -> OSStatus
Parameters
staticCode
The static code object to be validated.
flags
Optional flags; see Static Code Validation Flags for possible values. Use
k
to validate all slices of a universal binary.Sec CSCheck All Architectures requirement
A code requirement specifying additional conditions the code must satisfy to be considered valid. Specify
NULL
if you don’t want to impose any additional requirements. Use theSec
orRequirement Create With String(_: _: _:) Sec
function to create a code requirement object. See Code Signing Guide for a discussion of code requirements.Requirement Create With String And Errors(_: _: _: _:)
Return Value
A result code. See Code Signing Services Result Codes.
Discussion
This function obtains and verifies the signature on the code specified by the code object. It checks the validity of all sealed components, including resources (if any). It validates the code against a code requirement if one is specified. The call succeeds if all these conditions are satisfactory.
This call is only secure if the code is not subject to concurrent modification, and the outcome is only valid as long as the code remains unmodified. If the underlying file system has dynamic characteristics, such as a network file system, union mount, or FUSE, you must consider how secure the code is from modification after validation.
When checking a universal binary, include the k
flag. Otherwise the method verifies only one slice of the binary, potentially indicating success without testing all the slices. Be aware that the slices of a universal binary don’t have to be signed by the same signer for the test to pass. One slice might be ad hoc signed, for example. But the validity check doesn’t know which slice you are going to run. For example, the user might use the arch(1) command line utility to pick a 32-bit architecture even though a 64-bit architecture is available.
If you want to be sure to test a particular slice, create the static code object with the Sec
method using the k
and k
attributes (if you know the architecture) or the k
attribute (if you know the offset into the universal binary).