TweetNacl

用 Swift 编写的 TweetNaCl 封装器

Build Status codecov

要求

安装

CocoaPods

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

$ gem install cocoapods

需要 CocoaPods 1.1+ 才能构建 TweetNacl 1.0+。

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

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'TweetNacl', '~> 1.0.0'
end

然后,运行以下命令

$ pod install

Carthage

Carthage 是一个去中心化的依赖管理器,它构建您的依赖项并为您提供二进制框架。

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

$ brew update
$ brew install carthage

要使用 Carthage 将 TweetNacl 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "bitmark-inc/tweetnacl-swiftwrap" ~> 1.0

运行 carthage update 来构建框架,并将构建好的 TweetNacl.framework 拖到您的 Xcode 项目中。

Swift Package Manager

Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并已集成到 swift 编译器中。 它尚处于早期开发阶段,但 TweetNacl 确实支持在受支持的平台上使用它。

设置好 Swift 包后,将 TweetNacl 作为依赖项添加到您的 Package.swiftdependencies 值中即可。

dependencies: [
    .Package(url: "https://github.com/bitmark-inc/tweetnacl-swiftwrap.git", majorVersion: 1)
]

手动

如果您不想使用上述任何依赖项管理器,则可以手动将 TweetNacl 集成到您的项目中。

嵌入式框架


用法

所有 API 函数都接受并返回 Data

公钥认证加密 (box)

实现 *curve25519-xsalsa20-poly1305*。

NaclBox.keyPair()

为 box 生成一个新的随机密钥对,并将其作为具有 publicKeysecretKey 成员的对象返回

{
   publicKey: ...,  // Data with 32-byte public key
   secretKey: ...   // Data with 32-byte secret key
}

NaclBox.keyPair(fromSecretKey:)

返回 box 的密钥对,其公钥与给定的私钥相对应。

NaclBox.box(message, nonce, theirPublicKey, mySecretKey)

使用对端的公钥、我们的私钥以及给定的 nonce 加密和验证消息,对于密钥对的每个不同消息,nonce 必须是唯一的。

NaclBox.open(box, nonce, theirPublicKey, mySecretKey)

使用对端的公钥、我们的私钥以及给定的 nonce 验证和解密给定的 box。

返回原始消息,如果身份验证失败,则返回 false

NaclBox.before(theirPublicKey, mySecretKey)

返回一个预先计算的共享密钥,该密钥可在 NaclBox.afterNaclBox.open.after 中使用。

NaclBox.after(message, nonce, sharedKey)

NaclBox 相同,但使用 NaclBox.before 预先计算的共享密钥。

NaclBox.open.after(box, nonce, sharedKey)

NaclBox.open 相同,但使用 NaclBox.before 预先计算的共享密钥。

NaclBox.publicKeyLength = 32

公钥的长度,以字节为单位。

NaclBox.secretKeyLength = 32

私钥的长度,以字节为单位。

NaclBox.sharedKeyLength = 32

预先计算的共享密钥的长度,以字节为单位。

NaclBox.nonceLength = 24

Nonce 的长度,以字节为单位。

NaclBox.overheadLength = 16

与原始消息相比,添加到 box 的开销长度。

密钥认证加密 (secretbox)

实现 *xsalsa20-poly1305*。

NaclSecretBox.secretBox(message, nonce, key)

使用密钥和 nonce 加密和验证消息。 对于此密钥的每个不同消息,nonce 必须是唯一的。

返回加密和验证的消息。

NaclSecretBox.open(box, nonce, key)

使用密钥和 nonce 验证和解密给定的 secret box。

返回原始消息,如果身份验证失败,则返回 false

NaclSecretBox.keyLength = 32

密钥的长度,以字节为单位。

NaclSecretBox.nonceLength = 24

Nonce 的长度,以字节为单位。

NaclSecretBox.overheadLength = 16

与原始消息相比,添加到 secret box 的开销长度。

标量乘法

实现 e25519

NaclScalarMult(n, p)

将整数 n 乘以组元素 p,并返回生成的组元素。

NaclScalarMult.base(n)

将整数 n 乘以标准组元素,并返回生成的组元素。

NaclScalarMult.scalarLength = 32

标量的长度,以字节为单位。

NaclScalarMult.groupElementLength = 32

组元素的长度,以字节为单位。

签名

实现 ed25519

NaclSign.keyPair()

为签名生成新的随机密钥对,并将其作为具有 publicKeysecretKey 成员的对象返回

{
   publicKey: ...,  // Data with 32-byte public key
   secretKey: ...   // Data with 64-byte secret key
}

NaclSign.keyPair.fromSecretKey(secretKey)

返回一个签名密钥对,其公钥与给定的 64 字节私钥相对应。 私钥必须由 NaclSign.KeyPairNaclSign.KeyPair.fromSeed 生成。

NaclSign.keyPair.fromSeed(seed)

从 32 字节的种子确定性地生成一个新的签名密钥对。 种子必须包含足够的熵才能保证安全。 不建议将此方法用于常规用途:而是使用 NaclSign.KeyPair 从随机种子生成新的密钥对。

NaclSign(message, secretKey)

使用私钥对消息进行签名,并返回已签名的消息。

NaclSign.open(signedMessage, publicKey)

验证已签名的消息,并返回不带签名的消息。

如果验证失败,则返回 nil

NaclSign.detached(message, secretKey)

使用私钥对消息进行签名,并返回签名。

NaclSign.detached.verify(message, signature, publicKey)

验证消息的签名,如果验证成功,则返回 true,如果验证失败,则返回 false

NaclSign.publicKeyLength = 32

签名公钥的长度,以字节为单位。

NaclSign.secretKeyLength = 64

签名私钥的长度,以字节为单位。

NaclSign.seedLength = 32

NaclSign.KeyPair.keyPair(fromSeed: 的种子的长度,以字节为单位。

NaclSign.signatureLength = 64

签名的长度,以字节为单位。

许可证

版权所有 (c) 2014-2015 Bitmark Inc (support@bitmark.com)。

特此授予许可,允许出于任何目的(无论是否收费)使用、复制、修改和分发本软件,前提是上述版权声明和本许可声明出现在所有副本中。

本软件按“原样”提供,作者不对此软件做出任何担保,包括对适销性和适用性的所有暗示担保。 在任何情况下,作者均不对任何特殊的、直接的、间接的或后果性的损害,或因使用、数据或利润损失而造成的任何损害负责,无论是在合同、疏忽或其他侵权行为中,还是因使用或执行本软件而引起或与之相关的任何损害。