Advertisement
Morgiver

Untitled

Aug 29th, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /////////////////////////////////
  2. // Coté Serveur NodeJS
  3. /////////////////////////////////
  4. 'use strict';
  5.  
  6. var openpgp = require('openpgp');
  7.  
  8. var serverPrivateKey = null;
  9. var serverPublicKey  = null;
  10. var clientPublicKey  = null;
  11. var isGenerated = false;
  12. var options = {
  13.    numBits: 512,
  14.    userId: 'userid',
  15.    passPhrase: 'ma phrase top secrete'
  16. };
  17.  
  18. openpgp.generateKeyPair(options).then(function(keypair) {
  19.     // Success
  20.     serverPrivateKey = keypair.privateKeyArmored;
  21.     serverPublicKey = keypair.publicKeyArmored;
  22.     isGenerated = true;
  23.    
  24. }).catch(function(error) {
  25.     console.log("Erreur lors de la création des clés.");
  26. });
  27.  
  28. function sockets(socket) {
  29.     var publicKey = openpgp.key.readArmored(serverPublicKey);
  30.     var privateKey = openpgp.key.readArmored(serverPrivateKey).keys[0];
  31.     privateKey.decrypt(options.passPhrase);
  32.     // Première connexion du client, on envoie donc la clé public du serveur.
  33.     socket.emit('init:server-pgp', serverPublicKey, function() {
  34.         socket.on('init:client-pgp', function(data) {
  35.         clientPublicKey = data;
  36.         console.log(clientPublicKey);
  37.         });
  38.     });
  39.    
  40.     // On redéfini les fonction on et emit pour encrypter et décrypter les données
  41.     // à chaque utilisation.
  42.     var emit = function(eventName, data, callback) {
  43.         if(isGenerated) {
  44.             openpgp.encryptMessage(publicKey.keys, data).then(function(pgpMessage) {
  45.                socket.emit(eventName, pgpMessage, callback);
  46.             });
  47.         } else {
  48.             console.log('Clés non générées.');
  49.         }
  50.     };
  51.     var on = function(eventName, data) {
  52.         if(isGenerated) {
  53.             socket.on(eventName, function() {
  54.                 data = openpgp.message.readArmored(arguments);
  55.                 openpgp.decryptMessage(privateKey, data).then(function(plaintext) {
  56.                     return plaintext;
  57.                 });
  58.             });
  59.         } else {
  60.             console.log('Clés non générées');
  61.         }
  62.     };
  63.    
  64.     emit('msgtest:server', 'Si ce message est décodé, c\'est que la liaison fonctionne');
  65.     on('msgtest:client', function(data) {
  66.         console.log(data);
  67.     });
  68. };
  69.  
  70. module.exports = sockets;
  71. ////////////////////////////////////////////////////////////////////////////////////////////////////
  72. // Fin Serveur
  73. ////////////////////////////////////////////////////////////////////////////////////////////////////
  74.  
  75. ////////////////////////////////
  76. // Coté Client : OpenPGPFactory
  77. ////////////////////////////////
  78.  
  79. 'use strict';
  80.  
  81. app.factory('SocketsFactory', ['$rootScope', 'PGP', '$q',
  82.     function($rootScope, pgp, $q) {
  83.         var socket = io.connect('https://express-morgiver.c9.io');
  84.        
  85.         var factory = {
  86.             pgp: pgp,
  87.             serverPublicKey: null,
  88.             clientPublicKey: null,
  89.             clientPrivateKey: null,
  90.             options: {},
  91.             keypair: null,
  92.             setClientPublicKey: function setClientPublicKey(key) {
  93.                 factory.clientPublicKey = key;
  94.             },
  95.             setClientPrivateKey: function setClientPrivateKey(key) {
  96.                 factory.clientPrivateKey = key;
  97.             },
  98.             setServerPublicKey: function setServerPublicKey(key) {
  99.                 factory.serverPublicKey = key;
  100.             },
  101.             on: function on(eventName, callback) {
  102.                 socket.on(eventName, function() {
  103.                     var args = null;
  104.                     var privateKey = factory.pgp.key.readArmored(factory.clientPrivateKey).keys[0];
  105.                     privateKey.decrypt(factory.options.passPhrase)
  106.                     factory.pgp.decryptMessage(privateKey, arguments).then(function(plaintext) {
  107.                         args = plaintext;
  108.                     });
  109.                     $rootScope.$apply(function() {
  110.                         callback.apply(socket, args);
  111.                     });
  112.                 });
  113.             },
  114.            
  115.             emit: function emit(eventName, data, callback) {
  116.                 var publicKey = factory.pgp.key.readArmored(factory.serverPublicKey);
  117.                 factory.pgp.encryptMessage(publicKey, data).then(function(pgpMessage) {
  118.                    socket.emit(eventName, pgpMessage, function() {
  119.                         var args = arguments;
  120.                         $rootScope.$apply(function() {
  121.                             if(callback) {
  122.                                 callback.apply(socket, args);
  123.                             }
  124.                         })
  125.                     });
  126.                 });
  127.             }
  128.         };
  129.        
  130.         return factory;
  131.     }
  132. ]);
  133.  
  134.  
  135. ////////////////////////
  136. // Mon Core Controller
  137. ////////////////////////
  138. 'use strict';
  139.  
  140. app.controller('CoreCtrl', ['$scope', 'SocketsFactory',
  141.     function($scope, SocketsFactory) {
  142.         var io = SocketsFactory;
  143.        
  144.         var genPassPhrase = function genPassPhrase() {
  145.             var passGenerated = "";
  146.             var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwyxz0123456789";
  147.            
  148.             for( var i=0; i < 512; i++ ) {
  149.                 passGenerated += possible.charAt(Math.floor(Math.random() * possible.length));
  150.             }
  151.            
  152.             return passGenerated;
  153.         };
  154.        
  155.         io.options = {
  156.              numBits: 512,
  157.              userId: 'ClientSide',
  158.              passPhrase: genPassPhrase()
  159.         };
  160.        
  161.         io.pgp.generateKeyPair(io.options).then(function(keypair) {
  162.             io.setClientPrivateKey(keypair.privateKeyArmored);
  163.             io.setClientPublicKey(keypair.publicKeyArmored);
  164.         });
  165.        
  166.         io.on('init:server-pgp', function(data) {
  167.             io.serverPublicKey = data;
  168.             io.emit('init:client-pgp', io.clientPublicKey);
  169.         });
  170.        
  171.         io.on('msgtest:server', function(data) {
  172.             console.log('Le message :');
  173.             console.log(data);
  174.         });
  175.        
  176.         io.emit('msgtest:client', 'Message qui doit être encodé et décodé.');
  177.     }
  178. ]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement