TweetNacl 1.0.2

TweetNacl 1.0.2

测试已测试
Lang语言 CC
许可证 MIT
发布最新版本2019年9月
SPM支持 SPM

BitmarkBitmark Inc. 维护。



TweetNacl 1.0.2

TweetNacl

TweetNaCl 包装器,用 Swift 编写

Build Status codecov

要求

  • iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 9.0+
  • Swift 4.0+

安装

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 在您的 Xcode 项目中集成 TweetNacl,请在您的 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 集成到项目中。

内嵌框架

  • 打开终端,使用 cd 进入您的顶级项目目录,并运行以下命令(如果您的项目未初始化为 git 仓库)

    $ git init
  • 通过运行以下命令将 TweetNacl 添加为 git 子模块

    $ git submodule add https://github.com/bitmark-inc/tweetnacl-swiftwrap.git
  • 打开新的 TweetNacl 文件夹,并将 TweetNacl.xcodeproj 拖动到您应用 Xcode 项目的 Project Navigator。

    它应该嵌套在您的应用蓝色项目图标下。它是在所有其他 Xcode 组之上还是之下并不重要。

  • 在 Project Navigator 中选择 TweetNacl.xcodeproj 并验证部署目标与您的应用目标一致。

  • 然后,在 Project Navigator 中选择您的应用项目(蓝色项目图标)并导航到目标配置窗口,在边栏的 "Targets" 标题下选择应用程序目标。

  • 在该窗口顶部栏中,打开 "General" 标签页。

  • 在 "Embedded Binaries" 部分的 + 按钮上点击。

  • 您将看到两个不同的 TweetNacl.xcodeproj 文件夹,每个文件夹内都包含两个不同版本的 TweetNacl.framework,它们都嵌套在 Products 文件夹中。

    您选择哪个 Products 文件夹都无关紧要,但是您必须选择顶部或底部的 TweetNacl.framework

  • 选择顶部的 TweetNacl.framework 用于 iOS,选择底部的用于 OS X。

    您可以通过查看项目构建日志来验证您选择了哪个版本。对于 TweetNacl 的构建目标是列出的,可能是 TweetNacl-iOSTweetNacl-macOSTweetNacl-tvOSTweetNacl-watchOS

  • 就是这样!

    TweetNacl.framework 会自动添加为目标的依赖项、链接的框架和嵌入的框架,这是在模拟器和设备上构建所需的全部。


使用方法

所有 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)

使用对等的公钥、我们的私钥以及提供的用于每个独立密钥对的消息的唯一随机数,对消息进行加密和认证。

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

使用对等的公钥、我们的私钥以及提供的用于每个独立密钥对的随机数,对给定的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中相对于原始消息的overhead长度。

密钥认证加密(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

与原始消息相比,添加到秘密盒中的额外长度的长度。

标量乘法

实现了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 ([email protected])。

在此授予任何人免费或付费使用、复制、修改和分发本软件的权利,前提是上述版权声明和本许可声明须包含在所有副本中。

软件按“原样”提供,作者放弃与该软件相关的所有明示或暗示保证,包括所有适销性和适用性的暗示保证。在任何情况下,作者均不对任何特殊、直接、间接或后果性损害或任何损害赔偿责任承担责任,无论是否由于合同、疏忽或其他侵权行为,是否由于使用或性能该软件而产生。