Ссылка SecCustomTransform.h
Пользовательскими преобразованиями является API, предоставляющий возможность для простого создания новых преобразований. Существенные функции преобразования создаются в наборе блоков. Эти блоки переопределяют стандартное поведение основного преобразования; пользовательское преобразование без переопределений является нулевым преобразованием, просто проходящим через поток данных.
Новый тип преобразования создается при вызывании функции SecTransformRegister, регистрирующей имя нового преобразования и устанавливающей его переопределения. Функция SecTransformCreate создает новый экземпляр зарегистрированного пользовательского преобразования.
Демонстрационное пользовательское преобразование предоставлено здесь, вместе с программой базового теста. Это преобразование создает шифр Цезаря, преобразовывают, тот, просто добавляющий значение к каждому байту простого текста.
-----сокращение здесь-----
//// CaesarXform.c//// Copyright 2010 Apple Inc. All rights reserved.////#include <Security/SecCustomTransform.h>#include <Security/SecTransform.h>// This is the unique name for the custom transform type.const CFStringRef kCaesarCipher = CFSTR("com.apple.caesarcipher");// Name of the "key" attribute.const CFStringRef kKeyAttributeName = CFSTR("key");// Shortcut to return a CFError.CFErrorRef invalid_input_error(void){return CFErrorCreate(kCFAllocatorDefault, kSecTransformErrorDomain,kSecTransformErrorInvalidInput, NULL);}// =========================================================================// Implementation of the Transform instance// =========================================================================static SecTransformInstanceBlock CaesarImplementation(CFStringRef name,SecTransformRef newTransform,SecTransformImplementationRef ref){SecTransformInstanceBlock instanceBlock =^{CFErrorRef result = NULL;// Every time a new instance of this custom transform class is// created, this block is called. This behavior means that any// block variables created in this block act like instance// variables for the new custom transform instance.__block int _key = 0;result = SecTransformSetAttributeAction(ref,kSecTransformActionAttributeNotification,kKeyAttributeName,^(SecTransformAttributeRef name, CFTypeRef d){CFNumberGetValue((CFNumberRef)d, kCFNumberIntType, &_key);return d;});if (result)return result;// Create an override that will be called to process the input// data into the output dataresult = SecTransformSetDataAction(ref,kSecTransformActionProcessData,^(CFTypeRef d){if (NULL == d) // End of stream?return (CFTypeRef) NULL; // Just return a null.char *dataPtr = (char *)CFDataGetBytePtr((CFDataRef)d);CFIndex dataLength = CFDataGetLength((CFDataRef)d);// Do the processing in memory. There are better ways to do// this but for showing how custom transforms work this is fine.char *buffer = (char *)malloc(dataLength);if (NULL == buffer)return (CFTypeRef) invalid_input_error(); // Return a CFErrorRef// Do the work of the caesar cipher (Rot(n))CFIndex i;for (i = 0; i < dataLength; i++)buffer[i] = dataPtr[i] + _key;return (CFTypeRef)CFDataCreateWithBytesNoCopy(NULL, (UInt8 *)buffer,dataLength, kCFAllocatorMalloc);});return result;};return Block_copy(instanceBlock);}SecTransformRef CaesarTransformCreate(CFIndex k, CFErrorRef* error){SecTransformRef caesarCipher;__block Boolean result = 1;static dispatch_once_t registeredOK = 0;dispatch_once(®isteredOK,^{result = SecTransformRegister(kCaesarCipher, &CaesarImplementation, error);});if (!result)return NULL;caesarCipher = SecTransformCreate(kCaesarCipher, error);if (NULL != caesarCipher){CFNumberRef keyNumber = CFNumberCreate(kCFAllocatorDefault,kCFNumberIntType, &k);SecTransformSetAttribute(caesarCipher, kKeyAttributeName,keyNumber, error);CFRelease(keyNumber);}return caesarCipher;}// The second function shows how to use custom transform defined in the// previous function// =========================================================================// Use a custom ROT-N (caesar cipher) transform// =========================================================================CFDataRef TestCaesar(CFDataRef theData, int rotNumber){CFDataRef result = NULL;CFErrorRef error = NULL;if (NULL == theData)return result;// Create an instance of the custom transformSecTransformRef caesarCipher = CaesarTransformCreate(rotNumber, &error);if (NULL == caesarCipher || NULL != error)return result;// Set the data to be transformed as the input to the custom transformSecTransformSetAttribute(caesarCipher,kSecTransformInputAttributeName, theData, &error);if (NULL != error){CFRelease(caesarCipher);return result;}// Execute the transform synchronouslyresult = (CFDataRef)SecTransformExecute(caesarCipher, &error);CFRelease(caesarCipher);return result;}#include <CoreFoundation/CoreFoundation.h>int main (int argc, const char *argv[]){CFDataRef testData, testResult;UInt8 bytes[26];int i;// Create some test data, a string from A-Zfor (i = 0; i < sizeof(bytes); i++)bytes[i] = 'A' + i;testData = CFDataCreate(kCFAllocatorDefault, bytes, sizeof(bytes));CFRetain(testData);CFShow(testData);// Encrypt the test datatestResult = TestCaesar(testData, 3);CFShow(testResult);CFRelease(testData);CFRelease(testResult);return 0;}
Включенные заголовки
<Security/SecTransform.h>
-
Позвольте пользовательскому преобразованию получать значение атрибута
Объявление
Objective C
CFTypeRef SecTranformCustomGetAttribute ( SecTransformImplementationRef ref, SecTransformStringOrAttributeRef attribute, SecTransformMetaAttributeType type );Параметры
refSecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
attributeИмя или дескриптор атрибута атрибута, значение которого должно быть получено.
typeТип данных, которые будут получены для атрибута. Посмотрите обсуждение SecTransformMetaAttributeType для подробных данных.
Возвращаемое значение
Значение атрибута.
Оператор импорта
Objective C
@import Security;Доступность
Доступный в OS X v10.7 и позже.
Осуждаемый в OS X v10.8.
-
Создает объект вычисления преобразования.
Объявление
Swift
func SecTransformCreate(_name: CFString!, _error: UnsafeMutablePointer<Unmanaged<CFError>?>) -> Unmanaged<SecTransform>!Objective C
SecTransformRef SecTransformCreate ( CFStringRef name, CFErrorRef *error );Параметры
nameТип преобразования для создания, должно быть, был зарегистрирован SecTransformRegister, или быть предопределенной системой преобразовывают тип.
errorУказатель на CFErrorRef. Если ошибка произошла, этот указатель установлен. Если Вы не хотите возвращенной ошибки, этим значением может быть NULL.
Возвращаемое значение
Указатель на объект SecTransformRef. Этот объект должен быть выпущен с CFRelease, когда Вы сделаны с ним. Если ошибка произошла, эта функция возвращает NULL.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Позвольте пользовательскому преобразованию получать значение атрибута
Объявление
Swift
func SecTransformCustomGetAttribute(_ref: SecTransformImplementation!, _attribute: SecTransformStringOrAttribute!, _type: SecTransformMetaAttributeType) -> Unmanaged<AnyObject>!Objective C
CFTypeRef SecTransformCustomGetAttribute ( SecTransformImplementationRef ref, SecTransformStringOrAttributeRef attribute, SecTransformMetaAttributeType type );Параметры
refSecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
attributeИмя или дескриптор атрибута атрибута, значение которого должно быть получено.
typeТип данных, которые будут получены для атрибута. Посмотрите обсуждение SecTransformMetaAttributeType для подробных данных.
Возвращаемое значение
Значение атрибута.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.8 и позже.
-
Позвольте пользовательскому преобразованию устанавливать значение атрибута
Объявление
Swift
func SecTransformCustomSetAttribute(_ref: SecTransformImplementation!, _attribute: SecTransformStringOrAttribute!, _type: SecTransformMetaAttributeType, _value: AnyObject!) -> Unmanaged<AnyObject>!Objective C
CFTypeRef SecTransformCustomSetAttribute ( SecTransformImplementationRef ref, SecTransformStringOrAttributeRef attribute, SecTransformMetaAttributeType type, CFTypeRef value );Параметры
refSecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
attributeИмя или дескриптор атрибута атрибута, значение которого должно быть установлено.
typeТип данных, которые будут получены для атрибута. Посмотрите обсуждение SecTransformMetaAttributeType для подробных данных.
valueНовое значение для атрибута
Возвращаемое значение
CFErrorRef, если ошибка произошла, NULL иначе.
Обсуждение
В то время как преобразование выполняется, в отличие от SecTransformSetAttribute API этот API может установить значения атрибута. Эти значения ограничиваются пользовательским экземпляром преобразования, связывающимся с касательно параметра.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Возвраты поддерживают CFTypeRef из переопределения processData, говорящего, что, в то время как никакие данные не возвращаются, преобразование является все еще активными и ждущими данными.
Объявление
Swift
func SecTransformNoData() -> Unmanaged<AnyObject>!Objective C
CFTypeRef SecTransformNoData ( void );Возвращаемое значение
'Специальное' значение, признающее, что указывает, что преобразование является все еще активными и ждущими данными.
Обсуждение
Стандартное поведение для переопределения ProcessData состоит в том, что оно получит CFDataRef, и оно обрабатывает те данные и возвращает CFDataRef, содержащий обработанные данные. То, когда больше нет данных для обработки блока переопределения ProcessData, вызывают в один прошлый раз с NULL CFDataRef. Блок ProcessData должен возвратить NULL CFDataRef для завершения обработки. Эта модель не работает хорошо на некоторые преобразования. Например, обзор преобразовывает потребности видеть ALL данных, переваривающихся, прежде чем это сможет отослать значение обзора.
Если блок ProcessData не имеет никаких данных для возврата, он может возвратить SecTransformNoData (), который сообщает системе преобразования, что нет никаких данных для передачи к следующему преобразованию.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Допускает откладывание единственного значения для определенного атрибута. Это остановит поток данных в указанный атрибут, пока любой атрибут не будет изменен для экземпляра преобразования, связанного с касательно параметра.
Объявление
Swift
func SecTransformPushbackAttribute(_ref: SecTransformImplementation!, _attribute: SecTransformStringOrAttribute!, _value: AnyObject!) -> Unmanaged<AnyObject>!Objective C
CFTypeRef SecTransformPushbackAttribute ( SecTransformImplementationRef ref, SecTransformStringOrAttributeRef attribute, CFTypeRef value );Параметры
refSecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
attributeИмя или дескриптор атрибута атрибута, значение которого должно быть пододвинуто обратно.
valueПододвигаемое обратно значение.
Возвращаемое значение
CFErrorRef, если ошибка произошла, NULL иначе.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Зарегистрируйте новое пользовательское преобразование так, чтобы оно могло использоваться для обработки данных
Объявление
Swift
func SecTransformRegister(_uniqueName: CFString!, _createTransformFunction: SecTransformCreateFP, _error: UnsafeMutablePointer<Unmanaged<CFError>?>) -> BooleanObjective C
Boolean SecTransformRegister ( CFStringRef uniqueName, SecTransformCreateFP createTransformFunction, CFErrorRef *error );Параметры
uniqueNameУникальное имя для этого пользовательского преобразования. Рекомендуется, чтобы обратное имя DNS использовалось для имени Вашего пользовательского преобразования
createTransformFunctionУказатель функции SecTransformCreateFP. Функция должна возвратить блок SecTransformInstanceBlock, что к block_copy обратились прежде, чем возвратить блок. Отказ вызвать block_copy вызовет неопределенное поведение.
errorЕсли ошибка произошла, этот указатель установлен. Если Вы не хотите возвращенной ошибки, этим значением может быть NULL.
Возвращаемое значение
Истина, если пользовательское преобразование было зарегистрировано ложь иначе
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Будьте уведомлены, когда будет установлен атрибут. Когда атрибут установлен, предоставленный блок вызывают. Это может быть сделано для определенного именованного атрибута или всех атрибутов.
Объявление
Swift
func SecTransformSetAttributeAction(_ref: SecTransformImplementation!, _action: CFString!, _attribute: SecTransformStringOrAttribute!, _newAction: SecTransformAttributeActionBlock!) -> Unmanaged<CFError>!Objective C
CFErrorRef SecTransformSetAttributeAction ( SecTransformImplementationRef ref, CFStringRef action, SecTransformStringOrAttributeRef attribute, SecTransformAttributeActionBlock newAction );Параметры
refSecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
actionПоведение, которое будет установлено. Это может быть одним из следующих действий:
kSecTransformActionAttributeNotification - добавьте блок, который вызывают, когда установлен атрибут. Если именем является NULL, то предоставленный блок вызывают для всех атрибутов набора за исключением, имеющих определенный блок как обработчик.
Например, если существует обработчик для атрибута «foo» и для всех атрибутов, «foo» обработчик вызывают, когда атрибут «foo» установлен, но все другие наборы атрибута вызовут обработчик NULL.
kSecTransformActionProcessData действие является особым случаем действия SecTransformSetAttributeAction. Если это вызовут на входном атрибуте тогда, то он перезапишет любой установленный kSecTransformActionProcessData.
kSecTransformActionAttributeValidation Добавляют блок, который вызывают для проверки ввода к атрибуту.
attributeИмя атрибута, который будет обработан. Ссылка на атрибут может также быть дана здесь. Имя NULL указывает, что предоставленное действие для всех атрибутов.
newActionSecTransformAttributeActionBlock, реализующий поведение.
Возвращаемое значение
CFErrorRef, если ошибка произошла NULL иначе.
Обсуждение
Когда параметром атрибута является NULL, эта функция может быть вызвана многократно или для именованного атрибута или для всех атрибутов. Каждый раз, когда API вызывают, это перезаписывает то, что было там ранее.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Измените способ, которым пользовательское преобразование сделает обработку данных. То, когда параметр действия будет kSecTransformActionProcessData, блок newAction изменит путь, которые вводят данные, обрабатывается для становления выходными данными. Когда параметр действия будет kSecTransformActionInternalizeExtraData, это изменит способ, которым пользовательское преобразование читает в данных, которые будут импортированы в преобразование.
Объявление
Swift
func SecTransformSetDataAction(_ref: SecTransformImplementation!, _action: CFString!, _newAction: SecTransformDataBlock!) -> Unmanaged<CFError>!Objective C
CFErrorRef SecTransformSetDataAction ( SecTransformImplementationRef ref, CFStringRef action, SecTransformDataBlock newAction );Параметры
refSecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
actionПереопределяемое действие. Это значение должно быть одним из следующего: Изменение kSecTransformActionProcessData путь, которые вводят данные, обрабатывается в выходные данные. Поведение по умолчанию состоит в том, чтобы просто скопировать входные данные в выходной атрибут.
kSecTransformActionProcessData действие является действительно особым случаем действия SecTransformSetAttributeAction. При вызове этого метода с kSecTransformActionProcessData, это перезаписало бы любое kSecTransformActionAttributeNotification действие, установленное proviously
kSecTransformActionInternalizeExtraData Изменяют способ, которым пользовательские воплощенные данные импортируются в преобразование. Поведение по умолчанию ничего не состоит в том, чтобы сделать.
newActionSecTransformDataBlock, реализующий поведение.
Если параметр действия будет kSecTransformActionProcessData тогда, то этот блок вызовут для обработки входных данных в выходные данные.
если параметр действия будет kSecTransformActionInternalizeExtraData тогда, то этот блок будет вызванный для ввода пользовательских данных в преобразование.
Возвращаемое значение
CFErrorRef является ошибкой, произошедшей NULL иначе.
Обсуждение
Этот API можно вызвать многократно. Каждый раз, когда API вызывают, это перезаписывает то, что было там ранее.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Блок, переопределяющий поведение по умолчанию пользовательского преобразования.
Объявление
Swift
typealias SecTransformActionBlock = () -> Unmanaged<AnyObject>!Objective C
typedef CFTypeRef (^ SecTransformActionBlock )( void);Возвращаемое значение
Если этот блок привык к сверхъязю kSecTransformActionExternalizeExtraData действие тогда, блок должен возвратить CFDictinaryRef пользовательских элементов, которые будут экспортироваться. Для всех других действий блок должен возвратить NULL. Если ошибка происходит для какого-либо действия, блок должен возвратить CFErrorRef.
Обсуждение
Блок SecTransformTransformActionBlock используется для переопределения поведения по умолчанию пользовательского преобразования. Этот блок связан с блоком SecTransformOverrideTransformAction.
Способы поведения, которые могут быть переопределены:
kSecTransformActionCanExecute Определяют, имеет ли преобразование все данные, должен был работать.
kSecTransformActionStartingExecution, Вызванный прежде, чем выполнить ProcessData.
kSecTransformActionFinalize, Вызванный прежде, чем удалить пользовательское преобразование.
kSecTransformActionExternalizeExtraData, Вызванный для обеспечения выписывания пользовательских данных, которые будут экспортироваться.
Пример:
SecTransformImplementationRef ref;CFErrorRef error = NULL;error = SecTransformSetTransformAction(ref, kSecTransformActionStartingExecution,^{// This is where the work to initialize any data needed// before runningCFErrorRef result = DoMyInitialization();return result;});SecTransformTransformActionBlock actionBlock =^{// This is where the work to clean up any existing data// before runningCFErrorRef result = DoMyFinalization();return result;};error = SecTransformSetTransformAction(ref, kSecTransformActionFinalize,actionBlock);
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Блок раньше переопределял обработку атрибута по умолчанию для того, когда установлен атрибут.
Объявление
Swift
typealias SecTransformAttributeActionBlock = (SecTransformAttribute!, AnyObject!) -> Unmanaged<AnyObject>!Objective C
typedef CFTypeRef (^SecTransformAttributeActionBlock)( SecTransformAttributeRef attribute, CFTypeRef value);Параметры
attributeАтрибут, значение по умолчанию которого переопределяется или NULL, если это - универсальное переопределение уведомления
valueПредложенное новое значение для атрибута.
Возвращаемое значение
Новое значение атрибута в случае успеха. Если ошибка произошла тогда, CFErrorRef возвращается. Если преобразование должно иметь CFErrorRef как значение атрибута, то CFErrorRef должен быть размещен в контейнер, такой как CFArrayRef, CFDictionaryRef и т.д.
Обсуждение
Посмотрите пример программы в этом заголовке для большего количества подробных данных.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Указатель функции к функции, которая создаст новый экземпляр пользовательского преобразования.
Объявление
Swift
typealias SecTransformCreateFP = CFunctionPointer<((CFString!, SecTransform!, SecTransformImplementation!) -> SecTransformInstanceBlock!)>Objective C
typedef SecTransformInstanceBlock ( *SecTransformCreateFP)( CFStringRef name, SecTransformRef newTransform, SecTransformImplementationRef ref);Параметры
nameИмя нового пользовательского преобразования. Это имя MUST быть уникальным.
newTransformНедавно создаваемый преобразовывают Касательно.
refСсылка, связывающаяся с экземпляром пользовательского преобразования.
Возвращаемое значение
SecTransformInstanceBlock, использующийся для создания нового экземпляра пользовательского преобразования.
Обсуждение
Функция CreateTransform создает новое преобразование. SecTransformInstanceBlock, возвращающийся из этой функции, обеспечивает реализацию всех переопределений, необходимых для создания пользовательского преобразования. Это возвратилось, SecTransformInstanceBlock также, где могут быть определены переменные «экземпляра» для пользовательского преобразования. Посмотрите пример в разделе заголовка этого файла для большего количества подробности.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Блок, используемый для переопределения обработки данных по умолчанию для преобразования.
Объявление
Swift
typealias SecTransformDataBlock = (AnyObject!) -> Unmanaged<AnyObject>!Objective C
typedef CFTypeRef (^SecTransformDataBlock)( CFTypeRef data);Параметры
dataДанные, которые будут обработаны. Когда этот блок привык к реализовать kSecTransformActionProcessData действие, данные являются входными данными, которые должны быть обработаны в выходные данные. Когда этот блок используется для реализации kSecTransformActionInternalizeExtraData действия, данными является CFDictionaryRef, содержащий данные, которые должны быть импортированы.
Возвращаемое значение
То, когда этот блок привык к implment kSecTransformActionProcessData действие, значение возвратилось, должно быть данными, которые будут переданы выходному атрибуту. Если бы ошибка произошла при обработке входных данных тогда, то блок должен возвратить CFErrorRef.
Когда этот блок используется для реализации kSecTransformActionInternalizeExtraData действия тогда, этот блок должен возвратить NULL или CFErrorRef, если бы произошла ошибка.
Обсуждение
Дополнительную информацию см. в примере программы.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Это - блок, возвращающийся из реализации функции CreateTransform.
Объявление
Swift
typealias SecTransformInstanceBlock = () -> Unmanaged<CFError>!Objective C
typedef CFErrorRef (^ SecTransformInstanceBlock )( void);Возвращаемое значение
CFErrorRef, если ошибка произошла или NULL.
Обсуждение
Блок экземпляра, возвращающийся от разработчиков функция CreateTransform, определяет поведение пользовательского атрибута. Посмотрите пример во главе этого файла.
Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
Посмотрите раздел Overview выше для документации уровня заголовка.
-
Прямая ссылка к атрибуту. Используя ссылку на атрибут ускоряет использование значения атрибута путем устранения необходимости искать его по имени.
Объявление
Swift
typealias SecTransformAttributeRef = SecTransformAttributeObjective C
typedef CFTypeRef SecTransformAttributeRef;Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
SecTransformImplementationRef является указателем на блок, реализующий экземпляр преобразования.
Объявление
Swift
typealias SecTransformImplementationRef = SecTransformImplementationObjective C
typedef const struct OpaqueSecTransformImplementation* SecTransformImplementationRef;Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
-
Этот тип показывает, что могут использоваться или CFStringRef или SecTransformAttributeRef.
Объявление
Swift
typealias SecTransformStringOrAttributeRef = SecTransformStringOrAttributeObjective C
typedef CFTypeRef SecTransformStringOrAttributeRef;Оператор импорта
Objective C
@import Security;Swift
import SecurityДоступность
Доступный в OS X v10.7 и позже.
Посмотрите раздел Overview выше для документации уровня заголовка.
-
Объявление
Swift
let kSecTransformActionAttributeNotification: CFString! let kSecTransformActionAttributeValidation: CFString! let kSecTransformActionCanExecute: CFString! let kSecTransformActionExternalizeExtraData: CFString! let kSecTransformActionFinalize: CFString! let kSecTransformActionInternalizeExtraData: CFString! let kSecTransformActionProcessData: CFString! let kSecTransformActionStartingExecution: CFString!Objective C
CF_EXPORT const CFStringRef kSecTransformActionAttributeNotification; CF_EXPORT const CFStringRef kSecTransformActionAttributeValidation; CF_EXPORT const CFStringRef kSecTransformActionCanExecute; CF_EXPORT const CFStringRef kSecTransformActionExternalizeExtraData; CF_EXPORT const CFStringRef kSecTransformActionFinalize; CF_EXPORT const CFStringRef kSecTransformActionInternalizeExtraData; CF_EXPORT const CFStringRef kSecTransformActionProcessData; CF_EXPORT const CFStringRef kSecTransformActionStartingExecution; CF_EXPORT const CFStringRef kSecTransformActionAttributeNotification;Константы
-
kSecTransformActionAttributeNotificationkSecTransformActionAttributeNotificationКогда атрибут установлен, позволяет блоку быть вызванным. Это допускает кэширование значения как основная переменная в блоке экземпляра или превращении данных, которые будут установлены. Это действие состоит в том, где пользовательское преобразование было бы в состоянии сделать обработку за пределами обработки ввода для вывода, как обрабатывают данные, делает. Один данные были обработаны, блок действия может вызвать SecTransformCustomSetAttribute для обновления и другой атрибут.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionAttributeValidationkSecTransformActionAttributeValidationПозволяет блоку быть вызванным для проверки нового значения для атрибута. Значение по умолчанию не является никакой проверкой, и любой CFTypeRef может использоваться в качестве нового значения. Если значение в порядке для установки на атрибуте или CFErrorRef иначе, блок должен возвратить NULL.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionCanExecutekSecTransformActionCanExecuteПереопределяет стандартное поведение, проверяющее, чтобы видеть, были ли все требуемые атрибуты или установлены или подключены к другим, преобразовывают. При переопределении поведения по умолчанию разработчик может решенный, что необходимые данные должны иметь для преобразования, которое будут считать 'готовыми работать'. Возврат NULL означает, что преобразование готово быть выполненным. Если преобразование не готово работать тогда, переопределение должно возвратить CFErrorRef, предусматривающий ошибку.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionExternalizeExtraDatakSecTransformActionExternalizeExtraDataДопускает добавление к данным, хранящимся с помощью переопределения для блока kSecTransformActionExternalizeExtraData. Вывод этого переопределения является словарем, содержащим пользовательские воплощенные данные. Общее использование этого переопределения должно выписать номер версии пользовательского преобразования.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionFinalizekSecTransformActionFinalizeПереопределяет стандартное поведение, происходящее прежде, чем удалить пользовательское преобразование. Это обычно переопределяется для обеспечения памяти, очищают пользовательского преобразования. Это используется с блоком SecTransformOverrideTransformAction.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionInternalizeExtraDatakSecTransformActionInternalizeExtraDataПереопределяет стандарт, обрабатывающий, который происходит, когда воплощенные данные используются для создания преобразования. Это близко связывается к переопределению kSecTransformActionExternalizeExtraData. 'Нормальные' атрибуты читаются в новое преобразование, и затем это вызывают для чтения в элементах, выписанных с помощью kSecTransformActionExternalizeExtraData переопределение. Общее использование этого переопределения должно было бы читать в номере версии воплощенного пользовательского преобразования.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionProcessDatakSecTransformActionProcessDataПереопределяет стандартную обработку данных для атрибута. Это почти исключительно используется для обработки входного атрибута, поскольку возвращаемое значение их блока устанавливает выходной атрибут. Это используется с блоком SecTransformOverrideAttributeAction.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionStartingExecutionkSecTransformActionStartingExecutionПереопределяет стандартное поведение, происходящее как раз перед стартовым выполнением пользовательского преобразования. Это обычно переопределяется для обеспечения инициализации. Это используется с блоком SecTransformOverrideTransformAction.
Доступный в OS X v10.7 и позже.
-
SecTransformActionAttributeNotificationSecTransformActionAttributeNotificationКогда атрибут установлен, позволяет блоку быть вызванным. Это допускает кэширование значения как основная переменная в блоке экземпляра или превращении данных, которые будут установлены. Это действие состоит в том, где пользовательское преобразование было бы в состоянии сделать обработку за пределами обработки ввода для вывода, как обрабатывают данные, делает. Один данные были обработаны, блок действия может вызвать SecTransformCustomSetAttribute для обновления и другой атрибут.
-
-
Объявление
Swift
var kSecTransformMetaAttributeValue: Int { get } var kSecTransformMetaAttributeName: Int { get } var kSecTransformMetaAttributeRef: Int { get } var kSecTransformMetaAttributeRequired: Int { get } var kSecTransformMetaAttributeRequiresOutboundConnection: Int { get } var kSecTransformMetaAttributeDeferred: Int { get } var kSecTransformMetaAttributeStream: Int { get } var kSecTransformMetaAttributeCanCycle: Int { get } var kSecTransformMetaAttributeExternalize: Int { get } var kSecTransformMetaAttributeHasOutboundConnections: Int { get } var kSecTransformMetaAttributeHasInboundConnection: Int { get }Objective C
enum { kSecTransformMetaAttributeValue, kSecTransformMetaAttributeName, kSecTransformMetaAttributeRef, kSecTransformMetaAttributeRequired, kSecTransformMetaAttributeRequiresOutboundConnection, kSecTransformMetaAttributeDeferred, kSecTransformMetaAttributeStream, kSecTransformMetaAttributeCanCycle, kSecTransformMetaAttributeExternalize, kSecTransformMetaAttributeHasOutboundConnections, kSecTransformMetaAttributeHasInboundConnection };Константы
-
kSecTransformMetaAttributeValuekSecTransformMetaAttributeValueФактическое значение атрибута. Значение атрибута имеет значение по умолчанию NULL.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeNamekSecTransformMetaAttributeNameИмя атрибута. Название атрибута только для чтения и не может использоваться с блоком SecTransformSetAttributeBlock.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeRefkSecTransformMetaAttributeRefПрямая ссылка к значению атрибута. Эта ссылка допускает прямой доступ к атрибуту, не имея необходимость искать атрибут по имени. Если преобразование обычно использует атрибут, с помощью расчетные скорости использование того атрибута. Ссылки на атрибут не видимы или допустимы от за пределами определенного экземпляра преобразования.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeRequiredkSecTransformMetaAttributeRequiredУказывает, должен ли атрибут иметь не набор Значения Нулевого или иметь входящее соединение, прежде чем преобразование начнет выполняться. Эти метаданные имеют значение по умолчанию истины для входного атрибута, но лжи для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeRequiresOutboundConnectionkSecTransformMetaAttributeRequiresOutboundConnectionУказывает, должен ли атрибут иметь исходящее соединение. Эти метаданные имеют значение по умолчанию истины для выходного атрибута, но являются ложью для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeDeferredkSecTransformMetaAttributeDeferredОпределяет, задерживаются ли уведомление AttributeSetNotification или блоки ProcessData, пока SecExecuteTransform не вызывают. Это значение метаданных имеет значение по умолчанию истины для входного атрибута, но является ложью для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeStreamkSecTransformMetaAttributeStreamУказывает, должен ли атрибут ожидать, что серия значений, заканчивающихся NULL, укажет конец потока данных. Эти метаданные имеют значение по умолчанию истины для атрибутов ввода и вывода, но являются ложью для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeCanCyclekSecTransformMetaAttributeCanCycleГруппа Преобразования является направленным графом, который является обычно нециклическим. Некоторые преобразования должны работать с циклами. Например, преобразование, испускающее заголовок и метку конца вокруг данных других преобразование, должно создать цикл. Если цикл обнаруживается для этого атрибута, если этот набор метаданных к истине, не возвращается никакая ошибка.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeExternalizekSecTransformMetaAttributeExternalizeУказывает, должен ли этот атрибут быть выписан при создании внешнего представления этого преобразования. Эти метаданные имеют значение по умолчанию истины.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeHasOutboundConnectionskSecTransformMetaAttributeHasOutboundConnectionsЕсли атрибут имеет исходящее соединение, это значение метаданных является истиной. Эти метаданные только для чтения.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeHasInboundConnectionkSecTransformMetaAttributeHasInboundConnectionЕсли атрибут имеет входящее соединение, это значение метаданных является истиной. Эти метаданные только для чтения.
Доступный в OS X v10.7 и позже.
Обсуждение
В преобразовании каждый из его атрибутов является набором «атрибутов метаданных», из которых называют, и текущая стоимость два. Значение непосредственно видимо извне; другие метаданные приписывают прямой поведение преобразования и его функции в его группе. Каждый атрибут может быть адаптирован путем установки его метаданных.
-
