tkey-swift 1.0.0

tkey-swift 1.0.0

Chaitanya Potti 管理。



  • 作者:Torus Labs

tkey iOS SDK

该 tKey SDK 通过使用 Shamir 秘密共享生成私钥的份额来管理私钥。此 SDK 的份额的多方计算也计划中,目前处于高级开发阶段但尚未准备好合并到主代码库中。

配套的示例应用程序在这里:这里

如果您正在寻找 Android 实现,请参阅 这里

包含此包

  1. 打开 Xcode 项目 > 选择文件 > Swift 包 > 添加包依赖

  2. 输入网址 https://github.com/torusresearch/tkey-rust-ios

与 CustomAuth 集成

此独立包可以与 CustomAuth 一起使用。请参阅示例应用程序以了解代码的全面概述。

集成过程很简单

  1. 使用 CustomAuth 登录,有关如何操作的详细文档,请参阅文档 这里

  2. 在设置 ServiceProvider 时,使用 userData["privateKey"] 字段结果作为 postbox 密钥。

  3. 继续正常初始化。

  4. 请记住保存设备份额或需要重置账户。对于现有账户,需要导入份额,可以通过使用安全份额或手动输入(根据 ThresholdKey 的初始设置方式)来进行。

SDK 设计概述

SDK 的设计相对简单。

  • 它使用底层 libtkey.xcframework,其中包含 arm64 和 arm64-simulator 二进制文件。
  • 这些二进制文件是由通用可交叉编译的代码库构建的,是原始实现(tkey)[https://github.com/tkey/tkey] 的本地迁移。
  • SDK 处理所有通过外函数接口跨类型的打包以及内存安全。

此 SDK 可以分为同步方法和异步方法

  • 同步方法预计会立即可返回,无底层网络操作。
  • 异步方法被调度到串行执行队列,并使用元数据服务器进行网络操作。相关的网络实现已作为 SDK 的一部分提供。

所有属于模块命名空间(modules)的类都是静态的,并且只能在已正确设置的 ThresholdKey 对象上操作。

目前仅支持 Secp256k1 曲线。

请注意,所有代码示例都尽可能简洁,这是故意的,因为大多数函数都可能抛出异常。

SDK 概述

ThresholdKey

tkey 的实例,这可以认为是 SDK 中最重要的对象。

创建:

创建ThresholdKey对象至少需要一个StorageLayer,但同时也使用ServiceProvider会更实用。

    let postbox = try! PrivateKey.generate()
    let storage_layer = try! StorageLayer(enable_logging: true, host_url: "https://metadata.tor.us", server_time_offset: 2)
    let service_provider = try! ServiceProvider(enable_logging: true, postbox_key: postbox.hex)
    let threshold_key = try! ThresholdKey(
        storage_layer: storage_layer,
        service_provider: service_provider,
        enable_logging: true,
        manual_sync: false)

初始化

创建ThresholdKey对象后,可以对其进行初始化。

初始化调用返回一个KeyDetails对象。

    let key_details = try! await threshold_key.initialize(never_initialize_new_key: false, include_local_metadata_transitions: false)

除此之外,还可以向该调用提供以下可选参数

参数 类型 描述
import_share 字符串 使用现有的份额初始化tkey。这允许您直接初始化tKey而不使用服务提供商登录。
input ShareStore 将现有的ShareStore导入tkey中。

重构私钥

当ThresholdKey对象可供使用的份额数量满足要求,或者现有的份额已插入其中时,私钥可以被重构。

此方法返回一个KeyReconstructionResult。

    let reconstructedKeyResult = try! await threshold_key.reconstruct()

获取密钥详情。

    let key_details = try! threshold_key.get_key_details()

此返回一个KeyDetails对象。

每当调用一个影响ThresholdKey状态的方法时,如果需要更新ThresholdKey的详细资料,则需要再次调用此方法。

生成新的份额

份额在相同的阈值上生成(例如,2/3 -> 2/4)。此函数返回一个GenerateShareStoreResult对象。

   let newShare = try! await threshold_key.generate_new_share()

删除份额

可以通过份额索引删除份额。请注意,删除份额将使任何持久化的份额无效。

    let shareStore = try! await threshold_key.delete_share(share_index: idx)

模块以实现附加功能

要对ThresholdKey对象进行更复杂的操作,可以运用提供的模块。

PrivateKeysModule

此模块提供了一个用于设置、获取和管理ThresholdKey对象私钥的接口。

SecurityQuestionModule

此模块允许用密码创建一个安全性份额。这对于恢复ThresholdKey尤其有用。

SeedPhraseModule

此模块为ThresholdKey对象提供了设置、更改、获取和删除助记词的功能。

ShareSerializationModule

ShareSerializationModule允许在助记词和十六进制格式之间序列化和反序列化份额。

ShareTransferModule

ShareTransferModule用于将现有份额传输到另一台设备。