nativescript-libsodium
使用类似于 libsodium.js 的包装器在 Nativescript 中使用 libsodium。
npm i --save nativescript-libsodium
- 版本:1.4.0
- GitHub: https://gitlab.com/burke-software/nativescript-libsodium
- NPM: https://npmjs.net.cn/package/nativescript-libsodium
- 下载
- 昨天:0
- 上周:0
- 上个月:0
Nativescript libsodium
使用与 nativescript 兼容的本地 libsodium。(主要)API 与 libsodium.js 包装器兼容。
目前仅支持 Android。
安装
tns plugin add nativescript-libsodium
对于 Android - libsodium-jni 需要禁止备份或对您的 AndroidManifest.xml 进行以下更改
如果您正在存储密钥,请勿使用备份,因为它们也会被备份
- 将
tools:replace="android:allowBackup"
添加为应用程序标签的属性。 - 将
xmlns:tools="http://schemas.android.com/tools"
作为属性添加到 manifest 标签。
用法
使用方式与您使用 libsodium.js 的方式相同,包括它们的包装函数。
import { Libsodium } from "nativescript-libsodium";
let keypair = Libsodium.crypto_box_keypair();
console.log(keypair.privateKey); // It's a Uint8Array object
更多示例,请查看 单元测试
贡献
并非所有 libsodium 函数都包含在本项目中。但添加它们很容易。让我们看看如何添加 crypto_box_seal_open 函数。
熟悉
- 首先按照原样运行项目。您可能需要运行演示和单元测试。在此处阅读说明 here
- 查看从 libsodium 和 libsodium.js 的函数说明
- 查看 libsodium.js 的类型定义 和 libsodium-jni
添加新函数
- 将您的新函数(这个实际上已经存在)添加到 libsodium.common.ts
- 将函数参数编写为与 libsodium.js 的包装器匹配。
- 使用 force_java_bytes 将 Uint8Array 转换为 Native 字节数组
- 运行本地函数。查看 libsodium 文档(不是 .js)
- 使用 javvaByteArrayToUint8Array 将其转换回 Uint8Array
- 添加演示功能性的单元测试。
- 提交您的合并请求 :)
public static crypto_box_seal(message: string | Uint8Array, publicKey: Uint8Array): Uint8Array {
let messageBytes = this.force_java_bytes(message);
let publicKeyBytes = this.force_java_bytes(publicKey);
let ciphertext: JavaBytes = Array.create('byte', Sodium.crypto_box_sealbytes() + messageBytes.length);
Sodium.crypto_box_seal(ciphertext, messageBytes, messageBytes.length, publicKeyBytes);
return this.javaByteArrayToUint8Array(ciphertext);
}
设计决策
- 我们希望尽可能保持与 libsodium.js 包装器的 API 兼容性。这意味着在 JS Uint8Array 和 Java 字节数组之间进行转换。这会带来一些性能损失,但它允许我们在一些使用 libsodium.js 的项目中“直接插入”nativescript-libsodium。
- libsodium-jni 不是从源代码编译的,而是从构建服务器编译的。您可能希望自行构建它。
- 我们不支持 libsodium 的 outputFormat 参数,这会使类型定义复杂化。这可能会发生变化,尤其是如果有人提交了合并请求。
- 错误处理可以改进 - 它应该接受本地函数的返回值,并在无法执行加密时抛出异常。
支持 iOS 吗?
请贡献力量!您需要重构 Android 特定的代码为 .android 文件,并为 .ios 文件构建包装器。
创建一个通用的类接口并让 Android 和 iOS 都实现它,以确保一致性可能是有意义的。
需要付费支持吗?
您需要更早的 iOS 版本吗?或者您可能更喜欢我们添加更多对您重要的 libsodium 函数?
请通过 info AT burke software dot com 与我们联系。
许可证
Apache 许可证版本 2.0,2004 年 1 月