Guest User

Untitled

a guest
Jul 18th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. //server sends to proxy
  2. public ByteBuffer decryptServerGame(ByteBuffer packet, boolean first) {
  3.  
  4. try {
  5.  
  6. if(first) { // first packet, server sends to proxy
  7. Cipher cii = Cipher.getInstance("Blowfish/CFB64/NoPadding");
  8. Key key = new SecretKeySpec(STATIC_KEY.getBytes("ASCII"), "Blowfish");
  9. cii.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(" ".getBytes()));
  10. ByteBuffer bb = ByteBuffer.wrap(cii.doFinal(packet.array())).order(ByteOrder.LITTLE_ENDIAN);
  11.  
  12. int len = bb.getInt(11);
  13. int junkLen = bb.getInt(15);
  14. int index = 19 + junkLen;
  15. byte[] serverIV = new byte[bb.getInt(index)];
  16. index+=4;
  17. System.arraycopy(bb.array(), index, serverIV, 0, serverIV.length);
  18. index+=serverIV.length;
  19. byte[] clientIV = new byte[bb.getInt(index)];
  20. index+=4;
  21. System.arraycopy(bb.array(), index, clientIV, 0, clientIV.length);
  22. index+=clientIV.length;
  23. int strLen = bb.getInt(index);
  24. index+=4;
  25. String p = new String(bb.array(), index, strLen);
  26. index+=strLen;
  27. strLen = bb.getInt(index);
  28. index+=4;
  29. String g = new String(bb.array(), index, strLen);
  30. index+=strLen;
  31. strLen = bb.getInt(index);
  32. index+=4;
  33. String pubKey = new String(bb.array(), index, strLen);
  34.  
  35. exchange.serverPubKey= new BigInteger(pubKey, 16);
  36. exchange.serverIV = serverIV;
  37. exchange.clientIV = clientIV;
  38. System.out.println("Client IV Len: " + clientIV.length);
  39. System.out.println("Server IV Len: " + serverIV.length);
  40. System.out.println("Key Len: " + pubKey.length());
  41.  
  42.  
  43.  
  44. KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
  45. BigInteger p512 = new BigInteger(p, 16);
  46. BigInteger g512 = new BigInteger(g, 16);
  47.  
  48. DHParameterSpec dhSpec = new DHParameterSpec(p512, g512);
  49.  
  50. keyGen.initialize(dhSpec, new SecureRandom());
  51.  
  52. KeyAgreement serverKeyAgree = KeyAgreement.getInstance("DH");
  53. KeyAgreement clientKeyAgree = KeyAgreement.getInstance("DH");
  54.  
  55. keyGen = KeyPairGenerator.getInstance("DH"); // new instance, just incase.
  56.  
  57. KeyPair serverKeyPair = keyGen.generateKeyPair();
  58. KeyPair clientKeyPair = keyGen.generateKeyPair();
  59.  
  60. KeyFactory k = KeyFactory.getInstance("DH");
  61. serverKeyAgree.init(serverKeyPair.getPrivate());
  62. clientKeyAgree.init(clientKeyPair.getPrivate());
  63.  
  64. serverKeyAgree.doPhase(new SecretKeySpec(exchange.serverPubKey.toByteArray(), "DH"), true);
  65. clientKeyAgree.doPhase(new SecretKeySpec(exchange.clientPubKey.toByteArray(), "DH"), true);
  66. exchange.serverSecretKey = serverKeyAgree.generateSecret("DH");
  67. exchange.clientSecretKey = clientKeyAgree.generateSecret("DH");
  68.  
  69.  
  70.  
  71.  
  72. cii.init(Cipher.ENCRYPT_MODE, key);
  73. return ByteBuffer.wrap(cii.doFinal(bb.array())); // encrypt it and send it back.
  74.  
  75. } else {
  76.  
  77. }
  78.  
  79.  
  80. } catch(Exception e) {
  81. e.printStackTrace();
  82. }
  83. return packet;
  84.  
  85. }
Add Comment
Please, Sign In to add comment