From fa16efae93cd8fefcaa127e095098eafcc14ab40 Mon Sep 17 00:00:00 2001
From: ekurmakaevMac <ekurmakaev@student.unimelb.edu.au>
Date: Thu, 24 Oct 2019 14:56:38 +1100
Subject: [PATCH] no message
---
.idea/workspace.xml | 66 +++++++++++-------
.../infinitymonkeys/GUI/ChatScreen$1.class | Bin 3027 -> 3490 bytes
.../infinitymonkeys/GUI/ChatScreen.class | Bin 7184 -> 7184 bytes
.../infinitymonkeys/GUI/PaintGUI$1.class | Bin 4973 -> 4973 bytes
.../infinitymonkeys/GUI/PaintGUI$2.class | Bin 0 -> 725 bytes
.../infinitymonkeys/GUI/PaintGUI.class | Bin 7723 -> 7723 bytes
.../GUI/SerializableImage.class | Bin 0 -> 2210 bytes
.../infinitymonkeys/GUI/StartScreen$1.class | Bin 2051 -> 2061 bytes
.../infinitymonkeys/GUI/StartScreen.class | Bin 5505 -> 5497 bytes
.../infinitymonkeys/GUI/icon/circle.png | Bin 0 -> 1947 bytes
.../infinitymonkeys/GUI/icon/eraser.png | Bin 0 -> 2627 bytes
.../infinitymonkeys/GUI/icon/freehand.png | Bin 0 -> 2087 bytes
.../infinitymonkeys/GUI/icon/line.png | Bin 0 -> 3344 bytes
.../infinitymonkeys/GUI/icon/oval.png | Bin 0 -> 1581 bytes
.../infinitymonkeys/GUI/icon/palette.png | Bin 0 -> 3394 bytes
.../infinitymonkeys/GUI/icon/rectangle.png | Bin 0 -> 927 bytes
.../infinitymonkeys/GUI/icon/square.png | Bin 0 -> 695 bytes
.../infinitymonkeys/GUI/icon/text.png | Bin 0 -> 2146 bytes
.../infinitymonkeys/client/ChatUpdate.class | Bin 1717 -> 2087 bytes
.../infinitymonkeys/client/Client.class | Bin 4517 -> 5234 bytes
.../client/EncryptionUpdate.class | Bin 0 -> 3129 bytes
.../remote/EncryptDecrypt.class | Bin 0 -> 2466 bytes
.../remote/IChatController.class | Bin 479 -> 497 bytes
.../infinitymonkeys/remote/IChatUpdate.class | Bin 375 -> 384 bytes
.../remote/IClientController$Action.class | Bin 1081 -> 1081 bytes
.../remote/IClientController.class | Bin 742 -> 816 bytes
.../remote/IEncryptionUpdate.class | Bin 0 -> 286 bytes
.../server/ChatController.class | Bin 2813 -> 3493 bytes
.../server/ClientController$1.class | Bin 760 -> 760 bytes
.../server/ClientController.class | Bin 5852 -> 6754 bytes
.../infinitymonkeys/server/MySharedKey.class | Bin 0 -> 2062 bytes
.../infinitymonkeys/server/Server.class | Bin 2333 -> 2979 bytes
.../infinitymonkeys/server/User.class | Bin 1273 -> 1491 bytes
src/GUI/ChatScreen.java | 8 ++-
src/client/ChatUpdate.java | 7 +-
src/client/Client.java | 52 +++++++++-----
src/client/EncryptionUpdate.java | 9 +++
src/remote/EncryptDecrypt.java | 59 ++++++++++++++++
src/remote/IChatController.java | 5 +-
src/remote/IChatUpdate.java | 3 +-
src/remote/IClientController.java | 6 +-
src/server/ChatController.java | 25 +++++--
src/server/ClientController.java | 25 +++++--
src/server/MySharedKey.java | 7 +-
src/server/User.java | 11 ++-
45 files changed, 214 insertions(+), 69 deletions(-)
create mode 100644 out/production/infinitymonkeys/GUI/PaintGUI$2.class
create mode 100644 out/production/infinitymonkeys/GUI/SerializableImage.class
create mode 100644 out/production/infinitymonkeys/GUI/icon/circle.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/eraser.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/freehand.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/line.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/oval.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/palette.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/rectangle.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/square.png
create mode 100644 out/production/infinitymonkeys/GUI/icon/text.png
create mode 100644 out/production/infinitymonkeys/client/EncryptionUpdate.class
create mode 100644 out/production/infinitymonkeys/remote/EncryptDecrypt.class
create mode 100644 out/production/infinitymonkeys/remote/IEncryptionUpdate.class
create mode 100644 out/production/infinitymonkeys/server/MySharedKey.class
create mode 100644 src/remote/EncryptDecrypt.java
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index efa7fbb..13e2922 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,34 +2,36 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="7d248efa-573c-4847-b942-df9b4c49b118" name="Default Changelist" comment="">
+ <change afterPath="$PROJECT_DIR$/src/remote/EncryptDecrypt.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ApplicationMain$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ApplicationMain$1.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ApplicationMain.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ApplicationMain.class" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen$1.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ChatScreen.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ColorPallete.class" beforeDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea$1.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/DrawingArea.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/MenuBar.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI$1.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/PaintGUI.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen$1.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/StartScreen.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/ToolBar.class" beforeDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/GUI/Tools.class" beforeDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/META-INF/infinitymonkeys.kotlin_module" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/META-INF/infinitymonkeys.kotlin_module" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/client/ChatUpdate.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/client/ChatUpdate.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/client/Client.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/client/Client.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/client/ClientUpdate$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/client/ClientUpdate$1.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/client/ClientUpdate.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/client/ClientUpdate.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/client/DrawingUpdate.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/client/DrawingUpdate.class" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IChatController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IChatController.class" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IChatUpdate.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IChatUpdate.class" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController$Action.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController$Action.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IClientController.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IDrawingController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IDrawingController.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IDrawingUpdate.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/remote/IDrawingUpdate.class" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ChatController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ChatController.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController$1.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/ClientController.class" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/DrawingController.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/DrawingController.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/Server.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/Server.class" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/out/production/infinitymonkeys/server/User.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/infinitymonkeys/server/User.class" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/GUI/ChatScreen.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/GUI/ChatScreen.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/client/ChatUpdate.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/ChatUpdate.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" />
- <change beforePath="$PROJECT_DIR$/src/server/DrawingController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/DrawingController.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/client/EncryptionUpdate.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/EncryptionUpdate.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/remote/IChatController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/remote/IChatController.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/remote/IChatUpdate.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/remote/IChatUpdate.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/remote/IClientController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/remote/IClientController.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/server/ChatController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/ChatController.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/server/ClientController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/ClientController.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/server/MySharedKey.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/MySharedKey.java" afterDir="false" />
+ <change beforePath="$PROJECT_DIR$/src/server/User.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/User.java" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
@@ -37,6 +39,13 @@
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
+ <component name="FileTemplateManagerImpl">
+ <option name="RECENT_TEMPLATES">
+ <list>
+ <option value="Class" />
+ </list>
+ </option>
+ </component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
@@ -47,15 +56,6 @@
</set>
</option>
</component>
- <component name="ProjectConfigurationFiles">
- <option name="files">
- <list>
- <option value="$PROJECT_DIR$/.idea/.gitignore" />
- <option value="$PROJECT_DIR$/.idea/comp90015-dsass2-infinitymonkeys-remaster.iml" />
- <option value="$PROJECT_DIR$/.idea/modules.xml" />
- </list>
- </option>
- </component>
<component name="ProjectId" id="1SawkRB22mTFnhM0v5PRJ8xJhId" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="PropertiesComponent">
@@ -106,7 +106,7 @@
<module name="infinitymonkeys" />
<extension name="coverage">
<pattern>
- <option name="PATTERN" value="server.*" />
+ <option name="PATTERN" value="remote.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
@@ -139,8 +139,16 @@
<workItem from="1571815157364" duration="1039000" />
<workItem from="1571816646909" duration="820000" />
<workItem from="1571818565591" duration="60000" />
- <workItem from="1571818658517" duration="1442000" />
+ <workItem from="1571818658517" duration="13454000" />
</task>
+ <task id="LOCAL-00001" summary="jj">
+ <created>1571821705525</created>
+ <option name="number" value="00001" />
+ <option name="presentableId" value="LOCAL-00001" />
+ <option name="project" value="LOCAL" />
+ <updated>1571821705525</updated>
+ </task>
+ <option name="localTasksCounter" value="2" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@@ -159,6 +167,10 @@
</map>
</option>
</component>
+ <component name="VcsManagerConfiguration">
+ <MESSAGE value="jj" />
+ <option name="LAST_COMMIT_MESSAGE" value="jj" />
+ </component>
<component name="simpleUML.UMLToolWindowPlugin">
<General>
<option name="birdViewUpdateDelay" value="2000" />
diff --git a/out/production/infinitymonkeys/GUI/ChatScreen$1.class b/out/production/infinitymonkeys/GUI/ChatScreen$1.class
index 22f18c553c1c6ac1133f3aeb7189bf14e9f9d15d..eceaff279a128c359ebcb7c8f89cec6b3d83a9e7 100644
GIT binary patch
delta 1830
zcmcaCzDT<M)W2Q(7#J8#81{2As5AI;F=#LZa4`fj1aUF=F$9B%5H5yLhA<9>a1b5A
z$>7Hj$;A-G5Y5RD!w}2C5XZ$3&yWC8n8?MD#E=X!AqAu$m5U*bA)SjMgCUcHA&ZM4
zn;{1zoXgFS$B+*q3fLJ6UAPz|8Hzx<i$Rhl91Nx03}p=EAdw0XQ3)cdI2fuy!ZjdH
zEeAs#h*Qtb(7?{n$j;C-amx#B-rUsU;>7gS;MByN)D%VrX`igbvcwAg<f6)gl6-xL
zuzylkYI4csnT-2{8`v3|*%?~c8CuyH+SnNi*%{g=r!yHlb?`7~F=+EJ=rDA$Gc@xs
zbTM@EF!V6=@-Xx<^s_Te;9;1^Fo}_Yfrnu-!xSEdsSMND8K(0v%wU+w&M=FIVK&2@
z$#<9}eCP5o%mc~KXIQ|_u#ksg5y+Uu43l^mmM|=3XIRF=u$*B9JHtvIhE)u!85x)z
zb8^@jT6h@NFs$WaSjRAlouQS7VLihJ9)^t!n<ncp%i3>d=;UG80&>V!hHZ=t60Q}Q
zB??9P`MC;7r6nc#c?tzZsl~;qDeMgGJPg}GcJBb`*a_0Hi($d!4rUpS-3)tp81^#s
zPF};T#=MVV&*ZDj9*k0x;~AwUOS9-nO5zH#&B-hdO!dO)sU@y?-~i3c&kHR`Ni0ca
zWRTX-^hwUiOwB9NN0+o_WDv(8#mFF(o>~%|kyw<P5}cY`lv?7QTFJ;DrJ;!)Z%{dF
zMlA->qSV~{l2n*IE~#L*Ff#C_LR=MGQk0pO&dA_CxsX-Z1eZY=Hh>ZgBxP7nUdZOc
zXaLeKg{~c;YBCqQ6r&SJ(PS@nA$$s>*{3n8Llufm{>UyPtInXoz{sG<z$hR9N@olV
z3``6R3_1+D42%qVleIXcz4aLw7}yvX85kJi7z`K~7{tITxEKr>j2S?H3#^Zkfsw(4
z!4#y6fq^-dfrWvMfq}77dm96@))ofF9SkhX7$#1hz+qXh1LALC;M~R_xQ#(*2ZOK`
zt0aq%$TkMinGBM;a7i&q)}0LE%naen86=QJSwP|vEFf_%D;7zXZ46S&8SW$OkzU4N
z0XIa(cM}7*knA=FUbwCG3}QPO<d_&hYPK=RFK6KJ(*>I`2VsW7G6rXmJlK^oz98lf
z2E}a*{M#4={6HouA)Ck`rn{3t8SGMoi~JC#sVrk~02u)>tsaYUsu;$pp%}N3frY_<
zp`T$AgCxUNhARx$86+9m7!??m86+7)81onl86+8)89))Wj6suufgzEBk0F^sk|Bjb
zl_8bEfFXmyf+35+ogtecilIJ-A%!8Ip^BlHp`W3WVG=_b!xV-JhM5di409N&8CEgW
zGHhjNVA#vh$Z(dSiQx)EJHvH`7KR%PZ47r9IvDOVbTYhU=wbN5(96iiFoBVeVIrdf
z!!$-^hRKYo3{x4k7-lf)GR$POW|+h1#xR#Lgkb?=48uakJcgx=g$#=si|ZMdFjg?E
z04Jpx4Ezl43?2+-4CV|h3{ecG3>FNQ46F=O7+4vs7_1ps7$g}Q7;G5K8JHLh7%~}b
z8SEIC8E!DJfMuB(wlb(Q*fTgVFfppab^Ks3f{L**sDMpoW-NxuGP*I;!=yuC(x7w-
zOU;ax42}#=42%rU3=9kf47~ptsu<YV8C=*IT-h1i*csfxqz41TPX-Yub_UO%3~WsQ
z8LSwXVQRb>7}*&-e=)Ey{bz7yV1Wy>Gq{0eema14V3lHEV_;_R24_JZ244mS1{MZC
V1_lNr1_lN$21W*TP;O&j0029spNjwh
delta 1374
zcmZ1^eObKz)W2Q(7#J8#7*=sIs4#ePF{m<laWQx^_;4|JF!+K9KQ0D;h5!zRKoA|o
z$>6~d%*7DG5X#9A#t_cI5W&R|$q)rn7|q2H!w?HHA&!F~o{J%YArYi7iJKvrAq7OF
zvNNP{F^DmwgH&gL<T6b;7_zt-vKewfLb)I!4@Bg1Fcg4<3qhPB4u)b7r-YrMl%1iB
zouPc<;TMx{GVT_rU}vagXGjB!SFtlxPhQSs>{P?Upw6Jd!=TAf%g#{6!%)Xi&%@Bb
z(8$Bk#L&#n(89ye%FxEhz`(=M&d|Zb(8<un&d|-n(8JKn&d|rh(9bYovJA6?#Y7&4
zNg(;j3{%({rt&aM0~s?Nq?6e(Cx@M(f`?%S!%QBASqyFL43#_#vl-^_FwA9`H@T5n
zmUliwEf2#2kev$|7ENBwEGt^g!>|}++!Bz?Qjp9thAETpGRtr*2Wecv&^VcqMU8nS
z!<@-lEFP2lS#%~BvB)w?Oy=X1*!+P-g=sPyhZCdv<cS=rQkqeW3_``Jc_{%!nPrJ3
zslKVj#fj;uj0~2OCvs>_uICh-e3fJ3<O!TIvMLO!42%qF42%K-pip68U|?ckV9;dH
zVqj#@o_vy1+FOT#fq{*Ik%56BhC!Esfk6zcf{Q_q!GHk-xWM`t85kK18H_->7#NsM
z8CV!t85kH-w6`%ZYi(g*+`+)IjG<<-K9^;^B#V&XHU^=Y3=+B^nJo;Q+Zcp(b~1=C
zGlVZ^5JwV}WYO8lAj$#~=CWduWZA|bzMSDc!bpi_3>I)BBz-qAa0^LoW8l?+iwW;!
zkY-{4aknwZEN9^G)7{2UFTR{%4#EuCWem<B1z=}L`hu7{805Aw@NZ)f@B^7Bk7}as
zP6h?ALlG|WLzt$xjKKk91WwbGwoTUM=BXFf-N~SgV$4Pc76t=`Du!AHF@^;U`xy=~
zh%tO*<Ywe!5M#7wjAV>q5My9w0L8^31`P%VhIj@(hC~KQh9m}6hGYf<hBO8Xh71OG
zhAf6ah8%`8h608vhBAg)hGK?#hEj$WhH{2>h6;wM3{?yZ7;5VoRxs2t>|m&8*w4_y
zaEPIi;V?rp!*PaIhEoh}3^y1$86GoqF??j`W%$X^$H>hvnURlS0;2%KBt}t&sf-c~
z(-_qlW-=Nw%wn`>n9JzSFpn{kVG&~t!ve-QhJ}pD3`@ZYrH_G+!JWaF!I;5>frX)-
zftA6O!Hj{0L6V_9o57sHgn@~{fFXpzg29r3nc*-43s{<&VF80WgB61{0~4bFT+3qy
zBZwHoM+OzJfy|6?Fj+=Wx`XJjhslD{9xR12rZCtr*fKCO*fB6LBs1{-W2jGKXRv2y
zaA0S!|HUBe#LnROlYx!tKZ6wmGdqJ5JA*Sjg9`&AJA>md1{S9O49*NJaA9@^d$0^d
o0}dGmW(HSqPI6;#XJBApVenvJV9;k^VBlh4WKaPKFfcFx0MgS14FCWD
diff --git a/out/production/infinitymonkeys/GUI/ChatScreen.class b/out/production/infinitymonkeys/GUI/ChatScreen.class
index 06a5c243a1629f3f56901427e2d48d9d35a013a3..7cd31eeec5f863b8a5cc3cde1938f47145ce075b 100644
GIT binary patch
delta 191
zcmbPWF~MTP9RWtQ$#(@h6m=L_7-AVj7<3sV8T1%b81xzR84MV#7z`O)8H^YL7>p;k
z33{=bGjK3iOuj1U#%MiRM#zTIesZLc4WrBCX+k!Po|7*NHB0(2NHX{{s4xUE=rDva
z=re>c7%+q~m@tG-&KGuLjbdP7h@QMl*oKjJa-oRmWF8T9D9aPdg2^0)@<k_!!j#xT
MS;CtuL}#!806}mn7XSbN
delta 191
zcmbPWF~MTP9RWs_$#(@h6tx&w7@`?O7_=EA8FUy_7<3u*8T1&e81xxj84MT#7z`)3
z33{=bGH@`MO};AV#%MWNM#zTIc5<YU4WrZKX+k!P?vpPIHB0(1NHX{`s4xUD=rDvZ
z=raT{7%&7gm@tG+&KGuLjbLD5h@8Aj*oKjNa-oRmWF8T9D9aPdg2^0)@<k_!!j#xT
MS;CtuL}#!8049Vf*8l(j
diff --git a/out/production/infinitymonkeys/GUI/PaintGUI$1.class b/out/production/infinitymonkeys/GUI/PaintGUI$1.class
index f5d4af48346e9a9fec9cf800407482e03e85513f..ed9d50a095c00699761f89c5073cf8fb378da4c4 100644
GIT binary patch
delta 339
zcmaE>_Ev2JGY{jE%`7}8Sn5|Y@G-1nkYHHHAj7bU!Hi)CgC)Zj1}lbb49*O@7<?J_
zF~l((WXNMU#8AX=grT0{C_@*+35J;rXBd_+TwvJ8aE;+0!zG5p3|AP=Fx+6c$#9F|
z9>YC`9}G_zelt8^_{;E!k&WRgqX5GzMn#6#jK&Oa7|j{pGCDE5WAtVC#28o4@QpE>
z;X7j)!%xOmhChs*41XDCF#Ka&#_*qUD<cEr0Y+BFi;V1yHyJq@?=o^RzG38M{Kd$_
z#L39ZB*G}fq{=AFWX~wZ<jW||6vZgXl))&)RLUsB)XXT$G=Wi`X&$2j(`rT~rk#w+
zOve~inXWLZF+F6|V0zD}&GeH|huNN;QI}biQJ=Yk(U5sEqY?8oMib^mjHb*>8O@nD
sGFmeqVzgntz-Y(f!sx&f!05;l%;?M#&*;LE#OTJ7$LO`0Qz(TI00_}n761SM
delta 339
zcmaE>_Ev2JGY{j^%`7}8Sn5|X@G-1rkYHHPAj7bk!Hi)igC)aO1}lc`49*O@8GIS`
zGsH0*V#s4S%uvK|l%byC7(*AsNrssWXBn0-Tx8hCaGl{G!)1oU3|AS>Fx+Ig$#9$D
z9>aZx9}G_!elt8|_{;E^k&WRQqX5HeMn#4<jK&Oa8O<5qF*-54XY^(G%otbC@SQQ6
z;Rj<G!!O2GhQExR4F4EsF#Km+#>l|9m64J003#dYMMe(Bn~YqHcNw`E-!Sqp{$k{1
z;$-Aw5@8f(Qe_ljvS$=$@@14@iei*v%3zdcDrJ;qYG#yUn!u>QG>=h{X*HuV(@sVe
zreln1Ojj7ynI1A~GQDTiVfx9a%WTiisK+eIXu#aTXv933(U^G}qbc(uMl<H6j26rr
s8Eu#kG1@X;V6<m(VRU2(V02;$W^`eRXLMyrVsvN8WAxt4DU`wp0Fzl(XaE2J
diff --git a/out/production/infinitymonkeys/GUI/PaintGUI$2.class b/out/production/infinitymonkeys/GUI/PaintGUI$2.class
new file mode 100644
index 0000000000000000000000000000000000000000..0d2c447f0f784d4a5701e22843ffa52ac06ac7a0
GIT binary patch
literal 725
zcmX^0Z`VEs1_l!bWljbb1}QEERt9M<21y1Pb_Q8?203;Hc}51dl8nq^6$3^FJ|Fi`
zPyK+z%)Ao!P)}<{1~!|_yv!0iMg~C*R4L6cMg|t={FGEi27aH+yi~u^+@#c^ki?{%
zR7M6NpZw&+oUp{AOb{O`$O5v2k%7lEFE6#oIVZ8WIJKCOK>)>A6(eg#2JW={<kDjI
z#LT?Z6h;O)4WF#UvPAvF@)G^jvedj1eK(M_D~M?gas^{5BZD*^HH-|LU;};fi%S?8
zxPtRbi;`2_GC}U-h51wuWCbGwziVD{PJVG_Ub=5;Nk)DOJA(ob13Lo;4+AHIA`gQS
z0~aF$A94t(7%?&kfb{C;B<7{-`zK|kCYLZW$bf~=T<nusT#}lXTExh}gKPvN1G5Im
z8(fLW$*IM~DuxCI3<?Y^46F={3~UUH0s<fhFfcGMGcYi4GH@|4GH^36FxW9LF)%SO
zFmP#UZ)ITA+RnhVk%57MiGhcK0i=t8fzg+Nmw|yn45EsGk3oO|1h~MaF)}bR2r>vk
z&2nI11gqlE+QPuNgMk@g5*J9EF@S-cF%Zc#4!CI?48jZ|3?S1)i8d{ift@i7uW8H-
fVqm|BGe|HnFt9L4GB7akgZ#?C$iM>f1Oo#AfP;he
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/PaintGUI.class b/out/production/infinitymonkeys/GUI/PaintGUI.class
index f6a84a03a8db02755123f33ad98d85cf2eaa4e2f..9e1daa0e0194580068b687a905ec782fc984dd97 100644
GIT binary patch
delta 550
zcmZ2&v)X1up*UyIHipb_tt|{PldHtl8GR-%5?@lU%fP}Q&S1zO!QjCl$q>(=#E{CM
z%#g#N%23Xr#?Zu|&d|%C!7zhClVLG~7Q;G*B@DY5eHo51=rf#VFk-mQV8-y2!JOeU
zgEhlX1{+2O23tmH20KP`27AU}1_#D`21mwj1}Dbl49<*)8C)3eGq^H7WpHDB!{E;N
znZbkcS3QF#6C;Bc69<Dg6F-9wlNf_9lNN&?lPQBglP5y}QwT#KQwBp2Q!zs@Q#(Tl
z(<FvarezFaOdA=(nT|3<FkN7XWO~97#q^#bnwgm)hMA8co>`C~mRX1)j#-Q$ky(`?
ziCK>!nc0#dh1r84l{t_hjX8!Pi#d}ao4JS~hq=C%A&<F>A)k2?Ljm(#h9c&L45iHL
z7|NJ;GL$nPW2j)h$WY0AkD-eBB||myH-;J(Muu7zK889LNrpxiRfZ-OLxyG+TZR@E
zPli^OP=+>^M22>jT!s#oN`_9BR)%hti3~j~a~XPBRx<RlY-O0pa*$yX%UOoWEH@dZ
zusmg$F2eGOVFt^8hMBB946|4z7-qAoGR)b0T~e5lasK4jQZ|f>Hfu<GF#1L_a5Kg*
z$T7w;7&68&STe>lI5H+Mcrqq3gfb>EL^38bBr&EiWHY8Q)H0?s^e|>HEMv@MILw&M
vaEvjR;VNSu!+XYjMjpmOMt;W9$$Mqy^Hwu(FxD^#GuAQ4FxF4blsyChQk8yS
delta 550
zcmZ2&v)X1up*W|{Hipb_tt|}FldHtl8G|M-5?@lU$H2lM&S1zO!QjCl$q>(=%#g~U
z!jQwD#!$|n&d|i5!O+W~$uNUKi(xT?Hp4oGr3||m{TPlh7%-e>FlM;UV9xNA!Ghs4
zgAKz^23tl320KP+275+x1_#Dq21mwx1}DaD24}|Q3@(g^8C)6fGq^E6WpHPF!{EXA
znZc9sS3QFl6C;B+69<D26F-A5lNf^^lNN(NlPN<0lP5zUQwT#4QwBpYQ!zsbQ#(T_
z(<Fv4rezG_OdA;@n2s_;GF@PZVtT?5&GeojhMAcmmYI(sfmx6tj#-Eyo>`0`iCL8)
znOTn^h1rrJmDz(KjX97ZojHafn>mvqhq;I$m$|-{A)mR6p@4Z3Lm~5AhGOQ03}wvg
z7|NM<GE^`hW2j`l$WX<6kD;3RB|{DKH-=gkMus{TK8AW0NromCRfc93LxvU>TZUE^
zPlh&@P=<DvM1~HQT!v1TN`@|$R)!vyi446ga~b+rRx<RnY-O0la*$y%%UOmgEH@dZ
zvOHy&A;R*BVJ6FehFPpU46|7!80N65GR)n4T~e5lalz!*QZ|f>H)}|HF#5(Ya5Kg-
z$T7w-7&68)STZIsI5H+Ocrqq2gfb>GL^7r@Br&EkWHY8S)G}r;^e|>JEMv@KILw&C
vaEvjJ;VNT3!+XX8Mjpl@Mt;V!$$Mqy^VTqMFxD~%GuAW6Fg8rilsyCh&We89
diff --git a/out/production/infinitymonkeys/GUI/SerializableImage.class b/out/production/infinitymonkeys/GUI/SerializableImage.class
new file mode 100644
index 0000000000000000000000000000000000000000..73e8a67362f2a5e6c1cae04fb683b5738fb83ddc
GIT binary patch
literal 2210
zcmX^0Z`VEs1_l#`P%Z{01}k<3Yfc7k1{)B^7DU)_G1xOWa4<M>F*q?eb1}FuxPn-2
z><sSg3?7UOteLrq>8Xqiaz0s!Wr_NU<t6%H5q+o9w6xTs)D%yUyfq^On@wh3W{Djm
z1Dl4Yr>ABZBLj<beo87M1HVsZUaDVdZc=JdNMce>DkFoCPkwS@PFP}5CWsFeWGTtW
zEM{a7_i+#P)DKQA%1q43tOCiyEMP6qOex7=WMK4UWMIok%}mcIVPxP0J0_&EAeE7U
zBR#bQteBBOK|_;}dpU~XsueZxD+YN+4dg3yWuAE{sTI!oIr&At`6;P6)*yvU$+?US
z3WQWLG6Z8-iewPF_VA+25>QwKB^H;Y7FkC@<V#C3bM!qDi!;D-VB4i3GKgqGGL(^l
ztq822kwG3^8JY!*45FFE5X%CJQgcglN-_&_GE-9+85pA&8Mq3H@(WUnN-|T685u+&
zMxnWdkwFYKk}C^Rp%E>KO@ob=mYp>t17~n%dR}5lX;CU8LpZeq2y6!^inz;*GD}kZ
zld@8iOBfmCq4s3v>qCV6OG^q$OM**^QWJB*fy$N-7GY$NfjAwzN=61Q*NWuSf|AVq
zykd3+Peul=qSV9`h?$HGa_H80=Aqicnh6qMWPnB?+!ADU><nIv3|ztarA5i9ZkeFG
zB!-by^gtPvhk>6#fRRB4#Kx6rc^G&Z_&^HfK!hSYgEtR@4}&iw19L%MIy-|O4}(8L
z06Rk<4?_@xFAqa7LkJ^-DAwG`$RGl?C^H`==Q1(~!-PHk;bFtbpa2%lNz6;vcg{&H
zF80eWamz2wOF>d11y%wN1LP=SWDrV8O-n4zDFG!~cr-F=fTC6uq^|-}L}ljdgNp-C
ze?|sYaFjDLctT?VkwJn|^HLDy7$kzhP75w6%FIi*hKPV%0!{?5WD&*4APKTdA0z`#
zNl5X;$RG%HVh~aaU;!luMg~);6F|-b#W>7Fh(!p8p%$<ViVWNgObm<+JPeEs4WO7~
zU|?WpU<Ac810#bV0|P@E0~-Si0|SGYmb8rQb_PbR-3&~T5aw0}=8X&t3``6{3=9l>
z49pA+3<3=741x@z3_=XT3=9lf5S<Jn45ADmAjTlZAkM%DGL1okL7agJ%#vgfXJBSv
zWRPNzhT5smzz9~ws<nlIc>~-EHn5;5*l3W085mfhMl&+VFvvnR+c7YK4QA8QMsXmh
zUSeR7WME~G0-GQPQ3W-Dfq@O|eUQcc402Gj5*Sz+SQ!`?xImtlWZBNZg77fJJXr=#
z205^KCJ>cy^SI!i<$`;bivi+U1_mw$c?Jar7I082GBAOIx(IHYwvH^wHdc^r%;4aK
z*rv$9$)JS8HhBgmaQJXBC^M*l{l>+h%Af|07A^*L1`P%l22BPAa8!frR|iLrHaK*3
z7#JCJ8T6p;@L^yE>le`8#=r)O0wH$o9Sj`dAlD#Awi*KqgE|90g9g||knj|M`(J=T
zpTU5Ek-?CG0qjpB21W*B1{0_qp3qq0)!xRysinPxfeR(FAgM{4frUYbfrmjC$pT)u
b1-uNV3}#RZ*cg}?j2O%r7#S?U9<l@gcUAS6
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/StartScreen$1.class b/out/production/infinitymonkeys/GUI/StartScreen$1.class
index fe1bdfe2ee23af168c4895971736d4752ea4eeef..452a3a46496c70057710ae0651db1f3729abf4a9 100644
GIT binary patch
delta 123
zcmZn`=oQ#d$s}RvQd*FcnVeXXs!&>-T9lWVo9dRCnv*iQhe?(d%-Xz?X(2PC>SS-W
z2aXyHd<<F)k__4mDhxUd<_vla?hFPDz6?eT5e&u*Nem_o`3z<Zr3@AfwG37a%?vgS
Y-3)dN6B!&BW-_=i%wuq$oWnjH08`o?F#rGn
delta 112
zcmeAbXcpK|$t0}rQd*FcnVeXXs!&>-T9lWVn>u+SlkDcrObeMA6(@(XJ#bWE;A2o@
zkYrG2P+`zuFlW$WaA(kA@MX|rh+xoXNMbNx$Y(HOC}l8VsAVu?XlAfr=w`5Dn8;wm
QFq6T7VIG6?<TCc@0EMO+FaQ7m
diff --git a/out/production/infinitymonkeys/GUI/StartScreen.class b/out/production/infinitymonkeys/GUI/StartScreen.class
index e302c80611c6c4e33c9c8274b874942a80ef7d35..7d098dec40b1bff29ef28d6664e94fb4ac85d34c 100644
GIT binary patch
delta 495
zcmZqF{;4(LAs=sPacWUsVs5HiW@=8##5Ybn+{LLyWvNAA{$@+YJDlF$0XeCO#i<Gf
zMfqi!DX9vT`K3h)FntP%c_|77iN(d``9&!@3W>!E<*7M2AR1zhda;6MfI>;WLUBoA
zQOV?N?oTqDp-?-mI2hhAGH?b!bz5;TyqlcOBQO1di{T@KA0q=-acYTkeokp_UNH~D
zXNCeUhL@YS@T_3um1baJP+<^ZkYSKyke!^#=f&#Fz`@`@c?Vy=YA^#gLkNQeLnwnX
zLl}cLLpXyGLj;2rLnMO-LllEQLo7o$L)_#Xej7&K$q53YllSqfLs`G!EDHgMm<=QE
z=D7mmOjhe7w=-<8;*#W)<l4<JIg*)`g@u`wMSzWwk#Rf2>}?G5cQb5?+|IDsid&Lf
z==nB=W0IVb+#r>#lTQmtN%3e&@@!>bk>nA&yN%(sB&Q?~NREw}g>`bHu=HeGVR2?=
z7M989gv2N32@5bo#hoBV@=Njyy@wdd57NfW#=;`N!OYBzWckO)?F^r+1hgatwlXkD
Y3J8d7WB4k`DJd|yQdn{Gf8i!Z0Qe`2GXMYp
delta 465
zcmeyV)u=t;Avae^YDI}#W@=7~;l%e&NL-`Mwv2Z;dBVa|bCUCOQx!_`6(-kniJ9mr
z1mvV97N;r{6y=v?rlcwqrxul^7O592cn0VwloqEJ<t65(>L?`Ur6?3678jT27o|*2
z;r=AZ6`5aJqyUn%;$V2g$RIU2j!{a7o#7o9!+QolMh33p)Dq|XoYLI9VjhN%3<X>a
zFBv{DGH?b!4YA_byoP55Bd<6E3xfiK2!jNJB!lGSL_RN8PX-PK@5vkZ`c?fIxETT%
zBp3o2lo^5;v>AdKj2J=~tQbNWJQ%_l{29U-!Wkkar|{b_a!y_dB}FHH=2r*vMJF2w
zz*xCZmhk2k0xV2Yn<BR}Y_{T(<Pv(mjp3LirzF>IhRKo4%q*;v{e{JaxV0p?w=%Fu
zatqzv#_(E_Q<8gfp|CRd`pE4J8?1OFIVE`}Zx@oAY%MIv$TrzmSab4iVHu^}4DTbi
zGkmb(*OKJl%D^PaFCemw;j<*CBtOV(Hjvr(ge8@CGe9gCkQ5O53b9-Oq=1!~g++ja
OnVFf9aq|b^PDTK=5rHHC
diff --git a/out/production/infinitymonkeys/GUI/icon/circle.png b/out/production/infinitymonkeys/GUI/icon/circle.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c23e5a725c3b9d87d0765641e401184be837d24
GIT binary patch
literal 1947
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
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/eraser.png b/out/production/infinitymonkeys/GUI/icon/eraser.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5d98df4ca4a1a677baaf83a00fbc903f814119c
GIT binary patch
literal 2627
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
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/freehand.png b/out/production/infinitymonkeys/GUI/icon/freehand.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d162ecd975889c2ff84b0b3e456a4d4115eb82f
GIT binary patch
literal 2087
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
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/line.png b/out/production/infinitymonkeys/GUI/icon/line.png
new file mode 100644
index 0000000000000000000000000000000000000000..31156130a58ec6c455be88f00e470329cba61afd
GIT binary patch
literal 3344
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
JF6*2Ung9`Hq(lG!
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/oval.png b/out/production/infinitymonkeys/GUI/icon/oval.png
new file mode 100644
index 0000000000000000000000000000000000000000..665c0a0c7c3b1eaa4ba51e6baa6c150f651f8b5f
GIT binary patch
literal 1581
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U}#B=
z@J#ddWzb?^VBlb2WfWpy1}R}+WME*FVqgWc85q16rQz%#Mh&PMCI*J~Oa>OHnkWVc
zm<HuTXyyfsP}PhK3=5dxsudP6BiJB~_b!M?GB7Z37I;J!Gcbq?fiPqG{7XR$42+SP
zArU1JzCKpT`MG+DDfvmMdKI|^AYBYL6;>6w1-Ypui3%0DIeEoa6}C!X6;^r0Rv=-0
zB?YjOl5AV02;Tq&=lr5n1yel}Jp&~>E(HYzo1&C7s~{IQsP>|iG+U*Nl9B=|ef{$C
za=mh6z5JqdeM3u2OML?)eIp~?qLeh<;>x^|#0uTKVr7USFmqf|i<65o3raHc^Atel
zCMM;Vme?vOfh<yh0f;+GGSd(?<rPD{m7Jfe50cS0)HBeBn+-A^Bx>bfl$n}Wk_a;2
z&d>&|5=9JZkBvUaawNw<d<qr~a&fccve5^J2`GH*xO@(&M=~%l-}Q8H42j@;8|Ir4
z6Dnf&{NC@hWoP|46S;b0Ij#j<7VBDAa-A>hy3!}57t0n%#Cj}L*r7RBFQ(+?{E#b4
zwPiyt^e%N;mUrc7gGg|$*I!N3iG0_lc~1VGc5nCf_jjgCrr%=O)KPd*rs(s%JJogj
zs^3}OuXUNdX=bClE%TmZECy3g%be>e+*>DV*1pov>UOfVf%U5nz2L1D&oa)3ve)i*
zyT5v+rQXz2X@9<cXU_P-5`A`2`Mr%dy7-m0ulnoEo%o}3T5Q<rr%P@>d?$X6KmX*+
zx#un>Ke<zO+GNF?)7^ckeS%NsZ7Z2A`&V%FowYMhWtZ=I>%BBHSofN2sM@7>KlK<k
zJr3R_TXFxic$>w;^c$B1-~4CjnU@fDJK}lA)I;a>g5O`9xOrO4EtY*>^n~v>ochjC
z=4ovkyV~cTu<1#UtyMw_45E+rrcA!s_q{#%x9rN~i0U}@=(Y~YK4FVv1z|k}+fE$b
z#9TP3bBW}shT}@N9`G)I9<*ug3w@VgGLhEBPam7ti`1ShVZHg`xz6r;!hT<+gPupc
zTzu-uQIE2w<PRRVqs0!$m57xb{m-<?c8Nfvo20179{=pO?X`PK-rPR*QT67I@^2*;
zTeVefb3fHuPp)w6c{0bOjU|r%<qwmebyJV@#`C@u>U*jtU-R@$!WEvnOOA;uxvm;&
zpIW!d1%`hVe3-$Vnf-G6S`(XPk8aE{_{qpAm+Me)Q01WVk(!!`@AfQ~`MB9^V(;WH
zzui0&E=#mN>eHAqMdZwXg^Uo9)mzTEuB`INW)9pU@`HtAUy#}T3h~gNyG7WF8aJQd
zcx2C{e6z14FPrhM+3Xz;FTXnFo`2u{zr0i8pCqoo9<BC*C)>81tLpsG<gd0RQ88EV
zUyg&L@zl;`LPitn_UykP<^8zzdy84gI(-I3PIeA?4vES`C!;n!F1=OzKKJPKA4i^9
zbc&thyITH!b*-7De$I=|6~5gZPSx?Vs!m0G75nsIkx}bggL5k)Uffs~WTAO&lfB`K
z4t=f8bw}BrJa4~HG0UaCX^HlnRmJu-zmAm}W*+~-U?jhH`ow_Z1HS}b{I_(m<(R8(
z*mdfGQPPAZ7xo?as8n$w<j`-=;IzEtnB$+yci8XaQ~K=t_Vh{D$Pe3-wqB{0Jn7^<
zVcN%q`$OM0dwRyZw-|~q{==bdeJG{-!FR_aU*0n77%Dv27F^meqx<onJ6rYRa!YzX
zD&1$>I`QY1gZxv!iR~(#et&b1iCg&xuQqLoFMd-`XVv7j%gvZue)oF*`b+yQYYOUG
z@9)Sv%qbe=aWj493YoZTyWh-rt?3K>^ZbUVN{TM)?wox;Z=5-xJh!o)K~rt9%*I5a
Q=b%E<)78&qol`;+0DYl@fB*mh
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/palette.png b/out/production/infinitymonkeys/GUI/icon/palette.png
new file mode 100644
index 0000000000000000000000000000000000000000..813d7ffbe98d40089591256979bd1f21514abdc9
GIT binary patch
literal 3394
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
LtDnm{r-UW|jqJc(
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/rectangle.png b/out/production/infinitymonkeys/GUI/icon/rectangle.png
new file mode 100644
index 0000000000000000000000000000000000000000..94d8278acf49ff157270cc81e0967334936611ec
GIT binary patch
literal 927
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U}#B=
z@J#ddWzb?^VBlb2WfWpy1}R}+WME*FVqgWc85q16rQz%#Mh&PMCI*J~Oa>OHnkWVc
zm<HuTXyyfsP}PhK3=5dxsudP6BiJB~_b!M?GB7Z37I;J!Gcbq?fiPqG{7XR$42+SP
zArU1JzCKpT`MG+DDfvmMdKI|^AYBYL6;>6w1-Ypui3%0DIeEoa6}C!X6;^r0Rv=-0
zB?YjOl5AV02;Tq&=lr5n1yel}Jp&~>E(HYzo1&C7s~{IQsP>|iG+U*Nl9B=|ef{$C
za=mh6z5JqdeM3u2OML?)eIp~?qLeh<;>x^|#0uTKVr7USFmqf|i<65o3raHc^Atel
zCMM;Vme?vOfh<yh0f;+GGSd(?<rPD{m7Jfe50cS0)HBeBn+-A^Bx>bfl$n}Wk_a;2
z&d>&|5=9JZkBvUaawNw<d<qr~a&fccve5^J2`GH*xO@(&M=~%l`g^)KhD30_4fXar
zY#=aq<6JFPMU_=LHx?^xe8{!e<z_M0wmD3NY<UMwl{TgYnsNttPq|{;^Eor1X;b&^
zjpE-bj(wZG=SDt*6E_bFo8K9Rb=UK&HhT&@xLd8|S#<oK<L`!w{~vy_9P##4bx&yR
zn4Ip))WTw@;lpcSf9~A+yxgD64XfrqP$@pjVl~To<NalBb#-CS;t!OZV7zgqqmOmk
z1e4?LxuKU=Nq-LASXOV$SCepZ+D4f<lAV%Ew|FZEwZ99Hx?;B@+TfY>u_)(b*WU27
znlAfxxbk}_v$l$W1P70Wtc5}3a`UA&;Zl1hbILTOvIbk{1UkjIeD>aO)XvR6=#0<A
zd2<~%o)+`#itoDnjcsPJ;Qe2IJDQI4iu4<PxW8-LjGce$AFtI_7TSDeUW9@DvA*v@
zhp)c6S);$cKkF^)R>qwk_D`i+#3VR)=FDh}cWbWM!JfLj5R^<kUHx3vIVCg!05ZBG
A`Tzg`
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/square.png b/out/production/infinitymonkeys/GUI/icon/square.png
new file mode 100644
index 0000000000000000000000000000000000000000..38657f5a2779b68ecab7d083e8c112b879bf77bc
GIT binary patch
literal 695
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Ea{HEjtmSN`?>!lvVtU&
zJ%W507^>757#dm_7=AG@Ff_biU???UV0e|lz+g3lfkC`r&aOZk1_p+f)CkWsUtb0-
z1_lNW23AHP24)5Z21W)(1_nkc29Rlt3=9ljjM8v+5TgcE4HE-HdnN-5SUm$n6axfI
zgYqFX^8!YwYDNZz1x#?&3JaJKY>>u#7epi(7#KJUJR*x37{rA@m@$3+r62|d#>mW&
zh>{3jAFJg2T)o7U{G?R9irfN_E(V(ltBTx$+|-gpg^Jvqyke^gTP3gxtGr?>kg&dz
z0$52&wyjcxZ-9bxeo?A|sh)|Rfs!4Uf`WogQA(Oskc%5sdr?Z7tx`rwNr9EVetCJh
zUb(Seeo?x<p{1pzzJZaxk&$juN}6tQWnM{Qg>GK4GQ<#=IWDQi$wiq3C7Jno3LtY6
zlk!VTY?YKi7Ae30#GNIXX$YJ0ilN?0&d=2c$><yE8R)~!1{n_$wel~@OwB7v1etGV
zXaiP>A_ld`MjvE3l4Bq~1&ao`xY=>p=!3%q6h3xbK8MsJ85kHWJY5_^A~@e(aO7n$
z;9zm=QoOQYZIO47aLqHGH>rMKYd7wQ$@#y9nT10@!J&bHkqN>$!0_oZQ<Pw@?<7!s
Nc)I$ztaD0e0sx{~sN?_u
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/GUI/icon/text.png b/out/production/infinitymonkeys/GUI/icon/text.png
new file mode 100644
index 0000000000000000000000000000000000000000..33af1a2708cee9b502580ce4b6380c3a1d8740c8
GIT binary patch
literal 2146
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
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/client/ChatUpdate.class b/out/production/infinitymonkeys/client/ChatUpdate.class
index bc8354438e73505c3b27ae6f6e02e6fdfd4c4a2d..a744ba30c58b4856957d67ba89872ac0f378c60c 100644
GIT binary patch
delta 1255
zcmdnWyIi3D)W2Q(7#J8#7_zt+L>Wvt8AKRNxfskC%()mW7%aIMtQf4>8Em*1*cePW
z7;Hhb9S4Iw2ZIBM>Bzz01XAqG#o)r=%EjQu;LgS1!Qjck;Kjk<&CcM%&fv?=;K$D3
z&&a@*oRgWFSHj4^?*n1!JLhDkPAsSv3}9s7%F8dwOsjOxNGxGwFr4^DLbO6Zxu~+B
zBws%`H8CeO#Xl)4HMwN60;72(Z*FRFabkKZM1qk)+9xZqED@`EYeojn%;JEe%(BFi
zR7M8IC`JZ$sBT6E-r$nN<ZR!>f{?_doK$v(z{yRFaSBolK|Bl+43g{&!8{Bh4591{
zVLS}s3=!-Mkvt4h4AGNcFzTAbFvK!4Fl$;VFfuT5@i4?O#4|E5St;-^BrqhhGbHga
zBr~M2Go<n`q%owkGi2~E#4uz|_F+0x&x_=BP*@13r<S<pfqj~ppBGw?0(Pggh9)eG
z&?T)I8N{Jxpi40_2&Jc%1ZN}`rKSX@CKsiac&An}GDvA?!UL!t8lq51YeojqqSV~{
zl2m=DVJ@j)w=gpBra)N1B}JKe>5L5S8gN6PW*}n48eIxzJj7!CoW#6zeXv1H>DH6Q
zm}4h5GvARHVGw0tVi02xXJBMt0);pO0|N^KBZCx!Gy@ZZ%;Y*2>3UfP1_nL`W(EcZ
zK?W8EAqGwcVFoz{1_m((CI$uuE(Uo91qKk{0_$gFP=uPH#K6d)%%B1?hk=3N4+9ee
z8v_GFo{rWQ2BvKc%-a}Pb}+D7vB=J3(Av$w7P*~)U5H~F1E=;j22LTaZ48`}EFczl
z{Wb>9Z45kCtjigcpz6R%co9lqDj+8FZDZiy#vmZcx{X1QWeo!Z12Y523sPX~B^U%4
zq!~mQWErd(6d9rzR2Xs?G{D~RU|?skU|?oYWl&>a1vwPzv3drEJO*_JH3mkopaz2`
z*xz{!S`69@%nSkyaSS>PY78t4Q4Atb&AQ+aWBLQiwR(RT<k%VXP(nqY!2lX6u?);$
z(^OHMj_ge#sQ+P}VFG)G3#?0*L771h?086As6w60z@Q3sF>+iOl3=SaBuGJ)x`Kib
V*;Zo)Wd;+XZ8c(GU|?b}1^{tF^N0Wd
delta 879
zcmZ23u$4FB)W2Q(7#J8#7$UeBgc$TW83Y*&*clAD7?>IKIT(yUv@r*R2?v8Ih-t>b
zV9v#0!C=Y7V8vj~#bCo=%f(>FV9&wez`@|i&fvt(;LOh8!p`72F@3VB8zTc(UVcet
zTBUPFVhJOIhK5g8Vp*boPGVlVesD=qW?s5AhR9?KMsscU+|=UY#Pn1~2F}dlfTGN@
z#FA7-2F55x2HxP3#N=$>#Db8-q?}ZC2KUJ)7~?p^89aCxL>a^;yD{mSdop-2GB9ge
zDKIiHa`7;DGx#tvFj*<EGx+i__%ZmiGX(H31TqA%GX(Q6gfN7%GlcOlcrt`fUe0u8
zaw$tRA8&F_W@=uEzB8Dbe2(RwydZ-R0~3QVg9rm70~5$11_lNe21W*P1_=fx2Fb~%
zS*7cx7#JA%7?>Ft82A}j7z7wVK`G6^z#zuJ#K6G7#UR5V%K!pgVEv2?a!@nm85kK9
z7!*O~FfcG&XJBGrWnf^4k)6q)xtoDGaytWy5bHJuHtlT;Y(nhY7}#_`432FKY}*((
ztyq>bC_+@#vw&4_VW`mB!oakRfqNSR&o%~LNtSI4d@O4i7#NrtKn@lITPDH4!XU+<
z#URJv!Jx<x#h}Una=0A>8-qFnGlLR?G6M_9NpLU3FsLvnGcbb1R2h`P9;}aHPy;LX
zU=V?7(O_U;;ACLZ`okd0&Y+3nVJ!x2sE1=2n8Es0QQQgf6U0mW5Wm74&IEQi7g&=P
zgEE6Q*s)^uU;$OQ8&#ohL=I*h5^NQ~ZL0x;GJ_$+R)nPrptxngW~(j(0|OI-9sokA
Bd{h7c
diff --git a/out/production/infinitymonkeys/client/Client.class b/out/production/infinitymonkeys/client/Client.class
index bf033c3cb50b8da487fb65398b83ca061464bd9e..3fea35a422c078262d9c24d5adbae30bd6d438f6 100644
GIT binary patch
literal 5234
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
RjE?LK?F@_z6T$VsBmk`s9y<U4
delta 2329
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
diff --git a/out/production/infinitymonkeys/client/EncryptionUpdate.class b/out/production/infinitymonkeys/client/EncryptionUpdate.class
new file mode 100644
index 0000000000000000000000000000000000000000..d1cd42f871ec50b9e0a09577dd32bd5e9bfc8527
GIT binary patch
literal 3129
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
a85r3a!azhg3qu4nB}XzaGDLxsZ8QL6CpR|$
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/remote/EncryptDecrypt.class b/out/production/infinitymonkeys/remote/EncryptDecrypt.class
new file mode 100644
index 0000000000000000000000000000000000000000..73e4cf555753915b87f069370969029081c95c1d
GIT binary patch
literal 2466
zcmX^0Z`VEs1_l#`BrXOi23HOSHx34OE(TTx4|WDm5bedqAkN^;&fvq&;LF9p$>7J%
z;LpXt4Wa|M7<fT+AQuBahz{an5CqY|Tnxe>I)sZs6hw!Dj0j_A2xn)AU}Rvk$;`_v
zv14Rl*3b-NWMFa5Pf2BD;P=VQOZ6+wO-d~aNleN~Wn>WY$xlwq2}>->1o5GQEF~G4
z#f%K%K1Hdy`6a3Pu6fBtl?5d(sbI>Qk%2b_!VE4c%FIh=WN_E;$x19stk4H5$kz`}
zP0UG6@lVQ1O)jxUmr5>5E%8pRwAKVm=;tKnrRzfsvSwspOl4$%7^YvGnp|3xSyHL*
zmmgf3oZ*<0o?nz%l9B6Lk(^pkl9``p&B&k%HUn-iL}fr?N=jy4I<h)tusVd1o_S@7
zIhiTmsg=m8L?Nm&^YuObk;Neng4^PmlardBnB$a_pPU_>S(S>cR0(VZT&YuH3KrKu
z6hVCMoRe5w?3Z8SmS38ef@~5`F;XBhGDxEuj1t0(49wZ7m5dA$=xSg=&B(x?m!AjG
z0|{zS%!8r~;s}VCH6sICa%MqBY7rv?Bq-qia0Uy5Vm`PeF*(~eu>hP@*cn3E86v^S
z){~vVmz}|%ogsjoA&{LRh@Byrogsvgfj1SBcpz55lM0HxxSS11A#g`P+z(Avj0|kW
z(A38joL^d$oa&YdO3=cniB%8eNgf7i1{p>M21W*EN7rB;hA4(;Mh0P!4BTvp2YDD`
z7-D%C;uzu?83aJ`$j)SBPy-7QOqV<i2_Wl~L8{>vU{9Ki42mFCcoQbnsrsnN66zYb
z`8X3LBZC6S3b;ZnNfN3A;#uqol953Y#T4YY00nO%BZDZ`(gGzQA#umZAckfZG@UXs
zaHpr1c;*$CB<3ZjGBRjFG9JWTkOTxRHQ>I1#G5rE0}H6UV`LE5@C2tOM2LcmnlMHN
z&h*q0nEg<L(M^G*H;8o*rPhoL`~^jsc_rXvA5xSEa+V&{S(%`Mt|&7xC$kDvc%l__
zP?u?jF(@)fGDtCi05bz4C@C^9GRQJ8Fz7QdGB7eQFtBQEXJFjOz`(%7AjiPKzy=oN
zV322EVBi6>Ss4@<6d4#8I2n`}lp&fKk25ecure?(BndJ3GWrQI?_gl@(`D7(#=xef
zyN!YU00W2bat1dm7D<+E3|z|@Y#=P2<qSp;7T<CP4G2qMIfER8CA6GD1i}(o&cFp>
ziRo-$U}s=ukYbQ!-~`j^4BTMakbxIWTQl&3X;%h8FzwGE45lL)L>ZXDKFVW|W?*38
zW?*LEVPIw8W8h}sXAoo%V31-^V31`HVvuJLW>8^JU{GfeVbEj{Wzb_#U@&A5V=!hA
zXRu&UV6bM8V6bJ7WN>0oU~pxSVsK}WX7FK9VDM*<VF+Z9We8(XV2EUpV~A#uXGmaB
z1czJ!12=;_11p0HgDL|HgC>}z#=yd03}&e_urSzySsDy14DMi-CIbsYAeg1az`_s>
zW@$69fWnwThd~z<e+)?sdf;edW{77nU@&B0Vqj&6WiVneW?*J8VPIe|WZ?MEAj`nQ
z&S1*UV8+g1&dy-Lz{t*E>B-Ju<;l)q?a9ty<H^oo>&ebw=gH1s&&I&X;K1MrjnsSw
z7I38cF(TrW1r(>d8N?&Cbhk4|_`)NQ3m$<ySRzmW9)Wy18yHv_SfCLIqCpV|q74}Y
z!Q!9@1o2%Nc%cy%#vsbTz@W;&!~hB?O$IIoEd~JwZ3Za@GX_}(9R_&@T?Q2fGX`}A
zJqAq%eFi-SGX_Hj0|sLTLk0^5GX`r0BL-UrV+JP%GX_@%69#t%QwARfb8y7OFmU3D
z7*HgjM-0df3=Dn@P7H?NNbrM30uzG|IAWL>SQxyJB0-aZ4H^mN;7Bk<iv&>MgCfBi
Ll+&ES`OXCZwpcvU
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/remote/IChatController.class b/out/production/infinitymonkeys/remote/IChatController.class
index 53c3ebdbeb067f1865fe93a3e90ce8ef69e59d0b..65f5e73be02f461363096a33f7b443074d226f8a 100644
GIT binary patch
delta 92
zcmcc5{E>NrhMs|jPgY`CqJB<dUb=p8Nl|8Ax;0p&LO;2vvY;eiKR7ipCpE=CDJwO(
UWTJ01lat28J1SCm)ck({05BUPsQ>@~
delta 26
icmey!e4lxO2BZ4KOR5vYs~9aOUecQQig&UQ<9z^(h6;56
diff --git a/out/production/infinitymonkeys/remote/IChatUpdate.class b/out/production/infinitymonkeys/remote/IChatUpdate.class
index f84138bb8bf132eae71b572e7f8c37323da8ae93..4d5e55a0f16af2b31b182c22f9cd4c5ee4831c3b 100644
GIT binary patch
delta 57
zcmey))WAGJRnJhvCo8cmQ9ma!FI_*lq$o2l-5M-Xp`Tn-Sx}O%ADo()lbYh6l$DxX
Jve8SI5dcgr6pR1>
delta 48
ocmZo*{?0T(RaHa7Co8cmQ9ma!FI_*lq$o2l-5Nt=W3VnG0GAgK-T(jq
diff --git a/out/production/infinitymonkeys/remote/IClientController$Action.class b/out/production/infinitymonkeys/remote/IClientController$Action.class
index 035ddf1381adff501a6e806d89ed427882488ad0..e5ca7f249d69d359e7b08d6ad7d11cceb09bb4e4 100644
GIT binary patch
delta 31
ncmdnVv6EwiB{L)EWGiNUM$XAu%yx{NlUFk5GICB9XHfzGfpiB@
delta 31
ncmdnVv6EwiB{L((WGiNUMvlo@%yx_%lUFk5GIC57XHfzGfjkFH
diff --git a/out/production/infinitymonkeys/remote/IClientController.class b/out/production/infinitymonkeys/remote/IClientController.class
index 66a2945a391c614034311d55d20b59612d99dfdf..b27c8d536a5a2887b0465983a8e4ca8f55dbee37 100644
GIT binary patch
delta 166
zcmaFHx`9pX)W2Q(7#J8#806U*q}Umx*%@Tm8DuAlwKK|1ocGdOPQxcFu`IDdKe?!~
zpd?>EI5jaRHN`(ED>b>qS~H4~fu}gNBse3nC^f}9wUUuRR>P+#H8;N`Ro~M!53DCM
zKQFW(C9x!R@+`*9j2x5wnCf&`7#YME#2FYFI2jliSQr=?xEPoiBp4VNm>47(*cccX
MxEL70;;asm0I~BY`v3p{
delta 78
zcmdnM_Ka2R)W2Q(7#J8#7-ZQQB-j}w*%_qR8KftQwKK|0ocEGRRAb^pvB}pN*D<nB
jZeyyGVqjtrV_;xlVi0FwV_;z5Vqj!oVPIrnb&v!A1||<~
diff --git a/out/production/infinitymonkeys/remote/IEncryptionUpdate.class b/out/production/infinitymonkeys/remote/IEncryptionUpdate.class
new file mode 100644
index 0000000000000000000000000000000000000000..4b96396bf97b41e9a276460afc7e300e72970fa7
GIT binary patch
literal 286
zcmX^0Z`VEs1_l!b0d@u+b_QN{20lgxw)E7JfYKyJ25AjVpRB~PME&B_<kF(dl1lx6
z(xjZsWbf2UYeohx*NWuSf|AVqykd3+entkK;?$DhjKreU6z|kZMg~@mXeZ4uMh33n
z{L-T2RJY8WR7M6dPuINUqDru?(1Mi2l2kpA1&j<5MX9;@C8_!t@{9}uAQk#KiFxVz
z{z+M>$t8>o{9vJ?+)Vu-ur@{p2{aM7+t?Tx7#Wxt7#Wxu7#NsX7#Ua?SQ!`@*cccX
ZSQr=?*jX4EI2bsQMHm<vxIk(dxB;8TMydb+
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/server/ChatController.class b/out/production/infinitymonkeys/server/ChatController.class
index 1df05bb664aee8674eb208da4de206b6df3bad0d..e19d9b5594db9e967727e2bac0ed0c6270892bc0 100644
GIT binary patch
literal 3493
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
delta 1411
zcmZ1~{a3X9)W2Q(7#J8#7&^EZq#5iv8Kf8-I2jxnoH!Vqxfom+Tsaxs7~HuSJQzH=
z8N3+0L4*%GgD)2Y7lR)+gFiz62SXr;4q|5r=3?Myum=$#91Ni#It*k)I7m8zgCP=R
zR1_COG(!x?yjXUIICc((cy@*ac80`>)253jF)|1w73C+UBqtV^_@)*YC#I(|GN?~p
z$)w7p88vwcqs3$<CMm|`$qGyzjFyvEGHFdNW94Ivnykny%gN};$iSagl%G4<kl8>$
zfgy#5L5@M5ogtNnA&nt@av`&ZUj`3DCPNlGLpBdX4nr<GLmm%9K0^UJLoyFTAwv-l
zLoq`MBLjDFYEfBgk$z}#Y7q}ZDMJ}MLpcva1w$nx1BafTo{PVqD;Ez#6@&3)ZWbBl
zYKEH0S}an$wG4GU4D}3IJPZvC#*+hC#DsVl8X20{8Jc+*S{Pb+7}^-xC#SP?PiAGE
zG?|^vZ1R7$pvkM*eHb-BzMHJZ(K~r6Ytdv|Hko<`MFuGbX$B?+83tJfMg}I3Hy9Wg
zSQ!`@6c`j4m>8587#Q3bm>8HC7#O&;wlgqlX>Vm<+Q`7bz{H@;z`(%Az|6qFz|X+K
zAi%)MAjqJ?z`!5|QO%&rpvC|KTwqff8PpjV7+4q>88jFe88jKR7?>F9LB_9VU}0co
zU|?|C#K0`XvW<aNYYPL@76!I$4D5coI~h0_8D=ub>+WRWWMnwNz-7fE$+C@sTU&>D
zCj$=)L-_Ll_dxo1w=uA?tYKhaU<Nx&ih&L65Do?j26YB022%!U1`7sR1_uUtuoJZy
zSQyk9_&gc38FUy}K$gQ@>%^eTpvS-n7Sm_YV_;%1U|?Y2W?=fmAk5BS_=`aW#Un-x
z#-L!D?8hxtkKf6@I@&uK_?S?fyorH%Hv@m<b_N0MZ481!LfaSww=oEBV-P{|ixL9|
z0|SE!0|$c!gF1s2gD!(MgDHa!g9U>gg9C#;LnMPC#7_YbPeJ{p%fQWG!e9!Hi)gs-
zqM^P6`H6>t=`VvY13QD^Pc%=Nk>)8;yq*%n?I|+`4hAa*bp{&-T?ShQQwBQ*3kC-U
z2L?xmNCsz!r|PNZDRTx3P)so}Fx+Qg0jG~RNJ<me*~TDY#scMNgE*|BEVCILL|JDu
z)LTQu*+f~kF-RU@-~uH+T^2~<gGsSsO0leAMkGf$26hGp22TcF1}_FF1|J3$20sRS
zh5&{rh9HI*hET9i?I2Eq$5b37raT!K7~&W#!3hz>0wqai2403h1}g?@1{MY>1{Ve!
Z25SaZa580QVEoGv!-$&KY{9wJ4gk3D&|v@o
diff --git a/out/production/infinitymonkeys/server/ClientController$1.class b/out/production/infinitymonkeys/server/ClientController$1.class
index c8e6540c375c8913bf66fe80fcd2be22f7a11857..ccfca4d98953d8741e0ccf2b74f217d3c7187770 100644
GIT binary patch
delta 13
Vcmeyt`h#`DMkdD1lQ%KB0RStq1)l%_
delta 13
Vcmeyt`h#`DMkdBBlQ%KB0RStv1)u-`
diff --git a/out/production/infinitymonkeys/server/ClientController.class b/out/production/infinitymonkeys/server/ClientController.class
index 00868b2be4b6151028813f3666fd941cc790deda..4ff0c55d55c0f62e98eb7734c280be3bf2593e7d 100644
GIT binary patch
literal 6754
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
delta 3265
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
b24)6ZP%;tVV5nrUW~g$IWZ1>921Ek@&qsQM
diff --git a/out/production/infinitymonkeys/server/MySharedKey.class b/out/production/infinitymonkeys/server/MySharedKey.class
new file mode 100644
index 0000000000000000000000000000000000000000..956b64e2acf75a75257e07e05c60b164dc4ab935
GIT binary patch
literal 2062
zcmX^0Z`VEs1_l#`YEA|@20JbWc?NqB%YmK2k%PgBi-Co~nUleV!Ig`_jlrFp!Gpn*
zi$RXT3#7)Ioxz8Tfrr7KgTWU>`+*355D@@U9SBk##K92E!4Sg5AkGlV&JYHo!$Cv@
zJ3}NFgA_v)J3}-VgA79qJ3}lxLmVT6L~34gQDs3%YD#cMVo_>JaB6Z<YKeDhB_jh<
zv=bwP08~CRKQFW(C9x!xkwMC*C^a{~Bvs$j6`~g|XU)jKUyN>ygilstSz?7g*qVHO
zxCPdX3_|ItB^cI9X=vis!Qz~slFG=y?~|FA>Q|bZlv)&$n3R*s$ROmCpPZNzmROVt
z;zI>lN-{Ew85u-;ic^cqQj7F`D<QUdr&d}sGO*cX=4F=HF*3+%;P#Pb7$XChYejNu
zK}lwQUNJjEJR<{pc~N2kIEZ95z)saKPE9T?$}FkW4=7E_$xH^BuL%l0#$-kYQLqxY
z|D7`nGE$4I85!7%Qj1G-N{kp87*k=Y^m7vP()HoiSu-;5B<EzN=9L7LCV?%K1RI9U
zK1K%K;F84TY~REJu<zL!A{iODg7Zs@l2hF>K|v&d<b6F*obWKHFsSk{=rSbmFeou7
zGcw47MBy$iE=WyAL|1S@YBD1Ov!iP;NJk<&LlO@|GD8YGLn;qL8bdleLk15+CPNkv
zgCT<v4}$`OA|r!1$T*0Xf=h}r^U|G4Gjmc>ix?S1A@QJ)om#1opQiwc9xEP(Y=#^V
zk;}u7$B+*)w}6MCkfDf?fjKDHk&%HdxHQkp*_DT(n4yG`K^SB_+_jK!<zXmgDC1!$
zXQ+V6L#&5~C=Wv=Lju&J5Gl``oYeHhoZyngl2jyRx(ro}3_=ixA*UNg1_6+@5WW6M
zS*gh-j0_TBp`zSO{UC78fSbd}z^nmELE;+GPLP-bM=&HbtU)qJrUh3Pm!#%0GBD?t
zmcSE4X1;zvQD$CAa7j^WVy-pJSE#~_4D1CUMLBtl45H8^3APC0K(Iv;xH2sx16z73
zD1k9DNJFz8_VmS;SWu9fm%_-Pi);nVFBsl~Mz%GYdYF^&sOKojhnUL9AOdp{*gFtW
zYcx+nMM0s-Qw%Fmz`2E0Biach%$=TE;+a=ml9-pA%E(}i#rYVnu|_L|Aj!*`k%0wN
zXfQH}Yj{HRz_UI$(}yuKuz*SjkOFM-phAHk99Q7X8d8)9a*+hGi$XGr^2<Smn6+jY
zgCc_*gFFKR12Y2?C{HmkFff6#DwtMbPzB2{GN>`AGcYn}FfcIaGcYnRGB7Z(YHeX)
z+yGXl$-uzC1{M@z&|+X<-~qE)8MGO67#J8B8FU%+7?{ACS2D0NFflMNL~3nkVA9gw
z%D}9(n}H=#KwuAt5bJgZwyg||n;6(ZCU0Zl(9+W0$-v3Tu$_TxD+Bi?2KL<yJdxWO
zc!l`3G4Mmw2y9~z+{PfJt+j=Ldnbc16T?QhgOnIJ7#J8N7+4r288{iF7^E1a8B`c#
z7>pQX8T=UJ7$O+t!HyM!I0))k28Kwm?-?2N85kH?7#JB07??l>4%GKc8JHPZ7#JAT
zg+zozcQA<g>ab~VW025+I7iY?cZ09aHU{b43^I{A+Zkl{gF`}sL6Sj=ftdjmPI3(F
z3=9k^3>*xq415e~4B`yx43Z2Q3{ni53~~%wU?-U{urhEk2r?Kmm@qIgh%+!Tm@+6b
qFf&Lo@G_V&n1dax4tKCRg9U>n10#bKBo-ps8LSx?8En7-VG95Qg#SSR
literal 0
HcmV?d00001
diff --git a/out/production/infinitymonkeys/server/Server.class b/out/production/infinitymonkeys/server/Server.class
index 3e54605fe1c8f601825950f467aec87efd4c33cb..4a1b8acffaa4c23eb1d13afad45bab9e5e8d24cb 100644
GIT binary patch
delta 1645
zcmbO$v{=0U)W2Q(7#J8#80K*?XfnicGVn9Rvoj=cF)%|oiR=tXTnuas$sm~&c7{|g
z22Kbkjh!K#i-8Bi$zW&5<YM4whyxK>><rml3_=V!TnxDkc_1R6gQ0+fp^$^2h?}99
zp@fs6l%b4+p`44ss)C^sq@{|Bp_-wFouQVCL7pLpouQ74L6ISjgP|ToH-ID?L98YY
zhGr0_g`J^wV{0-aW837HjQbh0C$D5WQ_o&dl$lrJ8NkRO?~|2SmZ+bXTB0ACmz|ei
zp68KYT;f`hoLW$lnV)CP$iSVMms;YOl2VjfT+GNIhEVT`5VvM$$Yf_|XJ@EoWZ(+U
zFD*(=b<502Wn|zEPAw`+Ez$#7!oy(3V9vu}!eGkG$RIp%qA&*!gBF7}BZK(F_u};+
z*$y5CJqCS72GL@$E`8^W#1iNHypp2)oSf7m9tHyjLq-M(sH96#VtHm>I<mYGgE1om
zFH|04GY^9ggE=FEFvtP=If;4c`f$JTFmy7Qvomz@FmyBYu<|hUGW1OjWU;F6=V6$@
zFp-^M5)Z><hAE5;{1B5AGK&?8QWH}u*%_wtFic}`;9&>_>2K#@n9eYRkwF%01+IW(
zWDp0-gPjmuQk0pO?o^tYlagA*$iV9vpa2bED_sR;9)_6=vv?S0GdS@u%wce1WZ(fs
ziGp8ZZmN~80uRGn2B*oJSqwx)zy^XWM2d;c4_SN|>lqn%(o;)(@{<#DKzbP&Bs4U!
zM;s#qTVg>$YF-K>gRTZd36c}7p}LTSpsu!NWZ+9rEdiMhbvh#hM@c@!XCaIX+)zo7
zs~Hp-_!%@A7#LU?SU@q(z{sG(z`(%7pv%Alif{%71{P4<f@vcLW3ZeFgDC?80~-S)
zDAh19F<4A4X7j4IWME*BV_;`sV31^BVUS|rWRPYMVUS@^V31|dVUT06V3239Vqjq4
zVPIrnV6bGcX0TykV6X+7%*bHJz`|h9;K0DhV8Ot^V8_73zyz{GOM5E=(?+nZAoIDv
zqRI@c3@Tu=#K3$ukXgYDAixGn!wifJEDVkePEf=285qG<vTAK%VA=pT3*>$V1`V(|
z5I3=c%wb?);AC)SZ~<wa+|RBD_Lmd`8v_G_J_84XAp<Bk@G}@Q2r!s3h%lIg^(!zi
zGjK4lFt{?<FfcL*Ft9MVF}Q;*6=m>X@MK_M@M2(KU}s?RXJ_zcVPFKMd{DqKFfe=p
zYh_>v5M=S*!5|X8gF)0sNX%DA+)qftibZS7WE&2XdadmYvWQTyV&G$7V6bLjXRu-5
zX0T)6W3XosWN=^*WpHAUW^iUuWN=|nXK-UMU~p%!Wbj~cX7FP0X7FL~XYd8PHi&_P
zfq@|a>RWCGR|a1OKL$nyJ_aWSe+E+qCI&$Udxii8QwC-RQ3h*<z<LH#1{MZs22%z-
zh9Cx321N#a1_Op*1~vwD22BPdh7bmJq=;k!Wj;{wF)%P3Vqj)qW?*1&XY|>@Am_83
zfx}m48-v0o2C3Z)ijmtHl!TPGF{o&7V^H13pt6lYZ5x9OlAJn3PNN<!xsid9fr){Q
zfs;X=ftdl6B$U9O31k4-%El1Iz{wEKz{L>Bz{e27pv4f&;KmRK_B1GpxWEw;22M2Y
vQ13G_xH5z@L@+Rdqez&6=|2M}0~0$#Bs)VC10y>_Gz$YG2SW@v*~9_><Qgwi
delta 975
zcmZ21K3Ayz)W2Q(7#J8#7%I3JWEs3U8Tc7|*cp7e7?>d(KXwLxE(SJ+0FX=|J3|l`
z11E$N%+3(P#lQpMgt9Y)aWU{Sc!P*=c7_Np1|fz>E`}(EXb=&@!4S*A5XZp~&&`m)
zkjTl9#E{Ivkix~lmdcRE&XB%wXEGyW#$;Kh{frTl?=qc9<qFO(ElN&x%gjk-WZ(`?
zEh<Yb(#uLLOXOkDV$kMc&|uJHWDo`k=$Dpc=IA>X6(v^sWEPk3Fvu~;Gct%5gSF^8
z=VYell{n|;l@#UY<fImXv}f`#C^0BAGKfwNU=-!xVNhXEWn_?;T*oNk#KWM*pw7s^
z3)Ky=mxsZDK^taUPGVlVzH3EtYC%b6ejX1)7K1iBLpBdX4nr;vLmor^<cBO)8U;KI
zg$zaP48=SQB@CsE4Ezv-6f%nyic%9(D%lyzco@nVOeXJTHQ3C;=Edm7pvb__Aj`nO
zz{<b^@&N-Qg8~Bs0~3QH0}IHt3=9k`Acul!H3oICoCbp?SO+60Oc<CLbS5iuc-8AN
zFfhn5urn|)h%>M-NHB0RNHT~pNHHidNHgd#$S_zi$TH|LFfi~iFfuSOSTg7{7%(s}
z7=le^WH4f2VK8PeVPIs?VPIgeV_;%nVqjok)6(9`z_bx;E698<u&5#fD}xf)EHN;j
z4P=%W0|>BzVu*o}frY`8!3<>BBu+7PkWMzRt!iLh5Ern5bTKe6a59)PSb&sHw&m0V
z`$CF=je&tdmw|&ppMi(Lgn^&IkU@aKm_dZW6s%u?fti7WfrY`6!GM90L4bjU!HU5e
zY`!Ri4TCM%{R|B33{3v)4E8JxjG%Y~1rq}U!yB+x1_mEN7VjMlBH=q2M16$Be1*jQ
zge0t3w6;us#c5KH@UIyIF9QRE6$3kiH3K(;Edw8e9fKf)J%cENBZD-96N4gyGlM#V
zD}w=p8-pc-JA*TWCxbVG7uc0S3>*v$3_eg_ax*wGI5IdfFoMl+X3%6{Vi07oW^iH9
zWMF0xWiV%OWzb|`VUT7p)MHR$aARO)P-M_%P+@RqU}I2cP-ReK@L*s^iY`V5PjIw&
F0RVU2ft3IN
diff --git a/out/production/infinitymonkeys/server/User.class b/out/production/infinitymonkeys/server/User.class
index bb1cfcbe52b605032645164945747218b2160ba8..1f9d467c254e1d5522e06aa714e639f9145b70a4 100644
GIT binary patch
literal 1491
zcmX^0Z`VEs1_l!bb4~^h23;-&P6j;?OCLlSfCxhnVFV(K*%?gO8B7@&I7*9Ci}Dh4
zQyCeAe6kYD67_Qu^V0Q$ONuh{(ybX8xILXS5=%l0QW8s285u-;ic)j)OH%cbM6DSa
z_&i;T63a95(qZbv;p$K%tQi@2J)LthQ}f^^iosPPi(4}?uxA!KrsQVkF)}blF*5KM
zXCxM-rUa)Z7p0bXr&cmDNPt~ip`Tn-Sx}O%50|lKWDrVEEeS?fFQuW0TL+7Ceo87M
z1HVsZUaDVdZc=JdNMceBI85@B6LZ26i!wocs31#8MrJW11FuhUYEfBgk$z}#YLPV~
z1Dj1|US^3MBSW4B*d~;aM0gV(oYn|2q#!|vq6Qt<NG#sf3}a;APERcXIl>Pdk0MZ?
zqS(*Kz)_r90u50XjVO>d)<j4EGizu@F*5L_r<Nc^D<gxLh9<&=2v;*Q2!d3ixQ>xQ
z5=k+Nlr<xR07yM@^fEF?ASp+dv1Vl83eGPrN=|jl1cg5*$Xj}#bjiaY!XV1SAj@FJ
z!@$MB&BMUMz{|tH$H33SAiyBV!yv>U%*eov6eElb0w8^mQ1DO6N=+_dWMJ0N3}aAa
z;9%fnU|?WlU;-J%z`(!+G7U`gG4O+F0R}-ZEyN%UrbQS;85kHi7#JDE7{nPE86+4O
z81xw!85kKD7+AHoFfeWaE0Y8p3lbD!kYZq9;DIP$kY<o!U|?WmkY$jAYM#r$#K6YD
zz@VzNoq<V9dn*I8md;iN7A;AZtqiPMx?368v?N)#GB9c}Z)ITL2sd1bfrEj8L4tvW
zL6U)!L5hKoL7G8?L54w+L6$+DL5@L%K^|<e9mH^`#S9FpV4s2<rV92e6Ub^%$T2X3
zSs;J2fLS1)vNA9-$TKKFor>&FW^{ilgRMjNry_$ARI?oe69dRHHZ5rsk8puSH5gbK
zG{Gi_f%$B32eUCKGYEqNScpLdY8J9X*w?_rgbf_Xx?p3_9iqyhhD9?Ax-X2dYF1~^
dz@nKIU9%}x&6*5aSTwVtYc|KKSsUy*9RMR+5aa*=
literal 1273
zcmX^0Z`VEs1_l!bLoNmm1`SRIb_Pulp#>teL4*#7&}C=PV`tE3WZ)<*PA$qy%uQuv
z5c0`NEKAhSNz6;v4=yRn%uBasWZ?F6&PXf?El5c$No8aZ@hM8p%`ZvSM-sJWWZ?63
zDM~EQ%u9!<6Njrqk+5cD;PrIQ$xO|In<xfXi7al-$iSXi?3j|9na9Y$7{$oIW|Nth
zSz^b?5T=3YN`w(`r&=S#kgP+9qB=`6jFExGIX@+pk%8YQGcVPzG&d==C?qi{2OKQ<
z$%#2(iA9+pK2(sUBqOt!k%8BzIJKxOwMaj-IJF2ATIs1JAf_KUKt(h(F&)duz)_r9
z0`(e;Mij_y)<lR;nKd+{7#aA|Q%jJ-mytnCLlfa0gclhZ1VJiMyu!#JiKG}s%9@cu
z0Hhu{oEaG;kd!0KSTizk1?QI*C8xS&f<l24<Sji=0^wm0W-#Dk;AG(9Vc=%q;bGuq
z;NxN7XAt0F5M&TyWZ*^$5=I6AkQPXq@=wZ2O)g<%VAjwKV^CyZXW(F9U|?ln0vW}?
zz`z7D4NUVg@PTQ51_3ZF$RNbPz`)MH$RNxh!obKN%D}+T$-u<G%D})NueF_lQA>L(
z1Cy4{Rt9D*NtUe)ELyr-8CbQLw=%G81REg6z`!8Kz|O$HAi%)FAjrVUAjH52HcW&;
zl0lR~jzNq;9Gq*wMlwh+NHTzcJlJWBAZx&mV*;~4&SD0$Kn`VLU}TVDkcK)-pMjA9
zq@Go43j@;zxaDkMK`F2$JYY5})DlJp83tLXW;+HZ29OnOTGA*^=K_n$Gq5r!fK3ns
z^Vy&#Ffgz&$T0|kEf!>uhnj`#5VkdF4p9LcgYFOo21P8InbCcriB+=_gEAJ)Ea;kb
XuxeIeP{pE|6<xC)R?TW)(dcD3M%
diff --git a/src/GUI/ChatScreen.java b/src/GUI/ChatScreen.java
index 1c70a5f..f07d9ab 100644
--- a/src/GUI/ChatScreen.java
+++ b/src/GUI/ChatScreen.java
@@ -1,9 +1,11 @@
package GUI;
import client.Client;
+import remote.EncryptDecrypt;
import remote.IChatController;
import remote.IClientController;
+import javax.crypto.SealedObject;
import javax.swing.*;
import java.awt.event.*;
import java.rmi.RemoteException;
@@ -102,14 +104,14 @@ public class ChatScreen {
System.out.println("Send button pressed");
String toUser = sendMessageToComboBox.getSelectedItem().toString();
-
+ SealedObject messageSealed = EncryptDecrypt.encryptString(message,client.getEncryptionUpdate().getSharedSecretKey());
if( toUser.equals("All") )
{
- chatController.broadcastMessage(client.getUserName(), message);
+ chatController.broadcastMessage(client.getUserName(), messageSealed);
}
else
{
- chatController.sendPrivateMessage(client.getUserName(), toUser, message);
+ chatController.sendPrivateMessage(client.getUserName(), toUser, messageSealed);
}
}
catch (RemoteException ex)
diff --git a/src/client/ChatUpdate.java b/src/client/ChatUpdate.java
index 2edc3cc..9447ca5 100644
--- a/src/client/ChatUpdate.java
+++ b/src/client/ChatUpdate.java
@@ -1,7 +1,9 @@
package client;
+import remote.EncryptDecrypt;
import remote.IChatUpdate;
+import javax.crypto.SealedObject;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
@@ -17,8 +19,9 @@ public class ChatUpdate extends UnicastRemoteObject implements IChatUpdate, Seri
}
@Override
- public boolean notifyChat(String fromClient, String message, boolean isPrivate) throws RemoteException
- {
+ public boolean notifyChat(String fromClient, SealedObject messageSealed, boolean isPrivate) throws RemoteException
+ { String message;
+ message = EncryptDecrypt.decryptString(messageSealed,client.getEncryptionUpdate().getSharedSecretKey());
String outputString;
if( isPrivate )
diff --git a/src/client/Client.java b/src/client/Client.java
index 0dca4c8..8fddee5 100644
--- a/src/client/Client.java
+++ b/src/client/Client.java
@@ -4,10 +4,13 @@ import GUI.ApplicationMain;
import GUI.ChatScreen;
import GUI.PaintGUI;
import GUI.StartScreen;
+import remote.EncryptDecrypt;
import remote.IChatController;
import remote.IClientController;
import remote.IDrawingController;
+import javax.crypto.Cipher;
+import javax.crypto.SealedObject;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
@@ -18,6 +21,11 @@ public class Client
{
private final String DEFAULT_USERNAME = "Anonymous";
private final String DEFAULT_SERVER_ADDRESS = "localhost";
+
+ public EncryptionUpdate getEncryptionUpdate() {
+ return encryptionUpdate;
+ }
+
private final EncryptionUpdate encryptionUpdate;
private String userName;
@@ -147,23 +155,33 @@ public class Client
System.out.println("User name: " + userName);
System.out.println("Password: " + password);
- if( clientController.checkPassword(password) )
- {
- if( clientController.join(userName, this.chatUpdate, this.clientUpdate, this.drawingUpdate, this.encryptionUpdate) )
- {
- System.out.println("Connected to server");
-
- return 1;
- }
- else
- {
- return 2;
- }
- }
- else
- {
- return 4;
- }
+ if (clientController.setSharedKey(this.encryptionUpdate)){
+ SealedObject sealedPassword = EncryptDecrypt.encryptString(password,this.encryptionUpdate.getSharedSecretKey());
+
+ if( clientController.checkPassword(sealedPassword) )
+ {
+ if( clientController.join(userName, this.chatUpdate, this.clientUpdate, this.drawingUpdate) )
+ {
+ System.out.println("Connected to server");
+
+ return 1;
+ }
+ else
+ {
+ return 2;
+ }
+ }
+ else
+ {
+ return 4;
+ }
+
+ }
+ else {
+ return 4;
+ }
+
+
}
catch (Exception e)
{
diff --git a/src/client/EncryptionUpdate.java b/src/client/EncryptionUpdate.java
index 001c129..52d1fa5 100644
--- a/src/client/EncryptionUpdate.java
+++ b/src/client/EncryptionUpdate.java
@@ -14,7 +14,13 @@ public class EncryptionUpdate extends UnicastRemoteObject implements IEncryption
private PrivateKey priv;
private PublicKey pub;
+
+ public SecretKey getSharedSecretKey() {
+ return sharedSecretKey;
+ }
+
private SecretKey sharedSecretKey;
+ private Cipher myCipher;
public PublicKey getPub() {
return pub;
@@ -26,6 +32,8 @@ public class EncryptionUpdate extends UnicastRemoteObject implements IEncryption
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) {
@@ -55,4 +63,5 @@ public class EncryptionUpdate extends UnicastRemoteObject implements IEncryption
}
}
+
}
diff --git a/src/remote/EncryptDecrypt.java b/src/remote/EncryptDecrypt.java
new file mode 100644
index 0000000..cd6af8a
--- /dev/null
+++ b/src/remote/EncryptDecrypt.java
@@ -0,0 +1,59 @@
+package remote;
+
+import javax.crypto.*;
+import java.io.IOException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+public class EncryptDecrypt {
+ public static String decryptString (SealedObject sealedObject, SecretKey key){
+
+ String nonSealedString ="";
+ Cipher cipher = null;
+ try {
+ cipher = Cipher.getInstance("AES");
+ cipher.init(Cipher.DECRYPT_MODE,key);
+ nonSealedString = (String)sealedObject.getObject(cipher);
+
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (NoSuchPaddingException e) {
+ e.printStackTrace();
+ } catch (InvalidKeyException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (IllegalBlockSizeException e) {
+ e.printStackTrace();
+ } catch (BadPaddingException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ return nonSealedString;
+
+ }
+ public static SealedObject encryptString (String string, SecretKey key){
+ SealedObject sealedObject = null;
+
+ Cipher cipher = null;
+ try {
+ cipher = Cipher.getInstance("AES");
+ cipher.init(Cipher.ENCRYPT_MODE,key);
+ sealedObject = new SealedObject(string,cipher);
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (NoSuchPaddingException e) {
+ e.printStackTrace();
+ } catch (IllegalBlockSizeException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (InvalidKeyException e) {
+ e.printStackTrace();
+ }
+ return sealedObject;
+
+
+ }
+}
diff --git a/src/remote/IChatController.java b/src/remote/IChatController.java
index 8230587..6c6bb38 100644
--- a/src/remote/IChatController.java
+++ b/src/remote/IChatController.java
@@ -1,12 +1,13 @@
package remote;
+import javax.crypto.SealedObject;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IChatController extends Remote
{
- boolean broadcastMessage(String fromClient, String message) throws RemoteException;
+ boolean broadcastMessage(String fromClient, SealedObject messageSealed) throws RemoteException;
boolean broadcastMessageUserLogin(String fromClient) throws RemoteException;
boolean broadcastMessageUserLogout(String fromClient) throws RemoteException;
- boolean sendPrivateMessage(String fromClient, String toClient, String message) throws RemoteException;
+ boolean sendPrivateMessage(String fromClient, String toClient, SealedObject messageSealed) throws RemoteException;
}
diff --git a/src/remote/IChatUpdate.java b/src/remote/IChatUpdate.java
index 0c9b54d..ffde71c 100644
--- a/src/remote/IChatUpdate.java
+++ b/src/remote/IChatUpdate.java
@@ -1,12 +1,13 @@
package remote;
+import javax.crypto.SealedObject;
import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IChatUpdate extends Remote, Serializable
{
- boolean notifyChat(String fromClient, String message, boolean isPrivate) throws RemoteException;
+ boolean notifyChat(String fromClient, SealedObject messageSealed, boolean isPrivate) throws RemoteException;
boolean notifyUserLogin(String fromClient) throws RemoteException;
boolean notifyUserLogout(String fromClient) throws RemoteException;
}
diff --git a/src/remote/IClientController.java b/src/remote/IClientController.java
index 07f8125..43f26a2 100644
--- a/src/remote/IClientController.java
+++ b/src/remote/IClientController.java
@@ -1,5 +1,6 @@
package remote;
+import javax.crypto.SealedObject;
import java.rmi.Remote;
import java.rmi.RemoteException;
@@ -7,7 +8,7 @@ public interface IClientController extends Remote
{
enum Action {KICKOUT, ASSIGNADMIN};
- boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing, IEncryptionUpdate encryptionUpdate) throws RemoteException;
+ boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing) throws RemoteException;
void quit(String username) throws RemoteException;
@@ -19,5 +20,6 @@ public interface IClientController extends Remote
String getAdmin() throws RemoteException;
- boolean checkPassword(String password) throws RemoteException;
+ boolean checkPassword(SealedObject sealedPassword) throws RemoteException;
+ public boolean setSharedKey(IEncryptionUpdate encryptionUpdate) throws RemoteException;
}
diff --git a/src/server/ChatController.java b/src/server/ChatController.java
index a2a38a0..206bc18 100644
--- a/src/server/ChatController.java
+++ b/src/server/ChatController.java
@@ -1,8 +1,10 @@
package server;
+import remote.EncryptDecrypt;
import remote.IChatController;
import remote.IChatUpdate;
+import javax.crypto.SealedObject;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
@@ -17,13 +19,16 @@ public class ChatController extends UnicastRemoteObject implements IChatControll
}
@Override
- public boolean broadcastMessage(String fromClient, String message) throws RemoteException
+ public boolean broadcastMessage(String fromClient, SealedObject messageSealed) throws RemoteException
{
System.out.print("Broadcasting message to everyone...");
+ int fromClientIndex = server.clientController.getUserIndex(fromClient);
+ String message = EncryptDecrypt.decryptString(messageSealed,server.users.get(fromClientIndex).getSharedSecretKey());
for( User u : server.users )
- {
- u.getIChatUpdate().notifyChat(fromClient, message, false);
+ { u.getSharedSecretKey();
+ SealedObject messageSealedTo = EncryptDecrypt.encryptString(message,u.getSharedSecretKey());
+ u.getIChatUpdate().notifyChat(fromClient, messageSealedTo, false);
}
System.out.print("...DONE\n");
@@ -68,16 +73,22 @@ public class ChatController extends UnicastRemoteObject implements IChatControll
}
@Override
- public boolean sendPrivateMessage(String fromClient, String toClient, String message) throws RemoteException
- {
+ public boolean sendPrivateMessage(String fromClient, String toClient, SealedObject messageSealed) throws RemoteException
+ { String message;
int toClientIndex = server.clientController.getUserIndex(toClient);
int fromClientIndex = server.clientController.getUserIndex(fromClient);
if( toClientIndex >= 0 && fromClientIndex >= 0 )
{
- server.users.get(toClientIndex).getIChatUpdate().notifyChat(fromClient, message, true);
+ message = EncryptDecrypt.decryptString(messageSealed,server.users.get(fromClientIndex).getSharedSecretKey());
+
+ SealedObject messageSealedOutgoingFrom = EncryptDecrypt.encryptString(message,server.users.get(fromClientIndex).getSharedSecretKey());
+
+ SealedObject messageSealedOutgoingTo = EncryptDecrypt.encryptString(message,server.users.get(toClientIndex).getSharedSecretKey());
+
+ server.users.get(toClientIndex).getIChatUpdate().notifyChat(fromClient, messageSealedOutgoingTo, true);
- server.users.get(fromClientIndex).getIChatUpdate().notifyChat(fromClient, message, true);
+ server.users.get(fromClientIndex).getIChatUpdate().notifyChat(fromClient, messageSealedOutgoingFrom, true);
return true;
}
diff --git a/src/server/ClientController.java b/src/server/ClientController.java
index 2d40ff1..15dc3ee 100644
--- a/src/server/ClientController.java
+++ b/src/server/ClientController.java
@@ -2,8 +2,8 @@ package server;
import remote.*;
+import javax.crypto.*;
import java.io.Serializable;
-import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
@@ -16,17 +16,17 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
this.server = server;
}
+ private SecretKey sharedSecretKey;
+
@Override
- public boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing, IEncryptionUpdate encryptionUpdate) throws RemoteException
+ public boolean join(String username, IChatUpdate clientChat, IClientUpdate clientUpdate, IDrawingUpdate clientDrawing) 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);
+ User newUser = new User(username, clientChat, clientUpdate, clientDrawing, sharedSecretKey);
server.users.add(newUser);
@@ -205,8 +205,11 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
}
@Override
- public boolean checkPassword(String password)
+ public boolean checkPassword(SealedObject sealedPassword)
{
+ System.out.println("Sealed passwords" + sealedPassword);
+ String password = EncryptDecrypt.decryptString(sealedPassword,this.sharedSecretKey);
+ System.out.println("unsealed password" + password);
if( server.users.size() == 0 )
{
server.setPassword(password);
@@ -222,4 +225,14 @@ public class ClientController extends UnicastRemoteObject implements IClientCont
return false;
}
}
+ public boolean setSharedKey(IEncryptionUpdate encryptionUpdate) throws RemoteException {
+ try {
+ sharedSecretKey = new MySharedKey(encryptionUpdate).getSharedSecretKey();
+ return true;
+
+ }catch (Exception e){
+ return false;
+ }
+
+ }
}
diff --git a/src/server/MySharedKey.java b/src/server/MySharedKey.java
index e16485e..bd4c8ab 100644
--- a/src/server/MySharedKey.java
+++ b/src/server/MySharedKey.java
@@ -13,6 +13,11 @@ import java.util.Base64;
public class MySharedKey {
private byte[] encryptedSharedSecretKey;
private IEncryptionUpdate encryptionUpdate;
+
+ public SecretKey getSharedSecretKey() {
+ return sharedSecretKey;
+ }
+
private SecretKey sharedSecretKey;
@@ -21,7 +26,7 @@ public class MySharedKey {
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);
+ System.out.println("Shared key on server:" + sharedSecretKey);
encryptionUpdate.setSharedKey(encryptedSharedSecretKey);
}
diff --git a/src/server/User.java b/src/server/User.java
index 543f26e..c316667 100644
--- a/src/server/User.java
+++ b/src/server/User.java
@@ -4,6 +4,8 @@ import remote.IChatUpdate;
import remote.IClientUpdate;
import remote.IDrawingUpdate;
+import javax.crypto.SecretKey;
+
public class User
{
private String username;
@@ -12,12 +14,19 @@ public class User
private IClientUpdate IClientUpdate;
private boolean isAdmin;
- public User(String username, IChatUpdate IChatUpdate, IClientUpdate IClientUpdate, IDrawingUpdate IDrawingUpdate)
+ public SecretKey getSharedSecretKey() {
+ return sharedSecretKey;
+ }
+
+ private SecretKey sharedSecretKey;
+
+ public User(String username, IChatUpdate IChatUpdate, IClientUpdate IClientUpdate, IDrawingUpdate IDrawingUpdate, SecretKey sharedSecretKey)
{
this.username = username;
this.IChatUpdate = IChatUpdate;
this.IDrawingUpdate = IDrawingUpdate;
this.IClientUpdate = IClientUpdate;
+ this.sharedSecretKey = sharedSecretKey;
this.isAdmin = false;
}
--
GitLab