该 tKey SDK 通过使用 Shamir 秘密共享生成私钥的份额来管理私钥。此 SDK 的份额的多方计算也计划中,目前处于高级开发阶段但尚未准备好合并到主代码库中。
配套的示例应用程序在这里:这里。
如果您正在寻找 Android 实现,请参阅 这里。
-
打开 Xcode 项目 > 选择文件 > Swift 包 > 添加包依赖
此独立包可以与 CustomAuth 一起使用。请参阅示例应用程序以了解代码的全面概述。
集成过程很简单
-
使用 CustomAuth 登录,有关如何操作的详细文档,请参阅文档 这里。
-
在设置 ServiceProvider 时,使用
userData["privateKey"]
字段结果作为 postbox 密钥。 -
继续正常初始化。
-
请记住保存设备份额或需要重置账户。对于现有账户,需要导入份额,可以通过使用安全份额或手动输入(根据 ThresholdKey 的初始设置方式)来进行。
SDK 的设计相对简单。
- 它使用底层 libtkey.xcframework,其中包含 arm64 和 arm64-simulator 二进制文件。
- 这些二进制文件是由通用可交叉编译的代码库构建的,是原始实现(tkey)[https://github.com/tkey/tkey] 的本地迁移。
- SDK 处理所有通过外函数接口跨类型的打包以及内存安全。
此 SDK 可以分为同步方法和异步方法
- 同步方法预计会立即可返回,无底层网络操作。
- 异步方法被调度到串行执行队列,并使用元数据服务器进行网络操作。相关的网络实现已作为 SDK 的一部分提供。
所有属于模块命名空间(modules)的类都是静态的,并且只能在已正确设置的 ThresholdKey 对象上操作。
目前仅支持 Secp256k1 曲线。
请注意,所有代码示例都尽可能简洁,这是故意的,因为大多数函数都可能抛出异常。
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对象进行更复杂的操作,可以运用提供的模块。
此模块提供了一个用于设置、获取和管理ThresholdKey对象私钥的接口。
此模块允许用密码创建一个安全性份额。这对于恢复ThresholdKey尤其有用。
此模块为ThresholdKey对象提供了设置、更改、获取和删除助记词的功能。
ShareSerializationModule允许在助记词和十六进制格式之间序列化和反序列化份额。
ShareTransferModule用于将现有份额传输到另一台设备。