From d33c7d31d00fb47c0b1412dff2d1a2d47418615a Mon Sep 17 00:00:00 2001 From: Paul Date: Sun, 18 Oct 2020 13:48:50 +0200 Subject: [PATCH] inital commit --- .idea/.gitignore | 8 + .idea/artifacts/AES_CTR_jar.xml | 11 + .idea/description.html | 1 + .idea/encodings.xml | 6 + .idea/misc.xml | 12 + .idea/modules.xml | 8 + .idea/project-template.xml | 3 + AES_CTR.iml | 12 + AES_CTR.jar | Bin 0 -> 7634 bytes META-INF/MANIFEST.MF | 3 + Readme.txt | 4 + out/artifacts/AES_CTR_jar/AES_CTR.jar | Bin 0 -> 7634 bytes .../tech/loedige/AdditiveStreamCipher.class | Bin 0 -> 646 bytes .../tech/loedige/KeyStreamGenerator.class | Bin 0 -> 343 bytes .../loedige/KeyStreamGenerator_AES_CTR.class | Bin 0 -> 2166 bytes .../AES_CTR/tech/loedige/Main.class | Bin 0 -> 1944 bytes out/production/AES_CTR/util/Dump.class | Bin 0 -> 5431 bytes .../util/IllegalHexDumpException.class | Bin 0 -> 380 bytes src/tech/loedige/AdditiveStreamCipher.java | 10 + src/tech/loedige/KeyStreamGenerator.java | 12 + .../loedige/KeyStreamGenerator_AES_CTR.java | 64 ++++++ src/tech/loedige/Main.java | 33 +++ src/util/Dump.java | 215 ++++++++++++++++++ src/util/IllegalHexDumpException.java | 15 ++ 24 files changed, 417 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/artifacts/AES_CTR_jar.xml create mode 100644 .idea/description.html create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/project-template.xml create mode 100644 AES_CTR.iml create mode 100644 AES_CTR.jar create mode 100644 META-INF/MANIFEST.MF create mode 100644 Readme.txt create mode 100644 out/artifacts/AES_CTR_jar/AES_CTR.jar create mode 100644 out/production/AES_CTR/tech/loedige/AdditiveStreamCipher.class create mode 100644 out/production/AES_CTR/tech/loedige/KeyStreamGenerator.class create mode 100644 out/production/AES_CTR/tech/loedige/KeyStreamGenerator_AES_CTR.class create mode 100644 out/production/AES_CTR/tech/loedige/Main.class create mode 100644 out/production/AES_CTR/util/Dump.class create mode 100644 out/production/AES_CTR/util/IllegalHexDumpException.class create mode 100644 src/tech/loedige/AdditiveStreamCipher.java create mode 100644 src/tech/loedige/KeyStreamGenerator.java create mode 100644 src/tech/loedige/KeyStreamGenerator_AES_CTR.java create mode 100644 src/tech/loedige/Main.java create mode 100644 src/util/Dump.java create mode 100644 src/util/IllegalHexDumpException.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..4aa91ea --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/artifacts/AES_CTR_jar.xml b/.idea/artifacts/AES_CTR_jar.xml new file mode 100644 index 0000000..6dea945 --- /dev/null +++ b/.idea/artifacts/AES_CTR_jar.xml @@ -0,0 +1,11 @@ + + + $PROJECT_DIR$/out/artifacts/AES_CTR_jar + + + + + + + + \ No newline at end of file diff --git a/.idea/description.html b/.idea/description.html new file mode 100644 index 0000000..db5f129 --- /dev/null +++ b/.idea/description.html @@ -0,0 +1 @@ +Simple Java application that includes a class with main() method \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..ab2dc53 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a81c43e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..48bd1d6 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/project-template.xml b/.idea/project-template.xml new file mode 100644 index 0000000..d57a956 --- /dev/null +++ b/.idea/project-template.xml @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/AES_CTR.iml b/AES_CTR.iml new file mode 100644 index 0000000..bcd2974 --- /dev/null +++ b/AES_CTR.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/AES_CTR.jar b/AES_CTR.jar new file mode 100644 index 0000000000000000000000000000000000000000..6026378e3610f68a8f05edcdec90f205ef1f8f09 GIT binary patch literal 7634 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 BT!sJu literal 0 HcmV?d00001 diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000..74bc389 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: tech.loedige.Main + diff --git a/Readme.txt b/Readme.txt new file mode 100644 index 0000000..c76d688 --- /dev/null +++ b/Readme.txt @@ -0,0 +1,4 @@ +Name: Paul Lödige +Matrikel Nr.: 15405036 + +Projekt als ausführbare jar-Datei vorhanden \ No newline at end of file diff --git a/out/artifacts/AES_CTR_jar/AES_CTR.jar b/out/artifacts/AES_CTR_jar/AES_CTR.jar new file mode 100644 index 0000000000000000000000000000000000000000..6026378e3610f68a8f05edcdec90f205ef1f8f09 GIT binary patch literal 7634 zcma)h1yq|`vo=sDe$e9XUfkUwxVN|@NOAWTw?c7;(&8>fiff@ra4AqI9)i0!{o%;h zp7Y=H-8=8fTKioY$)4G>Gc%6{;1MD|9102wT%kdw2HY=%4~Gb+DyJjGuB0aaR8>k% zNnTD{heK5!HUtNEsyZ^P0$}Huzyz?fjE;7LCU zXle8G-&rvKVzGAuTG?6ye`oz;%PD$)-!kJrS*5J3Y~5`=f!gk_KywEfTW1@fD~F}M zxtm*vJRp8)kW9*}4fZcq86O71ZO632rr;lyx2f_#ojz_=r&+a_*zs$}0)>#GL_DPw7z@AVI9`7>_Xlz>Y z+W1Ms_xvs5i12v7Vp<1J6wl_#&z88_94APkQb9Eqf_qm>>4q&}m^juhgZa#D7Y^f4 zAF6p3cq?8a<7Km%P5Mf5i1NxBv-!S6^pYNcRBR<;L2T);CSK6b1&|4{6JF~bHc3jd zoY_+@Fo=fo5`Zv*YpmGGhzYz8L(5bU&x zfz=voEzueUam{-O!d^`}${u-kB7Su36%KD?sliDFUiPYbBvYeWQ^O^u(3E ze)VzP)Z8ao!@>NyQS74ld6AG{?eyLl%~Q!8`|iZ{eckF#^LINrj*dF*U`l6+mtruB ziA#wlePT`J=b=fO>OG&@@))h4uXG0u4HCad7uANQ8I07Y(zUSlw%ONsV8tBJ$t5bL zbljjn95vH$Mf7*@aB$%We;l>{IqLNPj5+}5^GCoHfQ~>{b9bk|Vy?lZ)+>pf9ZOEC zLWNDO`Q9BB=>Wcv6Bpm$9g6ZxPrXsOICWu;NYNOys9@wHroLP$UVMA5{0!q*-rM8r zi{DldLJ-Ljxq2vCB2gk(&kH7>^XdAUR(y01-BuP@P(|ss5q(oDBj{noF|}|ct)IPo z?778Oe$FmnpTd)hZIXqAchl_X-SUjko>E6MhUc?t=}vRq!Y(C`JK(z_(bkU*6Wlmf zPwha@&SCpq{~jh%>rg8Yf8z$}zP38-arUj}Dt2x1#T5MYLU8MQEpyz1-1cCT1rHjc z2GA?9?&Zs%BXMj5< z`d}V8XCkux6s~=>pA=NUxweu+xO{6(rrvrh*kIz^F>;LA{D zv1hQSCPKszEIaD?Kd7nd?Ujv~q*f*#D!J_@x))mC@Tr@PW$!P*kb<^#%D%=3`ts4a zpGgr4!X%ajAZf}1gnHFzXT1JXX$T4D+0k5imKsQr&pV1QWQ4aR65qdQ#YBX8w)Y&|cMI8bcb zabn;MZqlhmMv^Z^dn$udwy$Tcy@|NoFGBJgl&JUPtJ>aznWN2A$!e$%Xt->~5CNLQ zRb~G*HB}<(+a}XnmKW)C-8(xbvnS6zI#V5{3scyYhLbuhVp;{`;vb(RcOk|x=M5lT zs8>QfLr4^q%_95f3&V^Wy@9|$7cSGbWXZ=7&Q59XwRmtd{0orwM0(7Ae8L@DJ9fjY~qE}B$cqiGiH3opaNdWMI+)C}U` zUlzRGILyEr%W<{A+Ne<;f8HIuKV;$dLdLgzE4(*pRT|8lQwN>5qonA+Q*G_0c(Q!t zlhA7-=T-W>pSMntVt9InTxn2#ua(#4u2?we(bCfHc7n@Ih-)g?7lnSJwCSC>>WXuk zb*-M=^Q>yuP8eE@!>~{B^L0nnw`WD z3Y2rOYum^Y+87cf1j>kQ+k3?aBYG})S)BjITolb8U8;a+Kv3byGYI4C8({ACJ_^$s znss;j+X)%DA2}JxV+~M9_%U1*M)B?T%kYGT)c|$pl_sdojrExV<~noY7-wxNvG^UL zLJV}Zv{+H1pLsbqI_FD2af3$DqF}XAePc`y0cMRVE+JyO1PWLH?fVhFX3Widf8 zf{4S9AIVQHru#)+ot*I#AmBdPI3ua99&mIKImN>}PZSU7UO4qP_)Kj>HsCGXeM;Mw zVf8G6D>|QT-CLti&>;e4pI{^pnxQ5{Y~Mvw;W}Qj9UcBDJrS|9vW9**2<{afSKx`S z-Xb|A%1$Pz3{NG{RiP=#T=~;$v`WFK5+{a@jaJF1F6g$=BxfMTN2vNJ#_Fd>JIa;$ z9apD7z@kdFIl1-xxZBsUIzBi1RpM+5X(SM3k}OJvv@NSa zv5Y|(OuP>!FH3g|LsL$b(l!0@`@hO>m)pQ*L^wFl`?BTdo#?Iq_gaGRpLe3Fxvk@$ zwS$hKKB+D~?6**r#5g4B=7I+L$VMew;YaP`3^SQqB+ zgx>{j;Mkxip9Eee4+n6MXC^Ao4hgx9cKG|f^n3gLQsU(uDiu0wxcC_WWspcR-F&;S zv6{IEG?x^YOs-Wl9sPdo-0=?PeMa7sgujXUk-B(FX19)xf8;K{72!tkguQdxs#eY|{o*N~Ap`?zLY?MEv_+F{ zmClh1OFaB;kjVLo(?fh|5>~WjM{wE9iW^5AWt#vQz<88w-NMq-$-GXWg+Z;!9xh#m z-v@DN-y{h%q;7FNH1cSJfLmmW!)K5Z(c6|&xk5xRw7|?HjUX)%l)fBke6M$k8o&{Y zs&Xe5hcO62N}sJJSw4KhDpQthg1W2=m`3@42fq}9m_?>&$XMMe{bl=wsAJ=v?4W;lN>u)$-t%xp^G?-;+X1aaf2r)f<=f9!_|uSg z&x^GOWZy$PkiJ3?SlQlnIS)g8Ww^*qcy^4O$*4HovRX3_Kepl@aUhY&P<*#|mZ;gs zErzC999?}q4ZxK`@?cxd2-PJ9R%o)iUysh&g*)w?!mU&=(>r=S4_gJ5`Ae}01>tl* z?j8D}^#jJnOd=A&1(cq($-rRxWV9IFY-A z%{oK4!`Yv2O2V7ISN6jFZnosXS(yu$@6)0mT_Ff38l>zDIddF5?XjJrkUkMS)H z`Vlu1^Rla?d-;fXFS0(yJ(`4}CS8RwRG6*G#WOb^t46$iTPx!=ePpw4=&w++epC~4 zIH8`(aP2F#S77@sL~ReOt;5%Xj<>@i7@$N4SVx}5kqYq-|C}ZDLqCUXA%)m31L8xN$DY|~PQqMux*;X!jmSb%)KG@=ggTvDE zeUp8Q{pHS~w|6=>IU-L7vBP0>&foklbNw0*MIg&ZI|>SK9vMXaxY9s~AXSqvN-x0v z;<(34Kp(4f_#V@E5$p&s*OH-0snKH=w1YSucjaris*XN-i{O7`Sx2gU$0V~-58l_~ zPuS5t0)ka0xA{qvl)^R}D)H!d#n}MeL zNROtugg%4UFLvX(+tFkYYy=px1nO5V(5BE~Np^}Hpe+r8aqy5TUCL@jRaF&alpmWv zE~A6lg=ydrLY#1VKYWkOlkd(V-5#2sNSSM_$9I{FaO0ed^$E<5ImIuEL$5Dj`!F}c z;>|73Z+)VjoL%}(&LXp#)6XB+e&OdKyy#?LX^wRqEKgkXdtc zmHOdza*DQKbxGJ-;L{V!+E8fi1cCsCViiLTR>Y6zIB#~ZP9`bdBmuIk$rDxFhj3T@e?iL!nOcA zPgcws)<%V58nIHLHoBIM6}@Ms)wjZulNDD`lbEF^qc1K)>a!suW1qb7a}JIW|?5L*K@d6j@4J}GyRHgUq#jXRNaK^vl;P$$nlk=4RIu{f|$#jfWAmJ=b{)sYh=GE<0= zr3qd<4_?gcsaP1@vN)^9+bujc4)iB^Yi@0#?uZyu`VCCSKKru%;>lG7rGPos_kAV0 zr2Tcw%5<+au!$`OA=>QQ%XI=~2S&nM;CmJnWXB{59PB}nzC)2PbUF9fTDu%F5mT-7 zB6@c)BrA)aw*&nWCI3LTgh|CbA5@bp)1ED7N?l5u;1iREg(iA=dklBM{LxF9+Hreg z72ns)t-@qlVtYWwJN?$LUNbD5M#CdliPZ2L6vo|Ys+*puQZN!Gq|LIdY%S)U{7U5l z)sOOYJuf@Hu)WAbjvpLogW8-m<#N(ok#c*oACMHvfKt>NyFoyk74PIXX?squm^e9G z3o{toJCDV6QJV9f!57goP$LyWL^M#dNb+}LM zUz0q&LuD`gf-0vFJv=#FP_U3}vQqPy9kqHsHtqV8w&`34kWOL!Qt_DglGsQ?^trMd z@v?_J;rB_+5^s#;QHxl)Zr}!zvT%lzDN9ak&j=cQdUvj7cUYv=evxZRRUd&AMIF*Yll8-#QGVb1hjG$;g< z%{-%`M}lR#slebzly^Z^%{WlVTeq)nC%&0u%Gt&_Uj!97EFbR zfE5cSjmzYzj0GDaE{p^LSU$Z_nf$ytl1=(UBmJ_rZl%BTOV5u^CZD&2@|YrSs82oi z{3a)^_4>U`z(V4q)pGtPYnb|HDAQB^%-wioj8G+s-=Lc4E4x>Z-`ZWSPx1}hiuu^6qNGQEGbJ-@3Fq1KKsqQb}_%gUdZS{x?06bd&0b>|AD zI$SXy=@X6P(m5_EEjqIwnl{6Hx?K6S0p6`9Apj<5u*`91k!a zdAP#7V3sFX;YK8bp1YO(etGx^BNw=kyMD*}aVr3^({;TyS|Dj*CrM{BOVjLRh7TXQsc0f{QrSH$t*4U-3LDFuJT`CaQD5V`Dtz;Zxyy!xcM}UUz^kp{NF> zS$I}S)DnB+QsGx>CSTU#wdn&KHVIMqolPVSzl<%M@Ah4n_DF#3#0sDHaofi@6`3D9 z-Ql10juI;T#-2$H)!~usBxIoHuMl%Lzirk}s&2P|o>8jQ(C7oZ7lQLGa^UF0WUu7f&D zV`EleArCb+d!ZIM1a+NOoyP%3gr1Xb~h3=#H9FrSyvA@0-NX-qxoRoJ_}_aICZ(R z3kLhrnm}A=(3j(eL3$*jQ0RHL|oP~2_Yz+XPGea^@{v{RwdO2n-0}T z4CeZlx&Hx52WK4EQ^$40f`x6ZKFRopuLY+f4Q6fY{@UTVOu;uyx^2hFU3uJNhWFk) zB8%*F6ApLHkNzw^bttXo`CSXg?~o;QD7(^4c%g_>7_EQBSRZJK7+z%cbVFTd zyeb8&UI@KyZ0%}X>?*}wy6HhswxeNx%ep<7%e6^i*sLGOTE{0QtvWfe%R(7Etof9; z65sbkutM}zoq;z|lhe$=B5LfRZ7h&L2n#ehXryN0ky4vGl;KrcE;Ldmh_kt)1ACpT z@8PXWiF3k$b26lQElPsBYbD4Kfb#Y%JZaC+q%C~T!Sn~f4Pm?C;PLS(O2-#Z46i74 zF9<8M?;TufsNy_TIm-vi!u)9??7O;Cq-1wN19@}>XVY8G3n!p0nechP?VcEW3zKGW z|B7x$dw=eUu=<7oC#6#z`yE;N^^)?1L(kLx(QVf{p)r~krFj89&YY_ZwYE24eo82> zks7AcL}H&PUYz!1&sT3l+tDRCY*zI;N6~39-=}3$&IpCw3c;qN-9gq|bWOCnl2y#S zM)Eu-=KzNr{VTq=DcL_T>3`%6NI;Lp#5&$|O2Lw}R}ZfkVX@Iaey`yr#mR)N(Ba?& zp8PsP_$MAg^H+hcWN#0&Hn&#* zo=B+&zG^pQj-+H_Ght~jeqlg6Z?A+0{dPji48VS_wj~MkL)fEBXn`K zFq0T4WAoL%POrJ8qL4F1*FLLmNDUh=ZagaFJ+R0fF4azm`0Dikp_%MVY z^4%r)iS(FAVJDfsYv92!6id!sZ%Ij7L|cCO%9UonGTnw@sbVOM0=>NF4wcrc8Wg&} zCjosW`GM-{oL*YEtPQ+bh}O7F8Ju4eNlxdVc=UxZuE!&#n0l&fJ*3xq9M220z-TJ7 z%B?Pp@1Rj!%Z6KKsbRdzILFs|o&2E_nucs~U)=l1|M%%MJOV!4AM@!4DC<|4=>f|6 zJN*Y*`UkM30f0w9gZp<#>Zg{#`{jSM{5P?OM(igQ-Y@?Itp45717!7+KHo2Y7x@Wb z{oLxqk@*$oc!02e(&_#3Z=(MWXgzGLlEm;9>o0W$b? zaP|Nh{3O=<`1~&_{|+Ghs`_E_X8KD{{4ja@NfP%+;@?#NoWuR!qtLWuvg_g@oV1Az4SK?eQ)IlT|cAj!kq{{uam BT!sJu literal 0 HcmV?d00001 diff --git a/out/production/AES_CTR/tech/loedige/AdditiveStreamCipher.class b/out/production/AES_CTR/tech/loedige/AdditiveStreamCipher.class new file mode 100644 index 0000000000000000000000000000000000000000..86b6bd9f6c46514b94cd5599b0cb05e2db8a4d3b GIT binary patch literal 646 zcmah{-A)rx5dLO&>C##RDvIDD5);zWguUQS(8MLt7z$pL^agHDx0CktXSZ1njlDI# zfUn?<*WO^_1rOkx@CwAJbAU7J+9y>mIN1JL7&NCfqduT P{DDK4LXi-5kmvsa884A_ literal 0 HcmV?d00001 diff --git a/out/production/AES_CTR/tech/loedige/KeyStreamGenerator.class b/out/production/AES_CTR/tech/loedige/KeyStreamGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..e7a589a440b4226025504a20e7afce4499d9ea63 GIT binary patch literal 343 zcmah_u};H441G?n4TRD{g~W)uwG3p3iXlia5S5{*`z5u~tI|X|u84jX6A}X-z(*l` zfU@G@J^9(P{rvg${sG_;!x#a=2&#t;x`d;(e%48)>oR%B*IYP4cWP?mt_k6IvWT!p zICEUAlB(gQDLJ|4-P~E$n>()AYS&nTx@ne77-XjA*>;n&ebjj+$}npRT`jaVKK~Py zTbU=qDEnvb72%|0H{%!AE=_k%#;S2TNeS`1+1i3{jbC-z_Oypxcz0@qNKE?(K;E|C nzGR6o33txlK(9aLSkRY&5C?+2-v;4BKmmOWM3uJ*1~~o(Q^HP{ literal 0 HcmV?d00001 diff --git a/out/production/AES_CTR/tech/loedige/KeyStreamGenerator_AES_CTR.class b/out/production/AES_CTR/tech/loedige/KeyStreamGenerator_AES_CTR.class new file mode 100644 index 0000000000000000000000000000000000000000..9fd7c973945cb076a521e668d4ee9f03584790b8 GIT binary patch literal 2166 zcma)6-*XdH6#j0KvT3?$x1lXal>VSVll}-;1hf@x+JccbR8lLYC~P;^bYZ*6Y&Q(? z*=J|`3qW4_;tMlU7;*5;2jBf?97p`_W}CKy4!-Q&d+#~l`ObIFJ-`3`^Gg69pprlY zQ4KL2Z8#**?@MbV=Tv3cuE^X~*(mv*G&iqES9+#j^#l%0+pg_j5{QmuR@xCqyM~00 z4(I}>-{5_FX1;WLcKNzM+m>(oQXsOHR~Vf-x)eav@;$Zh){(+tfex$gdD8Xs4P`6} z8hQnW?wa?_oMXC`T)}Z<#dK!8N_~@N^A9Xp^X;k|#}R>^f_vX|?DBx^*6RL%Bi)L> zkw6dLQpp|@=p9+ugJPn#TbatNB=9!g(QsTxKL!MheI|`9Uv3Jto1SMjtZJMQH*IA*D-;dz~KWSXYJaCWF0#y(l59y zgKJUR%>FcX@q>^pu1&`&Ri3jt-o+$)!3x28|J79Scu&W9To8zcw*nYDa^AwSe{Nj0cZua((3CDlH8r)u5P@Ug(affVy* zdC4r7SM91&2io__w?Sx@zno zpUkX#%bsaTMZ2KmQw5^iE{m*sbk?W%vDs>ws&_5et}NC!*QK{?t~)$QEmSSjSus6Z z?Zd;EzhQ5&MhpM*c~Qf5C3hea^`wf_afN+#PqJkr_I(;Kp=Q?!96eY)rq;Y6PBKVm z(X54360LlMB& z$IbRF$_K%-2}V?NM8rn&8CF_Q%CMu~SU6_cwiyl>cj$@mz2{mVE}1HH=^4Poaft zG8=sg<4NGVz;BA^V4PThtaFGZvB(p>iGU)maVLoR8BrDbZ;YgTZj8M&j7La}a(Rg4 z3-qj}`kvwFuVc~dPe?`$<2lkVFt|FJI`IrAi`mr3b7Y_53~$fG#&>W|{V3BNTvRSv z(?xNMLU9`+FQ6NpWO=W8RRv_P~!|fv9H?cFr-pO zK`TunYRrV1e5aJ--P!1L+Atmm+9cDH-FWo~Nrp|Pqs!aq3jS_Q#_oK-{N!69wqO0R zSJI{u=a|QN7W4v+V~VAjMi%FAh5=RU^)X0<#L8@KmDSmhmdd{avA+-z>5e~xlqHWM G`1&8R_2+N^ literal 0 HcmV?d00001 diff --git a/out/production/AES_CTR/tech/loedige/Main.class b/out/production/AES_CTR/tech/loedige/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..1ac6fbb9850ed6fc218bf87c5d3c35b93fe38726 GIT binary patch literal 1944 zcmaJ>TUQ%Z6#fo`Op=ZTLb;^1C5X03X*vVF&?eQI0D+WnvB4-(#bI(xhR!8xX2K%A z>WlsxeE^np`Qn>D%H=+p04qYxS~+LV*=O%>fBW|LKY#oQAPXyoKJ-fn$rwPGVQ61F z&=ga%>&nL7KG%JQ@C(B>{LdKrQ|W315r(8XtIny9)W_-*^{G0qK2x8od9|P}sEg{7 zTAWp5h~b(9S;hyr&Jb<+hN&#JtR}-qgCACW*Rbnzdu^ZRT~})}jHSvKz=1fI-YG~J zVwez6Of9 z2qqb(i``%Hy&p>wrWmGrusd{12b-F!S={HYARI#y(}L&63 zLm^cP_!evAf?hNEm!(tXM;*DMOjV}>H7Awy}%RJrTv4fC&ep2y9W zT~AtupA3SR2?G9O^1!i@TkU4@QtGlXJjJ|(XEL56+s&QQi%0%91-faILs#XEA{fI9 z8J~jcJXGsc>X;xJc;D%VZdnSr&jnUkLV@9)&-I34I=p7oxrlMVaGBfO)qKa@C5Ly3 zWDI%qi)Beh5zEvRB2N`x^Qo33f(r6j!Yc`@GRjz^Qs}Xruhk6SIN$-mSy4*d?sNvj z-Bh{f{bgTr0waPAhL!&f{bkKF7MYUOG`YoX-{3A~Dl6d&>ZcyuHO-(fhZdX~F&iu! zHeYX9d)(d9_Ds5ommOU*tD0+wbN4djHw=$**ULay%8@CnW0CT4IUDIJ$u+kwl&=s| z6~5&(U;1_^RZ(h%U~DiiIw+xUk;s_n>so-*mf~OzJ*OgFfScy1LiQRozM! z8Fd5Gg)d&621hT+_XnFaV@roRZ~BH~dlL4~in~*e=Ms8VaayjjRAnglTVqv><=_FnM3qiae1)&c2r07_gy;8$iSGVw=8ctU%EEaigFBfLCCe)|{;*+?QXlL#GQF%e0GPp~2s*1HOHzEHSe@CtGA z>^d*l*%C4(atzn8YtMVMP?) z1Wd7wZ|D@p&)A_mDtNT`KA8Ukw-e}x literal 0 HcmV?d00001 diff --git a/out/production/AES_CTR/util/Dump.class b/out/production/AES_CTR/util/Dump.class new file mode 100644 index 0000000000000000000000000000000000000000..515d45c81db52a52275e54311faeda2261e5cb8c GIT binary patch literal 5431 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 literal 0 HcmV?d00001 diff --git a/out/production/AES_CTR/util/IllegalHexDumpException.class b/out/production/AES_CTR/util/IllegalHexDumpException.class new file mode 100644 index 0000000000000000000000000000000000000000..f6d121818ab000fd654f040c3ebcd60c3d44a367 GIT binary patch literal 380 zcmaJ-%Sr=55UgI;U0tJz3wjEIo_v708wrRH6c#U$+$Za>j?B)6aYpi6o&*p106$9X z(TJj8ADXVBsP3-Ux0e}!Bjgz(ETo8ASVThDxfhS3r-i9{S6a(T=o4G{S{ipgE#<_i z#t@QYWt1BbHg=0|{m@xus{Y<6#S)?Gozh<(mvVaM>&Xv`__Vo|gm$5fy!Q22+8Z&} z%;ZH=3Oy251w1EXcc&f*Tg88-eFCv4|9cW48#dmS@hk%5{mso uDBPDB4VVplvVZUldg3WU#ytcGtg>hw6!umVC_**3a literal 0 HcmV?d00001 diff --git a/src/tech/loedige/AdditiveStreamCipher.java b/src/tech/loedige/AdditiveStreamCipher.java new file mode 100644 index 0000000..f445b56 --- /dev/null +++ b/src/tech/loedige/AdditiveStreamCipher.java @@ -0,0 +1,10 @@ +package tech.loedige; + +public class AdditiveStreamCipher { + + static public void encrypt(KeyStreamGenerator ksg, byte[] m) { + for (int i = 0; i < m.length; ++i) { + m[i] ^= ksg.getNextKeyStreamByte(m[i]); + } + } +} diff --git a/src/tech/loedige/KeyStreamGenerator.java b/src/tech/loedige/KeyStreamGenerator.java new file mode 100644 index 0000000..6d813bc --- /dev/null +++ b/src/tech/loedige/KeyStreamGenerator.java @@ -0,0 +1,12 @@ +package tech.loedige; + +public abstract class KeyStreamGenerator { + /** + * Berechnung des nächsten Schlüsselstrombytes. + * (Entspricht einem einmaligen Aufruf der + * Update-Funktion s und der Extraktions-Funktion S.) + * + * @return Nächstes Schlüsselstrombyte + */ + abstract byte getNextKeyStreamByte(byte mByte); +} diff --git a/src/tech/loedige/KeyStreamGenerator_AES_CTR.java b/src/tech/loedige/KeyStreamGenerator_AES_CTR.java new file mode 100644 index 0000000..3d1bf53 --- /dev/null +++ b/src/tech/loedige/KeyStreamGenerator_AES_CTR.java @@ -0,0 +1,64 @@ +package tech.loedige; + +import javax.crypto.*; +import javax.crypto.spec.SecretKeySpec; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +public class KeyStreamGenerator_AES_CTR extends KeyStreamGenerator { + + private Cipher cipher; + private final byte[] state = new byte[16]; + private final byte[] ctr = new byte[16]; + private int currentByte=0; + + public void initState(byte[] key, byte[] iv) + throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + if((iv.length!=16)||(key.length!=16)){ + throw new IllegalArgumentException("Invalid input length"); + } + System.arraycopy(iv,0,ctr,0,16); + + SecretKey secretKey = new SecretKeySpec(key,"AES"); + cipher = Cipher.getInstance("AES/ECB/NOPADDING"); + cipher.init(Cipher.ENCRYPT_MODE,secretKey); + + System.arraycopy(cipher.doFinal(ctr),0,state,0,16); + } + + @Override + byte getNextKeyStreamByte(byte mByte) { + if(currentByte>=16){ + try { + updateStateBlock(); + } catch (BadPaddingException | IllegalBlockSizeException e) { + e.printStackTrace(); + } + currentByte=0; + } + return state[currentByte++]; + } + + private void updateStateBlock() + throws BadPaddingException, IllegalBlockSizeException { + incrementCtr(); + System.arraycopy(cipher.doFinal(ctr),0,state,0,16); + } + + /** + * inkrementiert den counter + */ + private void incrementCtr(){ + for(int i = 0; i<16; i++){ + //falls das Byte die volle Länge erreicht hat findet ein Übertrag statt + if(ctr[i]==0xff){ + ctr[i]=0x00; + } + else{ + //falls das Byte nicht die volle Länge hat endet die Inkrementierung + ctr[i]++; + return; + } + } + } +} diff --git a/src/tech/loedige/Main.java b/src/tech/loedige/Main.java new file mode 100644 index 0000000..1e7e567 --- /dev/null +++ b/src/tech/loedige/Main.java @@ -0,0 +1,33 @@ +package tech.loedige; + +import util.Dump; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +public class Main { + + public static void main(String[] args) + throws Exception { + byte[] key = Dump.hexString2byteArray("0102030405060708090A0B0C0D0E0F10"); + SecretKey secretKey = new SecretKeySpec(key, "AES"); + Cipher cipher= Cipher.getInstance("AES/CTR/NOPADDING"); + byte[] ctr = Dump.hexString2byteArray("FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE"); + IvParameterSpec iv = new IvParameterSpec(ctr); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv); + byte[] m = new byte[35]; + byte[] c = cipher.doFinal(m); + System.out.println("AES-CTR-Verschlüsselung mit "+ + "Cipher-Instanz vom Typ AES/CTR/NOPADDING:"); + System.out.println(Dump.dump(c)); + System.out.println(); + KeyStreamGenerator_AES_CTR ksg= new KeyStreamGenerator_AES_CTR(); + ksg.initState(key, ctr); + AdditiveStreamCipher.encrypt(ksg, m); + System.out.println("AES-CTR-Verschlüsselung mit "+ "KeyStreamGenerator_AES_CTR-Implementierung:"); + System.out.println(Dump.dump(m)); + System.out.println(); + } +} \ No newline at end of file diff --git a/src/util/Dump.java b/src/util/Dump.java new file mode 100644 index 0000000..2aec87d --- /dev/null +++ b/src/util/Dump.java @@ -0,0 +1,215 @@ +/* + * Stefan Heiss + * TH Ostwestfalen-Lippe + * FB Elektrotechnik und Technische Informatik + * Quellcode zur Lehrveranstaltung Datensicherheit + */ +package util; + +import java.math.BigInteger; +import java.util.Formatter; + +public class Dump { + + public final static String NL + = System.getProperty("line.separator", "\r\n"); + + public static byte[] hexString2byteArray( + String hexString) { + // remove all whitespaces + hexString = hexString.replaceAll("\\s", ""); + hexString = hexString.replaceAll(":", ""); + + if ((hexString.length() & 0x01) != 0) { + throw new IllegalHexDumpException( + "Odd number of nibbles!"); + } + int byteArrayLength = hexString.length() >> 1; + byte[] ba = new byte[byteArrayLength]; + for (int i = 0; i < byteArrayLength; ++i) { + try { + ba[i] + = (byte) Integer.parseInt( + hexString.substring(2 * i, 2 * i + 2), 16); + } catch (NumberFormatException nfe) { + throw new IllegalHexDumpException( + "Invalid characters " + + hexString.substring(2 * i, 2 * i + 2) + + " at position " + 2 * i + + " (of streamlined string)!"); + } + } + return ba; + } + + // ------------------------------------------------------ + public static String dumpString(int i) { + String retString = Integer.toString(i, 16); + if ((retString.length() & 0x01) != 0) { + retString = "0" + retString; + } + + return retString.toUpperCase(); + } + + public static String dumpString(byte b) { + return dumpString(b & 0xff); + } + + public static String dumpString(byte[] data) { + return dumpString(data, 0, data.length); + } + + public static String dumpString( + byte[] data, int offset, int length) { + return dumpString(data, "", offset, length); + } + + public static String dumpString( + byte[] data, String interBytesString, + int offset, int length) { + if (offset < 0 || length < 0) { + throw new IllegalArgumentException( + "Values for offset and parameters must be " + + "non-negative!"); + } + if (data == null) { + if (offset > 0 || length > 0) { + throw new IllegalArgumentException( + "Specified range not available in data!"); + } + return ""; + } + if ((offset + length) > data.length) { + throw new IllegalArgumentException( + "Specified range not available in data!"); + } + + StringBuffer sb = new StringBuffer(length + * (2 + interBytesString.length())); + for (int i = offset; i < offset + length; ++i) { + if (i != 0) { + sb.append(interBytesString); + } + sb.append(dumpString(data[i])); + } + return new String(sb); + } + + // ------------------------------------------------------ + public static String dump(BigInteger b) { + byte[] data = b.toByteArray(); + int l = data.length; + if (l > 1 && data[0] == 0) { + System.arraycopy(data, 1, data, 0, --l); + } + return dump(data, l); + } + + public static String dump(byte[] data) { + return dump(data, data.length); + } + + public static String dump(byte[] data, int length) { + StringBuffer sb + = new StringBuffer(78 * ((length + 15) >> 4)); + char[] txt = new char[16]; + + int i = 0; + for (; i < length;) { + if ((i & 0x0f) == 0) { + sb.append(alignRight( + Integer.toHexString(i) + " ", 9, '0')); + } + + int temp = (0xff & data[i]); + sb.append(dumpString(temp)); + sb.append(" "); + + if (temp < 0x20 || temp > 0x7e) /// ??? + { + txt[i++ & 0x0f] = '.'; + } // if( temp == 0x0a || temp == 0x09 || temp == 0x0d ) /// ??? + // txt[i++ & 0x0f] = (char)0; + else { + txt[i++ & 0x0f] = (char) temp; + } + + if ((i & 0x0f) == 0) { + sb.append(" "); + sb.append(txt, 0, 16); + sb.append(NL); + } + } + + if (i == 0) // empty data + { + sb.append("000000 "); + } + + if ((i = (i & 0x0f)) != 0) { + sb.append(fillString(3 * (16 - i), ' ') + " "); + sb.append(txt, 0, i); + sb.append(NL); + } + + return new String(sb.toString().trim()); + } + + /** + * @return If str.length() < totalLength, a String of + * length totalLength is returned. (The original String + * extended by specified character from the left.) + */ + public static String alignRight( + String str, int totalLength, char fillChar) { + if (totalLength <= str.length()) { + return str; + } + return fillString(totalLength - str.length(), fillChar) + + str; + } + + /** + * @return If str.length() < totalLength, a String of + * length totalLength is returned. (The original String + * extended by space characters from the left.) + */ + public static String alignRight( + String str, int totalLength) { + return alignRight(str, totalLength, ' '); + } + + /** + * @return A String of repLength many repetitions of + * specified character. + */ + public static String fillString( + int spaceLength, char fillChar) { + if (spaceLength < 0) { + spaceLength = 0; + } + StringBuffer sb = new StringBuffer(spaceLength); + for (int i = 0; i < spaceLength; ++i) { + sb.append(fillChar); + } + return new String(sb); + } + + // ------------------------------------------------------ + public static String dumpIntArray(int[] array) { + int nosPerLine = 4; + StringBuffer sb = new StringBuffer(); + Formatter formatter = new Formatter(sb); + for (int i = 0; i < array.length; ++i) { + if (i != 0 && i % nosPerLine == 0) { + sb.append(NL); + } + formatter.format(" %08x", array[i]); + } + sb.append(NL); + return new String(sb); + } +} + + diff --git a/src/util/IllegalHexDumpException.java b/src/util/IllegalHexDumpException.java new file mode 100644 index 0000000..4e26cdf --- /dev/null +++ b/src/util/IllegalHexDumpException.java @@ -0,0 +1,15 @@ +/* + * Stefan Heiss + * TH Ostwestfalen-Lippe + * FB Elektrotechnik und Technische Informatik + * Quellcode zur Lehrveranstaltung Datensicherheit + */ +package util; + +public class IllegalHexDumpException + extends IllegalArgumentException { + + public IllegalHexDumpException(String s) { + super(s); + } +}