nativeScript-libsignal-protocol
by pixxl | v0.2.0
为 NativeScript 提供的 Libsignal-Protocol 包装库。
npm i --save nativescript-libsignal-protocol

NativeScript Libsignal-Protocol android-support

Developed for ODIN

npm version license

NPM

此插件是 NativeScript 的 Libsignal-Protocol 实现,基于 libsignal-protocol-java。此插件目前是一个包装器,实现了由 The Open Whisper Systems 组织开发的函数功能,该组织是加密消息应用 Signal 的活跃维护者。

此插件目前处于 ALPHA 阶段,需要进一步工作才能成熟。此代码尚未由经验丰富的密码学家审查,因此在此期间不能保证使用和支持。

要求

此插件无需额外权限即可正常工作。但是,实现此插件的程序可能需要 android.permission.INTERNET,如果您正在使用中央服务器来管理数据。

安装

$ tns plugin add nativescript-libsignal-protocol

使用

从本插件导入 LibsignalProtocol 允许您使用目前可用的各种类和实现包装器。已为您 IDE 创建了大量的类型定义,以提供对迄今为止已提供各种片段的上下文。此插件提供的演示应用程序包含几个使用此插件的项目示例。

此插件遵循与源代码 Github 仓库中相同的实现和使用标准。以下是一个简单的代码片段,用于演示使用方法。

import { LibsignalProtocol } from 'nativescript-libsignal-protocol';

const SignalKeyHelper = LibsignalProtocol.KeyHelper;
const Base64Encode = LibsignalProtocol.Util.base64Encode;

/**
* Outputs a new session identity generated with the Libsignal Protocol.
*
* `identityKeyPair` is a raw reference to the JAVA object `IdentityKeyPair`
* as such, the exported values must be `serialized` before being usable.
*
* @returns The generated session identity as a JSON object.
*/
public demo_generateNewSessionIdentity(): any {
let identityKeyPair: LibsignalProtocol.Type.IdentityKeyPair;
let preKeys: any[];
let signedPreKey: LibsignalProtocol.Type.SignedPreKeyRecord;
let signedPreKeyPair: LibsignalProtocol.Type.ECKeyPair;
let registrationId: number;

registrationId = SignalKeyHelper.generateRegistrationId();
identityKeyPair = SignalKeyHelper.generateIdentityKeyPair();
preKeys = SignalKeyHelper.generatePreKeysFormatted(0, 1);
signedPreKey = SignalKeyHelper.generateSignedPreKeyFormatted(identityKeyPair, 1);

let sessionIdentity = {
registrationId: `${registrationId}`,
deviceId: 123,
identity: {
pubKey: Base64Encode(identityKeyPair.getPublicKey().serialize()),
privKey: Base64Encode(identityKeyPair.getPrivateKey().serialize()),
serialized: Base64Encode(identityKeyPair.serialize()),
},
signedPreKey: signedPreKey,
preKeys: preKeys
};

console.log(sessionIdentity);
return sessionIdentity;
}

限制

此插件目前不可用于 iOS 设备(欢迎和期望为 iOS 提供支持的贡献!)。此插件旨在作为一个简单的 Libsignal 协议包装器。虽然此插件包含一个用于存储会话/状态的 Client 类,但实际的使用和管理应在使用此插件的程序中进行。

许可

许可协议:GPLv3: https://gnu.ac.cn/licenses/gpl-3.0.html

  • 版权所有 2015-2016 Open Whisper Systems
  • 版权所有 2018-2019 @Pixxlated

致谢

此插件包含基于以下内容的源代码

libsignal-protocol-java https://github.com/signalapp/libsignal-protocol-java

特别感谢上述作品的原始贡献者和作者!