X3DH 2.0.8

X3DH 2.0.8

Fabio Tacke维护。



 
依赖项
Sodium>= 0
HKDF>= 0
 

X3DH 2.0.8

  • TICE Software UG (haftungsbeschränkt)

X3DH

此包实现了Swift中的X3DH密钥协议。加密操作完全由libsodium提供。

安装

SPM

.package(url: "https://github.com/TICESoftware/X3DH.git", .upToNextMajor(from: "2.0.0"))

为了构建库,需要链接libsodium。官方存储库包括为特定平台构建二进制的脚本。

swift build -Xcc -I[header search path] -Xlinker -L[binary path]

当使用Xcode时,您可以手动设置头搜索路径,包括libsodium头文件,并链接静态库libsodium。

CodoaPods

pod 'X3DH'

此使用依赖项Sodium,包含预编译的libsodium库。无需进一步的设置。

使用

Alice需要从Bob那里检索他之前公开的一些公钥。然后,她计算出共享密钥并发送一些信息给Bob,以便他可以在本地计算出同样的共享密钥。

let preKeySigner = // ... Signing the key is not part of this library
let prekeySignatureVerifier = // ... and neither is verification

let bob = X3DH()
let bobIdentityKeyPair = try bob.generateIdentityKeyPair()
let bobSignedPrekey = try bob.generateSignedPrekeyPair(signer: { ... })
let bobOneTimePrekey = try bob.generateOneTimePrekeyPairs(count: 2)

let alice = X3DH()
let aliceIdentityKeyPair = try alice.generateIdentityKeyPair()
let aliceSignedPrekey = try alice.generateSignedPrekeyPair(signer: { ... })
// [Alice fetches bob's prekey bundle]
let keyAgreementInitiation = try alice.initiateKeyAgreement(remoteIdentityKey: bobIdentityKeyPair.publicKey, remotePrekey: bobSignedPrekey.keyPair.publicKey, prekeySignature: bobSignedPrekey.signature, remoteOneTimePrekey: bobOneTimePrekey.first!.publicKey, identityKeyPair: aliceIdentityKeyPair, prekey: aliceSignedPrekey.keyPair.publicKey, prekeySignatureVerifier: { ... }, info: "Example")

// [Alice sends identity key, ephemeral key and used one-time prekey to bob]
let sharedSecret = try bob.sharedSecretFromKeyAgreement(remoteIdentityKey: aliceIdentityKeyPair.publicKey, remoteEphemeralKey: keyAgreementInitiation.ephemeralPublicKey, usedOneTimePrekeyPair: bobOneTimePrekey.first!, identityKeyPair: bobIdentityKeyPair, prekeyPair: bobSignedPrekey.keyPair, info: "Example")