Guest User

Untitled

a guest
Jun 16th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.87 KB | None | 0 0
  1. fun generateLoginKeys(): PublicKey {
  2.         val keyGenerator = KeyPairGenerator.getInstance("RSA")
  3.         keyGenerator.initialize(2048)
  4.         val keyPair = keyGenerator.generateKeyPair()
  5.         Gdx.files.local("keys/").mkdirs()
  6.  
  7.         var output = ObjectOutputStream(FileOutputStream(Gdx.files.local("keys/loginKeyPublic.key").file()))
  8.         output.writeObject(keyPair.public)
  9.         output.close()
  10.  
  11.         output = ObjectOutputStream(FileOutputStream(Gdx.files.local("keys/loginKeyPrivate.key").file()))
  12.         output.writeObject(keyPair.private)
  13.         output.close()
  14.  
  15.         return keyPair.public
  16.     }
  17.  
  18.     fun generateMessageKeys(): PublicKey {
  19.         val keyGenerator = KeyPairGenerator.getInstance("RSA")
  20.         keyGenerator.initialize(2048)
  21.         val keyPair = keyGenerator.generateKeyPair()
  22.         Gdx.files.local("keys/").mkdirs()
  23.  
  24.         var output = ObjectOutputStream(FileOutputStream(Gdx.files.local("keys/encryptionKeyPublic.key").file()))
  25.         output.writeObject(keyPair.public)
  26.         output.close()
  27.  
  28.         output = ObjectOutputStream(FileOutputStream(Gdx.files.local("keys/encryptionKeyPrivate.key").file()))
  29.         output.writeObject(keyPair.private)
  30.         output.close()
  31.  
  32.         return keyPair.public
  33.     }
  34.  
  35.     fun addScheduledTask(runnable: Runnable) {
  36.         scheduledTasks.put(runnable)
  37.     }
  38.  
  39. call to send the packet
  40. override fun buttonCallback(button: GuiButton) {
  41.         when (button) {
  42.             checkUsernameButton -> {
  43.                 if (textFieldUsername.text.length < 5) {
  44.                     usernameToShort = true
  45.                 } else {
  46.                     KentaiCommon.packetHelper.sendPacket(CheckUsernameAvailablePacketToServer(textFieldUsername.text), ConnectionService.socket!!)
  47.                     usernameToShort = false
  48.                 }
  49.             }
  50.             registerButton -> {
  51.                 val loginKey = KentaiClient.generateLoginKeys()
  52.                 val messageKey = KentaiClient.generateMessageKeys()
  53.                 KentaiCommon.packetHelper.sendPacket(RegisterPacketToServer(textFieldUsername.text, loginKey, messageKey), ConnectionService.socket!!)
  54.             }
  55.         }
  56.     }
  57.  
  58. The packet class
  59.  
  60. class RegisterPacketToServer : IPacket {
  61.  
  62.     lateinit var username: String
  63.     lateinit var loginPublicKey: PublicKey
  64.     lateinit var messagePublicKey: PublicKey
  65.  
  66.     constructor(username: String, publicKey: PublicKey, messagePublicKey: PublicKey) {
  67.         this.username = username
  68.         this.loginPublicKey = publicKey
  69.         this.messagePublicKey = messagePublicKey
  70.     }
  71.  
  72.     constructor()
  73.  
  74.     override fun write(output: DataOutputStream) {
  75.         output.writeUTF(username)
  76.  
  77.         var objectOut = ObjectOutputStream(output)
  78.         objectOut.writeObject(loginPublicKey)
  79.  
  80.         objectOut = ObjectOutputStream(output)
  81.         objectOut.writeObject(messagePublicKey)
  82.     }
  83.  
  84.     override fun read(input: DataInputStream) {
  85.         username = input.readUTF()
  86.         var objectIn = ObjectInputStream(input)
  87.         loginPublicKey = objectIn.readObject() as PublicKey
  88.  
  89.         objectIn = ObjectInputStream(input)
  90.         messagePublicKey = objectIn.readObject() as PublicKey
  91.     }
  92. }
  93.  
  94. //Handling the packet
  95. class RegisterPacketToServerHandler : IPacketHandler {
  96.  
  97.     override fun handlePacket(packet: IPacket, socketFrom: Socket) {
  98.         packet as RegisterPacketToServer
  99.         if (packet.username.length in 6..19) {
  100.             try {
  101.                 DatabaseConnection.ds.connection.use({ connection ->
  102.                     var statement = connection.prepareStatement("SELECT * FROM kentai.login_table WHERE username = ?;")
  103.                     statement.setString(1, packet.username)
  104.                     val query = statement.executeQuery()
  105.                     if (!query.next()) {
  106.                         statement = connection.prepareStatement("INSERT INTO `kentai`.`login_table` (`username`, `public_key`, `message_public_key`) VALUES (?, ?, ?);")
  107.                         statement.setString(1, packet.username)
  108.                         val publicString = Base64.getEncoder().encodeToString(packet.loginPublicKey.encoded)
  109.                         statement.setString(2, publicString)
  110.                         val privateString = Base64.getEncoder().encodeToString(packet.messagePublicKey.encoded)
  111.                         statement.setString(3, privateString)
  112.                         statement.execute()
  113.                         KentaiCommon.packetHelper.sendPacket(RegisterPacketToServerResponseToClient(true, packet.username), socketFrom, null)
  114.                     }
  115.                 })
  116.             } catch (e: SQLException) {
  117.                 KentaiServer.logger.log(Level.WARNING, "ERROR!", e)
  118.             }
  119.         } else {
  120.             KentaiCommon.packetHelper.sendPacket(RegisterPacketToServerResponseToClient(false, ""), socketFrom)
  121.         }
  122.     }
  123.  
  124. }
Advertisement
Add Comment
Please, Sign In to add comment