46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
const express = require('express');
|
|
const app = express();
|
|
const http = require('http');
|
|
const server = http.createServer(app);
|
|
const { Server } = require("socket.io");
|
|
const io = new Server(server);
|
|
const nodepgp = require('node-pgp'); // ou une autre bibliothèque PGP
|
|
const openpgp = require("openpgp");
|
|
// ... (initialisation de nodepgp)
|
|
|
|
io.on('connection', (socket) => {
|
|
// Gestion de la connexion d'un utilisateur
|
|
// ...
|
|
|
|
socket.on('message', async (data) => {
|
|
// Vérifier si le destinataire est connecté
|
|
// ...
|
|
|
|
// Générer une nouvelle clé de session
|
|
const sessionKey = await nodepgp.generateKey({
|
|
bits: 2048,
|
|
type: 'rsa'
|
|
});
|
|
|
|
// Chiffrer le message avec la clé publique du destinataire et la clé de session
|
|
const encryptedMessage = await nodepgp.encrypt({
|
|
message: data.message,
|
|
publicKeys: [destinataire.publicKey],
|
|
signingKeys: [sessionKey.privateKey]
|
|
});
|
|
|
|
// Envoyer la clé de session chiffrée avec la clé publique du destinataire
|
|
// et le message chiffré au destinataire
|
|
socket.to(destinataire.id).emit('message', {
|
|
message: encryptedMessage,
|
|
sessionKey: await nodepgp.encrypt({
|
|
message: sessionKey.publicKey,
|
|
publicKeys: [destinataire.publicKey]
|
|
})
|
|
});
|
|
});
|
|
});
|
|
|
|
server.listen(3030, () => {
|
|
console.log('apxchat listening on *:3030');
|
|
}); |