Ссылка 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 data
result = 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 transform
SecTransformRef caesarCipher = CaesarTransformCreate(rotNumber, &error);
if (NULL == caesarCipher || NULL != error)
return result;
// Set the data to be transformed as the input to the custom transform
SecTransformSetAttribute(caesarCipher,
kSecTransformInputAttributeName, theData, &error);
if (NULL != error)
{
CFRelease(caesarCipher);
return result;
}
// Execute the transform synchronously
result = (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-Z
for (i = 0; i < sizeof(bytes); i++)
bytes[i] = 'A' + i;
testData = CFDataCreate(kCFAllocatorDefault, bytes, sizeof(bytes));
CFRetain(testData);
CFShow(testData);
// Encrypt the test data
testResult = TestCaesar(testData, 3);
CFShow(testResult);
CFRelease(testData);
CFRelease(testResult);
return 0;
}
Включенные заголовки
<Security/SecTransform.h>
-
Позвольте пользовательскому преобразованию получать значение атрибута
Объявление
Objective C
CFTypeRef SecTranformCustomGetAttribute ( SecTransformImplementationRef ref, SecTransformStringOrAttributeRef attribute, SecTransformMetaAttributeType type );
Параметры
ref
SecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
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 );
Параметры
ref
SecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
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 );
Параметры
ref
SecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
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 );
Параметры
ref
SecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
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 );
Параметры
ref
SecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
action
Поведение, которое будет установлено. Это может быть одним из следующих действий:
kSecTransformActionAttributeNotification - добавьте блок, который вызывают, когда установлен атрибут. Если именем является NULL, то предоставленный блок вызывают для всех атрибутов набора за исключением, имеющих определенный блок как обработчик.
Например, если существует обработчик для атрибута «foo» и для всех атрибутов, «foo» обработчик вызывают, когда атрибут «foo» установлен, но все другие наборы атрибута вызовут обработчик NULL.
kSecTransformActionProcessData действие является особым случаем действия SecTransformSetAttributeAction. Если это вызовут на входном атрибуте тогда, то он перезапишет любой установленный kSecTransformActionProcessData.
kSecTransformActionAttributeValidation Добавляют блок, который вызывают для проверки ввода к атрибуту.
attribute
Имя атрибута, который будет обработан. Ссылка на атрибут может также быть дана здесь. Имя NULL указывает, что предоставленное действие для всех атрибутов.
newAction
SecTransformAttributeActionBlock, реализующий поведение.
Возвращаемое значение
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 );
Параметры
ref
SecTransformImplementationRef, связывающийся с экземпляром пользовательского преобразования.
action
Переопределяемое действие. Это значение должно быть одним из следующего: Изменение kSecTransformActionProcessData путь, которые вводят данные, обрабатывается в выходные данные. Поведение по умолчанию состоит в том, чтобы просто скопировать входные данные в выходной атрибут.
kSecTransformActionProcessData действие является действительно особым случаем действия SecTransformSetAttributeAction. При вызове этого метода с kSecTransformActionProcessData, это перезаписало бы любое kSecTransformActionAttributeNotification действие, установленное proviously
kSecTransformActionInternalizeExtraData Изменяют способ, которым пользовательские воплощенные данные импортируются в преобразование. Поведение по умолчанию ничего не состоит в том, чтобы сделать.
newAction
SecTransformDataBlock, реализующий поведение.
Если параметр действия будет 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 running
CFErrorRef result = DoMyInitialization();
return result;
});
SecTransformTransformActionBlock actionBlock =
^{
// This is where the work to clean up any existing data
// before running
CFErrorRef 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 = SecTransformAttribute
Objective C
typedef CFTypeRef SecTransformAttributeRef;
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.7 и позже.
-
SecTransformImplementationRef является указателем на блок, реализующий экземпляр преобразования.
Объявление
Swift
typealias SecTransformImplementationRef = SecTransformImplementation
Objective C
typedef const struct OpaqueSecTransformImplementation* SecTransformImplementationRef;
Оператор импорта
Objective C
@import Security;
Swift
import Security
Доступность
Доступный в OS X v10.7 и позже.
-
Этот тип показывает, что могут использоваться или CFStringRef или SecTransformAttributeRef.
Объявление
Swift
typealias SecTransformStringOrAttributeRef = SecTransformStringOrAttribute
Objective 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;
Константы
-
kSecTransformActionAttributeNotification
kSecTransformActionAttributeNotification
Когда атрибут установлен, позволяет блоку быть вызванным. Это допускает кэширование значения как основная переменная в блоке экземпляра или превращении данных, которые будут установлены. Это действие состоит в том, где пользовательское преобразование было бы в состоянии сделать обработку за пределами обработки ввода для вывода, как обрабатывают данные, делает. Один данные были обработаны, блок действия может вызвать SecTransformCustomSetAttribute для обновления и другой атрибут.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionAttributeValidation
kSecTransformActionAttributeValidation
Позволяет блоку быть вызванным для проверки нового значения для атрибута. Значение по умолчанию не является никакой проверкой, и любой CFTypeRef может использоваться в качестве нового значения. Если значение в порядке для установки на атрибуте или CFErrorRef иначе, блок должен возвратить NULL.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionCanExecute
kSecTransformActionCanExecute
Переопределяет стандартное поведение, проверяющее, чтобы видеть, были ли все требуемые атрибуты или установлены или подключены к другим, преобразовывают. При переопределении поведения по умолчанию разработчик может решенный, что необходимые данные должны иметь для преобразования, которое будут считать 'готовыми работать'. Возврат NULL означает, что преобразование готово быть выполненным. Если преобразование не готово работать тогда, переопределение должно возвратить CFErrorRef, предусматривающий ошибку.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionExternalizeExtraData
kSecTransformActionExternalizeExtraData
Допускает добавление к данным, хранящимся с помощью переопределения для блока kSecTransformActionExternalizeExtraData. Вывод этого переопределения является словарем, содержащим пользовательские воплощенные данные. Общее использование этого переопределения должно выписать номер версии пользовательского преобразования.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionFinalize
kSecTransformActionFinalize
Переопределяет стандартное поведение, происходящее прежде, чем удалить пользовательское преобразование. Это обычно переопределяется для обеспечения памяти, очищают пользовательского преобразования. Это используется с блоком SecTransformOverrideTransformAction.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionInternalizeExtraData
kSecTransformActionInternalizeExtraData
Переопределяет стандарт, обрабатывающий, который происходит, когда воплощенные данные используются для создания преобразования. Это близко связывается к переопределению kSecTransformActionExternalizeExtraData. 'Нормальные' атрибуты читаются в новое преобразование, и затем это вызывают для чтения в элементах, выписанных с помощью kSecTransformActionExternalizeExtraData переопределение. Общее использование этого переопределения должно было бы читать в номере версии воплощенного пользовательского преобразования.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionProcessData
kSecTransformActionProcessData
Переопределяет стандартную обработку данных для атрибута. Это почти исключительно используется для обработки входного атрибута, поскольку возвращаемое значение их блока устанавливает выходной атрибут. Это используется с блоком SecTransformOverrideAttributeAction.
Доступный в OS X v10.7 и позже.
-
kSecTransformActionStartingExecution
kSecTransformActionStartingExecution
Переопределяет стандартное поведение, происходящее как раз перед стартовым выполнением пользовательского преобразования. Это обычно переопределяется для обеспечения инициализации. Это используется с блоком SecTransformOverrideTransformAction.
Доступный в OS X v10.7 и позже.
-
SecTransformActionAttributeNotification
SecTransformActionAttributeNotification
Когда атрибут установлен, позволяет блоку быть вызванным. Это допускает кэширование значения как основная переменная в блоке экземпляра или превращении данных, которые будут установлены. Это действие состоит в том, где пользовательское преобразование было бы в состоянии сделать обработку за пределами обработки ввода для вывода, как обрабатывают данные, делает. Один данные были обработаны, блок действия может вызвать 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 };
Константы
-
kSecTransformMetaAttributeValue
kSecTransformMetaAttributeValue
Фактическое значение атрибута. Значение атрибута имеет значение по умолчанию NULL.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeName
kSecTransformMetaAttributeName
Имя атрибута. Название атрибута только для чтения и не может использоваться с блоком SecTransformSetAttributeBlock.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeRef
kSecTransformMetaAttributeRef
Прямая ссылка к значению атрибута. Эта ссылка допускает прямой доступ к атрибуту, не имея необходимость искать атрибут по имени. Если преобразование обычно использует атрибут, с помощью расчетные скорости использование того атрибута. Ссылки на атрибут не видимы или допустимы от за пределами определенного экземпляра преобразования.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeRequired
kSecTransformMetaAttributeRequired
Указывает, должен ли атрибут иметь не набор Значения Нулевого или иметь входящее соединение, прежде чем преобразование начнет выполняться. Эти метаданные имеют значение по умолчанию истины для входного атрибута, но лжи для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeRequiresOutboundConnection
kSecTransformMetaAttributeRequiresOutboundConnection
Указывает, должен ли атрибут иметь исходящее соединение. Эти метаданные имеют значение по умолчанию истины для выходного атрибута, но являются ложью для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeDeferred
kSecTransformMetaAttributeDeferred
Определяет, задерживаются ли уведомление AttributeSetNotification или блоки ProcessData, пока SecExecuteTransform не вызывают. Это значение метаданных имеет значение по умолчанию истины для входного атрибута, но является ложью для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeStream
kSecTransformMetaAttributeStream
Указывает, должен ли атрибут ожидать, что серия значений, заканчивающихся NULL, укажет конец потока данных. Эти метаданные имеют значение по умолчанию истины для атрибутов ввода и вывода, но являются ложью для всех других атрибутов.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeCanCycle
kSecTransformMetaAttributeCanCycle
Группа Преобразования является направленным графом, который является обычно нециклическим. Некоторые преобразования должны работать с циклами. Например, преобразование, испускающее заголовок и метку конца вокруг данных других преобразование, должно создать цикл. Если цикл обнаруживается для этого атрибута, если этот набор метаданных к истине, не возвращается никакая ошибка.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeExternalize
kSecTransformMetaAttributeExternalize
Указывает, должен ли этот атрибут быть выписан при создании внешнего представления этого преобразования. Эти метаданные имеют значение по умолчанию истины.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeHasOutboundConnections
kSecTransformMetaAttributeHasOutboundConnections
Если атрибут имеет исходящее соединение, это значение метаданных является истиной. Эти метаданные только для чтения.
Доступный в OS X v10.7 и позже.
-
kSecTransformMetaAttributeHasInboundConnection
kSecTransformMetaAttributeHasInboundConnection
Если атрибут имеет входящее соединение, это значение метаданных является истиной. Эти метаданные только для чтения.
Доступный в OS X v10.7 и позже.
Обсуждение
В преобразовании каждый из его атрибутов является набором «атрибутов метаданных», из которых называют, и текущая стоимость два. Значение непосредственно видимо извне; другие метаданные приписывают прямой поведение преобразования и его функции в его группе. Каждый атрибут может быть адаптирован путем установки его метаданных.
-