From 2fafc52defe6180e66f1e8d2a38d3668b99782cb Mon Sep 17 00:00:00 2001 From: Syrone Wong Date: Sat, 13 Aug 2016 14:28:09 +0800 Subject: [PATCH] Refine encryption(#655) * Refine encryption - Add AES-CTR, blowfish and camellia ciphers aes-256-ctr aes-192-ctr aes-128-ctr bf-cfb camellia-128-cfb camellia-192-cfb camellia-256-cfb - Merge the previous PolarSSL and MbedTLS - Switch to MbedTLS's cipher layer functions - Add workaround to set cipher operation(encrypt/decrypt) Signed-off-by: Syrone Wong * Add function to get MbedTLS cipher context size and drop hard-coded ctx sizes Signed-off-by: Syrone Wong --- shadowsocks-csharp/Data/libsscrypto.dll.gz | Bin 60082 -> 78101 bytes shadowsocks-csharp/Encryption/EncryptorFactory.cs | 4 +- shadowsocks-csharp/Encryption/IVEncryptor.cs | 18 +- shadowsocks-csharp/Encryption/MbedTLS.cs | 48 +++++- shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs | 169 +++++++++++++++++++ shadowsocks-csharp/Encryption/PolarSSL.cs | 65 -------- shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs | 184 --------------------- shadowsocks-csharp/Encryption/SodiumEncryptor.cs | 10 +- shadowsocks-csharp/View/ConfigForm.Designer.cs | 9 +- shadowsocks-csharp/shadowsocks-csharp.csproj | 3 +- test/UnitTest.cs | 16 +- 11 files changed, 244 insertions(+), 282 deletions(-) create mode 100644 shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs delete mode 100755 shadowsocks-csharp/Encryption/PolarSSL.cs delete mode 100755 shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs diff --git a/shadowsocks-csharp/Data/libsscrypto.dll.gz b/shadowsocks-csharp/Data/libsscrypto.dll.gz index 22f1698dd771428ab828639aa301c14c566da66e..916a8d651bb02376e12cf2e4b62d42c633ccaae4 100755 GIT binary patch literal 78101 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

(jTJ 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 M9ZD`#-~eO-05f{r!2kdN literal 60082 zcmV*i>P;0NiwFoZgQ-^p0BmVub8};Id2n=ZE@W(M0PJ0Vd|Oo&Z}!?PYqBM<3PlR5 zrs`xBJKuyNLtERh>KazuvQ1ewP((!3IafrbN-32*FOjN6ix#aqwQAL(9Tx1gFR4jr zN1JT3YiEU`b!Jd8V|DGey81omzL&J!0Dt}AAMOKt_vg9ie9yV}p8G5Fyr&^U$;ima z#Q!rh85x}!@=r;|%m1-jGBTDfe|%|1$Koen)oH1G@>Lse{ou#*ckKM=2X@}{;r#dA z^pTHzbXWd+-=Dv;`Xl)t{78QJ`VILX{^-r`zkJD(>;i+v`fW8A+TOOT-2DI7-}yti zg}K3&ct`Hd#HRV*FC@7i|;p(Zs+gCZVP{xxwG+o z=%(@VY>uDD@ppajeYaA3rYu$NjEqXl!i-gQKiF)hjbOA3gK9+pQ;+(0@RopqkYpt58 zwkPs2Fx2%peW88nKbyp{`V+f0iiP#vyRH-0W!68jYq2OPxPB&9*OMu(vm*X#u~3xQ zmF`_j9m_MqmW;qVEOiM>_1|XhuqO625y{L>JDPSZNAC+S%m~~e^S4nu;HPf<=5J+o zTb$}|H23s|&EllyZP#j=#o_uH$GwA4saRCs?YMUzLUo_DW;pH*BD6_VTd&?>zeAn* zM5ZWl&cwu`O&d6zL*am@>w1pma?ICN*OROH+Qkm5R&5pQtzfw7wkxjJJRN~NOX90v zphjkP*l*jqA@O-cP&(q~5upBr<6Z~x;AyWrlkd1^5NUzZ86!8aVMYlngI5oI!g_Vw zQTG^)f6Bfp_KK;`nRSaUSAGT!g<$Mr8^j zqNWA$Br+~E6E8$!v%^_|#J3x1?;O3#)4B6IfD+k9N|S1CY1P(zjS->VmN(O;mRviA=?*c5lByc&61S z6TkZmr2dmHgji?BPiJPft54pL2pfsg9?Iw116jhZ50Vw^dY@QNCbxBypayc4W29(q zni@~@E+=b4emn<6DScWiu9y6?}Dmm2ii zg~ys$ejWE_E|kufnZBcsAa~!U+qT?hN$mYHP)kBkj2#Z7WNb>P0(HS`n7aME`qujW zyUu@X3w4KJI3oiFS9cT!rFlX1<3Ma)d5;|;Ih+>9c^M98snc;@i4)&^eDm=w!nX+D z5`0UJJ3dod1&x$c`9kygT?H55U&SX;V;d`XDi{e z?DH>&&(?F|v*FA0@xjn&f9ygO-YjaY$G^LM+l%p&gPL>rAK3m<{NHpVl~2cOuX|Da zhQ5)d1HVPTz3U3#cj51M6al}h-o11Z_^q;a&qPY{&U?j{TO%d;-+$ob&5@FV-Rn>N zDpGPQ&EKik&&Kzs=e-nvrEmdc|J;!tKWLr^xElb4^S0Y>%cx5H$e)q%xP?crhQzPH zFnW?0Ol)M*P9%y$iAhAZKSrJps&1QwxEv@h`c!&M*aWJU#FGuP^?5t#v&{c;`n>&| z`mFonIrVw*%j>f?^F{UXfg_7=gFfni@_}DMA3KkKWDWH3mcOn4F7)x)cP+gh`ndnr ztgk~KKN_xE4t-qoQPHAm9zK4I=2YIB?E2CN{XZD2t6$PS*BJIW zHdQ-53IYw5qpfP zpuTlBqW2e!Ar-U1zQoO+FmRpwXOnEolF0r-+Jw*NM6%+V`ji!)Wxqq`wBOJd&S}3_ zyuAH>4AT8m`nEpNbsYMZMxA^0_j~V!zNKyFubgT;1AR*qUvcb;OSVJb($b6K_Z;~# z^eqj(c=_#bT?u_lyD$0B-qO?1w>1BXPrm9i%b;)S1ybK;NBCFucg?-j8(4YwTxKfo z)~jYK@3ObdQeMN0XzzQ~hW0wAj$53w@QYX&lu|}YyZ+Yt{nb}RN@a&Hl^woRcKA}+ z;Y($QFO?m>RCf4M?(iX0gBOpqhTKyOYaJuEu-=x(~A*7xVr3H1t1)Ieu z?OJ^jDUL_qc_#3#Ovj^dKdnDwwM7w_HUod>fOh|$X%xJ+?u>J1TeUW+$pC=aL6G%{70cz3JD-Otza!l`CqO_NM-QpB|N=Mc-rR^aebUj;* zTlO&XecGNFB|Wh~jf(+WpEBqQka$`kN!bIgzQr7}Jjn3}$6uO-31&g%n1a+KecQ{4 zhd6l1m?0jfh~Azt$qATL?9;3${A(_g;Gp#gEk~EBYk30W5Hy)i_;g&lmW|wlFTA-g7yat zHpZBZaVkE5ufaxw*{C$xureDH1{+V!K_ro8CNY~Csh;B+i-x>3Lo%h$^5Dd5hWchR z1g)wFNoFRPnJSYRJ2NxRDxx;P4ciL}&Sz!9U}cK!WqcMR6U+z`krwk{@1m&B*v1MiR^jRiT_TBV)`6r$0FLB8&i$q_mbk<(SgG z1#Ezc9AaWp>}3jjSk;HbKnjxq+g@&G?<{P_C_yrIQW;cEi3bygks8WK8)<;~ z(%p6|!7u<0a=}4ecRpFhaSIy>wL7aVF{}*Qo^}nm9_BWOmBV#YC60UgPtVNoQdiqM zLa;nMM1R+h(ipV-Zr%at%Hk1i{c15Rt`xf7y+jW=)FEx}K}yy|zn;iehje|Z2B zY80P@f)5i>h7Hr%J`Htk&)1rHgdsAE^j@196Q9k*cEH0tx5(uaIS~PC_JP+%mbF}Apw@< z9mOIJ&Vmle2u^ee2Fr_)Xb~w|#1M^&E4|`j=BlDV=@)XG9MtZ=ghnrjCc+R=jcI{> zlo6gI91l2Qu_wu~gcLEXe3?c-h@-?6X@LDO$CO|X#|%OXOesZ@MB~wiNxAlnP&jGu z2W!=2htM4Y`vZe|(9ltgb%aldB#r9NWy>n+u#g@8u!uthWy=Z!_@|+_%o#&(1dSoi zcv>8tzG+>Fy)3~1cvl*DD2IrLdhCwiyI$=j8Z?^{XD!HI!kG5jKv!_ zw3SH3(gw++b6AO!Y!6NtIvYyqENt7ulCXLVQHhKpW-`UwF>wHPr|n@9JDjW-(JyT; z4E>O-2gnGhe7c9p%Ik`h0kL;T%3&ut4v_&y3Ry*N~DM>MoME7tg#8!7>hMUy5gFj&cQ(V@IHfqMWPRiBcU9K&NV=_Ps*kYnqr}Q zm`YOCt%hXISsJ<_SA?bN47o;Fk|9G?<0&cAa&4Tgsxd=VQ?pgYBJ4?|R3$Yp&AJ!L zIsopWsgSmZtM7?25y&M)3Q3W|5J@>C?cY?A{(QCytCPxR?I_n3YxncSVdzOjpu&_q z5w$*?3>j#$Ug z$-_JnCiSD)n1_O-z+M=na$G!|m@VA1iVA;H=_j!QF=>XmBw2_hGkROd&{Q%#zK5ig zY3a76btL);L8047!sM0Kmy|H#3PU$T%CMZeh!D?&at^zO*0GLzicgYQ-JIV; z4TZE)t5mP0G)L4=a3B{(&4E12CxP)4hx08Tvx8?27hnOueH(3>PTfkY6?46G{RUbZ ziQ&!S6z!(pM_#z{cnN)?O1SQsw`t1CxaOJ0@)5hw%1jv@GOWD%g`KZ^SDt> zYuaT3n-z84E0hrEojAqxwr{(^ToTXS-<`GpyoooUF|~)q`b<4>iT;dYiw1K3#)}Ev z@0rvSxphb0=66rfjOg^c|3+WyW5vk#yHBj_7eT-GGz$6MQzFPEPSV%yF{!l;4+k4;4fRAGN&Kh zBF!ni|Ackkf(>FA>p(>=_k5lBBGp1`zy;=7aG~ZILYYNoJj)DZnt^Q1lRycZ8DDG$ ztY%=T<{3i?hZ$dD2JB|we9aR>iDhQ|JTu_jInocGKu6OuoT*Afj%<`|+JmVTs5eM^kBB)PKc)!^nvcB%Gw;w-6C|5SZf!b&Q-&Td!#l(m6a*sZUNQE zVg<9iuSpFl?lG;VLDY2Wp=?k^UA^0(=$d=C2!cRZbvG#Paj`w8HpH!mvy~yOx)Ee1 z2gQ^gTCCRWR)*D@CZ#5(oW#(tN9@WeYTvz^P77-qY?JD7J(7*N*E3YBGZ+1$x&rIWLi06D z9smwl5>>Zo)$O9XQ4cPWKq=lv^)UGhzA@#v=57_fR^e__hg4s?;ybALT4;t0Em9^4 zQQvM23EkNeCY*LMd_e%KhBa@a;_jZ@uT0qnF%d=_s=H08Y0%tV>LJBDEqq01S?K4EU+uF4fzvct;g4l_RLadeAl*Q@m}qh~{k)-WENS zr3?c!H3a2kQT@q7io3^lT8RoY8>3~dw@L9vQAhER%<4%6L~9Oe-e%!#lsJ;`hcq|X zYZ5hGdT^042n5wBq^mW}N=;I!Y1fb!nvCg@rAkeUO;>|j&2CZC#BD0>eG0S$%$wCI z(sNBW3Ng>kgb$!lYPxKw(gHn8=*TFm8`LnHo;1Xa#30Z2|$(&*6C`2YFNO`Jnx8mzjo<>!)3Jo%Xny+m#CVb5n zA3#*yjfSPUlc*laCNe?cY2n7()u`$LY$JqEA2bB-&DTiArt6E*Jj;%=cf}o}O1mwd z4&enSb|tKbBqwcZO!ams-hI5_gSjwL$?j zpn1n+T#2~)sT;a?yWDMPS#sw|2=8v9w?uJwK^I_-L}?|04KN~%oyhl$8-nXlIc@_0 z9}o<&L>;bPD8%J%$6yM~J;~Z2Q;zHIHf#Y<*NVf_ba!C;$kR$3w!)%^ls@5W$ufxc zLc6RIB_vJ671Z7BXgu&a$>l)|LK5;YVd!opCL2O`DdTCUg6$|cYU(BM4XOYR0>9vz!P+2Y$hqq5{xd;C_ArdiV6&AB#})-TD6Yh5 zpnsaiR4;nKWL)z#18nL6G+lVcu*Vm+Db*dMC9N7Z+bV(vXDvXbrVSmmHo}aZB+v-~ z5fZ)*R~V~OcVqTs93vvsQyXGtYuc&l5y=xcY(N2;y?k9Te{VZ!StFuRDU`H+TCzJZ z&2V?e5~12)un8T$Hq1(KH!88~z9; zZUwWN4U?IO&}5Kp)6sKPcT;Wn_*-{;n5H6cgOU`O5F61acybP7v~H=5P<6L@v=|X8f#und1xlPDzBxi0MX8w7iO(Rek&B3}Q zf;33SXh6l}>ux4IVF(S-KS{XQ2D=&n+KdB~K?sB(ogA=%wk~ldftrnpo#qN-R%w(1 zLA%6F3mR!v!&wsegP5fxq#>ybVq2$HiD?okVF2Su1JfkXS7OX-3uGn|t&rK6ftw}U z?nVYq*L={+m=X+pg~(H}2t)w7l4lkG{g4#`LLk_!#3XV-J7C4eW|*Lh5NJA&2hEbz z$r!}61qom^LP~(>1}{s};HWL448(L6n*S+>HbfgGl1_80=(` zgwT5%XLR<4q(H#Sv{4pGCv6VZ28kvG*-Ro* z7*;H#r|}DT5#tkNZ_Vfxgr}s}D5Z0^n*Cy$grlC5?iX#Qt(itN#d;z6g3@y#`P$Tw zA$besgh`RWP&zE`7U@#mGtzbO0~qIMDrsaF$i{;f&EPbmNf#){Q_1I!-tpm2kt)ci z5xq(XqrJ=9%-)Kv7jV(UbRQ8!$LHQmgH;@GNq-L1`q=|&H7D?cfjXjzE<&?omZ82T zF~DAn2Zl)5E_Z5{?3N6JSEAnpmCI>7$ckunxtnN6o~9w$syqeN(A3tFnrK_e6EI}f zrN$kY;3H6!W=wSC_Jw#*iAsSbIMvNiya7&&fpWXSSPQ#U1GI9Gl)1CADjU##h^7{F zT|!$Dj0tZm>&4)|-5Aaq!K-w=7;Yj4u&Ly3=|zTJeXN!Ss3lFVn_DC)TG(dWNoZC} zBeB;&PK~5Sf;8|byBO4h=p*Dq&e4i=MGQ^X&{&9Lx)4vI&8De*kO?G7S3IdX+t+B`GW{X)PhAB2N+Hg%$cIc&fO!R|ALo0^s#g?A- z#_uzjtZCvA0!SMWwXtH{ZL>5pWopJ~yqSo003OL-o#byE!Wd3pmh_y%5_kzth$eeU z5y+6hw-d(Skm_wATgB3d`q)#1zlg#`qO{LRpI5N{p_zYqjC1y z^x$H6V1Zu|rO7x<1!%cKrlF72hM5I-mvWN4I#*Ei0vUF$tb~3|GvOJ9s-zoaSE{KG z^wHD^h9jo&Ow@*0?qOQ%2Ei@qyC3U)>0^g!W2_OV)CMJQkQU}ZI&ETvgISnJs40x< zOvu{-jv`qYLTUgC=?NnUT*NTXYEftv-Bfa~9AoDYH?1SGBlltFLaFW|a$_QhQO^~Y z>;XV<2%GTovJpNR?7ud6-QPF-0A7vZKz2zRjLJbKUG4 zj4hZU^(0p8wPB`J)4;IvPLfr@3|-TxBxzNwGiN-j>{Hy0G@iM4)0BgbRh+%bzHY_kc`jP;g9nCfjK7bga z*M_+6VYnqKW>6bCi5kPM3~h|?jt=$MFxbWZN}RS=cC(v=aYEukVh7pZlapPuz{-9% zZ>}Wd;vPxxu%%n7+X=0Z>TZ>_Y1)Zt9_k&mq6%7-LEcAeRHKszR1b7GfeOYZhr2`9 zvlLGg-OE#ZW zrhp+xtL%M{7vpXwYk~n!?uT5qL1+LnAfI;TPRq3yZCs6*&;e&GoC&=w#d}a0R=jXB zD9c2Tw>Dt0WG1|=kx-%%3Ine$#%l~kc&|meA6?j$f{nmmpF9NEZKvVmkrBlV=nj#u zUW1(_l%vh1L8Ye0v@fZ+F1a(cP^oE>J5w!izXWWJRx&)?>$>5g(w<<8Qayq_L5Vi6 z0z7TBO2~q`0uM;Mx?!DU`Yk|BgHoYtT6U;|N}mG9);q)trY>V&4mRN>&kjwTQgyYa zg;D1b!F^CYqYObB^b{`LN=`EEXoa(B;`Oxwt7<4@AI2oGX-I}0c5I!2C#4!5ELILM zrZBBb+rlzlgWyAT_oo>ujc+~p%f#PsZecS8HLSQr6VrPPj2rz=~W3icVd*u^lk zp_Jw*?k26&N!=?#{#7^nC#@(-a}~0WR;?^Ylvy#Rf7}Y2-@Z*N%QcRf{tM?}d3+vr z#i(%}mWRWxqeou$JS=?V#m>X>_&n^$)BnzS*k(Qt`-5VO1?;KwunC;u@OjwZjPtM) zeA*>Xy^iKml4sI59XqwM-|wB`12FyBTs{NCS=r+a->^81v#=*;orUT0EX-=2g)PQe z7(UtZB+MpH!tC-SYza=n@L4L)!5s1&%qh>o&citvKIh9*ux0WTEJvP#y#l9T_*@{* zz%G<$V7c-P>>?aU;TTMPQl5vMkI%*1x8We{hQy*uc|v92b>sZ|(Jg#GdMn)sUHKm4 z8fe7blEK%|TO#h=6pFZ8`Q3rLjo%%(+xgvryMx~yxI5|HL1ORUXJ+^&bqj8e-UvXp z^Roc7uf6^z*5= zdB?W2K;9~qcWg@w<>gX&$F_8}ykjcw*p{x5S54&|+tPA*<5b?UEv+;zo;u~lQ@+HF z2Ic)zzQm0NY4rxvKcgR0L2K5KnQM8yjTPdaw@TOXp+r59{b#HZ%PPtJ>< znioGkFFrjl{`c8&tz)E_v~&MR6Fy~ir=5=bZ=b;}f~^Jiy3c2_}; zI1_(XJz+bh|9Lr5ZKuS>f*f^F>?*K3+J+aYlWJUlZjrF6$2H3Mov6yxkSC6z{xbc@ z65Fu;>@oqqks%;oKcA@%|+Di>72Lyy# zHmp=NEZfqkR1IlW&ShIh0wvbE+Y6i)48e~2LWoW><5(}yRnSBduFKKN3${SAt@!4N zvRnl7#kxGiZba~Ad<#WcK7vJJT>)aZB6vH#t3}xg1dGMGLd13;xC`GkqO3?H5h)St zR*N`N?i6Lkh~FjFt$}ge&Dtoq7a!zRin0>qRf%=w$n(p*`(<9PD62r8Q>?254CR2V z0%aOxnMPSAhcp7@S47GS3St=fp0f&+6DW@%w%4&+zfc_3k1W+kFH~osv*#8Az6#rr zC@&~i_dD96=i6fX(erJ`D1oxnGa{)TM#fV8$ocAi%3X>)r|pnT^kFEZ87B7mHuTx95o?#Sp;QDfGo|| z(55;=7}h}yE6_Lz94R016;^;rKtiS@0SS~DOG@FEO43+@?IY)#SXMEX6^vyGV_AjL zl`3!q$7={v#?n3)%UlCXr-3EQl*3pSt0#aX!O2+K;*>)asQXAPfg&SEeR~yks{K?3 zh#`(J%BHZi#epWJ+mck0Fq?yAAtA;R=FY*gh_Q53~4|OdB6=Et|klxVGCrzSux?vSUTroS!rNd zWnjrN$Bh%=VX*>)+@8OutEr46Wp+g!qt5p>#s zwu{gOk}Pi}%U)$-$u*0XMHo9V%-E?j8cLv4A=)AU0i*3CqgcpX6s53C_whnXe~~_3 z!gg8Ac3H%BSt6u8t_HV-gfU}TH5bcr1Ir2%OTw&@vCKaU%Sy(wipI0Eu&h|Miw321 zDRFESQq}#lu_UWwEX!rCZ5J!k2@We6%PQcQVF7sGV`SY*@lAK%2SQass`HW?;koH+fJ&7=7EGy<>xyHb<#Kba(#%0FR zp28AH(pU!!*AN9DSAtS$JRw6In65%PBejOC0kZNKKf8~oOOVBJA1}87Ss<7z$0^c3 zqgr7D*1*%r(v_sJT*Fw}HKZ|?Ip@UEJ_pO3v#`wJmh9)kGBs`&0!2dZj0!}-X^yKL zH7Fe=7|W8mSgtm(EH=t4O>%P zlf_XVrxA%2TEPgG*nl>Wt#oZPkXRCFy5xMG!&ny0#WK&pGT+3qoW^Cw zvf?Z(3mMBIV40V~GGE;U_u81Z?GpNC~WW0^-5M|Mdg5G%A8m;z~6IsPYW zg?+NTd2E;Yrd?7^FdSj5>U67yJPj$eC#$|?!D{0Ezs<~`#1@50ZYD4Rk#tUg<1vK;mr!kT2+A5Tamh2t5|{5+ZD2= zszRjhK4tC4yqQp>dp8e#8JXf&!?BO2M!Mni2v3S`l8P2HzeRVF^OhF81u*LT>$kee=tv3o(AF5jVb!=lHig}Twtu8fi+Zn=_t z^}5ZO_?eN+j881xnR(TfAGg-6wOZ;n+cWS343}ShZ0BXy*L7DZkquRepY_W$s#8R7s+--pt5&)r=YzMI!I)z4x- zCWl7RO(t<~|J)6kv*cNAE>@v?-jkvAnAmO=o9*HgnbhPZ!r|C`Siw?K(f_E}hOh(^ zL6Q)6kwu>$R>s$n5qJXytO#80cr=L58%5C3rsslU9^G3es|<=hSa1Q7o&K!_D(Z<4 zGFCa-VpQ=>)L9icUEz2Xy#;|Qk@769ZJeT)$on@ITrJ5L(?W+x6WJgV zt`ZkMwu62#rY&i$`@?5Z`7JAZJCn3c^t^RtuKxuLX3-h!ssrF_3SS8UEpT){-M(TI${mg6?D9z^qGBX&f%kv!SR z5{^3&myIkn8_AWMP_L7lP_N~S*!f~}K_cEuM9-J8NAeRo$CruqXth8#l7k30QXm_7 z1;?F;%SJ9R8_Ab9w%;gkY+uedwpWPFg^Aml=qn$|H{x44ez91;LaZ&6jpQN1jTFj8 zF5$QnaoNbFW+N+bsT-dw{bl+1T;VT!l~`LOHm^=BVxq4`BQieu1jSuqeUVtZni?TH zSyzyXLmO!4HK{n?hhO(v5G{HHjl2$lxB1If;PY00+3UsHVzGHm;@eF0GBhINU*h;m zvA$TWU6X30P{vb@yg|lOja&|*#s0E4*8Q5Fg*)nd@i)@eQo}_ET~Vr{v^ZZ#r|UAe^W%^Y{iIGVe{#ID3&b|pUR{bj}YT<0&lO02CA zn=2E2Q6l;lG$P}_bUD~xa&2K zaMoqv`_|$>kLZFbYBJrdW!DzrcGJ*2vRRe~ul+ktALr8^YP$P_I3$}-`=^uT0!K{q zc+Ps{2KWW;#C+PnIF(jvt`KN{`D0Ds4~Za>bx^g z7|(BEaM6{az%R0n{_zJuV_rLC97AXVXS;{hkSh{+eCj)Yokl}{$$5`ksxd?j_0iqK zP8Tjyb*iD-;O8qZ3lQQ-d6IYx+=b)|i79&7aYjUtf&(frHN4=XAK)8i)W*|lAFzh< z_yQbA_d;1}Z>|3Jt4__}x&hr;&4jRoSM7<9-3JbcqKznm8YRE_ribY+Ced>;J?;|a z&;Dw6mc95-e}{;Y@M0pYc{_1K0cz=|moa*#(i`~d4+frEr|QP-dfcw-pu^0#2ojkc zUBCX7ip$tpH?I5T32-f2IZUlk2Md4Z>nqq=(Ln!VZ-J9XE$mn$_RWVBAwIWT(vrnVk_u0m(fMDdUf`ldtc zX+ZVr*HfQ}ASb*~dBGNjw!b=aSs95N<#!M|I)#lo?e|@cKO#Vx*>o$Y-`p>j} z6vhzv+PBWLUN^sm(IbUt&{yWSkW*&)4p5!f0-5a)6YsMrPuoHue$Qt%Ou`t5EQms$ z;~*P?kp;f^<`>?wSBV84_~rgXm*EAAd}NW0-$DplK4B$&L?;IoTuJ)kfzLgMN4!d} zWj!4vyr5L~D0pIuYqXZNcFX1*W1;e&pKs^#`SvE=IN!!fC815e?D_UBlP`9@oy+Ij z3-$k{^X;nd|F4{H)A6;#`1!-KH>4fDv)7w9rq`QWXaCX>{kR|Wb+vh@jm@hJ`Eymd z2EkS*H<+0mlW#B;GbamMgT7XBRL#eii_E}cx@<;evQ4MPmhwPx zAN{o9;z8wmhwQQSDTaaP|d)FDG!uAw|C~IJXA9vebmj;rOliD z0Q6F`$nuoqDSfz<+xcoU;7U237`#!UAmx~vf!C!RPt1xau_EP|nt_!m$5XBa3R8}$ z8A!RNtK>`2qLgE522?ZfX3f)%5-IQV3NvtJ%Kwz^ZgI*#l}@H_0^zGuE~s2_tVy}3 zWoRsFMWlmR_UBxw>Pg=$Gxnh8>HS1Z%JCI&Qr|aSq0_HI;`j8>2?BZId z-n&2z;#VQgsMt8D8N#G^U5>cJs!Y}D{OYBD0g^Dw;^&@1d=0Hl4T3>Mm#?M74Nlnr z5g*6veC(*W$I0#C!aW#lb$wug5<{-&<+Lb#n2>x$qPoYC-M4_oaNMx(cLlk`KFoSL z7!$Y`8KH8L7xHT0eS_UF7mH!Ej}n6e*vP3FQNvh(aJy;{)4Rb|lv?kjmwKaAV1%Wh z`M;w!C<{>gy(r)vQA41>Jb(dDXKh#(04JEaL!x?A4T1u4MZ|DPW*uxQXXk;T6K4-?jF@W6z>+etUe|g zCL4;7qlVk6NpiHz_i0lq-T@|64?UL@L>zX3Mhtk>5UI9b^R}v9JRvYBxd!Pukd7o} z3Q`DnH#|r8K5lj#`SEUrMlX8!8&?i!SP1yqac{#H6TPZ0s`~IkD51I!a+OgkA5!`V zc>MHmkMJbr+XTFi5WXSh7{ur&CE{5u@pXz^!B$xW(!w2ccTnpw`LIBBkHot*HWb-6%hn=AXIhXJOmWgu(x)p#_8gQOTDf zMGr}lWcuUanaYm{iM}xwjTlzcO+9yrd+r!+?8kK}7nFecN<^tgLdRVyz?~yOf+RS| zjf~<3IziQ{K^f*)hrT%*`FUE>e6*5KsUZ{|!6G59^W!K5s^}3hytN=53=o5!cDhsF?&_z;dW@#}U`srm!Skf{ zy1_9!pRUt4vQ&cm-%<`z55dAh!hl`$@lbB(CCPD9N z22ujnbQlfxFgoK@Z5ptETdFcJo7>v3e1Hrhq4|ix`-PQ$@_Sp)~VL%(kUprgYLX9};uG1ZW>%HX0jaHt7X$2dXo>{7gaV zGsOg>29HsIYUptkJQDMLtQ2}=Oc3)Mpft1{2DCj?ImvByQsoim7OX=fnN1EAo zV%7vmHatSi4yBkKXFD*M9h%4Nl!5C(!|)C=zez%OoKPJnBLD$NP%Yg8X} z>CtkO8|^RC<^z-yIr27ID`pH!=UgK8=Z7$K!RqE9?2+1CuNw1CDZ`s@L&$mbOm>Z z7&RuST3r_HM(?E24LeV98kKr6@>REK^z#+nJXq35Nt~f1F8e<+sK2*Yp#_w{JkoDY zS{8ORI zyW{S}MiLF-oyMp$W%i9Rj5FLlKv>R!wK`Q-!;*D=eGI8-*y&My^bZU_4bh4I;eU_L{e}iHNw&*xHJ!ut??jg zkvclG8qCMjYEAbl@3eYatr-*edWUEaIH`KuXleEo>nEvulF|a>5ha4b%iW2`J@msp z7+T{&dX|MXf-H*7LD^pf_GFXz(NX-C3cu=8`!M{`vSCVMD*X}nLF$3+coJ1J5l3fB z!tNn8tul-i*;=bveoBsk1DM$?A9GsXonyJ)Zuw*`-kg+Ld8_L`-j9>-O~OB(_1;8# z{^j@Mo`320CU^Y!-`S7*FaQ2p!}tF;e}9dinJiVGeEAE8#ptdv3;D^T1B;U`uzn&Tm)KB4W{h0+Tb&(4{GTw8*z%oMK3~N))uWh_CCrDBA-e7o2WT|UFV?1St47zh9!95 zmowl-J)u23fwWs19FKm5N{S#0F*yus7e8T0pbH3(t*lvpMK$}L(dR5qyfUTGpHrdV zr9yBwBzTb6gF3Q~oqqZjc3wT^H^3(r*1TJr#_ZStMy`St${rgk7 zb=R~5^o(jpVk-p^bKzy%i48WU7}>yE9tN7&e0k3-~91eBg#@_KbONn zI|UbWFdM;5oAskvfik)U%A@LA1$y3aU3fw2_vjsuZn6aKz~FJ+wEhRHEsnrxGjNIn zT2ANMt55G71W{qDJDTmdHy5PqjxKQAyLh1t)F+pK*NQye|9pa;-t54D^AH&l{?(@C z`X3R~D5ef0e(AjUC9~sdu6hY|C-s2ln^0fSw&aT~cJ(P->C?6pqVOBF9k^HXm_hn- z{m-eYClPf>Rnz<>^nd+HPmvli25WwX@JTAigHm+5atAp5;tEy1@a9E&K zRHE{F-a~%Gkmox6NQ&WOhM8tGqqd_;ofK!Z9UIk}q<}zMR70Sx^F)~j zz3nEO9NVV9f7&`H#Wy#FMo>tzq?<$`cy7c}l4ZKtkO^w4xK*pV9d$pN*7!%}Y52o) zYAQI7S?$u z^&z#!35Yt$@*xOGu%Fq94<{f&rX^S!AFUqeiPGdKD~$`btFM8aI<`@eB^(!*v_+9uRDM@eKD zM?1~0Y#i;oS@>xZzBMgyn-ut`a|Hg$*#iIgTmnx^f#(|wgW8S?Bs~862W{5^S7mv| z&*cLSa^M^l6qAfh(?&J)NJ&QxOprFILyQBgfVP>P9c^=ZK6OhB_Q~Yq?JT#|=C)cn z+t#+W*=8Gdu>&-~OI}-1TC(Np#p8;U0G0Umf8Ouh0C)XuUcT?WKJW8hp67ku=Xu`m zH13LYo;#}0(`L~cy8i+Kqe!jsrD)n5k+25|qY19@#nFlSU=KQy4}@s0F+i;zWFKO1 z9Rq6P%ZOrG?d%M99*ei}fZqK>ctuuN<3YqmE~>^?#w6_k!k{nfb$K{8qr`x)bMWedy6arXV+c>@7 zRJWbc`}VD;uo&ES$l0W;)+-k)2dGEO1nDP-;aUxP@qW z$tAXjr6V?j!jTJ8j};Y+TB^O^sp0LRD6%~)({TthbRCBZ;6U_Jao7KdnZJB#W-j{Y z(J@%1GvU=3a>C0OyJ(BnkD9@CqvG<&wL0XuoEQ?js8;oY|Ed)m*hzFr-LR2(py0}A zT@WqtWwAqUZA3^PbFk&ntns0-eDIrNll)^?W3MAe@CW&fx^ruUH4--#Bi+1B5R;wI zdNhJoFRl2-Cj<^a?8!?ot)Go%T0gxM)B4G!nbsLc^5HPkdMd)SxMM(P&xGMlfg$mg zUHXmzW{P@m>bx|}NcTtS{H3vUzGrOGi=&blS|yTrm8cJ06)g0_5bs2L!wz6@fD+%( z8EK8WjTl|E+ITq11wgI9MHd01`?hV=KAkcuo*Wx@%y%plEZ}u@gWZAUme66C343Fk}T1{3@o@eRo84xylCLss4(`)QNq~uqvF?%TwdIf6A;VG zuCC73NqC;)0<|$8Qj%){)=w1kn@3@~XjFXR7=}+|i_Q}>dYhe7E0*Xq3hp5&cNs_| z$_Q^C#rSR;6)zsc2s;HMv=jF^#xAI?&p3uhbD!|I)QlR3>QV8kk>g?q*@egDZpT^n zn!0+q<8_jQJ&yeX_f;eK%a>!j{;z~deJ>QV3K0@G52zb_q7jIYWk4OxY#hz89~i@* zH;v%owPWdYzayFGf+)|9-KdfH7Mk29Sk^GnW>}Dna;zvpJ~WEd{yn);%u5$q1xqfY z4RPyMYW3|9&pN5gkWoqF(b3I5KDLb?jZJ#&Qq7*A8Qc1VV8}Yx!y4ZDR9FHa))f7X z*D?CD%u+b0n=w!1{A5ac8&4x*NpC}!CT4G3(iw=f*`#R zwX(9lq$A{NV{^EyO2B^P{HC{ke!cbWfdtb1dy z-tTbfeLjQQqLKip0}-`Fjo9jZWc5_h=|RzWuiopCT^45#&Y;ex4z!#`iKC8rAz-IM zZ4%6Rp@CFoEC^Z-05}SfQzPb$RhVsS;cdd~oqqk<5?P8dOaD7N*!k#ize z1B#b*3qBocD#}+KZ$#!emOEp-5k+D&1@#0j6?TwZh*hE3NNCYzH&Q@3H72DO>m`g^ zAH(nvdeM;>iDCCx4E5DFN58jT%3|5wz)yk^U)iNto;VZV@jvp0I1@`P% zDbK!u1z%>RAKEVfW3k$sq-k?o8cmB4ZM04+RNl3rT7xF<1N0g-+Y!+1DfqeZ0#=;K z$}$LWu@wXx3-*okL`MQ_*${y=Ep9aCH%bDaUK}uA83{91-)f2ITdQsVMBi$;q`p<; zV<nXy#JmUuG#SXE*sjWnrI{z>3y=3YL-7Yh*jdz`qoJ)`R|a zMl_V`m!<%?7;q`QQM#$odYMV+-uE?07KkEqm(0=FKIJ~Ev9VB-TL8COy~z=%Q9mn* zfpR93VdJc9I@@-(rxX{HMUSltH~1V1H~KQ^F`gcAjzC^8o2SP?WgN%PN+dl5f>&s= zorad&s4IhZrPgk+JrY2Ui%&KpsjAg#@Y+4wb{g&c@kE*kUKoe;%>g;V5$GX}1fLIB zjRo)g&e&M>o^sESL0S01KB%{S3El)AOn{{)j^aitdLN2z4*2fj{jkY+7X8p*=SSj^ zu23;)#`E7tLVyys>It(;jCM~t9{fT&TCHpd$k*_X%>qcKCzW#Tlv^iq^@dDnXzp>~ z0(&8p`5IqhK>6dghGi7_3;?rUWs$)*&CNfpcf~gmCMvH9~E(}?)VvP8ui0uM-zK=AgW9TekNn`uN&MF+zq2IFn& z+3UztW{MFCBRJI%Ug4jMqkcH{ZVuQUX<;pV4K>X>%m(D1;#Y?o@1n--$YZrckha`~ z)a(N^BXmX+?P^BfI7Ku0;#ieEI0ui?a%$l@1NC2(Pmyt!9AkJ#-Z$y*}He~k;3 z1~_>-sCrtdi_%|-LkTy99z;bwbT?{&7sM%=SuWD6e>n=(m!l`$B-#(oz`n$cC0e#; z&9@A8u?Ve{{S6b5czPSVhdcUFF*HQ1o!^UzYZJfkoa4fj0~fKPC!j7n7^>YLPcv6d zixwq8h(7mzHM5tEx>H5oee& zN0WJRlY#E$$9YYauUxa^iB8BT$&b=AZ5ur=f0&**Tj{y*K|EJHnAR*_$xn;d<&EMM zw^_Vq)`{138}WMdp}3uRu>!-6C&gRZ@f6(p68o#@ zy0Dxo-B)-sE3-PmOpkRs;wVXEBJO5I3(TFiKjf$SOVZ7U5r|*eJKKEL`I>JE_`dT~ z)-~hUVvBjP)!Dhmsb%Jj|+RJZLkR=4pKQOTFU?% z@CQX~n5x{rhQ6 zm8EKOh9;-;9jQdMRc(BoDDSg+UPc$V;YuP`es4M@+BV;WH{tW`=}7KbfmXyCwHV}t z_P7(oA^A3d@;HJh1&ud+d)`y%CJ%1$S=f+wm$*F zxLR-ju}pnD04Z4RIZR1SNE+y>yeu#r2rdyb>zDh=F}p8O4Kc+^rxu=KwV)5)AP^LO z@{^yug!-WbR6*KKBT{RsX_a{6xEX8ffY;&~B+j(Xtn;AeVtjpaMJ^CC*yXD23-GFM zriiP+V33#XPBKz)Fo!cy8zd08#4622Xbqmpo+rEHjC*mz}#4eT@quOP1&gJW;~ ze1Hwu9tM{rW)UhdH^6U3<6`o9BrzbiIvV0cM_@Ott1bHI)h#?Bwy5|zY}S}rOlc2> zhTgx9r^yVBvKS(U;h^DB{*2uc>t7kvuxhMVVAUk)Bfa_x)WNt;4GbKRWG2%qr={zJS?7khagZ74lFax(Fk6%g#aXW6N z2;v_&q6(tdrx2_Z9MRK_-e_qv0If}gd573?nmNL4{QY`xg(69@NNSP9-_t@d6Jl-6 zr_P~Bm{nqP0JF?&(3vG9!B?(v^!o)1^BllZal6!QxktfB=zfHUz^NCl(YVrEXD)IW22d_sTYIqbcuu!$(VFdgXcmjbA zfdR2kmN(>esSR62?o)0THvth;04{J$Ni!Jo;Fv=E6Ao!w+H4o5%3q-k97kcI00HN+ z<0@8No4$ki3kF^K76OKWOK)uhT~h;B#!)AAkye>WVMAM~d(VR)lIQ8+JhwKzoGrqx znF#M6@*&b*SK1}#xizODT2j%6sp!LFiYAXPs?D^b=>wj?V+Q+jEr�`pTJ#55D;E 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 diff --git a/shadowsocks-csharp/Encryption/EncryptorFactory.cs b/shadowsocks-csharp/Encryption/EncryptorFactory.cs index 41bd5c64..79594876 100644 --- a/shadowsocks-csharp/Encryption/EncryptorFactory.cs +++ b/shadowsocks-csharp/Encryption/EncryptorFactory.cs @@ -13,9 +13,9 @@ namespace Shadowsocks.Encryption static EncryptorFactory() { _registeredEncryptors = new Dictionary(); - foreach (string method in PolarSSLEncryptor.SupportedCiphers()) + foreach (string method in MbedTLSEncryptor.SupportedCiphers()) { - _registeredEncryptors.Add(method, typeof(PolarSSLEncryptor)); + _registeredEncryptors.Add(method, typeof(MbedTLSEncryptor)); } foreach (string method in SodiumEncryptor.SupportedCiphers()) { diff --git a/shadowsocks-csharp/Encryption/IVEncryptor.cs b/shadowsocks-csharp/Encryption/IVEncryptor.cs index 6d84de56..e5f21717 100755 --- a/shadowsocks-csharp/Encryption/IVEncryptor.cs +++ b/shadowsocks-csharp/Encryption/IVEncryptor.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.Concurrent; +using System.Linq; using System.Security.Cryptography; using System.Text; using System.Net; @@ -23,17 +24,18 @@ namespace Shadowsocks.Encryption protected static byte[] tempbuf = new byte[MAX_INPUT_SIZE]; - protected Dictionary ciphers; + protected Dictionary> ciphers; + protected Dictionary ciphersDetail; private static readonly ConcurrentDictionary CachedKeys = new ConcurrentDictionary(); protected byte[] _encryptIV; protected byte[] _decryptIV; protected bool _decryptIVReceived; protected bool _encryptIVSent; - protected int _encryptIVOffset = 0; - protected int _decryptIVOffset = 0; protected string _method; protected int _cipher; + // cipher name in MbedTLS, useless when using LibSodium + protected string _cipherMbedName; protected int[] _cipherInfo; protected byte[] _key; protected int keyLen; @@ -47,7 +49,7 @@ namespace Shadowsocks.Encryption InitKey(method, password); } - protected abstract Dictionary getCiphers(); + protected abstract Dictionary> getCiphers(); protected void InitKey(string method, string password) { @@ -55,14 +57,16 @@ namespace Shadowsocks.Encryption _method = method; string k = method + ":" + password; ciphers = getCiphers(); - _cipherInfo = ciphers[_method]; + ciphersDetail = ciphers[_method]; + _cipherMbedName = ciphersDetail.Keys.FirstOrDefault(); + _cipherInfo = ciphers[_method][_cipherMbedName]; _cipher = _cipherInfo[2]; if (_cipher == 0) { throw new Exception("method not found"); } - keyLen = ciphers[_method][0]; - ivLen = ciphers[_method][1]; + keyLen = _cipherInfo[0]; + ivLen = _cipherInfo[1]; _key = CachedKeys.GetOrAdd(k, (nk) => { byte[] passbuf = Encoding.UTF8.GetBytes(password); diff --git a/shadowsocks-csharp/Encryption/MbedTLS.cs b/shadowsocks-csharp/Encryption/MbedTLS.cs index 27bdce8c..d29b26e5 100644 --- a/shadowsocks-csharp/Encryption/MbedTLS.cs +++ b/shadowsocks-csharp/Encryption/MbedTLS.cs @@ -12,6 +12,9 @@ namespace Shadowsocks.Encryption { const string DLLNAME = "libsscrypto"; + public const int MBEDTLS_ENCRYPT = 1; + public const int MBEDTLS_DECRYPT = 0; + static MbedTLS() { string dllPath = Utils.GetTempPath("libsscrypto.dll"); @@ -24,24 +27,53 @@ namespace Shadowsocks.Encryption } catch (Exception e) { - Console.WriteLine(e.ToString()); + Logging.LogUsefulException(e); } LoadLibrary(dllPath); } - [DllImport("Kernel32.dll")] - private static extern IntPtr LoadLibrary(string path); - - public const int MD5_CTX_SIZE = 88; - public static byte[] MD5(byte[] input) { byte[] output = new byte[16]; - MbedTLS.md5(input, (uint)input.Length, output); + md5(input, (uint)input.Length, output); return output; } + [DllImport("Kernel32.dll")] + private static extern IntPtr LoadLibrary(string path); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr cipher_info_from_string(string cipher_name); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void cipher_init(IntPtr ctx); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_setup(IntPtr ctx, IntPtr cipher_info); + + // check operation + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_setkey(IntPtr ctx, byte[] key, int key_bitlen, int operation); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_set_iv(IntPtr ctx, byte[] iv, int iv_len); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_reset(IntPtr ctx); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_update(IntPtr ctx, byte[] input, int ilen, byte[] output, ref int olen); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void cipher_free(IntPtr ctx); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void md5(byte[] input, uint ilen, byte[] output); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void cipher_set_operation_ex(IntPtr ctx, int operation); + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void md5(byte[] input, uint ilen, byte[] output); + public static extern int cipher_get_size_ex(); } } diff --git a/shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs b/shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs new file mode 100644 index 00000000..969b9dd2 --- /dev/null +++ b/shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Threading; + +namespace Shadowsocks.Encryption +{ + public class MbedTLSEncryptor + : IVEncryptor, IDisposable + { + const int CIPHER_RC4 = 1; + const int CIPHER_AES = 2; + const int CIPHER_BLOWFISH = 3; + const int CIPHER_CAMELLIA = 4; + + private IntPtr _encryptCtx = IntPtr.Zero; + private IntPtr _decryptCtx = IntPtr.Zero; + + public MbedTLSEncryptor(string method, string password, bool onetimeauth, bool isudp) + : base(method, password, onetimeauth, isudp) + { + InitKey(method, password); + } + + private static Dictionary> _ciphers = new Dictionary> { + { "aes-128-cfb", new Dictionary { { "AES-128-CFB128", new int[] { 16, 16, CIPHER_AES } } } }, + { "aes-192-cfb", new Dictionary { { "AES-192-CFB128", new int[] { 24, 16, CIPHER_AES } } } }, + { "aes-256-cfb", new Dictionary { { "AES-256-CFB128", new int[] { 32, 16, CIPHER_AES } } } }, + { "aes-128-ctr", new Dictionary { { "AES-128-CTR", new int[] { 16, 16, CIPHER_AES } } } }, + { "aes-192-ctr", new Dictionary { { "AES-192-CTR", new int[] { 24, 16, CIPHER_AES } } } }, + { "aes-256-ctr", new Dictionary { { "AES-256-CTR", new int[] { 32, 16, CIPHER_AES } } } }, + { "bf-cfb", new Dictionary { { "BLOWFISH-CFB64", new int[] { 16, 8, CIPHER_BLOWFISH } } } }, + { "camellia-128-cfb", new Dictionary { { "CAMELLIA-128-CFB128", new int[] { 16, 16, CIPHER_CAMELLIA } } } }, + { "camellia-192-cfb", new Dictionary { { "CAMELLIA-192-CFB128", new int[] { 24, 16, CIPHER_CAMELLIA } } } }, + { "camellia-256-cfb", new Dictionary { { "CAMELLIA-256-CFB128", new int[] { 32, 16, CIPHER_CAMELLIA } } } }, + { "rc4-md5", new Dictionary { { "ARC4-128", new int[] { 16, 16, CIPHER_RC4 } } } } + }; + + public static List SupportedCiphers() + { + return new List(_ciphers.Keys); + } + + protected override Dictionary> getCiphers() + { + return _ciphers; + } + + protected override void initCipher(byte[] iv, bool isCipher) + { + base.initCipher(iv, isCipher); + IntPtr ctx = Marshal.AllocHGlobal(MbedTLS.cipher_get_size_ex()); + if (isCipher) + { + _encryptCtx = ctx; + } + else + { + _decryptCtx = ctx; + } + byte[] realkey; + if (_method == "rc4-md5") + { + byte[] temp = new byte[keyLen + ivLen]; + realkey = new byte[keyLen]; + Array.Copy(_key, 0, temp, 0, keyLen); + Array.Copy(iv, 0, temp, keyLen, ivLen); + realkey = MbedTLS.MD5(temp); + } + else + { + realkey = _key; + } + MbedTLS.cipher_init(ctx); + if (MbedTLS.cipher_setup( ctx, MbedTLS.cipher_info_from_string( _cipherMbedName ) ) != 0 ) + throw new Exception(); + // MbedTLS takes key length by bit + // cipher_setkey() will set the correct key schedule + if (MbedTLS.cipher_setkey(ctx, realkey, keyLen * 8, isCipher ? MbedTLS.MBEDTLS_ENCRYPT : MbedTLS.MBEDTLS_DECRYPT) != 0 ) + throw new Exception(); + if (MbedTLS.cipher_set_iv(ctx, iv, ivLen) != 0) + throw new Exception(); + if (MbedTLS.cipher_reset(ctx) != 0) + throw new Exception(); + } + + protected override void cipherUpdate(bool isCipher, int length, byte[] buf, byte[] outbuf) + { + // C# could be multi-threaded + if (_disposed) + { + throw new ObjectDisposedException(this.ToString()); + } + IntPtr ctx; + if (isCipher) + { + ctx = _encryptCtx; + } + else + { + ctx = _decryptCtx; + } + + if (_cipher == CIPHER_AES + || _cipher == CIPHER_BLOWFISH + || _cipher == CIPHER_CAMELLIA) + { + /* + * operation workaround + * + * MBEDTLS_AES_{EN,DE}CRYPT + * == MBEDTLS_BLOWFISH_{EN,DE}CRYPT + * == MBEDTLS_CAMELLIA_{EN,DE}CRYPT + * == MBEDTLS_{EN,DE}CRYPT + * setter code in C: + * ctx->operation = operation; + */ + MbedTLS.cipher_set_operation_ex(ctx, isCipher ? MbedTLS.MBEDTLS_ENCRYPT : MbedTLS.MBEDTLS_DECRYPT); + } + if (MbedTLS.cipher_update(ctx, buf, length, outbuf, ref length) != 0 ) + throw new Exception(); + } + + #region IDisposable + private bool _disposed; + + public override void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + ~MbedTLSEncryptor() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + lock (this) + { + if (_disposed) + { + return; + } + _disposed = true; + } + + if (disposing) + { + if (_encryptCtx != IntPtr.Zero) + { + MbedTLS.cipher_free(_encryptCtx); + Marshal.FreeHGlobal(_encryptCtx); + _encryptCtx = IntPtr.Zero; + } + if (_decryptCtx != IntPtr.Zero) + { + MbedTLS.cipher_free(_decryptCtx); + Marshal.FreeHGlobal(_decryptCtx); + _decryptCtx = IntPtr.Zero; + } + } + } + #endregion + } +} diff --git a/shadowsocks-csharp/Encryption/PolarSSL.cs b/shadowsocks-csharp/Encryption/PolarSSL.cs deleted file mode 100755 index ddf59564..00000000 --- a/shadowsocks-csharp/Encryption/PolarSSL.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.IO; -using System.Runtime.InteropServices; - -using Shadowsocks.Controller; -using Shadowsocks.Properties; -using Shadowsocks.Util; - -namespace Shadowsocks.Encryption -{ - public class PolarSSL - { - const string DLLNAME = "libsscrypto"; - - public const int AES_CTX_SIZE = 8 + 4 * 68; - public const int AES_ENCRYPT = 1; - public const int AES_DECRYPT = 0; - - static PolarSSL() - { - string dllPath = Utils.GetTempPath("libsscrypto.dll"); - try - { - FileManager.UncompressFile(dllPath, Resources.libsscrypto_dll); - } - catch (IOException) - { - } - catch (Exception e) - { - Logging.LogUsefulException(e); - } - LoadLibrary(dllPath); - } - - [DllImport("Kernel32.dll")] - private static extern IntPtr LoadLibrary(string path); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void aes_init(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void aes_free(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static int aes_setkey_enc(IntPtr ctx, byte[] key, int keysize); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static int aes_crypt_cfb128(IntPtr ctx, int mode, int length, ref int iv_off, byte[] iv, byte[] input, byte[] output); - - public const int ARC4_CTX_SIZE = 264; - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void arc4_init(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void arc4_free(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void arc4_setup(IntPtr ctx, byte[] key, int keysize); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static int arc4_crypt(IntPtr ctx, int length, byte[] input, byte[] output); - } -} diff --git a/shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs b/shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs deleted file mode 100755 index 8e521862..00000000 --- a/shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs +++ /dev/null @@ -1,184 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Security.Cryptography; -using System.Text; -using System.Threading; - -namespace Shadowsocks.Encryption -{ - public class PolarSSLEncryptor - : IVEncryptor, IDisposable - { - const int CIPHER_AES = 1; - const int CIPHER_RC4 = 2; - - private IntPtr _encryptCtx = IntPtr.Zero; - private IntPtr _decryptCtx = IntPtr.Zero; - - public PolarSSLEncryptor(string method, string password, bool onetimeauth, bool isudp) - : base(method, password, onetimeauth, isudp) - { - InitKey(method, password); - } - - private static Dictionary _ciphers = new Dictionary { - {"aes-128-cfb", new int[]{16, 16, CIPHER_AES, PolarSSL.AES_CTX_SIZE}}, - {"aes-192-cfb", new int[]{24, 16, CIPHER_AES, PolarSSL.AES_CTX_SIZE}}, - {"aes-256-cfb", new int[]{32, 16, CIPHER_AES, PolarSSL.AES_CTX_SIZE}}, - {"rc4-md5", new int[]{16, 16, CIPHER_RC4, PolarSSL.ARC4_CTX_SIZE}}, - }; - - public static List SupportedCiphers() - { - return new List(_ciphers.Keys); - } - - protected override Dictionary getCiphers() - { - return _ciphers; - } - - protected override void initCipher(byte[] iv, bool isCipher) - { - base.initCipher(iv, isCipher); - - IntPtr ctx; - ctx = Marshal.AllocHGlobal(_cipherInfo[3]); - if (isCipher) - { - _encryptCtx = ctx; - } - else - { - _decryptCtx = ctx; - } - byte[] realkey; - if (_method == "rc4-md5") - { - byte[] temp = new byte[keyLen + ivLen]; - realkey = new byte[keyLen]; - Array.Copy(_key, 0, temp, 0, keyLen); - Array.Copy(iv, 0, temp, keyLen, ivLen); - realkey = MbedTLS.MD5(temp); - } - else - { - realkey = _key; - } - if (_cipher == CIPHER_AES) - { - PolarSSL.aes_init(ctx); - // PolarSSL takes key length by bit - // since we'll use CFB mode, here we both do enc, not dec - PolarSSL.aes_setkey_enc(ctx, realkey, keyLen * 8); - } - else if (_cipher == CIPHER_RC4) - { - PolarSSL.arc4_init(ctx); - // PolarSSL RC4 takes key length by byte - PolarSSL.arc4_setup(ctx, realkey, keyLen); - } - } - - protected override void cipherUpdate(bool isCipher, int length, byte[] buf, byte[] outbuf) - { - // C# could be multi-threaded - if (_disposed) - { - throw new ObjectDisposedException(this.ToString()); - } - byte[] iv; - int ivOffset; - IntPtr ctx; - if (isCipher) - { - iv = _encryptIV; - ivOffset = _encryptIVOffset; - ctx = _encryptCtx; - } - else - { - iv = _decryptIV; - ivOffset = _decryptIVOffset; - ctx = _decryptCtx; - } - switch (_cipher) - { - case CIPHER_AES: - PolarSSL.aes_crypt_cfb128(ctx, isCipher ? PolarSSL.AES_ENCRYPT : PolarSSL.AES_DECRYPT, length, ref ivOffset, iv, buf, outbuf); - if (isCipher) - { - _encryptIVOffset = ivOffset; - } - else - { - _decryptIVOffset = ivOffset; - } - break; - case CIPHER_RC4: - PolarSSL.arc4_crypt(ctx, length, buf, outbuf); - break; - } - } - - #region IDisposable - private bool _disposed; - - public override void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - ~PolarSSLEncryptor() - { - Dispose(false); - } - - protected virtual void Dispose(bool disposing) - { - lock (this) - { - if (_disposed) - { - return; - } - _disposed = true; - } - - if (disposing) - { - if (_encryptCtx != IntPtr.Zero) - { - switch (_cipher) - { - case CIPHER_AES: - PolarSSL.aes_free(_encryptCtx); - break; - case CIPHER_RC4: - PolarSSL.arc4_free(_encryptCtx); - break; - } - Marshal.FreeHGlobal(_encryptCtx); - _encryptCtx = IntPtr.Zero; - } - if (_decryptCtx != IntPtr.Zero) - { - switch (_cipher) - { - case CIPHER_AES: - PolarSSL.aes_free(_decryptCtx); - break; - case CIPHER_RC4: - PolarSSL.arc4_free(_decryptCtx); - break; - } - Marshal.FreeHGlobal(_decryptCtx); - _decryptCtx = IntPtr.Zero; - } - } - } - #endregion - } -} diff --git a/shadowsocks-csharp/Encryption/SodiumEncryptor.cs b/shadowsocks-csharp/Encryption/SodiumEncryptor.cs index b3877f86..8052fda5 100755 --- a/shadowsocks-csharp/Encryption/SodiumEncryptor.cs +++ b/shadowsocks-csharp/Encryption/SodiumEncryptor.cs @@ -27,13 +27,13 @@ namespace Shadowsocks.Encryption InitKey(method, password); } - private static Dictionary _ciphers = new Dictionary { - {"salsa20", new int[]{32, 8, CIPHER_SALSA20, PolarSSL.AES_CTX_SIZE}}, - {"chacha20", new int[]{32, 8, CIPHER_CHACHA20, PolarSSL.AES_CTX_SIZE}}, - {"chacha20-ietf", new int[]{32, 12, CIPHER_CHACHA20_IETF, PolarSSL.AES_CTX_SIZE}}, + private static Dictionary> _ciphers = new Dictionary> { + { "salsa20", new Dictionary { { "salsa20", new int[] { 32, 8, CIPHER_SALSA20 } } } }, + { "chacha20", new Dictionary { { "chacha20", new int[] { 32, 8, CIPHER_CHACHA20 } } } }, + { "chacha20-ietf", new Dictionary { { "chacha20-ietf", new int[] { 32, 12, CIPHER_CHACHA20_IETF } } } } }; - protected override Dictionary getCiphers() + protected override Dictionary> getCiphers() { return _ciphers; } diff --git a/shadowsocks-csharp/View/ConfigForm.Designer.cs b/shadowsocks-csharp/View/ConfigForm.Designer.cs index 834ec361..50207095 100755 --- a/shadowsocks-csharp/View/ConfigForm.Designer.cs +++ b/shadowsocks-csharp/View/ConfigForm.Designer.cs @@ -204,7 +204,14 @@ "chacha20-ietf", "aes-256-cfb", "aes-192-cfb", - "aes-128-cfb"}); + "aes-128-cfb", + "aes-256-ctr", + "aes-192-ctr", + "aes-128-ctr", + "bf-cfb", + "camellia-128-cfb", + "camellia-192-cfb", + "camellia-256-cfb",}); this.EncryptionSelect.Location = new System.Drawing.Point(83, 87); this.EncryptionSelect.Name = "EncryptionSelect"; this.EncryptionSelect.Size = new System.Drawing.Size(160, 20); diff --git a/shadowsocks-csharp/shadowsocks-csharp.csproj b/shadowsocks-csharp/shadowsocks-csharp.csproj index 8e9c153a..c4c87271 100644 --- a/shadowsocks-csharp/shadowsocks-csharp.csproj +++ b/shadowsocks-csharp/shadowsocks-csharp.csproj @@ -156,8 +156,7 @@ - - + diff --git a/test/UnitTest.cs b/test/UnitTest.cs index 7cbcee1c..6fa4f21d 100755 --- a/test/UnitTest.cs +++ b/test/UnitTest.cs @@ -73,14 +73,14 @@ namespace test private static object locker = new object(); [TestMethod] - public void TestPolarSSLEncryption() + public void TestMbedTLSEncryption() { // run it once before the multi-threading test to initialize global tables - RunSinglePolarSSLEncryptionThread(); + RunSingleMbedTLSEncryptionThread(); List threads = new List(); for (int i = 0; i < 10; i++) { - Thread t = new Thread(new ThreadStart(RunSinglePolarSSLEncryptionThread)); + Thread t = new Thread(new ThreadStart(RunSingleMbedTLSEncryptionThread)); threads.Add(t); t.Start(); } @@ -91,7 +91,7 @@ namespace test Assert.IsFalse(encryptionFailed); } - private void RunSinglePolarSSLEncryptionThread() + private void RunSingleMbedTLSEncryptionThread() { try { @@ -99,8 +99,8 @@ namespace test { IEncryptor encryptor; IEncryptor decryptor; - encryptor = new PolarSSLEncryptor("aes-256-cfb", "barfoo!", false, false); - decryptor = new PolarSSLEncryptor("aes-256-cfb", "barfoo!", false, false); + encryptor = new MbedTLSEncryptor("aes-256-cfb", "barfoo!", false, false); + decryptor = new MbedTLSEncryptor("aes-256-cfb", "barfoo!", false, false); RunEncryptionRound(encryptor, decryptor); } } @@ -139,8 +139,8 @@ namespace test var random = new Random(); IEncryptor encryptor; IEncryptor decryptor; - encryptor = new PolarSSLEncryptor("rc4-md5", "barfoo!", false, false); - decryptor = new PolarSSLEncryptor("rc4-md5", "barfoo!", false, false); + encryptor = new MbedTLSEncryptor("rc4-md5", "barfoo!", false, false); + decryptor = new MbedTLSEncryptor("rc4-md5", "barfoo!", false, false); RunEncryptionRound(encryptor, decryptor); } }