nativescript-libsodium
使用类似于 libsodium.js 的包装器在 Nativescript 中使用 libsodium。
npm i --save nativescript-libsodium

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 函数。

熟悉

  1. 首先按照原样运行项目。您可能需要运行演示和单元测试。在此处阅读说明 here
  2. 查看从 libsodium 和 libsodium.js 的函数说明
  3. 查看 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 月