From aea8c65c7727d697f6cf66f29c7f2922b635e3df Mon Sep 17 00:00:00 2001 From: ItsSelis Date: Thu, 21 Apr 2022 01:35:51 +0200 Subject: [PATCH] Beginning of circuitry update - Added Illegal Tech Disk / Illegal Circuitry Category - Added Simple Hash functions - Added (Very) simple encryption is possible thanks to Rot13 - Fixed EPv2 Circuits not having unlimited range anymore --- .../integrated_electronics/core/printer.dm | 4 + .../subtypes/cryptography.dm | 89 ++++++++++++++++++ .../subtypes/illegal.dm | 7 ++ .../integrated_electronics/subtypes/input.dm | 17 +++- .../electronic_tools.dmi | Bin 2390 -> 2555 bytes vorestation.dme | 2 + 6 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 code/modules/integrated_electronics/subtypes/cryptography.dm create mode 100644 code/modules/integrated_electronics/subtypes/illegal.dm diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 77f0de7b043..59ef2d936b0 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -121,6 +121,8 @@ "name" = category, "items" = null ) + if(cat_obj["name"] == "Illegal Parts" && !illegal_upgraded) + continue var/list/circuit_list = SScircuit.circuit_fabricator_recipe_list[category] var/list/items = list() for(var/path in circuit_list) @@ -226,6 +228,8 @@ /obj/item/weapon/disk/integrated_circuit/upgrade/illegal name = "integrated circuit printer upgrade disk - illegal designs" desc = "Install this into your integrated circuit printer to enhance it. This one adds new, but illegal designs to the printer." + icon_state = "upgrade_disk_illegal" + origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 4, TECH_ILLEGAL = 1) // To be implemented later. /obj/item/weapon/disk/integrated_circuit/upgrade/clone diff --git a/code/modules/integrated_electronics/subtypes/cryptography.dm b/code/modules/integrated_electronics/subtypes/cryptography.dm new file mode 100644 index 00000000000..81bc3d150f0 --- /dev/null +++ b/code/modules/integrated_electronics/subtypes/cryptography.dm @@ -0,0 +1,89 @@ +/obj/item/integrated_circuit/cryptography + complexity = 3 + inputs = list("input" = IC_PINTYPE_STRING) + outputs = list("result" = IC_PINTYPE_STRING) + activators = list("compute" = IC_PINTYPE_PULSE_IN, "on computed" = IC_PINTYPE_PULSE_OUT) + category_text = "Cryptography" + power_draw_per_use = 10 + +// HASH FUNCTIONS + +/obj/item/integrated_circuit/cryptography/hash_md5 + name = "MD5 hash circuit" + desc = "Message-Digest Algorithm 5" + extended_desc = "This circuit will take a string input and generates the MD5 hash of it." + icon_state = "template" + spawn_flags = IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/cryptography/hash_md5/do_work() + var/result = "" + for(var/datum/integrated_io/I in inputs) + I.pull_data() + if(!isnull(I.data)) + result = md5(I.data) + + set_pin_data(IC_OUTPUT, 1, result) + push_data() + activate_pin(2) + +/obj/item/integrated_circuit/cryptography/hash_sha1 + name = "SHA1 hash circuit" + desc = "Secure Hash Algorithm 1" + extended_desc = "This circuit will take a string input and generates the SHA1 hash of it." + icon_state = "template" + spawn_flags = IC_SPAWN_RESEARCH + power_draw_per_use = 20 + +/obj/item/integrated_circuit/cryptography/hash_sha1/do_work() + var/result = "" + for(var/datum/integrated_io/I in inputs) + I.pull_data() + if(!isnull(I.data)) + result = sha1(I.data) + + set_pin_data(IC_OUTPUT, 1, result) + push_data() + activate_pin(2) + + +// ENCRYPTION/DECRYPTION + +/obj/item/integrated_circuit/cryptography/rot13 + name = "rot13 circuit" + desc = "A very simple encryption circuit." + extended_desc = "The 'rotation' field will default to 13 if no custom number is supplied. This circuit rotates every letter by X in the alphabet." + icon_state = "template" + inputs = list( + "input" = IC_PINTYPE_STRING, + "rotation" = IC_PINTYPE_NUMBER + ) + spawn_flags = IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/cryptography/rot13/do_work() + var/result = "" + + var/input = get_pin_data(IC_INPUT, 1) + var/rotation = get_pin_data(IC_INPUT, 2) + + var/string_len = length(input) + + if(!isnum(rotation)) + rotation = 13 + + for(var/i = 1, i <= string_len, i++) + var/ascii = text2ascii(input, i) + if(ascii >= 65 && ascii <= 90) + ascii += rotation + if(ascii > 90) + ascii -= 26 + + else if(ascii >= 97 && ascii <= 122) + ascii += rotation + if(ascii > 122) + ascii -= 26 + + result += ascii2text(ascii) + + set_pin_data(IC_OUTPUT, 1, result) + push_data() + activate_pin(2) \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/illegal.dm b/code/modules/integrated_electronics/subtypes/illegal.dm new file mode 100644 index 00000000000..d28a0e0dd99 --- /dev/null +++ b/code/modules/integrated_electronics/subtypes/illegal.dm @@ -0,0 +1,7 @@ +/obj/item/integrated_circuit/illegal + complexity = 3 + inputs = list("input" = IC_PINTYPE_STRING) + outputs = list("result" = IC_PINTYPE_STRING) + activators = list("compute" = IC_PINTYPE_PULSE_IN, "on computed" = IC_PINTYPE_PULSE_OUT) + category_text = "Illegal Parts" + power_draw_per_use = 50 \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 855c01c5391..c4de28811ff 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -441,12 +441,19 @@ origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2) power_draw_per_use = 50 var/datum/exonet_protocol/exonet = null + var/obj/machinery/exonet_node/node = null + +/obj/item/integrated_circuit/input/EPv2/proc/get_connection_to_tcomms() + if(node && node.on) + return can_telecomm(src,node) + return 0 /obj/item/integrated_circuit/input/EPv2/New() ..() exonet = new(src) exonet.make_address("EPv2_circuit-\ref[src]") desc += "
This circuit's EPv2 address is: [exonet.address]" + node = get_exonet_node() /obj/item/integrated_circuit/input/EPv2/Destroy() if(exonet) @@ -461,7 +468,15 @@ var/text = get_pin_data(IC_INPUT, 3) if(target_address && istext(target_address)) - exonet.send_message(target_address, message, text) + if(!get_connection_to_tcomms()) + set_pin_data(IC_OUTPUT, 1, null) + set_pin_data(IC_OUTPUT, 2, "Error: Cannot connect to Exonet node.") + set_pin_data(IC_OUTPUT, 3, "error") + + push_data() + activate_pin(2) + else + exonet.send_message(target_address, message, text) /obj/item/integrated_circuit/input/receive_exonet_message(var/atom/origin_atom, var/origin_address, var/message, var/text) set_pin_data(IC_OUTPUT, 1, origin_address) diff --git a/icons/obj/integrated_electronics/electronic_tools.dmi b/icons/obj/integrated_electronics/electronic_tools.dmi index 975f2fc9a812829918c18a4602e109bfd00a69f0..821265acccc19f75b1b3fd42dc9d33bdfccbeeaf 100644 GIT binary patch delta 2375 zcmYM0dsxzE8^?cuW{Oi6rma-WX}WrsYr5AoJXI!c3v0S*)5OeD^AL*R0ptg^mR+sH zRc3}@S$S0+D$8&>!7{Z>@lXD@z_*6uy695z`2n6mabKpZ90t554+^)HWP8G}0G-y!vgR-`daU zj2q8A)3Le)zm>gq398GpVC5R*7HYdXsr|sY7ZanOQ8P;sQ{oEdKp1E?I(-Ct;MCTU zH9woZ8vB0ZC4=i^T1Xb+od3f9ud)Qc1hx?N?5p~*^P$(B;bXsB{BUZ*@8uP7W}Vy1 zFt3Q{)q~RaFy(rWTJPop(O5_AMPzW>gMp=qIi~!WYh`fN(@RxBGqZ&78!t$m^XqGs zvvH1nw%gC#O7Eq&2me$i%>$QuzP+}s@@C%Q5M4rRnIl&S>n~n-V3CmH0sv<3!*&Np z<}wu(sWGDMHhUCD!-`_M?;{@`5dt@lK;eS@)P~$xKiWrd%YO}Smn{7&{+F8k>Cwavx1bXzB)K^aIa}yotN8 zixZT%(s!^@=uSCGoS-w2%DeBla6yJhmvfh{(D-cPO-ND8T?d`s;g$G|Ww!B<6lK!F zEGT)}V@_z&n1E#4cqy7bN7PosYETZ9ww_5BZi6*(t+yI#SE(pg9P%C-NExc`979|j zBf+6Xlj@B3q8)EKOrA0|OXCf`!Q9iw|NKP@uk}lGXHlm4SkV`!$Dhm2g3r=MTx0A0 zA@DbdFs}h>TzR)VWe$R!u_lC@V!=G(sJO5 zH1k3@N+9VpAv-XN9zQAYbN&(J+Or;TB}l=4=_Y&o%6u=#STfJ|pSiH|js>>mC$S2q zhH>{cSpd1J+sMIn4-m-#g&gy&+|k1aFPbm85!ZvKC zjk$+*ZrrMrHHpij233o4K^wfx$5lOl@A^ctn{vfGqdcPdNoVLgtK5+Jg0-}vF($k$ zq7UYcH)>Gy8fdxhzIr(zlN$dT_Kqxus!&@Hu+S91=*pCGFP*bR5Hx+*j?cYc zOn?FWfLn809K_=`e~IsHX_Lavhg9&?$$F?L39X zda&F+ycO{)CuCiIo=GePc)*kkAQ^_s+JV;*U(^jy|Gdl&o&1%oht7iE{f=jvHP!aT zl*U|;8S#xY=QL-}e`!HQ#=`n;22*_0EcbZF(qE!jlI;&eo{`fkklT+(=NL6=o@9T&F$T1^wO07>A#z0rF% zz<`yO;T$E-z*4jO=Dp3;Xh9NJ(SsD8e31 z!-T()%+RY9GhBzUg;f7^MO;TEZ#lW{}kV5Aet4NK{(%Fw?m9m?8^M(MG zrd{9SZLfv~T5SFqVk5dl2a=C}5YM&7j`9zK;gibqczU~UMKhTMyP?M{s1ub=xuy&i z)F-(LPm`*>SCy!sBKv5?eHVp{+`6cSt+~5Ej|cPOu++Ik`X??2)VCx zVydAVz0x;a9EBA~)S8)3x@rRcY_+83>+^x|2^ALn$I;L!@|9yqbd(|uXiT0khaT%cD_q{0QP_gj7{kTA6?PpO#6)iOXg1yYYwxWG0xjmM!9)S7rVG(7Z^bL fU#r60UN&0{a7|$5X)hT+LqJ#vZg<_z_`?4Hn4snh delta 2210 zcmZ8je>Btk8~6f344H>h~(zo@_X}RZI}@o!;J5`=iK`}=llBO{k-1q=XuWayw7=_=R9iU*L4{i z5Wt`=3;=*W)}aussJ;8ITQEMKf49sQY^3vr+9yb?kC!iimvo=kUM3Td`^UPUqnsg! zMaPDbE&@OTvm~=czizi-gFx=PzV=TC93Bz$9*b6*{2F-1^m*RdJU5omYrlun^lm8D zGn3ehtFXF1omh@6mR}<>^gosOUvCWl7;v@eoU7R#hh`v7lJ7ZG2*bpKK7|$T*-X6> z*m(4l41I82OuPj(#R;wcX(P3y*@eVhdpxxBvHa>!f`^4E?x$l6DH0;n+kkSfL%gA` zB6J?6(#tyeP*yS)Q~qmHZb2|HTvO@H=IHA^BdWiP_m=J3IhlF9cg|ndW#S&L5qfsHsuO;w9wy<0f5d?Pxt-D6PWV62){lD<7@Ksp4W>S zUKnJ(jI7!@U=Ur9#G6`K39#A`mb+#Y#Y+2j7fEw{*T^2q*ZDhO#Bi?ltzR8Bs`Mf1_N_+Ku5 z;PIw+BXi{0F!Dae*f^TGxcXURL0nU?Q>u8WM3gc8I?bc6v>^Fi*(cyc zQFDu?x|4r?X)`i|JgY|++j)O)P-ml7qu6nTG8h~3e>06^(`8nQGfGYbc%Gk6klxAbK@XJ;qoQE2}@N{mF%37T=yml`TsDS_L|itSxo%5hK3iz%!`1w zMfIRF8N}qLW`TD`rXAl|;V@y0d4~H(y>wroM=t}i?c@551Tal+&cR~s#jEOA{PSh{ zdUQDtb5$z-2Zc-+*4ssgJ#FZipAc^UHt|9}ZM^rlveoe5gqb3PaNT%7BCv>0S(hI_ zKD#RU$fs$sZ`Z2_!SdQh$9!54O{aUo8VrxkbSsrh>*>6V4Ho3&mhq@9;ng0R5B6^9 z5#IQw#+{_D*HIeD*g_0pKybwIm%uJG8db@K`qOC%;*oKBP}2>eS6^l(k^~t=iM`M# z{nJm5FJq#^y;}4!sKtGQ*5WfJfGoxnGMY68eDZ_y6RS5d{1Q^qL^@KPlOSr4*MPz~ zUrS=lSr3kv7mF}|!2Xz1nO~}2YQxe^9h_Dt;l<1OBXiZv4>baNE_AoECdVxPXnQPI zkL#h)jEZsfMnqv_oEKEZ?qDQytb_Y9x5>`kL%r!9BJ}c`b5b#CBF3Aj3 zSM$b>Xw$MPyE%`FRms9AMS-1?^Hlk7Bs~65qJ;I(`=pR_Y1_+RVzvC=ZC< zd2Eg2%i?afYDU52+znb;8eTVZi?Yk!;A?u$qK?u%=DwNbFw1Efr&0(X$UXh$y7bt!Rcl{ZLO!f#M!(C zi;E~Pv{@Fj8FoKZ)c;vK!l$|(1<+PAT^I!}d;+7OCKU&^5G>+a>D(Z-@p1oj4M(Hy zw4PDg`bcfcVE1LFfXU&9eS@d)iK{K+gOt9Xz?TBLj(&lTR!G;`#^oa-84H;{W z!k3x<7HpipE!5G**mZwf1iZ>fcK|CgaAN$h`L3@VdggX5A^8}PUX5Iz-H)~ieDoPr z7Y7V7ah297e!;rwPK6 zj#FK7dmmJd$3006kvM=|HrU#l)ZIBbA$f9T$xyNRKI=673MZ6SLnIO4Z{c4gG#&TS z%KF5b2ITP9z7UsI9F|;b{dJ^=l`4o5J6Gh@-e#tDwf9;*AAr=~GrMeukcmhn(qjo| zht;T~#DqRU1SJ{AZkg58*zLMmH9M3x-JM`=;gMv!7A&k{?gq*M?= zxn#-4i_N8zK?EQQCs<6%sn!XARA`)KQ$@jc(@AL$Leb3cDO*$6rcy9Yy$aKN z1f^B20NYKYaCbPJn<62Tn5`oHn>Y}oq+LFd8wo+v6M(E+^9t2|foa-Th>!ioKi!`9 z8gg|EhgRJ3c14FYM`l7+Mn+Fh4h5qQ