mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
groups key generation bug fix
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
//const utils = require('../../common/utils');
|
//const utils = require('../../common/utils');
|
||||||
const SenderKeyDistributionMessage = require('./sender_key_distribution_message');
|
const SenderKeyDistributionMessage = require('./sender_key_distribution_message');
|
||||||
|
|
||||||
const keyhelper = require("libsignal/src/keyhelper");
|
const keyhelper = require("./keyhelper");
|
||||||
class GroupSessionBuilder {
|
class GroupSessionBuilder {
|
||||||
constructor(senderKeyStore) {
|
constructor(senderKeyStore) {
|
||||||
this.senderKeyStore = senderKeyStore;
|
this.senderKeyStore = senderKeyStore;
|
||||||
@@ -21,31 +21,26 @@ class GroupSessionBuilder {
|
|||||||
|
|
||||||
// [{"senderKeyId":1742199468,"senderChainKey":{"iteration":0,"seed":"yxMY9VFQcXEP34olRAcGCtsgx1XoKsHfDIh+1ea4HAQ="},"senderSigningKey":{"public":""}}]
|
// [{"senderKeyId":1742199468,"senderChainKey":{"iteration":0,"seed":"yxMY9VFQcXEP34olRAcGCtsgx1XoKsHfDIh+1ea4HAQ="},"senderSigningKey":{"public":""}}]
|
||||||
async create(senderKeyName) {
|
async create(senderKeyName) {
|
||||||
try {
|
const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName);
|
||||||
const senderKeyRecord = await this.senderKeyStore.loadSenderKey(senderKeyName);
|
//console.log('GroupSessionBuilder create session', senderKeyName, senderKeyRecord);
|
||||||
//console.log('GroupSessionBuilder create session', senderKeyName, senderKeyRecord);
|
|
||||||
|
|
||||||
if (senderKeyRecord.isEmpty()) {
|
if (senderKeyRecord.isEmpty()) {
|
||||||
const keyId = keyhelper.generateSenderKeyId();
|
const keyId = keyhelper.generateSenderKeyId();
|
||||||
const senderKey = keyhelper.generateSenderKey();
|
const senderKey = keyhelper.generateSenderKey();
|
||||||
const signingKey = keyhelper.generateSenderSigningKey();
|
const signingKey = keyhelper.generateSenderSigningKey();
|
||||||
|
|
||||||
senderKeyRecord.setSenderKeyState(keyId, 0, senderKey, signingKey);
|
senderKeyRecord.setSenderKeyState(keyId, 0, senderKey, signingKey);
|
||||||
await this.senderKeyStore.storeSenderKey(senderKeyName, senderKeyRecord);
|
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const state = senderKeyRecord.getSenderKeyState();
|
||||||
|
|
||||||
|
return new SenderKeyDistributionMessage(
|
||||||
|
state.getKeyId(),
|
||||||
|
state.getSenderChainKey().getIteration(),
|
||||||
|
state.getSenderChainKey().getSeed(),
|
||||||
|
state.getSigningKeyPublic()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
module.exports = GroupSessionBuilder;
|
module.exports = GroupSessionBuilder;
|
||||||
21
WASignalGroup/keyhelper.js
Normal file
21
WASignalGroup/keyhelper.js
Normal file
@@ -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,
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user