Skip to content
Snippets Groups Projects
Commit 75a82d52 authored by Ho Dac Hai's avatar Ho Dac Hai
Browse files

Merge branch 'hai' into 'master'

Added encryption

See merge request 1050369/comp90015-dsass2-infinitymonkeys-remaster!34
parents 45627a40 ad7174e1
No related branches found
No related tags found
No related merge requests found
......@@ -27,8 +27,7 @@ public class PaintGUI extends JPanel {
JButton clearBtn, newBtn, openBtn, saveBtn, saveAsBtn;
JButton freehandBtn, lineBtn, circleBtn, rectBtn, ovalBtn, eraserBtn, textBtn;
JButton colorPaletteBtn, setFontBtn;
JTextField textInput;
JTextField textSize;
JTextField textInput, textSize;
JComboBox strokeOptions;
JComboBox eraserSizeOptions;
......@@ -133,12 +132,12 @@ public class PaintGUI extends JPanel {
toolbox1.add(circleBtn);
toolbox1.add(rectBtn);
toolbox1.add(ovalBtn);
toolbox1.add(eraserBtn);
toolbox1.add(textBtn);
toolbox1.add(strokeOptions);
toolbox2.add(textBtn);
toolbox2.add(textInput);
// toolbox2.add(setFontBtn);
toolbox2.add(textSize);
toolbox2.add(strokeOptions);
toolbox2.add(eraserBtn);
toolbox2.add(eraserSizeOptions);
toolbox2.add(clearBtn);
......@@ -383,17 +382,4 @@ public class PaintGUI extends JPanel {
drawingArea.setModeText(textString, size);
}
// public void showGUI() {
// frame = new JFrame("Shared Whiteboard System");
// JFrame.setDefaultLookAndFeelDecorated(true);
// frame.setContentPane(global);
//
// frame.setSize(800, 600);
// frame.setLocationRelativeTo( null );
// frame.setResizable(false);
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.setVisible(true);
// }
}
\ No newline at end of file
......@@ -11,11 +11,14 @@ import remote.IDrawingController;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
public class Client
{
private final String DEFAULT_USERNAME = "Anonymous";
private final String DEFAULT_SERVER_ADDRESS = "localhost";
private final EncryptionUpdate encryptionUpdate;
private String userName;
private String serverAddress;
......@@ -73,7 +76,7 @@ public class Client
public IDrawingController getDrawingController() { return drawingController; }
public Client(String username) throws RemoteException
public Client(String username) throws RemoteException, NoSuchProviderException, NoSuchAlgorithmException
{
this.userName = username;
this.clientUpdate = new ClientUpdate(this);
......@@ -81,6 +84,7 @@ public class Client
this.drawingUpdate = new DrawingUpdate(this);
this.startScreen = new StartScreen(this);
this.applicationMain = new ApplicationMain(this);
this.encryptionUpdate = new EncryptionUpdate();
}
public static void main(String[] args)
......@@ -143,7 +147,7 @@ public class Client
if( clientController.checkPassword(password) )
{
if( clientController.join(userName, this.chatUpdate, this.clientUpdate, this.drawingUpdate) )
if( clientController.join(userName, this.chatUpdate, this.clientUpdate, this.drawingUpdate, this.encryptionUpdate) )
{
System.out.println("Connected to server");
......
package client;
import remote.IDrawingUpdate;
import remote.IEncryptionUpdate;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.security.*;
public class EncryptionUpdate extends UnicastRemoteObject implements IEncryptionUpdate, Serializable {
private PrivateKey priv;
private PublicKey pub;
private SecretKey sharedSecretKey;
public PublicKey getPub() {
return pub;
}
public void setSharedKey(byte[] encryptedSharedSecretKey){
try {
Cipher cipher = Cipher.getInstance("RSA", "SunJCE");
cipher.init(Cipher.DECRYPT_MODE, priv);
sharedSecretKey = new SecretKeySpec(cipher.doFinal(encryptedSharedSecretKey), "AES");
System.out.println("Client holds this shared key: "+sharedSecretKey);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (NoSuchPaddingException | InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
EncryptionUpdate() throws RemoteException {
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", "SunJSSE");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
this.priv = pair.getPrivate();
this.pub = pair.getPublic();
}
catch (Exception e){
e.printStackTrace();
}
}
}
......@@ -7,7 +7,7 @@ public interface IClientController extends Remote
{
enum Action {KICKOUT, ASSIGNADMIN};
boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing) throws RemoteException;
boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing, IEncryptionUpdate encryptionUpdate) throws RemoteException;
void quit(String username) throws RemoteException;
......
package remote;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.security.PublicKey;
public interface IEncryptionUpdate extends Remote {
public PublicKey getPub() throws RemoteException;
public void setSharedKey(byte[] encryptedSharedSecretKey) throws RemoteException;
}
package server;
import remote.IChatUpdate;
import remote.IClientUpdate;
import remote.IDrawingUpdate;
import remote.IClientController;
import remote.*;
import java.io.Serializable;
import java.rmi.Remote;
......@@ -20,13 +17,15 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
}
@Override
public boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing) throws RemoteException
public boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing, IEncryptionUpdate encryptionUpdate) throws RemoteException
{
if( getUserIndex(username) < 0 )
{
// user with same username is not connected
server.chatController.broadcastMessageUserLogin(username);
new MySharedKey(encryptionUpdate);
User newUser = new User(username, clientChat, clientUpdate, clientDrawing);
server.users.add(newUser);
......
package server;
import remote.IEncryptionUpdate;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.rmi.RemoteException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.util.Base64;
public class MySharedKey {
private byte[] encryptedSharedSecretKey;
private IEncryptionUpdate encryptionUpdate;
private SecretKey sharedSecretKey;
public MySharedKey (IEncryptionUpdate encryptionUpdate) throws RemoteException {
this.encryptionUpdate = encryptionUpdate;
this.sharedSecretKey = new SecretKeySpec(new byte[16], "AES");
System.out.println(sharedSecretKey);
this.encryptedSharedSecretKey = wrapKey(encryptionUpdate.getPub());
System.out.println("Shared key on server:" + encryptedSharedSecretKey);
encryptionUpdate.setSharedKey(encryptedSharedSecretKey);
}
private byte[] wrapKey(PublicKey clientPubKey){
try {
Cipher c = Cipher.getInstance("RSA", "SunJCE");
c.init(Cipher.WRAP_MODE, clientPubKey);
byte[] result2 = c.wrap(sharedSecretKey);
return result2;
} catch (Exception e) {
e.printStackTrace();
throw new IllegalStateException(
e);
}
}
}
......@@ -4,6 +4,8 @@ import remote.IChatController;
import remote.IClientController;
import remote.IDrawingController;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
......@@ -54,7 +56,6 @@ public class Server
public void run() throws RemoteException
{
LocateRegistry.createRegistry(1099);
Registry registry = LocateRegistry.getRegistry();
......@@ -71,5 +72,24 @@ public class Server
registry.rebind(drawingControllerName, drawingController);
System.out.println("Server is ready");
printIP();
}
private void printIP()
{
InetAddress inetAddress = null;
try
{
inetAddress = InetAddress.getLocalHost();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
System.out.println("IP Address:- " + inetAddress.getHostAddress());
System.out.println("Host Name:- " + inetAddress.getHostName());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment