Tink для Obj-C: инструкция
Этот документ содержит инструкции и фрагменты кода Obj-C для выполнения общих задач в Tink (https://github.com/google/tink).
Tink выпущен как Cocoapod (https://cocoapods.org/). Его можно установить с помощью команды pod, как описано ниже. Это рекомендуемый способ использования Tink.
Также предоставляются пошаговые инструкции по сборке и использованию Tink из исходного кода.
cd /path/to/your/Xcode project/
pod init
Эта команда создаёт файл под названием Podfile. 3. Отредактируйте Podfile. Для текущего стабильного выпуска добавьте следующую строку:
pod 'Tink'
Для конкретной версии используйте вместо этого такую строку:
pod 'Tink', '1.2.0-rc2'
Примечание: замените 1.2.0-rc2 на предварительную версию, которую вы хотите установить. 4. Установите модуль.
$ pod install
#import "Tink/Tink.h"
Или отдельные заголовки:
#import "Tink/TINKAeadConfig.h"
#import "Tink/TINKAeadKeyTemplate.h"
#import "Tink/TINKAead.h"
Чтобы установить Tink из исходного кода, необходимо установить следующие компоненты:
git clone https://github.com/google/tink/
cd tink
export XCODE_VERSION=9.2
export IOS_SDK=11.2
bazel build -c opt --ios_multi_cpus=i386,x86_64,armv7,arm64 --xcode_version="${XCODE_VERSION}" --ios_sdk_version="${IOS_SDK}" //objc:Tink_framework
Отрегулируйте следующие параметры в соответствии со средой сборки:
unzip bazel-bin/objc/Tink_framework.zip -d /path/to/your/project/folder/
#import "Tink/Tink.h"
Или отдельные заголовки:
#import "Tink/TINKAeadConfig.h"
#import "Tink/TINKAeadKeyTemplate.h"
#import "Tink/TINKAead.h"
Tink предоставляет настраиваемую инициализацию, которая позволяет выбирать конкретные реализации (идентифицированные типами ключей) желаемых примитивов. Эта инициализация происходит через регистрацию реализаций.
Например, если вы хотите использовать все реализации всех примитивов в текущей версии Tink, инициализация будет выглядеть следующим образом:
#import "TINKAllConfig.h"
#import "TINKConfig.h"
NSError *error = nil;
TINKAllConfig *config = [[TINKAllConfig alloc] initWithError:&error];
if (!config) {
// handle error
} else {
[Tink initializeWithConfig:config error:&error];
if (error) {
// handle error
}
}
``` ## Получение и использование примитивов
[*Примитивы*](PRIMITIVES.md) представляют собой криптографические операции, предлагаемые Tink, следовательно, они составляют основу API Tink. Примитив — это просто интерфейс, который определяет, какие операции предлагает примитив. У примитива может быть несколько реализаций, и вы выбираете желаемую реализацию с помощью ключа соответствующего типа (подробнее см. в [этом разделе](KEY-MANAGEMENT.md#key-keyset-and-keysethandle)). Список примитивов и их реализаций, поддерживаемых в настоящее время Tink в Objective-C, можно найти [здесь](PRIMITIVES.md#objective-c).
Вы получаете доступ к реализациям примитива через фабрику, которая соответствует примитиву, предлагающему соответствующие методы `primitiveWithKeysetHandle:error:`.
* AEAD через `TINKAeadFactory`
* MAC через `TINKMacFactory`
* и т. д.
### Симметричное шифрование ключом
Для шифрования или дешифрования данных можно использовать примитив [AEAD (Authenticated Encryption with Associated Data)](PRIMITIVES.md#authenticated-encryption-with-associated-data):
```objc
#import "Tink/TINKAead.h"
#import "Tink/TINKKeysetHandle.h"
#impor "Tink/TINKAeadFactory.h"
// 1. Получаем дескриптор материала ключа.
TINKKeysetHandle *keysetHandle = ...;
// 2. Получаем примитив.
NSError *error = nil;
id<TINKAead> aead = [TINKAeadFactory primitiveWithKeysetHandle:keysetHandle error:&error];
if (!aead || error) {
// обрабатываем ошибку.
}
// 3. Используем примитив.
NSData *ciphertext = [aead encrypt:plaintext withAdditionalData:aad error:&error];
if (!ciphertext || error) {
// обрабатываем ошибку.
}
Чтобы расшифровать данные с использованием комбинации шифрования открытым ключом и симметричным шифрованием ключом:
#import "Tink/TINKHybridDecrypt.h"
#import "Tink/TINKKeysetHandle.h"
#import "Tink/TINKHybridDecryptFactory.h"
// 1. Получаем дескриптор материала ключа.
TINKKeysetHandle *keysetHandle = ...;
// 2. Получаем примитив.
NSError *error = nil;
id<TINKHybridDecrypt> hybridDecrypt = [TINKHybridDecryptFactory primitiveWithKeysetHandle:keysetHandle
error:&error];
if (!hybridDecrypt || error) {
// обрабатываем ошибку.
}
// 3. Используем примитив.
NSData *plaintext = [hybridDecrypt decrypt:ciphertext withContextInfo:contextInfo error:&error];
if (!plaintext || error) {
// обрабатываем ошибку.
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )