VirgilPythia 0.3.2

VirgilPythia 0.3.2

Sergey SeroshtanSanjoDeundiak 维护。



 
依赖于
VirgilSDK~> 5.3
VirgilCryptoApiImpl~> 3.1
 

  • Virgil Security

Virgil Pythia Objective-C/Swift SDK

Build Status CocoaPods Compatible Carthage compatible Platform GitHub license

简介 | SDK 功能 | 安装 | 使用示例 | 文档 | 支持

简介

Virgil Security 提供了一个 SDK,允许您与 Virgil Pythia 服务进行通信,并实现 Pythia 协议以生成用户的 BrainKey。 BrainKey 是基于用户密码的用户私钥。BrainKey 可轻松恢复,并抵御在线和离线攻击。

SDK 功能

安装

Virgil Pythia SDK以一组框架的形式提供。这些框架通过Carthage和CocoaPods进行分发。此外,在本指南中,您还可以找到一个名为VirgilCrypto(Virgil密码库)的包,该包用于SDK执行加密操作。

提供的框架支持

  • iOS 9.0+
  • macOS 10.10+
  • tvOS 9.0+
  • watchOS 2.0+

COCOAPODS

CocoaPods是一个Cocoa项目的依赖管理工具。您可以使用以下命令安装它

$ gem install cocoapods

要使用CocoaPods将Virgil Pythia集成到您的Xcode项目中,在您的Podfile中指定它

target '<Your Target Name>' do
  use_frameworks!

  pod 'VirgilPythia', '~> 0.3.0'
end

然后,运行以下命令

$ pod install

Carthage

Carthage是一个集中式依赖管理器,可以构建您的依赖项并提供二进制框架。

您可以使用Homebrew使用以下命令安装Carthage

$ brew update
$ brew install carthage

要使用Carthage将Virgil Pythia集成到您的Xcode项目中,在项目的根目录中创建一个名为Cartfile的空文件,并将以下行添加到您的Cartfile

github "VirgilSecurity/pythia-x" ~> 0.3.0

链接到预构建的二进制文件

要链接预构建框架到您的应用中,运行以下命令

$ carthage update --no-use-binaries

这将为每个依赖项构建或从github Releases下载数据库。

为iOS/tvOS/watchOS构建

在您应用的目标的“常规”设置选项卡中,在“链接到的框架和库”部分,将以下框架从您的项目文件夹中的Carthage/Build文件夹中添加

  • VirgilSDKPythia
  • VirgilSDK
  • VirgilCryptoAPI
  • VirgilCryptoApiImpl
  • VirgilCrypto
  • VSCCrypto

在您的应用目标“构建阶段”设置标签页中,点击“+”图标并选择“新运行脚本阶段”。创建一个运行脚本,在其中指定您的shell(例如:/bin/sh),将以下内容添加到shell下面的脚本区域:

/usr/local/bin/carthage copy-frameworks

并在“输入文件”下添加您要使用的框架的路径,例如:

$(SRCROOT)/Carthage/Build/iOS/VirgilSDKPythia.framework
$(SRCROOT)/Carthage/Build/iOS/VirgilSDK.framework
$(SRCROOT)/Carthage/Build/iOS/VirgilCryptoAPI.framework
$(SRCROOT)/Carthage/Build/iOS/VirgilCryptoAPIImpl.framework
$(SRCROOT)/Carthage/Build/iOS/VirgilCrypto.framework
$(SRCROOT)/Carthage/Build/iOS/VSCCrypto.framework
为Mac OS构建

在您的应用目标的“常规”设置标签页中,在“嵌入式二进制文件”部分,从磁盘上的Carthage/Build文件夹拖放以下框架:

  • VirgilSDKPythia
  • VirgilSDK
  • VirgilCryptoAPI
  • VirgilCryptoApiImpl
  • VirgilCrypto
  • VSCCrypto

此外,您还需要复制Mac OS上的调试符号,以便进行调试和崩溃报告。

在您的应用目标的“构建阶段”设置标签页中,点击“+”图标并选择“新复制文件阶段”。点击“目标”下拉菜单并选择“产品目录”。对于每个框架,拖放对应的dSYM文件。

作为子项目集成

可以使用Carthage仅用于获取正确源以进一步集成到项目中。运行以下命令:

$ carthage update --no-build

这将把依赖项检索到您的项目文件夹内的一个名为Carthage/Checkouts的文件夹中。然后,将Carthage/Checkouts文件夹内相应文件夹中的VirgilCrypto.xcodeproj、VirgilCryptoAPI.xcodeproj、VirgilSDK.xcodeproj和VirgilSDKPythia.xcodeproj拖放到您的Xcode项目导航器侧边栏。

接下来,在您的应用目标的“常规”设置标签页中,在“嵌入式二进制文件”部分添加以下子项目的框架:

  • VirgilSDKPythia
  • VirgilSDK
  • VirgilCryptoAPI
  • VirgilCryptoApiImpl
  • VirgilCrypto
  • VSCCrypto

使用示例

PYTHIA服务可以直接作为根据用户密码生成强大加密密钥的手段。我们称这些密钥为BrainKeys。因此,当您需要恢复私钥时,您只需使用用户的密码和Pythia服务。

生成BrainKey

使用以下流程为用户生成新的BrainKey。

要创建用户的BrainKey,请执行以下操作:

  • Virgil Dashboard 上注册您的端到端加密应用程序并获取您的应用凭据
  • 生成您的API密钥或使用现有的
  • 在服务器端设置 JWT提供者,使用前面提到的参数(应用ID、API密钥、API密钥ID
  • 使用包含用户身份的 JWT令牌 并将其传输到客户端(用户端)
  • 在客户端设置 访问令牌提供者 以指定JWT提供者
  • 设置带有访问令牌提供者的BrainKey功能,并传递用户密码
  • 将BrainKey请求发送到Pythia服务
  • 根据从Pythia服务获得的BrainKey生成密钥对并创建用户的卡
  • 将用户的卡传递给cardManager
  • 发布与BrainKey关联的用户卡
import VirgilSDK
import VirgilSDKPythia

/// 1. Specify your JWT provider

// Get generated token from server-side
let authenticatedQueryToServerSide: ((String) -> Void) -> Void = { completion in
    completion("eyJraWQiOiI3MGI0NDdlMzIxZjNhMGZkIiwidHlwIjoiSldUIiwiYWxnIjoiVkVEUzUxMiIsImN0eSI6InZpcmdpbC1qd3Q7dj0xIn0.eyJleHAiOjE1MTg2OTg5MTcsImlzcyI6InZpcmdpbC1iZTAwZTEwZTRlMWY0YmY1OGY5YjRkYzg1ZDc5Yzc3YSIsInN1YiI6ImlkZW50aXR5LUFsaWNlIiwiaWF0IjoxNTE4NjEyNTE3fQ.MFEwDQYJYIZIAWUDBAIDBQAEQP4Yo3yjmt8WWJ5mqs3Yrqc_VzG6nBtrW2KIjP-kxiIJL_7Wv0pqty7PDbDoGhkX8CJa6UOdyn3rBWRvMK7p7Ak")
}

// Setup AccessTokenProvider
let accessTokenProvider = CallbackJwtProvider { tokenContext, completion in
    authenticatedQueryToServerSide { jwtString in
        completion(jwtString, nil)
    }
}

/// 2. Setup BrainKey

let brainKeyContext = BrainKeyContext.makeContext(accessTokenProvider: accessTokenProvider)
let brainKey = BrainKey(context: brainKeyContext)

let keyPair = try! brainKey.generateKeyPair(password: "Your password").startSync().getResult()

/// 3. Publish user's on the Cards Service
let card = try! cardManager.publishCard(privateKey: keyPair.privateKey, publicKey: keyPair.publicKey).startSync().getResult()

文档

Virgil Security拥有一套强大的API,以下文档可以帮助您今天开始

许可证

此库是根据3条款BSD许可证发布的。

支持

我们的开发者支持团队在此为您提供帮助。更多详情请参阅我们的帮助中心

您可以在Twitter上找到我们,或通过以下电子邮件发送电子邮件 [email protected]

此外,您还可以从我们的支持团队获得更多帮助,请访问Slack