1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Tink

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
OBJC-HOWTO.md 9.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 23:35 dc96e85

Tink для Obj-C: инструкция

Этот документ содержит инструкции и фрагменты кода Obj-C для выполнения общих задач в Tink (https://github.com/google/tink).

Инструкции по настройке

Tink выпущен как Cocoapod (https://cocoapods.org/). Его можно установить с помощью команды pod, как описано ниже. Это рекомендуемый способ использования Tink.

Также предоставляются пошаговые инструкции по сборке и использованию Tink из исходного кода.

Поддерживаемые платформы

  • iOS 9.0 или новее;
  • Xcode 9.2 или новее.

Установка через Cocoapods

  1. Перейдите в каталог, содержащий ваш проект Xcode.
cd /path/to/your/Xcode project/
  1. Инициализируйте Cocoapods.
pod init

Эта команда создаёт файл под названием Podfile. 3. Отредактируйте Podfile. Для текущего стабильного выпуска добавьте следующую строку:

pod 'Tink'

Для конкретной версии используйте вместо этого такую строку:

pod 'Tink', '1.2.0-rc2'

Примечание: замените 1.2.0-rc2 на предварительную версию, которую вы хотите установить. 4. Установите модуль.

$ pod install
  1. Откройте только что созданный файл .xcworkspace и начните использовать Tink. Вы можете импортировать общий заголовок:
#import "Tink/Tink.h"

Или отдельные заголовки:

#import "Tink/TINKAeadConfig.h"
#import "Tink/TINKAeadKeyTemplate.h"
#import "Tink/TINKAead.h"

Установка из исходного кода

Предварительные требования

Чтобы установить Tink из исходного кода, необходимо установить следующие компоненты:

Пошаговые инструкции

  1. Клонируйте Tink с GitHub.
git clone https://github.com/google/tink/
  1. Соберите библиотеку и создайте статический фреймворк iOS.
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

Отрегулируйте следующие параметры в соответствии со средой сборки:

  • Установите XCODE_VERSION на версию Xcode, которую вы используете для создания своего приложения.
  • Установите IOS_SDK на версию iOS SDK, которую вы используете в своём приложении.
  • Параметр ios_multi_cpus используется для генерации толстой библиотеки, включающей несколько архитектур. Перед отправкой вашего приложения в App Store вы должны создать фреймворк, включающий только архитектуры ARM, и связать его с вашим двоичным файлом.
  1. Распакуйте Tink_framework.zip в папку проекта Xcode.
unzip bazel-bin/objc/Tink_framework.zip -d /path/to/your/project/folder/
  1. Добавьте статическую структуру в параметры проекта Xcode:
  • Откройте свой проект Xcode.
  • Перейдите к папке проекта и перетащите Tink.framework в левую панель Xcode.
  • В следующем диалоговом окне выберите «Копировать элементы при необходимости» и цель вашего приложения, которая будет использовать Tink. Нажмите «Готово».
  • Выберите свой проект на левой панели и нажмите «Настройки сборки».
  • Найдите «Другие флаги компоновщика» и добавьте -lc++.
  1. Начните использовать Tink в коде. Вы можете импортировать общий заголовок:
#import "Tink/Tink.h"

Или отдельные заголовки:

#import "Tink/TINKAeadConfig.h"
#import "Tink/TINKAeadKeyTemplate.h"
#import "Tink/TINKAead.h"

Инициализация Tink

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Tink.git
git@api.gitlife.ru:oschina-mirror/mirrors-Tink.git
oschina-mirror
mirrors-Tink
mirrors-Tink
master