Advertisement
zihadmahiuddin

crypto.js

May 24th, 2018
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. var nacl = require("sc-tweetnacl");
  4. var blake2 = require("../blake2");
  5. var ByteBuffer = require("../../util/bytebuffer-sc");
  6. var EMsg = require('../../enums/emsg');
  7. const Crypto = require('../crypto.js');
  8. const Nonce = require('../nonce.js');
  9.  
  10. class ServerCrypto extends Crypto {
  11.     constructor(settings) {
  12.         super();
  13.         this.privateKey = new Buffer("1891d401fadb51d25d3a9174d472a9f691a45b974285d47729c45c6538070d85", "hex");
  14.         this.serverKey = new Buffer("72f1a4a4c48e44da0c42310f800e96624e6dc6a641a9d41c3b5039d8dfadc27e", "hex");
  15.     }
  16.  
  17.     setClient(client) {
  18.         this.client = client;
  19.     }
  20.  
  21.     decryptPacket(message) {
  22.         if (message.messageType == EMsg.ClientHello) {
  23.             message.decrypted = message.payload;
  24.         } else if (message.messageType == EMsg.Login) {
  25.  
  26.             console.log(this.serverKey.toString('hex'));
  27.             this.clientKey = message.payload.slice(0, 32);
  28.             console.log(this.clientKey.toString('hex'));
  29.             var cipherText = message.payload.slice(32);
  30.  
  31.             this.beforeNm(this.clientKey, this);
  32.             console.log(this.getSharedKey().toString('hex'));
  33.  
  34.             var nonce = new Nonce({ clientKey: this.clientKey, serverKey: this.serverKey });
  35.  
  36.             message.decrypted = this.decrypt(cipherText, nonce);
  37.  
  38.             if (message.decrypted) {
  39.                 this.setSessionKey(Buffer.from(message.decrypted.slice(0, 24)));
  40.                 this.setDecryptNonce(Buffer.from(message.decrypted.slice(24, 48)));
  41.                 this.client.setEncryptNonce(Buffer.from(message.decrypted.slice(24, 48)));
  42.  
  43.                 message.decrypted = message.decrypted.slice(48);
  44.                 console.log(Buffer.from(message.decrypted).toString('hex'));
  45.             }
  46.         } else {
  47.             message.decrypted = this.decrypt(message.payload);
  48.         }
  49.     }
  50.  
  51.     encryptPacket(message) {
  52.         if (message.messageType == EMsg.ServerHello || message.messageType == EMsg.LoginFailed) {
  53.             message.encrypted = message.decrypted;
  54.         } else if (message.messageType == EMsg.LoginOk) {
  55.             var nonce = new Nonce({ clientKey: this.clientKey, serverKey: this.serverKey, nonce: this.decryptNonce });
  56.             var toEncrypt = Buffer.concat([this.encryptNonce.getBuffer(), this.client.getSharedKey(), Buffer.from(message.decrypted)]);
  57.  
  58.             var cipherText = this.encrypt(toEncrypt, nonce);
  59.  
  60.             this.setSharedKey(this.client.getSharedKey()); // is this what I was missing, omg
  61.  
  62.             message.encrypted = cipherText;
  63.         } else {
  64.             message.encrypted = this.encrypt(message.decrypted);
  65.         }
  66.     }
  67. }
  68.  
  69. module.exports = ServerCrypto;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement