From 12105a17eee4a9ace47f77f5b4d2a356e7d3b433 Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Mon, 27 Sep 2021 12:48:57 +0530 Subject: [PATCH] groups key generation bug fix --- WASignalGroup/group_session_builder.js | 41 +++++++++++--------------- WASignalGroup/keyhelper.js | 21 +++++++++++++ 2 files changed, 39 insertions(+), 23 deletions(-) create mode 100644 WASignalGroup/keyhelper.js diff --git a/WASignalGroup/group_session_builder.js b/WASignalGroup/group_session_builder.js index 60c152f..24c84a2 100644 --- a/WASignalGroup/group_session_builder.js +++ b/WASignalGroup/group_session_builder.js @@ -1,7 +1,7 @@ //const utils = require('../../common/utils'); const SenderKeyDistributionMessage = require('./sender_key_distribution_message'); -const keyhelper = require("libsignal/src/keyhelper"); +const keyhelper = require("./keyhelper"); class GroupSessionBuilder { constructor(senderKeyStore) { this.senderKeyStore = senderKeyStore; @@ -21,31 +21,26 @@ class GroupSessionBuilder { // [{"senderKeyId":1742199468,"senderChainKey":{"iteration":0,"seed":"yxMY9VFQcXEP34olRAcGCtsgx1XoKsHfDIh+1ea4HAQ="},"senderSigningKey":{"public":""}}] async create(senderKeyName) { - try { - const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName); - //console.log('GroupSessionBuilder create session', senderKeyName, senderKeyRecord); + const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName); + //console.log('GroupSessionBuilder create session', senderKeyName, senderKeyRecord); - if (senderKeyRecord.isEmpty()) { - const keyId = keyhelper.generateSenderKeyId(); - const senderKey = keyhelper.generateSenderKey(); - const signingKey = keyhelper.generateSenderSigningKey(); + if (senderKeyRecord.isEmpty()) { + const keyId = keyhelper.generateSenderKeyId(); + const senderKey = keyhelper.generateSenderKey(); + const signingKey = keyhelper.generateSenderSigningKey(); - senderKeyRecord.setSenderKeyState(keyId, 0, senderKey, signingKey); - await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord); - } - - const state = senderKeyRecord.getSenderKeyState(); - - return new SenderKeyDistributionMessage( - state.getKeyId(), - state.getSenderChainKey().getIteration(), - state.getSenderChainKey().getSeed(), - state.getSigningKeyPublic() - ); - } catch (e) { - //console.log(e.stack); - throw new Error(e); + senderKeyRecord.setSenderKeyState(keyId, 0, senderKey, signingKey); + await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord); } + + const state = senderKeyRecord.getSenderKeyState(); + + return new SenderKeyDistributionMessage( + state.getKeyId(), + state.getSenderChainKey().getIteration(), + state.getSenderChainKey().getSeed(), + state.getSigningKeyPublic() + ); } } module.exports = GroupSessionBuilder; \ No newline at end of file diff --git a/WASignalGroup/keyhelper.js b/WASignalGroup/keyhelper.js new file mode 100644 index 0000000..a244581 --- /dev/null +++ b/WASignalGroup/keyhelper.js @@ -0,0 +1,21 @@ +const curve = require('libsignal/src/curve'); +const nodeCrypto = require('crypto'); + +exports.generateSenderKey = function() { + return nodeCrypto.randomBytes(32); +} + +exports.generateSenderKeyId = function() { + return nodeCrypto.randomInt(2147483647); +} + +exports.generateSenderSigningKey = function(key) { + if (!key) { + key = curve.generateKeyPair(); + } + + return { + public: key.pubKey, + private: key.privKey, + }; +}