Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /////////////////////////////////
- // Coté Serveur NodeJS
- /////////////////////////////////
- 'use strict';
- var openpgp = require('openpgp');
- var serverPrivateKey = null;
- var serverPublicKey = null;
- var clientPublicKey = null;
- var isGenerated = false;
- var options = {
- numBits: 512,
- userId: 'userid',
- passPhrase: 'ma phrase top secrete'
- };
- openpgp.generateKeyPair(options).then(function(keypair) {
- // Success
- serverPrivateKey = keypair.privateKeyArmored;
- serverPublicKey = keypair.publicKeyArmored;
- isGenerated = true;
- }).catch(function(error) {
- console.log("Erreur lors de la création des clés.");
- });
- function sockets(socket) {
- var publicKey = openpgp.key.readArmored(serverPublicKey);
- var privateKey = openpgp.key.readArmored(serverPrivateKey).keys[0];
- privateKey.decrypt(options.passPhrase);
- // Première connexion du client, on envoie donc la clé public du serveur.
- socket.emit('init:server-pgp', serverPublicKey, function() {
- socket.on('init:client-pgp', function(data) {
- clientPublicKey = data;
- console.log(clientPublicKey);
- });
- });
- // On redéfini les fonction on et emit pour encrypter et décrypter les données
- // à chaque utilisation.
- var emit = function(eventName, data, callback) {
- if(isGenerated) {
- openpgp.encryptMessage(publicKey.keys, data).then(function(pgpMessage) {
- socket.emit(eventName, pgpMessage, callback);
- });
- } else {
- console.log('Clés non générées.');
- }
- };
- var on = function(eventName, data) {
- if(isGenerated) {
- socket.on(eventName, function() {
- data = openpgp.message.readArmored(arguments);
- openpgp.decryptMessage(privateKey, data).then(function(plaintext) {
- return plaintext;
- });
- });
- } else {
- console.log('Clés non générées');
- }
- };
- emit('msgtest:server', 'Si ce message est décodé, c\'est que la liaison fonctionne');
- on('msgtest:client', function(data) {
- console.log(data);
- });
- };
- module.exports = sockets;
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // Fin Serveur
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////
- // Coté Client : OpenPGPFactory
- ////////////////////////////////
- 'use strict';
- app.factory('SocketsFactory', ['$rootScope', 'PGP', '$q',
- function($rootScope, pgp, $q) {
- var socket = io.connect('https://express-morgiver.c9.io');
- var factory = {
- pgp: pgp,
- serverPublicKey: null,
- clientPublicKey: null,
- clientPrivateKey: null,
- options: {},
- keypair: null,
- setClientPublicKey: function setClientPublicKey(key) {
- factory.clientPublicKey = key;
- },
- setClientPrivateKey: function setClientPrivateKey(key) {
- factory.clientPrivateKey = key;
- },
- setServerPublicKey: function setServerPublicKey(key) {
- factory.serverPublicKey = key;
- },
- on: function on(eventName, callback) {
- socket.on(eventName, function() {
- var args = null;
- var privateKey = factory.pgp.key.readArmored(factory.clientPrivateKey).keys[0];
- privateKey.decrypt(factory.options.passPhrase)
- factory.pgp.decryptMessage(privateKey, arguments).then(function(plaintext) {
- args = plaintext;
- });
- $rootScope.$apply(function() {
- callback.apply(socket, args);
- });
- });
- },
- emit: function emit(eventName, data, callback) {
- var publicKey = factory.pgp.key.readArmored(factory.serverPublicKey);
- factory.pgp.encryptMessage(publicKey, data).then(function(pgpMessage) {
- socket.emit(eventName, pgpMessage, function() {
- var args = arguments;
- $rootScope.$apply(function() {
- if(callback) {
- callback.apply(socket, args);
- }
- })
- });
- });
- }
- };
- return factory;
- }
- ]);
- ////////////////////////
- // Mon Core Controller
- ////////////////////////
- 'use strict';
- app.controller('CoreCtrl', ['$scope', 'SocketsFactory',
- function($scope, SocketsFactory) {
- var io = SocketsFactory;
- var genPassPhrase = function genPassPhrase() {
- var passGenerated = "";
- var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwyxz0123456789";
- for( var i=0; i < 512; i++ ) {
- passGenerated += possible.charAt(Math.floor(Math.random() * possible.length));
- }
- return passGenerated;
- };
- io.options = {
- numBits: 512,
- userId: 'ClientSide',
- passPhrase: genPassPhrase()
- };
- io.pgp.generateKeyPair(io.options).then(function(keypair) {
- io.setClientPrivateKey(keypair.privateKeyArmored);
- io.setClientPublicKey(keypair.publicKeyArmored);
- });
- io.on('init:server-pgp', function(data) {
- io.serverPublicKey = data;
- io.emit('init:client-pgp', io.clientPublicKey);
- });
- io.on('msgtest:server', function(data) {
- console.log('Le message :');
- console.log(data);
- });
- io.emit('msgtest:client', 'Message qui doit être encodé et décodé.');
- }
- ]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement