update libsignal + no dependency on proto files + no native deps

This commit is contained in:
Adhiraj Singh
2021-10-13 17:42:48 +05:30
parent d3b7ffecf2
commit 3f6bd2ad84
7 changed files with 1733 additions and 46 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
yarn pbjs -t static-module -w commonjs -o ./WASignalGroup/GroupProtocol.js ./WASignalGroup/group.proto

View File

@@ -13,22 +13,23 @@ message SenderKeyMessage {
optional bytes signingKey = 4; optional bytes signingKey = 4;
} }
message SenderChainKey {
optional uint32 iteration = 1;
optional bytes seed = 2;
}
message SenderMessageKey {
optional uint32 iteration = 1;
optional bytes seed = 2;
}
message SenderSigningKey {
optional bytes public = 1;
optional bytes private = 2;
}
message SenderKeyStateStructure { message SenderKeyStateStructure {
message SenderChainKey {
optional uint32 iteration = 1;
optional bytes seed = 2;
}
message SenderMessageKey {
optional uint32 iteration = 1;
optional bytes seed = 2;
}
message SenderSigningKey {
optional bytes public = 1;
optional bytes private = 2;
}
optional uint32 senderKeyId = 1; optional uint32 senderKeyId = 1;
optional SenderChainKey senderChainKey = 2; optional SenderChainKey senderChainKey = 2;

View File

@@ -1,13 +1,3 @@
const path = require('path'); const { groupproto } = require('./GroupProtocol')
const protobuf = require('protobufjs');
const protodir = path.resolve(__dirname); module.exports = groupproto
const group = protobuf.loadSync(path.join(protodir, 'group.proto')).lookup('groupproto');
module.exports = {
SenderKeyDistributionMessage: group.lookup('SenderKeyDistributionMessage'),
SenderKeyMessage: group.lookup('SenderKeyMessage'),
SenderKeyStateStructure: group.lookup('SenderKeyStateStructure'),
SenderChainKey: group.lookup('SenderChainKey'),
SenderSigningKey: group.lookup('SenderSigningKey'),
};

View File

@@ -17,7 +17,7 @@
"multi-device" "multi-device"
], ],
"scripts": { "scripts": {
"test": "mocha --timeout 240000 -r ts-node/register src/Tests/Tests.*.ts", "test": "jest",
"prepare": "tsc", "prepare": "tsc",
"lint": "eslint '*/*.ts' --quiet --fix", "lint": "eslint '*/*.ts' --quiet --fix",
"build:all": "tsc && typedoc", "build:all": "tsc && typedoc",
@@ -34,9 +34,10 @@
}, },
"dependencies": { "dependencies": {
"@hapi/boom": "^9.1.3", "@hapi/boom": "^9.1.3",
"curve25519-js": "^0.0.4",
"got": "^11.8.1", "got": "^11.8.1",
"jimp": "^0.16.1", "jimp": "^0.16.1",
"libsignal": "^2.0.1", "libsignal": "git+https://github.com/adiwajshing/libsignal-node",
"music-metadata": "^7.4.1", "music-metadata": "^7.4.1",
"pino": "^6.7.0", "pino": "^6.7.0",
"protobufjs": "^6.10.1", "protobufjs": "^6.10.1",
@@ -48,8 +49,8 @@
"files": [ "files": [
"lib/*", "lib/*",
"WAProto/*", "WAProto/*",
"WASignalGroup/*", "WASignalGroup/*.js",
"WABinary/*" "WABinary/*.js"
], ],
"devDependencies": { "devDependencies": {
"@types/got": "^9.6.11", "@types/got": "^9.6.11",

View File

@@ -1,32 +1,24 @@
import CurveCrypto from 'libsignal/src/curve25519_wrapper' import * as curveJs from 'curve25519-js'
import { createCipheriv, createDecipheriv, createHash, createHmac, randomBytes } from 'crypto' import { createCipheriv, createDecipheriv, createHash, createHmac, randomBytes } from 'crypto'
import { KeyPair } from '../Types' import { KeyPair } from '../Types'
export const Curve = { export const Curve = {
generateKeyPair: (): KeyPair => { generateKeyPair: (): KeyPair => {
const { pubKey, privKey } = CurveCrypto.keyPair(randomBytes(32)) const { public: pubKey, private: privKey } = curveJs.generateKeyPair(randomBytes(32))
return { return {
private: Buffer.from(privKey), private: Buffer.from(privKey),
public: Buffer.from(pubKey) public: Buffer.from(pubKey)
} }
}, },
sharedKey: (privateKey: Uint8Array, publicKey: Uint8Array) => { sharedKey: (privateKey: Uint8Array, publicKey: Uint8Array) => {
const shared = CurveCrypto.sharedSecret(publicKey, privateKey) const shared = curveJs.sharedKey(privateKey, publicKey)
return Buffer.from(shared) return Buffer.from(shared)
}, },
sign: (privateKey: Uint8Array, buf: Uint8Array) => ( sign: (privateKey: Uint8Array, buf: Uint8Array) => (
Buffer.from(CurveCrypto.sign(privateKey, buf)) Buffer.from(curveJs.sign(privateKey, buf, null))
), ),
verify: (pubKey: Uint8Array, message: Uint8Array, signature: Uint8Array) => { verify: (pubKey: Uint8Array, message: Uint8Array, signature: Uint8Array) => {
try { return curveJs.verify(pubKey, message, signature)
CurveCrypto.verify(pubKey, message, signature)
return true
} catch(error) {
if(error.message.includes('Invalid')) {
return false
}
throw error
}
} }
} }

View File

@@ -1570,6 +1570,11 @@ cssstyle@^2.3.0:
dependencies: dependencies:
cssom "~0.3.6" cssom "~0.3.6"
curve25519-js@^0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/curve25519-js/-/curve25519-js-0.0.4.tgz#e6ad967e8cd284590d657bbfc90d8b50e49ba060"
integrity sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==
data-urls@^2.0.0: data-urls@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
@@ -2698,11 +2703,11 @@ levn@~0.3.0:
prelude-ls "~1.1.2" prelude-ls "~1.1.2"
type-check "~0.3.2" type-check "~0.3.2"
libsignal@^2.0.1: "libsignal@git+https://github.com/adiwajshing/libsignal-node":
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/libsignal/-/libsignal-2.0.1.tgz#c276025c184ae4ebbd7d75c12c0be9f3b50cc19e" resolved "git+https://github.com/adiwajshing/libsignal-node#11de21293c352a57d0c25d29c66963029873d953"
integrity sha512-kqdl/BK5i0WCa4NxhtiBsjSzztB/FtUp3mVVLKBFicWH8rDsq95tEIqNcCaVlflLxOm6T/HRb/zv8IsCe7aopA==
dependencies: dependencies:
curve25519-js "^0.0.4"
protobufjs "6.8.8" protobufjs "6.8.8"
load-bmfont@^1.3.1, load-bmfont@^1.4.0: load-bmfont@^1.3.1, load-bmfont@^1.4.0: