From 8fe03ad4817a139c165cfba8b77ee2e74f0577d2 Mon Sep 17 00:00:00 2001 From: Shai Almog Date: Wed, 7 Dec 2016 16:29:47 +0200 Subject: [PATCH 1/4] New support for encrypted storage --- .gitignore | 3 + build.xml | 66 +++++++- codenameone_library_appended.properties | 5 + codenameone_library_required.properties | 8 + lib/CLDC11.jar | Bin 0 -> 2103535 bytes lib/CodenameOne.jar | Bin 0 -> 4488132 bytes lib/CodenameOne_SRC.zip | Bin 0 -> 8454625 bytes nbproject/project.properties | 9 +- .../codename1/crypto/EncryptedStorage.java | 154 ++++++++++++++++++ src/com/codename1/crypto/package.html | 9 + 10 files changed, 241 insertions(+), 13 deletions(-) create mode 100644 .gitignore create mode 100644 codenameone_library_appended.properties create mode 100644 codenameone_library_required.properties create mode 100644 lib/CLDC11.jar create mode 100644 lib/CodenameOne.jar create mode 100644 lib/CodenameOne_SRC.zip create mode 100644 src/com/codename1/crypto/EncryptedStorage.java create mode 100644 src/com/codename1/crypto/package.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f904d2e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/nbproject/private/ +/build/ +/dist/ \ No newline at end of file diff --git a/build.xml b/build.xml index 484cc82..e2931b4 100644 --- a/build.xml +++ b/build.xml @@ -1,9 +1,13 @@ - + + - - Builds, tests, and runs the project BouncyCastleCN1Lib. + + Builds, tests, and runs the project LibraryProject. @@ -22,8 +26,8 @@ code size and wider device support @@ -32,8 +36,8 @@ - - + + @@ -49,7 +53,7 @@ + doclet="com.codename1.build.client.StubGenerator"> @@ -61,11 +65,15 @@ + + + + @@ -100,6 +108,29 @@ + + + + + + + + + + + + + + + Zipping JavaSE native code + + + + + + + Zipping Android native code @@ -159,5 +190,24 @@ Zipping me native code + + + + + + + + + + + + + + + Zipping javascript native code + + + diff --git a/codenameone_library_appended.properties b/codenameone_library_appended.properties new file mode 100644 index 0000000..3dc34e8 --- /dev/null +++ b/codenameone_library_appended.properties @@ -0,0 +1,5 @@ +#Place here properties that should be appended to an existed property if exists +#in the project codenameone_settings.properties for example codename1.arg.android.xpermissions +#is an appended type property. +# +#Wed Jan 09 17:59:31 IST 2013 diff --git a/codenameone_library_required.properties b/codenameone_library_required.properties new file mode 100644 index 0000000..9bee35c --- /dev/null +++ b/codenameone_library_required.properties @@ -0,0 +1,8 @@ +#Place here properties that are required to build this Library and if they have +#a conflict with the main project or with other cn1lib the refresh cn1lib action +#will fail. +#For example codename1.arg.android.includeGPlayServices is a required property type, if the cn1lib +#needs the google play services but the main project marked this property to false +#The refresh cn1lib action will fail. +# +#Wed Jan 09 17:59:31 IST 2013 diff --git a/lib/CLDC11.jar b/lib/CLDC11.jar new file mode 100644 index 0000000000000000000000000000000000000000..06c25f537ddf667ceb2b4d99b950d1012436bb0a GIT binary patch literal 2103535 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

;OOwpONW!$Z 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

g$% z4He~hK|fhCruo<+42LVBV?Ti*fkS1&S3|vA!`>6VmNka2W9{KjVMyG-mV|e+uJDcQ z?C^hK0=gO#&@C*9P|%L>XV?eBx3Q0eKg&KI{v5k0{CRd;_zUcw@Ez=a{Ps}zF81y4 zz3hqbm)TR{``Gj0udo;4vivIiRrdGr*R*i>0c}e78(K^F+uHo_ceO>~hqYzl$Fx=9 z$F;TLC$#SHliH^6_q6`-Q(8Lww6;C`jCM)*``WJXbJ~Z)&ubq=*{i}o#zmnoXg7v` zqTLdHQM)VrGwo~Pm$XO2ztkQJzpT9+eocEl{2T4};n%e{!@tx18Ggg(3;*614FAD* zc=(SrtPz{6#-6_!+_J%)ps;7ALw$v?VQsc{44!m05l8O|bNeQEp7hQ@M52k8)7i&a z9j_b4$!$w`xe!aT)!GUS{~-GnT#1$RgqX!#Z58SsrggJs9QL~ju$Hq^c#ZKiTGi;r z(@9X=Q091Ajwh%SoK#689x4M*dK$-M{J=ZyOmqgWV30_Do!EggjZKdtn}pIvj@`qi@FZ^@74ah~;z#B$ z##<$xtAO=l8*83t9>JU&Ih>V6D%ga`k!(_ABAXhS#2O-#tyy3Kj<*!4sgn@eA}@~S zgGNpVVc5v&pxKyC{}A&*V-7|1+g3hT&~G+H>(EvI($1C?(UCzkpXjt<0H=RDn9OI1 z2#$`4)N|AXqtx;66tN;EY7QoYqS9mN|u5c_?^56Z~&ysJka*kT8#DiF@B+TVv zC7~XwS)09BiK1e$Qq|F^4lPzv1-@9h)?=}f3dzMvD#sTq*N%L#lEBEtN&>?dD*|D{krGFylV)p1H;`pP3VscygKy)r1|i2NYy>O{fuNqk2nu)* zbe1cYgP`X?(DQuy@gj(} zuDJ>7EsP+T^X?v+P2A7zA^v(;f?feZzXn0CfuP@jpx=U^{{}(713_^ngP<88=ok=G3xeuEP(28$1woApgmizaEw#T(?km4hX_N(z5eGP!t4pgPIFdvpp?b)67=C5g5skj zXpVOe@z=u=v;zcP1cDG|DccEx-Uos%1wrozL6?D`4}hRuAm}m>bU6qT$t_+YN2aN} zhb}0Lpd6*pb{{*(qlftGVF|+iH7s+w9f!a2v8o#nw}dUWrw+@=+hg;6fIB3y{zUsW;BZFxxNPH*w7g^WsMV7(tN## zol7U#oJU8s-N(+q4)GdV*x7I$m57QG$5oboi*@7wSp0pkbOSAv2OCN%gCz|Ql1mtD zco56Fv>Xi2@mxR*H=-Hp6MjhRC5^%eXp}~PSnnLbB+km72J>;vN7=Jr{&Qgd582^m zKVnnLUSPFlFS40sKSc-p3?1+iTU7Q-wzTYJwzBM1wzljwc3#;VY*X3q*_N{ZVHcPE zk?kt`6Z=@%U)U$h{>pAF`y0Et>`nGL!1!X>|FQeZ-r}sK`0vGRnl=FMGJqRXCTmGN z1+fIvscpv6h@UNDaom|hXYbVG6a+Fd$R2t?b_Sksn+{)n#1okt;z}p#G692pT7xbb z6kP@w;^fR09JLnWH!a{q8|T5Eba*B|WDa319CX4D^Zc#jh!^f$mzOcUyd0<1jAuue zAI7GaPhiL3xvAXFhd3IfsYCBtIFi7d(P4uW!Pm8I+IESOa`qQhRb#6SHo)J^YD=na zVbiLskRO5XSa$1aFRl4{>3jr~EBz(X?}rsA4r^D(xC6eA(T!+)iMD(u^Ov`>@#Sso zi1JzNsPfrtTKOE{*v@8_&tvn-#rXyl4n6|0BMJnRAdEf%drc`WGY$8=Tm(ywLIR7l zi@8mQCo9OYNCr8GlJ}03lF-N~!4{eFHK1fIC^-|9oCQkOfs(U9$vL1z9HBZiB^O(i zkTI8!lAR-^#6L1hwu6!#pyVP@axo}*FDTgwN-hB2ul77l-vYLZU!Zv1|_$GlG_TP8Qy{5L3h1C)p}S%;RcD=bRLV9Q6z`$tMictn(p3o-vVosA!7up`EW*-^M% zciOlz)-Q*QQE!;_rg>VtCpM6d^_rQandys}i#JDm@X?vvnAsLh#mr^N z!GYdrCY~HHYZrGet26O6mNJtAF*BJm`;(~{2h)RlxKr`&!3J+P$<&4BM!<^p_Qt94Xu^yS z;6=YcC579kQ@!zlO(xx7i+jWSGG=nyKrEH+i*Ih`aJq-Y!U8mmHLo zIEa?KXf)RX5K-LLJd?w!r9xBX&r|D;Gk2hRe{_dAkj$8aX`)QQj&1LWZO#B$V20b) zS|r2MEvJFCD>|1p3A}lwH3NxQI&G$6TL$AP@VR@3i93l=BZ>>Y%|vt?btCU7 zE&@PfTM8T>*wkpIr3`R5&b|^NKs-@Mf_i5Gur4}aPF>t-F7KRbp0K!cd1oVsa^~`` zlUJ_kGS6JRdiCNJUCWntnk!eEOIEHpae3GBl`HUVnYnnyI`h=!D^6@QV~`2RT5S8~ z6wv@g381Dgf1Dgh;n_}jsqfJ`!#5wGIO=FV6u9!?uB+ z(}X-|qe`1o@vYRb#A;()47iNhx%~81r!77Iw52Of>N?q6XwC&?9u*vjoQ6TYU}*<> zErXk{fn7HSd9){^-cuI}t-t{hF#3}}H=3)_Ey@1HJw4Rrpvfwwa1_WbU4O0_mB>(i z&IAHdOTVO{htOSh06;&gzxYP8R{mrzTxine=h;Q5Xr?cf+-45MwwWtXVpTFekcp+1 z@_`M(sjWNC1$3wDTNF%^P1wbD+EgrB2~kYNd!aVvpX|%-WHJ%Ms8JG9E3TA=a=0MY zlgUPtC=tJyQ}Po+BcgVx850aQ=bO=NI0^|HUNbaBG?A{AmFn`X}}`^`?^2KDLgB`P*D%oTw{^eF+QzkNs9MW_U~5gc={ppgDvYT`ohT8NgJ zNcM2;lg;T&YKI4BWQ)=Ds@l13)}DQk#?1w0v^fzQ*p%tRw}ysno)VGtmn-kl_3?8H z5%##7-2z;;T+`c;Ncw0=Af$)VWC}YeG^54cOXQncZAKK@^O&wOLa_FK@2hS%o6J@c zgbpDPO-+ZG2#ku3Lr4ymn&~XP*Jv)yGs}5vz@<>)>A^$>Lq4w-B*Az5h@xV)v}HDH zXb6z*pAWbyb*b)7*f6nz_4N`m1(#raSvB@uQK#b<#cH#MkD7m!mbG+)(05W5C}U07 zrY;~bP-Fd@Gdq;+DQj?hnL4H3T+Pi280e<7p2@D;sT?EGk!fk?LG?rj$aU+E!GrCEuMq2PG~>;&X6|poO@IvwA?r_WC7*%Z;K70P;AS%S zsU+N71(h(6)<+t>H$WgE-_7uMGvq~)AEc}k*%W!A1Q2d?Vh4&SPy&7RO?@uf98E?0 z1#Rk`5?y=}D0jt0s)O7VORv(xReqPglEppQg!Br8mm!^k1zjD&O2=n3%}wpD=4P;r z*zS}Pi2&Kpi|IFR+IMx-ih^Q@<#zh2Sc?36>h*58AFzGWv1kg0OqN>*R24(BB|z~f znnp~6M+eBqv1mh|5J2h`^0o)4QyssXeNplWdC$Pdh`~9ezj~={n$6{zV^AQGPTEDJ z-)13%00Ws>WL}_WAU7mC{m@l$I6VqpvZrS-m5RZigHJ1*{dBb7k|X$hqFwb_fCxxB z}B3;EsxJtb&VVIVosG=P{) zCcZT$>^nu7tlh}N4DhL3Ww_U?;3*ssOOWk1aZ8aV^qu6%f|b;k!e?7@FoAdmwMQ;3 zj|yUlsqJo++!N8UBRor+a!XBvPFWEIHqJ`C11iAMokE}UfGb!8Nesmd=kPT zBp9ZmWKm2l9GST>8db&HX0X3oDUUk^~?Z+w97!sNk%W1%)PFo@*X&wj$H6O-kq2?D+yQ z3nb~S zQu)CVY8*1PUHo`RI#`8mEg9v$5<2Ekxm!*PaTJ?MM9R7XrhK4w8mW z32l_ed0=UCrky0XKhr~Nt<#BWYx!}JbPQ#)+&_VBR||x??5J}DNSo!>j;^FU)ek3; zQ7Y!eu7zMCxiEiLq2R$$0y6g2B8TY;b^es2A4Kn{OdgNCSYjmoIg>^g;u~U9wqS`O zZ&&uI>}ERZ?43_L_1uT_cI|xI&pY01^`WLF)p7VdU^zlV8Ydz|mCv7kcWt~=cENtI zYKGiuhfQ@J{XL3(cEv^CkuCZTw+AuHO5qc|l>+6O6Rq8fj_tO??@-*2CXBrWGT%X* za<+Btc;>SUj@WkWWU=T|laW1(96BbC%?&k`y7I83F)552kHc+?)(wmYVMB~$vy2DV z1*cUuQ_+k$5Mld5wgcNE-ecxDV3r0qCh{O4sK{q%NM%Nt?&m}Q2;}JY=__-g7)Hnw zMi}P!jjRpZg-^bDws!BY*>&XJy**{_Pmf-h-o*`{S$=JC!za%Y9@g_-7EdI^p}*Yf zZQLtb6pKmIWx7>? z4jCA_{%E^@*wBUtR)io%oRliZaNcPPr97fz@sJ~|K-h@R;&}L!YLGORoUNsVS?!KQ zm@PZVQdId4isp(>T(II=(vS{5ZnA{cJJ50B zIB5pEr$ubC0Qr+(Mx=kTY}Y&%sf*+4o|t!+1}dZv4t^EnEdpan2W1JgmlDb&`Eeg)*&{bNc0xP{qE{df!bSl2$_)V?bp4rD~S z2Q}O|x7^NhdbDFe^9;}XgJ1D@b^Tbbe++1z0{DOMs~*qpA4|H&EzG27vXzgwfRA;Xho672@9IZ_8Ik_sb!^Lrf6bj9 z#()MYqz?{$733`fV@U^P3AC3I$|K}sT?>h`$@X0hDL5n2L!y$ch{X3XsfiT-#6m-! zWvqi=6)7^Z#9%DxqHLk|Qbzd%eXMJv?qo6%iw^9&Ij3u2Ud0-2+mr}|r>|Rz$|vXtoi%M7Ll(m39zFPiSd2Dsjs*&R*eGRUMzo$E;sWN-vh zTHcpsiqusu#m(k2q+Ue_aFP7Bq)OOQ3570WD6JB-qEJN0(NcwWBFeuptL9?L&Pg}N zwhTrS>DnkVuj+QneajY@OlmMjbu(r^EH3N%OWcQ);rV`YuL55YBgAEU5;Re|1ccT` z0a>(@uLRn*(wP=)w(e)_Lh_veE?NS+y1|7$TpiUP%k(9YH!Jdf)6sraGRoiB#3tec z7n-NV)0t@&K6N{Hs`|)c@985b@qw*LT&GFh5e1f3t(`K(wH|#okcq|z=<>-ZE*9J} z7#rx}S4PUxC&;eY30QE#@M9YMqk{OhokYuVimTESa^PAJ; zk%~Z3a(7@bkwB+VVxr)R0xCF#f-@~%s-FtTvlM7->r3J$3R_0uWYXTJ!A#78xk&ap zAz&AzK%hjBL$dnQYv!V%Z1qN#-QiqWrKDnk7mh9)IbVuR32I8x%WamJCJM|3dIyKJo>ln8(6`Gv%3TjhF%UO`m zQ?3`8bSxofb}ofO>KloMohSXy>lZm?ICE=@iUr$^-YFxdlP=6Hs+AF%Fs_v11Ep9* zlJe+Pi>PlIjdUB0OWPD`#T>j^h4Lti*2+8Y87)CSM0+wtdqwUeE!hETS;z)5V`abWV z?{gZZdKVSS$P|h*v-dzL6rL+A70TLZVlb9Bcw6ssVi0}J7iZxhEhSS6N2tz}ch8@v z9y&VY!i0>p0Nkv$y1J|;M7&!SQ32cR=&!qyERBe;XxK#?+IM{i8ob?uFpT3&l`X2W zcTklrqucX}x@?4D99M?$fl_87=Xf~ts9;4Vz$s1URx|b9_XzUBqf=uz6@`mh_C<}7 zoP%m9ONN?N_9>T*qLO+CmDGv+=If%C8ljeQ=MKM(YRXa`e7#(zBM+mfgdGKIM|5uP zwdT2+fsCJ)g7uq3Ln%0AF>N);Of!{jWTDP2t9ldna$x0t>kxSDn-Ww8qZ^BN%t8~H zBZ3L_GJ!;Z-DQ}Jj9skmEXDa1W`sYp(rTkMJ< z85!!3P_#`B!byPyw0>ANTVb*6*c@vliAU10YI_LbAjmLB22*KNhD{<{QE)B$h8jab z#VTs0*(ClAD=!Yhb26S)Mzb5ieDn6soQYeZDeLEC8QUpnheUd@YuFxQlQ*V7C;Ceh zF}fYuno#Zek7iLN*!zFp#6Z|e;|j^_nRpK+2YI69wo#mx5x-q%!SNktPr}Bz08>P2 zZ-?#SxSvJ-C~X3VDJq)C&52%u{B`7Qi;V)Ix9 z177<8RMx!M9O63a8X5P_wdyvfT#*RzDWsKd1maJw-w83vL1LXPd$zsk2EjAjabURs zrLGyGBg{oJ>H@_nsx|q-iIk&J&H}Gic_4+xQJkCB_Bq|HLmkv@<4UJ>TR7lLcKi8p zpkHk2?WY_z9l-I!6A<@(0C|HMnmzm0BQopFSRazs(0doH9tdk~--l8jIEUUyqD&y1 z9L5tQl4>>1vNra|`kY{uW0<*LjO9@#IAO-HA}QAlVXPuewM~7e*~?xMBpa7jV5Zbk z4RN*^uDPb-^2>a{Qit=!u*>X#*uAUe@nPBP&b0JRYru{}35Cx~X$r`6;ZjCfOvwQx z#33sU8OGL<_?m%4{6fAEot2{Ea=V6*Dt_1@A2n zrD);MWGQBtx6i_Hs06oBgCq*~i=ve?td%1qp1KWx+|04ryHx0eGz=dykKRVRCM$hW zx`ce{63X8~MRYL8QhiN`IW{>s@)%L1C(-8ET|wjt8_r#aNS8iDb`F}w9=oneK(h@% zXZsFVSt%(wNhmI((UlRIhaK^BC(cf;6(JW>e1J&TcNa5oAZ};8e=|08_2B$!7cH_j z%@*RZ&73g91clAXFMkYUt&2%EZ zsgL&Ur8mcV;?YF>BAC}m-%pF(6Ba(iKheW-bxrlLl2C}|0y^*7Sz|?Vpy{Gm3Whf9 z*a3WjY?%B+c$lMdS_ZAu%aW^rA)Z{4?qEo^bka}s=Y-KQ3=9WTsj5A6oj^u2baDW@ zn1K<)ZFez)l8*)hC&fn+XAt(E&;heBw`dC{c2e@61v}i#l08w-Sj)xH zAj4N4_#3y@<#kBu4q3-ZoJ*^kEiKd{`bX+rK{`ijI4#SuDMUJk)vywIrBwx)QsDMc zrwUk*e*WN+The=y8QJ1SKhYnl2nnHMXb3r7F95heWDkRlWQYjxqY)^Q{!u7X-k>FQ zMB%c6M@=@Bwj#}ek!wun;kAWILFUPU9V5gTQk|S<)(G($9fVhZtap}c+laW%9JiU! zuifIK$Jy2VG{Nl{y*wJTK8hgi4(nStzFlN}>v05ZB`3E7vmFT3*6zT=MR@4O(POpr zmcI1RIb^Ut@oI9H8EM3t8xYI?AUbS5GXOC%LG4?!Y@)uBSc!;&eAkDgG= zdfg5osH1MR-t2%N&>P;r)?1Y0Z)Hb&bf*pBA_>zC0dKbxTnV9|uIEFcV5acW?|PnK zTolX^8bgQRU?A_VU>dnAcnA{d+MqP-faj$T=DuvHmj@Zu;|QD-0@XayPd+ZKdWboP z@@LUtO}h0-=#+X>eLADY>YbWB@JaAxFyFBql~$R$vBUrr zV!aBaS0csMWW1Lbb4{Yo`I2DN&ctF0EuF|+it?L`Mda=n^ddbK9oPg1P^89kVDA(k zOv%!rE=uOV0m0tbcH$*5L9tO)NB`yNk3=+`!Ko#!`RZr-Qps&;b9o{W+Z0VKPHln+ z3}lvWr<0Np|L}lH9S*ZmcCVpw{W2ngPY?n9s$)UXk-=(xq#75@lfZF!~o7VtnF?ySK!xGNvQQ$ z%A%~+5gD_c$r0WI$c0^^2=qMVJj+MpBgokd%{HLpwAjF=OkW{HJGwKQWZ374!GU=5 ztT_uiGtm_G4ReXCy?Ex%I$CVnl!{@4z6{<_FR9;Kce>AWw0W0TG-{_#h0qFQ8cdvg zGnm2h)_gqS03LLe9VE2bOMND4Kw|PD-@cFwr9@7^HMu@GXTAwiguqi5<8Ne`=EaJb z!9`Z|!vV(4i(lS>R9gX)+;Co6qr<%e-bn&?VluJ*&330yb-AY>Yqg-hNkDUyKxfGk z3(UDraKv}l)^sHWt;g{#>Hvp_hKB4qu6h^1Z;BshUI4a>>InVw@x1;5;L>`o(je!BEyE9aMn+B;a%Hg1n6(3kxh3@&O>@>l^f*516FNYEP%k`tg@EA<>oy#WElSrp#wYzqe-^u( zt;v^7Rx9E~qbjYM_kbrD;{--;np|k$SVR6!(SUDRknAqai=*O*Ld^}t2EYd=b^_5{ zzLuX(u7VAsrbDEuW9jBqEGl9_!|s_Vy1F}87JBfi*Gmd;izy_qmSSqz!%F_tZ7x^{ zr_&mf-RIH^Czjb2i4WGCydLE-Ee}_o>bS;l)Ilu$sQ$$GjW#scBe;9WqSSstBbQp} zZfLN1NiXcqp>L8UJ!S`S*9$`oeZure+js@Afr_O_|^-e#akqb^4Y$X-r7)zT_( zvU399Og^N%{^9tb+;%Q99xgTy)Hr;sqSsHOU{qeeQ>Y4YfW`PY^t^sPNN676GUagF zoD6V|Dtez~#PHdPhYBnOojp<6)_u`!%W*qw4R32@dZNFg+g5bjl)tJxN$v?cd_P-$ z_~3LpI2e$^kSn@vVmzs^OVMpp{J^IWksjN*DY|Xoiao4~Zd=i9qv29?+h}dWTC5eR zD?>SM;((fIoNp>GhTE9@pP^2vvDXw-J)xzXrszB6;L!;x%KPHSor`=rLWkDJojaI` zTYOF2#CC&Z8b9M0cDV$4qAMx9D~Ut!t@T+2zVMavLOKJML9}03`lX(IZaR=QNIx42NK6f`~sV-BK)LOD(kUY~P{H9nm z+U2G~F_tN*+F3tmd!Fhe*P66fqdlgNwQDI`mFNz*1SX1;! zX$i2nkf=sU(IX{JI6P9mZ=g_zRBlNasXyx4$>20u4{>*N8Q;!jyE6OajTX=mMQ79= z#{3CWsw+8qq|PYsK!-2NzZd3;^6pY@*qHQ0T^w+ZYW_pf4U7a8*WsX8`m~)aCyqro)J|ZvIi#Gw zq8nPwXSG6y#e7zG7}XVMdb^T$-5IAmQ8|CcsmvhbAC9Suk7mzo6*u&EQ9dg|*h4v? zL+>|4Wo3yw?a+71yHpE>>a*|_$zixqOlGZDX0ZAky$4vZNR3J7F3*s{>ny*7-dM># zB7;6_g^F~REK$s4wI*jJz-|xD{jKQFIVMH10Gh);#mC|XL>h@sPwC+D=7fh*+<#bW zyKl;AEABrm?mr|oR`l13{+imAda&<5q=TnM@31+~xH_~ww&D0tblDD=%jOiSG3m28 z8Q>gM^uFk|;Q$)TA}+4N(J58f=36{AMjjF4JiX?C9vj04XVGn=?Ng*cj_PQGWN)5}asi zowO+;uU^(XZV-{zrO|0Olv~QR6YfR9U23=$k~Z>*>z`D%-jZZLro3o(A|^*{4p?!4 zVmjF$Q?S#xcxZs2;e=b6a@k8X@T(EsS5GcV$6}_~La8qC8fnU^swYTsTGIz?RngVy z=Hf&`^?t=iL*9y9a+5&2Gj1KSZZUmhpy=C6?M9;&6t9d)Dv!A@_U!)%+9FQ zXE@(B?UIO{=n9-=tkB{|cn*F4ohs^>$Q(!)BAz5R@BDtugJ5)wc4+Wk8WX1wyNB?Y zj0m_{;M8IxTee-8dlKFdYm->-6%#;w05dNx#>91*otYF=#rkudIFJ@V0q7p_YbTvK zUTc@+KpNFCOITZWro@N~QQQGzi(FD%I87R7M$1>IoaI||?!aZi{ms0Mp5*2o0%fZ; zK(L;LE$L{S5XbTDn_?VeUUW!Yx!UtMG;UjTvp6c=(&)I#loX=4pcJP%$9ph^Iw#e< z+uhBkJjzv^4Ndpu;*w@HPs@Yifxu?_q<9spMAFi5un0+UV^~2D!JWJ?Ip>H*EPwR$ z(JYh(S_;#&B3Pztq~cp~^fk#uCf;L;BM(r#mgL#K{>2gm0C!59cyDIZQNu2e6J_yT z#E5Y4sqKo=58@zFbzWm`U#`Lwn@siNSOb3K1(?k{GL0LG#ocxeyQn*s*%ph50+GPpR;Ovj=ra4VYFluY4<#C~kPv^a>q;nJzV;lyxU zpiAh9!xVDi)HRy}^@-%B+JQP%l*TPTYkUwhE-Z+cb?iM^5lSR+cV86e`_q+>W}MJW zB*;G72*Z(|PYx>SaygC;C&Y=R!jJz-ZMm>a#0Nm5BveU3_WcL|mrquOT+#W~)G!!o z!I1e_q$KiHPQ}uL3DN-afC_#Kg2GqU=U#<+M=C-7(b(X>flD}#UzL!xpo!EQRRNz= zhmvQ+V8tZ@vW$@WMV*7V@*HfSMfTY-d0i8c!&?E zyH1fX#}yY19FDELyIdkguSw%Nu0xem1_lUWnsd%L4y~t)*rD@r5i-d8nm#dj4rkSDe&!va?0Pg#hr;9Y@20tzgga2b5nB-5PC9;P#1T z+ZJ9R_<-|n2U95wBtR5=mPBWN)D8utj`+7e?$8sey3{i0v8`xlEyQfidM zrCItkI1z&?^7}2bd0|xp>f+pWPxO0}j$TuB)F+{XW7tX0Q9HRfQ9;~=E{>MAj&=8J zNWsKe%HC8+@UxLX7J~pEaK;iiU%3}op$Zk#1W(zi zwm~IHN9`~&7#~ey^j zn-+hmB>fF53vpTvA!uGrnGM*c#(&L)OhX!%N6?@ql5-2BvX5&gd<2OC@f?JAdKvvx zi@26@b4@b7(Zq4aDGYqDPfT0RTRo{R{ZW03X9TE8)X7EKlV7PuIhXDSUP-)jTjrec zVi^rP!a0{+R&QJSoNGZ4$G0TV8ThqAkT`I$Pr*HA$u+{TN1O>B1lL{`P_CW?PXTXK ziUz{vY~Lo@v!{pSy~4!-h9g_F)@4+-Xsz?nUeEuP|Ljj|T{+M_dHo6*Zq2}`g`?XW zgO}6~KZo1@;?O$`GeU_EHRZ9q(_TQMDQ#%N+m)+%X!!)vFt@FLK1XHE+9VevwBXh3 z&MkLb>LR=g&uw2y^oVf>nF(Lp=Ojkj&cg+Gk4>`Wvk2KV_W5U%x+mu8rUf0WkK6qvrM}EYC^jO!#O@J zi?C=#=UUMPu&roFD`|ofd3PGp%iyGnC5+7pT49!PVG-39cfZ1*Nn1DJI^(I02r|VG z2!XjHv~9f#`kT1$cQAp2e^odU&Mw6PH^nj($W=3!Krm|zm z0F&2V<4uTQMOM6q6Q`O|pEAa~6`=^P$a1p#0;~s+<>#PG)m5JohBt&f)@oMW{Pd8E zBHnmQLt4!n~dY?%4U}*-YIjj3h z`;($~2Rr~;D_*fJgV6*;C`n)da^_GF>0n9^VBm_Cf&x)+K~%-%=V(o7ve$S-M$B1a zyLqGO6*wY7#A-9RDIVl^*IE=oq>CRNkr8@Du}VjrM#f?L$-j10r_Lb{oVaF(jv=q> z`w{l*FwwSG_?Tj3{T`u$e32C%)1&aB?NlqV81{ZRw1cAu-4%Py1)#(M&5rA;?N6Sh z5~petK%7Ds?%?e^%LyBQ`$>dJas8adx7-j!w&rxH$+4q3_eEolMpMcIiF4bg?PZYB2ILb%y3xa;QVHE)s&QxnQQ!HK`LxS>vU@^Z?3qxcO zK}?a&WSjq-@3fMT=ILO#=L73nWX3pr08vKTj_4~gd1W>~kB!386t#!#KgoHKP)3zx zKRN9pGNIzM0Utj%i)LzbPAZqoZSpi*|BFP53SfD!gN zv{|Ic`3vmxs+$*)VF6NhiWfw}W?-O2(;PhF#+KqsZI zSzZM?LP#lb){(0N)`<6+q?^fjq6}!pi2fJI!<|##3>Q6TlXroOo<#Xq1(kns^+tsVN&iRR$*OMH>_#272oW zsjS$$t=Apx5iXRi!5hwL&1_m|ws|#3S%iG~U7?4o*3%hB449gbLzF*yxj=<+L|{16 z#xRo{mKT|1L3|J#$<-uz@(o4cMQS`Qn$6}?vG*cvW#^@0O?<5hrW~XvsgzSR-GlG| zjamMyHNMpEa-0Eb-eDmI1DHl}o~(L&Am*(peszT=WP5y7SHYr=l7BP|t#Af;w6aY8 z(S|nMxyFJ|%9p2+#L>tdU}(oFVmW|7H$Rt@i<&YGPzkfNfJm4k6(R4$Z~(ef#L1AJ z%DI63;HiOVYKOUHFy3>a$knrwN%wo#=b2rigWKbYIAOsBM|HC7c+y>7`giDBoZp`H z_#9|o^_+M_aUD2|2xIsj^Q>{DF;GofA*GN+oJ%4-^Z;|GRMR_XGTIovUsF5@;DVu(JRLI@B*BT48ttP^1Eu;>9V+(o z9kZT^n~uUVc@x;Ik5d>YYobzU5#kcABMLWc0w+}`b`P-vOhs~%;OM3EkI)-7nUgA5 z2|$GN_l;*d5EUaPMtd>{Auq-FRbuO~ z)2R^sk@>*~ftq!#TF8ZUhbXCdA>sy&uUhstc?eLB?2+YT)$?fCQ7M0Z?l7{m-;#HU zYtH0dhmlEmI{$dlVe^VzYD!h-Rfm)jw|uz23IEIPLi<;&x-CZDd~$odpZ1Ih-`~Q3 zc$l`U(N`RMPPQqZBe)Grs;k9pbC*hxmCOsd-}h14E1yQ3hBIjhsa3s>+eo91{JF)P zX9FbO@P>f(5(+{jk}$5xG*7Efv)*ijeL)TbSLN=?f)-Vqz9A2kUx&^A5rFbl=A@{) zeaO zE-Roz0~sX2#LMD76~zdZ3hU&G3;^`dRwE0)Ty-?`1_-HjVuUW? znY~K^(D925SH!S7C2WBv>LUpOL zk9==1#*1G$S**a)auZM$(+a+3`>9^eDUoPJ5DJ1~OBB^5T)QduMG}bVUUWX8-qh-a zdA6n{81{gtZ{U*K!xHpJ???qCjwjaqfA-!4Fs|b`6Ye)NAV2^VDGH!OkraoAL;wVF ziJ~N40!V@qBod?vP%=dw8~_7yBoG5*03McUNs;W0?Ig~wbIFeFSazb#ALUPcNw($4 zcH*3WvN<=|&9RAdIO}+wbK~r8Hu3*`)!ncA&3l7Gge)ooB+k3KtE;Q4s;jCm#1jQ& zR5mBdD5O3C*+23neLIgFWsMW=@8Ni&V&f#E2V^8P;2I$&(q5UvKHHExwD@|WKF{KH z!-*C*oBoyQ6HVfH2w(tigbum70IME2G@&*SAJIR(m{6Rba2kd=G|7#axMP&D&j5HW ze-_K55Iy7u0|+1L;hvdx3DB+AGV5jmh(t~n&xgAN*laGgkh^H#SsuWZ*c+U6q->_G z2d!r&B3l8NeAB}K40zEa3!PpUcc_pV8zD@QDQC`aXoe}X6~N5U2;F9t{(SZs2pcWZ z`m^nsk$@ZN?wDo{SoV#L5g;nPE7SXT_hxV(7x;9j%D82r&RXwMi(bg4BV4bM8k+6`qljdiVA zfN~t+Ygf}_KvJQ2$EU}zI4Iha2`|WE_I`Xls*RwK5KR%)Xv#-_j>VyxWbBS|7tPp4 zsN+C#FC+QCNm|3GAjtzYsP}0B51YhB3zZF)Md?KQ$H3w(N@~qI+Fcf%96ptZm0T0A zs>T3`l9+hT9Qq((!yrB8IYaTkrrQf7v<*?5PhT;w?t%Nyg#Ch58guU+toDv8G_#3J zS-(&|J|(!?Vp&o1_li0O$3-(k+#hm(Tsy@pk^qZHLcG82nt5Kj%++#sT_w_m1$9xC zGK;ckZwbdg2NFyc&4%c--1q}V*YcBvVR&1!jYQ05Enp()kgjGKST7CiEQ+APkH#1AN8RzFxC*vyjfeq?to15(MEdh2i=h~ciG?K5i?pk7k4YB zM-|yS%I6d@XihHfR_xJ4lVq3?U42`=8=FmQzUpzLxg3DZjPZbQM1-kB5ax_7T($+y zx`-iiXr#X@7$InM5lMD68!j8uGgVKjk&B&%zGoQCM6{h@=NzVQx_6j@$#-6)lYT3R zD(-glH3#vTT7!1q>?#Wx=-;+2DTW=X@~d@DW>{qoOmS|ij-ztxjS*B@zuoD-b#-8s zhuou^uW+SSmMm!dG2JY=#MR+`^g`McVMbji<8%3ejF8Er(1mi9p=&Z*pc0%B7L7rU z2b}lIKpeNYGx0k;%ybF+gJ7t-gwUU!dWz9C&o3V;7RU0r@skf;%1&ShSvM^*JBX;R z-e`@>$4Xc=&ln$Or43=u>SPYPn;`_6BXTz1W8K(h?ol&Jze#2-9~o^jC^sX@jFFL2o}11RAn=M{)0#Ed zgt6m3Z}$cwW0EthcL|%raGhEN0zViSOs+>*9EmKNa}SRj)V=t)p+|^fx0$f)HBseu zG{_2vctH^CPlzeUoo%-m1d{>|W(;zwsBbJ$le}p%uoO`#s%KE%NOEo5g+bxX{YUz@ z^&cA8*11`u0A=jdX$a3mJqb28QfFbFd~gmBbshFikB%agTjD@2qksNe93ZhZ5*NWB z`7NGMm4@25*(UaM+H!JB;(OgwbUf&NjEwu5P46U`sTf9qw{G>_Cw5A%q>ZiFjm?$F z6-}xOFZhK!dOC<(9`tcHB*f>il@0O>raUfA>LWh_QBB&NIIF;GzX3RD-;_HP_zv3=1sxlGqYALkv8nq0Zsf{4D3V;MyM z3e*?6`4<(&qIEIX;HQ~X7ix?v-X#eKP3APliqR5VBaU5)efgS&(F{!|VpMVd2Yr7JI)9UNNx$zwB>Uc|15 zIw!4w)A@0nMJoG`W2dwH*jPB>Y4^lliznt=@HkR4K`mUD#pC#}eBmrMDm-Ul%4{tQ zm605jF@hYYS%!s&8D=y^^rnr52zDyWCCoXWI#a~<__83E^GkSwdK)Kw5D8Pd1r?Gc zhhZnoGRkv?m4!c9z+r+|4kgt!^T@p8R>S#s4zpZ1_iW?IwzjqhH(oLY+j3bS?5Kkp4=B9H73LnUF@4tBIU4RYfR&eRJ!(UvT#rcWNR8ByU~G|TxVwHRhVBB zs(l020JAXXK0)qE)4~+EK|4pz3Q$}VV}}yUePB6|*RX~oz9x(&2?0AyzX%?i3ip89I0M#{vfO@5K##+J?D?7>&sWDK05 z(j#OvI1a^7zD?WX9OTnIoR}YSE@!xzKao-^MddudOILvuJZ4VVlhIitJuQ%TiCYC20Bo2`vRmw#Txom@w`IU& zQoT3MNcLjh+rPjxJxkY<>9)E%R|Cg zGMIUkua8Mxp-ge!87F@xuhV};(?Sy`S;~a3u++#TP;4?$BM3@ORCrD?5$+CiOY!@Qp$j+b=L2ZFr=di<~ z5JZY$60b7+KJ$#%#O42{ARI3v-MOsownjqPo=~yUCGqY%u!#lG)H$&y4DQEmUvwHe6|kHNqh$!g?`?V|w* z`7v)lz8N?HwYN(aTe;q{3ToV0ORSTZgXsr>Pf~3)urkZT>IxW%MHp;Y{>_8K(EvHK zbF8h4xsqh%3TVHvBbz*ZBgMqF@b-au45MwM8RtmboE168Ca@La)NpA}Fuv>m1TD8_ z#b&ZsKl72WCo}WR%|};BJFgv^(3CAVvha9~?KI^8$g#M<(-p-xG3NH6@!kP27wOh6%8ynAwY4$Lc`pMQJ`Tk%d^ zG-i8f5kV>os0M9`Le%;zh6a+E5nsWssATv#j?koO@k!rfRUFh+C>oWmFQHyCn0Rhl zT4TlHqhjd6H!}v7!zaWz+igs#9)0c=`vjAEYH}Jg=Ao0!vtWQ1bgIe`VQ&B>OFyu3 zS&4R+SJv@i)_vh-*|r4b3> zsq`XX&`g$fq$F~aMMdwHk5z!&y%N$mX`z_#0*)lWf+U@d;S3GZg0oNn4(^A>Wg<5s zo4xC!I?kVAI7RPSjbeuir%$5{bjIVzqmNWWrOM&ie#jm%kDNm6(BZHdJRgmOwXfN5 z=8qaCL{sWv6Pdh1WBbnL!j&2IT1mm4+i4i0+r$O{8pOUS%Z@L)>R420TMYY^^5_hY z4raxwZ$MdiR!Gw*%Pz$T`GSS5KDF&5i09c&vPMN2@_F6Bkf zXQMX1P`?O|iruD0{jj>rwJVsfxgu}@|PPpA_BFUACInt3IhrLLIMPy`dGnql(q;e6y(9_b;k;9JRM#_WPCx9+>Xv z=-9HT+ZS~^Rrvxh_=WsGh&?-sTDqIO?c?LNAw-50g{!fSWC&fQn;_T3vV8YN{dqbw@NAXNbX#&eHsfr+V>Tv z2C!rlE5k~qU-{S1y^N2Y!NFSf@t|R;sty|Yvx-00RtMMBs;Z!&I#|u;>uZBG!P?qj zU2sDcGT|@tTh+n(>L6RIt_m7zf(^WGLOOyo2qpGqxld9^rH&2+G>fp9OEje=V;6U$Spn|?Y zEyEHVOzR$>x;FefRhBxjRs`$NKKPYw+QHeS-shb4Q@+2Jbua zaR0+S$By-!2vq9i-GRys6{bpoS~{N3kL<@uNs}nx{y<%w8=jixq3T%Cen=*W2kNRq zN#FL!H=wk;FkYD28>n`;Dk5KDFOX62zG*38|Tn=J6z zyv%SP0e&l23%dZRsgD4w#x-&^O(*ZZzwds&T9SVY&_ce(CY^B%v+&#XN}pZLKs+cQ z(NGB*28pV*67CG|x`1nO=#j8kKQ{<=da`)l);5j2peauy)4*!5^8JjiBI=7qSfZh$ z%nSGjTBflYRU;2X(i25sP$O$ej`DU@Q(s?mQf-&$W%9_0EWni)Aew=8B)G!J1-`@u zFRMqI8zu!=B2tBQ70f&B6d|xnviKMypboNbOu!c zq$NO6$Xqq7Ss^nzR+s=`5QfT6mh!_Ss-?WA$%XQ%A$&|@g;0egY(0GKFA@tmc^E8M zoCH@6l{80bG%xU7rc`(ebJv zm#c%@>w}%auIgZSeXu8h*lu#*`f&2ug(K5bM@IMY6tt2D?OK=0l1{dfKsgo(y?kkB zwm!Hc=;lvPJ%}Hm62ZQD^*Qwt6d_ul%g2xiRr@9W{7Sw0ZQlJ1Yx;HG{T+Y4uKt>L z`1zLlJ%~-bcy8aoQud>DTcywgeC(|cmIo_r^*zys>T*E1$_0&eHV4LnFi7KSf@$8l zSc1q?a;W-f)di|0LD%$o9A(rGUe`9(Z` z#(VxOp1}i>77UH+caR_D3f`70*c;akfC;|G@6X}sC}6V(UDfiU3R*Isulux0wWL3- z(k+=!s|+zosW0<8x?ZJv(M2Crb?Q!Z%y+3q)u(DeuJ z5&D`RR&_6_suM4&C0}S+vtr3x*Q~hX?H^Lrndej{eX3%~H-I8aJpf1#f+`Q8X(H!DN2CBig6M+&`&)NWDirqu!7Iei--9st>B?)rY|C z9|nhi5VZU#xc5h;9UegI98~MnuYuB4YE)fk?w(dRn7bbXM*8b2K>1H-rIcEuo>RXr zZL=A0e*65-{lGoMjQKVQdoN~K%VxTHU$ zYFk>tRZeDB3f!Lt6+W)kLYgiF`p<%4png~Vo+8b(vG|C_L5ubQ+EQwe>5qkF9^|J6)S-$^9a5`4VdM zvnc&b>L%2dn6%*S61*XW(vaip)qgS6XfxPlkmkRt-v=&%`UCZc2B-HMYTN~xzTqXc z?8HmzD#-Qnl`CFQSFd?Nt$aaU^P+0_0;PP9q+e9m{q)*( zA5&H9_ONa{GHWvDJm+wM)P6{T^7thyFd0UR8S(>1#5X7uA}drr?fbpdEMCuC67YX*iD`U5)3L zGb8e*svU5TW_Hvy)=Bzj)pe_D8|!rH#=2AON1v_(Z~Qqi+);;oJL((jo>52BJC-#r z!{f867wK`=xU9Xg?$S|tnHl-8fLZoHJ3nMjwXf)ItQ)!bB#K5lHs4ad-ckSbG64T9 z@n2m_%p2>GqCPVsX>=2_D&RM*CEf{1Q0kj%nffPa@c*N3SN{yH@PDBd{#CsR2FXB> zQYV76$^{wqXi%jt1l8*CphmqfSgPJ1)T)od==p4LmHKk9Lj6{7wfgg*LH%9O2o`M! zmIT)a^@v|w9jpyjA%w9Z$Odh}W;k~@28V+!!F@qf@F3m~2d%d$eP0p6R`U*N6^*soS! z1>_~DLp`AXK6*ZTu@&_x;oUMr2Yzb>`7sy87ccRbSV3ehsveQGOZ_N znNuQXsh2;7E^Y0Lib9tHb3PCX+>=K|5I?4tvES4EJG#PkPG7a5XIH@w;s`fFWM z@JUb_wNYQ0x8zgUGauJ-ojJ8v)Rs_n9jH1Fp>NdU_kfoACyzd-cDXlCQpC|$<7>^6 zM;kK`quR#W#;Rvwi19=11MScwPab``mO8z$Dsu|2(;rhST6mw_d=IH>(R@V&<0cU4 zE2$m9l)5!Ir@DjlsxP>p`h&;Nd~Z_^1eerk@OD)So=|TMo>bozJf(gJ4E?d-9S9D- z6F$&8AX@KIzaG3BzQKFc9|qs8{v`MwX#{q-|BvZX5rl*|XrqsJMl^8MqS38BqW%U< zomPYB=Cx=%0AoOl#;AJCh(-wpmKKc^-4w$r+oeGfbD<$xc5wH9Yf{`{p zml!497-P&S!7Hx-?U9cPXqZ>Z^bSh9rQ8XGriRz@of8 zJc|Y)uI~re`~CGcqPy1V5Afqtj|emAcIR+Yb#;O-7@_{gyoK6U zkf=wxbx8WWyYtngOk>7Kwx-K-ik6vq>qw;~TtE9#ezhd71v5~<|C(rhNL|O5ysbc7 zE#O}ToBkyP{IAq)!PnL8!8cS-@Ym{|;BVBS;P2F%g1<-q`Hvv-H_;FM6MCTkg}&$i zp#S`5_5H!Ws2>gfRed`6mik%n=&#`V8>zJV%Tz}FkJJ)r5DNH9@a)J{6!33^P4kUV z0KQ=apa&MU>HA>2o4yYgzUlkmfttQgO&b9Z)Zd4^`NyVryEqGPk|$^H-JY_&8+t#g zM@`XdA{4duCO9^s<4awmGN}f&K6S0SDRrG{PpwwlQ)|?nskQ1zYMmNPtyfd2th$ie z;BoH7kUST|j&C6B`2IfR++Q-B`^|ZC?yJ)sJr(Vap7Oe*rz&2PPHu6r8-l$s2!;t>eke4sylVN>PziZ{i!{m^j`Hq>JBxU>Q<%HKK0hre)V0c zUiCw%gX&|cJJrWicd3_g{c`Fa^{c5v>NivU>hDrV)IX+3c( zUI_cBXTv_~{b3*VyPDaK9@xs(MqW z)xD`R>dm-+D0Nn7auJQ`2i4Ue-CIGr$5eglZD7H-tLsvas~b{Js4b}{)h)R0O+Bsd zO1%T*dm1eG@4$lJsm5`gO1&Fw_+9G#sqYqY9)mb<2qOzUh$v8BR)Lre<_<&&3HyPN zus>i3yHdft64U59L`f`R|Cc2!w5}dxEX4>*x;~3Y11`_0YCi1+of|W7Q^n3;x6}$( zQ+GK}XF#dHU}CzlI@HCd52=cp(Gg7Cfz%IzU_S(cJp+P$Ky6NaP;EeSNQ7}igw5)R`rkr?08XIgsXgE*^5uKBzNj{a zKFytLKVR2RVx+gFS!o1Yq}r?u0wLR2ZQRp2hSAJgf3;TRhnsV7rEtKOOVdG+qpFNET`$;7cT@Mrc&94M{sH$0Y6 z_rboSP|})vPe|1FghYKOd}tm0_`e}3-)u?oD*qO! z{M(@N?|{nx8C3pVQ2F;j<=+LB|0}5c`=Ih4s7F$NsLrPT2n_h&)MKeXR`0^~y{WIL zA58tJ`r*`{sgI<-s(v)}mx)w3u?_JO>O15> zm+}onHPYZ&3?%7p0lH1QK)0h7h*sCIUeC{=ax&x~i9rn=DiUWXjVT}LI#r)urmjg} zr8cIQqi?-hwWn7CdgX%Rv@Lz!-$H(M<4s`@grni3jCAH}Uia`{2>_xTt zP;vCJbklJ zV=n}MH~jw;Xix>Ua#EU$`q+lDmaFL?jqn;KAs`M=C5?H#dL&q){n?-z;Wi1O25$n@ znDdjfndu-2U8|2kY@ZiDk~CT?F~C*^9`~*zTIAly1lx7xMHwC>dN621OoP)u|% z#wu)fia-hq{jcN$*gy4rdQPxXj{8M#r}tu<=?=9%y$>9}U$v$Ws?PLXXw^P-XZmjS z=JY-4Vch4_N7b41o77|JW9rHDpn6yOxOz|ee)YceN%gVx1L`Mm|MB!GAvC+Y9(d*? zbQ(bpdk1ob+T)YPG3bOpM5ctc2$qKAeZny1FU&$-Qg;tYg@`mryhcbYBSYj-^!5nH zb}_Qdu^JNkM$!+TLKa1=xiPb%`%GgMh)oOX_raBo8P^pG6jGZy|7-XHTCaOP`HNa5v?LeF9cdTEZxzwPxJ)ZAg-=NwbUtfi%_Q!MG z>(^Ib$~CCY$8oo!<`Q45Si#G8LRUCkWjrYTIhcDd0l&{f`Tq=Xd>K6S1;I}%{vBbP z?=YiPHHfL3P-5_3qa&?0mz-48FI*!XV4eCBz8XD9ITpAnHNnBPns0VSmwn06N%XJMZhs){)HH^#k z4Jwbzng(?mm$eP5fXliD^(ZbkG^n$2kxHL7WCvj1e-PWqX5q2A5kJ)CX|c(V#wv%dHLS!?@hm zpgw}j?G5Uqxa@3DKZ?t)2K5{+yBpMx1pXZ9_l;XceB#?Sf&f{&c zpELLN?U~38<1$bjojT85mJf2Ojy?>hsb}C|a~6--oEL{7aA)4L#mT&Y!68RelZBya z%p1#&X^`36>B+oo3yu?^vIBX&#XUBV@7v#-9mQ-U9CTCCnNa-s!qgdoBuD?8FHY*s z%ejLyCmi8qsKPjQ+&-&OnZ(Q_PJuct`{ZIT>oZf?;&~j8RXS6cz``?BY><^1IB2oK zaY8&(NXkW3PZXz3O}t7QTC`^G1t1=X)z#J^u$q`?qxsC!H!dPOH%}ffPH`W34>opJ z#uO}+p8 zfBt-1P8zDMIC;9=5WLiW2&C;F=-sCA7SxZAkL61xY%2bi=>m_);CWUPz-yS(B(r0= z^K3?GDPaMiaefjMA3x1QD>M%X9KWqJ3y>xjNl?~L0McPs?TtMH*}j2|*?m0&eFNCD z9gT8d-{4(Gjt^$<BrN-Y)}7*>^*(`2e4B$cmlkZ zzc7K>i`*z&Ht5H~3*Ew&r7RNMkex`CCi26D(ZVolH-36LcRHUvT|Aec94EU>T zGSgEn_2VX=x9?%GtL?-PYBZ6 zBa+Bw8rW&f+8fVu_MmL1&N-*pMV;rD zVF&0pV@f;E7->7RyLX$Mv*mKLk&!P1u`Sy#`9rmOBYCq#DlprIzVOk@Owp2Fae#3EA?-r4xXRjw z&^*Ef{EJn|$2dkyodXOU0UHMrEh7Q*M96VC(PA{5GT4d0^fX6)k-5PO=IeUDlH32$|3bMTf;8iJ4`49Y$lIIWgy zl|EO*K!C=wM^0MM9aWQmt^pg+SNZ;lQ?V97!VY%=K$QIW##3|j=Y%c#=hqgpGDXfb zl{-050`?|4Wd5~e&rXj`6>wZ7Eyf+&&9SE17C?JfY-m=(gM)KfK7DBw^Q2#20bcvn1GF?hJ}@VK8Ov-D^y+=IqvNlX-bl z))`#Q*}d70>>aSyb^;ymB#woYprgjHgu4mXahl7Nmi4r+W@lTIGJ1s7K3PlCVYJgwQhn-T(L)ug=B5+w>B;JHq$n|I29yc z!s0}anWD?mBsE0rU0I%(ev7`SsOjMQB6>il8-35@>1jC~OhOEBGRjmF{4jIq6^^w& zgA=9U^Wg`MDuWCBYthFu=~JDswhoKLpq-$i;32_J3XhtFswsmlU7V<*+}RMAkkQvg zwiLq}D8ardS8`AB7$MH6VE6F=_{nJlI_vR2=Al@oyJ z4KckF-7FMGQNF>sk$pIAig7r7?!2ZI-24&(ACuwPW@LUjPOUYIz~1nqwDM@o70ls= z20Fl*bK_|Y!3>y`kOd+FU@^)HOT#gyK6-}R4Foo`ts+j3nxTqG$Nid|IQw_&)+Dm9 z5SBpM#UYYB_gAmL<%yCe>|hXyTzq_^&1;iI$;!9!HxY~-syL?DRC9K`g{ckZv9ks( zF1%ho#ud+Tja0*&vpnYtTq%U_(&t0FR+uxxyxL@s2)=2?N=h-_%5i_8Z=BY=gqIUptzOwdjrGnczSg#??7M9};KQ=-c^PGiTzF|C{iXTj=+#ID6VCXU(I1(}un zGucJcQ^qc0Ck?}4BrnIbCiMQIbEnQ1%ZwVWlcmG9%|MEu$(yD+HU zb{9y(v)8SuHiO|phHw?}dH}LT_5vECv+L&VPUS~+pS22*EN%tJ`SY4z67~9p>_g~% z(Bf3*Ej)!Dr&N2);Q9|kObL#_Xt6@h{7wFF0t+qHlU3b7=|-LX?b(3tZ5||T&UOzO&g<-c4jw1NQjD)NW=OB zN@14X;wUiN!*rAsJzC^45cM$C?zrIk)g)9aeIlwha`^~l5X&7sTC0twrI zFXyQYy5^t_I&JwRr1=}l~uO-cX&n)Z7kau zJ9_MNpQvmbwj$qm>Ua?e>9ezuS`39E$c7`#`MvC(nf)xpc}|jQB(oC&x{(|h%4%0- zVdcI-Nqwh3R7(W-7vjDbULo^o{Nb{Tq(|z>^d3`a`e5MODFG*r1}?doV9V<+B+@1N zxixzdE$AHXd!+SEXQINfliOpfQO#-~8w|5+BCMl?CJ0t4FtBIFM zN{~!@0lmo^xh90JC^8hTwi5X5AxQS|G;l7?i6SB!Y<2AM+74FQF=EB41?~QzgminvaR*ak8grsoD^&fKn63E;LU#Qj3Ximg>ZT z$@Ypk8^z}%$%J0S4QV6gSvbg3q;W=XDye+UvOR9!&vGnc2~anb=wK0-=%5Qy zR0_3*W21J!`xOd?vGK8~r5}B=kQA*px5F4v7OET8_&S3YBJV|M@uVo~pF;pNS8y z9LM{z8~@wxM$d<%UJp(*cw5ZX8J%E{#WjC{{f)ZUS-LmYQY_5`AKBF*QSC(Y$DBSYFq;If z9lFoZx8o=K7x6EI=IqO5V1neW=v-*f8g<4K9I}M$%ujbmB`Yn40>C4&uGd${gb_=C z*0cGerCoLhZI=;9hvD_&-e8Z+`3OHnjDUsH^48UnRTX7=9{rPV4cJb9Uy>Pc<*5Jp zSPeGDY%AXVy6rn!p`GSrk$C;bD>P03fvVY)zeHsb+9(O>h2C){-p^grxll((RVeT} z92J{b7n*uu%gw>>0g3eNNs}q=;u!zP6GEzxPzKBOMMRUCNC}a)k(Wvneyk=#@a0fc zuQ=URNgsKmH%u~%B4UydeW(y`e21TOaTOb4CU@F1595l#wu&1%SXehf+9~9L%a__Y z`OLYjnZB>XLaBMl@rgq+}`NBBBo<5NrmOsFNg6Xn`hn*(~}lA6#sR&H#}Ynen-s|>(wjv3YM ztKyl>WY0LYO6E%7LoBgrmigziD)w^v#cZHCS~&-CIM2*u2Cu1+!?T0FO*RgTVr+jF z6UQc-hlR5Mmdk571c1qqGukCi<&mrP5JXJHmh)>Y0Sv3i5P&Bucd$DXigO|cj~HX-K)o^Rz@8BmLtWu+kh zY(`3$q{}rmJ&Q=p1=bX&_RS}HOw{KdJ%(DQ=^E46b5!Xb?jD=IraFB;7s{CpbFkqXFGP{t23JrN<-@Pew#`+LQl@};RWGAvl zjuMo-)=aE*E&80T=PgX+JR(d5eJm2Gvd+J0o#?y;`_ah)-?*nl=cY2!m4}MHtw_5W ztESSP`w*-{JxiM~b#lM!Uz0N~cG53OKa}|0BM$ZZ_hKTBCoJeZm zN5n{mzA*jtl?u=0L_;n|=!9hWdG%y26gSHKJ`5;eF_zOBEdN!InfVk-6e4n|wb&e& zuiBEJKPuIV1;q57c9WpvzMb7_T!QzzQ7YEN_Jx!A;XJmco5a=!1?+)GiNi_DGV9MK zk)g>vIwvb`Q7L^*1sR)HMr1irRB`z5Yap$9!A!zxMhvMW^^4f4CB{3N;$$oHw=*%T ztOEa{VAhL#uSTwap3_DarV3+r%@q~MHLWif*1hFvK!o&*V0+85+ zVXw;yeUIL{QTJeWL|~tuLlAZxgP1aVSv{DQsQGnZKsurSa{ZOr8w{OP#SW}EnJf{s z?Yx7zwF#GW5VsA#Smy9E%{Z^gn3r~4HcG&}X}!^i2cxXxh%XA)MrnLqc#>p!foP(e zBqK4FO_Uerwup13G3E*x5ptZ(G>*IZB;};SVDutMmpjkxN$r-KZnaL%K~G* zeF#gt$=ZiXGBjvQaEpt`&Yq@Rvb&jYR=z+vZn@1+-{}bk_qZCgFg`psEsNSomNVFZ zo;zlu97X^`oRjLWYoP7GaIcz4+LIQzif;b`i})goNj><>p`d$4AyCM#Zm4G^nuVcRwb$>C#g6~ejsA6)S2 zDr~sNPE>XqohKWyo}!{{5;d^Oo57SHBYG09S1dEkY#Gg5#mb_Y!=4(G+)=`458m?h zgz;f)71NqMGkrEUz71PvjmRMfBl*(sWMP8GNEorRa%sa66$O?+&z{X?NAhw=0JPK? z&aAM)i}i~*>O$g)oQ_MrgqFmZfZa1MqNftKUmVc&m@4Xj(@;C%Wn z{#%*fXBAsJcD8c7L5=`I`>|s`H)`-Ct~7+RBPOsVN7I(aws<*g#9r4pHtjFbXm@%w z(ee-jT%`1N2J2pM-VZv%4Apekr_hw z;jV&Zy5kY*4p|CZE}Rwv)=&smDFG8Yif?Sq^7xSU_RalA`nUBT8raskSu=?RXs%8T z`5zo0OEs_k{Dig*{5 zEf;{1mL+Equrk=Z1wxDyOGXhPw1E;paGS1J*>*e9*f$=5SZ=s2Ply0!_n=oVAwbz2 zYJ_f6t!dW4%0g-yX8;#R*S5 zrUQu&|kp8vWlmP>AFh*jc zBf-pkgxlA6veOq*~%o!?2EFzRt$8Iy9IY=lq z;#{Ou{MhoMnVEk^*r?Z9LW>Yi+#GbV2H=}aWvVlxij8ky?qMg=r3{YK60ELK!5Ut9 zwM=z1A0)Q+zZKnEu~ipB_xkjkLI283uF<)yx3q2_?Lbj*Rx`PoBL?q?m5BDH=8O(= zQypS2;i-!YGYPBIOIQ)_l595HVz-K0s!*L6X4ml;yP7lJ7Yi#(z#8Ib_e+PjNQe{If zux%`eSZ6jY=UwK;3a_LYJ@4Pqg>5(-4-d@Vw9qaG``&!Gcc-kHmFbQQe&T3F=z2t6 zh7p26OO|j-;+Pz4QNnQ-C7gXY!XpSczl#0+R59cg0PMPD$2K8_?Eah`!mj6T&)KjG znGY}Nsv)Q_QJnCY>L#4*HERCKw@0Xug;RvFX|u0sEx#Gwl8pMhVXk;YkZ4E{^McRy zjNe{ByjJfGy_Xw#5W`!{pI0bTVgqS@z1jS6rw^ME3#KBU9JVGSl5+d$z1i)EX)tNW zsQxdS@&aM%gtwKI?tSXq;e890F;>^3G6I`t!FAj`YH4z*)}2th2Pf2~-f{55r)!ns zzw06=)b7tguZ-j-+lH|euJkMa`ni|!xl=t_i{q5fRI5TYPH9)Ep2IjLx-U@6_VXa1 z-1yYJ-0CQeq&OkBs^{>-M-TI1DIbm=>pR4UbfA{>9KZAUz#yNh1C=?@GuX@fszB8r z=sEH5k%JE(KGHvUSD@<5<9)ro_XMiuK=1zE!~1%VF>xK95BBamcD(1<2|fn^E9ZKa zfY(XjwB+EiK4j;&B`5^vol3r1K;=D4!DnDrD8Y(lruzd`eRoekAtJ-w#}DaCe=iap z?m4#qF2YI$Dt%ak%>dNlzC(xl26}mPD!*QZau4_QAJ-MC=M%n2F{Vm2{YUPVN}#YK z`v;GpIw<=n2w5}GGkE-%BwpemE(_Gsf!?EoVa00zbl|uKS~Gap@nZv$B{Nkxn@4Nh z4Y-5Hd-cnu_w^p=H}{zny*(&u$?n2A&mX>%c#;IgSCNL zd8mllp7-V^3w$;&Gc^AL)o{oiWo#K`7lF+%Ewf%@36SS)t#LeJTp>aZ% z-2PXfHI#>XLAlEiGn>HP{0DhPE6S=f&x2CEC3@R>V2`6{@Qe69;5PL&qrt1B`H=%J z`-B~b0dG}Pb27Fq21_}Rnb7aYp>|DueQdBQ@w)LAM>3;ieA6Xg<5x!tmgeP26oFdd zk-#Elayq0kO?NZPlCuWMI+KEQ3DmVd{17{4s2wOyPY$EO$TrI?Kgi+M^=g;ejTVoy z3vepug3Jb$lEd0Jsns~{y$UL12?b77KQkHIklzNjohE!Lp z0W~;l&UKNTy6rORxVksYnbKu0{YjSW;kG#;XQ1v=Zw_--!ggyy&a2f4b-&3;+Ka8> zm`&Iv=#q?C{V`;hKxvYabSFXF6srEf?7({F4D3PmkiqO0p#cgi$LuZvrWq#iFnd^? zLe`ARsUZ(UV&#rh05J>^CM8Ey-UC5-ieYhY1rR5}5CkzQ=%04RX%CFk&-~t7ws*BD z#eY=3@lHhgn1mzY&4KW?E20yR&}D9@gwxb;WFfs8b6h%I8jNXTD!iNwVfXINW!X#e zj6EK4$cZKx>PEyH6K>#_<$0)^wl%Y*Y0jT7WocZsX2r&9&B7pS&C`(LyE9Z}2I26g0+?ox`otP}1!$F9ofP6GZg|_k} z25Z8#%D4qyNDJlgX*@rPasG>0tiT(c9$5~S2%5!WiKzlt0ZwA)knz*g zIr!G(8b_h2i=6z!hRR>a5o~Mr?%YIf9LpNF-H8pxi?FlDy?29?xe-~Sh^<(qHuu4H z<}3)<#(J8CZh4-z>Z*VvvlzM0<7|?PJm(ACglP+fVL1ZZ=MaR(j9u;6q{;GfaU8_G zi0#d!4rejseY5-#v8RLZX%4`u~ zATu6q2f_0b#o;qMvxT;NTdT-8y#LPIZ|yLmjwjzT@_6N5{^N4!*q`(jYHy z?P$XxU3`1=Fbf1C$gg#me&1u?3xY`9NytcT!I=C=XWn$lo6fBF#%9y64uicqJ6yTQ z=e_DQ!1XIsWxF6fiH)&&jyf8WI`#~s2dBAPJ9J%fo^^j2r!-qh7}FV(q%x+YGz$BRr9_1Np@j7 zv-=Mn*bnqNvmIUS9i8o69UWZ=Ju~VkjHGdImY%K$3)FT}>9uADK@EDP0M%Y=4$uvI zcTF7I#XKg_O)&@P<_Mz}ioimT3Q#`f*r-rQQO`&8(Z{GZ z!pcQ&y*E2%LDz=GvInWgblG-kc_g%qP9GfzFyU#E4E^>T-h*gyIr18e31PFn(Je~j zvHfKl9Kb;Qz2lq34xv=*0E?TnBN%6U+fGBXK?8L{Eo|S}c}rW@EusfV15F;}J$e|- zr|B2gt>YiKUSk9Gi*yv<+Lq#E}>3hKiF#Rr$7soH26;%TxH;mNAN$r1y!Dqt5 z^Opnms(WtvcGYOGH>oCry_Z)5N2dj>3C+`$5L(b=q&Rh`)F+R)n;@% z4zQ;aGtOq`O4-+z`^j|rD>Cu=yJK|W) zM>&aQ6>6tRIRp`8lYs}_q0#MTcLzUXBqV8P*EY#H44?GTwwXIU3!t+jUVZ5hb(d$x zk1j_uu%tbmm(k6WTYQSJ$)vwG$i?W;wS9hc@ZfZH#mVu?xq($Tz!Qa7gkvlRCkPXJ z5Mi0h!+OSGb{Ks?<7&we2?|BWMkK%h5FW4Vf{Ds=ZrHOO?CU*r;Nks8j`t5{&1CzM zo!(I{Pv$#hN=6Ce%sW?YqbJzDs>;TAqDgk+T(K;1BH*j7y*aR&qzC4VWZ}ZAk79qK z)iGBTF-$r+^6FZoG9bMNyNk@I;A{d=HNPF2`^_3f~WXa@jI`O=>;e zdC#KBy|H;}LO3=Hslq(ydpa+>mg5-mmSC@`Al3S;)#E$^)@=L2){9{Gbk4?FGujV_ z5vpET`vIJc5|bEyUhKqRrq?Zm2Gurm#P+bZ#uk*IoXe7g_*}IK=Hh=F)UutIl4z04 z71gO%zxyzgW@e2T%s;k61CsG8KdxirJqyVY2zMm-0}&F>C|m;QRt}tDW|i6i=b+Fc%jZvH1%a@+{F$M5pT+8i;hsvPKM$Omno!43c2m zAq+xr9OBNygO*9l9R`_NO3&nS8gdZffQ6=*o)S1~2y;fob6{v%rvmWh`NPTfUJC}Q8!v;~R@hSKFF`|r-EIl0R zdDNI?fQ>gxP}|z%vtd8r-x$I=Ty67R5SF18ID@8YqJ)YcCQab!`P9H4`W+ClI{cs|5 znmm_IK4=VHOnE4tFJ&(lr_T46$xa9IQAWriR(7C~xvYSd zwRgyu;gFo{o@(YBh%r&(MsnqDA%uqWaH2J?R3+AcILttid7(vlOGYY`57ge)*p_ab z2J|3$h6xFcxia~Z%x*wU?5ZVVWzDJ z?Y-$jgdj5)LUd#b17H~}i~*G>e|iFSoM(~sa^>$%d#t(UN(SXHT?aFNpcu%Z(w1ed zGCedF8TW*`lQp7}HjWTh6VFi@2r{k{Ks=aQi=?ZleIxWTBeJ5XFy&^f&1zYHZj!HY zjmlzEE&!5_vxIbhC-DlN~n9%IR zY(eNb6GogvlaqZXFU$JNHj$BJa!|NMg=v;h`-vrJ>SZU{C)BTFp4`HMXJ!dU+OV+= z8f^Fk6z0|F16Ifd39X((!$u3ci2n?2A31njAaD+e*-s$GlXDiPo)OGs5#2a}DUyJT z8B=FvVIBI4oL$&y#rRTG9l5ok`b<_q%Q~WBQ0X7SHwy>LAhA!t?4rV`8#Xh0p9noF z!16F0k>dndfD~>CnC-R)y^f9LPv^#ZOyALaVK^_FDJ4KAuIOqEq5@8ijWjO~3=CrM z<={Z?AT}wm+qYBzbN`Y4UYppW6wyF>&Whe3ePqNbZ@*2=hFf~kqZH)L$T1vMS&e98 zgoM%jMU7!mG4t%u7Gu=!Fi*4|(RrA%=@2HM#H%Mq0Hyy9j-U=XlB}J8-2`P)ounMaNZWwoP)Jx{{trW7h0-zQRC0tQg zgZYGK^lCsXPs4h;>VjUbE+t_3UQGcr7jsj^$?~;oedayZs;!Bvf3qKU3(laxWd3aN z97wTL-w1xVC*E?O;e0`qJXP%BXf2l#HlIvdF4)wR@H#nZcK6`UIEcMXCkF?2HS;G> zJ-d68lEia)Z=`Nm8ENYlSp~P;HKwdlz{){#ZaWRhcK0n|5u9BtC#xfE8Cbu{g-U1$ z@aJ+YJB_T4!*dOm>s8)&=I3fSzP}pl-gvzR>)m*5#L^-Q z=UO~-wHx2BF3W#?+4C9$XD!ydG5uPsdb4oW19QEOFRM1lI**Ofbsj(W{rMNaV~0}w zx4M!53i(<%cN9wuhOwl869BXe*n<@y=o? z6;SP+lernAeV%@IeSNo5S>CnedOmhs0v2O#6=v_U-RQSAZG(BiMFOGNE`{ zJpxG#&hy2|M`gYVgxgHqhfxC`$gIi09Dmt5fSV;wT%44N-o^7+%1}BZM<=3UgD4CL zTWn~|pi`7`QPmT0+jUKdl&Q3#MXQ}ro9$}r5S+w7-Do~@uRD7E?BVEcat^+Oofkub zF;KebV_1iP}+p8fBrnS zJ7hz(6(>)(8-kbG4}rA(1HIcc-jeC~IF_1l+B+gooLr4*(%2{wIb;{fvD|r?!^)Nt z762OOCqeP?)2)~uuX#Y=_-*9~XORSD{RChZ%wgWxGmz~Y*qGhdGtf7HIU#72`}zhk zS!FPLU(c~)J^h1yy#rb7pw0E(eS>{R`tfuSXUm+(-qY8A03l`Y1bEFvmWim$lg^L8 zUI8#po@MJ5eOXF1yfiY6P<*+J*X_Iy|y-C zT~uwYSs7(5*s#kH>yR)ei{KA4!D=}CjGc9%`X`6aV17{_Rx9LT^dV+g1a1Zk9;@8K z3G-wL+ieQMQsJRI&gm+E91_bwK^MVch$oF`hIA1p#445Vtr9b#MggL;M`9f(g$? zvD1@=WmN*Jt9Oeba*hlV*`fN8{IXgIXOW@P6hdRUQbHw7$W9NZX>cJn2t$o?DS=FJ zgJ#gBi!fTs6Ea*8>{yBc*({et(enk}35pv46fn=+!;s5+1UvG8#FoqkaHx4-v|W

_H53UUf4G={o5hf7WOL#( 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 BzUlw~ literal 0 HcmV?d00001 diff --git a/lib/CodenameOne.jar b/lib/CodenameOne.jar new file mode 100644 index 0000000000000000000000000000000000000000..5825328a701e207b787f1bedf08e239b1ce3a37f GIT binary patch literal 4488132 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

pyXv9R((VU4#2@qXZN;{#$VuzF$i>la3Y563`C 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

_@mJ>8VYx1&e~F1tQ2$EOlJu^Uuy-vZK3YCE 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 z%0AaNL$$365udLq0lbIVU3T~Gb-$9Ek`p;xF5%3U)r5;qYURpB6NeS-HwBM3tT~Xg z?Z1}8_`2<_aUH?lH%cicF7OjRast8ouv}l=2D-lu^It%f4`wh|bjb^UlQ;xfN(cC(@LQrba=$4zu$gB!s&mQ zYYx*0`13IMZFxEeNCoAb$wqrJo9a@Iq02aSuHbOFlAH|=MtL~}4(Cja3$6}g3)f+P zDI~-gw^c7?gC4{7tUNIqM4Bvh+jJ%64tE=Mm6!qiBOInnr-;nqFTpOUe<@n*ehUw* zHGjJ5&AX{te+@hb1H?G5aeUC)($;heL?r$ei^UjIt7*i+N=EBUiWT;#$k$?}8J{$V zB+UezU%)QcnQ?m;9MZBvg`CsH3B7E(c`)K<%Gt$d%JPuUE~Bpvv3Nj~LDBKCZvc#+ z4%FVcjVDTE6j>jGYV~GJ2X$5z{T*kh4_KCOd5`?`Ns*T#+#rUKZ8afu+Ysepgg!8T z0Ly(OWXy+@Sf`cmyYbV@ZUbfA_eg}a-)V#jw%B`3-A%roJ)4mqT25$`Z%%;|p4zP# zg>|p$CNKni#^zQQQIa{y5z6uDVFKd+AMBita1{8x_$CWagV4-J{~Y576rYO!N>+oSQx( zf-1R$&`H4~#dK41GqE4XAAUHqXF=Zvr^JX35o=r1G>0{HIxCz{v4`HIY&Awz?(+cQ z3?1FQv#JAwh*%KU*n&B-{!pc^EmZ^Ik*p45I_Le=BMqIJ9nwG}vzBX*G}5eOt!b@N z)h49j=^E8_AxJ}8{Ujlcy(W0phr-t76L?C&%ERZ6tZY$~odVX zp6IX7nB<6}<3CPJGvab*#N{3+M!+O9wFbe*G$n_p4E|)0btoGy_Y8AnN{sFqVsy_i zN9&zqQep{AGP6_W*rb`0bnE~IOSFb(dX!_53p4zJLQact@k(s@36Ym62;rD^-N z)`GKf2$j7Y+51*K2_d&n(gB%@8dbJ7UKVmT#AatHB%q%vMJ(waD4`?DQbI*#8RxQR z8k}ns;-c~&VQT)5B1Jrph}w^N9x2tz@blOsOmCChle}BDZ*HVK%ciV57%zVJwfWb2 zkA)etNAGHlT#bvrEwEJ{yqy81;3&XRevZ!z{uZ|Ll;1FL9o`eT>y`2oVdatdR8V3T ziPu7Cjpk02pJyCPBskVrX#0amMfu(Ck#$8LiC2KM<&J-G^yCTD@(kCBj0CpIzmu%d6kWo)2cds0%uiiE>I_&a{cDwx5A>$<=$=EZ+q2b>dd0e<^NGKb>@FB zqW|AOrq29-03$n}8vkN4b=m7rrdF&kOQxOzt~nK4vkEeGHDv0Ve;Jv2RKK~WbJ*42 zv7ns3Y`)_cAiF}x4X)+dE?N5*2NpR}bUO#&8XbUP)9EOHlfco6FEU#3MMgWWm$+dQ zllcH6uYub9mmi7iO4?i^P&>Malr2xWly)BYD9-Z=Fu~7pz1ljbEm^VXqUP4E>TTZa zoo*D9#Rd2nmQ;+71~WBeKOYwA#2{zg$VxaaWVv01m5UWS%$mjnn*n7p%xmF(Wly=& zb;>=qZ$vz&+%kMG(TdxacFNJ37bRq?o}sEse9x30wt}j2ir&R6y4T2x(~4nQxr4M1 zBO)p(A4a67gS2P_PlNp!k}gYwWn+AZj_{E~bfC?~3wb+KhiX6ClS#od&eT75j#e&A zf3f$u^6yl^=}$%sI-(m{mhm*^Q;K>7fwS|+AR=vlW(M0|n9=rEP)NTqGwiRKb1$2t z?C)~W9Rc;?Bag^WwU0%Ta7?-clu|ZSh!90dsE}dihJ(HWb)-Kr^ZPPi3n?GGrxJtk z<4QiE7@A-+=cHSl`@~MIR1F`T$TBZo_to>Gj;Whu3+akn`d=3T34S- zlRTy5-_jVLd?97NsNXN8%$HN{2*z5h_hMqqm=ov?thZTs^n*S`{#P`7fJKWG^^YJ z@~f2jwJLvEPkw{1UL5(RQG58kKJuR`{fCr!MQ{8uDfhi|%u^|O@SS7+tmH44_2~C+ zdj0Q7`R-jLaOOA%zA1Ah)mob}S5bpaI48c#Y(-Kod{>z7rfgNpT%%W#xbaPywv??V zS_*y^Ql=AkzBu#M!%#^-CH3DZ5P9KJn#@(HAqnA z=SI5s^Rj#xEzV5^Zej;=)ssCpm&#>c4bl&sd@r5b(YN8Wx@XCbb6gplTRnK-of`>& zw4ZknhnVfDwP{NkXlxgk>k1a#xqQBaNNUf^P3=J z${If96=6KxBVRv+WPy(C-nqPKORIpvUsVj++=d%}RWR`?of3c5JIjL{iB)=<;@HE} zFC!?6Qw%vT!4(}qK@}SI2(GA#{RH`rYKT{w1HBTKtDuM@h};+BoEbEQOBNICvMd9r zh*_kP`8h77#M~@K-EdwG&3MvBGdZ6Z>73-qBk_zpp_C<&UPl>2;v%T6Y`w1sRhO;n zwUcrCBdVRH5%xu)f+$DUMT8eFXCtNX>29Q0EuH}w+Iov_G3HhwZr4f9Q_`m7R)dep zA)y^=A-wxLgz3=CmZnXup&f2Vz>xL1V%A30`uE(B>pk$1dqtz}%Axv?UDOQ*Z=lyI z5>J=GKj_HNjxrw!apZ#s(Naf!&Xrisa~>_U2Pu@!8xQz6khBMfcC;O%s>X(P9N)I% z?IB4!L9LzGSNR&}l?&}8c7$aTSB*w8-`dm?+C%N+q@5Dl2HMA0riS(~wd;`P0=aq* zdS;=WW|@gON4L}MjL;ro;gR&Jd)1eSNrLuBC5MM_2l4G%iR>QNy08hk>6t?u=elcP zLwJfehxQmnFskqwvy^d!h1w`$q|@e{9%)_&Vmxg+*3K!%(Ep%$K%tZ9ufElEgc^ju z{JyG6EHQ_@_ z@Zc26@;k)I$@@dRTHU9R+pNq!N)f!;N8v%37Wi0k%TRVyTqEp>CM_u4jTRT%!ZP7< z%b$TNU1kt`8>g*VvMlR%yHMYJTsf>?ScF>Z!SK$Brt1rIPNl96LDf)pb1PX9t`ybu zCh?66H?lrlM;F%QP|h?r(D~Lxy{1`c&B8M9oDu89yjn`HwDqfD?BM);NsexWj@+-m z(_YjS_oMv(+BB+a7_%-$QP|9JAo5c`*DbNGib#k!RpHArjk6n#=@h zZr|P_BT2%^`nUWG%bX2W-p*84(Fu|(@6CCCHj$iVQ2O-N>j$RqY0c{*SC89&jDbI( z&|x*OaUfE-N{CKzzfdXe7m~&OLiD&_$RPI%VdQ=xIovO_hWiBtyI*J~exsI?+etm%A?IRh zorS)LBGR4+=VS?dkdxq6oQx~8tg7o={32e$ouIiif@V3b6&tKS&=B#~Td_orI8?j$ zGj}SrucY=>Fw$1L8ojPc|ENX<@Kv8kSLHH1j{277b#Nawf%m4ND!rcEnK8gBqiQPX zoT!^Dr!rLEj5#0P8*I4cd(EIs{T?$|uG3Ni6yH9BGDFB&)}S2p@%kwT(^F!ODF>6B zI^_%_XI90qif3?vDeKx=Y8?Iy0lV~zMe1bx7+gLqTl0PDoy%=7N#@1?;@%E2tuPKZ z!Q$JDkg^SPmh<5jx5K*ILLYb1>swK|y?{R2PK3A%QSIBoT-ph#d$DV#Vs{NdjCv(? zSZX;OLUa=ioXO~2%~e1RHRc+w5JOP6AEyctuu)%b;8(L|5`fCH-l$v6!Ti9s9IBru z%t01%TB2L756;H0Q+Ip4!7HixD!y?wU%Un}>l1SZbsw?M zn!0^v^tw9p+d6yv<7Ui5z%n*Ju0F8a4NQd_;bgu&_JJ|c2dsipMjtpKns_xD%Q`ul zt<3kouj)PY8WvE9!!?KfjH`*N(t6eERIglLzS7#VmEJ|AcT?&6d#F@PU6sD2e5L)$ zR{8*yevnEZ?4eTO6IJ@w@|D(kd-REf&NZ7)N(y*3!W_Q6X{di z@U$6sE7N>RMZ;b*o|V1Z4AU~fx*Wf0ZP68^yJk&!Y#K0t%j>PbXbX`2Rf5hCDgyE;|3sUc+Y;JDffMX*+ z4sT%`w2-Gw%??4sRD5DaLjYcqfq#Ao^q_DEhEsttzoUV_2lxDeA$SE||DOesS5h+f+AX=HqHn9(Nbg6^k?*7w<7AOQkVkl{=5gsGWRJw&zCKb1nL(+HxenU!h?z7iH{8r^E-`fyc#vfl2LTK-CJ{|!;r zKfq)EG>6!PInoAZuB|YOY|@;LBw@X+HXCi)Y_T=wBHPbgW^2vWc7S=C9ckVT_u_r_ zAiTC6%t?9-QDerLC+&Fi6?=&JhMizuvXjhD?PT*?JJtLhrQn1;8LrDxJIXGDS+JH9 z|LL~Tt|MmNnRsqHn`1K5sY1){4!omD};X>et|jbc_lfl=`?lOlH=sT33-d zZPmKU%-U7!sxqgqT9?eMTa{mlUe4DMtM#BSL536T4adV;o9#_IC6b6=7Dc#;EvAc3qnTJ)2dlEDwJ+t43MA5!tMM%JMC7S-Ack zVQCJlswv+duQhfv?Rf{EdZ!s^Z=pT!#&_y_&>q``Z1gr{qVGk6>~>Ty??8*}P8R6h z7#_YKO|pB;x%NKSM!(l=%(Zc2)J9rlcH_TS6VZFJ)(#UVI&1R4_-XT@*Z^mVPRq{y zK-5+7!u^U1KU%ghyqGeD>xv8SD_a;IPMN~B#f3jrwy<}MUEJnT57G$lP5@!|YEgn=pQl=FfiUE1CEFd36 zMcre90zfw85vT{`2LSTJ9stpC%MOsgZO9%+XT%4xf~HX)mt9 zf5{t^T#~exD)TZWmn*qK$(1R4m42^Qf~0?-y;fJ(sqQx>?VHkOneUG`>*{(vdyA5{ z>h=bGl;lZ!qe{Mw_+{$Hn*=NsR;a=X!BQcpD%6w;efCLva~j8U@6gpdmC&ds?YorR zqU3F9g)2+iTXnMwwTqO!EoI-EvhPdT+f()qT#%;hT`7Ba%Dz8k?@8HvQ}(`;-JP=c zr|bt(_JNfBV9Gw2vL8y>52x%$Qs&u|eTa~|N&9fpK9aN_RmG1gc}&S3C66oFtKJ+0(ZN*K{6?PscSP5W6T&*=79C7)A5hdpW0DtXd= zUdb1fpj`5#{gRR|EBT6&uPQ;sLD zr2V!Mv`(J1sChi8A$!t~5&9x60nUKh2`LCNI<<{b8GYY^E)p>_|@ioC(6t(Xxp-h z6jvLho$WAaBWs;3Bb7D}@J#dV-EHmDluh^94X+2&HPJ*fi**ngv$7^Ee05M10@y`Z z&jN__TaC-Q1KXd=0US^F?lR0dAj;NOR$dW(3xH4s$oHzEfURt5Y3s~ds315gxaaL` z;5wvqyq&)r$lZyZU2PX@Mz$}F;tVHucs*dpH7|WEABIcZVqGjWv3f`6BDn2s(%u*% znT?il$&-*mVykOvv3R6MFV%-wRuAehDkwFQsGthPZ+R+foY>R&ZS12Mcg8=c+gQ!f z(`?Pr(`;4I)A((y<|7Jg)@`ij=xMg*=xMg9=xO{mRx|91ILx|@)f_#|)*L;}Ruw&s z-R5N+z3Wa%_uk7w%C7A!N|B^!QH0p#vMYOCOTLN|f7v<91hupZzqFCay+`3QIZyE= z^Y2TbRGg=ItCDJMZ zbo2<$ecwBZ-oPGGCUSQCJ&avBP5A7e@_%a>At&xd$| z|3nB!ndB)YPb>M9`9#lpAt5~H&-7iZa#P4uyU=rBxZe{cUYv?J}P(0t##6cU5smC*jt z{!(E6DTHW6JB2k5AE||!tx~|4Fn;KZr=Kfz$*S`KEqFM2lvRKifENqT!ZDstY>XwX(cjTg5iF({pIlS&w3( znsB?GUq?AzX$^XBbD8;*2eh|Fls@a(D|^OMBs&%n(S6Cr`S^3h zdO>}hoyKLA`HJRoA2ifriaO;K3JWWQ9sz<}V;4v_kTAQ_4m`ZqUMbtny@sohY!9SB$b^T+x2Q4?r1MV!IrZ$&4X_jttpkS_a+3RYIhb`-OUPzYtLF z7aGd_LM*vowl??6Udiub*wP9_X9+^5J1@XWBh$2#k=!OcoBfMC^Ewv`5XUV<(`ON} zjj}oyX&2pyTazZb(dVd3bw20oOk4`bI*H(K2X*?u!kNm)P1R$_LA}rU)MLo`bC>D- zWljFld&|R9p44;pnE{B7krQX4tEKzQz;y`A1|dzBx2zD29%bz_L)P)Fp*&gc?_EJ| zrSFp&hD>(wQyJwT;3fifAqsCt1MhD43?l5=lG-an~r`F zMUT?s%t838*YnJ1f053N@fS6jvHl{N8MgqQ3|;2-EdWZRSu# z*VF|=)8MYqdzhR7ro;A{X_>=`4>_x9Sk*I5(Wh2!25004@IEZ#|_+Umg4+(IpT#CsB4{qvev0+kE}#}U=@K_S0goCgJSVogdwLx zoUdczoPmYhnZ(jO3(beKq36zloI4kKYdza%ldUrw*f*OI4!5vPw&E9JBOBr-dxF_) zPr(<&>E=8Fik)vaqm#S^(e{NXOKD;`zlL^4G_lS^#H|onmRbf980+gy)63Xhzrj@i zd_Tw4+1F{;;~X7c;Hr}PYRxy%_K;ZRTWEav>HQpUqtsx|9)Vo;h&#;M5x1H~`jdg2 z>3^iDz;Mo7))4rNMkd8k%cqhaIW<$y&*0r=bo7${Q4vOdrV3Crin^&4BlnH+$dp0~ z9wK%cj?`@|;-M+X$PPy^bR=4K$I_7F(1=@RuAmFAc8#A5kYjoKJFcOJQ}(;Ap#Yv+ zX=f9Y>lvD5MaoCbn@6`uR6Ybqq9&;=_Z7tD6kuN1biMnS*HRf0Rcs0C^~0#TxQs0H zVy=AQcg6}=<_bgg_`>!s+8`a3Z>g(~zQcSSm{>x`EYt6D`n`^2Jd0&Kn-#qq-5z03RXM-&4qe%CpmYqy57$uxR=#+A2WJ4Yw3P-8nWnC#JU&pdl_r# zTJvFa$v(mgdx(+`^Ts0xoIi@>@KI3vW1!Q$%>5^r%lmRGV;%lbeoQ#EN=lAG+vr8E zAZ5+Z+=Qt|59{Y3`+)DgnfPbFbaVb&xvBFl^Q&m;aQceIT2n`w3)N~d$YnvkaZbF- zQ9DJId7NLJtFD?zcfX|?t7BRZ)ty{i-506uOZ%yg!(ddM6qcl+FjmkpGHwz9r5i@p zq_mR!aOS_0b%&UWTpR);bm~nlBMzm}*Yk1X+}9Tt zFNK#}oqio*(2TwryPZzc<;p*8W+lz4%X4<{<5 z)clxjKwHi*>M6!!03%Y*C=6p9#?zZq!1u>;m_Gp(sg>+6XM^cBa;Q5WPSeGxO5MQk zJ2=MeLS5=k_MQ)-F7+sf6Qh1Rh0HemTEF-)^gaS`mBusf(B~!j^9CtwejQ zf=JOpaowY1b&t=@L0BJA-8-3aTHg+dQTMG*%UM%|VBV{wVClajEjMy!k-Pfg{J=Pc zN;?VH1&5k?&cK6hgTby0$FPT)279>sxYz%fn(Lyexh~>V9D(u6XaiP2-ZdlcFwOcU z0xe(FPQ_N6yUOmwKI2Gsj6+1iK|^X*YkOO+?SW#Wre;R^jahE5(me6IH;-bQaU)uw z2D`D8J;v19S!Nu3qUm-HYIcMN!USs($Ma>J&Q}x0bFE!~cF{s;loMRjr2aO?3}NPp z@>m3I@dvjdp9>+ZEA?z!uHkLDhQoD=8h$jt8e8oszNM!WP_Ro$Y#j@RZ z7u_d3xL^d;oPGz+98t-Uh9-SDoh)cJ- zb#%-b=pUSE2HCSv!#W!^taBLOb5SX4Lj9`MfhNQ`5)JokqZi~Fy&&6Y@mZoq#|enj zi`&`}Yio{xU=3%FBJmw539et4huACp>;U46TqS(Vl?Ug{VsLIQ3l0pa9>6)c7@XSx=e_&s9T;il z!8xlKoO{ZGBNrZ?u#WeRVj`Ce)`tM+!}|dT)?XQLn5-p(wWlmNaPN8mr)01`2{=#f z2OPML<-sW#tk0DN2gYF!;FJv3bAa>we!zj@Sst8{!FsVQIHC_r2P<7}uzmuX5 z{V0cbU`&?>r+Bbn8<)d7u%yd?qcHKsD=RS!aE9*(99ZdPz^N%6ti;%|;J^*<0i5E& zN=yNqhW&s87r#6>#eToxPzYGuGt{Pwep zuyW!Qz&W)%IF4Nbksv`>8F0cqCJH$HMP{Bmz$ey~1qZoA8E|x{i}8Zo7Mj=qIL-S3 z2YE^vaC8bQ+9VR^mjwrbSXBPui1=Fs!E&yQ^2Rj))cRYou-jvrmg_J=DIM;QASS3+MY>ql2o28EM*JV56?R3OVbi~bc#5?GSchV8>q9bmh zBi=(t+)796I)IKq7}`TecwowP#NA~(0_j;)Q=DwjdMUvsA7p|)=ql-%s6zA?RTro6 zm`NqrlPwRh{+SC&Yco4Y2V@Qr_%A2IKK=n?ZC z@-NBd-&&A=X)gchg8a*J`AZA(FL(KB&n{}cBKOv91#exMd+WUqMMf&jUyj4`j0wh? z>R_Dd9~@$a1QX22V3Ii`IMhrIrkEpw26J?9n3)$$GmC@iW<@Z=tPW1E z&6k2@=J{ZS`Brd>`F^m{{5)7?UJllnKLw|mzXhk;%3z&M2WQ%W!C7`_aE=`loNFfq z>up1@!5$v8*kgiLdwj6bE(|u?6NB^Ysloa7^q}3I6?EA3!B*QATwu2bUA8;uwig8# z+AD({_PSuFeOqv`y(M^q-4$GFZx1fFyMrt2gTYmK9LJf~^Lvf`ux*T(4(NLL`5xQ~ zfdPq;7?Pdu&Khph9&9M-d_U>4S?^PppZVFW+m+>~e>Uq5W%)Ib&AL-rej#MD?oyUt z4cV-_mF1U2HtYS$^6Mg-b&sc#*t1Q1lvRU^j%P*5`)^26_wc@g_-ec}pmR};- zw?3dOzlO3|4=Bqooov=-W%>1!t?Prz^2;Xs)`QCO>nfY|A!YgHl+9{ZmS0l?CS%oj z%^vgNJ($Rn>sM4Pmzh2#3XMb5ihb zvy|zzCfLQ|y3L#$yw7Y7Zf9}bVY-65%o~Ec&DFvC&9%Y3=EmSYa|^cp?+HF&?g}0- z9|%5ZJ{Ww+JQ{r1JQ;k%d?I)lPpyxbuLK`8&jpW}7lS?K2f^d!N5K>3*TKikE5SY% z+Q-pO_=HUbpJbsu%|iQ>9T9xmjtV|&Cj`&f!-8j7X#d7S`@EeOe8DaVzGRmMU$(1* zuh`Rq=j^$`^LA74H5S^}ZCCIOdvWj|_LAV6_S)b@`}W{l_U7O__O{@=_P*eI_Ws}{ z`*83B`(*G#`-$Mk_SxVk_W9ta_TPh_+wTOwus;rdX@460+Wt0p+5R>7js1J@yF^v+ z`$YfXKNACjSKQ)s0-i)xsL2A17N@R`f%z-S9#ybt!;SMPSL6o8AF_hK$M&>5pAsFz zsPLJ7Pva1StAZ7x%^iE)i4I|}L${rhCzPDGl!{7ISy6@TBWZ?LROgWiu_Pj7!j-f$ zbQ(lgE&5Oqb^CY`pcUmg322{1<%@~!y?L-4Iax8(q$-BRz=<<9j*GxSg{=%YFjSu? z;_p_J=Om#07L{*}`b`c*l875V#&31>n~r{K^qU9MiS#NO0CTDtP;rx3{@V`vu=szPJ37$PlU zPbiFxcH-3EyuATr@BVn9xj=E4yQ~+w6&))!Zd|pat-E=1Nhrke)ljv=(}){Jq>+V< zOqx+ia}aUTP=)H=e>}8U)!4M;th##h5f(4<-w;tK_Bj{K@P90#Pz;bB;~|a?krxM9RH%vpCA#~urL=G8>5mEa7HiOQwX0vo`uu2dVV0ac<5sp>kOU%lmm z$PjSMuPxQ&)|PoAW!@C4EtRV+g*MwDN(YF11)+i<$~}zSu`BXfnrBkn;a}mZyKzMF zl`GLR(O&~k`?Ttc;}Nc|29O3Ngd**44omaRX>t@kJ#8kN8A^^&GE;d+>Z(zm!jIO~ zF-m47T}W}_htUzZu^r#My-N|V8OC0fCYN1$J>~*B0Kcj3PIcxZ-AIoq)~V=C^Wj*4Dxgn}s$49}&SOyA>JxBq_<|U)ZV=hv6h|WSj_%=vosacjZ%N1Mf z6vYo)8KPV_udjFovw)aSL$CB(&Il%^n>(+gZHtSc+-I~>9Sy>2e7jdpI%A3EfyXYT z1~IV@`T2|<4QjTL#w(>zSkB_4>4yXUOC50sqx2DebA|YX^^$rg6!t4Nr#C{IX|S)e5@}-K+G^-26LRQ)=ik)ws!f^P~9aR!RxW!^e;;N zTiq{1v8YcY8{=dYw+t+wjY1oM<%N$GqgEJIzb_D+&CyGNC=UR0#ZDE_I4L}~X z4>KW@j(n?*BwwwHJQw9V=CWKBJj`_rYtc;LJ}?tqLB%T5Rz?U_^o;ygrf{45E8NQN zyyWspXB}>g{(5!L5l2nU?M>UZef}RGlZy9r`;ThWpavHzn;Y$rlpU&^VJSOY zzawyVP2f;FL^q>S_8`4^u#(Zr8KY!u+K#j1Q|3+%B<;kson#MHGC7SB&=eJE zNZF}+hb{94J55E2x%oc*PEVOT^gAPEkI?VTq-EzEZ`nC-uty~=o99H!<~h;MO4-@^ z1%`?CSS54x4oS0}tK>N49j`o+iFTfn`AQZjStwutYmr^7s}q!m6OtR`qhz9OP_dJg zoSd{v)A;MaOUXpLTs^Qt$tg-sRkAW^S5@29c1;@ZNvA1iZQ3lAUy`NHFG*gHQe6Eu9g0x9j8+6qy2wKv%)oxU>Ny%m#P^Q>gDZjTGhKmYkp zU3DaJP{Qxlz#MVJ5xTlS32sSlw8TT`R{h)cr3;mV1CSf#3gkw+Q{TK;J@E!Ty+l`+ zrtM{TB_X*&c~>UomE=O4h}diFwR-*A_R(8_5m!tx0=B%G{DN zZ%>(qQ{ES$Zh%woD1=3WHkemTUCSueISxx<^^c3*D?95Eci$LpG#+M7@5 zYTZa^t=5)R&eCXHxm~W%4?ZRP)4fDg=xpA;O=0J?dFDJ!)9H-Bm{QuUq?W{1{Gx=| zHFvi)pTBb;lc zDis%|tkR1fWp0aT!cy|E0^45JQMIO3G@)LF>jim?$kDy4x*3ULuygi?ayU`^YC#jC zH$}zD_qwWzyCKR|6bJABSnwK<*YenYB_A2_d$nv;;daxjClFcB7QNrQhY<}|R3NuW zXh_N?SU_G5eD$tkGn89eg61sJN5N? z{8ua*f@s`jZVS=(zRyL{ps6c3#lPL$1X^6NcyVZM*5x53N5FDhz6;0!NfO(LLwl?F zX^1Hh)w_@#cbeOic2{U`v+oV<`|Rx@{-Zxs&djxNLrvN{LVKsZE3|i$V1D$?5RaL^ z;w;-K*7K4Tt3*`E>^`*j*n30VX!6B(oA-p6F!7N)%iSOcf+P=BNxYzCu z?fv!xy*iTste=MV0fCi^1N1@jtI$4ZKNQ*zTjJq7WFHRgBf9;ll1B~6V=A@B-j%eE zhjy=hBD5dV*Y?>bL!8etIR8#t?8hx`LyB0fj7nJ!JRM}KLkz94^IzO8rH&ig?>LEw)uB?WaTgS^JFYdKM=p7B3XH*?$Y|=P^Msy+qNdbmVDhzo2G) z(S9kkU)H#NMeY5nuAWo!yppexm|M&{llI?3`*r1fL&<+Ac|plH?TexPmi>0pekZiw zwciWv_w8;d<&x=`-;hK5lKp{_ABOfv6gN+sPnGwP67^kZf6Q#cqU=|p`G#iAe<*oD zdAsO+`xA}GPc;O1Pf6Negt$LpOnQ$s?I+u`I9<1#uM}Vsoa(PS)NM%T;AKnUsbBuV}Cb{V(CT1pl9jHnE%99Pd&+pR_qK=+qTU`;Bf}_F8I#i za=~uIYl{a;iK34jfU^q~!42Og9YD01E$V35wzjQ%^AV?r9E2>@wzsAu>#4*Mqu|kU zC!GA^fFP6q1Vt?Bk>}ST7kV06|JLwg&Zgu4@sda%M*~E@QX&ZCyelGAqa05H6&%F! z?i}Q4i`V@r4O-nh;Bho0p_n+*23wk-uN}?HUMP|<8ZsZLub|p;enblQ5eIdVACdh# z1F6A>LDr>(J0EW8ys$N&Awng4=TA&NWK%XT@AQIWTghZBMZM#FO>6&uUSE9M0l^xB#3NAV54djPIodU8h<&?C%bLHx#oWRKC0O%&6 zf4Ev9ql*G%#bheXK#F8fo6#jT=t!*G==-Wrw^?M8YUXAohiO*Uq$T`Q$5zA9*%6_l za*iS0quKu5ay)pgVWLXupcQ?#;Diz#!6b0ds$mj#a>`BXqyCY6v&4L@MDIty4JrFb zU~BEFZPdk8)TdgfZ5;Coe3t}G8^BXSfxyrwAxpgvCx)M~)+HS)w!ZoVkyJ?ZF#-21 z6}S?4%v2F?>M?})`%E?Fwo%L}#%X7aHWXpz;8%M8{wi^03vI@~;7y(-6k2!*Kk}7(nxK0Dag6 zK@dPQ=^g=8HMwGs8J2IR*Id|u7DaQchN`HBgidR|N%pfe3H=}I8!;R~6~?)>h^|Ju zDt$wbRWPYh1UyB_On8MoU!%W#aBGn+$*A;R@U^+(m?W|FES z+6hn}s$XdiOTB3nC1nXbN)BRh4?`4}JuVUo8Pmy_5zjcHIAi8g73DAGgSSwqan6*H zD6<{4*Bp&)iXL+}OBOnM_?VfkD?WNGqcSJTo~yil<~W5&Ii6@J`EKn(UZ(gA{fJRi z#~d7t{q!hv9%8uj31ZWZH<~RtBkExIwweuC;9o#6ft^IIyo#VT*AqYJHr%Q_h+CD9 zllxg*s(clfDlgzt&yL7VijU%X!_U$Nel;l)6<)hd)2zzn+!UJ(iKwL2Au=jCk2)nZls^rb?aj|O z-Os39XwTf{D#=>5_(dY!93N@G;`F1Z>LT|Xg2z|)eyY1?Kh=E<4EMXh_1Z%NK6cT>K1ifW1M!Sa3dXqj5%rYc%6jJl8YB!34r`^@5XlOHiB zJZ?_J1Iu1>(o%ZuJ@Qv@v@e#y>K?4ur z4MtAFT4XP?n1tKTylYa~}+rAAR_47C!nMi}Ja`l|X$Y#4PtratMeY5g>A z@hf#sV_07mm8)!DUmsSsw~TCQ>{qX@p|T-l>TOK@c+%Kk@sGG!KPA&7yS7KoxLu}B zRae#btM5MmJkt_Y&Lx#k$+YrbeX{ry>l@`1gTl2coKoREM6Rh%)mPW2>udIyO}ou4 zYBW#jzOlX~xCWvnWL3?o@(_$nY@V~*jPQ-iJx=MdJ}g+|KI@#ur0ZXGkD8fOGuJn! zdT3^KwwWHrep7~32{J)Q&VYLVq226icq`kSpVa?Ak;vd@~=Rk>H$BEE4@Ei341jRRDP<{uuL*HkCzr?iv0ooWp zB1dk5erkS!Ta(|y(fA`*e>1%KwjZ!)rI?Z6>63SJ9WZ;o+i#ZRQJH^|$}U_VYzZuPQXf*G5;9*mhJRnV4gyyAr9y8njzf zqS|BYP%)J)T~i$Mjl2 zPcC%TIwJ(su(BKbKsQa)pn-0hsHa}cev0yeCXRVPu^z3uuX99;-wkSanOnHmNNa}3 z(VS*Xq6Jz^+l0H>YqqjOk^5ffpU&k;&1&o1-23Z!-|b?Dv6)2Es{-oHO|M+m43|}3 zG3svTbtwB)Ss{BE98I{#T#)Yp7Y-F8mP&gvDp*TV!CGd<*yTjv`t7fo`gebnZb0d(g!xtH5x zx+jlR&+jqY_n8aV5fpaB;|3e0i`>xUo9#X4Yyi(R6SJt57-ySM!rE*aZJU{G&%>S2 z6=tQqGS?))$$`I0ynKLF-uGx+0uAaD9c~H0J7dA)FVSGRa5G1YV2hv3ToNJw=r z{%-#H=vcWy1*;odp^HTU?R0TE74#7&O}kAyRn4B8pU8n`lAE)Q74A|qR@4GBRz@KC z8QWMH&7WkJOe!r)5#3Uh=j?JGhUKVnDs z;Qr0klvV%F;n*j7;4*-dYB7lC8JHEwxDDt(HJDu2< z$^wLBD*{Mf0EKbRU~2B1lU-|Taa!j0w7EoBo~@lg+N-0UVRrI^z0xJXeks?i$}||{ zvfZZMP1QZ-a^*xb7W}d^k4Wa~L}GtV1AhVe@=G(+{t6ddzXpfCY$n;?pvw9?0i!e&Vt$h5?6oFOdCFY3$Gnlw&Uc!lBXECH zlNj#m@l!O+bwG#%!9O~H{)GELUt_$nZ=$i+sj=AUSCZtRtWqNqqhrwJ8~bPTm#D7m z=~5l>8>eKh+GE}R_p!(K4klxA4T!1_d-y+AGfr{N~)5nrg|idZd)m9cTiqq2YI7HUCQ$Z^H<;|$!P zc;26%A6d?w7&&6IGGYDy4v^z@Pv1G~O+TUsXAR)B4E+3UWB#5;l#2EkWc{=Am(!3I zn3h&S2=jx5LTdBi`Km4hyvt2GaYbx+YjV9-BZUkHVuhgW3B)m_Al?XwZv(_QpDGVx zWqA=>FTlwb5*tk~Ow3ycvuCanq<2sx5rInwYJmL)K#G(ls z75CFE>5J=Se2}u4Q&E3gTLJ}CQ2AR z23C1sF63AL#E9S@l=@=(nd65Q+9-VQufINV411OSCh}IHfR?+gip?oqotvbCSr|do z5b|-lX-UJ=XszaIW72F&v;S;X(x&9Rq&Yv$vA$g|Zc);aG=%HiYA#5blT!vI_^oDJ z+JvSx4J#Nm_-=z5{B*M;X;6Z%H#?K&;-q;)(p(|~TB;dhE>+T@mo8Isxe~PDuQaH_ zUumw^?KMiSO>@q_PFHVCW2cBJ{B(mV{FMe(_!;JU0sK}aHz>I=Y2KDLQw@snQw@PR zr<m)1$YVj_v!%F`aqUV7vDE4-4YhB?20k*e# zQJ(bRQ%&2uI|=TD`e>4nPCJlb#@DnN&@5r^$RaqAOVjT@NF)F%I@XR;TDzK2mBRN^U_qE@ zsNfWJA9HniYxj=MuJad3$&LnNj5ja002Hz=e^+3z*)NB26cHsvfV4o#Eg{T=BTJMr zdl*@jcz1}fb)ED*QB^1v#AhRl5Ps7Ol~ra}2x@3q zK4{h@&4U8+Lm|%UKN7;Gy+6cN{UafM>UrT&vnFXC3z1f>2@$-KJg&EnF-L{wXeEur zaW|vr^l8m#o+{YY^l3#y9pdKxi4b`XHSZ(DyBSmXdThk9BVDea7Pd9DcY+{`ls{Sh z1!_21ZKIxb?I#v%^7M#C6})q0YX|5dk55)~INcZp1ND!bmVT6b;CgPaS{dtKqidLI z@5ErpSqU9o4wvU+5@q#j%54L^sKxF_H;Q<=t2?(hZ(fB4Ol!x&)(hL3rTB*q%c{1-TtC zzmrHIDW_Cc7scakZ;!eOU8Ex1S8o2ZAD!RU&NevMmoIJFAO~0xy~FY>*IVW2BCjFo zX-Ti*7i#C00((2;r5OX^B{}pF(2fbAdWh15@QwQg`M6&&5x=7SXF7^l>4I2vTQfLUbx(qa~fK=*YwNu&(!WQ1Bh@m z3-f7d!|Z~)w8sppyxUBZCd@EO4W3n{=tld@&~?ej&G5&~h*`;DNr@~+P9Bz|vfW54 z6s%~JxTOavIe0IUfjwqSzNO2NM92YZB|@(>$JIfwpog0!wD=^`fUt1}dOV8=O>-Kq z3YyF*=wO_RzQsy(ELI^-TLY227Hy`}(O+7}etCxLt(COC2?6FpN>)*#A9bHVU(zGF z9^94d!Cg@g>gkD$QUDCs0l`U(=OVsvG7wa9y$n{VAGb#sUvat?7kAC1V9rRIH}-DS zh(_))wC;0@M6fDz~#hzUpNkjS&ueK6M9S=m|4wc z60F*(+&7}DFbmC;d1$6ALK>l2F&QYva1OzV15gj7&+y~`Yzm^4ohggyr=`GcwJS#O zpTawuJA?gbOoBOhsCd_tl}yRQS$!G=9!$a*mB=W%ep#$zZm11`={@N#BDx8;}XvAIDwmbgl1163t&okM6Ub^rRZ9X6%7 z!|p8GVNK;bEH-u?gWS(2KhQ&m2{Wm~Hqb>0(_DDU-uKLBtKUWE>2D@46ykC2vZw5o zt5&Tf#$s#N`1wuE=SQf!=*WF&HKRWwWia~3o0M*__{V2M(u_?K1Ovs?&g~q7ywYdS zj#hFWX^IcD<-lR5%h@l_E#BP97AW1ToI{NRKBm^hIs}d5LPPY!i@sJ4qIi$eoY!

#>A-X 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

@r2gt^YXeyg5|^@_T}6BsCzvCn!mhR}SJ1r5~Gj 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%0A-WC9; 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%0AC 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

1pa6YZlRXCr5hRl5? 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

  • BKP10#&$V=?U*>e(4`$;-a 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

    1s!4S9=%fNueJ@r_TcNK7XVB8WgzGb1n?!E7@p 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

    r>%6J+`SL*?It%wq(9P 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�EB8*t#|nR>WWt^^Sk;%Y3Puy( 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 literal 0 HcmV?d00001 diff --git a/lib/CodenameOne_SRC.zip b/lib/CodenameOne_SRC.zip new file mode 100644 index 0000000000000000000000000000000000000000..22bb966cc3987a3349b6c7dc7c556a7ad4b1340a GIT binary patch literal 8454625 zcmeEv2VhiH)_-WyRFEcu;v))7AemHpz=RYMDG4d`;$&u$3`}OmnF%By2o|J>B3J+` zE2{!4_JX2f2eF`QLyBMnv9Arp^8cM%-n(xa;NpJ!eScvRoLv)s{Gzsk0VBB9m1;FZN6Zw-x;G$`|vu|Hh(Y{bZ1Aa0yO(@YMg<9t;*%8icu?^dwRS< zSEY+1F&2d36zH?n*I=E;=q;QqfC~^`AU2TU6XvT8RLAHi9D4z5K*zUb1-y2bE!K(+ zUlxJ-K+qXWDhS6}&>0BE9(*`sh{<@uCltkP9#;)p6|p8XoPbc%IsGV{JA6o}RppE+ z97U{C9ju9k?QqgTKUjg@+L(Jp_!3mA)wp6UjfhaXU4i2xaCGOhxjaEq+i{KWsVxMa>AzNS?c#Dqrj|GZ-dexiY4tk;4dPm}SJ)i%zj00e zz^_x{8sNXU-{MY{LWb4nsroK1u4VSZ;*mp7YtaeEk+{`;Z9h5g zs(Rv=(%WZ^+cc*9z9*_)I{omVwY}eY=bdkE4Scil_Mc}KlsAaW%^fyu*u(eV-+GO! z(>3SL{I&Dsen%P~-gjQ^rj~L0(z~pCaNUl*W$#WoQo4WF_sK_|{_vSg4*MV6wCNvH z=Ph5?VQ-J_-Je@~c-Ci~j&wQPr0Hwl%;|E+W1Uw`|Ko#6hhHw*dDH6?GktqE-|^1W zh3nQ80R_t(X}4T@=%!bCH~M``#(<~V^;$nDI5XiNZw-DZJ8so! z=LR0?`gQ+|h3~zwp;5bClRljN;e9**nDhPGE3dqAc)9)B1)D63UOE_Pb^G22W?xWR zzH64F(-*gPJaa>E`?-$dcZz=OwyyZBCz|Hn;yC29&s|kC_LgZCpXRsPd(oTIcKvkw zn%TeaPOp0X{9T^MW}mS#%l^jlif3muP1rMG;nK>6545~w*?nb=pX!(M_OLgXl)m6P z<;sSR$$wjv(bn;|ExF(Q{!X)-pKAPbmzDGHx$NLWAGW=2;q)iJIx?!=;U)R@vv(a@ zv>>be;=|*w$armV`*Aaxwxw-&?~8ehF223R zQs=)OXz=6@&9nNx?yLT=-<)4>J+HdYuQ$)RU}V|?OGf!URr}jz<=N6N-2Cb%?|o5Q zQa<{Oxy{y9?E2vkZFi+(U9&H){^s_vo4S2_cMjb zTaVf@^t-qv6R*DH{cD>{8T53^@1K0xQ$M~kzx&42*D{;*>HR>9xGVdgf78+rzDT-i z)z*pI?^@RRvC;inU*vC@+3@QN`phcbKJKoL=QqrH^YfRslq_%3wQ_gEo2NcdR+#nT z;PZc)`Q+-kC0~~ZdNjSSZ1(Au&wlqn+>z$D-WE4|KDC zxwc!M_I1xU9^N2z!;S%`__x3N;MCtc{QPj^TQ6wUas4&DGc$&?+PUP0&Xa!q`pWM+ zzHnCNwO>Bg{?)_d`!~3J$t|@l8b0MY_s9I_n|Dkq&+cE?ukY2J%eS_>V|7RE- zH+ksCy8RWMZ{Gbv3Gdo-iz#aUVi`N zp{);TX~m1`lX^AOv_=n4Y#X=z+!Z}r#1-~@|I5GkIq+!r2X+*;t}R_2|NYvI)$<3( z4Ow;9fuEaJ-{<}4*Nux0{QShBe|_1y!5Mk&^2Sb?_VIIv7vIyQ_tm{$Zrx|d6-x#j zys>rL&RXuftt`zgOBa6h<`K`!8$Q3k*%Mp8iyOXk*4_i>EI;(DeQ~pfeU@A9e{;!q z`)_*vZ*6Pe{N~3qUQRvzo71*`9^BWzw0+|R!w*(erlc;*c>b4PPPzZ-=9TlmY1(XR zgUht6)`yx+?fv%D-iHQXzN68El`pLQ=;l^mzIf}A?vFLe9I|(B#x-4T*|6)$M?ZM> zp-cNMnRCnL?>pu;e#2h(<>mLd1M}Cl823e5$Hu<82Ku`r`0gO-^snsF`E)r;aT*oO;vG-(S?d zwfi4k+h(6#m3Q6Yy7Q)7yMA@f=*s6CFX*`F>`l+V{d97{xUZh?I_}`j!-sCXe9r}) znx2xn^Ygbiyr%X1=Ov#vh+q1Iw&ePCx$~b|KIQpWUP~N*U(M~`duuZeKK=1;XFv1e zzK-|&5Z7$#Gg%#%EgQC_$?Nwl8>Kbt_{LMd4o_BD8?;!n@}r+tw!YxkpC*0#=-MWC zfB5*Ko8Fi>WYCs{z4|C=cqD1w{yRULRejAnNeym3qijSk%Ux~OpWb6d*M|8+ zMm|%zrdN--^+)RFrlS#UUJq;k6hj~YhvB%#&5iz zHrKVH*@f|O3m$oJ?@wnx-fUz^!-6|5+PN;}`tL_yF)!(%;xpEa-g(1CpMEs?wpa2u zElr->wc(28^KY)7JFL|`tLB#9SzDg);Pz{>hvyd8p8wG+cg20t?vWP0G2^fN>Z?s9 z*S&q?p?zx#w)OvTeCzicrxu=d>4XcboAsNQbSSg-iP8I?^WT}e@73}q5P^6=Zh^TymLzDMtPItug~)|ZRl`1emZNJck)+V z*1YP^EnDe5zh(Ol`$p9-o%XqHZ~GG8*SjxkYVn@FwPEGbp4Y#yY|H+O-|h5W+%2tI z?hZ8QQ?#~YgEu-1ylHa7;TO&?+;;V?%{xAQ^`?TeK5tfVR*Te&;}QZpN8fwJ+73C{ z2OfOASFl@7P3hX*b(S>`q&KPPvE+%-Z`jt~*>LxwxsQzQ_Qm5DRhM1p*_OKMhKnwE zuj00^z8m=6-y2?j>z7~OuxRi-zjW$4_h6%Ue`&IC^+jD0roY&`_=j(&Hs7_V>7q|I z|Mbag55Lx;=bEw~AIzD%@`f#swuxJ@<+lExyp^!EeAB4rAMG2I^ZTTY-I{;8r)+1R zo1dEA`=O0fwsd>t@@KOa7Ib`T>jk&2Y;lhF`j%yz%C=@~xc-&ReRDV6eCC6T=KW)6 zi#JxRU%7DnoTkGcY@T(QR{T?D(OVfK4(^)W_x4Y=%u7faxct;{v&Ig1=ZAxB5~j?1 zW>E7t0^{q;cK&k7p68GBX!&UGuctI#x?sUCh07dE^3Pkf;ohg)oL1STfBnHWU1lAK z`+9K3<&P!1+ihL{!wcJ|^nI#B?(W$ct?%BvW7woaFV+|QnE3fiGbb*a+o5K}@7v$J zymZCNbsvASwpCnQ+dT(AjQe5P`CEUjd}!rM7w_6J>B%1sj-Pp?^PrVa@Bd`&wtnAj zpL4~Jar={JY~M5ds`DGa+{^M|+x$h7_O{({>57kfJTt(%`sOZEzMnp>{kpR{)t)=I z`3Ju?^Q{~A{6|lxetFx5eV@1*4PNuwjQvxqrnJd!nsu;f#E8GIU%&q5bu)jw=B0tp zJhlC|x87)b^&7Wl);8(!^rLfketmlOm(%aq?E7r(n)jdk?a_xGxnkG%ue~zA+oj)3 zUO%L3@u=1blQU;Gi7USI*(I}|eP+&b=Z^9-K9Ae7<@Z;|4_oFqW%KH%GtT{0`~9P9 z<5zB6|Nhm*JJuJEO8vg<;JCe?HD3L%v-an`dc!qCzPh$ui$I%uSKWU2rc2v5EI2%T z!6Sjd?_a#pr~0?@Gd8xKzwfHj($drho8Nk?O|sQGe^k5O`MEP%zq#*=t@FG!uk1Nu zzjehMt*<^Kb#=qE9-pm#Yps7zxqsB8#VahE6P7k_w=!pQ*NT7KcXjrC^OxLk@%Y30 zt>5fgyl&>}KmYc}qAdsCSwH5;wr$%=nmzf>)Qcb6dGCxTcNfOZDyzL_<%|X^%HC-` zcmIli{j*C8tx-zc{n@$imDhIL_TaRqzj>^xs;cR|qlcyZusHX-H@ZAE`M!Pid-|nc zJK@{j<)0RP_QF@6JwN@fzpZONx69m-H#*Nb@w`O~x)(0%ee-J>i~i=GGiUI$N5;4B^>yP#8R>DtdJTh98UQN}B)o(f#__`?v5;|lXe z=582r(Pbnov;TgJYgS`(xrJoic+D|L){Uo;WL@{cS1WgTJD0b6Y1ltIENgc|$&DqC ztiJx7o>^Zm9@2P7V#9fH3!jObT(`GLm%4pRdgM;YDk#Xicj?&11%Kb7{XOf9^1gY^ z@BQb1QD4?A{J5Ka)}|hN9z6T?zPBvQ-}vaj>1`{9J^faZ|LZ~9eqQp;tNotn+$We{ zh5tYN+~b#hUX$Ku7^r&+SnC z;MB5H>+XE$;bjlm(}NWm!$*2A>(JqkXJ%hHdE}Jm4xDz{I}azE^6Lj@mp^~b>u)}= zuk~rC7cK8`%cQ_}2j)#auyD^K!L@xac3*Qa^~*Ou-|~6FFQ2-X{@`}KbLE}gr{39g z=A;X+tN#j)$G>~Ju+_Rb7w3*`;))r zr$5!c(VJ!0t@`vx+w5NsU3Kv zuFsqO-OlsR={KP8+}Q*3ue!D<;iJ^69%(dmP=2ESmftga?;MlbdfWB)j5<5#j6E$p zzZ@CjuK)U6@2bJSevtRgxla^SbzgSMp{qBZF**I?rI$~9xp>8@&+qM6;MnH4so=qa zDd&8A^Ea)MM|^);dD3Sum)d6jJnZfUgU2k+{@S)--uQcVEI8%Gth6!R2j24YT{oUv zKl9N!|2SOx-s0@juF70BiXouql-0v7{`HdU=L|UOj_*D{b;m+)cTf~-#;Yd;6K-n zesya4!S|Njc3@Jk{M4n%uP<-kc**0v2Yj_?`|x#Hz21AT(~?<#>zk3a?UmXW<0hwd z-#T&Yq0{C(+xfgNew`V2+V+Mc-mQNz>w!&KTI&(lZM*xr8(&@C|FJz;Ei%Z{A#Tzd1j+PFU6U(>4*=+d*gWXGW~8_t03FRv(;Ny{Ac|NyE>5=$Y3JwEgPVH_xK~Kk!qJ72P{G$-K00 z`h*p|R(kGw*?-xB%b#Dr{{HfJXPv*l=hhDsd-olmGV6mblj83gx~isX!%cmE^n6xX zd2XO-;IU1^zrN|8&kbGi@`@fS?p`rxpR46>5B_xi_m6*)`9kLAT`%u?epkX(*Yw-8 z^E~edomWizH21+Vr+UY`HVo@9vzxDJ;Lf~5_m=!R*>%dB*DmU~VAlNlYwEA7Us-=c z{jK$v*Ov}{=A})~ZF(W|jm&MQE=cG&bL^{M-t=L=$0l68>-;kVPfpzR_0;a`YR(C) z4-WgN&&EyzKY8WL>(@U#q0^6r|D15e?8^@SJb9xw>-?&l-p;!Bi#0#>?r`0N#0l#U z9y)W%ip{^J+%RH66z0`5P!kZm>y*=ufp;}|Tkx(`J4)LYp8fJ~Rii(g{nKkb^RkLZ zjhZ+2>}}oRm$fgxzTGR-5%dM`q8QIrE9C2dBL^a!10>3G3FqGNW%or{4z5-nnk{ zdo4B&ng3ab{$*3UWsL9r!&l=w4m|b#u_Nvu=sw{8;LY71KR4yKrylRS{o1CjntoS( zz$WrNe*fsKyKWz0n>usZ3$qq| zcelM`=S!cPeb*m9FU_pJdqvVYmLBK4+HUE)Wy!lQO<8cm4ec-a{nxW@A3VEFyR-3O7_wbhh|)+;2_iUv<^D-+eqZJ8i&#%T^6Y zSkbWCGwlOs-dWt_!1<$onbmy49f#&O9y#XB!IvD;3MS6D_3`hfrB28ynV5T5?}2-s zx%AwuDO1kv*{j#(`Cf0bch@8RZk=?;t*^GTESuOZFsp~x*~#(Eo~N=u{^_foom&L^ zpR=^x6no2wNl#oh^2yWiqUGKrKY!D#a`ji=zc^{}<-xCe7j~Vn_d?rX_pR@q*7=uF z!4C$Gs(WN^Qn9c9wTWlET6g59d$rZK&N}?cfQI#lE5;^vf40Tgnhx#SO{{3S;L?rF zmalE(-Lt9r9Zx=a^OM^jZFujt_dct9VC<`pU*Ds$<-~UTm)>yKb&sWuaI8;%_1+1O zJ({=K(I@+ogqxClU3+x?>ZR$M=KMBb?tN39@zl>h{L@#Ry*JlpM6cz(t7JT18(gA3FER{ z@Ai);jy`3AmNck+O--i<7yqm2-r#^ylP7n{s6KMZ#qSLn*!R5iZcSRc>c)mk?z-Wz zwA0$W`pEXzZtmN+-S(+Fm)>^WD;)|(7GCy5`G}t$8rEQY&7_oVHziN0`*_2Z*IaXZ zY3ch77Zx@zUSHn1&kuLrap!scyIq&G)Yqp=QqqNqR%?qkA8cG$Shb^J{HU|9f2H!- z7Wb4T6%@37ph?BY6?asRzQ|_l8h6$6&rYhIFz?+@rv)CeY(21`?TZgKsi=58%X-uI zqwiYiuAQIItJlsB^FI5m@`aZ+oaZ|j%y5iIJ9Np@aR*B0-P_@p;aA=F+G~F+-g0sG z&oU=UQF$@$2U#R900ry5riPE*r;CS~6k6;spzu zJ(^X0pliY3-x0XU%)C0u_wC;7vhs3UWo7=-f~^OdopzeD<=Opwb8l&ouxavr+Ulyk z+gG=KG;8eGjt37OY}{*mf#<=iw&p&6TmE_HjX5y!i|J1`SvX{MR#{oQBkfBI3bvGZ zJR2@*@~`i|&(3dtq}zv2&ptB!<(FU1iN9{??rZ0}wYP8SJ*ZdkhIM5rA~xG1ILmN{bXwmrAGt66!0ziuwrk(M{jS#@ShJ>aUS6KXVwpQOF@N;v4sX5n*5i)6 z_%o_czoLBEKhw_YI&1ozMfaCJy7AXWKCOGZAK!a%Xp~K&Z2O==#GTUYVN>L1ae zD&4bj#F;&Ep0Qm$$%EUN=G7~(XzhM-3WOk{pnMQsqpf)YkJ{gn4RykNWpiuAwH0ocT^kP91W&-JiAmGaG_S{9pQzaa)Q*n|1*)A6t)iZ_ zkWVm`3YfHfa&2OUBdcac9Nbu3RUX0?s=0Vua8PpDYuz@#2229C0WDBlG1X}gYC$h+ zJU+*53k2YdR2{E5>+DV+xfxJ7Vb6CENC2eBZ?mHTmxt9F4vda0&Et&*t8KuDo%u9* zT!5Q;XBcJp)u;s%k_}usWP{aSAMi#E0lPC?nCl9sRvU0u*18ilU|kziSXNL}UPf(Y zj~u6s$u23$9$7YSAPNVoVJ_9krpsU>mlT2mGYF@pU_DL5h`f@V0+i1lQaHS@Y@Fux zQ$zWMWh3)SK@lL0Y^^xE1cXvPJiA0IE-xuAD$N6eOM!Zt(&)2D4H*+z3CgYU`kk7? z8N_)!pjm9dgby?lz)sw&O1WB>mHRMQvstTol_k!^KaDCD2wSG8U2D2RlO>g0t2P*e47~zQHnu!4q(kgB4 zfYV$s5Co66Ym7T<0gf${EF?z=n)B%(dV&#@Nxd_4)0duFUX2e-53301uC)h=)v*`J z0uXNyl*sTb2WLsZAgIjju*M33OAaSvgIEd@7)+hoEXUt;uZ!55tYe|6Mjf5(WJgpJ z%hl4=DCL_T1;(lL{Sm?C@la#7_vYly_+pYMc>(11x-|sjY%Tc&sQd~0{Va* z&>yxN+YRE?M<@s*e2C#Ql7qEGyRr=gJwqibkT2in^u3-CreiA-Ac8JXPEw|wwQfAn zXOqAW`s>Bq(l7cL1!-nvBZD*=i1?MD&oSUF1RdEtcBdu5jCa2i{?b_0dM)GiY{*PO ztZ56c3j!j}r*jUh=Fquz)>*NBJYYNEz-8bPrtXaP+-_%;&7Ey0@4A1ZJ&sr)Lkz-G z>voH23ts}IPDrA}SEPrdluqia#4se6WWu^%*?4y23yTBW}FdT zzzL2LC>E}k7S0_cTnT&;(E=+(owG0&QYqf3%_Kq0tTA{ zUQ&<|0#2+3eS-wo!uJFkn|DS)Q?^xQwMN{MHIj7)F-8*cy}C>*u%}O$1o64D5+@U0 zi9Ji}-Di@qT(Rynx6@-hm{Cn<1&aj_QHy~J7cZN`!dps6&<1NMp-UKWS((5nN+oJ3 ziPWsZHUuJxK&j6Fc0aUF6@y-VFqQ->YE=cR4R~m$V1*-eD@ZXQhR1(e!rEleP#cL_ ze0f=ZQoncwE&@oWRWyW6l^)4YrOWS>lQ7$-MmFNV zx|BOp=u%|z5@dOs+f9Ki8kb*~oWn#|DUHjuLJI`~6C^Ags^D8$?}V^J9|${~71?Wi zeDBjqRN1P%o@_@huV^vJhZ?HM8U8ouzZ$F7?acH0y?%)WI_q0#`bmCIl;RTi>UPR5 zX#~m14lkWUsv%C{Yz*F6i4zrKbmRdD?}(0^eo(iQA7X4ioc*|$w^r%)&d}$vlsPe5 zoqj*xXxtu4JbrlngW|Pb3>5r{$Nzc(<>X-Q{P!0>AACuzC+Mni>bsRC^nnIA{<3lF z0}kI=|NUu|M*)jIxc|Yiw3r>Dv#M)%^^+sv5KI5XN7PxV!n9OcQEB?fzbBPeCzV!A zGk8*I#iX*6N~@Dfs}Lm^v`3{-GholubwbdKDGD@btAvmdy}$`pXDJf3-ltS`DRMXt zec_5K$Wv0h(v?f>1WS5wWzRq<=KxYG38f^dT%g^tx=2Tp1WgxH(m*rmveo#KrCQ&g zjA#s!BK;Tmot0BujzPMWV+zSe6ju#12(=rkvQjlw?6_!xMrx>VKrH3QzgbNDVgE?& zRHX|+)l%px$s1LkS6Viuykt0}-gq&LnzWkK@G%4!Dn_J@NVY?}?g^IgBVqwGi`kBN zsq;w2JaaP%SrP1zfILpOR+wvofrLMw7d`gw-CtCc;0bBoE7e-^xzKu;pvTEJ=(T&@ zqq*seMoxxq*lqp*G?izlIlN>;Z zaB@S-bl}eRSJjgG*1}q+W{uNVv{RB$$&g-|R4O=R!AMjOn@gpw)=gSHdZUS%q1O^g z@+2e=N1_PSDqN?)nuAh~%_&THu;*b}Q7>YCOiDqik{QB^TjUh;+A4MkAgkzWkZ7Hc zGF%8RgxL^EOs4Pfc-a7*by!s#K&csLCNiOBfjJ0flWMOUxG*400(89 zHuZr}RnssG+Qm0H0HWJaDmIj|OlTmq3UZAE2E!v&5qwMPR2795!=RUzjo3*-G&j)W z6uWIfvhs`s168#ku1bqHUo$2GBcP+>lQLlOt$KWYlc5q zZ;2;K3VqQ2o}kZ;4tRv=Jm!{3Jkwh?TGYRVq7@CJIQ~@z8d_!sN-)evW;~ca@nVe2 z5v-0mi`B>4RDqKmn^;>q?8(W1O!G3o8VE>CDJ!H25MwCRHgtvEl2KO`wy_uktTKwi zzX-lZF-zNx(m60jR(bvPG0VG+^20^)5h_m$h(7x8^e>?!sqvtNsJJiIscJ-NVQKD2 zlx1|Kj908=7%(6i!X<(U%>p;W#FLPHUN5MKq4JrKMVTaO-nr>KGL73hLJAv;jm9hh znugU9kMjjRk{@#WVM=WmUSj)qX_>4^eCyRq6`^E>X<9F|l1Q9E_Bp|&*kq`j!QJRr zD1N5_Wz($i<_a)}152t(E3>HveRL?n2ZSUTBK(B5OQq0se5z_8F+c&A%&p~0c4w*d z*|3nrDyA-6qW#ZU%lPaJ;kGUqsxT2`qfsBL)bby-jS0#@8Wo=jtPoQfupZGiMFff! zUR0S+b~&6h(GE`N4rg6ar6oR@yn6<#vqck+`Bv)C@ykr~R0deG!eWA^K^tf?=*>Yw z8Ri9KNnjQ;qt{+qA7yP)ZTeKeEI7@)6e8>ctfaZGkhTo^GQJ6mC1Km;nP7cGsYII%_7SVzfpfDlA&F(*g}B%O$m$qze*?w;Z@o(V>UBlAjO+ zgs$_*-5KaVCaY&4rnOUtguZ|;gj#62U)s9in1+<;BQCB>L<@~@$g>iOlS?s`q>ucY z*)_K)r)*p?9D3p12EWZA&`)deNy*7$(sPoNbIWr1iwrA#4dGWJa@ZjQQgYtN_`xkQ z+1de<%&dledobgcnL$_3?Hrt$%>UBMWaVvz*HO<4(x@_h#&`Oi4U>13&0a5+582qY zvWp9?+yS;4ezg@&Sk?Vb*lO+YuYlHqxrcCER-JvZL$JxDCokK1AVFrOp-=)R}83CbU!_P zXQ5%k1&>@e0VBCUdyQ>}UYei>@F!GH8b4TtmWFErO!voCJV5mVIyy3w`K)51iI;{L z5}Td5qtRrfRiyut!pT(6QkgBk2{nf92u~I1BmbVXDW0?`p0p`~`$dZ;Aj8K=M|ki_ zN*4NGBc;QxZ#cHX>fib(NeLflBD(l1(oi4ZDNhemrF0v=4I(E>cHY#wTx!U(jfweaVJ z*fGNis|?j3uOxE4f=8v#7wF3Oz@8+?l)=xQHLY~Vs*`zv9L;8BA+lqdb{?tfEew@z zo2LrKU-EcQ)Iy&m%!VA$Q@XH;$doV)S`pDiF*5)YmKr#3xjDXAEQbhnf#x2L{tQ(F z2(>Cf7B8-$WHTxL|6ZPj32p&$`NcQN3|hpd(ob+Q4fQ($zb zO?M&nvEC+P2Vksbs0WHE636YD#=>OW-YS@#2s$4o9My3CWOi+<#4_H|YZ-@7T5WS7 zu&u^hg{KHV;huTiv>Pf-2*=P6^IcdemvGk(F|3AIA!+IfWjM(wu?I{rQv8AoJq~iF zgD^Uy8gUdvmnQnh1L2YfvgSca6@IV7ZX=TOkS`c!mLY(PTo|}8SrIi+)lwX2JwaLu z^f9~Khk)z~TsG_P|C@aCwDN5_pI z7dcc$DspVcPA0OtK_c>riaNbrkcNCO@ka}X0VO$#(2#(0Q79R`4teA7(wWr!DrAv{ z&|`>8#4)m#kS&f|^9{#diAnia=P6`0kFr;avL@?&2KLUT>x$3SfYMEBH&TQAT;n5EM5wSp_W_-n>HdH z|2%^9AO>Y=h7D0{NJJ=di4y5Z6vf7Xj1UWivlbFkjymUJ6|oKpg<%YeLJgN+CQ=h(Wcw%Y;Q;wz_u?AD7AspeU6Ds}15# zI_hhhMdLk>Q6|B z`GFx&@3A8Q$OHc!3UokL05!Y=V}qxl&F^3c;3B0sFoS;dqXvbrRxw%A>3|VUG=oTb zi3k#R9bQk5AZ8VtHE12x0Ruw}(W(z>J6E0Tnu)FfCell+=yWVXN>~v>t1jk-MV&BB zAe$XZr$9-fS>dBmG?TO?NmJ`OMT-U_A>7Jp6{EC;SCM67&Vs>Rh3FcMzcNlDhl+!M zA?9#q!jPa~14Uw@gO#uJdut$7yAUNwRl!aCIJVW`XhR<<29(V#I*vF7<`#Sb}X zg)L*vW2%`%rQ(fxfK7wkJxP~r2sBpCMOiexzTD`2RW0_N02H@~zhp5_y8lA*^i;jT zdFV{CT|N%#37?2wg;*v-ox!2m!jV+9%~73D@4$Fwltd47stPrBg%!3PqwzW0=OcG9 zvUf_~Tb6?a&zTX2Adw$|XTvk&7>wI!XEb+DWhPZ?%F!W@?8ZSrgpJZp1|uQ@aAp(2 z&B~JyqZ154GRP4vs!UxYe6GE#%d4zX86aPfS_Qor+D18Y1j6B=>R$gpWPdAi2e25W5OkRi7WzIn!O9Ce7O3lZ>!yby*tl-v#yG>Zsu z6JdyDh&UU8EGn)5q}gs-N?qSd{z*{11ZW805sV=TnLxYb5=K$F{gZ@+uvky3$ZNsY z7BXpuXh5a>VFUMJ5Q1i@fcyXsxo0S#h(||^7ZRzcCkq^gmjd{PR~**}xEoHB=m?o`ZnExnf5wd7k7L8;aHsJYbMDHI7n zsXwsEiFb*iGDW2=2+bc3Hnbh;4MRzU$D;YD!WoS#$8QT%moS~HrHrDgNk^(735{T2 zdcX2W!&+9i#lK`r)JLN8=P=eqd_Bfy7{>M4MyR)|avH${DEJvicj(nT7IQEwEw-@s zoOMLlqM+HUVFc1bS!-N+Gx|DAq*+bSk~EXo5!P@RR-<%Ti7rE2j3Vtm5rAbiP5Y?9 zadadf^J>yJK%pv>Di5I?2%jvo%%W_T;YInp9(B8-F^bJf-zzD<5f{di^p(i=N+E)& zvo7kh9Zm7Wl88ssrtK_35z{6{@`rh5!X_cewmF>@LIA-QWN<>3Q>xbELJo;S@|A&| zheVKa_9WLy7qb;2DT7fVtOM?w!dI>pAtAL+I6BD|)g4SI9?$@9ZFZQC$t5ZG3|chPZKInANlvc&eNpKbgU(PtWf7l5uB?hYP=OJ@tbmDWacRB1B}&Hx}30J zfK69XToIiW;nL+!qL6icH4!Nx<(v&^>JVl!gEtHbPCtW!ZQ}&v5MC|>i;zR0Gr@J0 zIK`3?0i6(Y9~!Dl#@UBxLYy|ym+qHA9f!K9j5JQT%CR00Ah#0~lsH8L5B20OiNh`# zbQD05l@6n$d&N3GfJ5i0z$Hwk^L)$JTLi^k2Al3MG*cx1kQv zzverUok#ahp^Eg8eQeX6IGLW2Db!+lr4Sm&fqe>X(*LFGj5M^6C>CiJyK95H>i`41Fu-56(!MzOgFUs#7^BvtufRd zbM{7q14i>&p*!`gIoLI*C8fMCkKiG;m>%3? zQ{%>aY!<>%5{{sf18bFx@6r(Hzs%~4!DFadEIETWYm7Nx08hjWcruETzQIZX)(Ta! zL1?ECYgd3&iO7M29f$*?Zp>Ab1Qn3NVp-$Dout^q<>rS+*e|hN@hd*5I{;qm!(NY3 z!f}Od`Y7c>o?Eu9A|q-x{4^jO==p7taF!$o__MO;OW?s??e&sN1tM7(YB=%)KHvbW zBZNBSqmerz#BP=Y5+_IKHQ1JE6o*SX?V|*k^!@;Bbec7=!?0%|36z;_Kv?3Ya;s^U z6Ewv~1dcJ7RT>{e7{ybAL=Q+CFwT@Bbt};T3<M7OpqGbnD1b<3jty!{IHs^MTMVZa-AS0xIO1rsU}rRE7*VamgTXWrNPk}kyJ5E*Js*pl+2 znCa*U!Ezv+Gh90BNE(OZdOi7>ge)9^bjHnanj%$v*C*>{FxfGTYl3yT>5c)dd zH6V^yI_H%;4jcx9VYthyLk<$S9hz~*uP)aDe!CG`K)Fe*RdAfEtq>Xq&OxEIPj=ez z>22?m(L2qN(z|zh@BWpkY3Y44D$*PkX?-#>tWyK=2%O-}vh7QHx*=n~$78DoVstk* zMviQA4MBiVs<6|SqS4G|L`zf4*-VWMXD*PNvONhVE;l&2C(-f(EfPl)EF2H`;ZANq zY^M{XYEX}1!Os$o1BepAx^Y5arWD`ehoy$8+F{8j%PzJ)Y!=W&+N%=?62r>J7>E=Q zY0H5_0AkT=1GlRNev9C4 z=_%j}96F3#Y?><1V~`=szC?-`uGf^=s0?84LeX5)2~TiuBF8%>Z{Qe@JQGmJJ6v8QQ-RYH1P(~u0guh6 z`KpnKgkB$C2mYFK-$4DOOa_5^0Ha;jo5)n~_N3g5!CbCnA#O}KO-k2>P4yp~LJ!|YW(*#RNi3>mXS^N&+XJ+;oHYess4IAjn8sEHY<+w8ccj=WPUNJC8AxLAD|3~@1waSzNlOdk#PO7$pNVJ%&X_(_9u;$N zz*f(Rd?ks7qMQv&-do~{L3pxTs< zo$5;|n;#uTu$FKXkX|JypTi1Ulzbba`N-aLN)2hlCbK8&Oga5B3yrWQ!a4(%gOi*d zd7`s1p^X&-MiDVFocN6c9x)Kn8ix+kQp5OT&ArbqDOF25KhMlh*yL9!x=1P zPRqKN0%`4dHE3T@gxUtfhu=13yQKE{fF!yZC!%Xplw&#|_J<8aoV3BDIHHx@{~T#Y zA4rzCMItP*JW~__LzS?36T>7=MqmcYty+&z$J0-aW~nR@<20Qm1(CBOr5Ir`?S__+ zX_li%m_@kaE#XUK!Z$Uf*OY63RaWS~kVSuzhMCwsTh5F~ZPTz68q@{89{=7Kx~rO%e)bj+Ux1Lg|{!j8!}z=>No^8E~d3DpD{EA;q0t z`tOPd`uf6<)uG{PNRAD{MP%~fyf5417(x?lsvvP}h1aq~DnsZ|usWIveE+3bWx)Mu ztn%7_4OW#^3gPF3EmW@b3^2VlREzp;9zD(Ct_=!TQlmoQ4sns~T+qzBnMef-DWpfa zGjTzXi%>*Y5U2hM*;h3E|Ec`TM=uzpbO@e7DHa*)hJ6>CE5r$Uz$5+S)(J-I^TI$4 zQ94W=%;T5Do}~p~y`m$5R_0}fK-{zmTUr3lSlE||drKicDK!KTghRRF2Q@xcbvHUT#%$%dVu>=rz}e&(?Ab0}7jWDT65S{T_!)rjg(sW^ z5y8z&;eu}-B#rIycB+f*-G)|4nKntljk@jJ6U#?n&wl4Dyl$2`hF0vt`l)e#} ziYd3=+03c}af;2OJCx~cuWpb82f|wD#2+PUo=WiONIEVWaMAPGkz!hm3R33~S>-_G z@G+uW=$DQr?88QO4SGW#dH$tqh4~GZ$}I3AxDu8wqad|qB{D#Vz^hN02#29MLea$z z|8Pe$9YN?lJ7!zD>X3z^kIEbqU{o;tzFK-JKMeF4Hu4oR11<{~H^q{3lE2mmy>Ff# z+ZKNBtX@wac;qMMNdQ5x8IPPsfm+}qo*BllHdLBMf?f)}4J&6xDDR8^t6GFKc27u{0WKsA8rEfxS_@&Y!RjbvMSU=QS!q|J$xlQl2*%}8 zVa+cp8IfH!<-+2;p*Xd&BMuXm7(hET=Ez7jR+5n_FT%ymYO@sQ<+NatMQJgNT+A!N_+@-!Rlk+mz#)>d;62J?SHLGFvcoWGCaYgrV=` z4W$1&ZXl(c4?()fQ8@45fS|bC^0!tBm~aQI#S}9T#fivV5~*ci{4RxEl^x<@*P&cN zaDJjIQgG&D{5DDj;Q{$n(PcrTv40|S#^ zqc^CO9)TmD7wH=#P6x(c<-`Q#!rL5|BpkKeP$a?i+uX%WevH{-2__0zg55DLhh;q@ z7p~7J!#us1huLtX9CkX$lRyXEcsZ)pS&K?~%pPPM5^I89AMRm5o=$dNX4@+hsvP{P zdy=X+RY`vuAx@ZNBx;C9r^vEAa!4lp)L*;DG=~0uj118GA%`yZRA!j(DXCxQ}54P=k;Koi!Cs z1QDV13}*#eCwkY$zzjwilV|YAKeU6T=n*+0S^gy95g?r>s4?kwrTJVwCyQ}Fy&78` zVhCokC<`J>vVXJK64JN#ltLI{b8@*CU1(&EaE3DC=Qt{H?%q=V^9x^6ND?5o9U(C z?*QvFfiGPifHEU?h}x?}qBHLdCVcA=3DlVGG+}ne^5V(}G?(di4c6m_GL!L3K82N< zB8^PX5ZhqxLELKwz zF?b#ZzfJ^+A-+Zafcno)`N{R)@Qxs_JNet^l4YqunlAE+1Boc3 zm#`M2ziMr~*IQ$Rj3jATW>hs|Ae!hU$0R7@WXgOi#oEB&^t;ul18Qt0`j8lj0t>>C zXy7`*3bY`l%?SiZObUTS^MdT3)Tsgy%{$&22R1AvHd?I=x7I3CPxrQPr$WJ!B5bBI zd`>Pd9YK7PWwYZ)swBh*`5FJvX~p4!XCq!g&r03Wvf`*mzH}C!%-9LLV4B%yxo0Gt zUnyXld~Ct!2tNGuYu*{`=4ZI;^2T7-6^m9lTpFtjCqudo2O;wmY-~8OYBp*uP=j>} zI|8ixG*x1)hd_w+4>$-03aH}QJ#YY4TqXbX5s?a5^4mL#ybz}XUfcB@@ zYb#v#DTp@=x|F_h=&5Gv5nc<_srKjHYq8YB1~mlB|HO<*Z+(j39LjJ?1ur>qymnBqPtYi^vsGXfI+W>#?9LvYpdKn}D`3G28^aLx_yqMqah+j3l;NS?zDXbm zlI+46PLN$zl^OI8)-r?GnrSy26z@WiOgx^r41yXi^x%|CH!1-mL}P6I>8p{3UtY))hsc~EGoYlwS(Av~ zMlBrA!Nkk1@>Iw)OupxG{5ZkF7>{Dy36L;6{DoYU-;KyPDILNtBhxgkorP+)0mF6fC*bK@<%|H z;T9n^)=7G~FojnpouQek5Z7pUJ%e$wlR81zbSdE|&J03n7Ft$%12F6dVY6AGhp|Sf>zG)#MrRt>GL4TPCBZ&f3=uQ?gQ1dQ z3c4V;CPT>~My?@0KS31MhS3Gj`Gidm2V7)@202ll9I9ZkRRp~5+MshRniOBh>A4`p zVOK}CtVL2I<4&M#zYQmC_&b|!!Qi4AvT(`X*oG?s_K*&b1)>s;>B?3vH%YY{G+`VI zC`8xV5unCkI7N_my^B;rkT;-}#Ue6dz*uYKOh&HQD6V6M(t>$e03Z;CE9@vnOwXia zj1u^-;a5?ypi5Stk0>%Nlu5u9D7jZoWTGoGkB2CoBDLg@9JO?l9qScBHH1qzmc!Rb z`29){IEDZ!^4^jXoZ@=XuGlEf)A0pGmDhul735tCKV`VF$(dlKKu}n}5>b4ha^iGe zrDI2*R5?kqEr24)6+I#f2nrDl<31sz4WU6H<0<*X=~08` zb!gyTWFj&i#F~P9w~eW`MKV>P6Ei3UgUfYR+Mo&{Cd5KECF0HfOV2^HkSA_LjCq?~ zE}vY)ieZJ*5E=3*QI%NfI1BK#tj{1tTtO5d5~*-PTP9NCLQ2DY^Ye#TsAw}Xlm=3; zUaRz9(1l=@!tf;7yk1TV*7%GcVdX;@I0K0&m>q41v;bbnfFpy+3~IZ=Ac>U_yV1kFK>%i(|*8%sHcDGJUYbs}EKl@Xi)9^|cs+L;x> zO6SbiGTp&J|N468baw3nFqmddsIvNdnJnArmI-4^HQXPo|QxIeHxiCnH z%ILpND6lxJ!Qh9K3d($F`b0=jk9|Hw4fEoM#*BQ7X%sNZ2IT-!BC~yd+94s8gd@ot zrI-aiCk~iwUDIWV2m};14>`{=l!;d^1MTr|s0=Ad)JG+3@Qgrpt}Po7@N+lh9Fyp0 zi6As7;p5bvmG?G?_sU1f-Q*a0l+`)Z2~mUAhJa58Rm*cHpX#jZNI8(30PkjI)O!cY8nT40-#5ZTbT@OxCIg*DFpQ6>oL3eyA~ zD*>4)ki#v7Z^gMCdLBM0=DA`M@~4Tam;@mOYDv@*rYaHaE#L{6YXv$kQAtM#tx9z~ zhP4a<^1MWq;zTMp5F~5QW~w9?xZohIie0=IbY;8oo3bTxawB4>qBL$)R=#6%ZM@ef zT{f*VSP-O1h@jSBz_LKr3+n6=blH_}#hQXqDr#;g+(Dn3GVkcT9Tg4K4t>n!G`)8# z8O;l!MTJT?h6g`2!R}qqE1G&%utgVUwZ&5fM|NP?-cyhF`t6@Go?(=BttO6UwMe+ZLO$A(TM}mrI%EkBv?l zt$A>I4{SZ@h(zwxS^6u2DP+v*GEm2>*U`U(t$LMVh^pZ?Lg(-k6C6sQ%7XN$o{q4& zvmvVwLs?&)tXQW@-5erlfOyhSq~zsI*N2x7yP6?S7~P{&WZk8-Ak4o9u+Xl~)2oER zDxoq-8C)9WWy`#57IWwjP8oZ(Ivx{TuV9}|Oc>2XVRbrHLgb;u6BLRPT9C#VS>})TsLdJ{>x(Oj4 z+{}q44C-Qv1SVz*884(f*G3q$7QMU}G7gAj38Uj8=_o|g9A?pW1hQfaqs&{%NINE3 z)oH!3TbtOvF;n#+FM(F$<#7?DiK4%n1^s7fpCk{ zRY#N_hB?ad1Bgy?266FvA+!RnN8WW*NzkZK!MNvC&rZ3z<4Mzc{KH*fO z@FC4YPP}215lE0ij}){5(9FwDm=A%`6M+?~p;eBhOdIB9@K*pB) zJnix!u`6)NA;TqWgm^uF4PSBAc)r(PYRFcwdEzK(^rtL;##&fYk#!P6tzsTu2xJ5u z-${&}C1fw5BFKS<&;yAh^r?UmqZ`~dUdB#R9{6OEXBC+xxbciMfIO=XmJho)2zM(W z3w=PlL@PtGT-rUQ{RsfXSX7kC2#qnLB1yDtI?042SqsEl@Fg|^DI{^!n+?BwiV|Za*5ECh{go@>pD-i0?f$dlV2+1nus(a_0TLI#ZW~>Xc0=CyE*Lzy@3)oR3k4d>04>!+8kdf{J(X5 z>1h9V7MR{hj1{Jr;T@frB^G(Rin_A=g2uRS<)2(!bo4MSF5DDDHa#4Ap;Is$ppS29 z=_op;wZ%wJk#9ID_QcUcD8AXQMryc|ek1=2{YG@N76~j-rjoV=-EOCxbL0kOwzlZ3 zEYvnIOXp(ZaHe-Bg_2NO(@jEp$#5Ezif6^Mhpv-jPD&7^VGcH_)=i4pabcpe(Gk{} zf)A45o$!jIk9oLa&r+-)1_JcfR67PUTk3Bh=;+@~XgKOlmJ6o@T$4*88T5rcsWr+F&g;)G)&ebfwKnx*#aKD;q8TF^Mp;+X#%D%7;oz^vsZ$=ojvj=Mitz zt4>_$wMSzVwNsQbORb}U_ zJn4P)@`Rcsftv901gt8ouxf#e{XvVPuBW4}m!rO?Llxj9$1p;jL(=hE_6xIQ=I}(;n;~#ucau}sAopbba-M4 zdeaj_K`((Zb#G;!ofZpI8z)%gFp}jL)-tptM=212jw8XEWCD$w0ZosN2Cb?KqKZ1| zIGo|M&Dbx3T(}FP`Mr6i>BJk6PC4gPob3K`#>skAT+yPlN2QR$9*H|9(!!50H&nxn zy5k~42AV#D+Mrk1oHOf2SM)_rMWeDB*UOQ6Q z!>iHa3K-uLC@rK?MXVpb8Wh4LX25<*7h*%pYA8$fTr9*bMG7laHCb?lm{%b+On%`9?CFCfn!42q-6DHy5d{F>!LSVj}T2TOh})UYqJBXN?<#r zdL&GX3SpxKibOjYxG~xYJbb*AWw-;vOqym?Wobg#M$Mi}^Q%5)eddXV6hISoV}wFX zI+BezDJy~jEi;2kAvOU@fdF?vh3Ff0n4B532FQP3r8zz{Wm(E~$YZ@ihN@*1}4R8>F7mk`uCUz^kWxD!#mM^CYf(x zP%4;|H9^1`YnFcL=rtbekJLobVtvfgUs7e5w4gl2*m6wn?^XsHR&0y$sE|`Iit2%hkV|`S27idDsL+c!jH@ZNCq4gT}Q!?O!XT= zzkfN7DE-gTv19-ro(Wv8bdC$Nmp&oSH0LyJk|l%;mC7C!pHzrVeOINZE09;?Bj@L6 zN(rT`&*_|INr*hn)VMKH`b8goX2J_Ksi)dl(fSK^}bJ zjz)O-AR!hJLE(387@vteB8mxyYWq#ysvez@`h*9IO3^g$G!y1Uh%wX63sUjS ze&||e_A9Ic6V13EseLTsN9^N5ikP4@p;SHL5XK`(UQv|9dZPy0V2}7u_BHgM*)58P zHEP@IAbD@@zb|NcGrPXC=3GYvW=ZO}8IQ*rvpzb7-GpUi-MG6On})FL$F zWCryALmAMgLk)Y(Im%_=tey%R?kY+uHkrj+m&2o!V}6f_DaU!+7PRKrJkxDR)E+U7 zx4CFBSrd_On^{15BJCXo2_g)YrvYP5E9|sEIVfc43Nn+?mEIC`_|-t%tP3i67Hk@l z&G1Z9lsJjT6n3tY{G)E7og!yg`oIV2BK!o4I2AM`bZu%*bzx%>qZv^RS7CoWO}`< ziLa7j81AR$XkOD)f@HVNs3 zF87Ein7F)FTsRj+YB^!oxkSB{20gIb|Dpp>itM!0j2lhDBsE=O61@p_G0M?|xiFzG zE%zubGMoKTF6I%kA@*>G3pzTIb;vitT7(E753(L2T0BZGOh^e>S^9_^N>592R+O?5 zb|t=7FKOKJlI{1~>iG>Yy5#90=ShAi3J29y5h{t2*oe>_5`UOL5)ikiAmOuS+(<(5 zBEMCoo+WytKt}Kk9-{Bj5ROGxcgP|TOoF&y0|`*6b%ZeqiIMW?u}vNcg`l8Ch!6sI zDeWwx8Q?2C!w)ky$;7zOfCb695biVsUfT{zG-V5Gg}I>v$$U%HP zB5h<*nO0t!r{xxwyz4M4BMQ;%v{4krSkC>tT&)R5dl80$nPQg#B+gfPtH zJ^4QLd|?Q6Txe1Y>y#=4CrDRDaFA$_v~a3uCKR3#-jZ;}->Q9Ze5)C!M9L?PEY9LP zNo<8U4^SF1DZP{SOBWZRwpNTADTy%9I;fJUugi1lLn+ZIx;J$oCRx!CC}j~EjZp;h zqfvwnPuOnQcXhnXf&<8M+%De`o^-`Pa}9k}-HiylaFW-@$r1ojRkc4>i!`sIJzkoe zCPhVflIvg7jIZgcLuC}8MUGYmHD%ST=aMh`7hYk2PZ8*q0_>GJx?Po$Y4YS5Ek@e} zwU@3?rITnG4w*`4$;os-sm~IhO<-X$dN@4V04=^3hs>A~mP&>(FI)=?poup4PgR}E zXxZ(nwqb5{PG_~zlUUVwo*Gt)l~qWA*?0u(p|;I@oGjUuD*4F&fF5rz;SC}~`%Ae&42B0r{@G2lw4Xg(_8g~xrzaCMpd3Wtzt{dt8q81&X8@=Zpp zB*kMWbSWu-7c&AbrOfa=KfFpi?6FEXZ0eON*8IZZ!>zb<3s(SHSbF({kg3)e7Vaf> z(o41w>)-^?@uIOLC|vE z>65IV;6f_FDi0hv;1HN2{gkXZc_Yj6N;3(7*bhhywj=~JH)LP0gKq5=$($PU;c>Z{B_ufd6l&lI=7&Osn zLVZ#-{gmcP^Q=>^=tYWE3NvFoNXRfzwk_fRV$iQ_CervsVO``(SV5+CeJbpbzBruzsB4I-XZ!6ec_&HOjJ6P; zW3Nj>C3`*no7R*610sXwCA|;+ArII@A=F{NR4F8kOk@{I^GMfYb4%ca7gjdiIxU|C za5aEWJdsKQsPMQmUev+FUKXD8&k$iPbRv)@xojp)R6QR_> z3!7V3u*ib2-qFQ`Op_e?j1b)QR9x%5g)LNeJ)UDL$W4 zR+F#_HKqKDohyng8LalhsfigHYLTkH#+g@Vce0zxEp!X3yq+B9A6!pwg~sfJhOCE< zpoB~ZOyQ+&nttrha)b2iyS!i5vDC1!sgtg3h~lMjxK;SLz9aHNOodDeNL30weodpG zIDIIL6le@)1(tkb5RpYb3fcDb=aP;j)e$my>#8XDZ*N-0Ec~~Ce*D|Y|J)deJMvxN z&%l6n`)|&^&Z7T35GRHXbwJpcD0{^aSFi^98s?;+;f{K_&cloiQTP`hB&%*=)fvf} zHTUA|sc=r+yrJ(1@=GrGD0vVVdx@d5Qk)7jFDW9$c7vNY6>kHYfBKZjQ-wxBOL|#; zt~1yX^ouZs@_k4x$Df$WQOKVMW%w(RM$9O|yEW8fjB_b4Tg!@yrwl17D=Qiy zalf8OX=CUjsYoR`0}#wD)K7Qb^YcnKHjRs;|5A_Qrz?nS;H&TO&RPcfsP4 zi(qv;yEmH2@KjD-6i6TekRrbgD>`b7j%KqnM>P-KolCuge>$AZqYK=%CsNmoN0hVL zfiwnwR|Red)`NbkaYH4!lVRE7M$-Ss-rL2TX2ktEU-#T|&pr2C zOi_Aw5FV`KbNIbbv--u>{#TEl>{DOeorCHZ-QC^p&i=vYJoP82z>n@yG#t%)f&$cn zlN7f%5R&$Ab9dt_)bHNg+TPkfK(-I+=)ufNs)9QJ$3r!&J%m4ql&pm9eGC5sxzXOR*(Ag-T;ZdS8!2ea&|#z;~~u9IYq?1 zzv%RXj@T^*>{_g+Gv5%}Bln0%K=P2qBt|h+qByqUMIczLDMgJBPNgL}v;jq(yU~4+ zTpSFj>kjv=yXbW2m6|d6){3(^!)-Gs90{O<#T0z^ru7sh1Ap&9N&p_z>Ot}NWRe6As;qWfP~yT zD|YRR!(hXa4*4677BV4NAs)pWpVT(^umA2p`iKAYU%hsX{{3WuZ6Hn)igo^-Yro4a z$RMDW^z+^zh?kOJ9eHmMyf+AX$W;De*|4IF=MpP_Fgd4JiOz>d)oJflpEfl8!7CUU zYIkrvev|!TLPs6mMhO1|r|@)hQmnYwlj%!rnvZEmg_wQ>`okWQ8=!S&DU{@g)z?Hyx5v~Kr^57U9!@WGg3F*DbY(5#URu8*>KCke=B5dl$Gg zJ>nQe{`Nt4WApjm!QTGn!#oz-zS;UE>OAajZ|f>(fGCWy15-!#8ERgJJKPCilOeUW2qz7nO-*FpeuLcAR$8pKY0-j1LQo*9D=nnFo=aJ((Xag!CbROc*g$Jc|S`ROdQ zL707%HIG^sLjBomSeqD+Zex*2ieL0-HVxL9^INcdt13K@A={EsS7#_SDf&XG(rc+C z;1+8Y-HX*vega1$HLh_qDgnf+c+AhZ`53u{>*E2xZ z>TrAucSgpMr^|O;Fk^`ZFOcc+B{4K+rA@~X9$-43_8&~9*k~W&!k0+OsP~33@;ujy zNBnij`X!jRNJ>;nM>H|R=x2J{yjFM!NzUYmMhQ06AK^)W&qS`2{U0a!|EV>0^u@Nf z&^E2lR3@I%kHAZTCQKEAT4$A%FE6SQm0cdmKQhFG`ie>cx=@^%CZAU;DNR_o$*s%Y z|CJw?%J1H}d7~oXzXRIjj&^$X9muwje4+!-eNUv1xboE0$jG)8zJip&T~ zzrD=cw=~3{T9*l5fS2k;q?M@)G}`nYzz*eq%o3%WE+1R;7 zsz~86Kv+@{b|(Pvpq?#POh=Lg&m+~D?n~bHXK-GQZg1T%??yIa(`%k>@c9bKWU(oc zFIjk~EnS*8rc)?8WAd~myoubwJxj!j;Qy~ztJ9z>5pnr1Vxf2?BJc5KGM>S^Ku6O3v?T^~FNfLa+#Oyh-0;k@f8Tw&eye ziO2@r5?!D?GskJyc6lpiXwtq98`iu?LhvfAXoH1<$^4^*&22LRZ?Z}v z-LR#NWU0M@=-P9KbBMHk6M?5a0kE)2)Nw=sQagYSYliGGONY78+)@~Iqa=(vkZVdg zg3<$(mbwtpcTngZrn+9ZIO--sNOrE=83)Iex4#}T9sLIA=RHv|x}w6xFbQc?*U?q4yg%F4kEl56F(Ok!b6KLp-c&RNT`rC~ zE0Rolk*)_}XF)H(Rc&M?nyk>I&$Uk|8+QmJ+osBL6t(;4#36Ey&G?JO*zEmlPrAFCVMF<*6+%2e-Z}xO z;}1K#Y=}R8w6*g*aDO!+^>7QfjiZMA&0?$~YVe2wIbwyNI#R-W!g-;SEO3m)4Ndt= zOV&mdA{2Jvk2gsnQE44ntuvleFppgFg21xn-ez2cM~Ue7qTa}Sl6%|)9{cjr{`gBk z$G_|PQyTg1f?jNy#3>V?x^h%TDp-I<^}S{bPnAW?~DHQQ250$Y)t zPa|kf(iB%hN6{CSj)QtP4{wxzgSxOEC)$Eej+9f?4yyndBaNbzQ8!c+nDBJlaXyhh z!h}EC&2{#Z|4QWOv+LMOK%PFjjvyhTI=inAO5%h+_h`; zZ*}2O^8ECnY!+RF8MUJy`~Chv`SJS*v-c5Z?<359;5i{1Bg~>~g2*4)6lJ#PDAuV| zSgNd|gU)eXd9Lmr+ls^Kb=cn+PUv7bdH^k4+bCy+D(aP}JD*+ z@JmT-ZM)TYTOC4g84Oy@brHR#XF&y14%^blli7Z6Ocy_@fj_P~L~w#T&cfLuu6T#g zx*^uqntbx;_yoavvr;5_7;nzqsiBdsj(>gr2Y>e*s~i1WS+F{u^$uV5PWqkG`DjR? zR@8=m?Dskq-2Kr9>+`{U*uP7gr`~*hO+Ml47n7q46z@}*uJ#4f1F0~PcpQIZ!2yUd zCJ!iRCs`^HD}Y|sw43!c9xi?^<8OcSuYCRwest{`{adR;XN0KX;S9N-=lzq(^kT1% z(7%~m@2M&M*l&pbk0=IV0}-|y8dt4s+^BBfy!rF$WBj`HNwv38{gj?|qVVZzZ+Dxk zSNva%!ak}HPtCb3`&AdHBiL6q8vzYR2AYS@lj3 zan1)y07sL1!a~#tbnYz-;r8@1V3Qbcgt#MV;q~rbwY7J>y4T&?+FRvbG^pF6xwkg= zDuiNhJleUxwZHXf2cI5rwD;FrJNH+sKBAJqsQw$I`UDOneiG^}WVBFi1A^p}ct&rW z4vrB^I>ekj$0Vsv@Uq=>Oa}N_e>xh>Cz|WB| zo`>Ab^I1oP7!vX$OYU3B_F5?9EU?tf1iM?!cn0ufBV;JWDNPJXmQOifku-@4&IU-> zI>uZf90))$1kDu@PN(WE>Qop4QTZT`48WS8!%gA-aj_@7O&RTz(jbXXTPZj+N0X+6 z%DU`saAK?T8TFv)DI(b=y|p?B)hP6jToC6qeczt|!#?`v2dwgbwVeCap6M5~#l3Tc zMu6W8h$E=bfyhU7^w$^ipfVFjgejnw)B&xXzf93owPoiX+!|{L*RO<_v`=+J{f1c1 zw3RM#lsZ43LL^yygAr5cY|ELjQF;jh6Gm{14UI~!Wr0R}2soSp(>-#;Vs=>kpAbwT z)?Z35tp~7(*Ze7mX?8I_#HsceJM*K8-39b&t-cAyZ5)(T5Xex6cJsjDqv|>~x>A*; zXGz#oatgDZM1=G0%J5T8*dWNv%W|w(7+XSQ33;n7lLR3NPi10ISrh)d{j(uXGenZO zVuh$P7Aw<=1FU{;Xr1!HR;G(oq*{e0F?|eN?$bWRRRkF7Z7C6fFJBBcf_jy5z>yla zAzDyVI^f3EDkW-ArJ1($LMp8rSdyUa2oS-FvunQ-IVFuYZio?^X~M~KtZgQdKHSPy zEfL90qEMz>C91$v$IDb+mQAZ&ejFC4~@)RnheDWi(sE2%cr5T__ z37p}#1qi(c6(YuR50%4G+)C65e~* z7@8zkd>8O)F)jAp24lbGY^c%VXRc$jA+1%&kXQzBHC}MQHiDgvFr<{90n4(w3php` z0xVnTdxN_6vRMFHR;2PGL#fH1qELY^I{CDwp}tCK_i>|jsrgo*v>;k9q7 zH)@%v5oX`7$ntNBfDnI)DmQh)ks%$e%LqWx1<3KSa((mL^B;ZmGFq4sddD!^#@qlg zf}u3tEdE!2`1il~_+PwsjsE??g3aQ?^Wl7OHbh)@Xyv+1BXvPP_SEv{L&gwJUJ(lN}EYw%BiyThyW^DDcfAKBtB574@*q{FD z*Vsk!7B}BT$|8muOYcu*!RNkZMbCD=uEuw|M=f*n@_W_p^4mk+`O0Ewe@^tiKklu; zsnL4@C!j2HRk)>;HVqpFw~aKu$u1kW6O7nmQqvU_S&$mHmI9rwWVjYfO)^8QnE>f> z-mu4H>n+CG$O9YO{`__*Ag&PVYqZu}4N9delgFyOnC2HeRt5>{} zt)Z>kX#6(!SS(a-S46iymfBYBGZ{Os1835I$6GE&qx~*R!47v>9^mlXY(ne?-Yem5 z;&k{fHeYVO+m372u=`MPTxREC!v5Rda(x%OEX9?)w~IDeX;o2Y;m%*TRU2ZgqtAES zT!q4x?eNOVm*+2AeZe-i`eM1QVzxV^FJjGL+r&(|?D9=G*NzNJ6`3~!d>Y<_z!;n)Bo%*UAspAYExh65hiCIXK|l8U{U-GN z$t99h(VYI!C7JqOZ9>CCNI6A>qpCkfp#2Q_#3&8KDP_4rcr_k>#0f7FP4ucWLpWPh?E$wX4XB5slK5D+ z0_>p53T0TAJov)x8%Ffd(i`p(W)Z!wbYa_ricb%93>Tz=ClzeZVGDyGqxMr;9|<4R z`hq|TDBE>7vv_9jgSd79jCG9;v{8UqgbUimj=8^o_ka1D|N6gh?Hc|2=>o^xE(O8p zLZ60mP<#5Z-|rRTdxiM@R)`vuw_GTPiFFppfwVY?L{W1&59g5L7riO35U`)4c#guv z!WrDWKgLOYJl|qns|K=c%2Ex>5gYd{s^Veqjo7W3+e)i=hnU!u-(pxr0o}5{YIcr* zo)xxqokJmvt6*1+b05K*B$c#bAV-bWFpfu9D2x#mbh{ z4R=EM87TQfWaCQX@WAG|qO1q}h12egEIU`Mu5+(A=1H-&v;~U57Qv)YmqwzLHyuuF z$p)|w2{FEN!s$-f!107zf|9=RyV2DAR_zYPlW3!4e~MitOO#GtP3Xn)#}X`#C82(^ zcsUnTx>FTVa>b#C%8OE7td@%xrQL5oEc24txzE zmvp*gNBvMV3s3U;EjTJ#4acTtL_;NX)rgk*UW}-;GBi?QH0#(ibxC(avb5^F`5qjz z0}pnfQ0fAnubA4DAC%G=V3|d65Nx0|`0$;o$%#CEt!s-L+m)m-P;v|W(Pd}q@Uj9L+ zvq`muT!b7ye1zBr{C)Tmk+k!{5Czx`Qf|T*{W&7XQFnMwyGLto9vEJ?7>CYH`cYIu z!SSd-{AujAPMm-IXMg?n{|k2v{kyqf2eZdP6?^?5a-9H7=gy(F^kcux%zGbG@II#C z`{~Y!_790ziw?1%Z&EfRsj)>TT~I_c!J=aJoRmti+^T=b5+!h^><`W0+1h`+{R z6@5H@dN|jPv(VnA7e=BhE#Uw%c6k@iev)u&$zQNBMKNH`P3|FS?{%T(eqYEg2Dxv; zIx}{>l%adWkcGHNQ@hqB=LQ0;1qoeno4B5w5#(5vy)VSR3hsVYpx!O+y)ADjLYZhn zuQ=iXJ?ffGQ2GO}rp#e0BErF|;Ky+5;BtU@c6>y>TCBIM3-l7J)5-tz&-`!yVtml_j}#?Ubp_hbgR2GhzXN<?vfcF3%|8ihE}Ky$k2f76~r zTskW2P63CNVbltWsHGwlP*)5zwVhMTnz!jPnA3waKvDBYkdWiJ9{vICI~aWVEB1g= zJ3+(r{*~cNmOBr*>ZGFyb*$?X!p?4=Pjup`1i=iosz8Mf6Nl&XrzqG_n;$jCJ_ zaX0bJH#04?|8h%7z3k?DRK?b5?R@uRU+rDBtY4m>3sjyXuG_MAgFB{9bj&R+ELrN7 zng?r9_+(OZ0pyXNp(cz{!EL&qwyW{FxP{iklX?7LUL^JDBBP{;>PXWC02`?hT<(bN z9SlLKB;TcF(tT+{CYb!1ZD!~6wZi#?m(>-t52it8SO3j_^wodzPk)AosPON`Lc3Z? z=w7ixBl@An^m9o=8l?KrGL8JOa*#0O?CoDN1qnBNpMm82oPh-CE%mHpRx+}2J~i#l zk=U}{0M88bhe*v^sJ=IuVw+r3xQ_%hQbe8(?J|BlNpr2>_-NR9h!j#^^@j-lz(|qv zCAe4{1~1O+6pOqGP`c8YWK+RoRY(;{?inOo#2YA*s%D1J03hG#befztrmfzRB7|bN zWQLV4HYjIg8EOiq2wF;1Q;}DLa}Ve}cJ?myarlDAQpZPls8u~Un#e_BFt^C8#>S?1 zwtk=Ed{!&@jlBtoAp4T~N=)TRA#!Sbi^B$a`bF@FrQ0(r$RuAkj4tl&-G`h~u5CRtf|~ zB-zBcSFOBRg-^|U=vZVma>s*^Law(?R$ zlx#jNx{#uSu;~1Zy!FCIxX{%#?ovOnY;nZP;Etr0$e8qmdyrec!XR8MNcodQ%ZZ=i< zj~tkbAXzTSn%#HU=S*e_9Ans|g)&(SJgZBdN%_@_cffoHMW|+)_TA5+8YJ-bDW3bn z>uk>s*a?B-q#t7)J|7Mp`jCdT3cg;%Ss~HkMKv2yq9%vsn`(9rLlGD4F<QWIwIRY7GbQGen2n-Zz6*9cPo>j1Ad9J5$JZYy=haK@ z8C_M40&tl#)brulib|d;MIW)GuW~3ksiywPoORTt)s0_2eldW~x}#g8j?~?sY~x|% zdngI>?NJkXrf`KD{iM42<_{h`;E+Z8&-RV#4st1#zJE)z3NIZX{hlNWhMkL4RyO7G zzR~A{@CSWk?%#ZKvjP@jXT55tw-ff`JY|gY=RBXcs-wXXr>=z=gzU6D^YOSq1zaj* zTGf2D=!vt6GOqHUZ)6SDZ`206&s)k4k&x)LKanq1N~nKMz#{)LY%;uAy)|aU5$A^s1xxua1JNl?$UH;*;FA;C?R{+nS_kj_&K6|ho2SFu>ZP6%0anI6wK zpWpC3Ix5!TO2gei?%}3#6yNgplrxVAQ3YU(yF5=h^PiK#jH-+nVtm7%v^lclBH<4t z*!T0XXn(cGX((ly)W!Fi@^$A0zs=Me`O$+ObvT9TrthcV0ahtXMbkRFdltL z2BiNI-Ac`a{7V>$jsW>KN@c5_wKeG*$-(3|<5!Z-k&lJ~*MTDm7wmDQC(~*cZvjKI zR?}_P0PT(*)tG&OSMUNPqRpMeoaVw+0LE?jAUEOpR!;5qWDdZ(e5%Zdm<~$wgG8_v zAoCYt=#5%rsuu-8wmOdF;P$Ne^>^AIA5D9&ongp~YS>A@eFE1dYs_d55z)Hd#mL)D za!}?w{Acd=GxZ+Ig~vtjlJgq(F6N=YAEg9&mhT=5QluJ~H_f?ovq4dvAbyr$$*_&*s(3#M!7EH%~U2a z-y%(UrDU^6|HADaaFFaqk2D)ybw*C4q_oY9{Sq&XKMRv}=yg<2Uedb(;yQh@AC=nm9eMOvjU+^Ejx0M`ff`MoE`eiCBJ=Q z)GG24F`Be^NQ_pxoFpUG1ez@@k?nw`A=f!FCg&kdda%PYuqMpKSD5MR0OexMpj!>Rp6pf-jPg#e>fI5RVqzN-N`c*Y&Z6@|yW!2~!mk2dnKA7Xa!yntVe zm~et^^%xF2JV(Mckr^UkgRG=dL;hQIpU>u#GxUT16pLT!1RCa8-($o7k1h8$t&jA7!qC5K4iF1y;ZSQ!=Eo{U`(DUDnydtqMF z3kYytf^)Q(;tdxep3#n|=^5#ZJw1)NARoLcE5ZSyI#d3_`7cn2LHgs_ISSa$r%(qt z9prv5x(UamkE+jRhX}_Q%Q*w_h&rN&qFztVhtvjdcj6(Qi_a8J*<|CgaDPghWd{BR z;u7X?O1&DK&`U$G@Zs}f9!Y<_SG@t!zJl*~<{Q43?&GcM=T=_NtkZsvLP&I9ub*^8 z=jq8_z=g^IZna1-!;L=gqz#-}^oeAG{ORBX4m9ck-@Oy=7z`Jx zAta|gc*?*(T&ZT_^Q~$upP2YGuO^rYXJ?41sU}1E0*-%v*2sXary(Al8hRS)C(v+m zW|oq;IDf1~H6*mqAe~Tm@o?H;XkUUX*7{{1si2TdzXMMv#}YYL0EyOpc@2d;SK7w9 z=+JjjUE*svNawUS+u=$PZ;89mUjjjWZ{JkNIo!96G{K?`alAo8J8=p;cF@#RO@9$Q zGE>*-#a__Q_hvQ*wtmo9Ah*<{cUL`~QxLQf9bRfcRI05UJs1RCIO1EVTjbt)FkxX- zl?E0#&;r1q`NGOntGtNXdc>-UJpvV&`P+Dbfyl{k0WAg;XSF^V57aC#MdC1M@@Ghf zxu`KSJ@RgN^V_LaJ3{bDYG7uJ0%K^d`{uMaM-+_i<<3<|7 z|5>0RzHLFna1i5iYZ``)7eH8|A-u5$q2vG*FBL@rQiek;D(>YyoVRlPqnTB-7LrKW zEqmw@oIz+Co|O`}_cb0Ryz4H6npTi+-xA2yfrLzP=+@VFWkW_Epa$cRt*<4seb`i` z8O(lme{g(^gCJUw?L811z>FWo!=3}Bj<_@Nj(N~MNBJsc?B-RK^%R*I=PO^+QvkqI z_H|BE4M>p@4w4+iv=g+nP%?zTP8i9R?s0J1Qm2pH>7*ffK;A}1DlY;n@ISPIkl|e= zTx=cv76Hv8SyI$(EuvM*lTx%Na?0FxbjFc=L^a2GTIz&yEaibsM14|VWT*FHwz48? z_zf>~{;~wKPsgNVFp?Dc`M7G|?lz1!L?T8|x~}4{0sK1xR^hyEDbP#>1hXJmA0nXr zoKT63fiLvLPD?$9FpkP$`opAW<&nsEdU9biDg0iohupLN>|=GPmv@;gOw7pi*~GBq zi(tvB_1JvP{(tX!sYwmx#kcLw`QWNisP(fvB@_aONs0oi4oGD!4mQWw%IBHmG)O&% z4nD>a4kCSO904IClv5hd8kWQ?k|=ZLyn5k7C#0RW%E|+j>zURbV_KP_jzuricE=GS z($Ar+%ITnxfzJX**cak?+YrNA-0M+GU89TnS#q_i@HZi-&4}3%j`h|&6V|D1(!oEL z73RiUMwAt6aG|3^rC#^1O3;|<399VYr}^|;o_qCs8~EYmQdZdE3nXl&N1A)n!_%;1 zUQRhAO?y}T(F1=0L6-lAX)=gk!ah+qKG(E3d?6a*86k6>Y$Y+MB7yO_%VyB~XPr$B z38*!Xn1T!u5zH(bH9YV=e=CNJ4pV2Gu#5t2%xwHuvF0xYnfhcwtn95`5r|Tzz&m}7$rtquc;YM-fBc{R z`~UbYUgoBMorSmQ7fMvzy>}8xT^a_jGZXb z6+M26qu^zqE#HO9f`<>W0`?BNfCm0~zNKz4IWoGcplFMg*MY%S{)-4`mlq2GHWsvD zA-q9chC8F-e%uNt8z4-MC<0yNjXeocU01y@FgYmDHP}-wy-vh+;oYIE?n*bYDZ`C< z%{`*08tPdurg8B&%~PUp@*FJ%S@QShAi&Oh#eEr7&QSbq&YEze5*=tZObkaMn*_LX zcogk1yj<^EmXIGv)UV9$(w0kQM2e1#*E;V@4QK-u*OstbY3k!~wJR#L#QJ8r=Ru*m zfy!iP*XXR#tglE$uO!m8_f_2ZndPN;RC zq9~$bt56DBa0pabuMsE} z(gILg;(>w)#9O<6>+tXVy}yl(8U0&Xu(dlwn(rP~ztj0>_&e8rm)p>$j@r`CIu+dg z(Ff~nk=*TW;KJE_b9{mrg!MJ~4uvl!M;EB{cshACIMTbiY>M*Vh%GyXV+vsc#6Z5Z zr88%RKk(aYH^>Y{R05m4@BnG>h{Z5#;s}hjrh~1oF=#RBZ~vdawYl{#UAspAeq4uo ziZfNFANy@MlXpe&X0&J3o}AWu%(;pJM1RxI`suB^Z1DDQ(9aDwCL@Hv!A(*<7IFjj zTcDTJM~k!I12tVgoE-J<3eM|m{Gn2);ccOa3p^QvD)dHj^@zej`mg%K2~uhB;}Tdh zY^y*HK|c_}bk6BIwWJInii0DAY1KPBLtw~YeoEdV#4Iq?C-A}@4$qJJyn~pI@!Ion z@M4M!hZr4ul0LE-aE?p_I=rY}4f?OKTkvE30wP{)tm+eZ8s$7e<&AK zkCF6c!ZH5wSgrww5@BJX_>%t7XTBCuFZeVWhV&tD*N200rvs?Z%D zO(%n+y5hm3y|ie3EgmX>0X%x3(tx=UGc0ao@U740Q(RiRO9>a|A47r^Q{FCfrbz79 zM-(w|0S*xdY&vN}m2MJsyx63rs|lhs8cU)yrpOP>V2HE(EE#6p=d*#6Ba)910_h;F zWeOS!k0F7l)h{QL(fXPJ_c8C8-+qC?Ut)JY>W~tk>3*xDLvN5KcA5o?0Kppmh%Z3r zFeq?FVv9+9#>4$7hBKNih7duYL?}0>VleZumjGOk%X2tGhMoxk8K5juet7>EDFUWY zwNLzKp$baF2|zRplx~66sS0+m%B!KQ32@$y2rg2<o?rv3@;M3>u;Jwug@gn`X-#lf_6Wx8 z7<{DM$%x40+vc+#LIR1=s<0AB1s;M03w4Ygf(_9TKaEM_;wRD3>x0orHJcvZxlZ}V zW}itOUz2LAj*#%t8Y->1wd~`Qb669YJmdaz7W&TF_~bgY;{49_Z3=>92G6dC+UY8W zd472QVsQ8z`fol6hTNcUk^C(i*i+*2qeBH{INpO=G8C_LjOVJw0_65ouU+++>|1$W z!j9v0tE(Ol`ZuHFW9Vd~V<5JdXBIXOC#U1{c{b90Ex6j@ka~x*m}R3OK@Y#jbG5i3 z-%d8teSCSfIAOBm91;q{Pid@W{MFSCByREyqkHT2<<(yB42`2NLjQLQ3 zvFe=jmSTNAy^9S9j13AxyK{X2FFlmq`oO+8?p5^N$1ooI*Clz=o$EXF;qLkxj5h33 zj-npO&5vzJq%m1p2mhg^u=iquxMf)`WVJw8IJR%Fh{yi&t4AYf&VR1s{itdG*z5We z>@Ch;u!;{CX~y>3 zAzAKA5zWSti4Wc{rkgc^=}R;2u5D{OZ0lNSupAnvK+?(U8C#v8$&B;#TvVqdxVA?o z3z9C83@4M9U`6MoBW07}WQxu3F|-VR&E^;IQ-C`Ya_Wdz%m%@XD({ILjdhC9m^?|U zr*JR?bbf-cf2a+UI4580{n1_WMXaykkCa}yj5J6ddo)t&#XYpeqE{`mAqueE3a*Mc z`#*+(NGcKqLKC^3Y$0hAgxxMEy@p$bG#q4RIXEP;B%2QPd#rAF6YuE3>p9r@KRvCEHdOQim@k{r-K!slDL}HpW`)2>=^S||9{JVJ1hW@S9`DRTq z&DQSqW`n~$IC)<7UC0qNr62n(M_?bq7kYLv1v8P0VBzx-7Xs zjWyL#Z*~f`v^+5PyL(@4E`VnD(UYC~F*x@&pKfliR<~{f9y)IrPI_~^V(``!Diz$i zS$%{5%E`I|6yEqtK>28Y|MF0NS_9e14iPYGEY-*hI&K|pZ~}LZYhv1K_1{be z<6`|kMggBG8V$6;h;DqQEtry&2n%IVqq82iSbbbS!qx#`^rtxJ%VNlk52G!sQQOBE zZin`3Mt@9YXi40Z$>XB8uwE0xU(gbg%^j-65`Y`&63_w~hO-PG<8mTeSb;vrHJD0a z75*Zw?~ulJJ>;g-uSfkHd4YL_c66IEbvA`*w%) zBty^u=!yA*cqS4Od_!H@S1begj=Q!m9b-}82I0cSc!fZul@dmf;0)bY%85XTBbWei z=LhHbvNZ&RV8bzfFqdj!AX4Q((6_CjV3IBdgRA9m2**JU=1>j_f4vx%qMSAWRjgkF zoxCXHge8a36)guRi*ZXBYo?Q<-eb}-Ib{5`hboJ~_;>!lzjyZU{p#8^`uE9VWA}dl zxQFA0T|Go{1}` zyfvEkPY|SnEfRWOg~g675^-Iqjm$Ji4&nw>;~4a!JNmNWA&IPZH@|$c-Q9i8LqB-5 zvkxj!K}VcFdl&GrkLZgP{`Nt4WApjm!QTGn!&Rxbw|}s``TX&AcWcMK+4?2wJnU|7 z$NLI8Pe1O#ox*`zwz(tdGdPKDBN70LU!XQS6zips1u!_;&}Pr|&%Rf;du%tr9{Fo+ zgaD`V2odnf2878P0Uz}t?5P#Ga2IpW$t7+u@(Wh7quG*#RcRmO{DSvyNKfP@Fj?k< zQ5WSG3;LC3nsDN!d97+Y+k;=cOK&{KvVn1+NA8GyNv4y=|sPB`OJ12xWs3Fk`g1Yi8IH_4U%hpus-O8CU{zK zUVS|5;Vh6WD}OQDNlrJcSwCG6kPJtD+6ya8k?60u0)X`sm#7AXgtH5T-xe$@w8mZ& zS3jhR;3;3e#W}%h^$B|dSMhiCjhlR3x!a_srMrtsFJTd~&eBL>RXYyhIlP|U3OXbL z@v_WO+|~=C8`C}<)gJf8n;h{?S?Z!Srpx5cd!xwC+U_XIbjki$2@ZyXxqD-lV@Gk6 zHi!AyIMO|-^Hj4#rW2dk#(hx`V%m{XkpSMM7)98?ollP!(h~Ez&#~&%aoVS&>ZaDB z-aR>DwL{QNaH@oK2}3n0iS>1WKGLejc6mQ-A-sp!zv846H@Aj;-2TlCK?m~&)ocQG zhAs{{_ykuPj|S(oJhMrUFcNCZnHo9AXG#~EUB30bbIKn@1oxW`T{XmX)Ad3Z3!Vse zp~J_olY!`>p>L!kI;`$XlF+Aol?v1%)q!P-eqj%@uwG+ItXd8h--iU7{lMi* z((zuKJ1;|6L$+WKu419Tz6c!60aCtx4zuttqNLe!O%$~{2Dc<&OXa^rVGj(M0cV3Z zyvxNII8TMC1{P_+$?rwfq(ONni}1_fMga~Z>DwEc6Z1owRdXb1mEamOGy1q1#CLc& zI*1uLM_;-$(vpie0nYFS6wuX|?hlo&i0P&~Ik+A(8RGHZN$OoU@~gC3ufjguedi=e0t@}hs(gE>M$J#n;__DHu*sy<9I z@PRYXQd8a;Bk2zb4c#X2+!Dy$h8{)|MiY)Dv$;Fu#g*QFLf0HV$w5A~!bSua`a`%3 z5yFtjtk5#uyd>+ldNjvK%U7ZPDs%e*&}1hK)5<4Q%I1K8h1!&%O6*DG7G{=HWCe|v zDLaH@f`p(|WSkRDgpV`CodvFV#OPQlxA7nRyLL6GBK9k`+gD1)yxTH(8F$7#XHBpX zYwnR>35uM$i}91cc&ifbW`@{{d|Ol@LxzV%AV6WavyedAb^)E-J@8B#+AP;)2 zy+$IW^j(EQdch5P*=p9vg~JyHmQ@X|z1QKIO;{PNI~?xX*4D3(ejD2U6{K`7)>9w8 zVZ`C7)WyPABdxIleSAGxTcSh46^c+7Kt5^((R2cC?sHr&uR7_&kH?%24BBa@0z!l%wsK znRq45VvlN?NU}b1!W1h6b3_R9YhALGA3^zi!fu=u^w>fsQa^e+Qv!acRdaGErxO>u z$K8NUDwx4V9eO4^b1NM;1yLh;_*jetIjx_=X*NUx2QpD0dWQOO+!`fSU?y^fGRP*E zgPJo6?`^fC3W3c9B?Z)`8nC6!Yg9r^2@xt=+guN3-NIo<&WTd3GH%R{OCu&c5}XK? z7TDFZtpxOnVa`2!{*~&2iCn9Us4k>9!l zi`-+q!sCjXs;~-4xyK+Z&oBrX#r@baAkO%DhK0v-IVQ@o00_s88WLxaIogIJEmB)y z-5e^TZva+K;E^wFr>IEABhty~Nj>SpL&+RSC0)SZjC8)NJo_B!!jTq{F07kFWu)^% zmlVA(ZBM%B__Cg8VYM7QC7PU0ZqVxEm4pdgP`H3>;aH2v7S_$-GO`6@m*^H0FHJad z1w;-JrQsKfH;JbL>8j>{IyanvvafEOIx1RuJ3_i~J5}muvzuMyX!Ap}C!(d34ITvV zRbzh#dql{wpnd_m#aQQHvm;w2+GRX!i-{XcfzhtkvF7POjur?6(U1N#YKx1dVC69= z>g@BRIOoH~zraqln4sULL(PxW;7s$Ch^Z^YsN9j3t%tT!tNF-wgtvt))I#OBpaX() z$jBh3j&glqmf&DUhy7%b{;v6t)wHX zg4tz-Wi%49^9;lJl-%G&$j9XgFI_Dny$DO0_)=Den{5Cke_NnE1EgnmY1FYmI?cfk znIPRnY>=;FM(Ak53i(h*Dq%(tN!5}eIk>T)yFjZl!Ci3~ypZP0z~<@h252O`?>omQ zB){v;ae(FCeeJlwn})ay6C?hjjB>&eH6oMvqRY>bpuZf|m~|Y6RAw6&wSr&w4_5|% z&|e$)3lD6Oq9XX+D_hi0S<42*TCAYF%u(-+;uiFqBN56Q)7i-y=~ep1Ng2x%*HNuY zf0x-3&ZK~bSBh59?_#tLTA)SYXomD+v`&cZ3)R*VY@!YqBT|nCEN~OHXDfz>xfO!K zgQRegrJ~}~5DECs`XTK*Cqt|&lHkR%)<`OqIhyD{m8le-#eAM}I^4!-7BuCnj~S5DEi#5 z1MNm)+2v_ZjEKTHQ!!}gf#&6@tnMY7Kiz;$b$~2Swl?rB+;SHpw3btbH7yG_YZq%T zNto*8o3w&07<|xX4QXIW=)yhwwJvO-cZ9<>tX`11C9KAZo3;vsujwCxDRIkWcsA2U zu+{6zEm36l8oXts0H{?c!x}E+*>yCz!<7Oa*r-tpzQ&S+?ro#+5?ij>!_qRWP6YE| zQy4|?qI$%T@QWN$(~}`2&PEEGdRm87LF=$m8HbSGOfWsDY`7sOfR>C>zEYJxA|{Cp z+>*+ds&abs*NcI4x47OJTGvxMu%kO+Irvd=84V{dEkUP;BPs18-g}_jjYt{5*I4v` zOj0Bycan~9f3qxmf+PuDBf2JY%neol z!Z8t*(v@v(s`b7&>fagKK~}mx97F$J!Ir6Q)fx09;5K>(fVnBI z-FV6el|X+jF5?k$Ks}mt&n@NvrBLO2pUs@mT492Khc=ghK_GKUt*CEbKC0}Gi$;iWaazeb`O?BhpJvce4Ryd;c##aPw6Z`len-Q@9MP?43lo-z8V44nU`iO1gKO{ zru9Mz;hXF!>|QU)b^6QdqwtD-E+=7W8G1+Mq6R909?Ob=e+g*`VXK#yu+}1p2|3|& z16XDOF-JAO07LDw3(RWR!-iy$fyuF~V(>+&H@)2bG@IXn01uXH^FNK5f>4l_5 zXo-nUiwqS)QMz)|!-FT-fIU*9j8@1U^`2?sl(PCHh@*P7bQjl(U5d2}OFF|wVQCpM zHwU8O$aP_N)e{JXvI2eR4U}(kIE|_yDC{bc29BZ;tRSZpmw^t+DT!p*?}zLrUAtX| zTzhl8=xI4yEZq!WE`z?AOp$e89$EYl`(Y&C9rllrlzaYPw5K2e2#68$yqLun(}DJfudWp;sJR)pVD$(Qh~{r%297D=DM1 z&k^CX7Ku<6Af%GmlnupsYh;2BGz|)+U|9xf=T`%NbnBmD@PI*Ctob=&JL7vY;$Oxr;iK?%BQcZsU za5#}XK0PCCZ+>{%xuKu*S9qr(Od*5Gqk~Jua6&k%d(Wka$;HN(l_};_Ksf5MiEFxJ zMWaB3rD>*Jg_J|KixSO5{uppckdv~#iFzh}ol+x{?D^JPJ z&Xeu!=TE!aPc}hRJ__b{V+hn``tH54zCT{vIVIoYyrGD?q(y8r7}H}lIJNMz&mezR~Ks(^~jh|=|qDC8b5Sm*Hj?TG;i zVXY^9h2$yqOHQNib8>q*De}!5`Qg>zLtP~c$Y{v|Ir1Y)j(|2|AJ1CfLnF*ih797; zv^8`{h89g*lcC<5OUO{zNJXxV^eF6Q>Cr-xo(7AhQG6iVW=?QEVVE=xI;T)Om;FFi z%;1@+#ZwR(tD-d)2u}fk6kL%NGn;h&ra0zMJ83b19L$Q3_UJV}W_D_3X`M0>q4pnn zE3OUM^V&HA0ol#|b0|2Vb%BP@JvI@`5W5Ao1-J#Ww}IM`-2ieh*OJ|8s>ERCwkA6w zPhgp{Ra=wouq;hUqD3Ko6?#O2o^#fa(M$3F-Y|YJnQkF(2mefM_NJEwNeM=$zQ=%!Im+*#z(GSTkh%#`y- z&+tS$cJ}5ZAdQ*%sY;Wl63vDFdwtKH}P}qpU>Eb#?fa? z`4&LhICxH$&Nb+XXV!Hz@YZp4LJv&PQ}S?TXtYY&gIVvRFSYKbd&VSxXT$XuY;MvH zbuDxK?a=`aZ^s;DgjLd2J!uRs?uY4A*U#ikZxJL<+vE^U&KdziM{VGloWX&|4K{wWvtjQ7TRtwq-mm}WY&gNYidn za7xN>a$|DQ0|LzOSuo$jYc!#`s#9JBK&>DB6&gWdwcHM%Nev^2@qi>5)SwsN3C#RWo% z>dGkV1^uN5zlIJGIBl2n-iVyQ<4$?CH&5!M zB51Bv$|w|x9=_R}Eqi(Ea~eVwJj=9$?>OayGMo`bDQDT0~j{sNe} zP8sH0S^~oHqEH0gW+n78E3gx@Q-apYB$Y7krc{>;a$HjxW8#}G_KA| z22XIn$@pV)mQ%02<_yquwu+)@*p_9{YUg;CL{Y7qCa#7CP&=iCM;*;7Y724=YcerZ zJE|Gp4fn8Y25(6SjbfLQL2GPG5piX7QV}$wpvV{0=(z3=b-T z+d-8wc@lP~do_&_Saz>gKmF4IRIZx%U)sfY7G2br1K>spJQyN8U%+FkrGpwL}|k z+W4kh?wrqAl`?8>anE6DiI?zD90kn6yr%`&87ni8S0cP+2+zu_I@l<6JgP8e;`r2m z_+NhYKm7RLympQLtuOZ6KRbAMKAaD-2cw<$p8BC5`)w}H_ul*W-uoYx_a4umZcGrT zI)+0V6DSK={i-)Reb_rI6>Z~T;r>xWg{WQYLjwh&zCLeSo*>xP165zy2gTIY)(2ow z93EDf0;rxHAh>7oc}1PdXcuFv$x`K6wwhO7SxT1_Xa7&yK> zrG>5_s<}9HJc2{nvrJ#Atn$7Pn>(i)AiS~_l|0R1HzSQicd=k`!(CuNH$zB;)XZYn zCYZV;C477m zZpWajIqg^`9%!v4{0?o@HfC=RN8w{ij8p)idLwGLOLagvXG(T9Hh1fMa8YOpW%#piy2tg8wsW2X8qB85^;SSJn>n5 zW4(*-gJNq`^!Nl9cK5J<$jP~S!xLB_^V5;Ws8hDZPW5Pv_hC8lBCgSrmu5Z~*`0Qo zfa;BrquuG?6(#s_3+1z2ii+qTiKIb1qP3DH^)s^>U5G%KWXk0gRZCkgb ziT}`%Q5Ha6=0HjQBsCO1TKwsaJYM}*g7VVn?6r(rxN&E0NZoE@IDXHZH!8mpIPBT- zaDmf$=qRn^)Ou}|I$ax&rnN+`XkVe5H5r#ToWNn>YP`eA7stz@t6N6uUC83UFtq z6DSu$-wac8;4o)S3OwEwmfm*;@WfB4)^HJs>Vd88y3=Zn-I+Blm&s#k_;vMGoI@CH z)d5I<2?+8Xk0ORd6`Ap!v-A1N0J*22I{QXRotJ`u`q7B%eh+WWNN#Jr2-aOVho#S= z0bErVZXT!Awl^Q_vj}AY7~%2LA~%fMO$~=n+0vM=g~4J(x;^;l)v_LEg|3}4^zMY| zlAz1^Qn-|nz0(2HQq5Now`KO2mcq%cJr$jYn!hi@SWi0HT{MWWZa=v5 zCen$kJ0l&4swHZ}HO@F8jIp&0n~;##8)m+bnIQcwAVwzEk{CF{!jagfpCBTOwipx{ zGBv``go)rxQrZlt34@ZeC=4@4ZSHjyxunVham8@DCn$&owOk3e01enkG$S+EvA~uP z{+7%L#;=T9DD1q8QVNs9nJ(is2z#k|F7z%v8m%w;bd*CY899vcyS6kHCm`@h|*qJQ;1j%?Ej+!C0pG z(H3Gy^d?VKPeh~Lvpk`S2oEgvkWKwz;>*?*rLeGs)!L?`c}6h9md-QRfA;&*K^LHFDYyJ*3OE zhWQzp$j>mdGeY~4Ix-uiq!Rog^gGCg>m-L)DeAaiNT(B))q(6(m>Y@`h7tmykftl2 z%0*AI>V!2t-Z{vzRFw1TIH^D}5_Gheik>9tSVAhuC9;H6pn8o|Xh|K3L#ZgtKQ-PK z>5Q;i6Op}K9GF&c3*A)S#30k!%Ibi2atdDD`}#J)s~Trvc?b!qpS{OCmBn@8*7ZVAe+W;K$%no znYd;q&6m^|OGpK|K$p@Oby9(jNM7nl97;tnYuan(B{sQ{@(u>er>NH~Zr!fm@;*eE zSi22xFlKuMG5xbeDmO_kzq@o8n!u5Pl4A>#WaY=+E|9IKQ@4qS6KYqED{lPiChbIl z18*)|&K7b0x}B<(XTAaxkL3&^nSo142F71%fkbr@>YPfdt0MHSA^}=!LuCo1qv_x@ z+~Uaq<QOGuyu4%*FyOQB~ALj-%!lg#AH&j*L0&4)z`126Qg z=fmyVg~5mxEF5hYh6NVR^78>k?K1O0ZQxciaV42Cbzul);I}pz7A*|M*JT%m#mGTz zvW*nhOsDa?PJ|^EhUF&0C$$TM5$qBR!lO#@ze9xTyWj*sm`4I#o$J9qZJ zAqC0QqB45jqa(^&MKKF>%HX3G8O+&P|8Q_TKtP{bbjAEQie9)0;(GD=#@!Py{Ww;^ zzcx%UnH7R={k;r3>Zu_E>h1$>X06$UunO&95k-z9QMW6oM1a&BEq)Kk5?VF0i}B&< zbTY>29G(@J4Dbv>NTUUahqqifNTnI~-Tr9u3dzDepZL}?vFuIhZksaaRhbB#=F4Ewl-!^*0UW2`ydu<+E$h?3~0Lu&1j;}`MhBswPz zPgAb$NHOyyNc+)fz|4$Z0Bv%yD~BQyG!IgMfrlv~J_A?>)s_pl*NY22)yGsK zG}4s#MeV{I)I}v4rs=e;#rhQDP-bHtt{Ez_#sm-^iE6%Z{K{$ohdO`y_kdZ(&1UyY zNQYdD!2T#uB;s$$Hy6drdfyvcCCd03wY}TMD!Dw@uYx9-7?_|eLka0*<)W4h^YiIg zmM_KDFJ5_G`F9~mU=Cy>#*br+r6U_tok&Wz72$ zNGT4NU}34-9Mg!8i_p$pDy~It?|QmLymj{Mi~}-L(|1v;ceaAft`r$pI)^KQHzfmD zyh+B^V^~tha8B(yGwWy3<$SQYNHohGz zmt*0H!i&3akZvW#E?^Tijp2l)xc_?KP6tBd3%koDsO(gjYgi|3)nk z=d8Wu;QL)8a#(1-k&NDh844{=2ulC#&(J5nvYZ}u+uyeM$R@K!S~4U^=SqtO=mZeI z<*G=z$!1lUz~$XI(Ws7!kk?Jsh!LK!c3V1t+zQK(JK?Vrpp?ua?OOX83yd{Q2yM2% z79XT_>rk^P5=fX~Ys0R(oB`IkpF4rLvhnPw)?9R~<5+|HsX7bev?XKM3p?2dNB|R^-Ul=eX znR;itK&a!v7-=pNayi<>04r%$jYciDM%pCSGMrNYykA1iNE(7xdWO;&Y)bN^f})|) zVBWH(q3=xSFRf}ALMPDaB=8E8>v@gYPT3?-C)y?~El=8oiqfE8q;Cq)*Ud_kslklk z^Yl$MPFPxozFFlENGZ7!ox@O@C^{aAcF&YfTDcBCn@j}1$(!Mp;-&MBAV%xktf0e@ofXLWW>Q+^aFVGas81_=3n%t z$^uP^gOo4OAoza|S!Mdi$Ad$D%u0tqB@H%!1o#-{GNz`2cqLDI$ zf*~zfMH5CO zCm0sdy9rJswgaL-X-pzt%%j&IP?QDZGEmwQSKteOmD9Wdmy&}t$Y5uYO0A{n%%?xB zmk(blhgH@WIqimZEx8W!ndpkjg6*j7hpKQp5Ww}O)7}Nm%b$wsLmoa<=HqG@?a+hc z^Wl)L5cU-QqrvfUpHr@q(@@*L9-tBuv$ImCsf%&ObmYw$yEqP@Q$3}}*=L_=Kfgki zhjOtIh6H_(`)v9_N)E!3gI^~k6n%lFLKW8c_@wzJb6OhTA6pAmy`Zk^#H$Tg3p&FU zm&qII4K}bC?Is6KP%DQsElA?|I)Sb-1q%>_WOF^zpqfHbSMCEwo#f|8okgu46$Vox!^e8pT_JZ+0S%I zvYJIP5vfzq#z`X|$VAF0IJVkXlR_aH3aMU;-UwwoM1o4*luf;0E-nHSao z`?&N9IM=v;B(=AM?>a}%aZmlt%%5DAXCG zsav!aWo8BS6%xf=vgAs*6p5WD*I`0ev<;OixMd(!ZWXGy8#z+tc5M~c%O`Oa)%VI# zbL$LdTfv<*D3MIC^BQ#ruC^dzQ%;hpm*JGd*k%LKGKZV3_$UB2?zH_aqGd zfL*Ak@CqN@Qy{B2oE-jQqhX$*o#Gqln+TJ9?mE$e8z}@n<4;|Emg3SNxk+{}8hnryu4m^VF>Valv;UHycPIn&h9wg)YC(j|ddgv9#Y;s>rmbB%Q32qC}mU!5q$d4f<89pZy@II0bXR zP&=PDG(9l6)vVp1M^UrMZ)QE0mgh$ZrI=~9H(3N_p>{2lYQ71SwG-O{C%9TWhgN}9 zDPd)vGB&*M6q@94+kA`2OMr7fZmLBDhJnPTWkNeeRG?cK&vh91*bGJL(|^Ffn`rW1Y zrp%jde%Hu9OOVZL$H;FTHDNF#q>`%&qyfi7a0N+1oZC3T4bi0i6cMc~xAh9bL2)_p zRfVTd4YXmLZ2}3{dZ+kBz`=qNN%kyRpD~?altwkUG+j%zOBF9R#k&h&q|8%Xrv-$r zF5|2a&|tDpu;b+mSI%N2!lyQuotcTO^8Vd`JY7ZAEUu2W<}U0H-pIlzwcDl(4+ z@tpE;c^Se$#1*{snVUpFnpjY7TC&jHC~LSxvpR1rO;l{Z$m3IFq9Y0d?=`Y= zz!pJp)bDDeR>C(UXk)QWc91m6W}n-4Sos15=XeA!HkYX&Q}I|3xdbh+aA&k|i+L?A zW#%v@>WLYjHA5qI-K3hO!giFRoGbL;`hZHQMv}f*> z93KVcDmc9et9Y3c?l!;39b$(0ENm;I*vvJxo?2pAx21EsPAOj&_{dUg!Q61-*W1gg zvxRB}bJY7W8<@Qu8HC(yxa4vZt2ogEb#yBb!DJyqJ`#Hwy<~lsNU?-;u)7ehLq6)S zdy`D3v#Ica;W&8UoX*xw&7)@0(%R4Z{ffe*e+gHmy=kULFgF6~=oUphU8LTl`c9qM z#1Bi$v%<-OLAwOf>~B3jAIm#=XVd;Gy!{1f(6ktsOB}!FtlhU?aB%tWk-nl$4q^pX z5JV2!SE-Oyz$phRAin(f=jf%v=`X**Y zn)rLLSg6qh_vFc=K6c*5=z*Kjx**gCOA7TtX0(K4sEI0Op}qvd?;z0b;I2-frNTQ4 zH0ZHNpz*dSY|hIFbb>@E&;j_u-39V&d}e7;DfKbrnLN{LY=PuQe2v{QdvvHe;}`WZ z(ctAp%4|Y_SdYK{XaCX%*RK8Z*RK7CfBbUm|N3u+f8{5gYuD)CPp|!zYj`JQ?Qn90 z!1q!A)|x~Vtl4Wiv$bc)^oBPLXS+zBirBbm=Qjv({+(;T%k8h>hx(x(SzbSc*YoUR zIygCK*ZDTfha4e2Lcrg6GUp^%L}MI!Au^}` z=CFT;huOyPYmd%`0}84}pf#T3q<*v;n))AB2MDvKP9`trJ=CW#?K6%c3~J)~O8`0_ zwx7=DXP>RDy?*_=(_^?hlj+IYP_UYEpAA5!=S9yxq*PIrzx{S++K9x4Up;!VU;U!HyW8E_-`d=(9_>~ek9O{F?QcEW z!KVjRcjut`dTZxCE)s!yU{wDNRz2WA(dtB5ybQ~o?O`>)5&Jm14NoWI-k#Q4{due z?sxVt&T4zZdp;YGWnA+d2cQ>6WIQ+MT#epCtOHLU2x2M`rEEHPA)hkyT@Eum_Bsb> z2y`ID;J9%90-{?T4ttP?6gLRU9No;SJra|CtWspRh5_jjVv-tWorW@1J~0yJ@{pb$ z{!mnJ`lK+CkJ&IIQ@1yqNr+F@Z`xsnoB~91+~k|VIsoC55l9Ty6Xx8lM)b|S{&4b| zn1vxJ36~S6tiIliA!zo2;+e!Vk-((Gc~Qb0Myj?)wJ?DH(0Tl5Ye$|gOgo%TUXpI3 zw}xXniAU0Uq-wv=7m4EsiG}z?2fK?>?1zxfJ5UB{#FD2pG|<_wcL4>}dw~g`aXF=d z#qEslOT&%R-gGWO){s#DzB2-!c&kAgj`m>7?xJjp7I-x(#&(DNuRCA z5)Q$K#VP(QA3@KoMuGeN{&DYoICn--^qj2~K0bn_~^Mb&#hQ=`-x= zDAI2-B{hobp;ZYP#9Q{NQ4{@R9xk;F`6+E$FYNoO+Ih6Ixmw+O^knD$-t+GEw)^|u z=JumsxKG`CkDgLJ`I0{|B>X_U{ADVJ;U&#)RPt|W%VlH+U_}3A$?(&ZTSf%-O_{_- zSN`pv?Y(sy@Al%=UU|4zZY?LhvLdABcOoH2z5qIhnfw7hkyfr_ z3-Qra)EzVtf@hB-i`8Hrx~tnXYOt!WFp;RS+uT;@hPJm{g172C{q)SXpG`j)83SyF@kmekqVR#I1ULIygKf!=03~ zEpc>0>h`pxutnr$T{G~Uf*~%n!HoyB)|p7i-K+;TZ%Qb-!X`Xp;rP~(6e*Koh=eSX z4VapgIb6ue4BWX%C~K|)E`RoX>PD{S}_1JwYPqz@bR6hk6Kp8a+b`m!2=~_pzfxdRs{(s>_R+V}lv> z;*4G|4?1OHn^?2XR(J6_Ji(`W!xM@UM2yS7p{)CCvMns{7r>~PJ!XEOm}3Y_>PJ~ z5~^*|#1uwCliGG|gp7Sh0+4bw(B?}t5ACpo5MC)p)5$Eayfz?(z9^9NR|%?ljH>R|i1`Q>hR+bOQ9&Aihd+swX@SI3|L=DV~G zIm44;@jT-Npl*7QxYGa&a^gfvT#e3Dmp6!>wxEGHrH(1?5F4A!qGfrvALP3ZRjiaP zR;r@;T0)zszYyY7^@UJ}ib-KMM3}5LFId*40%ijhHNfvyZPCB_qsj=mZyU#hPhVOvWEGdN|*hrHok!8u#MFM+KvP>Dj;HF0pc zE_0-f%Q-sk#RDDDvpcT~zH6;A5sd2|V)fgb%K@#~4PL|Hh3#_0)XkK`if?$RHY~Ne zWvrOB!hn|OI2MY}{}O1`^UGjmE8s|xY+{-<5auyNWjt%S=bi6D|B^2uqK|8k^UJBi z4L|G5W1q9CP^k=iq8^n`4vr2EGsbizH^o6dZSbMw&jvi&+ zAcq6H;MLDTDSvuH^R^tLA)isu*Z4oet9nPjIiJxfI_J7Ln-1Ux8D2P_8rVk)NIS*3 z_hg8()yX)W9wJYK4IlVq^5pQ$>1~3PAW8kGqPK3n3>E4^c&wf=fCDW`kJKI#Jx%e= z2Xo3~LdQ3rKEi`uMWjYx#BchC6iWd@^^R!ctw%?4-lN3fK%!B9emXfaKPKEtNUlV2 z4zCek0fK{#(dun&%EjNT*=W{^-LnV6I;Hy3b;jE~4CG)*Cs}DYE zO9=JFRB|Mj<(XULIH|%fDtCr0YK%^@l{T0m^20lyoCF2VDt5L-k(2HsZ?z^kt3Z`067n`YYi0#YDk7EB zV2Ty%=V&-i2B*~fy7c6%EL18(?s!=Qqj7;w#$fgJy$04H z$*a{urNOn9)fz>>-+5Io!e3aGOZD2X${`nu4(J-K&2`(*exsc9B!HT0EJ5=km_lwY zVk0QSD~Gk9?*v#PGWS%}b6f`m<{BPs7@=`2`rml<N{%Y@EzIKiN{j3g2 zK0QNlH}<`25*@ow=h*y>3%REr=*NDqeMo`ZLBRbX2i*VRD#hC)X6n(jhr?gGU$jO6 z+O%Cl%5lWM&k?p;b#WBMf%-%O#PYsEY%TS7{}E!x_N(sp{^l-)fbVWTM2Hw7!5<%R z-V!QBJUfSn?|-$mS3TI;-mJdb?B3tpf*{P6uS)%3Yxknv&2GZ7@_xwkF+{75psujJ90eTF^hr@Hw z({Rp6NL>}Fc*Dp@_dL|6&E5pWy!7D#fa?d;_BTH2p*2uxsN2}zO`s6;N(mr*J(<4z zoV>w^iCyJu8^B(qq)zx&si&>+VQ01a^j7r%6n_b?J>FqoMI^>C!nq#|CzB~6H7B$A zWV~8E>{d5#-@0}4<6EEHyj4Bf>l$j0=>;gd4Kbeg;HeR5L#H=yn&dt1O<%$Zvx-o{ zqt_F-X!cIwU12HT=vF`f>CK;gN*&Uzj#mTdpo;FbOjwz~&4yca@*KgKE~eo4oRt(N z<6ul-H$0P6E||2v@kR9~$d1j*jeuPHp!v#1pbJ0$pz$&VEBFm}529Qb?!Ygny)(qr z%|5TKf!QXI&pKWEvsLYf6T%B{!Z|@4?BdY}qCQ`PAR(4p5)vLE3Z4{M3_0cp&uf3m zLS50#7^Jqx)hyB);O8L>4ei>NDZWlYX>NGNo}WRH^~u+KqZ02M^#j3^0xS za^a;SS{wWV7`Z(SCc%VsHm?!XA*EM`E}>-UFny+?Mmcv$GG=BvDbWP^#PJJT$ta1WV zy(NEhmHbCL)M##rlqU0O6L+t6zI?vDwX@mXy>shxZnmKE*3O;Vtt#Rs*PTyV)!f>7 zPL+Qul^F;YWx_lm_vn18%0f=f{JgKo z#WR|bwl0i9#Iv^L-eppX`~_0w{pdA_`gdJBUulGQZ++L;T4Z1GFKSIkH#SIlX@&Tz+=^;m9T+p^{pwXPN{^*%uQf!7c!$)`N{)2K&VbO`GYo%x9y z%M|HMhikBfaoNRI3O^gFdG9679UQRXgvQ|5dieO!?mo=T&#FBS&xraN^>EK^b`JX; z(oX~61EzL|;M#XvrkxviowlO`o&MJNYDdSSw9N2`-n-iIWnEkb zgst&A10mYbv$+GSVTwaMVN#$ggV|3HK;z2v`5ELI^HyHCp-obv3&^UHiP$@)BqF_F zF_L8sQ8kX=iw4)SW0GS1L=Psow*O{ zig2A*D|YepCPqA>>35@JL`@ZlGc8$@h*iq*A=bUJo6%5%(3WVmzsN}|SVC5?9YX}O zEbsw=Ns1iZlUYvd6CDyeTkQc%qLmvRO7U<4$4r0PRYMP{76!9Kcc{NJQEz$=fS?(% z!PKEZW&tbHbOtZ<*nE24_u%;%poG!B0PItGWGPZ)=6H2Is5~jrn7(Jo<1k;b9bk15 zQjRD+E@sbXg1X=yYvJ1d0;4x|0g{~=qZ%$(#wQM8?h_G=aT}Fmet{NN% z%tA7cU_fWtIUt&QFzaK-d^B?gz!xSgz`!~vK~EMqDDD@|09Nh7nlGfgRm=e;^*jo| z^a3K(b}dPV`40 z+7%wmW+T*SLCXb`l>ZZ~$X&`wgKYrW*k?E^Au}EGHT3w%^euRl#PI?dR%TU)=LiAA z4D&0e87#)>NE5Ou(KS!hNwC1BHn?EI%U<33wrF)@Fw17vyO2S=Y`nn0%Su0DoG{%2 zI}5Hu?Ba)rLmLjTy`eve+A#sd&D?WZ!8*jEbF-d^k@M@Vv;iCfLALl2h#!2DoYwth z{7?SJ|NM8aU88?@+8ks(J9vmB34_#c;LfwCBl@x5<@2mtw<&eLB&gzK`=I9g^Q@NV zSrOsBpQl=+cHW zoh{pn3Jy=HJg{WR>k7lBhDOC=Iq6l!F{>3e{@^6UOW%wNAFDQD!x zM9<(l!Pz^qGx8Rbj3onyTu{PrP?>wh+-3hS_^j?B7uFGWA|2DVe8PwEI6j5pc{ulO zU32j8pw_hp=o?%0>&PUn5#r)LcXg4Rg~mDiujRZX@VCf*O~nk`HTg?uo$uDZ7>wcR zr|=p2!D%M_`r?rsB#RLaCsUInJJ>QwC+Gm%;d?Cja70#X(4*%2*YgIQ6~wqeDu#SA zp!P0$p)JV}Tt>`vGS6one19@O6|4wkVjsK226t{Ej$$3<`1R38f%Q+-vW|W=_;q#y z;CuDHrSe(9=duB!o*nM|hZ36q4)j4nZIdW-<7p>txKMHe2Aud|F+h2==P zA($>wGAM_QV6DQzoZOvK74-U4qr(C%jFtSW#)N<&pxT_Tk8sJVzRF3LQ&>Y6$o~ zyYv5_y|;_4EX&e_JWP)m3R;?BS|c6?>10fI&vk_3`X@4Lx~ih0(_uR@+~sh1Y)59s zWEZ6y_I3DH*!Q~bwIl3~$`QPy9w7u02qA=oW+WJd!~?wWzykuo3li`$8YF%sB!mz= z@PITz;``Rm{yXRXI3hADtIN&|``&Z*UVH7e*Is+=wbov{)tl$neV(|3Q9GF>1R6yZ zzt!X%geX^1haXqruWH!Cwyo0jr%@0RCdDzDo=qOJLP;l99!HZJ!Vt`3ai&95)X3KS zf>X1gR6!l0)6@iWW7tZSjY=3wAv=Ht?joc}>-fnny~_28mZe2%wvmPZ{{Q*=|L}L_ z=J@XqX0webpTwaHW)Z^RkN<5pi!9xQ`L5iA`QC*2HU&%Hg!w{;sD87;d}SYpEUF9> zpt(fF>ll*<*D~0Kkg+_N*Lm~;)`RmmU95>Xg@E8zIx5V%0F4R3QVtc{o9tm~(BS48r%MJ043YMIwz!VEzRz@u z#L!a)KwB(=QEP(D#7D`uv1*MW`-yTE%#}b*BOYFKInrVagq1}hCnHnBGYkmOKC1nW znwp#odV>(v#2D%Ii>?u5!`3In zO0k#5rG7YwgtO2}zflTjCUNKnMFFXM**%a8J|u`T&dkJ^<^Tr=aI%ha>J=s+4Koqv zYUxC+?WfBEaTlQty2x_*#lJKXZ6m8~5~N9B6iyq!0)?|PDHh7x#H|5_Xcz-l zcH1Vwa5suh{3g)ShHW88Cznn#6bYVDS_v&^M>KX;G9>JrnAM~#cTSt@5wPZ%MvRsi0R%J?tv?zJf6~2b=|J)6m)OlF{bkpiIFss#pS_dJ0d$ZNK%&%H^apM$<`8uii9Xy z=Un86viqP%_!1&3ZK<`0ysCw>XN+^qD1=(6d3lOq)9!pb-0>*OAH&!)fOzW8d-HJ~ zM^3jHHkQ?AZQyKu^Ro=Y47R?wk(_7@nJ5@_- z-F1BCZ->EL1b4KTa#&ecvM)kBS=$5k5MTgupv;U!LBZn#B&s5iwg|iiI+5^Wg0H;3!ee)NaI6 zZH+o{q>Tpi*$`wD@<`c->Rk(qyp~P)wzgP+1X^ekrh$zNxhei~#`CkGWF?H9Fd}8> zTbOk~8w0Q>bWh{_t)imf*b+?5hWa1>o&B%>_FtWw%OHa;>^89mLn;CB$N%0K zQg>AIzsZ*natGYxOTf;I=B%512{-u?cm=E;Vr?*_PP)}HSX~o={Hry+CWyq9;oGpk zCJmbwqKlraoQaOdEtcs7VR=rJyKl`1o8ntnfl93RxTA4J^IZ+3X_LNh_~y*9X=}F4 zOGc#Z;Ehd|F_qV}$tEO@lWnYFHYsg0B++zlth4Fi#nSj%vn-Vbl(T6k5XNr)@T;)S zCWHPBm}oQT8{ej#Hfh<+kTlk&Pu0$uuz0j%MZ4v1w#7EJ;0oz(thhH;+*-id7(c~_ zw&EJR*J9~3g@LvuXUr&KDP6x6n{SZiY|-!&#p$^lW6fszp5|YIn_&D6tvxrx?{hW# zKEIC9H$@*Low)-_e(AMzwlKRISRF3_#qi|=Wd+=7>+KSS-*_wb^BZe6!hdEob_ye^ zo%0(oX(!O@cI|}czmw+c1bN%rCTh=j+=iXv{+@>H|MP$NuQ&hBUz?lbzt*^5U|bz@ zvM7m?pW#yo{$(Bh_}^xm_05@RBwc;i9KYGQ(VH{T;sX4$n(G(a;M>*BndtMgA1*F3 zi|;pZCVFx*Uy8Y437#ozHpoOXc9=Z`nji9Si@v?JkE@5NjBZNV_7-nCLWZZSHXPY6 zRPC$Rdbss$Bi4Bc$KjOXt7|_=%Xbc5O|0<6KogDIbht9AxXF z5lr7l~fv&in*p3;$|p z{^abqBkdz`{@bw0vZl_8whrp8oE@|~grO`qwjCt9f6rC`VM-fFQrGRjXDb3@N;@x@ zgN=jq?j$3KDXlnPT$>?gVh8S`l`r{8HLRW9=m3WppTQSHDV1ERuqKx({Gj@y!EwLZ z!QpBKMoWt6Op$oPs|%QeR}K=C^_TA5q{)(xMPlfjSC_k7EmDhyIKf8yh7kmH8>+J<`Kw?d`5^`$5~XppTWY` z8Sg3=P!PiL-~`DBN4TTUZeFMmHZ%K$3k1=75G@D5Buh?g*$kya|HKBesFJ zMQtcY=N)caASk*UVD0*a3)j4Dfk4JwmqGtsddC8L&f@Q_FA+$2C4#XzPK-{y z6@k^`tsD!Dw<18?jlUUz0P2?`;NAhx($50?_vr}NQh07iJV5$)J1=7DhMwfn6+uJ> zu2zGMX;eLxt3TvX$iY9V)^HC*7sraa-+P;_d3rdu@(FTQ+b>&k zZ0Tx(5_F#&%JL78HOqfZhr&f$P${6S;E?IE{hAJC9rsEoq->F{zW?z;<-evwd59Fy zuj+KEDr7YFU(=!BY76a9-XkIG>`-=keMO}K%JSdDK;hSPTyOw zG#!enZ)2d4UuJ?LY9oQ7wlmO>zf=|Vun!8PzKMM4I%K`zXKXDJ|3n30d;oSFq@DK2U-3z;zs%u;yN zVB#)?bnedrvlJzDn7KTe1!gH&QkXssuZw3XW>T1OjG~m71Yt8<HV7qF()gIA+P+u)0oa0Oa!xe{LX~~$0?r5>;$8sm6>%Gw?85|l zCeWm~7*aA=Dhg%q$9;QZ*;ky{H)6;i0RgGrYO!eb;K74x<>UG4_p7DLqoZWv^N`pQ zL;gFKr&+5@7`kq)0R&^A+eN;_;ciPN+f)=g@qmN)8_-{(5wKYPzGD$VNg4@qJV*ydvLyYadtKs;@I^@*kR&ku4DqR9VVcBBetns z9K7tEc0*x5(#KNXPBwm=EytbFG3^OyhYWS$PjZx^n^pCD0lL3HPQOu0cO}53gNxz= zbverjgcD6(g*QaWTM0?@`H<60j&SxbkoI{}z2X*tP*G2b_n~R^54x}v82y`?7UbHI z0^VNoD3KX831A&a5Q$>Yc5~UziR8AKsYt<=6^Z5i(lXoL{ri+$zf^+}N#j2#fLU?> zK19kdvtF?PUdoKPfBz4f-^z5bxn`ZyffZ0DAog%WCX*=)^g{!0+Y6o=w<^Qnv@BBCa?A#px z%}?}eKIxnvKklCJLY|*@UUzs|D=YEG{~{C`_suq1+V1lHQW(tEs*gYKb>Hx&&T4OW zON#T(`(ST6Ow3-Z$jyq7>R^fb-0uR#QAjWtuIIE@IKwS4V57nT^($V{$Rq|L2=x|D zH6+n;gtW0p+({1h%N;`tyoFg!B?K~ffm9;=6a9v7{|3F6~_S$4zRGjVfOqEM_evC13GVD ztpo!xyiPAW6=Tx~Uh!u07pe z-`wAPx{d2$ABoB9C!5>rI1}H)5FqEu<(XX80z}Q@sATlpK^=(@S$@_%pj8#U>%Y8! zFQR(M+p7AU6=1H@-iY_TBC%-yP>?$5o%ZM_; z^6HGDbO$rp$p~_KoBpo$DlSaD+QL05O)vB3;IQD7Th`i~Jd6oIW&Y#ZhfP+uHis=d0>dTbCo-?I*aiK^_5fX^DR@Nmf101CYioo3sSSbCUcR^F+Mq zTJB{$yX>7_oO;#4kpVm6t&A98aOq24X>9i0lgbp7Kv&$y4n0Am}5(gV)tQ zS>1w;~L)qw_o^g11wOvoVa6!NM4|U^3G-yg-Ks`BBUsbD2lTDDuk2dWwS; z;1rVWOb-Q?VVJJ&TLn#P=zRz%NaGP0kw6LnMFJPI34-K}Ha@oSZ$Z&biU^8Y1cU?e ziXz|^cG*TNA<9pyw`^d6Oj3O5=>z&tuXB&HTuM=<3M z=z~kY5&lTt>tCF{z_bjrESpXRtAP!021tJkNd)P@i7=1z5pTIJm_8+LHMy z?jEjXp?yQtK^i4+k^Bj=H*?y{y~da|mSjp0HMY=74IGB<2K_H6=2MI`9!59 zu8kHdt&41I!FsCbYkx3h1qv3h4(?OObxX=IMh>F@J6-Fe!GV+u31F209x!zVRuYPx zgK*UwAXN;zUwn*tK!aK*r(X;XJGc37TIm|FpWB;{Daq zPv@(}?8(Ycy`w}Bx|&>92b|RKu8WP_t}r4}yapYm^ipCiizG{kjo>AE?4KeCSh#Zg zjGRVM!9L3Mh?*>oUpeJXa%X9c+PGbwEwFlkHHctix2b$ut_GPcCf$?RcTk2Yupyg5 ztuf;1Pf#=^+|o}$(H@qF^kI;$*s*fAtmu&y(Ouaj%FW_bf6i4gNsFZzqL}SQKbrCb2;*X#VSRlESb1BQFGWp9zf{KV@e>ujQlJgB@EHL zdYW{zKTEcVmRbg-q7*S6(Jodr_@POA=tdX4&=sqfU-hcoMubNd1Y?3zQdI6cbiOqB z=ci|E*xoDEWQ~l}LAQ4T5-jRdZ_zQ{z=Ba! zID(`cwz_2vp`_fJ+r@Cdb)q#7@Fn0butgxWfV@B0_un?ORACBZJ*K|Z3~)f#F`CwA za$N;?Ow^iSRVVSecwnXBy1=`5yS(gp@J5uX3NZr}ZGxj}8NN{olli1sI#3}K5C$5n zr{8yhZAFhaSXd^n*DB>E%*??8#va#Ru4CW%-pM)DhuF?mOEjgO|%o zEmkc?Q#44?%Wd$bI6B^1hFj{c1NT}SQK|Bv`lOxh1K4pW0n8YsSHpxd}m**ojlm&hC6u)IK!bppS3e)8vk>w9x^e{pW^U;m?5 zn}2$H@4r33SN^**(Mq;0W2~FeU?*cW{`lXU0{}Z8I%!Q7w-*A=c!g^Z*OlD9UgTMG z*crjVJ_qM5vie~$l{q~<1`Qgy1)#+UG(Mu0Cbh~Lz?CCl$-L2V+WJ^xEsa5w0o0 z5m%1{OM_-KW%AqB05^;F z{zPy$;(8l(A5;^vfT0LRxQXA@mPzkX@F;PsmOHj=$7hP6?7*;IhaIE=((bjbu$F29 z>e=*~Z6Q>3dMR{i#$xs}|FWTz?oiDUrzp&WCE)8FF~NS~2uKjm{m|^U0icrAVDZVJcS5Hn_+S)>OYvC4trKyJr@mioDR&D`K9g2~7T@CnYm(LTIt8K$u!KGc% z|DAML5XzkIe8L|irs`@5(-vHrwro_^Ayz2*+mNOD6?lYi8qr%R@ngyQ!0;)59M2Vu z&=fS+aTViX8ZX3^n@;6*5Hr-z0Vg9e*1g(&w0twgH_2RztMl$ z>v!)j>NC82F*v+Jq0GI7jgrIS?9dH*6F|Q&~`Pc>;KyF3nFaO!{a}Zac3^#(R&*CWKm>xEbXV5L6*blrb_*woXDLkUkA^Ib zD~(P;H#=%S+w>iYvzg2ORk(v}v9K@=b3Gx7NQ~*&PDqkvc#=4U;HM=^(C{kJ8eMV! zBrzNXv}`4+)F2uo3-+-Jz8rSWj&Ta{1fUse;{)ZZq%_-Xc|EJkfgFIQ%ocB#H(7;az}4s)i=FEY>Zi5 zKh4q{E>*$VaH(V;XQ^eqMoaQZJD>WM!??(vgB@+D6okKuRMZ2^@a~g(SNcbg){lzH z0yYqQFKy63%69lK4(U1|+mHyqyui_@mtt*h9z*3P#@7J%l*PIdjKa+>G;JI<^$}(< z8~2;R)?pXr5_=HgUrf!M_2JGJu|ji?UT2Ni1QdpWK<7HE=T)?TjEEF1%PC{!_hyi# z9)`hg6)T9z4Z0p?WIMqKTLSW11NY%Dz+k{TQ5dcu{ZmF2)Uh$q>SDaNMXcQ$t>RMi ztB9mjLx9gOe;I&;ni}Zfu#?BI2yhNCghA_TiBpb1tv}6lP+>9 z95zp2pNuoiOYgbNbsSsoVbkQ#gnVJL%T`Oph<_X)kdh2bu2g*TDk9hQB?SDJxqydr ztHa8q5dP*hCVMLx5X1Cl;E_;DhW(B-AL<1`w2#B0t0%pe{Z`O< z+glrt_M=3}iV{}KC#slZr3pfjSHZ)o(t5PzF^uAuWoV%ef?ey(GhMo`Agp||V0VB; zM7XSlkVgwEvIfeaBG@b&wjb3H>W-Oy!f zNMhTH7s*SU>MItX1`g0V@>}e^n#-sFA#<12@FT>-%o9n+xDW;u>ceyN+qj@LpZ8kZ z1CC@XA@Hch;tK{RZ%_wlglKC9n`Nz&Ve~c3u80}`p#vxh#M*Z(KsN(n@hVAg;4+0l z&3GZO#T_{RG4lW?tFDdPlcE2D9o-`CB=R`85Ar2&S+1Hye}biG!TUB zBcY4@-AEybOrPj?F``AEWmHBun*#?}=Ol>1I>ixB9UBqehcFJqKDm*s*D6K(lv_F} zUO;J&~o9SYkA`(ql4EMKyBZ7JtxQn;KeiUuHXPUjoqG%AhV86kX) zqw(GvwTv+pDg7Xdo6w}((W(8TFndhY9w;D)(6uI^9iYjV z>vU187SqN}AaRYX>mCc$_)Su=1rnSC(>ZXSEtQC2BcIaqf$AT|B%E!%$&2JTFw&@j z$;GeMkXLm^Iqn|3sxgV$55a9Vg1ms7fl#t^H#3Qkb>qMn<0J;n0(vLF$2K^NZ`HUO zr(!~#apMsvZ_NhOJT3*B{&7AMVGog6&>dT?amD7HGQ)XJ-o!7W=iHJ9?aw!M_czy8 zx0(mwN#_-pu?xEzJ3r${+ak}2AOMiTOU&Q_4&jqNSP3^x+C<3ze5!_C4W^Ls=<69T zdqP>s2_^9~R@LgrBYCMu3H7_^|6b6D8UR3Yz%`F^HGBeNhn!T-yP;K!IcIATsJF!f zVXf3d$nzAZ9jGrBn;~d~VNF&sEC;t-`QqHM9@f_?S;7#kFK~;1B0KLubnN2 zRsC!k>$(cFvz7RCz8vT6HT3FCMQuL)?$>TzePm99`JtrNPWW(S9ib1F%1v_D9Qk#-4FTuiQ6 zZ+L_(jIYhdNCwAW;02Nhlox{`+={V)Ba-S;x?R`--LWyk@4Md7Kp5j&4vz!yA<9{T zk`lVgX1!0kw!e3$6wLTu=@ zn@~MRz&pm%&au2d{XoO%1Md9&p=tZpnN#_OtHzleJ;Fq=;C3A_NzKt?0uA|zcwtJ0 zvDT;7b$e<`j?P310q0#6aLI(c_J~4;TwhoK11F|p5U>vu3~(EVTH31(wE!H$$MNWl zkOly}_w||UB^=gO(S6|EQo;-l@nwd$@0t@ z7p9S^CDHoKlmt5Qpi$@tXc@*${^4re5xRZM_({Pk9ay7~NkQiQ?cxOOHJqd(RCI?M zKEjU#Ta70Yz-G(@4jZIfQ}+1QuxZ3*f}xZW>qvCr%b{O+SPK<6=nd)BLu`OU&&;imRjgJ@uOSF1^4s4(7PsW%dylNJ(5B9K&k%bceZ5t&lfgSzSkhoL0gL89Vn1S$`F`zv<-e;&cCkA2Xz<@n^^1~iYW=)KVVo0 zhn^xK(f$C|v9wRfQGhG8@<+=dNrBX(EvH^@rC#rz)KdzQ&LO8sMlC~$ySm`u`&jb^ zXa#dsy}dkX@uc#bBjMur1$!` z7Qn&V0CR(t(slX}vkw@^9D8;vf0Pb&HrU$LF$1n7`^YDDLP~o0nE2)T%#b)~-i0qr zM)MEXx(3uzsL7bt=7R5tjP!|xbce!+U^0WKtqjpNe@ z;#>r*QV9uSd~Sb5@o7)*;p2B$YMW42dH1eT`zw*yKc#9NB{m*HTFb*R(%P%JEUwq} zH{XDimd2BD(k_HyqYK7HQ2UXr$yM`!{uzE(m)VpLwmT6RB5Aj8p!m04^xOuV>tQJxwRxS1+Qktp@&Ab{j>l0uF)%kzZ9H<-@Hz95!X2v>85- z%4{#MQ4rf-CUd9}U%^rf+lH|Bni(Ubx8zYzJkW?=)(pXL7C2c2x14gR%HImdSLm~f z2e|odYcP1V+CO~Mg(qen;dka++rXan3)tN6?Z~F62*WcJuz}nM7SPbyrJ%?|IH!9S zz6-ALq7bgK%H91HlCkwLXwW?Yqhe{n`tk#VT!*VJq&cI%waeiMFA{oj)GZM_g5Gi*uAm8E*eoaa)7 z+)q4#_wDLqxVP?s(Gwa~g$`oF6@d%dHAbZAg_*-R)z!P)%y_jGIcFnrkIDq4d{t*D zLFT2rR};7w$KYOThc#YDit=G^aFN6|XbUeSq$h6!Nx9*5`%;^bOkWxqq0gDV@yiP7 zH%Cpio=>RtyrCA9h2i;b=dcIV*l+ocG?wy!+XOz;bYp@<-X?A}c$rk@*O}{@z*yz+ zN@>LLZW2{Ohff3J=`>663*)k_@ck*UA}@;wJK zW|39dMKc>MBTS==Po@wk+J$D8L$zoNkGe>Di~9_bBU4M;^6X+N>P8aHu%<`rl+zb{ z`Ig4X*%N|^1UhUwV&hFB&Yti(=6E3W<)=M&zYPc$_Z1EfC z15S)if7JTH5=?|12d-uADDOf9t|X@~49=+6|6D@f4HCY$6n3r2gTW{(itn|eTyQRz zp(Z6UBQ9YO4JfKG#C0-gbY2?{33h~Y)d&Z1=;Poxf(4vQW<8mVPvn>h=rn@K(8<7L z*f_`QUO*y*i)i{{(F!_})=(K_-9YTP1{q^SaVc6z6`rsTC*b5$J7i0Y)Pw3WHJamY z6e>6%7?K;}LqKB+?A^`J9w$eFf?}uGUv9B?0E(foMK}P~5?5a0$`3zzn2RdFAeM;G zyOqKU)yH+it69@L>Xe*{3it(S1>~SQ_{JkVHlGNrHdNB%lu)dt5y!l)#s?^|o(qY= zD_gGfs$@KGp0r3+#vh!fhv9STs=xFMdL(Hml%(Tbf(DOb%4703u`yKm*^fQ7?T zKZo7THVQ!Dqu3N)-MN#YQ>9VPQG|yc)*1(;TR)FPVV5|Lp`6xi$2MC!j0j#9YTKyT zXU?YFlqUdF+GJU2`L;4h=&K1O5fGeN-b9HFkbd5pztiy8Rp`7&fyWXbh@OB~1i}da zIHRr)plO~gOWM?U;ELi%Q<@se5d0!oDCd)b)%96|!MDIjnDihc{#`s70!!p+m`}D1 zS=W?hz0r1On~7;JAON5&gvXnG96s!wcawKgipT%R$#y+ayvIZs!f=b$M@{u>u}BBV z$#{q(jksiiVg1p-sx~Xh1+SJnF_|Ky7ol&s6NsVC!nL@hS`&e^87&9B7j`Cz?zLnM z_EwqM4B=3wIz!~st;>V#E@ecr54?B{m`PR zIdD%5j3E~emj-Q62YUccy{ z;_)B<@h`uAd#imuAOyLbA?)spFk3Zlu{}A}Vzw>`iw^qysCzd5RwyK5i*pP{%(GzT zf(Ef%r6ojSL48ANSRQ4mccnbnB5-y65p!Da$2_}xpY`?FZqmG#Rgs9oxDf=a1nl=u zkB~gQq!~`U$c-#_>j(xoa+?f7E9w^&DK+F6Ym&Cmhyw~Zh1xRl#v%|UoVTfe0Rhy} zMy7xep2=&Q#PNs8*W}}DV>RJwzgv%BS%!T|EY8RQF3HxxL$ubC+%m6`JFYuS4nk$i zo$T3{TpUH+>d&&}~)YjOg;hnS`mfgyJu>+r|_s<^$m3$6q2#BulLE;uo^ z{Oa$5i@EbcZo6+RKOSa0B5c~Yk^7L@)o4Ve!wQ0JQVzQ@wPs1tCQ3=j;kU!h+iZXIKUU`6O9rsTmQ|FKNq$%Qvml74!Mc&RUaTEZAF-JOP$=3gbSJu z>G3?G9~$bT@I`fgb=IA93!pA2)&BFH4JQsK?%4H(HzVT@F+17rB5qCLa@gJ#cT&?dK zYXbWL?u~@SJwIdpcw==(+KfXm3PdrjG!4Q%-LW>514P4RUQ8p5sEA7bIHV*rJkA%V z<|IjVY(AC_x&PMs1-)v2b?qk`xL1=XZZH{Qh}8D+hgauq(_^6%TMfFmla3ElNO2SN z@S=ADPSSj55qCdH+3erpC3BeMBFn=qGDduRXB4rmiO=B18vZh`BGjY%AR@&_S|}xD zph`KvO%%zMc))gH?3qyPt2E8df(}VWLcLYndd01w7Ipn;9ECr9isQ6H^NJwXu{k@} zPI?EgDE(KFssei4LHd1!jg@kiUcC4y4*(Z_)J?Eo#u)7HW=LFxuj+GdnALo*Ln1*x z_JBd@@;$H!=ckt2W+IJKqZ)mr%IlUkN7$z{tffKSR-o)56j0Mt^EYN*gT2PpRqexZ z=j3P|E`26*0uGP;tA!)u7``~-aq+E8_U)mMM6luU&PPjtq-7i8qqQv__Bo5u;5`TB z=2tl{k-Uffb~%>e4#S4ugpH<72wNCOjBAP%mLfT2Tf zqeN`YRTy`~LTfmeZ;pU+trG2gStZnxecXtnj&x1=SLt=^cHPva#FXe*jv9|)`ryE$ z5Sj-ZeJl)!H!JB|W1n{-jW#`jCWhOcYDMHnAWnjv*M3jpD16(8+U5&?QsL`%2wl`= z!uu+q^DCiJpo&d!43mQ@6N+-}pM2~_;WmqOH9U%Z_K)MThKk`)O4_G3K4c)bB-?svEoB&zl#{Q-59VYN)W9tD_p*aXw+r!L+^?F zE5q|dg;%rog1VR=Wvhrl2mgQhTRX(1Gbdm7{)K^%kSckZ*}iv8dfimMnOFi0)UY#%1TsC}!eHJC^?b7S~i~%=)UT zizfrH(!L}8TehC+pq_L_=g-lzMtxmZw|o%?MNpjQx8ZAH-Mi^(8pJPXYq|~>NP@ru z>I}z$;nasF8nScY;H1FQtV1}j;Cf6{T>O)aWz7{;UuGMcNT(-S#HxP%c9ihO0%7jx zoSHh<8tEJu(3dJU5w{%c7DWcde#W&(Pz+Jkmrv|er^aUSs$PopywH^wvdv&)q01+@ za+_k=Az>M4fMkUnQd6Nob{PO&m0-qIClNZDBd27AzRkAJB|Vd6aKW;uFPkdFWyAxx zw5+Ztc?}szfiIu*rEZ(TW+W^nWL$V#m?K^ne;5BGwSOi>{WA&YpRf2?;A0vTqBUJK zw&CfDn+;?79U7-}xeBvc3gNgX)4|raBgjLly%q?PooA1QHN8v_mUS^QyK-KeXym0# z`IbIc!akXPtuz`DpGmX3oZCt@Q&OQoYkPr95-oK`9lGp+f`)*QakGY?4W|k?-*SYf zW6!~cyx^Zd+p}6op_5tou}8g4r;;nS2`@^)@7&DPIVT+HlXRw8i0mDYdY4c`?7DXd zG2WFoLZVpA2DpNUgWh5FaocuO%ECO-YilMapfECmtiW|)cI&xcOl`gl>#LOHvrf!e zAk&Ly4gySDqzGE%`vYO0O5_u!xW zoOU3X3ct1~J&)6rfhg8e=konqf<-Ad(NM=t%tJtK9BLsuQ)11!c-(e@UBa9Q=v<>cxh&7}H! zw8lAvfRh1jY?0$yt6-f#1*d+PAor;pJx?YG^jNOAaW@s3H7Kc0tGYnEEkWq4X^F*2^Wb3WJu>AhP@pXxZzWD7_Qd@?as<20Q5! zrBI{s{Pbz|J$SP*fg^USyURx;*Ve)`Ujc22@VGyBZQD+j6mC&_L>3|~}%*J2} z#bqvCi_$57P9wDwHl<-BsZ;zxa^=wJr2ee%pN4iYdnpym_pLNX`%jCCvwam%k;Eu zr{h*m9&)Kb#F1THIkC$HJSGG|R*-}YiR91%$vbS7Q3uqP6%|`xNF1F#PzP(5x#Xph zrXwxw6>UNH3E+H9CX>GQP(w3~H$C zM+hVjapy39Bb+=)Xs$Hc!STLeg_1jTEnFjmQ}H4($3_t^e4LQyX1v1CU`cF$a>N6= zfwrN8Sr{qTWI?-nke@mx@|=Fcfo`}16(nFk9=oH5gfTYCu81)>?VPuufG8=%KyAit zlvLw(vf8kb3dlOcio+#>+e2IUhplUd}kcWB$pkI9$O}K3q8L# zrfaUPm=cp}6mdD&O^y;YL{6Eg%_Xk#vvN=(&4snSq^(eVT?ea$(jXa5EON%Q6fG`9 z415x}C4>4-t6hrUdoOa%hSS%r-=qvKVO>fFxU}d`G;FysKU(#}!W7pN;mGVXaFBm- zk%;$xL03!oClTPKU4fn}%rlC?SQ~N)I&cDjh1A%d780Q|MipC&mt^253B*A>)x);# z;`A}@9L6Oa=1;!WKtsupHW+K!cx3DG}kbcZxs|#3| z*h=b?yp#$8^AqV8+|hFSB3}8Lhyj>*^`^l?p=9ix$aw`^IDmB2AQv9Hcd{|?j2xio zr5+qaUb(bTIIs|ZVTnRBBPqN~@;vj+gu=NW*ZLFQ##P^>EO9yPy#{ZY7hO80rv&vj zy$4w$%(N_c%ykHZ7TMNA&eE)xHb~4miK@vOxda7bk!aXT#}zs(;yi_xx~7vC@zN|4 zq^W9wI}P>`;MjIQ75v?*bNGu|5Ltx0=xWFI&``1t8a>^XoL~uq3l)Pw_o#Qkuyjck zf-NT!nY)t8r5=M9)4GoN6k1IBwAA1UuKw0yZOoMTPN+e&Et_VMrOgZ!EDj8%Y%za z7*9tk-Gi<=@;F}!7DUFkDxBnG2*x;c4^Z!QYoP!s1B3|iI$jp7PF7|q&Y&7f3}yGR2V(hQr+@KZ`Ugk<>+j6X z@!y>(hn+57z-1%tg!4|U#vlKylj7#Q)6ID&s04dm&A0PiI`3p>dcNt?PGZi$q?>ev z$c{Kk(QozC(dRS*?1|N23W~nn_zoUDqPwp+O(gQ^ItPlPK>K#j6iK_cL?%OEexPGT zy7D+YSb!za_k|LL$sx)EK2T0@;hEiJOvUoa=JwAXK706ZYvX5on}3_fpHyEAFg5h6 zx)#jUFH4w2lq=c8NPb_lYU^fxK1cha>*ufTh)!x)Nc-^q2XMlUV&bWr8j<#)o=w=i z;dGO3o=Po9w`#f_Rpn2E;KrKRWw)ujHZj+#f&JUHg}ZhxXxOIE#gyttZiSE0p;Fdo zM9|Qw)!u}@4}+c1jUbV3>3-L&A7Ty(rs=@2!Wl8F!UsgGrA(rBjqvoi-G%_NT_?p? z*gt>yJXyeuwNVt8879x?r^il;{0&Lf-~|H^n<&ty;p-J}p;_Ak9AL|cf=>#$hAY%U z?AEnx{svaE_oVG><8?0pE#`v5ol;&~f7B?xhMQ4Nx*;B0#s`Mnik?E^J^^k@M=AnOIoD2*k)WFX^!wK!NSk#`4=!UQZ}6k#u>s@q4fCsDl=UbxN(N$#~Z#;XGqWm#vMST2ef&8 zs{1?^s(WMH8`HI3UKxaA6e3*oiiqYp_6=*m-yP;-2%)84wmqCaQN7s=vzm}UxYTT* z)^Y~gNy9bNjga`xET%w#2OTl-dl^uAz7S9(SV1-u=9s}wMdz>5eu{Kax&8F7teyND z-QSv<iQIbF>LHI_lF(bMJhb#! z8caR!pG^XFpn5`pq%QWP2dYH*OVd*IcueuoFWk0c|5*N1N(>hE3W&ww3(q)~-ZjwBDM^XjKh8)cUekMcW=% z9?5FmISp-;zB9eNT*~8DF2nx4@Be29&pw))gRnY+T*kP49;&^qkCh~W?9W|5e?dGiF; z#Lmg;@a4rRLfJxVty|CfulfVr%qR$J!pB>%c+QM}_hi&f2{MkqV3c-NQw#N&g29=> z4wPkl380BPd~OEkuQPaIm{XhS565*@S4%OhW{1#;S?o?5HwI|Q)}dy7xKNmFT#zo+RZ$6vj7AEBPbD~`~nF#4|yRO zowhiT^ctxpk(-r(f6O;hHgdj|`_wi>oqmKK?=q;MY3V%%h>aNZy^hSaQRNfu z;GjDig=tn6(x^`)N(X?VP-bE?X_5*S3+E&D^E$!DHM&r3Hn!ul)q!jOReTr=WYRTV z{By|~rc=#{#9UMc*8o?&OpJQtV1_lyFi1}AP4M3a_C`0(ZWIj0ad5Kg@*bb5GnU2Bd&@a#~LM3J?^$s6P(u(__F zbgfnfmCtB5#z*K1V>9{JCQ9LY<7-Qo()eIZ?qn4Yp2HR%mer6IS!T2F?1!doa2MIA z`;@S$uux6%AElYb6?;AjeBiL0S>9!OCCM-B-ATuFh^Lpxf9ksV#qsWK%n4Msm&d z&`;?TvU1WGh2Xp6+D?{*RFCP^Q`X5;kTUkEF#)qGKB=uGh`3~2ztuyg*W<>x5U2Pm z7sRY-o}YCZYkqgV^S9gvb}JPWp)L2AGMsX%R|M zXrd#D*2E*fe#C4VkEWj0C_=p{-$#CPWRJo>@}MTu74&JjfB}RTFqTdY6aJ~-!s^U( z9%6on(aq<}8Yc$8JG-Jyy+B7MjO@MbVw>pRNbD2FieAguN;t}W4Y3~B1dfJ;q^PYr znD>;H`Zb<(9bO#Zz8W_GMeDbAESxmwhfj4^N>rmgpWjTq3nh|vU@+#E?MwcDtQ+F|kZYfPkQhq?^DmOk;VGV&@UyBATq2 z?P&rkeqy$eBIBo`iIHhsF8Ni)w0Zscui|tBOT607_oB#c&FA72IcORJmRVKrfOHP! z4CGn!l4@olPw1G?o|TLMy+HRclamit=&omKE6Hxd4Jz)7=_z7mHItDo>ni`FYDR?` zgro;?90bLNYYJaJ{f9qT`Kxnt{MVimwUImKc=++p&HW{*$)F8F;E&G5o5Q;|p=aOi z(6jH<;obA&C*98IVo0GrQ=o=8R#14Rn2ttw?v%>DePdiiUf(S!*8rdbYg)w%3;+A9 z+wTrLCp);DNytHxxK!ab7ILsVJR6+g64^tj#uQ8Qa>c#*6BKnW%%ZJu&97Ypm`53e zfQ%4#pihG>7O)lOL`D>7>#m1ebgI{&W)_d+t6HS zuZzX`Fe|0;9;=9QhT?syEFgIqpG>=ksQ{`qilViEJWlDqSQH|^fL_j{gl&~pZv z1+An8mindky?dH!MEu*#Jj8DGk#&rhe1HG@HCU$Eot8ucFs1-4+dwyMNlZP5A<9FT zD&Z+ph>QG0=FAn;?6WA1L1pwwBqjVyUSxDS7@QyX;R>vhkB42bI6NbWr8yqFu{Qz* zc^X0KkQPNrc$@l({tOxFQhl{__rX&86KKm9XWgOIhk?EQ$pYD?k1;z29ed2i`tta^ z>JMaRW~ezV%pY8)&f(3*6e;YFs;j|;4muh<9Gt2S47NClJ*nZ=3h0TwD+#fQYMW=5ZsGuTF30*1K4_q06 z2rnW|znK-da^HSYVo~0v0R@TAb1UyplcWWy+cl0eIos+lWexELyDf6(Hw4%#whcq#KOSyil;o#&-WUqiU^I(L6u zeQab7TJ;Vi7OJyl0EDZzxF^b9u1tD)ukmHmE<_`V8m>?z1{7+tQv*2OinM}+(psVV zLwoSUD(*VG%63uhpYW0pB#j1AkT0EQ;#7Qh5>{_$%JZ7rbIYfp;Pe7 zG`Ux(82o}>?0I7`^lmvRn&W~LkpZ553|$0X#fllx;vE}92q4}Rr5v@O*UaOta4v_J z%Zpdb6<3hUmBp(S`2^GSsJb}gQgV53@#>!P7;tZkcm?;JEt6>xF%O%id_*ujKCZ;4 z@=>4Oi%;bvo;rTuHqtI#VV!H@n%g>qcNg&q;jHu+X3khE@>F1#J798h3{q|c!6YNs zKEYDLUL{Ah*`4HTF*JrZNm8%7l-G?zYPHlpEXl`30HJ&JV_9xo6lET&k zRYMaAh=GNCi>V`@S3o?`zf8B%=x1nEfd=~GY`IKNOT%RlJYJ{}Oxm1K$L5d~Txo)~ z;^XdxnxL&XH02E~dT7_Ro&hfM4`3X?vbEnj(Q{o2-p z8njuEa5itzf1Fd+hHh7`PsE(?F2=b_D$=no)c0g#FbviQLgnn z=?TmF{Nj_~#{Li$+H(!R`>rT3sFleM1d; zN+m6dbdR-ASK?;tDk9174LWGD@u3XglI)iWT(v(cWPQm=7dWq-sUQ@!GCdisKNt+L z#;9tc55rxSQm(;P8676$IgB6UU%l@1S;zT zZ0fpgCLQ^Fb?cd?^J7u|xY9Rxg_0phqP|N^t3StE+zb74C>t475X?7t#pkufhae0W z3KP^1w`e4Uq=xu&CT-9TeYNz{yf-?;0-(HZLvc)CK}%@?5neB8(3We^u&_nK5Nt-f z#GtFtg({)O1Eei2YJ~MNtExx|OUi1fc97<1CYg(7`ga+X#oeTCfiP(my=2OTei%mb zrzWg-lOz%c!Bz9^XOe8NNdKdM^MCtC|L$L(o8!Ov$rkB#-c>~G!wEuG;*bAzv(eh% z>}n`G-PYQCwX(GI1F+i4((=7(Z>{?H^IrGO-r(rG+S}cNl*JBHep|-D!|DQxg5EQ^ zicIZT;q1*q^?7$VVnqH*dx;)}ZgtCE-4gb_E!*VN&XsJik>U!n9`=%>9uf+4C7d53 zA54mH;hsb&i$j%g42;;Ws^{2i6Ug8N9lmsHp*y}zSV`!z3F^WY$LHr~KfF0X`0H?j z5G(+H{$aP@IqfdDWk!zh;Pk9>-d>ZW37FTDY`s=i*86J|4H+XR!M1~iYp}Pz91O2i zh)rokl^4v8Hk`w>6S_#7y&fj_dsS-F!#1ut*qYZs-a#KnUB;EMVL+bplQ!3^$K4Yc z(@3RrcuVH--f-4xFcLxwMBFl2ivnAWW*#b(1ez$vw72Mp)zJtn)(A09a zH#XLhesOnoee>BK7To1LtD~x3t|Sjja74}tAM;pCw;OGxG@c~=M^u5FwwP`*H9V$U zP6fJiRH_E6kvdQl+HcCDVv~e2uux@PazJ5wIL&q!h!Jl%1T`AW$K-@bDHJ(`ky6bB zs_l%prLq0cK>P0d8I7C6ZH7>5v3OnD*2H+_H5N72WfV33=2c-|1umiL)itWVk@WPe zuAgRU?zk&!FDu!{S!xx#z+~Wav!`-F*a?+;AkGLF6Zr>uV)#c8*N=)$W&jO*A?S89XcDQBWoGnw-|9I6 zrt#{wArJ>w$3E&=NNsjrFQY7HjD|Y~O+7$ZupZ%NddxY5K$5W~0g*A4GgO3_>FP52 z05Ze{N=7SF)Hxh42IuE6Wnx4?eH+KS$*@}uBKQ#JmS5^Uq6u;;Jv<(>K*`z`OCw}r zzAm@7pZ;v^>DJR-q9s#JrpoEAW_z+-8(dQH5=3Pc;&*foi(uH+SugIAyE6W@#msl# zm`w`&HvN5{(8}bZmYZ?d0g!t#0)P#nb8$Xc^D8>muyjK$|K%@n!d5E(A>mf(?&zZpaDM7E=^DyIW zi?8J+3u*>m%i}&_=Xz55qgbRja%A_gd!Og1=5Gx@d7F$aXUzdcPl=#vsm@QibV}?Q z$+1KMQ%ambUdiIfM%LpAUL|gjIoxzj?pA_03+s@{yunA_x9As&*+gd{6A%1Y2R?=> zEUbg9z(IF>odn!kaan}H5#-R{?Amd~n7_%Xp9D0GqcHBbc_W)W2Q-x=Va=1vAd^)z zEO`1NOm^cYG&C6Q_YPih1&PdpT2I28aI=av>Qy^GA6GTJDXWscX_G4SRPAqXKik@> ziGC)^Y|YQCJpWA&jCNTg%3ex3%31T1_djZ4tdmjYfZ zjYRy)$9y>u&w;FFDxvMI^-WgE^8wW?#71!qP-t+M3hpk|Zz~0)QQlp4bTo#U)-i+B z8L9(?qZ6+roUC^3)tKuO3KsZ)!>J91F4nn32Dy=WoybxrW0u&Ytu`5-IKWWU$Dz{*CPOC!(}0bd zA;jg$i0alQT(MX9cZpb?EBs5=VJeqYjSGh1V<|kGl?OjffwQ~$+2ah5ZGnh@1$3XIc~F+IdAAtP%~$*(+6lQ;oobOb^A*0ljU|z1 zOJVri5>(P?LOb@m#hRd;QLvz#)ssK?#TGxLMx(f>P!=zgbSY>vIyEWU)iI%~W0TnS zsqvwf0W+5noPI128x9dQjq&L?W(c=HL@P4g;JL;K2_?Hlh>$#-An30n!%c&37UDv> zR0u<*j^Y_wwFxclT}`}7M=}W<_{}Ps!Xx|{HJcw~24Nkwy(kwoDyEhDk8T&@63UQh zK0f=1wnAEqa&r=-AWp|af+^2JbXqplB^E*U#pcEKhOdyjd8N=`L#4G~8+0DMW4-y( zrh05Z%d#0QOPQ!We{N+p(&wiZ8{+^VCuG3F7^&QsXAhB+jJ=Jm8|gw9mfC+n+o+6W zT(g||1*jakNucUPfuxkkCSXHrz4zsj&< z{R(yuP`(T_ZEV5`9$4*bBeI2FnNtcuTC$(Ujs!w{@T&U-y;i~an5+ru>rWz46Dce! zm<Bv}IxmN?4{;^M&h*U?8HxKZVF^ME)tina zBE5|@VuT}UFD`gUF9uL~v=XAA(gFyf!t#7;b+6joyH!10-P_zFqu#E**xY~o^x1y( z1uRsn+xwdvd)3q3YVGOv`sV)T(`|fvRIP45uYR(*y}nR&k&gl{q3$I@^>CmHh%yu7 zuR{P(JdL_K9Cof43<$wyQ91Et{v1I+zuKrFYMe7f4%rdLuDfZ~o*Dbs*bfiWc=rgR zru&J;HR@+ilZzI{6%~uls4ZbZVuF2!03j6Se=ctJp_oDu69ILdxS&*~O^pr8<7dh+ zo@Sy4{}m9Hy+XB$fbH%Xl=fjyW;o`wpSYuX%?M`?HB_IrU4m2uAyG>@-2)_{M7j+L zhbkpdC@0D{5G-U=arV)Tfm$mqTqq@SYYdqzD5>Tq4^dM=m(%DW#$U&TNWQ4MLjW3; z0Ti;=c4}mosewZo<(e(fwf!0;wC!n%2%wwbAxZFJ=eUF6?Iw6gBDFqX@Q_$aXn1T4 z9kL~%*B#|9dg#eeDR_`VL;6s_wk7t)z}13?to#*9!<84l!K0_`$7k6oi`dLpUWe)0 zeFBTS&4LTzTGA*(pXH|eii6h!4n9PrQN(Flw2=ro5*j~A;E_)KRO=RRoR+4*{;tFu z5pP*MK=QrEt2-M%`(kr_|1tExd+?<5G~);*Xo9Oc{9kTsoe$S{+GjebKTnyBU8Pc*Rya#&|e+$#?mDDAQ! z=*n5?u+0ySeV?({6bhUo(;^-nv=3@vlk>qjV!|nfe0BzzHbYQkbBNNIut=Dfr7<{B zQh_Btj8POd1g1zrzsAxv z*lpe;D#NLT{)+R-okOz^l?DQ;wH-pmol6RE(FPx~^83NM%dRITtkvN`i}Z$xCmAve zNYVA7X0ie!!=7gk}kO=#vzhhe;FI-vm6eN~nc33V2%_LY1UT6^hpif}=eI zRUJwh?lH*M@UL*N6}eO1#{N#?&|3943rcfiViDD*8_h=DVBvTA=}<@=gdsA<=>MNd%e-I$<;X z%Dof+@51l?!x|K{cA) zd2CQ`hO9Xs!fp$btoHId=b4znFHvT;w4)uddyN$G1z^-}5@<75E*p0R;u-+dkMiCX z+mCuDCr>ZVnGKwB3mDYB87Fvg4Npdpf5D647Z1FpZUEs|(dZ3N15XR{AfhLq;L%ig z2Q6-v!RhX4Q1g9u+F7^Mm8aZfs~Vx@4WvuIX*>?j5@BZWxYVSp#E<q!kXnvy?Hx7N(@X0|*LN zPF{vtmQ7hlO3HbdkdXI%C_c^Wg|inj6wQ>shRQCAoeYtEiqn=0E$1y3)O-S1{0$ib zu}Mt6a^&GrnCi$ehHNf}azwzIADafy?7dsR8egWov5|d3ln7=2ZS$f!ZCZ{N)pwNnef=;%uLC~E; zq??9PCiJiep=W{jwI;==1c-r~g+t`{aYNjgzAVDH933$>Iiz@QS#uK>ODr5)NCK2D zx@bBDRFoIfgN&2ja!|Y$U`Y2_zzp3~(-PkjNuKz^`T|o@0Y);W;2`++MpCn88FDaY zl8TlgEbEKa{?qlRLasLSr)W^w7-Z0 z;1TzO52Q~!X>Jep&!HLAplf#bQn)2uAGdM+ZY}ESPllk5-;+M4%j+ME4XHtj-y4 z&t7xzlwA`%dPgl57{k5~pFZ1O-}~9>))o(uPcQgzW9#V`vlU%^`1JF9YLFf|y?}TW zLxc> zMITg4TsE)QIpLL@K$SzWRv|E3%kwz!pU=y((!0^Mgkl}Yn}%+XEx5&Ckf3o0sE7!c zBrul3sTLPs(`v+o-CjcntCsdP(-EL0V6#MrCyv6wFrtYPbbRaxXL<4tRm7-If7<8f z{^k%S*!SoG&6O0dr8^!~1kxHTos*VxC$>=zCWl;Mm9*x3iS^32c^f2E08}Zptv0xqB z8k^K*OK0@y*0%IF93@s#+7;Rzdrjlc( zvmlWV_&A&-HVqQ|+Jdi9=Ca|jbLaYP$fA|^gDoU&l#J3aKO5-TFiGp8lI_&SYs^R_ ziX*FKUrX5<#bO?8z>1Iz@ihjQd(jk!ln0VVW?pJJ+Hs*Rh?O)A%SQ{r6v-2=p9o0d zy&l=r`DETK=n;u`Ryb^_H@Ow)Igzd^JN>X=7KI=wS-1c zH1hBrmd-|(B<4wTocCS|k)m2^G6N;HsVfBCNl;Gv(dO1xPGMU7vJ-ldGFfm`S}U-W zeXu{FMYRN_=BvUs6iTL{LVNqWPk#~ui)whC;G>na5ak|x}(wGFNmPM|4BXGW&8OshcIRCZ?y$a)22w-gCKQY4D6GP8ZY*xa!2 zCHxVwXw0ZFAG~#VH%Y+X;G>kqt-LfPF=!{whMTCYVdoTkDCXz~r%rXR+(c!4i&0rg z92Q-}a;Y1VnPA2wUUrGW5|Qqci0fx@UyKj%e4?GGU=Tl~=9-DYg&|JT>uIYRR{AN(Eh-Vo<_t2(&VB)Pnmscc#t9vXpH*6t%iYi-RbBZ|^+a+}@uq%*F;tB%W63 zFultz+6!@K*pj44DYy`l*bA+a5-1C;@V<;R2%scH!a38sq~k5dWkkrpMty|K#mXT~ zaE|30kd$+6jD!`$%oX=m3SubEFNS@IW{FsV8}lf{|NM)8@PGW|pP!rKzt-dnQg(Vp z5F+dF$NyqMV%XU1F^DW(@s~xarDyxEb2$n@@CwoQxf_KrX1p3Dpe>s8>=&bidLJMw z0%4^&4{Gswyh=AM(3BK`Kt5DX1j70NfrkV$Iqnc87QctQdefo~zgG_{494ak)!$JM z504u|_3$vcLB%0VD*74E1YnM@W1B?%cP98{rS?iS(Tc>Dx~py-~4kHA@g<2R;a79e;Q&=2u}T1tO^s!261&@0tL z>`_+C$004}&!nIrsuXeb5$!YPN|yZkfvAR5ZwX5;u5Jq6lee++w#y8}z*ZC`zRpO( zft;3JAyBFcVpVT&1FT<>h`JF1%jP)pEcn7;> zsHv74zlsG6$>O>dLGqNC?Y?$3O98=dXUU%W1ufab`W-FV>uE=p6V&Ytd_1ch0L^w- zITUX)F%_q3Ls^dG_yfzl!zC{|=Ag1mmaM|pp(^)~(P&j({1S>088yJzy*e~R>ga_% zWB`M6go4a<4)$d&u{Hk41oFfTp+tf_jBrzvGlY6XIiB^5z2;fO{_D;Ndtcf2ig<7? z4A$PM_rXw>>W_MJ)6=*$%OGPcSMAt$sK*)NM_=C~Z$k#p4sZGqT=aUT%Vc6_$RO8C zzYy9dHNr7-AxP7S~w`5Jz-YUk)5ug3aVix6|W! zGJD-*ff#^8Dg;L_f&51aOhkpkm9^J>3ApDw$k~QJEfX6F9FA0kfxUddPY4s%em$m( zuLg0X%79WMA&jzddNdosw~>2r0Z(W^izfMwlag`=Pbm5A9ZEPoFTOC{h?RocV1*K&m4SWsmaKylrmS3_Z!p4bH6C*U8LcNBAS_5vRD8 zDJYV`iR~3|Jd~hDh^fGXw=k=U37dV_sVLhekkYeYq$w#rXNXaz4zO=p4>8e5Um5G! z#STUGjI6;%-gu1sSV%>F3@O>n7oJu~7C|&v%fJjDS1VgW?`WC{I?YnGlDP9n@jpjY z_lUxo(L~<)nCEz@y^QTj$Pql0)@Ohw%Zap*W=&3@F-`DzXiO^74yd)lCnUrTpVJjV zd!!C>pFpKN_cDp^0QpP4z@Y(W`WbVXEQC4gbFJW5wltP&`7%dg#%7xu$@q$p3&PzE z)B@$=my&d2ktM7C#?mvYSfuPbN}I*SP!Wb8_!3)kA|ziesA!MRh?8tcX3c~Xw5Ej` zhp;b+igL|_IJv)GH?O`-G&Uu@_dF>UY>^cti-nC47RhyWe2L73qSZ8uBe^n2?3w@A z24(DfZl#&PCutgw)avN#T)YsA2^SQhM}y&M2NwxqAlB;__RTkwn@EK&Vt+I~gHar} zbc`s$({YmTW4o5F0U;Grn$#%b5)BYOhQ5Qe&70nWmNk{=yX+S>1ACp}`f^~WbJ9D%%D`~g$Lrogv8aC|)GKP=EnLuo<$-y38oF9Y$$So{ z*N?P5>GY92hXyN18Tz#g7ofT4-g5KmUOPQrD|Q(`Hkc2@g=b&*4jVh}`Gd>*eo~f} ztOTGKR2@k*eAeHu0mtqT8wxX3KF=M6dx#%(5V-vHK+*=$^{C5%$z96C;0HVFb+xhV zsa+e=@a(xfOXRTR*@l^6Jz5gkl>j%r1PO@qokD-^OB|)L42>cJnuW@$t0#6@Lo9pF z4X=ST(Vh5CH;<|}@Q6`Q>YSWJ>Z}d=M?G1YG>MyZi?A?L!HiZ*OnEXn8=u}1qTiIz0zgiBVngy;N(Itj51uaLk*ByNPfo63L*B>Ao!d8Bs(x%$^_>k2w#r$6~sXCnYBp z`lfYUn({Pqrh%#vB{tx%1-6rjyp__1Cl@#)<70718+?PD!c=IY6`Bqe$hXD}lA2%! z4C`Y&LgdVdf&`PS?3^3}iA`gVWrpt(O+POJD56@1HXn6yL?6Khf);rc;|A77Mh2oF z;?m}VaWaAsz}xq#r+;G&0s)?b5sqCVVnK&vc_n?Z@;8?bySxTwq;K`N>3WGqY0r)Q z6cu?^hsfJ+?bH9h}@CvZ+whHLaQ|L6-q*Z!-h$v>N z&f|@;MX!y$X@8}4h@jL%ocYrF!0!vaQjZt{8AX)HjjnK6$EgO3EGZ2|79qg`N9};4 zwoqYcDm+aNg?KZx^~><9jw4ihZvh$>`<8|1dM_iAo8Bg-_FA_lF`t&pB7@Zte#9U z7ook;)4n$`eq#k1J{wWIcd8e?bM7{Fu8`K^`8xUF(1ekZ*CVa7b8UwrQAqFq61pAFu$oRfJ_BJSFZ(=qZq z?vPcmQ49V`-qKdo1Q)ZWv!5HV1+l$fTwsymN$zsty}%4D+rC1%lj+OnQCvd8Qe#81hslfsaDav_wz}71CAJKA}ozTE;G$7WHwfLTS>2BPY6` z0AfUfoO((Ko|k7Gqt{4hGoO@n4Q1Q~>wVJQQ!`1MyOeYv6jknZB2b4_0yrwt9hO77 zE1AVvXASX4MjaTG4;-Q#F%JKl;pZ>>-aq|!|MZ`lo8!ORQ={_@?{Iw~Yw^ebitxLM z&mVhl;f>{IdSc*j!17aQv^|J4Tt)bqWB@zi>Eao!Egot8cyIzuc{N!`ZDKT9SnORT z+aVXqy1_#xZ{I@7@>RUu=pV{fB6~+EBTga_9N8-aDvJgMikM(RfV1I|OJ3htzE;o2 zZ2QiLHC3gg3lyZMjy2xt_6Y}6%Q8VcqfiinDg#dieLNSG_-vf^tiRUQ`yNije9lu2E2kD{>E@h$hrRQVD$y zy)w|rYXzAd<8xG)TN4MX789Z%evdarD9Nlqq%x?NG+PuJoH?L?f|hu5+`~?wH9`=t zmUtj{w1oJz1U~Kt39ZBL8)~G_6?r4KArE>aP(TiQ4tfM2VaU(I@polQE_;EIf_cFj zDEg~Tt2zK@&RTVU(a<_)9NG>%TdN!1G*k|#3tQK!%F|fQ)C)azcRtXl=CabQIQ@To z3md5T6<=;G=mgR?I+x^WB%QvB-#IblN6I-Nw3L5S6vf2mu0Zi?aZLC@Lwu?OSV6VN z2e=?dKk1e+=rM`dr8^9)O6@s$8lxcb8s_oW-Tgs}fDdAP3E$9>CU4MdZNqo?3<9#v zJZu_0L?X2k_J9gcSZS>oi8QHN(6QKhXLu0M0=Rgw(PlLS@YtpSP%~~SU3|awKmX+r|_F5c!UogBkF zn6FlrmJv;`25&~cbK0$*!pjL$+#)t(bhCDjkhr4WS?o~Jvu~9wVSY6-P zg{)?Zc31!a-`-bC~UT8w8Fx!pA!;f3iPU5PpTc5)Q~91^Fvm{|`} zf42S1`Lx>6nd%oH;F1Fd8Y5Zipnn4E7|krV^=!%L81@L0~Qp89^;*d%x44Ij&SDa#m{LBgw>6}Z>^nlMk5>`Jidh^ zT?gGWv3jE%-#}%zYAaAlecCyYbBKN1LoKZfMTNfNw9JSc zX?aM)0?{}gz~L@{K;1XU17z8!k1lYZ7gJo?c~D}*tFY~=?B_oUiFUj6%@Y)JU=j;l z(v5J!b4hCbWMg;jF|O8LeYm-`x&Is{3<7$zxxc-!2aW*StX4a#yI_=OTdTX(&a>T} zr+XV9upb>AKZ*nt2a;RS(*f+u9)i+BM&Q92cm$@u{=vxw6M0&nYeXcdMmo+5A^Dm| zf$dPfcyM6X?ZVv6Au-Ce%7v|K&g zTMd2Nf%gEK6zodp9WZDn6qvjcH%(W`sb)@D3XMU(iwnX}VVgXX`AU5Hyto~n4cys2 zVA9`S9|Lo0&Oe?8p!2JLRsG_kJ7SR$k+|OR-RA8<5|IuiTX(iZ=u;fRI0kQwjywH+ z=U7^^1C=H=O<{tfgBgp|DM(F2&242J#&Nqe&@{G7q)oDqSMlQ|x8>;J8bf9AjY_y6MD9RE$*>(f)HIhlM7U@iXm-15CLeGMapwn2g(+1q{QMPS}#YR>BC;)9#9<#4~L| z2h-HxI6ZwaILYayVTq(;3PgsS50$o`HdD1EsI5(Lpt-?~-yRKyLTF<;g7?vng>=+( z;;6BjovxDkghX{R{peK|Yfd=f#x1oae&fy`Q*_kU?+SymL=08Qt+!SlMgyUrHEb7?~*}Rv0(PHkcA^12qBq zaF16}Rxh9w9WrEzW33^mL?<8S<^fa)V}{WT6k-sZFmx=Yh#)p#`P&*SZ4thEXru2s zMvirF!m!95`m}RN$D5QlEvTjj{geO7U+X^now+&wyF1zCu?s2Reb^a_hbwqJSdl;e z7gHPwk+S{p8u!CXKY+Iu+v0oG-dgqX=eVhkTfb^=cT0*_^7}m#6A6s>%}gXfW=u_# zpw8Kos_~u43QIVPWg!h%7;o&B*1)|`5s!4z?rNTu?Uih&5)#sX+-78T3(<8!+a+uYFr4AEpG^;(G{VY zQ&6+$TF)alrS!0?X&FcDvNb=va}59*5Rg=4M_pD>f(zIBDJWb0HO$x6c)yd-8{oZ!K%nyPA_A#-@u8(0 z%-=CNoZM+*g*+(^5y*1fDh;R;Wyybr1vx?rAhw9Y_Qza0Fr0DtWhpH${Ihp?1s~hS z8vZh`Ld>Oji5g#M(KMr9PL7g;j9)!&b%q-SvEvv+QtM#6>JBI2##5QRhSQd3$33J> zfC1E^bj^msqcJeT;!Jy)BTyAiJ@O`G@Q(<{QGBkg^5bdrSt~&W1Evt*u@>LT~;Q{z3NIdtVJ zsq{glxlS7PtS38YlZ@75J9qnyT@M-q5Q1zKHAuYbBPLfXg{%ut8|hhY1Kp9OQb@dz z-6W~B{Kll~jIu71yFQ)1J&~6+-z51cC51IiQYy#Xf%wDe_8`}^v!z6el7LeBRJ1Jw zkn(SPedE#Uv#tG1fFcn%T8Y`XF{^m0AjlnT_bodQ*0;OWa{H4b-e(lv2Xst$$RdZ9 zKkALP5xXmFWdJB|p2Gr0vyt5M!3$|JVqht$i+BiSN=uo5r=81q6K|Byd@ro4+8nZu zc+LVB4I=BBauaCRYp5|_TZGR}8KSbd=rVK{dM7%Al=lVnJ?vqz<&n5(&IH^e5{Jbk zvo3Ixsf4JGF%-gmX>TKX8HLijier&Lq4)Woe~DBv1jy!P#@AxnVn4+Yf8b|!QhpdT2#Ehztt-?b_+6tGN%cLC}Tz! zNNn8_ZDDVJb?qk`>$-B8tnoO>YhI!7b$)%qf3f(xA3gpnb94MRC1@k&?+zk>wfN(I zZ$!Z2;+r>b+BdEW$hhyYtD?~n@D45sPr8BfPGifkimxRL^4c}QZCdM|MF1!u021Q5Y}>X%T9 z19rsJPbJxkJH%+ww{C;?hNZXs_Q=oDjm42Dy`4rIN!Rv@Hv z3t(26xI^`8*NN+3YCYS2`m@hhx1MdFTbszL@)FywC#zrTvjCbFD^-2<+;{b5g)Jij zv`bB!wDQBBfat)-1G<_Hh>1-yKyjS>m`zi*Ys+4%%d@U#5?mw9CY>oa73#&XVU#^c zKC&Dy2*a7pW0}W?%?dZZ%f%7Wa$p?L!;loZCaL}K#yLn{)%G$R$VmTpXM zxn?@Ki-)YC7q4MvyZtXG)wS-9$g5uK@`$|ZY_~_`bqs&>Nj~YzbR2_uPgCOk|LncX zkDOPQC&s}HJOcp@G>lmdy!b@-xFRJo`A}6)w~Asbl}t)mMKZH8lPav3omC@v+}}*;f)P=VZg9=2D~!7n2rAh1Kt?$%6tEQ=W*}3-y<@Tq$H|3 zqe{$(@4Jt4&pr3tbI66BA%tdSuvv4ED^mfY zX5plBF96K7skWhlN@s=nBz=I?Je=Z9N5$N&DIUCc5O=aKhxHx23R_sc&S=d-tjk>W zfm{K$>_w+$6+RCdhi0={DAEb%o)eTW?)&5LVE$Y@)k1fP7_9lQ&%F5pj_|$p+I4;s z`Jq2^+$iI`xPP)_25s_FV$W_I1-CHkR$31voj@Y+2+n%{L@#6>J`HV&-KpYKwv4wD zcZa)lk9SXwk0(>l@GaBF)z?Vfjy(cfiA38mUJgQ?i^aVl;C3Z-PjF!YxPXikb4cgj zULq!P&#*n4lKFkX{d3mi`dId3HSB+t0NBd-bXz@nYdeE&=Vvpvgg;w>_9rqaFQTs^YpP3< zn57-tg|f!N_)+4??c8W5Fk6!h;j?POVK;2`qD>f$eXdI$7pA)UUdmwkXa-YzaUQ51 ztE9OMR9f^5sF)(F6{^SWQ0+3&Y+n{tef%9vS_kim%o1XoaC!1UM;EcDeLPAq2C3X$ zode8v+?m&pfcZFp*@eCmOxmm*OeR6p2{tfeGDE(QCBZMzg9U71?PQMpj&{3?4j*^O zOb}FtbLWb+Syk=lgT7-xbhzHMS0B#W8qaMSDYi82&HmX30K3%D{fqzgzyAOJ{Mw~U z{O`(Qg?+sBHEHQsk01Ygp{2Xf(jo4Z4CKAm()~kpDE1u~8G9L?j0BwVIv_BKMcTn! zx$Yh6d-XXQX!J~_NaeSLjR?b_wMH3Qv3Bu(Ox`5 z>6vw5OWewWl!xYOIzsVtSOAxTLWoh95CIzQcM;1ja9~&At9<4yoTJN`{P|p?qsUo| zqE67}+vz&3CET5pw4io1Q-)<9XP4RyoxYZ+G1-=IW!_$?g&ddHs=ci{Tc1{BR0orN z5jBzm*98}Y)K?(xoWFlEnh(?3u8)MR@KZ164W!dxIUt^Q>Rr8yF-q_eHJE2<0WaLV zsRcTUK0oeheJZC2nb@QW4u^HolBh4%PwRmAQ@VNkdP=H`HP`~gC2e^Z#H6BBS6OdT zT)rlw$rShQ2tS6KF|Gy~nUVyCqzSA<@JXghgoUAe#1qx6d5xNG|z!$#M0&oA)=AEg7_oc|T^@ZOcgTF1y$t_E_w*5VX6R zPnX32^Nh5#nO~+EuDP)@{Il-Dj`Y9ZJ2yq@YA9VEC55xh3v|Qk)ef3~n|k>Z8kZZP zH$!xNe(5{d9HR#J7u}PkcZVID>uCuwt0>&-l12H=f!CI72>j6;2A{SK#j_GL2Ez&> zfFKN;S%E+e)cxtBzx>t~B1`$_jfT(4oVvZK=0s>90bQ39w|E{M7*h{~pOV%)QjEWA zLyM+mXhjOEz41_4nZwnD(2c<^O|EPwf5OcB!*&Yrw{1hVyc3;cX5CJL_^UR8@ZR1E zTWo|FyQA4K8Yp{X`f%u4kjGbx5y%p4NR&h!3sK0LZ;cQ(5|qutwk^Jh8(=%LtC`B! zM%$+YA1wNV+Q=HUTB_6@g`f5nf0TJ&`^a{#Y`aJ@Ia52xZF^dDA2FNNqfedbzt!e@ z&N+BD+Y7GuoeughjCsm%bT3I`dIPZDcK1kg(}2x4hYTGqe!(5R3pa!}7{R+@{@o){ zexAqCnINQfr+yb4yBjuRya~9*ZX1~E8zA=`G0txIh36&c&k5n%bFo&yeo!Z*4iQw3 z3@T%zI{8U?R!XOQ7)bYD(DiQ(>lTEMtL5|W+1<%hSnsSSw_V-k>cIWuvWr_Z)}0BI zSA*LYw3qC;vXNGA8U?#BthEj@Y!W8Bm2a#OcwPA3eXgmac1v%aAbP$yIXpyEAQA`f zxbq4RVsa}*exD8w5@GR;1X+FC23&93bBLy#cZDbqqiVhHQb-i(-uDUaS7%jVbj&%M zY*v71D!z7dhk$It@n>=3Fse0!5&p=YV8ocUcss$E+M<4x5!Q1X)Kw4qTjSiU!spg6 zRT|A^wNTX6ak4R=_bxnFhzW5AlEh4wffLcP+#+CJoI8Tm4yvANr{;la+8?3hb2PHd zd}?mZB=u6`P~6r~bDq!s8!) zes^CLYs|2p)*`!n(Vyoc)|darqmfSs5QoBoZ{>(Bg~pw9Q1 zKoHi57mJN}bMyq&=0YRqCkDTm@q!@Q3Bp+8dg+~gZmO_mAoe1(<6TVK+{_?9`$`ri z6c0KXB52x64)MOO_Ow5pIlZRJT)+Z|hi|S^N%7i*aCvfrPkj9vF9<1Pq|8mJWiMmp zPqeZw^!Vb}TBG^mH+&(De&Wg+?q%BmE*M0_Qbxvxe15oUyU=f)VbwN|`>xT_9819wws|_+_coGGhGUKmUI}{!jkm(k1@4ve?^xZ+N7) z(c}@w!#%iSRv+YE{^!}R+YS+WhDFe8uRRy zDZsNQKdaUn{s~fsr;)TK{zyr@TOD&Vw2LdNYWj@Q?%TFZ2Jnou^*(HI2mNVoJij9k z`dg&Xz&rlW84k4pbG$l7?(f9Sl4CxPqryeqE6RmL_Xo!PHcw&IgWci?{*t)U6khwd zx)vE=`}Bl8nOhDvlouWib8DMRJ#8lUH}Bos+RW z|CRvos65ZEB^8<;5T;G0Iq{-K;louX?Vwx41}``V^}l`2mR9&gU}KsA-B5SS!3kf&0hlv ze|g>ix#6hyVZfPuK*uC-2A(uxb2tRKUdY{<50 z-YuHhO~`D*$X_<3`Ux7I+uKp|xm`!QO~bk@gi5AUXxDfDhFDw#K!mmOendZ{)p%yW zzR(6Vy8WvVw36mlA>fvOm$t+}1uDZ4i>yZI}2mG5Mq? zk*`i@jlu3R(w4ooK@#Y^bEF+(RKu&{rnCLlk*-#oxLy&7TXEm#*ie@25dC8$v;i~a zTJkU^>m*!?DKUP|d}~p#0a>;fwSGE^29$w4=u2V74cw8-os}R)DZp%hh|mJ$wzGygisc9OD*M!ik&YkQ<*c9?QE5xd$;> z16)>%5@7Buq~|UjKnXiG`$tlw7XPC4Y$u4V)T;MiTlJV!xFnVW2(2z$pu;gMtM-LL z%md54t&GNSnVz^`;Y|LzNldt;uTcL=r&xi77MQXNCt0IdFn9Vz=ObOTSz~>Y=3^M5o_CgDQXRR-%!vl&0 z^-A(Q_-MsCd+>X^-=Drx$yglLe9 zN`8RGt!{AIl)J%v1}m@y2p2-hfLHGJk_=Wwr^C>;xwab+sG~QMuW$~q)IYAu8HNawzwC*db`lm;a1CoFukN24C ztT%cxes>m-A6365p!LBRBDZ<*uOtVLAQD)ag)1cntkN1U+s%S{t24G^)-7;)@b`c2AX|B1&`ne!Bni37Hj z=if!8gBntbDdB2cDwWy^_f9(5P#Kwj^$ujqQNR-ON4JSuNJCNh`cN;SOz#okEx7@5 zo0)}DUQ9fFK0Wo5JIPc*1@Gc2t2YsQj09xk)w-$WAK)FpV8Y%;x(S|Fc;;oqJopn{ z4*r~{xaY{s@9#=NY#T!zG@i&=Zc|df@53dpHvHB58+SGz-gmGK!3Vfw2ZQB=!gx-C zFz|_Ad3n3y(HBXtRp_}WEgk$)dkj*))p9$ z3T6A0antN-jBwG;bTC6~zO9g?$Gm0TB*8%!YE6t1sO%0@G?D7Mx9$)9InauQnlUkIGA-3`^k8x9lcgE=sM2 zCz!u9X#|ml52&Tu zBq9yf9y@Qs=Cvh5qpAOFzB1V2}sk2 zP?rD3@D6kbcSI>vY+|bM5Vf_&R09K|R(5Ii}w+%9@1qL))zO8iw?r@ZmzPwf3Zq;bj$B~yl z1{kOIsvg$Cy^!vsSH5u+vlm{BCEZyU!nV+sZ*>MQRylY!XNaunAK3oY~Z&j zo+*xXabZ{NB~e3j_GIojNiJp4hIVIwofu&2HL%f+L)#hTuSwNE`0iw;N0|d2dbpQR zr#Y&y5LRJe8tTQJY|f&Mpc#G%Q4KaYyqr&_LzKoPcKeg*6iG*QUxiM2G(+qAGFr;$ zY#6fM_}L&gh~@L;{XJVVs}*l_a4z9VkEGtw1nyu5gL!`lOOGwxkNmIu{>~;R(|tb% z;M}D+@=|7E<2)6MeBErHl~yn4DZwHL;jh0ZJL}+0E96vOrQmGr6bE8uE2v&H$67o7 z5_W}aO;cqe<793?9c^uMd|&LKv!23_12iYkVO;@dNIhFKiHIVld}((P8z&T7C#Qz9 z)~}uoUk;#ZH3Td@1A12WYCaQ-XQn=^+Wg>BVc%7}-D1jYVfZ^DS6ejv@IepeRA_z_ zVe-H`S$({*w$t(I{?>!Nuj+T6ao=id2W;`l*4-yoXHk(qZfyL%t4A?eZ>(=UxU=G> zVs>bsZbHEf1>EBLb%JS>QTjV*}`2*R(;c z0xSI?cb*!kSNcb{;V02??=^RYh>~iT!sDw`;%k2y_r2)Ne!oz z@YatM>Cfl$<4>2*?kPQ8+`{#f-oh1qiq7^Il0*0moUu{utN!fy{r+*=E2y_|VO^IC zQrGj2#&#w5dGWH<5r`DspRcOPC_}ZV>^6O|&rx)Bjn^`ug8t7?(%OUhG`UB_5=B)p zp%M95-e-XIv-nJX(Vq?XVXQ{-wll!Xepa=_S5DeP}J^YYNZ*JxjX45TD*QXm>jLrcO9bSsB@kg1#jNz0!tK-vsGJPvSwB#DEo{G z!d!R=`)V+PH5;Y%f4)8LVIz5j6y%alR**&V>s?T+D^-B3k>diVSXVX^Euw8jwAs;NZ zYtez^Hq~=W6-P(N&MLE;f%3Yzw`)8b@vO3_{+^dA`!|ETq=#4MuX_Kg&#;v5Mdg>n z*$}BlY)0u|LA5W&G95rV-p7d%);_@1a7Ihiile3!-YMF}NcT@TpaU~GrO7jlNU}-W zk8W-1g;=hA{^r};xZDaY$YqZ>T+sN^T~^K|Hr4zCNr-fs(#ljE7NjYP{iBg$2;*TH zy%AmWh(h3^oTS=dAOZJ0t6lCR_!6n1i-W$43)FD9Eb1K7iOwIpSyV3amf!$A6124Us~YrhgYA&USF2J+KoM& zC!Mhy2!K_qEyTOT1z*?RkMzZFK7gfj6LT#%CFtq6o)hOB{$Lt*MlUUK{djGL3QOMd za)|W}y$vnw_-kwUb3JPR#21r29}J&8SKX0)T?R<;ArST<-{PWI58~unRS%jb<1kZO zd6OAmC*isR;w>Lkf(^?SDj=co|4E);HFSgTURZ?xXsmF?VBNE&YB>= z6go7u-aMoo#+E>JfY?A>;E@DDMjzNZpzdv;Tas55#@m9txT2N5lJin(0v<6#KrnOv z7(uWEeG7V>1o;|Smk&s=!A~an8|A3nY>L1vn6r~ksIBBYVF>@b8rr4Z15>w>VB?In zQ5@|f0Xw_NU9h+EH_a9n&>Jn>CO5U%ner>4h$L$z%CXtvoRdD)-YBo0JJ7L-a9*t z&UsD4YO^68XjdWkL&D!Zg(>-n55n500jTIHmhXbuvC&_tq!(V&@nrY@+P!>$nwBs7l+u1;5~Iz&pwfeH8pzobTujVCaJzmYgnoNaSLdjuNPw zxCW40Y3R}!5Bt=ihW_LLj6Los?Gu7AV>DhB-5XZ{N@0N%$RB7x9iZH7y;r&2yP{+7 zY&0rJ#8aB2Lw690?EH~8_q4Nya(P`j>WXHPH-tu zvl3btB60-=51gyQa7^!ZPWRG1ELFjXAA=aqVD@{on=-5VoA#mjTd9Z9yiq+2>W%94 zUoTZpX|+vqE5}q9;5eNoz9nG;4D}Hu65uF0f}x@AqM+KLFCDO3jJBoK$L+0l7cE;& zvsQ09y@)X2q0UuHX?;;Etuxe8T3^&k>%6p-))z%-N?=LH#6^s^E|mnv1ia-^$0sOt zC9Z;Bf143(tFpd0Yf%p8SwyFWm-sU4uZ`F`Se>i5UE|exSV;SwoNjC*GW8blR&cvq z7WmC&f@39d92py2Tp&8Y;7`3bg|;Nd>uKb}L`dJv*!Q=^yw;r&ubu z(KNLxE8vkef`ZD~v7AuZAA_x1OGUj*0i+WFV?`4fg}SLDBY+IPk^BPi`>$KTN3{}s zJg9@O8$NCZTavWREy4lxwhLQp!PlCi_CVJ%kJRH84z4AgZT^^1upo z%Rs!G>?Dm2OV(x`+U)mmwX8_iSE-coo~0e>nctdc0a#V8i3-j_C*f|9Z9YWMta=4A zz^f_4*yunpIia3U{48EO>mj;^4Hxq^?9`qmT@e|Wa0QGXES0>ad}lbsJAMoA42Afk z(D=FFd0#L6qJl`y-9{W3E?q_XFi6mLuXYJi2voOtPNT1Bxrj zvM?V$JDHpyA;bXwXt;B2L{}?@1uF=s1t-Tp!clE9{?!~CpW1T{5J5W|3|>IDcm)xs zaFmd|~J~YOge&VE9F9NRWuk)G3pUBw-t$W9qc<%NSumD=>zV44s28PIj%ZH6U z!De;El9}tYHC3--A*vS8;C0pM)gcp$*WGw41OVc>B*&iU+rYJ@&Yj}ch(;xQ9cl?T z3inB%N|G6rL1j+w9P8t%#@KAb`-q&tnS0<}+3n_5X#gzke+F%5X@S}?RIZ~{6IzR> zVeB_g^ZQFc`T^MBfxK~X&12NU0*D=HHj*VEj0y@R&x@Bw)xI* zc0B5ziYgPVLlg_VOfb=j1QV1&C|7TUu^0!?xillwr)GhEF*wEkkJhr5gDk@&$k#&R z7>kf?=&-VQ_iE}TV1-8vB_%;A8=*_hou^$;-GPsOr5lfW65&Dx{4 zO(b%nvg!!weo59rY_ZdoRasPq2bUvEvMlDgv-cz#v@Wy-{adFk5ae}PqC-H}!OPdq zw@Mm(9sB3ZwoPMWw$6)WI5^n!Eyf^hBzpNBQHsUo|t9^Dt1ZFEqmW!+% z60rr>(*U?^{UeX@YQc}onQbb-NzR;3!zVL|!iG`ikYE{pXjs{mJ2&hAoGmJ%NB2v0 zAQ%-lbHLiN7VdY2U^T7rOKm?hixO(SE%p%T)C#80tCe<7o+@nMbd8tWLM=8(zjmh; zh8m=cKq`76BUu}bdg`LO+MjV}?iED}C~GW%L$oPCyhLN8jE0|=XSlC7?RhxjK8S$(&8c&;e2@BiNVzq{nN%Q6%m{H(3kLjQg7oOK9 zH;MM&p(w7d{muhN@wE{}3ps!iV)c3#g%jsn#BUbN-~nSt16K9+CoHR*6Qnz zGz^^Il7BzenPt0w93CL6HslnDHoyx)=)`G}uf7t8n}%4%IS@`N-Vn(uv|u2wcfmpN zpNzi_SXib(zbIcb?w8^4?~=O*LAHc8Bp8MPY<&CU`9Q}6#gKRYs*v};^3+C$hOXOYw*)s;b?+I?azgT zEPG2PkK*`j-b^)SyHxM+^RkZJf9N`{3VP!{NwrN=HnM1J{w>103S;)N;0dF=N(T_N z-vTuNx*bAjyCU;%$BVAz#q%QCMsYcDw0r`zydwaDxZ1>3i`oBdOl5H0ylzk45yZ=& zOg(ho`D|fjD%HCNGH2excABTV=5hz#p7d3=C&dPsu89VkdVP7GHv3p3<>hLrmENVA zU?j2fIzoUaN8AIuI6duy|;09uNWsPM+CuBsA#7SF>EZq4$>TI*Edb&3O>u$ zcAW-@9%=fXDf6KtY8*lXT$-EAXO)=tjj&77>e)wNgtxYfw>{bEGp}taNL@X`tErIixrrw9Z)|x=uD!*5E#rw$BC~ zcv(B4aZ$tUfb5dw@E=RS0I|$x+ml%@bq@}6Ds%5E+J6aNn*(M)iMx5H{L3DR#dPMA zS=Cla1aZ4Fw00+@^oA9fj_QccpEKb{ZpLKYHUedfZ7{4gb6k4o?fOK0>te$BC&UF% zL%RH2Zi2doWozIa%#{N3%bct%-}wAxQKlyBbu6AmoP+{kHydG(Z3{22t=g=2F0RJX z>L$WvNw5x>Pck+*p}|Eg;f=xW<_FsS$JGsJu+F)>+ZTY~vL;IzgITb+9eY0qY1FVv z7VWs`(1Ve{nxs+Uqj(>Fq_6nmHGK3!0JCB}ELsIxyiNELwJq%{^=+KCky_kY5S3GB z+&NUgjW!}DD@y1-EdQ>qZ#>xBkcbr`haV2AsU>LDsIYk2upB9T$d4|VLU`rlV)u9? zV`|Z`CU<)Armr_`Le)FU<&15EC~rV&Dog4J^~CY5#J3ga%A3=rvA%T88YqplYG} zg1Xk3sG+uM;-WYU@LZoK$i*Znk&{t4%azljL?dl9bzbcpN4|KP)3RCu=%la{wo_YD zcGPZ&hE;<&76W8-2L$-Ob(8y63Xv&Dphk8-`6LT7kbqc^;OPc0k)wUFKj+|~MBI6U zM1ePnw=5TTeX^>8qZQizBCOPjQoJjDeVmslJ42XagsRf*dpKGoG-Y-XC=kvJ!Q$%U z^kz<@ir}@^13DvR%|N1C-RN_9>NB~YHw1vXh^Z2dD}_wl@t@MX&sJcCExm~XrqP=# zdZk^$1DPW_*e?R26b8!#9<~m<@LFda(1nOeeY~HjpMwF>TSAhGNk3h4&$1YcJL23;ha(>D$=PH zG2U~IWa^gJkv^rGZi(h_m5ix?7Y!@4r;>nOD53$w0?j^}va^dp1RbMl_0<)TKM`)A zN#0BKW}5f*L^Y~jM24EI;{|Qgd1G<;WM4VIf;IPK-mFm`!bqd7qzj$Y912S9OO#X` zQ?QyiKQZF5Im!UEPegKCAthK`zbD&C2~Is)zr6|Z%!h5mYv(3snqMhRi?;);+pDrg z&9GFb&xoVq-AJwuORX30&PeWWRi*oy@>w*opV|d)sd42nQVs6D5Bd*^{URk3pCTIJ zrC(@ct*3KqIWr+CxGj&I)#wfci(;}^_LvVOBzd8L?8t@{02AAFL;KW{5xv_x>aQ=UQq7Rm`yTky0RaC9Xm z3W%ICcrYeZR{->U#z)iVj2o=rD3zk&mTLRB1Mw`kB(qUFx5{j$MF^+hFrV4t>%O-YU zKDa+l2RcX5fZn7?Ikn3gnB`-;LwF7`wCJl_-&R+sbXF7Fy6puvmqJ_Rl1ecoVHm|8 z)6)K#I8f-5XrO1f&_Q9X($?Im(izSIQV|xMI29%BCS}9{D>G>>ro4#2L9SHf5RiAc z&bel=K-w0>nR}-DTicdU?hF@uW1cGAMBjGrv*o{DT%!4tZ*?7e8rPc#dl;bQ+KGpM z_zdyFYgr~nMEYI4o3y$-NLz&phsPovY0)N;;{=x9%L#W^rG z3QO=3*RG{D!VaHB056wH$ySRU9sES!H8{u~5=WkOv$2wm1#8f~cMh{nyLjH4jiza9bK-#9==jP|9YT8o~Xe3F)#xvzSm%Yv}^F zi9<}zx?Akj=^&GKzU@r@SE{Bw-y)GOU{i`~yZx6p5@AJIegIs%0)O#J?q5Ns-mzTS zEae69So)9=rvqI5qDg-bhf^Hfq`NHd6hXkt3xrKrN$TgpHt`4^h2TQaR5TNfg@FL7s}8PW zf$?&_z$njKux}tFJV6F@rU#5YuormGwsrDJtrOgAe2z{MlVuP5@NAGLyM%#Ds*v+A z0@2m=;+VoAwHUmi`&Pv)Wd#;bIe9P)@J6M=&FgJ?_e6t*|%nZzK|7DaI5nynb-vp(6KJTmzZq?3?TM|OJXwzsJFz{ z&f*G<1^bf_?hD#J&m!IzCGjQ%oR5Hs1pgGMtC8=Ek|JrA2>VZsd=-|YMP>Vugnc6H znV-kW3_(Pa+=Ul}3E?JEtA=S4NZR~!ZBvV9?j5k3_E`%I^~6&C2V|B$sytFDDr0AIJpttBX}=N!7cZKU?3s42+*{;r zr&unMseW0YvDOUlmU_uOxN!?!s%<0qJZ5!&ta|FRi@%8oE*KHVy##}zMIq_ZKFcOw zJAdQwMX{Pla8)rvuT+{tU|f`3rEx4VeVJiMyh~rm{6Ma|S{TK*vWgw4GO!BF?-1-X zw`41s99~#VcoNH5+$B+)GTpur3WodmGu?CaJ z+pi^^EFMnv8`g#|*K%zP#|VN&0xuwvrTu5}&yX}+a?vG@q5Wgr3Fl{9qiHn&ibf(; zsvpn-8D2?obJkU&RZeC7S+dA4Ot0YEqCij{Md?Gic@HMU|$7OGHA+paRP z&@L-y^~4yc*OVruz-ux)ImO)bNHMF#)vdR-F`GH=4YCESFK%NGIO zcM}^BgTBj!!y6n}g@2c;p$;oj$-XXEuZ)Y6`u!t1Y7oZb;p@Q&ngWSXhoWcH)BgvLlhvj$q>Rp?lJF|!y#vDF8lF`$D!GhL8 zKXo&$ug17XifvV$lBmKF$0UAn_aXIAsY)dKm{Wlt?& z2X-g}r-a`)%vrE~RQ;Op)yJS+%^Hr#Wgjij&DQFXX=$833qrn2&uR`~x*kX*?U_WK zL=2X5l8~b7y$~4_>J2hB@hI(0vtBEoQ4&ciuS}lq0Aiot~4m&H3& z+ShN(?Xk98xNX|k;~rqDhVyBRoac$+q}xY?3toGZv`)R`m?3dr*yL*7)3-P;9^ zO08fnew`+aWa{7%DDL;1-y{K9g;D|vcBPO=&1H;wCbgQB;VrV)?=qN>56~}N4rOo! z@;N+uK4LEl6|(5mbwVEK%2e}^g&eghP?s(VZp ztV}Y*vAb(IJq?ucJaK=W05SEn-k-BPty{oWPbm_eJKkh&MT%-?&~s&MAKj$GJ#i3eB5w zrywtJ@6|bMrRzW?`Go&&3E3%W(H_(~!%Y|O`TxYlPaQ=?YZts&`H4(Rp|{*t~ugOE4`*hC+19io%rNtxE&zi4E(UvCh<@OLZ)9yX^D{qgXr*3pdki)!x>ftxu7ld0)(g$9n7iqsRA8 zM)TqEXi#(hg=FF=YKF=Bo2ZWMXwdFpr8HGqxJEma zPsJMDOx16J_y>MvO}cc?XML*2Qrmn2Uuc(o@4~j0;+$u!ZEzp3;Vo6Tiy()xR+Oo3}6w~!eqGbdK-Ib8;puJMPCsNXfnTMwfNUdpl zy_T;rhTX&wny&$Eey!9-=G@XuD3>T5`=8ug20jIrp-c+nD0o(ZDBag{*|sPu(umDh zDj4q~WGFsL=;Y)QH~c1P!f$O5sky|>MhQiGF7Zh&VS9@GA==?MGaU@ZJ1zIw8-<4} zsK0f&l+aW#C`;W(%<^f?P(KboA8zRI)3*W9k6uU5t0iO6Kk79V5D&aWA+03n*eo)A zQ;Y~5ePuUUpnrt~TsQaoSp4^;Upz1S^_rPBbVLb`$JGysUBS0xkO$t1mAnZUAh|lb zctgH^vHU^AkP2GX?fbR-op_6d87>-4Da(-_>enFCt=qFXgp^ za~1AV46Dx9EUu?bu7*`0CUSZ{U*YvKL>WSh)2nV53;jWjACFXRO#X zJYU#hW%4WkGs#PZ=iR{w=^5zU4eq0l*2V_{Fw7*1k@X~i^bUD%XC<$V9mw~zt&rOm zm%Gdo&vgVPOXo~N_cR8ves7q^*j=q|{MMrVwBT)tS_@ULUQL~oy}?geU*g6?h(6T3 zjy3*jwc2|=82j5B`7M1PnZ*hY@&5Lv11k+`0d*AYTR^F>QgrqTL2!LYjS$yfj3=)U z5r+$+sN6#&=Tt94Lqz8ULG!Z-lcA{-E(#o(-(A_$lsC}eErhY-W86jNdO_v5D)>p) zDyiaM$KQ3EalUQN0{0fXcuFcHi)Vqns!I8RaDx`26%jc1Y?SYZW!o}+#Z^KKeC$KV zQOaK}=d7EyjO2=3LyGq?I8(T;-MU2nU_nmM)ab z7R6^*F`S-Zt;M+W+)vmVcZGn{3X1rJ<&vi-!8It$K$njE2YU!}rac&&^X_UtbDJN3 zTvQF^(pURp@Xk))Im*E*(2Lf1z(jFMTwb}2ql}=Y{h*@i16d^g^n>0 zcEy1ntYloEDao%?^J2DQxv_j<~bMV}92ff15*4AJ;&_e)kxdZ^!z7mTf^ zH^ke5Ng-cPJ#W(bxpGIO-LMg$t;2Dgx;`Oe&cwlt5qpqxA%XCTzD$ifgZasHtTUc? zkgU0xa4R^rK$kgVWWCacVZWS&Zn7!MiMv>hyzCjgvG2!(i66WeIy zXREpNxh2DsqCD^$o8dj~M>Ojo=M@FFCtjMX;;c~^!5~{kzuL!@71$sFX#aRnACuC7 zb3Va<@g{$!6cd#}^`Y3L?hcQd+FNhs4aUf6Iv5=Gp%zw+m$BaZ5DaTw#hdV(N(tNM z9c>7QRhko>j%2_Weo4Q^bM-e%Wc4hOGh$WF8WqL16wpU;m*|LD@6OBK{ge{b={?LYhA z)_gc04Q{VV-y7p+xSi(KHGPJcPbUYbD6~DDyu^Tg|KUc%?>Gin;4LQ_Tj~i8PD^Y|D>8Y&P zyM$@iV5;u&He$(gxr+O=BjP|gut11%e~vLpTS%`z+&>xN_y`c+%Ez zygxeO66``En`*`5iXf7&AA=xm^M4Kv00?t`FvL>emdkFICOS5D6E-Wzb}qI7#8;E) z3wVb^*qFdYC!Zoawhcx*pq>WgI=0P8zHmcNnQmn$PppWuJTU@IX!T2R(|`z4>f^e?+^cH^}qeo zOPBaxi$Eb8=sN%1a1NX{QC8u{|6XjO7n`U^Di@omFpGvHLMD2#iN3d+sBMsY*w0~3 zfuOL@Js)C=XnG+?RfFji`yc*)2m$H@*~D0AG9E){#ZJ9wo2))R7$DOW&ZF4=WUnJn z^$oUK+uo!YHlDzp5)6L|QTUiU`rrVfj)+o|qa&zes~PlI`_Cn#4!6eHWOO2ugXd|% zjyN0qdVhQ)Zq56YqpOmOGb;`noK=ah+h*-qS!sKb@lx3Nt?W=`3*zmSN-emGeh!hn7Q&)=C4*bQr<3Mvb!Tuq!tuBNbTkl#_}lhV`Eatj4*S^vDGU~r zNJ7QVKokMpMIQ{1hIsnoet!%mJnbk4RlvrWd&Du(sN z>3pyT#n$QO7>?LDpbq*+-G#PJ=G~<>w~|=WXrZ%p0ge}G%{d1_;{m%eG#N+f*o{3I zifagNkm;z(WinVuDx!uQ`T?J+2S|b3+9 zU8RPHrCU`c?~4p5bL`u-=p+Y_ErAFPrATj7VsLp7wo&M7E2mw>nKUJjRD$xtrkxlb zcw^=3NQ;%Mn&;4245mhXlzP0SG@rLrxp4)uR=Lh@gQ23EXHdPLIR zE;NIQ5t)`WrB+6rv^+d8F|V@sb*x1+QVoj}jP?mgakB892i{I0E;gmOUSkHYR10S< z3Ya3$hXH&Bbd`j_p-QR7Fp$!nT(m(CKP2&$b>)YXNFqrZ(6~GcX?J)CUp*}EOsWiW zptUc8%tjlB2`AhFhBTdG6mq3G)!0?@2~AW`Q7%$m+U@%5rzdGA7RwdtjW?e*pVWvQL2PioHDd3gjp^~~RHcv}Vhme>3cM|?=&rJ1 z_1pEGB`a(n&JShB`%`9;+y?kPyNkPkOJ6^nj&ujvRm+|b^VqKr;V+c93!M?SvAYmi zHV=d?*9KXhIckl-wz)U?!^z-e(A%HZDmr_`(Wf~mdpV@Yt?zZV8aAu-*^SBV+m|l! zzlAm{I?vt5sb`dwQmn#{|GiL3T_~k4lu{Q;sXr;lkEK*h_a@JhY6V)X;8cR@525Gj zcnc*F{h8*oRf-Mfpg=}TN3t{Pq&SkZYmCt5YU1GCEsNS`gCO0(?Oc7B#{wLpo2n~@ z%v&bE`x*wk34nJWnO$hEMo=d}!K3nfRuZY_;tWws@KJ%9sUn!_x%f-a{Um%wy-$Al zy==?!j~^E7=t!4W-IVqRv*AqL+11fw!;Vd{Gz=zbV7=Ak!eU9nq2uHF{u46pVuEMx1j$ROzc|T!Y^%Qbe zOttMDoRsgw!4mqa&(KPug#s5ekYh$+(uSNaAhpA*iaah{v}Y?6M^)(Ts2#&|IC2Kt z?8tPWQbL^Y_)?X9pdRE1R=c~vBKlx|`%=8a&@LAMR@(!-M}>P@RLTtX+WP|`b~#*W^tCo{43qiyJ?=|+EeG8T6OBGZZ& zls?eSK<*@mwh~+nMg(LCL8@ADt{u*1C*u1@C&TIK#^1qf8(`s?$*5M?O|{J}VxPS|;d~g#L_CJJ;*U;6ARy4M&d%YdDiiBXR=+ zsaY~ueS!-hm1Y1!dT-}t=}3xUr)n#=HhR@Row4+wH=mxw6MvI+8}y00I}SMbX6aSx z5iT>W&yCAhs>}CuCs!VI$;Q6%h_bQ~+7r#}NY_ z)Lr=*ZjxZo`TS)61-XS_Ej6aXRrM01Rdhnj@O$jXn`6Od95i<*DPt1DOHaU^8iN%^ z{Em1xI~u%R!6lquZ-sjL=;Mzg=@X?Y4dCWi5cVqeY8t)PkOLg`0}?_>3M~ob9&Qdy zV6YJNk{GQjPr#1SG}ilN;qM8E6e8G)mP;K1VLwp+a4L-eesR0jzLoFg- z_$jTTA`RGqp|EoKJ~P;lYN%~a(sL-pNL;k4^?aMP-4KbRBV%IRa$JfZ8*ua zv;mv2Hvu#jZR~99J=}TlWPR(-#*^KLay_WRs5H(- z>;vHoQBgA-17v*w-VhThn>=GYaTVy$R28Y1!#4o7RLtxI>mE{=7xBJ9?R4xudNpf81fX@K~&H3)D$N+Ut6VTX>Igv#?xN8?0!=BzYoI0Uvh z+KFt*$yqSm^G;9$&U4O_a|pqAebWBO&`~?(3i~r8AUxjWjeT+EM0Ba^Na_EkiYBZV z2uedn;c&7@a+1MJlzu{hICXKxhqLjo=Fqgk#nWdUN;;=XUy#kiw&@n1ju2{02UBS* z^kj_{WGyTOi_Q-8;jEXBi9X`+G9p#Py%uObYpIua*N$4MX9zvDD-7DH?Y)>DpR&&b z%j zk?8BR9+$3YU@O@u4hOVxK>~1!my{Do8^BMQe&h^RnoKW+AZ@TpkL0t9Kzw)%1+b(7 z8Q7hN+{c_TRUM#`zXHS9aA81`eiHD?TT|b%M&*}`-HH{{;OplLwrj+&r?O_)ZgQX&iCi7a*wF&T!0lq!;0`}Fj7OUzR)ho#52tE)FwzSj}U z)FurU#B#)=7rH4l{Ef8sZB0_r;{l7e`*5;lZ?A)l6*mTg{DCE6^zfL%8-~hZmPI;6 z+XT$=#}oD^nIPsvgzA4*?Vdtngthu)iX1WXJv>y4Q9PYRP|;;D6&a485Vqq$Fge|- z*hQSN*bcvoth=T1IF2QNrhZyFX;J5SD}aP&86p|BE2#LHI|za^PE1V*7lFYBn>9!e zZOxZcYLu8e98 ze;F50?ZB9u&g%B?>|@@W*{Sv*0r4=yX%+^kXGbBUHZOcmomMcvNia4ZHgSz%!}i@m z8#cs3rJ=)LA@{Y;Gloh^$ulby>W-kd0=<9pE%7*`v$uF&b0u_?D|S_OWRCr^V@<}p zC;R(2g+?9%^@vi^*JSaLAXuHB+SCLCNT}$0$?|9VP`UMN-+14G`iwjUwJMz|TF>~I zjCl3*xYnvIB5$rlpK4rWW|Fprq2p~>lTyjDx+-#j>ugx1lOFO5B_d1^4D~km_Q*+& z!d7o3sIUBmtFKTq^dvB~^FR@sdMJ)40FathQv3>cDcB0ga3?!Z6hs%c34>YOC%6)f zMgq9H&7#~gdu%ryhCa`t!%$SI4xP_4%5}hD*g(g7SRy0!l5G$^D$cPjT z5L7b{?+yg89Wt?mJGw}oZdH9iDwkwRRMuw`uO?)&;4y-Wj}UNTeZD>xaK}`nm=J9& zoBKI&qJ)L3IH8J;+ZSXy{i2E_Wr^3=3gXex#vYse9X~rLSWi2-2AggoVz6c~@Mq0?g6F zhxsba(dyko-bw*Yxu+(#a6Bc)I*;sHPumbpnF<1)swLCA;`1( zl6ybBEu`(vI0q9b@R5od29YCo*E$d(sDDV`N_{+cH*~%-4kN5cj}7-9?(Wf_UCiHu zgAcvLa;p}orRv;HT@qmsMJ8cZ-HKP}hmdH7E0!N@Zl(y`lSJxWnr{}u;X(@0Z#Zm4 znaMBMcO<$xD=3?5=Do(a(v2X!l|ve~8G;_|8l|!ysHQ~~N*tUSVfP916sM1~5?)bH zjb@|XYh{w>FO_cBjhKULMm)>wgf*uC3|_3g>Si&e-4}c2k;Ir-hzfqIX9&!+jCT;4 zR*PEB->23F33hP8j%F^gA0sQfio&pISv1JegzgUR##USm(6B#PyM<}XbQnRqsXaFb zs;}Ake_~Dv8dK`Nd`L>CPHuvH=B*azQu?%g#PCjrCvrQb%MNrk*VGRL!Man6@v<1z z0em=d4j?lcKZADRBQ}LGJcXOGTsTS(RJQe-8#m>aC*-w5c@6$RaHm$Jeec=)IZg&2 zReBQnRFo%bx#sCY?r1}nHC}6ny;pD25g`m)xX=XL^^hEfO|X^sFUz8u?L)q86Qh&s zEAwqf@-{gx7`96B45Bq;R?LrhCz=?lvkfJuSPyLO#}c%groK&_WMgn>%f1EXy76G+ zkC4X^b1s$M5Ek5CVxH=Zu?9Inu%-`(U*Ur6hgdaCp8(}75~#z+&J|TUINXc_t&HT& zCNc4rqpByv4sUo?rE4Y}3ie-o=)t{(AlNm^Ya^y8+#iyP=Eb)pdx^q(UrKlOi2Cw;BZcV^L8*S zm{U8hoCmC(jk}n|uWD%eOFidELxCNv@e(GS-6br1G`ObJFFv!15HMzbT=T3_e1ps_ zLVx?=7q}s#eKFR0GJJoC?6Vj?E+nI-DXl%k?(;@A$<#8L`e}PHPbgq`vV$wvo@_n1 z$7|VJmfRY=RgZCVm#Wv_(eT%{w=w*+z0Iu$?Q5vktEN3*F2;!PWiWD{NeNIDSi!>K z%r+<@QKKwg$_qX{ObEi2!b``DNtP3J9>O zmYwGeu3$o4o_c!irDr#FO{~d!SfotULCMvw*Rj~#yXND?O z9CdNk$pNoc#0Yz^!24bWtuk+$^2dx@w$R+}$X>n^eK_kpL39e5A+S<#E?5LQeGZF-u+~gZGxzYeWwKo45py zc=31Q%0=(0`?mJV*VKq{{3o@fNS-|esb?U+!xsw~ESfcO^o9_zjhiHqNCvwy<7l0q z>N;&_7IwQVrV|?D=?PPAiEz)GXzaizci9}DOp%2XHVLwl)-7c{yC2h>*lwL%&)qnQ zb!DT;B-ut@u{T4y*b9OVR!&YciJXzruDafPyuI-RvfRBp@QTPbh7N#J>TzElyt5j- zlXQR?gKVELj#C>AGD(6y_XyqA92>=Tg?`kiWzjhYS~M$7Xf|qE+ejxARk|S|zd1tV zY?01G^XG;n%#&as$U-|7^B8cZD@w^5{Mk}uVat&7V45M**OTU~h8^#0*89(pEz5#` z_etn&$mhslm)Uin{O`38Fy|)qu)M=CTuW{hg%L!w7(_6M>s+){6_>PGh)vVEimix3 zT_1xt=$A%&i3M^X)@W?R2GXqEkV1B$!XP@i!kmB=nF;A?Wsm~(l8C}cn@}M%I0FJ8A2BD!F*L~-A z#wDFfEBcL5d&HvM&p;10oBaYYKB-W%3|`yRaTN$CDV>Kj8Icw|rfyuXkYijyzg69c zrHCoXhAw;j=4do{)*r1+pF!O>o+oFU-eouhLBC0*K7i1h$mDCQ3A%&CAX;ub(!B-Y zOa{Kf-B@ZJ1gB%@M4zend=2?u+eEc8F|OZKAD9XSiq#H;$$=RH6UY&$vqeP_Q9zAQ z-`rr^CM{F*X4|yIDX@M!sJjJe{{YDR9#SUem_!EBK-sFK5@eX4m&66eLUwAID>xBK zT+A<&z&S=8K^u|FThOhLxS%8PrFH^e3T27BrAzrIaDzV$HhyOUP17J!_<=lm-)P+6 z{1c~g9c4G2+k2;UL&_Pnz9i}rwYSMEJD#Qlr&`9pP)c=81i#_Xi$twR^$H;pzO{1Y zJhYv1)jV}>wrG`nlqSiWz(+KbBr-kT$d20=usx&UmDNg; zIjEhGk(wf2IUr?zS)@j_d(aSWm7V`S4^n_v6qTSfM;V|7Wyre`pzW}qWT`+_6q68z z?aaEC6O^k*T23=w)f%(nu^~Ck*mIm_x*7~z6&yTxoly;AI#5#}!w{D5hV7R0+bgzF z*@znp7Sz3<@o7UwQzO)Zk)jc4IaX_6CcXrE;?G4yjSNYo*b~v#LIX5~%{Wj)%55R& zc1os!cycnYUW_NNXfUSQU(Q3YZ}kse(hJc^8ngv>dx)o!$awG?t~5zmViK&b9$iI# zdgz{wAjSG}Y@3QL)gEIq^qU_XxuODfS~0p;O2ab`j}Auw@viI$Q!JH~)jq?K^_Ihy zhR6)j7z!=8kI2`{@hYr@P@2p&88|GkLu5cE_&S|zj31?(@|(3`&YXd^ip2pP1DFYJ zT@*!YR?u4-Xg$C=5J-%DlqS_Dw`BrRIk|C)N2;gyE<35U0F>|qQ->s(>tm*>;uuLi z2~6pJnk=Uy%z0g%jG2mLptI63$2OnpsmqAIFaxcDGFBnoH-x_Ooat<|&j}PLJb)>Q zCrb_v@TzYq;#Z<#++oIALmDX#ey+?S?Qn0tT1*RRvc2+k&jcyhm)<2Y8 zHKLl7n$PAtH18Y@!kK&rmNhkADG#_JyD6OzXo4V>NRu)4H!lIqqYkBGD&^%2mqr~; za3xncl>|%|PJOcY##^?)LU8rloQUp`b!#0Ab@PedGXG)wP?84FoI~6jAp>WFNn|F! zjndlbYsV!oU{Uep{5B=nuMtKhqx8zy3w)Nu6RDeKY@}eq`YkNTh&XG{-tsy^Hi)Z~-K6-(saZ zl>WDct(Nm7oz+U~d~$unx6M&NjU@-xJd6d3h@W`*o}cDv!;|62pgp%|JGH!DI49IP zRgsLqX5M?8E2@b=~@I?&GCR`nHk$0RN z7BgOz=&pyGIJMwpWfh0#uepB~S0pNmLfsw#^+=m$tjy0!rZ$*>MztgAoCkjQOCVHE zk`G7+uyA*L?+|aWUvLSxHO2iqZGTA`>0}U&NAL(IhrIj61^xzXLe_Fv7h#=8@}p98 zrDrRDWpxA&unea#aNkpAVamXa%PY9woGRd7CdG2TY)J1rw`jqIe#j@kOoHK3)d9WlE47JsdGgCd`+Kxb z6^mG=bp*#%`Ud;CE$HqYUHj|xtRSTRL$0H*myr9V>U+AE+f`%*gK(pnPJ2MfFGcwG zLA~!x!r_dPls&s(6mKc~J08I*nrM#9!nbrQwd9_DW?mHt{^D54t7InQHftb45qN57 zSEZcUzUbw%>-IoW{KTNx3YNMRRk_cq5D**Iv!pE)`})JZyU5xCXV*>KK+1|)-HczW zQpVA!s{OVCr?~kJ_+G0!s26&X)Sl>VqP?=MQ=Ei)svZn)Gu)=qk%bO3S%%#7D}rIm z{bs8S0BWsvgZ1V0?A(6YXQ(dGEjK$L0duTZ=NMeWMOx78i6OojPIzZbluZqcj52ga zA#uh~FHD044GhPybMy~7sS8Epw4hfjB{LRECB3b^=VXP~IxDE2ot0M- z{5ErG2u+399(39Ya&#gW*Tw9%5JR3UNouWxCzz2rMAWhx93_3d-aZ0PlVo16j-ZMD_3Fdi!_I!PE&`6N%_~~#Lr~#E*$;=>Q#tPew=Ixse z(?ZYy{csZ@M}u@XkAUI6A2VplVWqY;-9MR6a3wd~Y;Z+Sbt1QrfJ^A&A_KK*zMlNA znYd1dTGEq5q;47LS1T)VSQTF|SAs;{B-auc^Yk?rum=gM9|Cj6A`>8P$VOoPh#nQ@ z>cT+MA*1&+1lxOyEudMHhwV*oP*lE>EbcajiFlgaquCnHYyeH-9_ic0rhv-iLIDQD z>yvTU8NIXA?r3;4l&$AI2YUBIgy&=JMaYV&SlF<3ZgmS5B@zRXw1+wFAv|l2Ko|Ju zoD5ahFPO~NXXf$6^+~b?;*cF0rq^{uc=9#_B=f+ono@qqcOze@Cx`*5ujN zS$}Scj2^(72N=w~-obqo!!cI!WE}c7P~}enyunho*TJT|5dxap23GkS$ulBI%b~hN zYW}6)^k0EC=-$?OSDa3+i9w7RW`UxU4Us7F6aX!D{)} zq6P8==#zW@v2h;V;p4rL>LV0Zi?5%s&uh|gxNi3mj!X|WUrv&9nR`;MZ`-L#0HF=0 zE*d|>j(sv7F-wYYUqoQ9R-2lCN4NUJQ6HYCGh?bB>0U_>>{OplW8zXRj@JDO=}C_# zQ~Fgi|B}QwGp0>4C0qtvNVazAci& zaM?Q!Oki*f3lAnr=vwLVlK#?#C{3P_kXCD|BpJ{cVIA!U^5ha5yY^$D~qD{X^eBg?{xCeH>l z!Pn|({BusLOy^Q>jRv)80K`DCx^Q=5*TOl*-PW#V$!qVE_6SRG1r}N}7p0wxFG*}jiAJCaJ z=Sf<+GL6SN{9dcno)D&9iN8x$5=#_KN*L z%3K1D<(HX{U|GmhKA`soa#6f^)(EVkO;Z^3R#qjyd{E5Dt#vJo`wS$MG?RaYD`B{C zP##NigfB~#6?9>To>?ADXI=6#rb?HQxs%KOGSU$&Xh0#5H5HD@JMgH-;wulz?tGrE zV)kZ>pdgcO0hCJg&O&tAB1@?H;CtPL(y!I&I!C9mWNK?-inw zs;lKtS(}5}xh#$l=b@F~E>i2`NFzK0=bLnHktjLUO&lR~Zh|0EroGcy5#@uPk3@l? z`8+!jhLZ!1H5@5Zj6`fSxMt8Pm26BeR7Ai_L$$P#Gw31&12`=!;xK}fQ_1O|l|_vB zV7v--_5I0ourV4iD+kI&;CwOJhQb@#P-P4|rFhcr}V*tKl?s#$Il4~Db-{uGDo*~$KM1GanKsIDBf&09B^KQvO||6l+2!57c} z#idL9?_VxTg})88_+;Eqx$s$mAOCxi3;!Y)z9g3h5ntrOA5=&gy76Fl14ny!JFA}S zA{RcDW>Ay=Vshal!#u2CW7u?H_1J-(5H^sM>>V5DDwAMSId@|fMIRs$)@1tPet(SA z=hNALr=d9@bXRX?-g!2pWY_cX73$S7|+rfHBo;in&y zbvsq*!Qb&bg+a?v!fU%>QcH?7;KgIPB)GN9AA8K8Vxpqj`Bi|&orcU<2^;rl^6VMV z4>L0i+T7`xTBTn-9redA{E^8bNcN6f5)sDFq_E5cM>!~|zr9d&jInNN?G(a$+t?{@ zD}aWLG)hWi5KkRBUFZ4yUXJc1!m{Kht=V~Q)rbFC71pUphdehKAeS3T#4IVAABFdw zyAjN^&(DsyI`HPVjMmHUkHO%~WJ)Js`xEW=P60 zIzV=1pCnA4v|x$CtKM+_E3xrdOMqbV;R>&yu$+NN|1q9Px?5eTIq509CvaySpVAEE z9RSuNSU!;+70VX(Z@7VIkJAZn-vZ#@P2gLA1B|#jWs8Yn5#}Z%$A_DDtkHsQY(0Tg z_K2*4LaYsIK_{Xe|C`C{Lf3_N%3Ba<|G`R-xxl@U;nrEuX}XUG)D;$iFEEwvxAi-Rwau;QfSykO!2gkHZ_E5e)4eV9`sR{uT7qQ zM>X5vA#fZMUuXlkf6~)*_AVd403S9{h#Yz|>*Vk&>3}XD_xE2wBzrB(?3fAaM72`Qqb=~5)D!H6FBCVw~?oD9~+2Y>7j=RFx?fDF^B!^UuSa0xRU zOUw%ps+gPC8`>6Qc%4p)N@dvY+T=tqFq`GJw>3b@35nkv;+2x<5oh3`~Y8OutWEbZqnoLve(rqjUi52P|Y5BC1}HhpWNs$QRk( z;5G6v!3MjFbIprAWXCGpqw~UA%*=db&I|(_3o0gN0Me_iw=`z)qvmC=U-R^fgB=AO#H9TB)msRMxCt zWX*J?qyVCo=!_|D7-^sL+NLYEwiN^}@7jBph|r>cO(nvp9T;s6do2`jOr3vtf};yP zEGtMbgXybb^0h2v5Zh8qM!hw?N5<*#Qqpu*K%0COiD?P?U&zCSxU)>`l(fiaD4-zk z1#BmiZT{Ba{W?i@EcPXtb~Jk)SCrtuo-f=dLYcSPF1($Bw~w$`1d_1E3doAm$0+Tj zvs{IDxGA;5|8wq522enRZ&42F`?6Ej;rS6Ztd_k6c4pm6zR*~UcALc#E1ipwAKw>z zd3Ee~S{Um#i`V|hTS)u>Hkj7^&MPd~Z?G2X%>`2M2D*0~mS}ZT;fux9SfX9L;hW5* z-qEhDyF~8utiAExpV?vx=tkrm?iqeGadJTiyqO^Rewx6(YV(r^S zP5_0m>|0!?Ad_QzgpnXyeWvHlX*^7K1}M z4wN{Mt3}1PfLnXFO(hWAnsCtzRHtHoGAYBe?4|_Qi|_}G`7Z5$?S!hWiL;|%%vu*u z6vw_8W~^RwAD@hO^)%YsGYLpqGr>!$wG2d$*O)Qpljr5pQ%rd^m`-8VaS;8lfr^&` z;^6iEKn!Jdg{7*i(bm^a6 zy7cdV_hR#Z_}BmTFFyGnFJ0n)3;j>r^^TU#e{|{3r2_YFR^;bm|GwD2FZSyLBR3Y~$lYE3 zj4mv+IBcEF;rk4e=AeI+fOJQhpwn-@8+X_1ZuA5WJFDrc#IjL&_cado6SxJrN6j8~ zRIxNBxl5f#)IA2yrZF1<)a0@S)BHm{ceRBpK&3V%Gc{As(7cInDgw@)Lu5M;odHXT zB#4`5;Mb8a$zH7p2h|EJ!p7Vt>OKJy{aCu?g!)x4+sIGgiafn$);2Z;PgKcg0L%5t z>aC~K+k7bF#voy7Pw}BphijDO(*ejDl7_26Y#@+8;4bh~>@gB3ic;`eW^>fm!?Qrg zp^x2JAqu?oW(mI&G`F7K-jt<>i$HH(dwSc=w3K%c?M|m9yY&-6_k-z3j2o~~Vlq`3 zL#z)ftSQ{3C{9f=(TrI%D3jY|p|C~6)q3z6kK{f}wr=-fz`_729sl9tLd@I&oy!m! ziXlpc*@x8^{Tcj&R0l-$3g#4JpCMz!OLe9&Fs|`B$25@{2%PQUl3??kYr@;$L*zk* z#}7uxS)m&nAdzdiH3D8N>9nGF@ULsKvRels719*T`o3mSPzsY1`@3~6!*`}}}@XE4bDa{?1&Zce@iJrJE}Rxb?f2%V2wQI|@g{E%Y{8y{j z@xL3N{uMsn0Cl1K)K3LF;$MW_biQD4GSX2Cbl!jot*592>=Ka=F>2T*E@b;;qNZ_Q{uRU&3nS zwl{)aCKG}#v;vpLMDwNW=$X!6ydwFsTB_^Jq=Z6tOxs|wYa9;CD~8)Ti?^6+Z)kGx z8r?}(?sRKa#g){zfz1bqGk&nX5g_y8D)hO8_Xko^C}oX(uS)`}LTq5u!862A;10qf z!yqoGqVZ4Tosbv}B9p0rg13fu8^J3qKqey!AV6wQ;ajnh)Et!Pv7!BmHO2}_T{p>a zDZ`vuHrpP`UzQOc674;@2`JYgP0_vEA!(=m&gdNMq$dQhTcVAr5D?A#6Yj7_aL{~;Bq1*-E@1~3C(momFVna;FsLD*hRs=Mf2-9!dx!-mqf zi$&sK=F!dMHfI8jO{$Z1mv?o3pS`P%Mw(N~Hcj{G^>iVGxfYnigs&YS7LGf!Iue=G zEvE(uzJ18N;46$Om)#qasVQ6J0Hddt{)<6{KnW5`PTA7D=-gXQLI7t~I)FgKLyDcX zV9Z5caV-t4DkciJ#|?Z;JtIC$nX470H0_bWG1QAk_ zPt7d9N5gJg6t-KcbQHmSuM@#}DvHA!#v>{lRcy9vY(sLuZiz6}$srhbV+2SxMXCoOoZT#fH>4#-MZWwQ){MeS%8WloZ+JnSj5e0z&!F(()WuS z0F%)Mw7ttIKrai?e`n*~#@@!#=-(L}BCX={#tO!Ly>x?+V{Ednm_Vy$3pl{@EUdCT z__SG@tc=`rDMvr7%Xp}F_FXe>>0xIj`49?sPiGn|+`;|{-Nc7SM-WiwbiE*e@Kyk` zRz6G_Mu{S|;+>iCM5)TJDF)5)_Ba`TtsqbW62r;e=@3nmuKal$C5b#H{V(- z$Y?CYk!)O>dgs*b)NG_OYYBRfk#P*v_x_tJ%7qHut#1YDy^S4I;>K;N8PLWxBmabj z*vZIgn3{7FH;@o9W?Wp(rm7fuh4bDd?3oZtWYZM>t6rq3ny7=)$+d=hU|djbm~Tu` z!I&e?*Qhy)h$q@3Mj-;#G10YaHp>N3s6cMqM2XdQPj}jRcOg#`Cp~UYxG{6gTd)hc zkM;R6U4{&mO%>u$TH|R^^vS<8h~$=24ZXc-Y7kvNTgy9jR$@f ztJSLzh9cxX7WU=Q-dx_?Sm%e(VSZEZE;3-wcODmhE#{Ov8+WlgeYKcXszS+@PS*2- zAW>tPS0C)PTls4rM2}un-Mm5Hu74 zEUZCcSO(5U7P%cuF{oC@Y8FQ17S6NUC%&8pv>VYq;gI%{Z z8*p{Yw>?X1TXm%aW-CoMT|VUpbhwPWt`@Gm&u<_iOuyy&zZY+Dx0W>Xec%;d+yB~< z%&o{GnDrK!SAO@Uj;I-PXu9Ir-JX;Q35L zc4PaCT75^cl8d@{SAi*M`Cq%H$2+lGrKd{>8B2y;Vl$T$nyuLy<5I>`UA5bHNERWy zB7w7HUmoJw*=1_b`Yj70Krx9ly4C}m3n#6eALq=SPQ5?Z+1Zdng*lX}V#ma-5=gRc zN>bRsPel7ituNKWpB7?}Z528CaG{K(Qvu5_=iE+AVGD@|!F&RbGFdr=uND*L8fw2V_ap;_mmN$ z$T{M=(CTxEDZycfohAt$$Mh*~j}n`HYJg^5n9x0BUfogK=BnJ@1!N1u#B}-SlK5Kd z`Fm{q_0z_dC^*0I=1dX|hu^L(QiRvpS&}Qe(|xMhX%r$zqPZ-kQUM!U zLWfLS3Ct~TLnLaLjYWGj9o z4x1_e)!l$)?At^<9!_Qd;^P2qt*VZWW%L_#;j{jbVOVfJ;9!w&XmkR%E%>mpRALzl zO|7+K`hT*Rd=b66lFzK_K|zePYXTD9LU3|VCr`XP8p7y>ef#Jsee|f4_qvUZUwN8% zhz>`?`RVRHH1LF({$nP)%}g~#2}43#MZ=n>(?4W&lXV(AEiXPA`pqxNm{+4l*JxEQp{$+o~_qfk5{T2SE}pS3Yhew{^v}|^{rOC zxUBx7RynMa$#WNJ@ZoU_@WmTC5udJ;{%l{(WMPF^`V*<9?ysnv3qpWC7^G^o_GEEi zta9ur2{Av-D&NH<4-Pz~i!Lt8(6+KX0Zf|4pMI%xjmio>bCny+0oHQS7pqPiYke!1VD+#!}+=c_aee_n}>o ztykH^@0r`aOCb13ScOB?5D4A@mtaDaA_;2yApmmG5K<2UbX;(!Wh9h}R8t>x{_k2lVP=Pm zqtAPH^m+d*6Jdkv)J8NVy!X{SQEYxcmBO-ZxzCPZPlKK8V!2-!BHt%Nr0?W^0&Bh4 z_lt=0`W~4{it1L?Fi|CD ze&2b`!ooK3e3F7zhRu&h<u*$<*&k3w|PYu;i@}$&uegwZWjU1Ij#zlNF$aH zJXe(@Zq-vV%YOcIbx+G4W`%r#)stWnt2iPWZcx&DH0p@stginW^<^AUjX)ID^_Xr; zZdH=8M0KlcFrAmw5RcY{s*GE%PEOY!)dn2JHxppI0NBQ8I0YLUiJB$U&@>ocnebOV z%W<1SUW@66O;tuRnAg&Jp(T%RVVN+{z(Vrlt?ogfn{-e*OtkKpPQGnUZBF~Q7ny*c zQ*~oQhYD_giWbXP$50*Lt%_^0;5E=%Jd&s@&RB(mlJk@wM|A&m!T#K}(~52}vG`4V z%ajw1^&l0OzA7(sRka&UI$)Zgp~0Y}vI;4>J!wU$^oMdvy=oJV&e#VRyM!s{+QIaL zc;yr?%n358PiLi8HIii2)qio<@0?7#$d$XIfr~%EdqDr8gSuC zS)PsK{{9&QcOjZN!hH`skt?%Pk=BRtiFbRY@8TuUD>vG9cx}gdrhY(!?fX+Zd^}~1 zy}NTX+Fa`@|6P?k1O+jTn40lekh=LG9`$T1oB2Bk^MAU^zbSUEpr*d_tGS zCbPMu)96P) zHoI#Q_=rfrUp?lwTIs4fVkoi%lE|WuO>I?2f zkdHxUbLC`yea*zVKB-rpaDn+8hBFV#f^qLEIE35he`@R@5duCM_TY6? zd1;`bp%|y9{b5srV8X1{JAt7MK`tk)x-&?^za8POG{zjWO7{_45s?`O%wLFTq)3s4 zq;^OxJofwE%Su{yH!H`KkhW3@wc0sU7e*|GPp}S-V%=i;n35b~h5IXf(RM<_*SFdk zkkS?`*MoQugyz|<26$RQ41C*M%N=iiMCdFD%7G+E^NmoaO{AKKgMUCnPYt!fka)=S zobYj;9Oq-DY7Ta$!9hMl-26V#e1aAalDXfSnp8T$AXSO5?tbs@l(d*L3#Y#9@SJf| zjVL7>j%(PbyTcuQgx*1-FBvl%HtHq6kd*CU4Y-vG{CeGMb;h5DL0^+7c;z3JM2Tyl z$0&&s(LlX~97233GSME-y7XjYWr(RQd6JQr~o5et)8S&!Es0Fxi ze7HceXJ-@1)fSh7yKsyCv$xj@zT)5oo?;3)z6|8;M5H(M6P;Hu}W(NUd%%15ckw^5e4#O$vw7w z<@$JfI7Xw+ThP2C&+Sy2P(W=cPj`P&>xHw7Ivpv$s?Sxg(Z*ZB)of zeuYCd>2_2QX(ES0mkS&+Jq2f@>hMLbk6BI;=++qrx#Ns)-Mr&{!o`CKcpP;q}l85 zVUok%;Aee(yRQ%TRHL<*IPr_=G1;phd1og@~z8WPpj3D_Fe?c*cG z)9L7_6MzzPcRlOb z^Kt^?#&m+q`V(mi!eM7L0IguMUcrjM?j%ns(C$%mLv(khqR(*u2OA(#8DVc^x(xA< z7-#3hDf67jAV8CD2yS?i&PmBz^jl*p%4QKW2cRg8q9-Rf20&vTWrDN)oM2I?km$oN z9bo5l*g8hKBm5^=eK;d z%7}>wED2=OZ+i|zwL2Nkr;cLW-wH{7>#;9jf{G4IqzkChnJ~?bgvz-;vP}s44b&eH z2mCgOJfC(@Gs!bLSKEwoNxfN4C0c{AJ?%_8b=qW5Km%sjCE+$to8lUvkr z#BxCzg~ z_d5{yMd0FfzV)BoYFGS}g&Oxa}|IJgt zMia-5zSpYZ#IK2GTL||FkDIxhhG5ue*zZ$`z-Za9k zwYX;+z#=hj=a5F=H_i%7?y4MzEEQ}v<~s#5W?X+bf$0UCt-y_k;RDgCD`*HLmbfA(*LYN@_XNQ~pJ*U?gbQ&qlpT2b`dc+H+jp3combauMZc zbt4O?3{HVj*vWsOfgYkbFJQ$w1I|7g)dCIXbr5AOVyCak-brUNn7^}M;!KXO_tTxv zIHJD%#V_I`8^^_u#SJ8OBqU%Nj2e>~8_q$96~TR>2(WDvJ})Z5mUY3>2qU8VYUUN{ zp7i+MeGF8O;7L<+4omKx`x}AN1n1>g5$uYUT87+9p(UGptB=VmzUY(XPM`%>fqyaO zR-ZgTYC~)n-ve2nNMw&|@H?gsFyZ(#XX-2)Pycoa&{>8bD@UTx5kX@CO(>ilPI_aC z2;;% zE3jg5IV94rLbhfsVR&J7$jX>9PsR|3A+3NVMogxPFS1%xETd;i!it9FtjM}+ zU6>oOVoT1DbY}$*TOjN(>jbpqulOUaCB#KNm#kjNa=DsP3x%LCi0511KWH4h*#BW; z=h?HZgM-b-6-^X}lRgQ*BDa?u9l;^NyZroB!m-zbRF2;KQo?tls=2yP0haPtQla zqvJ_dL$J@=YwNhfL|K{*W;+8IMF#CvI3M?@8|^~puU@-kWXc{QVa3L>mF|7@uFnXE$g+W{pLvhJH+2Y!&*b*NCo5420WO?^yOa4 zI&WH?Q_2^-I|0gm-GiQ)L&89IMorKYkWFfB1ESCOH?>jK3d6p0a@rj9FmACw6QTlN zVAjnn0djyPb&t~EF=QKjf$^HER7;);BN{x-5$+o9#|TiaU)FSFr@4L#X9c#d!t z*%P2fBin840a0FTH}*6w3YMCiKSe=j-%dW46|fdCFH0*Nv48 z-iBK|ZC0Xjl0~Be3`d(T?UgH;h_h5p69QFOxWbmU2Ce!^c6S}6nuAw;Eb2b$Kk0R0 z$avBpGQ9aCYz@P~O7^Ugt=(Q+l5jQRMCPa79IyFZu2-iJvz>g zCzI2!S69!@&gw)kG7Tu!@%;oxg09dj$1~^Zojp41Kc=GU1|W7_`ZC!dJ*2I!~u54KLfWVj`f`;lJ6;!Su-4VP5`v8d^$ z(dl-f0Ki)HacddttgWE%xCeDJ#d|qtph;_qxrBND2eK(%Mh{6QY@#heBuAZ7@x6JBnkF(3u3`Q5NL2&SCTcq06m28=QE z$E-dXVwX9_!L@$>aP*K3+&_E>|94y&0hxV$fA#Po$Q|e@MmrNKg0db8uxt!kXdMe6h5+bz*q;hRgqPZ}aK+|m-1)pUSVy10 z7rz6;U8V^ue!3IdHXK>~_BzzY)9B}BWw|+lo6AzBzk){iGAeaaLp%a8ke|I^1i8wW3Uv7;Y6+Xmx)1g@Gb-CAA!?#{;Q z>f?jQ`r`9Cn9Tv0)7V(T>gwk6rH7x~XTw0|?EW#1fc%25lisA?d3b+S|MKN(^!5-EA9nNZRUN#mh%@cN9c2%*5tKyPq)OHt0(N#&9WgdB;!(!rhCu z#Idm9b7u$!uNgxmahb*0H9laVJvesgcI&v=iO?QBQh)+oaFZz*Mg}3R*B37o;vSaD z`I)#2lW6Y#s?83>Ewct71YW6(_~+mM!=L@f|Jsck{J%s-1fL$`p5rQom3@4HEaYWG zR^i9}y_ONLWklH*u4P2w^4Burk3>c^CI>MQ=MUbZO=ZYwuWojVU%CQ3Cf6Zd^y|Nd zU^s-EzLPK?Q=~&I@lN~GPrt^NqH-}AICqBo&FmQ0+#f7a79K+wKEerTdMGk*BonVf zNV&z|qrwfg$rj7@-RQ;afc zRxNIj-ykDl_kv?EW&6AnGTWo`{)wFT=>v(o?mVA$=v#?xky{TW;p`NQujzX2UP4ybt7dkfWIG+*CD%<%kqb*27{0R0UK{`4mBrosEHoayZdrJ$!T~z%;=S zRWML-k+@h9-VklzyyMK*9(3mDh9C`Mua*_al}#q@*IdlC#Q(qEBZzAp*`DSfbd5#& zRDt2gJ&#At(Ts`YW%PgecmMhS{NF-<$Nzs`l+lg7tOlrf$&NMnaeuERyKBkrTC&5Q zSEWMb)^@G^`}nkf#^XL7@od9wVoqrk%M?H_aU&KLmfsI4eLzyf-W8k(L~+Y4Q{^c$ zSU~dNzNR|(X8){-XulNN2CorQ0h&VHj5i-2d@ykf_AJw;gO8E0CInw9H8F5G?b{q8Df^V*uc8d%$28X+MIZOn*MYm9l@F_KWd)Q-$vW_F>IoS z6Jf*47#q;YLX_@!?{!iGhvrpkVIa^Pp$DX#c72%`A|r`JkS$v|i&BnL1cY4i{R8+o z{b=|Vqq5S@9brZfz^~3|1fgCcM!{;9wWqwP?mH44Gn7qqt#L4Oe{F4~0g5O%Lbda; zw{SygOoc9wHKQJkRj`5BGi#=N4iZg7{JVVf9;Q~mL__&6|A)W&H~w>I9Qpsxs->U2 zl9I*waeqGsCFOmbVW9ec7@sZguiC?}ul|fFXG=S0${~nnOs`L*t`Y}LT{8Z_2ZHJ9 zU+>AH3r-5E$cZyt{7y~;fA@x%<&Tr8XO!=1w(4?nyYs&v{KbtM{J%_fiL?BG1h~rk zYoj(yMP9&V6@J{`YXSFKz`Yi5!Sb&K+#i>D8$yRNxf#mKN7D&3d|r21P;OFkkw#_} zfnC1`9b0vgClGhG81S>Y$eh>P&BIQ=x;C9eCgXYohWO!NlRp+LyG>i$%(3^Ia27(_ zk0b@mw*0DYJd}PjuPAh*-TI3y#Bc&&A}ulY&jW~WZ@&@o-|tWFvS}}aKM#cH0S)X; zdVD~M2YDGrM0i$EjK@`N_)a6bDsFMh?ZTVcW)p@<{&p5dxHG^OPZuw0;h=jQ0ebMI z5cd`nOzFG;E8>V2e%j05egof+S4G`7?lpAk2lxjnznj_d@C;3j;4#(jy;7z2{E8w% z7AK1ts^622(R^&!i<~5hZ{kML93A$c#f4V{aM$o1qB8_w8r~td!k4SlHJF9~71|5=!NbkhI$lR}Bpp*gkCZ7=nWypRa@LGi9 z*;JOybYY|5hBVw@1Mn~BO2eKQ~v^G+}Nve&mVM zG@O*+DgngNEkay~9}R88sQGX8mp?SV-`bDwU-*e(Y<^R%t1H%1Or&4)1j!gV1@2aFE%E;TCkmA?Q}XP;SjW@6jOaK^uOmh%Qa8-5JnLL#>Uwkz@HrYBt^UrH4`Nzw$FeJNO_@k#cf@(Ec!{uhHZp%nkaRAom zmes8%8IBD4dQEjpzR;Qml2S0wBC`DYU1C}Na>lD(hnFu&u;$;cc#@aPlCzik1R+Ke zU3Z8X(sX-q74ZnCf>l4#$z^fX0eWZOzuDh_>e*s}n+=JQ`QN0R+}u1?l(Q3Ib#*5tT6D zM~8qfSUM3a@`!6J#5M*qEnuI_!)ebPn#qL)Q?ST-x^mW$puFw8!Tk^-kHpJ@ee?tQ_OUv0q!@g>qNYw`7A=GRxA4&dl`b5MP4lg zRvtEbqcHz;xz$o4WEFmJkL}Y|y*Cya5f_`6-+HKP0iSWARVV1u+QBy_d@~3TQjXpW z3!*bsVh?b(8y=lZ{mYlw-%?&~k@c%y$j};u6kVON1&|$4Uq`@Y+c8`L94|k|&k31D z*M(*CtFYkOuxhJL(NtEaCR0Z&99@aXp@#*-0+im>{sRpc5X+4+ho&4VKk>XuA`G!e zm{IympBKep0n!J@DLJ%MqLe94Ix~=J(UrI)(k!$BG4%6s)=PoShcapTCz8#ud4!ZByp;rH6n{}E zMcP4uUh5T=b#yZb2SWDZ*{6Fh#~U`wi)N~C)g|GCodhKV#2(1a-k))D%j!8J^h&%- z3f&Xj9=ob}MPq|(T~C(u=YVqtM}sCYL@08gwXx>PVcKwN3$T+RJc}_e_oM(<{|12d z-yLK<;^veu?nG0jgJB(hbcFcgG%ju|0x(9h2^y8s@@kJ@<~O8;&_E0N$cc5OwSsU! zR;m+W!SGxqr|>3iM*V^F>?7hxPVnmXccSO|+MaZeGtAA$tuUQZno-+10RAZq~9XFMs-E!xp+}@6EIN{tvJeAXY zeklamN=i3~gq4NKo)Ip^IBBkXZ4yIPi3<|o!dz(XD7cQtS~ zT!%O8=bZJ4do()c}_Gu*PrkLk?OJu&crOmOZ z?BWb+zz8a9xQ&buOrGTGg2oi>-6248Gb4;buRI!)>z#jnGmb}sq(WPccL@IuSRDsI(LKTKUx5g6(z%`8bbpIma(#Pxh-o^Im+L?p$kVd63UZMz zp>?(mxk1@aJ70@$l>q@LGuc$>xu;m2qh&iexTkoLTLm3@RKqD5@Hc-M;lKOu|Ha?^ z`;8kn`2VLR?s%pafU{P6?A^3jm>>7|+D&U$QT93t2~2Vf#ZPHmPf*uUNG!BO^EwI% zCDD&63W*bV##L@wO>jMMzI|kJL8yTW-=p3TDtTPy6k*XKkX96hhMu?m>kS4Ae>`kW zd1=$CJcTB=-x(qN#|&>Pzj0T0K-p-HQ&|4qY%6a@cmn7A>K?>MR{fgxvIfkSvr9bb zb@~VaQ+2ghr6Wk+W7<1ThJz4k0;^S3>jOHY9d!Vt$A}q+co(zW_GEpxc6gcM5T0Sx zW0isq2euGRXHHQ@<5;j&De91Wfo3=L_HcE{{)Ig8^6quET5>xZ#IhAqMf)DBZ*Ct@ zfrS5{RRJXi1%Ta}_5>k5cJLrV=e%Ddx2sntKt&j2;I2lWCc3*2v!Nt1=QFm8>$h-3 z!j;^lc^uO$m$=2XiHzAUt2rxJba}RDTmm;s%#Z8YkmQXaN3L1c8t>eqR~{&F-2x+| zbe$c6ZaGmTvDuO+VenaE>>)|P&I0Vl;x$1iL@1q3UD|>F4;zvT>pi$St%}5ph-ahK zQRj$`mZQH!BR}-o4}1W)AKbX$F~)ZJ{~Tu^%(tk5!s;sej3q9NLs56OcIqezi-piF zr_f=jIPKo>V5;F*A5S$HE5z=5YiS{K%4p{5VhIfFl5R_wG^J?Qwv+KOd8kj08@cMP zRl-~Qi`1_}3ET#ylf;&%+R)vvG4t36x5?p%=Nh4pZQQp#2YNxlRQiem366#%Q=7Rl zTfP1euZ7hV8^s-^SDkZ&7Hf0s;`?aakIi$A7=pts10je8;9Gb{N|fx5_n6Z0nhvgw zpt{i!E9h|A<5(5LBc!l{*~%k-_(HJV@oA^UY~n2!n{Kw9wm8|+O}2{-lko%*8Z2&|x?mynF1HkDZ>d~HbU{j?2;%@|08om? znI+*1B+6$Am<6w0giSo_NH7JqVfteNbT!-h>?AuvI5Y7%q?SZ@38>kP&uG^mUbPR>0PnFH4lurnU%SRcIvit)E>+xJm7dD_7q2mg|f=c(R-~T@Q zR3E`_>DRq+kHSD9MYXB2qujLwM_5o1p4odbOXM@j5*Z^qM={B6!4ph`ZDbe2m|sY~ z11Df(emArAwY9Z)ZP_KH9t7`{Sg+WVElC2!rY6oK(Z{t7t8$n=-xn5x55q)kqUwh4 zfvrtkV%Y>cAPMimh6>rME!WX`c`Ke5;ZZJq0WRMnkfw4hI9jqET$WtnZyV1xe|WOB zw;8v_`ShDpkbgh=)PRS*jzVge3# z2-Q1&bbio0Vla!^QX#J$=PNbSbbkpwv6FZ>loDi~Hoj%;yAC|3P9X!>+P?if~x1+JVU3$z--mDM|MIxQ&tWrp+jR6l9Q_T@oz zcqI_PY(PpDh1;iMq}<_8uGu%nNn+lVibDnr!hkt&!lr69ohqS7nG27>4ka4&1A_+3 z1n%h^)4@1TF$~2CE{XAwT?PW8Y7h%ZX)1Z4P7Jek$1+t9X09D#gIJ=hjl7!LPF;oP zwOB6+bZ=2Vxq{SLUc1vW{pN}#BVp7OlLlj0JKQPsKwgO{>PDbvze1Us?>O}4J4v@4 z_JbBl`cH5hW*^rv2b2DJ8P&U@k^D+cm={frx?N)!|NeN{d831Z2C`0YImT0RNVXUs8 zAg&=vUea}C9>INp)`HrS293T?OZLP2?cQr#d_vsv2cLnzV)y&(A@jz9zlH+-u_v;<||kkM#&dy^TBq79R!aWFvA ziBnmymRHm=nE~B!c{IZRBPLkj#Rw=waVK21Zr#YKa#i(h!m*~>U~>$Bn;cEzNZR4K zf$F_p>}~reJ*3XCMzJSN5j=uaOlzZmE}QsSv`Lr1ZaJ~c(ao-;#}kL`BmsA>wgaofi^~o~wux`)*3t$W@pi%!*n3I| z?n4b>8!4CmSOZ`P9k=HP#=vg~P}+e~s1y=pJ>qL4Hd6VfC9iIU9A!Ylqp5V0;VNZ6 z5^l8>xY~r5f*kj7iV6S3c%HrY;V9w!8f~VA+u<(DWid*xUBL1XgA@^k+(iv#zBmkq z2c__ZFqB@w=0OtLnlZ9T8Zk7vV&@g!ANx~0Z$A^!ipu5tUzD>iL`KLqDLE)D9yS)%k1u=7&qY}Zjtp`JE$kN2iVGTyc|KiTG&-=y5ObV+fkJl&*IZ;BI zxof2e#9-9aMR>O18Me!>9ZG-p3bC*we37AtcL@+93^{_rFd{mKAI=M~ z2&@C(qO@(mRh;-bd$xLl#Gb3&m5d9Eud>h%LA|=K3`$`*-wM{1jp)OypiQ@WP*^F@ zkzc+NP|aH;p(bt%1X{XUW_Ur=^0EOqOmAR`3_@7Wcm&E@Q61hq)eE*^?wR6#Y)P3i zI$bh8rp8K#Uvcm~BeBz$B`lqe)46%h9IWfijo4Kx4BNfH*xlDEGOFTf_X6C=>`d<)28#oU86u(p5fU>YsC(*i$!U8!)YQuEN_T*`=3OvZYk< z&nKXF{!y;TZw~4B-3^}K9eY}OSG78GXRyJ1TImE1pv_AsAce$dBAUb6Z)v=jSMkXv znyj_`Rws?XBIpVhTA0fa(%Ah>UoQTub@@5FMIfHIRpX==TDk1)lGf(}K(oO=;lU!` ze)HS+ST9S(8;$(e)WbT89x&-{wB=J7&S!Nvpf&qrxPDNEN2t!I4AI|K4b3)GtW<>J zs~|2H8q1+>RjWiATlE@xP&-uc^NKX=Gx{P?RCT~%Q`T8%&_-4>+H!)*Ld|*FoY7#| zP!?*^llY7#1AkknNzW-}G#Lb;vL+o}L;b6-i_+ssrll-VFdw%M+b%th2hzU`lC$^9B)I>8z`0 z1$`NjTxoaJw1f^l5nXAQ)wG5#J&|2$m({e0EB^HQYSfQ=E^18Dv4N!0qO=u~(ZgwhCC#_Z7b?eiBIXa&*r z``PYQ$6zp!X)XjDAygAdu;8eHaAZ?tX`u2LP-PPO!{6~*nCL$`*^-E7$Qg0Gg!4tK zBUcGoPL3g1O*VtT{MH9df1Fz(HFbIRLPD1H6W|6IUdLY8-_&*C9bN*eI`#tJz8p?n z7KGy_tPkGxlxNG+^TlzEjopUl8j^x(G+)t#QTGiuj4mDgRiQo;?{g2d`jt#`y-ypx`tvSrwZH`_cBjHN6*J+;(hwW_tcnB82${UT0sSWPpT-;zd z+1I$e0HgKUS$!zXgtv`3FC=MEy*>;ZxHK|koVFeudzjx3za$PZZrc&G%wQpxHSnA| zeK^T}VyWH$>)4QnUzSp&DmDXRDa4%7UnNi5!F_Y`P`x*?kE^iQ-m8ngK<;q=cJ6(3 z-en)0PT~Cr*NzY`!PVQDPNJ7C6L|xko669UXAOe^;lo~sbp+If31Fdcn$X-L#^%xr zzyyX?AHNbL=SpF5P+M+2k$Xa|KsyW;YdC<3McfP!o&q{pBx|XIZQvH{6g^8~6xd{i zImn=X8|j>vkl1GPP$>7V0pSCL)BQoBeXHIzG!PG_Rq zbVG%X$$bqXj+9_qcpFB2i6e)l%fty$gprXsNZZOkU62_TZmTMg;7&;T-E3(i;Km=!d2$Lr9h_f zgw7jray5P>FIz3=x-s5LW^7-tyrUTFbcAwKn_HC3Po@->!v>fb52(P05%CGYlrU*^ z7pP#K+&hec7JOtJnu0sz8}-x*QB9jrz|6Ux|D!=o#cLog?XeC4HC?s2U+CT}%OVck zptc^l8Ep`tn)k=;Ueca=iJu)aD;cO)*VJQ14qvayf{exFnTwJ|vY#qx7>a|Z8~rZ> z@`xNd##JwWcQRtz3Hi}_8b7dD1_>+AlULTYT{-_^A-dz_yLH?1j1}a@U%EP^>y1pv`NzJI=_W2>GxlC+6Xg`oP$qm9 zaZQ|lc#axkzm=1iyPSe3HXqAoSbe0p)Yd4{sYCXBh}k#)_y5xSPyd}8H~9aZi|9Hf zNTOGGvN}KR@3q47TH$F*<7{t z##xQpM;>-H@(fQvU7XB2R3$ zqAb$GZ7y_XUfY(duc}YUuy~AHHTeLTf`N$42OW~WHk6d(jm6b;id7g4rumqmcJ|Sv zFy^+iy|eKvJ6-4#Cz88K< z0b3k$)SXnJCiFWhJZeZ?TlVs)UOI}sD;Cr==UYoB8!deCpftnj#RoMJZ(mxi;l$87 zPMxyVL?6FQV7r(%qVGvzD=K4Hp`p^uE4zD6fy*29Ww$b*5dT!sIbIPWJwI&Owcv19 z-^7k$d}3019dbB2U55V1Y&cOF4eel((8_nGtbKDnd9OQU8(gX z?)nNXDRHwitSU0CNO2Qayl z*1akFn@Az0G*(ti#uV6Ebl1JCG@k{Qm@g5>If~zTv)BQ3qH>R`XcUVp%r}s^(p5Gw z_nv<}*O@c9N;_KISaJ60lNbi!4R~mNkD0@>Q%)3Gs$#fWLg;O=-FSYyP7FH1sgjK$ z#-99ZLM^EeoGe*^Ff~@N>7~1CC}OXpW-cV_q;u|#HI^!PNU}i`#!&1-3FaS#1vSE3 zn1thBviLBb!v3y@L3Oy%$KpD3ZFN%HxQ9c#gD6jQAa3(Ao-IV-S957&gHhjw~mDA@=W z_z>)HnxvLx4A(xl>L1efF&kS1_hJSRGkoKj6sO9y1EpBu(I9W@xb@dB{)7MLU%hdI z|NnfRt>XaRpWeK|8vMAw*XE6D^TxG#qr@d%G^v%j^!WDLpZmw^&kYBoPMvHKCvZ6p zAgPumi{bTFdg(J_22}nUafr-$e2(l^C-mGybUpghd(ZI;>e<<^SFOvBw<58~KhfEw zB)w9ZWW()*tt2A4s*Bxj!`IJnH>R&)iX+tol$kFi>a1(U1)VLCJfbu@47~|3;O0!n zc_b#%mTRr%zDVy{KHe2|n9|H*gW?fLfB=s}i#2UN)2-uPzkM(?m4@anGJUXV^9ij|=_-HrW)+ttcjt4n*s;bbZ3D#BSz8$ddl?*OgZQb`jWz_^YZJ@9w~ zy47%fYFtM^X*vckBeBAI1eB;%7$EEYUw@r-=)= zGr%!of*n}|5MiSWI4?9*=8&xtNNwfO3X&Gj8`3{PorSL3alT zGKa|QiJTe~W~B)#RS;NP{S(C30R2q+4E)I>_;dh8Nn7;OGJ))1hz<I@}(r zMF6em^}2=1K{zP9%I*Fu=vt*1M7^d|vmA>ONj65;X^<)06O$VXEiFEb*ly2OLmwLI z<^HOz+l72nxROFDbbfJJV8g>mfOc*S&Z&c zxQrRc*~) z5L({I^*mkhSi%peiBffTs+h&*bbcmLYeAW09#k_NN7R^Ncm_9x4H6|Bx@vYTfuA>6 zc)U_p7Ccw79YV(E39dNsqOBb;(B?cCa_o)pQ0{;*Q6n5#c=jM&%(`HRLGyHjFjC=s z;{Xe9wImfl=5ql^>&AQRX)!N=YsSqr2ER1$8zu$#ZAr&r)!0U5B!8W(nh8SYMg>xF zHh|x!-24_})?$13#e)oIx?)r5_&CM@caYM2s57n{S7t0RpGqKr!2)dFKAIvtJLCt2 zJe|ilrfAy=Az3HW(vh-`C?UkXTYknJvKKmR%T z&>ScvUE$nJXOM1sZm!4Y=D2+P9mDJ)zu{WMcH-Ch?*<26TRMDI^O_)Uw)=D zXHh-2@;8+%$&L9+Ne;Mi3HtHWS%@U&1{wdI0oc&cY&tIo6+0<^Q+%2}3BSyFrWX0m zj7E8mhhxX0SISFw+|Zp#$POer>!P-Fu3X?mw%&NV)9gB#V1P4CJa+5tLM+mq0;DZB zzPthPKkENC|KI<5^TrMSe|x6Bk753C&TPne?a_3CKrmkI$J+e3zt?KNYqj6C+V5KJ z_oGw$y+>>)Wr<#eSGXy);Q~y}Dq{J{s*5~E=%XR-&OrTvOiZ~LR!}IK-K)C56NKgx z50zO(Mj^OVVIJR(nx{|b#&y8tWH>-%7iba0MY+0`A~!GCd9>_Ei@@>L3!>W8}jWT}E{|s49k2+^2eki0qxww)|S8^qWPCBFfs?qGeGI z7sA@}ibKEBt?%(dfR4I)yi!u~iuy9)4qan3YMv94CGYgHv!CBTeTZp@sDLnd5|0fx z)*viE--YC|Fcw1>HUbtirae-wB5S;4n5Lhf1locE_5?Ovl$2}^C}_<{7_ujb@SC0a^h4B$w|XOnpfn?Ow~w%AJ)E5~U!Zx&a5Yq%zu02hI}1F9j`-|w zh+&^-m`YJxL+M?=zj_K?^Gz6^p?TJ?<}pA&MTQ?^UbR+#3gx!s)s>b606IEcBty_W zgzW36_S)LJukrn}@u>A+>3A|Z9e=&LdIW&ik6<;P9y0cwXiRxzL*>=(y)SRCHSZm+ zwZ8ary>s{Q@NT!;{BmvW^VVH_y$wgN@e;DuYO@bN`NR(wfa4uPtca-T5l5O?au7QW zx?Kac1Wt1^z3|AI&Ck~{kh`DXx%XxF-un6%_gZ)Fe)Yvy2n*W&;_erRxsef&y_2Ib zb4;8u|EM0e$;#wWX7v!fZ`Cc|Eyaua>ELJy7bYhUmOSDqFJ8)4xmH{%clU7v$)WIj z^%J|IU?JK{WLxi

    08pCWk|(HYU>Fcl|XYnfM{$_^dOS+NBOx!Bhbg9N<+JcP|(V zWqjOh56^b6`_K#$<-2l)lsDj?hnu`+Le!qvEfZgv6BcrkFBa{Is8$BNT*qVF zwUWB>1!Q@GyRzWZU?8p=QyP0Okg`_kosST-7@<%7#=$@V!*xfdiN8zET7G)wY6?xA z+cPcV%rj$QHEq-5U5p2aBrgr?S`nV`vDv~H^fp?g@xk*045zl_d~R4+l=T8KT%q$g zW6iu!SDg~9jhhf&E;ospRcF$`ZJxq)`ct3a^`o zt64ne9%$HIGnK%E0rQ41bcCFhSs)AB5u<$a<1*FTwcFAqi^wHD2kXT_2QjuB4b>9> zC@8%ck*BXHn;hCwa0+$A@GF}+hi`~hJ9$?OPj*OM@Jj-ez~M(0uU&OBlfe57=gw}pkB6bu{94(yA*}* zJ@9-(A9mQg(AGf8c<)i?+WA0(4!R~;_{byhJFsGBK_{bdhH+d0oZ!yiD@0BMq1&Y* ziBTw0h`$>OW(~xFCBF@6Oj2y0NNgbydMMi(ox1chS+y4Hn;jd7;=bCt1odSM8}>Ds6%>{!sRg#HV0=f?kum0h z>8~h7jLOa5HbCKE1fhJfJxn;7FK7xnNjHi3wvg5|ny?i}Y@05QS_%I)uLfjglCEo{u;*x0r#Zw zDD3tzPR#?F?&Q2oxRTwee+i3-tXy%YYqSyR7-thoFpWo!Y-UcSp6xI+7kzbj#$jv^ z#KU)}V=XaPDb7b`5|?oJMA<8Xxe9WncsxfIbHn^*v1OC!B_tIGAehsAJhEglOF^b+ zxIaBi7BUgr;#DnegFUOoyzI5fYy<^T6@-;0u<5pg+LYd_?C1WqnB@Jjxcn&KD4UtOsBAD2J+gQscs*muGfb^VWO7i9U*F69`8HhB zMi!BWBe>~rANEzgsc|76=k9H0YcAix-+<#oFu8ev(>H(9WM8jIz!8-@Q)$PqE z2djEo^C+X0UpIN0E7m*M*qVtx;%+jY#AJ}O-;Eu^;# zCISwPm_2AE9yNPF#1E(Vlxzm@5=cl^C8T~|iQhDN>PQGbJrcjMCdZ3(ec3cVVOfQv z(GN*RX6j@a8K=eTPmIjOb94kBHlY;>B~*e!oEhHF%FA$z;{hf2)@?RE`xu)I8>Am_ z7;I}ecyWrOgRP@~k?-4;lg%~Pv-N5-)v?3ROM>Zc4Qf~lr0TSOY``Y|5>kYl== z3Q-+MVA_KGD$i781W<4abrIWQHBkAmyj&p1uP$7rR39bA67kV{qttR94@MBWHHF}S zZR9~kcp+kh7RjNwtLUV5Y%r>-jJx3K)@t_LYAn|&=?=%BgZxpA#T7jHIbi(feq~rp zFhv!b)oV0@g#nviyAlN2nJ;F&cr2t;=;m3GSi)YH&56TwwexY4!aA?6icA4HqT4)_ zd?gS9`5ngsI}(ttEf_kQj78OoL20ZdPb$Q1EU-%0yTjAzDPLjLoyZ$41P5&@=eCiY z{)|_Ph1z5T`s#%!C4G0XCQVBUw~Y87tIn+yxD3Uh*z#73byC^`*-c!euKS~qb#8X# zsx@p91)mnk^-x%UO(C4;fIJ?vBbKO#HMKZ}e8W#zRQ?hG1q0{SKtriOZHJvBwSAhR zZ}a4Ia$YhyKq9n*;Nh2S2osNmILs7yQ8vq#?1MQ6@@?Aczk-J6bUx7-a!w!%-FI|BXL zojF+UgD8XakIKMch9dPx7dy|crndk?iTG>Qd0p7awP(y?QINX|0{WLVEKGc|%1z!C z=HFzkO15lQHeE9Jl>MktzGFN3?X^6pSvIX52XNwBdKn8_F;3CWjW@TJh64FQ?@N}W z&Iwebc{Y`fob%Oku!+P)wOCQ-<5Yx{tWL=}y+DSh!tv2DYLmg*;;K<`5(H}>XGA=n z$;j)=c#&>FFr|6Pd?WOiNafTiu}Q08=Q%GCglZ-1e}*ZOO~ynKwIiEJax@i+dNed| z2QXs$R)6_J_{A3H5+WwWt= zfXja9G6#zmDIA+)D|#Mi!mta4oc2Y~DAK&>MWBHGO5))_erN4(qp)t~(7CpT{V*^L{2|5vZJ{*(XWKm5=Bw}1P_4gP;~5l7mm z*w(xQEo<@P{+2t?uHUBKMBO5wQ)XD{>+Gt%F+!g*wJFiFD#2x)C*KHgA7_qL9%$&< zgku1`UuZ~Lo|E($t#X}gW99nvzPNQXMdXDD3Vx!p$ibWPfcvSz;3?6>15UAm zhKcYfXC)va&?wbJ=n1{^4kJQ)*clH#o0wmwuG{hF57|*z@J_c2N$vhBUI+j$bCL=rV%842i zLlt|U*yQ4MK(aVyygtBqgn?xf+=A7iQ1}*YrkrpR29O+a{7J|kWc8TipU*xa$x%X; zhmq8*!!mbSE`WX2ru9c{BGv|?Q!*f}tEVnj)o=0HtD+(vL&TT%69382Ki>hfKtpKYigmZ2xz+4ST+sx4hLtrZ^3gC9+U%I ziGZVNJL@ohJ0rY+H#4)W@W4PY6L`e(9ci%--&o(I4rCLxOQ-J3aXFLI=m6)VV?!aZ zzS>fTuxEC*BZ}FlP|vAbfskcWER@%NBDh?j55E|tU4=Gz?#-$BsI|yFiV29bdrz$& zA&;$MLfG@pBy&f^iY9gu&fl>n4HhF*#vVh=QX8RI@qhn&ka>9SZ;sQ5xRxJ%G4W(vGtdKVnYX61wP1 z8jgY!pq7)8pGHvVjonl#Yp`ZiBbxmTeJU$qP(_t@{bQHEp+RCT4s>o7=-NZUs1zIcr@3WyS!S&B)xS__uU|e>B=u zaYl(#w)&5PHg!}ny5!}Z7^3{HYvI@TLc}?rgi};we;)}Il@bQWSB_#R^rF~y;dOa zs+-PsuZ4TPoeX*l$v}S_NA&*r3NB;vbSdoaT7i7n;hCd5h4cF%(o24~b?|iO#Q_1- zc>Xf`uCce*cz*EmmvZih#}|yec#86kM_b!l z2QT4>%7&h79X#LM-_M@x>}8E?x3PDywee!Rv6t<>*xTLN--L#KAG#bi`t9=<*|)s1 zjZ<#Aifkw>B&~=Ln&33wfe{uCaWy)(A{PYoS#}54XX@SF!r^4`thJ(>xK<#4qzYue zT~(`0A8TmA>H^&9s^88Jaxf=`fFWbk={Dm_*4@z&i-yVJi!Tj6@K{x z(;WlaxPe9GqtArL0G9n;>lI5Jb|z;Xu&)!uv+Y4)qPKiyH(;ayXs??Y$4OQuO^xf> z{lk$cBRA_ub=5%Q?kZy#OvmhtX?v0W*N3IOw9@y^-L>Z3FK^%dyxIKn@Lu<;?!9~K zA4usdQ)5(72oXW&Yq1Ozg!)!M3>FW*?-aM`ef>*noudKV;wpC9w|axchSGC-To;0Y zoSHF*Va1pt%mci1!2ge_6l2TIDcas**MPOSJ!&2u5g)kYjOb+Hq9QcUnm`vsq0p7a zRf>M6OYQdvTN2ykE+p*|S9t9Nx%x&>46`NPyvP;TAxvRE*%@Tdnk|$;oa56bYS0G9 zadR-)lmjSr5ba}YjbV(Isb zK>;^0*d}hb@7-Si{EIu?_UE@-cRxJ3-V(}!-mq1oeR$fo;38v(xm-F6+u?9V zWEn(X7(mz0oZ2Ml7kk@uygf(!2_F*#OTqE8YPHe!l&Zg;+1`|{46Kfq$z_-8JsmEp2v-OdDr0lF3VT+p5qt(uST;e`oP z&$;{iVzW^?M?el$(WLLp1^92sVhTmw=}}kl2Mh{vJ;LMB z)Y(d>2pHLc^D2zpobTtk`FgmT-q}G1g}0tHzTNx*2b*F{6=Y+vpxl{(8wke{_ zYDG$kGig#xCw$X;Y%Z8=N=Qt%zr?(g*jjVSS-eyGYE;?TO^ZI))gdQBh6eEn1@XoP z-q^~Lyog4l+PeJIXY{BPrkA`BHyt*X-6)a;F3Lrw9YY-&8GVJfOMa;l7idXP$$ude z;}2m*5yM(CRpRAf57*bqqaS4 z+4PlQ0w?>Nc~i=uo5Kd1Ggn>4euA=`zjDQ&G`9Dn@}X>gls#^qmFd_V z0>oDLIc*6Ymd)6;#R6DdSlnrnk0Ho;@Z<11x!B4Vp=2|qzc4p+5J*WHiZ6`U-0g&A?W1lSUB?o8y%41e^X9{9z*i6tMkKgctH~ehIjrPm zd#WTYo%IZgaw8Jj6S7N3Q)y33D}u=KT1q>3*i?V>Tbt}6xXp2dVN^qTK6+!61-!mI z>UctMJ64+j(qXmulkNPPdHxwPBuUtOzwRE9yb&@1y$exWO4YbLN$k+ zIi1m8%2_4I8(zIP_G{G zWIf*$n-kcob~D-_aPV*=XCe2&xbo=lIxlOR)u=bEH|Z6*Hi(p-LN z-AjoF=YAwu#fNV2K_8Jo=XTW$6hf*^4j|Gid?mw=yNY(Ud2nJi>EmL+Vzrq73++}x zO`G7q_9;Lv;5AExUmo64VWm9sbf=S9TP z>g~3T^`&<>y}}&p2wtOd@is*5*`$^;PG5FAf%i-|Rxl}=D~2~9NG{%;nHOot@~iUG)l&-mhg?uoh8SfLJ?Sski1b= zGT04&1iYtG@W%mLz0W$?Ap(T!22JdCnU>ScYt_0Q*g@Db&v;@Bk zMT~d?$Zux1))`juqu%kZ4Cqj0Tngy2n$dP5zu!|xGNOW8!O_u-Jq38xlFacqpfq_D z@tCEicLug#oNsy=)ELIGIa#)S=vMY-84-rD3(&P9mi^MI^gKwazRYfMV@s;~Ze>6N zIMU#5Ixo2orYDC`kUMw4HPl`Ag~RApLmwDWG1QPN`7%pOx_HQ7fxcA?foC$F&2YFP z6Tw&i7D(@>T&9A-``ixV#7`1J?p30%DAnd*Fk+XNd;2)&d1p!5)Aax;>z47-xLVcf z^~54aI+slx9p`$;#%TgWQW4# z!cq;DzUHAjuqjuyl5$xf&z-PulucRqQ&gAiO`E%nn`BBB?&;jAv*kI{ z*COR0;JcKk7oS92oiEGeNdKJF8p)FKJVu-c>B|2i!j_w5yr853G=iGlJB8d@?iqS%+PQ4+6XUNqE_;60>7-l>PY0cjI`kgWF}8_=T;#h z8^iZ1$=40gA;N^QM*xQUzMPioy|(Uc-%=x- zrChaR&S-VVsfE+`cwH3cD1(U3=LqE}xt;(iI~6(~9q2OUEJ zb`+%bJju%M2oPKVdFEZcF=PQ_m`PGbQQZo`Ih8NnM;aou*g#GWkavWKz$L9$Ufm7Cd7gOn>Epbia_6_I_*THY?n*;#8GYpsjw@QHuhLA>$37zVkNT|vJf;e z%`2Ge`aNV~^#pYCr)fwNnb^I9Z3Q<;fdvw3Bd{w+<_@e>fC!vt`x5!)w5;zrG|V+& z`UfqUUoE~ZY&2=*uo~f;t&8f-eWz4wXg4OFGL4^#Pne*l&P)H56~Q9w z-&=b0NQsFBg;b+6RUa1d+!C-@yzneiz3w7=MawSoR(hpq`Il_ceUgy}s^;s0VCKt$ zLnXvjV*mQ+h-)3kvv|-sFvlR4RjG!tyuL!(dT+mjO6nSgL#mLQc^s7B;l+I}rR|IP z5tb@M93pCaRsMr1W(sy18&wMX#iA4@-Q?Du&Bg04WvbVIAsX|v!p76lSJRaocn64_ zjmXFFiqc3q-@e##Ud+DHyoiwB%j4M?Hecn|p!3mxWlWdZ$i1#E?ByXFPpy1c2Y{ey zrgN>>oR1K%oY6XHsG)6)o`ucyPP)N)UUII8$zkJ3K{Ukq}~> zFdYgB;UDD7tu0jUng)SQx+9|Ipk%zJObx2M%T>8`f3i&^O@waJTzjj zQWfuM66hVH6pxFF1ui#W8L}rx^?bP3aauvImxh!agJss*<`z!poS*F@c>RusuX_?{ zUJT&FQ(EK@%%=~R1RB3(*daKJ#9T&%d^Oj5hXEgBM2p+(OzY)=p;0{Y5ryW0LasaU z9|@@BVkAgoF*Jaa+JR~6$@b&{kJ9D}hF1lXR`uTHu)Iq5uS@zM^kS}G$xR!b9#9Rf z<@^%dX*iw*kup~d2+urTC2=2WTqQz=aUUY~T-`_^>{YE+c(gpDRRt(a3l|)XuUF{p z0s|-&w&Zqn=70cvMHs6SWO5uMgdY8SqYz)vnG_?1<@P>;&Voo7Jz66cV2p=TrtH(k zJ8ktK1%bN<`Nd>|{BZeYK-;*`QB{Zq^Z3YT?h}}pd&0j(%!*JRt`^j`L?eVhjrxnl z&+Zqn&Qr~-!TLQgkF(sf^^$DVOKgjYCs3T0?d5TycvaeA9c4inPeWItM`!M;5ibI$ zl8Lybb&jbHehU=+aA2L^`30aI!a0KLJ zLNFg+li}Dp?Xo42m5=UAmMxEJtOPE_hjSNvKR;mw zMZTp1BIFBzUF08C!DSO*g4&12LTNmnd+8 zv$wutaAr8@s^P&QfCTzI?lez%zmchy%%M2tG5#ua8BREhO>Zm%rchFb4Ze+!bh?Tz zev|^d=+|5X36pmK@wE#`;okro{P!xj;AqwEbept>aX|&|^j=>k)&~ou#dn7|&#EJ| zMf2)F0c26pxKFrMmqcSnxWy#dZ&*_m=U{r85{Jx&4kS%@xzH^EfvH9RfyalPr zdFy~Ctwr+P1@P^U1h5F9i}uI{8rr!2|Fh*%vV|>`)Rn z63nLLJ_$nuucH(a-{FK7g@X(g9h+-*8LLSz^^?g-2QC;b6(Pdp_=d@yb(gGXkC4!h z$-vNoU1nhk6`)+pXFcq&htRJ>j~?!KrJJT7PZ{ocId`9O#eti18T!eneTkns03)f* z&smT)1;YXw^&Dgs;%O@dtW94#S}G2Z)WRj_|UHwqg}4q5a9deo+H+EPTQ!R zX`;8h8bFR#@xU>r_-B9uhb^W3q)^m%hKW(V*yQI~cZ77J8Or~6NEE4DB6UoLE zApr-c==d6=vI*nNYca^u(Y@vkI009E&4TE%K0lE?hhBKE(~3}0S<}7o69l$kK9*vT zCANc-F%+wm$t=nbiht^*);z9g5&hTc8UVmzbd0zlze5lZL{Em2!wpxbRDJ7SUbHcm zS9+6UR0uG%EfE+}pvIkOrO~2p1ggAFD9<@^U-NA7RD1ciuYu8{ldu|Ch3 zT!C`vC*!G}|9j6p>1W2gb9|#{2X@nm3YHs;T|rZK6|ecY0y8NVjtkupvJ|zDoB@%Q zPGF=OovYO3>f2x7a1Kh2SzYR~u4~;fDy8@ZaNSi9nRYIFD`G|Q$pV`YBK0j`uTGl= zdY4_)HDziJM~b^x@II;VISIYVdd+a0V2~|H;}&7b)b(E?hE-S+ocjWre`v${y=B zqTrGdee&*;-CzC5pMG-V#-H7|@%MlAYU}U+tDXPjzh1d zoR!8tTODii~*#}5;d%H?GDp& z--H?OW_F#e?#G<1uGt?RRp(8!J-52R6BuYk%AZx_50&r^K5r+(!2uFNTCjuaK`oqT zu8CAxlW{#xQ(xUG^ab6zxUSDB^I{9;VH&Th%S|V}e*L>n^VQSl`1o1#6yaP%pDKBz z_F>(m?r-Tkyrhu=>Amo`vjpa)TOXaxWbbo2Kx$d^sEuzclp$Kv@dUoDNMsV!cP=ql z2N~%gi;%t%zf%iX%d*^jasqi25hV~!2VOcFv-3V#!$TZNyk_VAsyu?oIyoM;>)Cmqf=*2qB+QY$TP~V_)*!WFH;53uy4c>v^MVPr|zk@Ck z#yeP6&cv|NMP5$vB$S~`KLh}fz1OO{GPr6>!glhN4tx@k3Hlb1L z!P4<$a>~SZ)TY#runN;dB=0&AC^C>XhO~OvZg-mPd!OI!w%T8II(P1LzG@XSX4&lc z$EU*ql$3+}0Io=(>XHvCKEOkoJOKzYth@As4ICJ;)a?vD3!@=W&1FHPm0fIPT-5^R zN%k<}7HnfZq)Wv-nE+AM&4)DG0*A4$_6DcSQYY&G>)J$eBC;M8$L6FRO!mco6phAl z8nO$+w7J&2*F0=BzxZ+;K)u)bynDA(gz4oI5V}#{a&#Fd9?OZVOOo@E3-=Ak;uzSz zf86Y4jsD4yXter?Y0y-+x|ORvH^G<^u;&FTcRRf*b*9b15!@r-zFB+)0?lOuidfYB zEd+f8Q!@qXLp`pdAv!M2DCcwq@fe5)8^b>4j&Z#Cib_&^bU<=Ch>T0*DSkS}RAA!= zUT2$+k?dV)y0PSE(q&U>y`F6`UlX|)1jjY9NOXg&m+rVFf73a)UTwf+!b_cZ zW=)mLgD(8=Y7kl59k6@YYX(h(RU#8z#(O4Awuv$-+5lI-Y>*rw+c<$oLvGf*0s&{v zz9|?G(}dvRe8(rl;pCXQa0i!R_W51k3?|-f!gq^Be>XijJtqjp+=&jMusR1A@DhCr zQ+IF_Gg2E_O`-Z0zYGUwS-(5?)@0$-nl&ac>7enqQ}7ddp4Ky{gnMmk4D1AK#%~QS z#M-)y=+51*szEO(zvZR{b@IJ(_?M)q;*8*afZbQ%_+o48ak|2K!pf6rV#vad$$GV= ze5sJ9ipVGJMu@Ls06C>&FJasF%=ZkYLdSct?~|=Mj~R>O&F!nhlMgmF?!V;dx|8F! z3=|Lu_3XBBw>a2K*^+8WP*aOPmaW6eI$(bgR;;A>jcI8(6x+7c^3oP6Pv)xLK`Xof zM4bwz2y~TWoohrlZu)Y-c>_KpyiGw=R+n&@uk2I`KR3O^nNR^B&Sy}Ws3aySu+U$! z;Qp${e65xuA}0*pUbo6W9xsH=vSG(hS%;r)o%?kBG$^HbMYl^A<_+XiANa&GwWZ#; zh>Mk-*MYzXj$_w6?~XLkQN%U_64M@XW6+=R=-PG20}G4?*bI-FsFQX&jRj3xIU*yhq|~-Z{WXp*7W`ow3X9RM!!sWz4vj^QoH@)Ns1@r-`F^muM`BBI zZ|Ly+@nmbz5YrdZCZV157F~w#7xFFf3!57kcx#vrt6(YJR^~U#ehi3 z4{SIldzr}r4UeXJd^Zn792$N8Z-1BBigs*?`i?HxEa5VS6)a}ExP>g8p&WijJk!d-hL;%VS0V63_r&W05mpUT^*?Pddjc@E zYfDRrCK6sfYha_?YHa_|cyX|^xA}Y%nQJ|wyN2E0Pz_*2xVp{=^5)~txOX(*D+cPR ztSj?dkrj3S#=?Q?qEJ6Z!)~uW8Ooj!ODn7zfDyhef@ns1DhA;^Glr6?23HoqJaPL8 ztF#aDO17l0#;!||{WtC@xkN^rno zTEHYmDoko=Y@wuL%y-P< z+9eK*wbxK?sX-yvZ=lEUEk+@$^&Ysxfw+$c_3Em2r~l?zU97wC6VR5m*|**Lz?K3DK%x?mo7&wf8=mtx@qLPJB>FY? zaz?{btj^BYjY&b+xPKF4dLRW|edM8UjvSR1r#|E4q`QjGmkucJUNFJBAK-iB&6Y&r zmq=kQz|)-NKCgHl&*o14J(G5a`4bdKI6&OthesPe4gQAsAD&YXpThcyg)YS08K^dVj)C zKp+wQn#;Swv^Y;+GoGU$ihl#n<-gCGt;f6{jR`A@H!-ReMBOkGC9F)M4EHEuFMn!4 zav0~VdrCn5*8&*lpr#mSze+I9wMmS#@3Vn-#^uafAQg zS;Pf;zcm{6`;B(<6zVeX2hHmIxWCta(AR#@I1i3#9l!R2?qu6rFyZcRLXjq$l<8SfNxNw3W~=u zb_cZ{X1MsthX(SU*z-A3(LX z{4UGPwJCw6x~yWpTQ=WhTLt6PX~U18-%4a*KlQ zSfkD@kPaghmz59xSvISm0a(w5qmD=MaSbqw2t?4|Cc07v1f!qd{1zUPLwJfc2g}q( zfZZM8UR)X2c`_e2d5a(IVd01l8cJz8CWV@|VF3Ca!a|odcHs-nD{EK`IMYKc@^hoB zw;%8+zFd=%k`?KsXYw?aAvAxFqqr-P#O5d z3~g94G}Z2grfN~KSRQ9#)!7VBsjZ0{37WakskXbQw*y;uNA)I7LV3$lSZ< z+B(@V&3Q~fH-hsXj*@2Omz*zf;DZz0DI?zP;aV)rV@CxQt&UA@6>km@{6N=%Px%Q$ z0$GUnQpAR2=p$}pU%V-Hg9Vb^{oeFUcdJ1X?8aM? zfB>*L)W)i#P$&R3EL1^N1+qEZHdc;8onMKX8QFU+T$&)8fo;-Q-gtA9ZMOx1Fvt6auJZ&F0pwbvA*0XsiwGvhk0LZ1ze zh9EH3LV6qf4J@LM?^997f+BVFHel!7wdm)4=ziAUL-wi6KR)=Z(^Cpz(Vel%eD2%1W{X@2%p0daC#39n zaQg|fp5JQ{&}ND)`;40o$EDr~s^r`KIEgD|n_ zNer_h)g04sW{4mwx&$LH(%v|!UJVB4f?Eso5z^}(Hr!ar9Z}Z}WN+qcne|`0>6=-! zP_GpArbbZ`uT~s8kON#9ABeDm-3N7GYbw%s0PVsf?Uq(((V$V4paNZI>1xcyIJ|-5 zOdP;Cc~gXz&s}JS$f;N)?d?8hD+aTEBPpA$39Ao#WaAq0DTWzlf1b?ijPQO$AJb&0`(U-(AdN{KD_VDshR3|Z&}@x!!y$+V2)6EbViyHy zT!e_R+~)5Hz(Qjz(QKtAXUh}{cx=u)chl`WVe-Q^@7&3;iA0ItB6%7EQQlC4jM=@ovL$>#JWuI{=V2Z*v+V7R;n4pUC4{ioeCug#b!ps*o(+3=w5XQZB zAfn;+csiA42jm57aX%J8+C}&y8S*~1H?LBYl7R4blq@GMtCu?A3kAbNL;AL^hh(}1QFn- z)oOD12iy{_2Hle`oq45O(J2zQ9B{aVO-*q+G@%9LLLKO3JNtQWXN_cJ^7Fe*Yj5^@2j{q>XH z;Q*KF+q$r-JCKyy!_p`&qwVlUmkL(srQu)%v(1tF8MPss6o(T>I}#EDQDcfMDRjv| ziAngw=VOVa$4F2oNU?`AGK*O!JBzS@`s2wMXKSO$1l~(lPs?Ms0cR!dzGf1A$^;2| zN`h2y^`k2qj+L+n!S=;Znm{2B*S!z$|`|d)cter9Ewq?j0T8zx(N@Um#rGZ$AC}`0$JSpEo^it{yHgC~q@( z*#wH-(cUI5Hrw&#Bjo{gx}i@EI>x@O=0_9SFfh^S#LcGfL|=4&2UusYb(0B>yB2dC zo~rF%p17?)FC0ucT457Ae5(}Rw1*sO0|nbLyknTQ#4(7#%O+iXj|XT#v5fgwEx-C`V-Y zgiW^@DRp=_5A~b*r)kaA`mhhDXqw|W(CM~lh5pFSNh(TkD)1HJV-bvYvDsxl5v+XN z#Nx@ANI5AzWSlZ=8m=g`_FQ7hX@LVanwCm9hnS^h$wJ0dX$`%Tn3MW4UV~ovt1t>1?Q@Mz%^SCzaj{FV$3N+R|@J zXh6fc7xZ@PVr3~UOaK6s%%f71!s2Y~fOEW6f-P;z4>%sWaV0%EI6F@Xo^X6Vulgu= z<-Rr%uq)zd4#F2~I7c|ufL_JM5^HxmQfc*T#t=9`H$pn{aMAlcku_i$ln;mV<%#L| zz4t&T&hIUQn3Q-wo~obVtkmmzrECx`J&#pk^JyFqXr0gA;r9}tCVfn9jbxYBHe(<% zt+2d^oxnH6R+TnJ&I!-&c0S5^#r-(wTf;f~-7U>AD zk5l;Y>vp5gHrMdXJSrZ6aI|D1-UK2JkUAfA`l;}TfKcyMD1e5ulDgp)EoZR$PL$QG zbQX@YaA4@G@S=e`;0DiKJ;L<~*&9jl<8jZC~+kO z-NHsyDs7lrd^q{h;;LI?>V3-izj|m8Jhq^&9Wh!o?q=|qGI)?gpDrl@w5iX)x3gPw zkBuFYHW+Dp3bjY0XIso+$5d_}L4}gw!rTqB73^@mecmX+l$4XY9w5<`#5c}b^dkp_ z`2A0XSlZ(mqNFogHIZbES+xccPGxqD#9PC0A_D)8t24xm?hU7SXeY7*JB@>-0Q-ET zg=ckd#9^yKM-N@iGVq2cwrq-SK6b(&c(N%327k4teSq%|*&I$TU6X`T#iuk=c%N&)4kvS@R#*tnirB_zIY`OQw+KNg zurfGJy0-|PmRJffQ<+tLB_~li0Ld7)93Ia?4*gCv^_w)1iY+A~#QtNEXxJ#19p50+ zLJ~}!@mwm9zd_`9kafqmsSGC~CEfXC5+yWTf&r-DZ!w(B5Izzhan%AD%{zD3<$s9) zT&?;pc5~R-u2>)K{T^-=rG5sqf#UPA=Ghw@38opMi0_6S;>6Wc5^G5fjU`CGF7k2G z_>y{zKesMPAy=;>fe;Z!j9DO8uJxQ-bKWyKd^;b&8SS0)y8Hau_Q4MaFL$?o*xmm9 z)|35p!~uOf8oc-OpK`=(ZIaa&T-Lrj??VU8vaaQ~R`Z>lGD|gsuNIot7oiU3Oj;U@V)M7I87z>BvOAw6)As+H5-+ zb~ADx5fjlbYerd#!9Mq^n+*xPP(D+dh@1pm4SR|&E}xr$Q?2+*-Wk>4tN7v)xwUv% zwi>J!`O3GrLaAei^E%n|ZjO&$^srb$xYi>avwYl4Y3=&fzcxj@Q0aQ3f@+#}U+Afu zY)Iv1i|%&(q>x(?O=-@X=~xe;8>z^~Ig)McyjuP`Q$78pWjN!SO8qJwRf7Y{J16+q zD@P<;m@we>_z20-c<0fb>xlq1db)|i4_!w6Pz7DO0?9n0g0Emj=Bv9^ir_ zjalXDCDK{Vapwvp;kG(MK_6(I63Z5z8(BsIxj@cnoID_nAx^oau|uSSI+}Tcs%nBT zA`={Eq6JtNn28B^;Xq=F-rJctx`1?lG(Yedg)v0ZPKEwxem^0Fqhk~~g~3KFok3a3tUd!AqQ@B|MM#h?!0Wdi^Odj}DaZ4zwCb+)!qY3WbL3mXPB|KC2$=3U4~=hkkz);Wrn9DV zb**6|1@B79wS*hH+#fTqBhT^!4a!M&rPLfhwG3eESlS>LzJm=jD+>;E(RFT!;{Mv-8 z)8>CINHJJgsix zw8q{@LRbc&(p43HU+@Q46b>c(mZfL}5y5!4UBo=52PA^)S4@tRJnoJL9xgZ4+8K3A|>I1t{yt1Q-~wz3dW(1oKyhUhsJQ@ zDY6DDNFV4h!3E*_;cO^J?TN@{p#s+|Dh>*Kbhxlbvs3uAypq|Q_DMV=>RnoZK%V7? zX0Q+!hgQXO^u3M;cea~J%hbiczdOJ9CwKoTu$68$jIw3AEh0Rot`S~(c7D;;H;gA%Z?s%K zQ0UjvO1VTr+cl9SI>57uOy12SoWF`Ge;Y?#*jyukU;Rkbd(OYB^`s+qL1Oz!&V!$* z%-TIDbTVIU6ngdr=e4F6J5XXD{ixKbfF|i#iMO#%*k!_= z3G}d-n5$qq8w0#jpO45-ywkS$G1aP5`W71F-m zV2WZ{9Dg1&dhSTE?toy zHR5GmyexD#bSilLmB5cQ4^rbwr!*vR?{#lDqRV7D9<>7}jt~SN@y$nC_GIg2HBZ~%ol zoMKYvPP`6%x3T%MijS1aIM~Fz<)9cfnfmO09Tewf+7vonTOe2>a#b-GR{f zs1>Dmq0elGpBgr+iIwF9Q||e)hEjI3!U>}rr9y!5u02s^9Ga_^%WET&G-$bblkf;vXnCk>?XEk zw$lOC0F(@pEv^sAYPx5Lm2mIMu9aEfK_e1vlfc_@t$?0fG_s z$NKiSb$9|nF3!v3Sl-)&SZKPqPIwh(Wp@eNG7u$R(1O`c` z-iz*mtBWJBoVYcHNYn;W57WR%)tCXL$sNSx%bdp}#oOfMcf#+OX(*7apFV;$0rozE z@+HJnBMeYWJ1uzb+hKVpT8-Cel%RTcV)Dppd8yO(0^ECt0gF z{tk|R2~q^)%N78Qj^rXS|CJTaexU17RsK3KI!}9Qjz+{P$Omz`$^h{-rMgcQuD1); z*k-SQ$&aX!ViRa860OAqQ(T(@lx90QWr%j8AF{HcFPS(O91@xAQnv0JMu;wULI;$G z0#o2iP1OGgx$>ceIo;;ouaE7jDH)|EhDd-qC)`n`qd6LXQc49Pq*fs2B2IV0b-rJ; z`$X1D95=M=z!S3k6kK}*g~Xv^U+!_!dj@WiRO9eXRJ=!eI(;!5`kA_79}cAXMoQw( zF^=1*7wWNs6)c=759SJ1tU`8NLpaIQ!s-Z1kDDs65&|J9F6DFpn;tED$z?@B%)F#C zghB`0hXok77S6CYRDoN9e}Z&$X323!1vP-R;cetcIU_&5rQ{b=jpOZqze(_)iT6OM zx3vz?$spiww!U`?5%Xn12du33pdQob+yC?L|AYVI-??>*|2|$6)8{F&tqi7*2DrgF z3gLWMiy!}c6VB%*oDcT5H{pEDU&--QIf_?u_5Y2~2{_SCB%qH1hfLqY^ zx1w#dzZNf#_Sfn~C>hPL52n4b+Od$ltS#&guf)w~-A#!IC&3F=Ec*m8mIugH z(Oz7Aa%WvV!GKkHVO*bB`bRJ75qWfdyK^K9Ty=rSHbZ2^&{PdGYFWc$3%&=(rRk*4 zXf#;2C44BuYV>gU!xa*_mbgS-B5q5%vf8F8(eS=G8elg-RUA>yn<2%#R`rs>6loR1~ zI|H<5+x-a=dquS;X@Gj>ci8c6kArPqoIq6X;hv&~=z>c|FSho1=_+EMTKPjih@_1< zrviU@rXKl4m&T+cEnN`IG!>JEERZ>}JD5TzM^2SaGG}nJH0?ZV@}nwkbu>D$_Vqz} z2&M%QH+XbHIw|Wfj$l)(lIYEAVXW)twXDM?pr^77*rM*7wyf>Y#uV{!*uN*Esre$dil%lI>ixnRaZ$&6-*~nG8nQWGR{@6eDpZ z7>sl3rRd6CF|Aw&x?*-jkb3#=GWLbrP9K-my?bZZYLV`1Nhv(z+t0> z3ql8Wjvt7-d>S*zS%`n7(>OxdpEKbGnN5cB)ew(L+R}=+-q4mo{ z$u&VQC6yK?0zu2i&|E@v3te*R-Sg)7w*$7Ju6!F;hL4o%+ki(BJAmesE3u)2OGnOl zX&Gm+YAbi~Wq=u`SCe6D+{$YFBvnf{%d}Aa95j*y7eT#1p9$pmu!EJg-281EGl9ue|r&Iz}pKv#^!E`8EMJu4`>itH6C>|1<}LS ztwC)TEH54N?zWRhf=7p|PNCc%aGKj4PP*GWTR-*(a$B|eZjAdDu!G>XEF2@m3WT`E z=U;!1tqrcN0t>k|+xKzSOGJH)$8<8P^fv8Gj`LU!9+9ZAao(dh8SN8{Bn-O(eRI4p z?$4^sfsKnU>v9r^?SnWR11P-Paf?b$85#T&G753G3MI6JI@imNO z5nDk|A@Q24M0bC$$j!%xfBWh2=SQFY?Ps5TdiV4D$G`dF^S}8(k(*_HvM*UybeYl8 zMI5_o9{Dwm)=VOA{K~X&H6KdhT>+8g0e1tMnzKAku1p*OOk}~Ik z-yFqPqSiTJ_kIQ7={{V-(K7DBSi+>~*wK2P?hpC9E3AxOBrHufV5I8j+g`ei*IweZpiNqcSvk&! zr9NRI+_+bTWrGIK;PDnc2OdEMyFhO>im&5+q2L zD4jsEu*A_!ux%T6^?f|xy;CXt(69Zho%u#kp4Tmhv^!vK1uH|Ga%`8MWa>r9ps(s1 zSwmCSy({7=LYB#zN{9+zzg<(n)Fm{CB=cGYQNY!|@NbYT{GoWu5`Q(cA5i?aU@c(V zkxphbzt&JLpb6n}MJ9NRg{TEd0&T}J$}@ahgkeB8nl#8@*}@arNyIw`0S6>pnsgPb z)ky?4i`D?@RnLf5(s)gr2!6?$)IM>)*+H_4Db`!5f`i9&8XpZfkzoUqD+ozHG}?Ur zI^qRV`1+d4NA?J>R3h3S@ba}hz-97X%ufjeR1*rUr)7lMU1;(#KamRhP5-+(1!AAW zo$S&rvZVK+6L$HQorsD_xRRUHAfDz!m0$k8{~0{vKfRxZi;VrT8cOWei)~GBH>g+| zM@FWkssk0*er4O>q8Fy5J&pem`$nQ2f1j?4(0{B-sbOz58pt~&=%lF<%VE0;>bfIpM?5NHi%{QnF>lC+S`GBW z8($FKpZc;`F6e>lsS7(`g&cqT*+k!gVL7v}E3poTN7_#$UEqCA$Z95A1&xsbg-JyZ z+Zec3?(vf@rbBV8}_6oo?a8sW?UF{UL<)iExw{&r(yy*i!G&+(<|F!2!sCmAK= zYSnZ;lb5~G93jVWLGKKz2ctbBxDuu_Pe7n5LCwcbw*qh|IPCfyJbyO3?U24fnxe^@ zS(WVQAwV^W5w;)1Q*jL0T2HVs9#`1)R176`3_p<&@~SwwlZD7OPw4-8Rov~|27T)2 zyi-&$4ypXB03;3|q-DBkN{?XTR_eu+p;4wOYjAXRz~Jdl-OkKcz8&JDj-abYo@pb= zI$Asd5s8&nz{E*^M(i((1;u-#TUltSDBoAv1VF#VkZRidzk`M6!2s;0amv@BN?5d* z3XAy6Sb}}C5`mH6o61bh;KN`-qgSv3kyrI$1 zW->M*p>@HF#7{_d+(|i1H6cc-`6xd2XiNaxxE)eHG?aOLa0+wSksN(G-)B1(BF0a8 z@QK{V#WE~6pT4cF{Cw)4T>BIDZ3*DQ8b3k&;Jmy894Bw+JyjJCRUP=e3wy;F20pCW z@NMYh-e@GI7ZSK(-ulx>YI%=+xy(64?;>^9;Ac-6n8MQ<`d$CB`-Wgh)-K+Y(m2lm?gcaU}3hPRl@CLp-vm7B185sw)>}J1GNe6Rf&oRz>m| zdJOWZt`9^YP*Y{W+3;*|@b+9{OjUD!u~m;{{hUZ)hMFe-3x;McOKeU&Wr7?UsNBB% zTC^R_)NuA@OmN98<~Uzzf%>4!5Rr`7r7KA?0sj;$QI5#_EJiZwZvG5L9onoC>86eY zo1;-G7$D-Fh@Y&;)YQ?3>tJJ&gxM0dRpkx(a=#_rBx2%!Py2CVe=4*Z;Z1HmmJyRAx$UL>8c}LdfALiVtL&e&YsB`hTyp?>L>y6IAnX=A6+29S#$Yp z@BjYJbEcGwSf@-Ex);6#I{WsO%c#=M5mTIyGXyJ0Z8vUv0@+$Bar8;b0UTo%h|YYn zm?%_kC<{ifuzxI%ehQMin~s-H`pPmtF$Vp+&{sa<$FY$pe`_TaB11^|zyY}*FX7Z$ z6wnx)n%@-XUhNTQP6M-4t+;|e6_KqEXl=w;#6NWn%b)XaP62RIEAa+0Y24&KzASPc`7h->(2ZruPQh50 zvyOujj`Olfj|$x8Rg}~CD{V5;7>!@XNERmOE+Dp9$*>ADIB7H-+z$OpgtiYB|2nqP z!MtkHO|Ma0!ThCzvX0Yuk@nn+MGE*6Wg1qmvsEk`zezJ!n{Mwp)mEHlZBs0E!8;y! z+aI8XmByLn+o|Tzd_bN{g409-3xAZxhBYtGL#*X(t;R>Jv5=QikW2VUU^OTi089tx z%*9yeEU8sqD)`EXOCB!O4A3Fzn$)dLc^3AM6Bk8i5wY8R#`D_oYe3lMHH zZNO*|WwY^!Fw*=Vhb=2Cdy9Sr2=!Sfn|>XivbI75`3VsC!`2O0cUzYY7Q=h4_qBEV zW-0H?5&EL;xlV$`v6Wvnh9o&lQ{?d*SQO&MnN=~&D9uR`maKd!W+8(oQ^!izz!Vnb zq@s!v)U3CjccYCpQ8Df$05)(~td4Fhv4Z8HH;EiS3c*f81a7)mrRF9tBZU%^OZyR@ zLDEe$Qg3mYpH5(Hoxgq7I~%}fAyE#@WI>h>72d5;$0gO_RI+C0GX681J@6eTufK>^ zk2SlC(LC%~iuA)#Z#K(urqv?DIYHTrzmvl%gug&-yW_X~hxS*?T^(cd(MX8=eQ$Iz z=$H*-42q}p2E*`?+b$!e8zxNaCIEB$B6A>N{)`1Pi0ODO0Q%St%2t9I#(4q2-LOo> zncj|NWTQnO!-?2RSSB2}0O%tayzDT(2-WDWr?8D-mGRULUV*)hDIg<#MmCrw`sl2%PjUuUE3%qK1S>uYV&8Lydm zLEH5A*V*VI_65fzd~3o*2Q*>g6-G4U?gk%{yVon_yf!BP#z4^i>$KOEF?V@X{{c>* zAQ+nKjssY!F(>-s*1S|{nF~^9mG*oBEo?5z=4R&{z$%T|yjj>*5ZTS9ta@8Z`}7bY zt%;I^b&?Zq8YIqOnG^?XYdW|Ta(vxlQ9{dIYlpK+#y^GW_pz2Ams!i{#c&x z%F%Spy>7Zb%k=ganBD$$W&G(&Tq0%iJUe%FWQMaRs97Rm^iFQBIE{f#nsHYLJ`!5# zm!))iLOdKT)@jg303rV=-eq)A_w>ebcy#xlMOTA&N+gJ^HqDpPj31~>=?P2NFC?=- z3s%{gepj?;#n0czmCXP<)zdC|;r4^wTpCBYjU>J}jIRk~g7b6T)UyL_c%@cZ9IsY6 z+0AbKTsrynFxN zy}NhreR}sV<&NbF7b8_Remk99U;%8qR%JyWvJjC?~!w493-cI2kb+ zB_wa*<@b0qL6orM$|UnUzCjqJ3%?gxjfSsytF&*uZ$zqTe?qevmA#dqhDtR85=ZC3MpW`ftS1NH8OmmTP2@&Xb)M`ly z%-pH&%0Q=8is&A40Q8O`dfn#nV=+>FoR=i_r2~;_V0f2#l687e{=uy-yHwu z-ls>$`1PUgPLizJ@9z2dWDV}L^RL#PMr{SoxVU07tM+@mvu8IbNse#mI=PP(O?h1& zLA5`{_0;{--muynolTI`xN*}m0gW_(xbHDbLY1is>pn9YwCQ*_oz3?oF%oU68n-D$ z(M{2Lwb=kecvP=vnq*!S>+y88lCajyPgjB|%%|t;igB%Fr5f{0jRt4f6*Ujy9Y^0c z4B^H)ovZfk@67sjB4X3b>9Pw*%-YeTlzc6mZj2tX1`CNX`=BJzhYjNr_FK9^ZnJBi`H%HYHJ@-yn*MFcE>D*gxyB!u~i*1la&mwWQwx-$(Ckg z<8Z`7o`<}>J$*2MxEdmgRtm&?qked>_1)(8+dF$dsISxyn-BJPo;*KDllnajf{QE| ze<=>(cjs`FppX^K{dEdxAa^uCC)EQ~gycKKnXq*@JT^Bri|B}+*|#pP-2Q%hKXv&E zbqtg?-vThk1)yJCAipA^H5YWooW8VlQXNZ4^n5FJKW$*8iW;6PqjFO3XX6l+K9S@L zd8Af&0bxBNp4Lb@+D_Rm+-P1mX&CTHYNixlp=Dn)8W8fjVU1W)&KHO!#e8*0ia8?5 zAubm{5p=$8(LNC{DHOb)7Iah!Psv;+k>w759G8$5~EpPsJ==*JVi!tsBTnnRnf<7F8zgdHY8a# zWq`I5(IaS}nBb5B`IK#G3}#Qcc1WF93MQax6|%L|uR)TpW(NjY9AjOx8Kp}s2r(id zU`K3JXq-W^a9WvU;3rHw9+pV>TikjNG1@c&55nfEVwsRrYtwGz+CMX>#>tt0i_48y zI?sg*uBEQl0-HEb1Njv|pEs~SFQ9#1L!r2M)ho98Iu*O!z$26@;1h&ZLbnEy+5j}I zuOxJx$+r=ygrS#bbh{Hy7v3&$Gj9t5qnWvR2j;fZH~XFOu5)OS853){f$;H82a}hX zLl@H*ixgbk2jI2E3rt>2Hn`s*@dxwn(2U5i)_BUkQbNWJDQ7ow8*;}BQGvv^R%!HB zE?&ZdP@PPmA$!MP50MNPP$XNr-FJhphmZ(V8q74=D5}GWkGpiNDXKDq+Ov!PDb1h+ zAj0esHrJy`?`VH8Wzs}%> z3jhi<48~nMv-l$H_6$n1AVF}YA$&rOlpZ^jol)+mQo|Y~ghhjLa4|*D9d=kYQNdim zP~I>Y&^C2A`7wLxee%EG=yvK*1u5ydxMIePE=b)97EY87)6PI79;*BdGia-$vhI-R`4Z37mH)R6|Y>OlO;Mj}&) zB|qSj4zCal!TV_JZuL9;iWG1;Cf%6^nb7y2d{P<^0yHW$y)-S9x#NAi4j;7a5Q{p2 z2s9sv{1^IbB*FZX0I3VTc1^=NW3+Uu$GKalV$u~1xI?ZtR9KZFm#8;ms)i9LKe3E7 zJv=+90b0VeRMrH#;UnKmbc?jnKDOzAidF-$j6O9KStTEc{1;>qR&$tjamy8OeEYRt z6|U2wJ4^Itg{}V;ahI5&HjiNC!xEqj1q%}5IU{F;OGW={(h-?gDP+rqn-a0f$D7%_ zfMqD139a0ZVlMsb`0owQCaYYNK2C1^Ncdbvg;4+sclTDDYdJ zG$@Q@`mqW>`TDYCi8QV7a(dlTWi3v2QTuFtEUJLH)>hZ1ZuGj+kgDX6H|j>FDt44* z3m7XE^qJn$IQc`(z~_VEKG zGI~|d`=N-GrDVInpNfRcWVb2+>Bc%r`$F+dC`M7A$b*tcrFJWo_DO}ytzEES*j9QY zMUM;GY(NKt5RfUF3c|v-dgYdW?pqV3PIeadlGo~*1$>FT%>XGj_`_LjWf5&)EIom7 zM6@jLI--=&fWpO^N^(k}4WU~lHV8PE`N5`JZxf?~6ofrR!Uqeii?KZ`DJ{M<2CSVe zvOPc6mS*=8E=ctp&V<%ACN@)BVpOw;(jv~)V%w4Q?=rE~>4Z0mu&ivCY_&WwqcxI) zBj&(r{$}FGqR54O0UHWKn89_BZiD>m+L-^%jYKdm$req9y9u!gCu3|My6+~_;U8)B z8QJ-B+YkB|i{{VN6xwc7PD|CeA&!1~8+DU^z@!EXooRHC zP@|#jjfPh;CU#_=|6S*f2F%`E+Tm}($vJ#AIW za;#wl7MGZm{!OfFNZ`by4dpmk`fb_td2=cUP-Uj4aevtyvRw!R+xf{rWAYGAVIpP| z$mdCk*PEN3(EXHd{O(>K=?a-T-Em0UXhOFiT?E8|#KTO*?!W|&OjKAN^;AHSP(K~U z1nf-_$dG4U-Jl8_@EC+n)zzEH^c6OXaFPoWqB_Is@sUd-|GPjcS%dJotBA^5KNnC8 z<&iv)e$5AG& z=)Y-<8y9FI^d$>K=uh~*M$3zC7_6bS;jL~)v55{f%w z{x`6$lv_?n7F&&wEZJF|kjwB)_*RN8res8O2_*%~K*?4r_MyLj7#VQCCLeEgqF8eT{qNPJz;bd6 zmdlxU+0;_Uh`C(PSYh?@xwQfrWp=Gj#$|{mY%4{LzAe%;;#rUZ8QTh)%jvkn#Bx%~ ztXj^ITs0|8KP?J@xo-r2L5jeqB^eM9{j(7P%L)EVkN``G{qqWdfevrBwXc zr~hZg=?{fiE ztpBdj`Cn5(H8Vw0AX7<#u?+w$o6Im(Nm#FO!(jPlpVbhI1Xn~I8~>Z?n^GW{KCMKC zo}LY3?rsym6fx7c1i$d!Z6*S$L?=Diaa{cGr6{!}mq$vpQs7shmR7u0dKs1liW!y- znl0R^%XpqoX2@BFfj#We>zZHG@@%(AFhsa^$)K>|jIl;xF@-f-J7 zr~`wVVUfTj+`84*S#;MfoYaa#fv({=NUvfP4Y!wQBHClKTXu83teIM{6TF(CG*_JR zVR)~=A~vG~h|6+Fv{mJ!(>#tbzPSzd@B$a1WkL9 zsgH&aC=*azKs~|Ggj3TAyvU+9fmb{#a@_szWtmiGXe*oAoO?e;RUnR`|4pgAoK+J% z3*_h4FW!wKkrQ$nu5wh5vODOqD(X)W3RER6=P6D1D^ zPCi34mgX|ROM9WhJM9_QWqj5~uo&NCz;b@M?_WOkFQ4%X8A!_Ti9PW!Eh<1hy0@&rLL3NTAr36C5C^j6LL69NAr36C z5C;~>a1eV*912c`MO5&~vaHN=w6m;?PmHu&4IQ09X@NTL#QC?p)H0;<`I^FeFqt4` z+t}#z;oj7HCsVt?`JKIPvtje-jJhJD1gAz0M?-0)uN0~_~L*hg~a zxTVF`i51}C$T{vt7sEq*nRMCW!qmhMM=z_wLok}<@L4sS*JQRLlQ)L*JXm!KcvEu^2rTakW*w~&4gZ$JWWlS_ak2tp-_FmqjqQ z^q^oRsSww_KD*6RGd({lVVz zttg{eAg&{Y;*U3<>?h@8+4>q*R`bhs{ z_O_z^f+qvlknX8P#Rc%F+xihwn!$%u=cmyjK5UmBY_6bzB+cFLTyt{;1tn?j)9Y@o zpuZ%|eRiGAQQa)4hiK0A%zM|}TzTxgxoaIe_O3j3-rTj09h)nUoi}%_V@FlDJa(?* zUhCMgx$@X~bJsd{Y_2?Z-rTj09h)nUoi}%_V^`i*VA{!kB29~ztbA7xmTc!ay4GA0 ztu6NMI%hZ=B)7LV$d}jMpsUQSje3FWY*_XBVw1W>=v?10YFn)XsqJ0&P->&CgQ<;P z_i$>XK3)r`>qV|}NSAM>Fl)XGH+;<*rh`cAVj#7&hh4kF_`RfCt%q2-q_(r-UWv20 zc>niEY!Y=27_O^W+0~Esk zdjR#%;J{8l`YpzBK@i zq9D){B}O-P%{}WrVlA_Sx>M*xYW6cR#TL=X})gRv4d;`Y&S);q*T{Y27~N+wq?EI9>bYy-qfLS!G~ zmUw8n>n~FW5XJq8;jP(#OM`FgFG5}IOQayLQF6`*7vGzO|AL9Cyjr6thra%3shp`% z*h!zmNtrkh91K^hT&tw?r-+F+JTFlRGEQUfT%u06{KP;7tHYC&@`oo3c2pGC&gwt?YWE-i z8~@-}w{HELw{HE5zk9X)-~aLPxBt<9cIy`ZElkY1Gu}Bq-bW^^{%J_e%1ZqB-WUjh~(q+EEheem7R^8@C` z+kE!2da=2;xB2Yg>>e6amw``~3Y zLD1}vtH;|1&$jmWtH(Qg)n>K3xp%Pr@cEO?y=wRQ-tNx+7Bb)NBRe1E;pe;Qxd;>p59>{)oz54tfk_aOPCl-Eqxvf`^hsX2N z3h}un({&_so6RTV_3G(n^_Q5K)pxrgXD3vdE|U{;t8%Z4)U6LaTSR-2N5dHcCcSMh z@OUykYk&JKg6knq$gI7DIGDA+MqXv=YPinR-Sn?3m3}(O@|8CFo+WB!v{ocwY)ht^ zmGvYF?Zr<9AoQc*8B$#X@%D0{t0jN6tauqwSZ-g;C9>{jb(e=kxQ~Z#OpHym=D@#$-Ie_p=QY+Bm|57-4yw z-Z{BIn9_}~N1EN4jKKgp{z=+d5{9jZ)MS(KoyaI_U!!a6-8Uq-|fEX4W>Y zSO&kU)^?t)sZLo-u}VDn`tjr1d*3(=Co?8B%PafK@q{PJ?eFDuIj`z+*|;Eo>2PiA z^OsB(!+A0Lee=1h2=vI57)OG?lxP$)vwjs~N7uZCJp z&QQ@ZkprUh8bYmrI~X`}PLHq-VCVcwJ6PZ26mrLw_9h7fWxH?eujII5Eh&&DkQt6~ zbz005j$_kew7|<@I+;s^>nbb^$elIn?@kAhFVn%%zNYwjrzm51=pdq;m+qK2aCoCL zEQ|$Hkx6csztDP@$qJ><~3$s3R^y0vxny-GH zEYEZ-Ch>?QJbpcILS9B?^@EE!ws3W#XoG~bg)Hk$A)JheR7SAy5$UTk`Dt%{+CA(2*g1c*j_1I`WOec&@H*kLKp+aRhNQL9Orgf9o2OCB78?!=Kj#-XEa_LWplH6f-NBUm zg~5^KFB8SB8obUzQD|lTF9}>noNwZ)D!&rM^-Z#_B^K;eR4Z2&ad0vp_Fuhygbh^I zJ6p!NBq?8)+uD?@b|IUc@1Jy)uzh!KlJ}CG~xrL@Oez3<; zL;47@g3d=+ZL#l_h&*N{tL4Vyd;;B($j|C$N548cM@O~s%zsv++fk`>^afKJ-rbae zRLhIVv1dv0xcNN6cD<4APbVB-D~Y_X{`cDZY+A>{w0bSw)~bb`3$h8r?OEjO9yZtg zIZjHnU3PbEElMz$p zz_4VMGmiLPQHA)-nV@(JJYfb@aFQqppSVqxHqxaZQ2Btg$+{P9QVa~`7+<1u5kTx9 z=cUjx)1q-GI8YjjpzD+;QN2`@u3C#;4eJS*F7IY{MHv}PvCMEmPgl4{YHpP!*}msW zdR&g7NFPCEe{eAz&4**e--4>MHRkT&sCj+js7otuTDIfh_jjH@d-TJ>%iXOX9y~ud z*m?HD?jDXH-d`*yE66!Rignx=TxDl~?HdB>5-L!172NF|ZR1h<1_nHFkndoc)v<@U z_cuxBIQl@rsR0nljtIZ(g=r(z*VSjgxm(|m69!ZfOnuDL;kc(WlTYo_M5FrntLlCn zOqR>nMN#uACLsnArt{_HNuD3|{qM2LeNw@H2I?E+Iz&|G$=2h8dN)zwtyXy1tZ=Zi zTQ7gy`ABa^B-=>u64_7eJs?SuAS~z>OeD+cjb^syIt2bL?lZhVY~su6j*`&!SgC$k zz|8>|f?u`Q&ME5k@{!=v{7Ea;DaIe1C|}#;xFSv32zo`5WIRtgsPVcqRmixLu^9@T z=KL!!j*m-kjytWK$eI8L#{RLolNllTCjDT$k{9Eo5lc{$h5&W{bC@XAJnm72Y&HX2fh1!WvYM-QRElU^sBZt}wyO&0P`Qut+B7$T;L zR8sgwTG+(v!V2G|72I0atZ{;%5X195C_>z|Lo%*Yf&!bO)z2C(zVkK;{W$4@zu$_Em91=3BJP=8Lw7{E?pMJC)$ICHHE_?bvc4$Lud8O z=xN=rHgNI|*7SDlr%a7>?QK$9n&7yFUo8kVQ1&ZbrAs5&u%#$EN#8z|Pocq?3^HZHWk=b|FBxTM0+%J-@v+mc zfN+ySGT0O{%vdkN2D3uHf%x|AMfmnz4QQ(r){*1@G#PAlfw*M(Ss)I6EKh4=3YnWt z#2O>t%GCm=F;A&o-nrL=+e#&Eup!fed|KX%v7Vg@Mw$aKix}-&mYbjWW~H>{k`pPzdKmRHYuMXSODv%06_5) zjV`ENXtFpGb<%JVB1!y{kNXljS)&T`Dum*u^|EwYrO^e1YBrfNp>#iEKDBBmOot)+ zUar;IURlRjfk^elrnrg`JDlM@^g9ok30tQQ&v=vf-sY9tI~uf{8f$a;Yio@x(ukqG zpoghFh^KME0EV=guw)>dIsUv&^)k%o78eK;AUT-2qDqI9Cwm>IF1uLPrX{O|9n}t|76&dLE<>%&b=C3(ji9&hk~`9d{Ra!UpF9K zi|4s6UrlaETQwY(RaKe64mK+;5H*WiTu`yKJur;Y>Ps2?bncLj{48Uf;;K-p*w~)r zUlutP>~) zolmw1K}$>Qr!96aSjq3E`iiv;n?r93j|Y{b9N{R?Y@FgNOrx+y(M=rw6w|>8Zdwec z>dTFj3OO)w$L?&QBXB!~cHS_aX%x%wa7@vDrQ?x0GAufV zV)=-{Pf3$;G~!aOB`=|FH8qI60V3Gq_^(xkz<6a|uk|rg5=1&i?6Yd%kcc;X3Aimv z#-Bv28VW|$dZ+yD(xWBx!bFdsgA}D(nlk*%0^( z{~N(^9F{?A$d-lhBNeDh;V5o_pnpG7tb+UMlvs(dO;Th}S_u;gu3NI^jxtUa4pM!( z6og7+u9doq!T4waTbKNyTKmAM7~SY(FCAyPb5>k?b%T>_CcF?KWxBZP({I}L1FXk7 zxe^Wqo{o8?oq$vbv$172z(N@om)jArdXCV_y8>3t$D2P~} z@#D)-Ss1ERJL6|oX*|enT}>7+URS?d+&y~H8_qlTK2KFQ!i@y@i9h)XO~v)C#`p{7 zMbj!RWjnT(d{&ggtdVy&{)*q~<4mqlk~M|jQgf@$(>y;6veL3JhBaiL6=7Mxon2mj9pG*;F7eLj zMvI%XyskUIg(rGGVpoe>y8Pq|QozrUfEzDwAc;ROoGJ&f!2pyX==C${9Mf?GYlk6~ zNJg+yW7-oHlS&UPpGh8lJMu)WSQ6J<%SgWxTlV&GW)={9tS$5fF3mi#5ZZv0u*cvo z;<(c3AW!u@??c-FIN?Z6oQHr$8A05wT^Fs_=aVRJtx!Cf zOnF(Gbn!akmE|u5R_lPQS2k+W^OXDz>K29vkfE`fK4#%Qm3`P5ej452!*=>pvNwj1 ztw8I$#%5ZE84Z0er>Sw8D_LsOyrvf{>7%{YQ^Uqsa0)C7-N+yde_QoWdt*jqpcGU~ z3)N*rrh$elk#wNDVadVOIG2~-SktT#J*Z0J@X!uGhO=iOra(#8k5JmA#FcSX^)@zO zg4`n1J&atDe_2+tw$e8eC1w$JU4 zO&eM#V$`UBiF7ZSEKRb^5MFBaro5BiNHy%<4MTGr1OK*^2*%o2BvTHgE7W1~E~hL+ zht8JGfY0}oTu~@S*_TkFjp_CaOs7!+Ego3PCJ>#b7gb*#e*Fv~AAbAg#^Kkho2ueV zj-8A#!cxpUn5^Eh8j7i6>L{S+Hjp~T)b3q;Ioe%sXa+I z^KIN~)g$j#Isw8IU5=#pxK2wLI`KS z7|+MmR{ubvj?<=LDx`;T}Xk$$wts$XW<;_n&pNuw^kk!Tn zQ+TwJl#UFUbNDrg=_OQKK}tJvnV7bR=?qHcw0A!UYI_i8jg-DVaeap67!vj8P-YIO zuR7<#9H+)Ym<@d_aUXv+L^wS}PJr=ha^CyTVbVg>JJ|U)j;Gkud3?P&B7h?5nD|ch zVP}H5Yj%OqfgZ`v0n)T7+`h&=u(plRgaD3^eBwKTt=|xh9;xXpg$wWqFG>|3J3tJ= z_{5?5Hie-cwI;SLhKBDp95}-MOipDbY^GKFh- zi7?k)XKT|MTbho@*V_(|W057W7pAJXb}`w+v{)y)UWH*v*0A_YCzzhMR*XmrO_x*%b_b1;>C{z_t|w=_ly3k+ z3!3ez?h};qSF*T-T45UyogxwafE|lsJZ!#^U1;1UWM@Cds|O;zTc`I?(Du4$8)|#c<+6_JNRxJF~+x_Y*pWFZ9dxC69BT{ zvPYtFPGJX{O^)Y?Sw8rkSOT~Z;v^1Bu0~2{{9eNm{tUxoL==~J;XE^&3NvG+JqsaU zmj?jH9b}FtmeCnIB%Ygel=T&{E#5a26eHQuU^YA%lTN~T0tE~6uzxY?O*N`H=GpAx z@DI2iPID%CXiZLj5S8?F4IJDb$oVAa>8XNLB(7 zz{(Fdt1mvg`!}Cg&-XW}%e@}Xn6&`$nKRMT$i^GLI`8#g(ej?FIrw!h=eLOR?qS695(qW_K;qbiFyoE)4<~15 z5GD%?Xe*0~SP=2{B99QkcLHyUwn*=G;iJ8P1bRa(dWpa#el{zX^OTShL^_ z@lU`)r7^A;%nTA%mP&-p*DQ>ofmJIi)M~>=l_AiDpAc?vjzcBe zw8}S&HW(l){cDvBqTn!Aj`LQk^TC*5rmRM$j5?|9u(*=8*Q-_v*7ebjRj}ssn8Qu0 z^Pdx)f}0FR9Pu=11)w~|dD0uG8}WhptA^n@>>)dh4Cs4N8uvl%keMw;1kw?ZGjbh* zv7$?dY$;uK>&|rNJH(sbq;>LLv zy3U$PFZ#_r6gdXhir5?YcbG7&)knbQ2`p6mxZpP!KN`Fq_8AiVpZzmA5QS2%tLa0; z{KH+m>dWeWI)daAZlZXm2)Tg&_aHWC@R|ucc<~b;)dXas7-3C6Lp&U&g~Iq=QSMZ*dhjpGMF{{kCa zi|UArm^;T0BphQS+%zg|Lf~7a#_N2+uJHs=a>?qt1k#IyTX{{vxWG3wBqI>RK~Izp z=V|*}_0Nt{uKIAi3hh(wz#+5K6nt{GLb@k@{W5c5bY|C=pL~+yMqc43FiO=2AWX^d zU~}Ff%!E6%hFk>c)2NHHmi_?CqOx=eI&1VPvpmY?YS%g`LT)VH3rYx;*YKT9&6pth~76X{Xp>-jzYNr;lD~V~bC3FTkj`9Ml z6BWHi*htrw@;8aqCefe1Ni5^mfm9tUt*5>^4rew)(+Uu@?-GK~FQ#LO_FPo+nv^!X zU;z`+uZqvpL#}M$cY9w6P47ejV%h^)(FEz;m1U)#12IocPH z<^_IFlG>MhJXa^7<@V7SCp>f&2;wQiVB7SxKUF%Jy|4Bzn;6dg!`Y^7tV+|?A!zqM zbRS&l_f}=T#~({4dFY9E&g-TFEYsOvV08Vfcd>5G{(t`AZ~wvI;jLTz_v=O0?7jW{ zy+IE;dN60R3P1k$#+<#YlI#hz>M>MGkKBG^&ZdLzP4d*Ub6n}dj!L#;JYbRJskB_( zn6rOQbM}?(*_SZZ{*p}J@0H0_?svBvd$}cTf9q!B2jZQx%y9exZS1Lz)`IS;hI5qT z=__RZth>z%36Cak#-mB^XkVYUgAdiPwk|FV?h()}u<$xkc4-dT5r(L1NfJ3+qU9}s z%;J(@de~?2hl9~bt#yme5_nf+6JeavHW{t+R1R?h z0D?hnq&5O!ip7OmPSh;VC+9fl<>4>R%m*X5CD1Ls4?7g>tQ5DB7mBJU;qWfcVAQQ> zy3tfU)`%P!!&;7&i<&totorPC2Tz|kG+Nzfy`dZphw{jaBUZ7;*u(g_?w%QCwRegs{B=%d~oG^WDt1?-C7#dHMqFQjmF4+R)DyN5VpfwgKbd0dZi z3OL(=xw6=s?af(9_2QWH9E?0nZxd4$+3uw`|ec zoNa>~51Db*5PY)>k-%3m|D34G(<}WmVqkt_8qY zxO;wqG>dZHK@;&)9OtIF>|zni-OfVNUqpa|zs;5=keYd&mi@VUMR2+|Pnq`pdJ8w+ z@M3YBEe_r^t+G!SaorjBUJp+&!*mk|zr?;KRwM1TV;|#w%6#fRnzlDXj%QZF4%{rl z*yHJrTz@yw+Q#V;(;>l0=M-1EG2daThNaq#wVrVv-aD|1Lbu{Mo?V?Xw+?MXCah$Z zHvDpwoI?QQ0l*(j4j{kjGak8#D01sz-h%E4!radGp)evo z-`;-ISqray2+3u5>w;G79;k>a+mosO4&aV}+qQ&47vI*&35julWw&=n^l}z*)9;h8#!aEik87FVWAYjT^kk z_K#wXjtPa#Qk~A402?#M^Y|6^`_>hih{5}ArB2LcwoAno(HFtxh-b<3BH}I){5YdF zvBOZek8@(qilsRFP+zX4ZXw)w#c3eVWEgN;r}jev3Sk58jf9Xt8l* zQ!A|9acP}&s8%j?D`DoebG738{V8&-eGjJ|CI_ycI}|CAKuFMlsj#-NwMB4=T=Qny zJ8xkb`r4~DA0!1wmmk*35ARatzpDp+>#|yaB@+}`SviQ9TEh(nVky4o2yNqUy<0Va zUNq31by9+-@N^JarCwr5r(SIBBYZh4)|$5wLT3m;bqTf@?WuNHVFk5BQ&1g1U_Re_ z;y358dcaekinihyR?6+grQVE>_S97;TY@nY zOq*>>o*rI{hzG6rRr~FrXymNMP0i_E4FaXzHhprzUIZ@C`h44 zdPta^#}&%gDKq~Lo0A;X8X9I0Fdw<*k^8~qKe-rO44hYz+HD6Q3l6;UV|Q|IT)9%} z>%nO4eUus)G)Q+iI#Z=j>yc!jsC1gDWyM`$^#X^&bQQ&>1aW;+kybpAo?-5W2@@M_ z>+Ul7;*-};a9Yc|dYDaN)9;{@QzWH*HG#Q62ziTh2u;f5WP%w|SyQ_0LrYv5lCq^% zYv9_%po!sHX%UQ#XG@QP>Sz_WsVRl#a1QC#+xe3cM?()CYgkB6)Xibed~+fzVISDy($hEZo~8p&Kq`rI-)O1q$D`AkJ;eu}GMw>! zc=Pq9!x>b_-fVV(hb!y7RBv|;r$-fVnwxb*(Iviy1CYoX#f0>z@wApO zrWk|~d=`L19{42;pavL&r(g!iT5`h5*e!r|faC!RC>?zVQf8sZL$?j*budrl2(Jy< z3PWJs^B~R+mb2MK-9PESXyrACpwPH&1Cu~P1S!BWjrR5_``@Xn=qwI!EZQRdSc0E8 zEUWvCv7TBBqv%LbLaR+uu?|0oge9(+PT1SrRuv34!HPpcP$QH=(*Kr+z)R#q;ZMtb zmR(tiN4#36qeW~OZ*%3~zMEwJlVIqZ{KZIyQa>A>F9wGXU}u09y%^J^T#D;1td^wd zx-Q%8ymZ;I&$%J~(r?*fOZzDVpEyfnh@nN!=#VMD-vx2xt1M0e&Tzl*0zUBk8Zoxz zF@e^pm90}qJ=WJ)BUNt6gR&aORxsn@kJx1F*6M3>1BuX;Ehh^?IG8eGk&%+ogDhIOT9xZc571`JU!Wzf^KoN2iE#)Aj~;1=O^TGo1@ zISw-9uWEylV2}ni3x1o-ER=L>IZn_ByiQ0CTWnXx{&uaghzJW8H!(RB9>}n*5Wi5D z06Tao$x6e3^2+R6gppdX8V0YV$rbEgwJz0!VdO|cEw8wSV!q54iD4zd{p`f*gs^%f zf*K%sc-yc(62mB#L_uUT@liStSlCuTnxXS0c`dP7)@L$HuYGwsKO24h<>BP$?bmC} z?1_JC2(ZTAUv9`tI{{=n{D{A{NJrd4mn}`sJV_T<9cQnS*_~6)2)50BGOBSzF(puy z0>Vz4>N7y~1ethITA}-8?Vp;V=7p-$*@f>RnzFHHtM<4PVJB#kW_btY4g^88lmc_4 zP-`V)w;d{lk7L?2aLT@$7gof)2E(8Tw(-RouBg!J>2i>#7-n09#0%&8v_cL1s#NAQ zD)3BdX4`&lYCyv$H0PDJ`chGu<^!W!lj%wU%60p;)Iy+r2*>d$U&%tKaK2J_ZCzSm zzS2#wPTwm<6kihzc!&)Zm4AZmkv}qvA|JGx68TaE=-SmoCCh#)?*@Ijv%u(PWCHJ2 zUi{rQ4uWu<)Wj#Jebj+d)L$XaGWM;cd$0lwSN8>OL6P6%V@J$(&&uSQ-{tsZ~1O z&i0KafKhAdpOG*&Hyh|0MQXawDm3}4Xz*_G6{*l_5C4GtpaMJc+b<_jc*~TQ$5gvI zHlrsf*!zL|N0!vp07K_kQ)RU?sZdT7?Bv%{Ei*RnD23YT zk|P>tcmukJ@2!~m@<3BY>g8D?hixLExr64>A+$u23|4F7>XVk0RijD@p5Zqz%q4`} zbs|T{(9FO#sFb}0rLx~`2p@n-$FON!yU%8}ZK}=MQpdwA<~HgeckC<;M-Al9&_5mO z8Xhv(jb}@TyWZhQjT)@RsMp?O+-pzTDD&ZbW3!>pjTEJk_xX>@mYG4LH0n9DpQCF! z>Ny@V==DcS$Gp~CCqoXWG2Z!W40rw@kVGgg`^PGE#l6%Swg{smyN@D{0;!!BE^07( zAjU03S&Al=G3e5Dmw|X3W-b~mXCISqxsK=7)l-;l>UKQVLmR9R;VN@EO#3Tn*Y4C< z#&dafFxf|DFdlpW7-FJ@d#YS{)+vnSf(yN&wW}~1uxl_LpaL?H<0u_rRertk>-Fl_ zKm3}x$?eH+?TNbbiAhQ?0ThB5;iC8U&ffOH%OCc(9zB2dX!F@YO^0T8qRO2AiqBU+ zc_Qh3z>p+k0I zG>Iyf-WCss*WKChj|>U0C{hVQ@ROXru*2c!?blu0z(2!LPTAu@YwLfr4nU|l_NOhV zN2YTq#Zv=+nSuw7ubb>)N~TxfUyQ-5d)k}PUmqtWi8p#$>NO8a9NiXT7l1=->C~oO zu705{8+#t@H29-^=+dsPI*MV)s?&S~GhizXrrGg^eR@8a5EY5lGLRyxgZ~3VQ%Kc@ zi&q=@ITZOKaSD-F4wJ*O1;%L*S9SQDM`}YDDTYgWIn5v+JXh%Ud~jBm5#%aX`ARNN zmAZuzW#LvT%s!RyE%&ty7xm$*!> z83H`L+s3k&EMxT*zR+BAs2v<;?B(5zNm1VzHC>7GD}28cUt;2Xb?;!-ZWXK90X#Um zHUN?M`t7GiEb3qV{g40C|MhR*y2XFph0!}yr{Te^C`}=V2W#@ZiPoj19@p9hsW0p*OLq^(u+vZw&FcpCDBFv;8fN z8BWJh5~|nl)2p-)%tPq-7aGk&`c{iho$>bkbUL{>Ijv6T^Yh^oTB+T);HylyW@+OmICXfRc2~|uU6aQl# z=xe<#_3>qayr*EduSJ7RM8l&K+&0)V3F4b86lAn5?9VIBpVH~MQR?>s>7hj zn)gOQB1E9%l0+H_=BQ!bo6!X$dWvf@f`TLS^I$sbg#a`wg(s-3At6dZN>$VF-M!Ck zB2GqC2*caA^8rrYN$%PU3s0+^%HQqP(CB2%%hp|Y>8YxxzJbY0Zb4s=@U#omo_{Ap zkvVn=N5CQ*0|5}gwuJkrZDMU8^1{Q}j*O3MvQ2yZQh$p>C05>SvY~PkL({Bn-_4#L z$=qz+h^hfD%%e20CxT~?TdBVq$DR%mMOHFGBI<@@P{IXnOpWo3LE?2YfCvEde%G%k zo=*{Mb^^u~2#AWoPw-m=XrZOFqitaN_0G>jmZ!{DN6cE*-+cHTP&)QDcK)h$;Pmtc zf%M@?)$5;PzZ$nM32~#EuUeUOC2`+OVgn3R+!)nl+GA!`j7@^{PKj`l03{8HVnnLZ zD&av0A?%LMVf{kbULjj3Yh!M-lCRZ+>6DB9H6oV0IYI;h zS4IzpaX}E1BSW!)$9uQqQYN8;HIj*mXq%%#^L0jf5>0i1z~5PoyV;mIM6=&Y@4Y_8xu*1N`QL?I*Cv zTQZZ!+Xv4Oh_!l*yhoeW?&cn{AU%JwxmWEz-`m~U-$M4FedIdgO4pvEh?-ao>j(>C z#Rw;eDuDntqZt%2IP9N87V}Q}%|>Fqdb(NNy?^iC-8=U_y?c*IX&4XdFJL2~!Y>3c z!`3EjbtD7(BfX*7Uf?l~?AzaNQ?YD+Etjdj8G!0Kw@tn_vSrJ0J9sD5mNU zr~QjFC@P2>fsAN0Or7=qfKt9SLv{n-Z$SaYZVh?M(5F8R$b~?zhdCQJVv^Ad<@>k> zYPtMAu0RkLK0xoEBUF>>vn)i*jC0z5@lRobsua#{Kwz!?cl8W zhwZ1E-){Y||8Vok)}tS=&MgLZauD+1_TP5yfBv}@FDswAox#NPWl#1hZ)EEhxbadV>~B-xAx7<#16_*b6iD zDIv%?tT|-OA?uW1^B`YdyFoBkSC$7HL~ZC*rx(zQqJkj?U0cA#;35g)u)d2*1(o4& zc!HZl{5keqOjJs`)iY>?5_p1VLs;{v9!PdP7;DZ%CmNcq#+$}Ujfik!%z?b|u$o|V zjGfw#-LNeB1kgF*J_*QRK#|py7mH^T*z%Yb3MOWl+%bLdp!bSLJu+j&!w4*3(!xIxT^xXecuxk$9t^PdW{(87Te5Jc zIITVjv}1?)NdYn4+3gyL2a`EMjRZsV5(8O~XFhLnX>vlg#4@cRI&ERqdy;A#^NZzF z3>81*_att$*{`+?m+GSCn9tuZ3%V)7OXRIg`??H^1QJK_r?%`WTx0>A@-dwd|S;j&WkHy|V#=-KLY}nrQ_= z9NTBZ+F&I4&p|e_l8`Q0rI{cP5p%iL0;RAUq>B?DG?wqOipjM+eUq)B&Zx5N7^|hE zM>EjEFGfcX8%x-7ZTv(42HlQbl;!NBuXsU9{I9y1$v178rE$2>e-%x_t|ao6N~a|= z-6m>z!eip#M1UuKpbis``gu%oUgs=a3pJNmk##!O-X~MC)}=6^ZMr3U3qfA~BZE|{ zXk*2RowQE!k~_>*SY6x@^m8GVX=0&s1*Kn}1&(i0g@S}f6IOPCKQdSQKvoG9)f*ub zGwz^YjK{W=3SVM{opRS7O6y{-1IOm<1Ar&Y;5-=f}fY`CD$C+E5j z&p4=?~9a@zPMB+U<|DN~zYlG16#*X~guC+zEaeXYsHQ%YJ z7ba~+(c5snvR=cC3@ce8HXyKBpsQxwPMyaZ-9sz2ej%V51|-}I#&>PLzR75Gm9nxy ziJ-9NebG)R_Nt0$&4w@MKmRY^{mZ}q_ix?ezdMV3Iim?pOr+rimKFK&zc(kaHz%-i z{(&pti1&{Z73})ujAKxpLU_^s03%5B3_%*?;|pA&LdojI_Q7{M&ktyD-+cD6da=2; zhZEJ8zmr@#6BOXC5)i0^-<-g<9~isYoP@lOHGKkmi&@a2fH3Mgt_K}c^FTE8DK1@5 z=_6SmBc5orj~w4P*~Tv#|3#aJk@w?jd))7?SD)WQDI6e-FsS>e|9E%|S1n}Io*=aP z17!4>jMx8SPhkI?PgwP6>t{M(RrQ#2TwE8RYGNk;4Ckwd({QkAd8hPHl&8F6c#MX6 z%#<}dKNZsbwDzyr$tUJKr~T!QK9$S-%Df5$&k{LYo%bn%k~SspYG5TOO==euM}EhFA)c!?~LSPVON)HwT=_<}U6<%Qm6F zK0>;MrlFeyPFO2$4mfWPIO*__TD{$@ksY)D5)L@)X6T#qqMP#~Di$~AMRYg$1)Udh zQ0kL)@8-;CvF}9tnNf+Hnf6jX@V)Wyh_12o8xIc{bmXvnv7<|_K)(;!mU3-&oa#Gc z7^KH1H;0Ke5^y*3Y{fIxo5RG?`Si_U;;n!2cdxep+tdH;_5X((nf!Nq;bGz_ju-S+ zL^w!fC4T(x%|YVLLE_CpVmv&(i3#&dyUGd2^;f)^h$Exq9%eW|n&EyUj;ZNDmzS7P z`gOO?aCvv1Ut8`I`SIbN8KiyxU5F6arFqbXuB4Uk-=JxjwHM3fKfk(I~ zIXPMMUUG@H7kG?o1#)oFUS!E@CM0aHEbi&Et|l_vqObajWj)VfdvUo4yN6pVz3~Yz zxfXct0vhX_(XOPVE6s^o5K3ek*Qy zFy;`S(QmY8-g3Mz#M_?qqO1nEw<*^|rWbN(f@9L*7-EP=fnL$V@xhmor>0hL3{L?B zPuf9Nc!O_Vkh~*XZH|woli^YI*SJ~<=L3}DiHy}rVQ=nk(@SzVem!}GX5+yuufBG_ zOb&461}wZTkz4u*kyCkvQbL?*KMV;Z-kRVNiTRy`UP>4l+)IJG0&nMD%)|rpV?pZO zH}GwERhzWKN%!$^G}wO&Cs+77O6=dCDk96gtB9!ww{BjXfjbN6>Q{m1EWzH5hPc_% z2H3%UB4|K{-c^TFTz=J3<|U-Sl_f6=@D`QXzJb+eXI1c&+X^+>PQ@~LOd z!X54lgq)d7?Gml<&zGm4ef=yM4vrDx!9cvt5|Ysk6(jl@qlUa{pIzgH;E47ej2ii| z4Sj7s#odp=A2JTtAyk$9q|cH>)vf1&ekYq%`Hu&w zGG|1(_af9ZVX7NnsgUsdYNejy79F>H1z;93S%$JGbGQA>HTXLX2977!I{SLV%z#$cOpqq%^!cI8W4TqUWzTc6d zLDG2EuPr52Z|js`&q=y&@(Mhe{8C14I+lOyJ^(D+#MMrr4EGE{n|a`?g9OFY2iPjF zfW^LJp-U2PR*+=wUXPoXvNUOU3B2K=9M)C@?ZVQfHEeC>Qp4z5Kf>>htMmZFfj!c( zj{!I~MH)9JZ*wh0z=;VLCfv^AqDvf-mgGu37F=2V{hdQR#eG6(0}xAyDKUQ=F!%R1 z>QZ^PXEEF0&pFcAmFIX=D(Z4b@X?mfAe!{fv}87yhZ~67fLn~jY~v5-gZz$!iCt%? zZI-HWl++|zo(xZ6dF$z*3Y$rJg8@DZ)s@QvH_CGd;^qAJQjV0`xFSSi8AAjTt;Cnx z>?wQYy-oXJ5Tp@%?-&vPMhJ?{BVUpX*GYdU zGbfW<;FbiTyfBGb7D}!lN?c5`wdy0}cbrYk!0mymDw&w3pdD)jk3pE~!IT1SaMVdQ z25>qKS8PZ^oQ9pl&GnoC5_~#^)_VfS-D$@ZK3k6ts{Y%)My?SJ9HCs<8k9mPlVgO$ zbfw9<0Jcy>t+nX{k!EI?QPY`a|G|s$<#YIcjX+NHcpATq|CM2y;0H@3B3KCht2vpc@8>I4dT zBk5nkOVzHf%xsAB&BNJb1b6h`BlzZ(E5E!-W%Gl%e5)P;polImjHF%W_hLDf2vLN2 zC7o9Oi+>Xp5bHy;1}{V=Qr0g`&cmEpa*(SRzR)?d&> zb36#8`Shp3Xf}9P9BOM0T^3}Wc+HV)LTwuXjG*NPSV()JiM6MVm+4M$%PB6{i~bF{ zhs7=x5-k)ARdirdKCKCoWdL?8c-CXy*M;1Gv5T^PJeLRcYg*+oqLrv(dI`!b{*ci} z=L?OG*io~nNzvL}aOWk>%&nF+?3QU@vj+4TB0!Pf)4h{d)zWNd)jZ>@X|=$+fdrk@ zSQS!@*HZ{2l_lV+3S#TxOqM14@lXEgJ5tDgb=Dp-sM=`l_D@AR0h8Lkij`}RC>@HE zBVF)x0bXgjcN+R%qskFt?M-HxYnzwg-{u4>b;-vi$x7}(A^@-0+~j0#8rtX5>Esm- zyx*-Q%kq0%9(_ooUEV&;53RR%t^7OPg#F1=Q&;)r&Xfj?o1La;*Y}B0*2WREqStT{ z`pO5*m+4t;7irt`+f{m<)Y-JrwVe6w_50pZ{a26f{Lil+-@3(rcNZQk4^LoHzL*Yz z#0uxjtjmx8y*Xdry$Kb}-6ACU%|+Egb#uP_mvX+m+5xWWwBaDJpB-WY#6u74)?Vb% zb)53Hga3BgJ4eokc-Yy%QFQ%w0MH_EhS>f-1hv6Ium{*_Fa4p9j6>AHb`<1j`CFQd zdLtSDmy`^~lJ;_!JB0Sq-y%Sx?j+hF%b~QKtke3#gdKw^PNzNO^JWqf6ZS5%i_uDr zBjpJ~6ERx_%xgnLU-m^E!O{;H91#DPsLmm7GcPscCOc2&%=RZ2)+PDGIYJp-oXeT4 zY?)9BMgbb`q%Ee#IGXm})Z6m=@=g85jj3^T6>mfr)befA-$yH?Abx6VsbF0}T3Y2IGZoz!=!y>T;>lB%n^o7r8;3v)C(b!>&JeyR2=m0= zSV>OL&;e`E^m`|FA8fpqkjTXg9>-yoy(?B(mRQP8jng^QkSD8$w{L&eyZdqPPWR~U z=eIiDqtEXi)@{_%EV|h1A{@aGa84&_muC+?On_*gmD{ly*dOv#s!Y;U%PXr0Qmuix z5uf|RLU3mR1bR}8AaERgg;1#@dL~|Md{Qe5+%Yr2tA{Hnn z37F9yOS(9Fus52G8QaryQx*3RwG>9HI8t~vNO%-5{3cyHCaZfsD`8SNM^t?Y2M>U9xBW5xs+#O;Z3oMJ*aYpCs2sB0MlVaXC!a)ZoqtyK1_qTsM*79PG(XXBZfZ$lPC(q_KYO6qha}%D%ir`V#El_pEQ`L%!{6Q zJU^I@zHS;pXp~kMuFi5412BEl4vpm0(wuXu-Nb*OQc>}-$I!dI@h-!xG}|ui_$m;e!u0N~+I;LT{A&m?Lm)sh|demih=!?VMECx1fslLw*uoabP z`e!kSM>Hf_MmE*Re9KBPFhMGA&EWmu?Ts1mMPCh&qYcUm&P>QIq~T&d(E%sJ+{ zGNI1xJkGgHAuPQ;9jCDU#5P-PT zd>aT=cL~fQ$VGWN$rm=HQzuj%SGu|&)LJxm8D%A|YZQn<^@Wx9QQTKBroishDpQX? znrswiPN=KU)3F~yn$R$&%Z*+M3Qnqse(=W} zUJXCX3kI_HF_X4WrpO2Lw|%%dEZZ8l{btVwfMkNp%_X5zsbtyGI+m~vE6U1$(Wgr= z%eH9pNu$71LnjeX10XYzwK6jQLgumvGF5c$)fm=V`Sr>T%6^z>MC@M@n<@+btjSx5 zVc5p-!`$h=hF3xBE|d~X3ncx32DBf?ATlZ3sQ_sV)e#;RZ8i1FuzXR&xDfW;UUWY)d2d1gI(}$x&9E|$M z@~wxNOo@cAdVBoNvo9}EVPm7ATGty}V?E_wWzkf&_Lli=wrf~VE@=mc5-@IuzYPNv zJ}cr~Da{12EtX#6hL)XPboL1T93mYxwZ(Rq8z4)9jfYv2<04OwoKkwH=cD_wnt!Si z9M)J3LoAz~Y~)FV6$jkg{kO8O)Y$oTG+JWS!dWAFiAQ;Wuhqid%j>Dj0g+TBry|Fa|$C! z{mH)Y^G|GJDCdz4FbximjxY<5(it&{DsSAts5bENty%-_IRFoy0Cem8MsX6Rg~OLY zM7GX(?D` zUg=xR4QiDWMr`^ft9x;Emx?-~t4g(bHedh}LDGCXqr{R(x%Y+8s%9Pt zsUUmF|03a>O9CmNc2Io-PY**U!jN??VJ5b7>f{nxDOJXV;0`@W2_>@p2sVe%Bw60l zki@amogxb=@`*zFu`%g>Aj^&rQ-zdpMPJcc&Q~thyK0hyWup7^SThlDPF$I0s%N{<=R zmP@fxM688cys?bh5}OKz3ESb;QBr~YS#MKCQ4xSj&EMth4n&s^L+M7m!y?J0swF7V zR}(-lA*uu(rz5S1%<{0REnX}Pq>WY+93d)sxFYMkwiG@V4-sXiSN&!0~hz1kO%Xkkb#%OJLb^lhHXmbg} zd)XHnE_on>Gp=Rhyt}dkMv5!dVxouO6nO)9Rsl^Qh{FyN3-%7%thD_r{40A{N&McY ze=8@;zb~1ym*%%nIHoBj7m<9(ovU=`Ro_)%o6I{KOQE7$a8e|qz3-JaD(Jz*r_Q(u zH**X;3q~6+o$qzH^Ulf(#?Z`}_K*eR>5ZcFvuXE+-2wc~H-}Wx#Dl*9jXhY4ZVfjg z2H{Holym~g1fiPmKPqtMp>;OwquNC{<%COh*oXHd*a0nAu>UZX6)gt`&|}OFWXt5S zDZ0Ui#&y4k4H)UJc-a+#I`;RL1VxZx$zHEpyB~Z6EESshb6I6Z7+<8Cstk24YmL*p z%`pmA$ZS{YD3G&5hr0668O9jMz7)Oa=7S5nVnq@G&crYoTGf(Q9dC3{0G(9SBI%#0 z)r$>Pc@A0#`V+V6v0Q|tFqR6ozMLQ>$WQ7Zz&H>^y@A7^^ywj0ytnIi$YN*Vj<_2y ztkEhQ8(E8STq`VWxT0Hs53(@R2aW_uM!lF360K>Cc1WKaB;wKIBa0D zAqIS6++kHIiJR9k^=59^B}^uM@@HMKSE2vZxKr6;xjWlt1p%qyD2HpTa0l^>f87rJ z^JHjR(IEEoG$B^I?ujh-h>!^`K9}4aQ_k3Iuwv8Aa}|z9<>C`3lyj^(IrqR1PFA0Y zs9;_3q-ndn)K7Q>O~D<%S~39d^a`n@n?FiIPxtkR4TDkbc6btY#4>M{I4g=^j} zV};|CB`kz@)L?c-LQ$m3k;B)}qxrv8ciJ`N2_O4R_HQ{~g!8*w@2jH+CM$r*hD0 zsK$lo5H7V9K3GYK1TgD0U8hW$DruyP~6s6DUoR2fRiSNUgsbK}!; zgQIF0)bj{X@4_8pG-PVg*+lM#zs8vH`XYC#w7!G=qWx%h?a8;h8&5X3x4wP0`Kyg* z-+U{Ne*I0!O4)U~86{)N%ysg<#KmzH!AlJ~5_uN+ni0~-xuBJEDM(>Mh2?wc^X2nHb31LrRQJ#hwU?Jsle9FiP^{1vJ&b)CYZe!=*y4XO}ES`e_#_Q#b z6VAsnK&TD8*1E%%v50e)WF`YXYZG-ja@(N?q+NJOG@{@gWAVx|F;w<@-`63p;s4{_ ztPdFz%q1lZoX8jwNZoDf0&N&?6F*o$>%L=_E|euQ<~z?Mqe zY~0iS+Mo|L5h9SJE1R<+ZLST=G7b0Z&Dr9lgS1FgW`P`JlV7Gu0jE;%a?>2y96OYg zGNPy9+_u?--E!R5^SlvDr?~y;>(3(yDR5UiIf7Nx`j@Us(8UCRdpp>;K(=Q%R*ELz z?&&GD^*x+Iir(RIFIEC@4#Q3~F1BaWGuTsKA-D*Q##Itcxo$#jfrvqJtlsl!CsA*$K)F zOwyZ(cV_6Vby%~q-@fH$cIW|XZ$HILo#*!+dn~n3-QOFFUl(0cLEZCYG_exUZ+w5$ zdfj>rk>H|rkvl#lQ$V!&F`D{}9EMbUstqk^r(r7V!=dbXyzFogEq38>ey`B)BEpXB zhKpw7LqL_0kYN_3`-o^>UgHK3&is8iYrsLAe$skjtdLC%TyoT~zf~E#>r3lrk!8*t zz7YsUluC1K)S7y&-k&?N@oGTPD0)~*eTxr=B|3_Wx!AZoGT!X~79-gE zSaBKR3EDvUk=3l!WsEQ`_Fq94`C2*jpEkpMvY4; zkE1(u$|n6;b#@8vaT`&#hZB0owQvL3oUk~yaP+G`2AyO^zTlX|-fVVij!cUeo!Hxz zR05PjS;fHs*~`Inpzca>AL-xOx33a8#h4YdqG*?5Y)DLSRdkiaroZ0)=ma939&QlywCnpPk?_M>B@$3i$b`c(h$?ZSNOr z&k*dm*xoI6H=b{QwNb2Z?|dVESA4sk| zd>=8v{KOK>|DvEPBoxZ%@i0VTp;F6WJRKpBIu|O1P*Ar74Clm)nY+F*pDe`j~*{8@uaIQGV^==CjTH zZ(tu_LytH2w>I`b2_T8JVrOj^1o8s6bBdi8yF1%^8$j$H$biFbo;@~HP9V(~k~tpN zk`b!_#)%GS>I}3&rZ2XOFyDxOM0D?OQi*-@O$A*$^6Ypn)6W6ow(AHZ*$cmQx(ft)7kg_o{=Di#bzLxA01_a8nc$Fd%5iZW z4|~KH4)jz?!MiUG7Or$5sHKJJZ)d#;OHGJ>+{S;$L@F>k?+IgUjzW?cr8hoYo)4sh zfLJ%ga>p>}uY>_LK!KuLy(vjxUjJpO=ba(Ei4ZGgnG_!n`}9NXEioZRR0J#-j5?yPBAWW*k!x&r!XzY)VC-6O8(Bpp3}r6vYl`rkeQdL*Bg8Q$ z)$3+uUZ&9oA55AGjL94>j?{3C@QNWTj0iO0M25|~chs2;n1G1cQD$A_<4~E$WF3Pc z9(5wt9)P@dj9yx;OxM?W9LFgRT+Sps6U`zZAX$*M*cO$2fxbYK*!nwTC?Z#CjAL!bEC#>1#ID(;5QklT8e9 z1T(-eO$t*m5`M+ zbeVWiaTy5y0Hm+V(pn}$CSvmLDaG6m-Ic|+bPuyFk|)mS(h-K_yvp6rB-U{1ESK;% z8I(tw0e1(dRA;Vd8GJhjmgyNi?l7Dg8}Lt9MgHI;Y|H&2LKO9CpL>B z4iyrhJ$`Z>pw!!*z;e_*X(2ZVT+D4pVklvNT3K5TO&2QAB5t_7v%CFd7YCDX_rKZM z_;!8!`OdSA{f$RoB(vz%`8}caVsi*0#oB1Rp6E4@SBT{uy4HlSKJUE#N`1#FE6Zz1 zKcuGOXMy6wBBk=|dp%A}vCUCI_#jPgN_mL#b z42(BvAdhdaYQ!AK7aLs8;^)QreYw@b8b`u%;Se>20#Og#2IOA!tg2UI&G=KPpZvL+ zGIShiZR1*EiLsA#nQ^})(boH0lt@?RRG4<{5TMUN;@f%gBoG>F0q4>f7JYkUNqjyvAb zt_h6>KhP@4SLXcUrXSw6-T%`KROTji`1hbcT%fK{DzvCEdGbT2)m3W!BTcPnZe90Ja+|OJ$E`Seynj&Tzh8$pMLD+i0O0Mmgs?w7 z1!oJI^h^P}zu#O$tnSUP8A)RerTjC|Mf@23gYRer9=psb_ zfPma*4>Y*?p!eD@FCrUrpQcKvT%U7;Rm?%AfyP4)UlT;O9KyVr-gg7?EIYGY)udzU zv6wtzIfT`zXo*P5F`{_ZabGLKr&YjPD-Omp{J^J)R+7Bo{;zksv^d>x*h6ZkAKnQzsu_qzZ zEr&E$$Wn%YvVK#P3D-l}Btlz+U>f>|${k+7iBmGhrmx(OT8*C1M(|r~T$W7r-UTk9C`vVy8O@>Q_+A!usImZ@SD;_gJWzH&4kXPNX zK@%^H>@YDPXT6v`ra&QOn_|{S>Ulpu@Tq~};`x+GfyQbxdEeeHo}+} zXpTYVC7?uJn>_0r^aicU0a=w{QG8IT!a>3ZWdI9t@6bXCMUXdE+Pi!e^S!-9Cpcge z9T~V{W&&FR?o2l;UZ)M{E=Hw;wlDs_PNfvc#Q|Je7vrlsHBX% zoVU1l#rs>gO98>WQF4Hq!`wU|4JHt105gWoTObdTm5N~)w)0qw!4n#!PUAH+GU^Q# zb6xe>!oI+*(;P7job;ms&2# z!j8ZRbKo%Nz$_O^05r2u5+Jh+hTEmI?{b;2iP{dJ#FV%bh+?+fS;XEY#o7nStYTkDO|<)UVC+%T({6N1BhO1b{hEV^+jk~P6n^Vfu+IEJgj zY4rU(MiXxw>P=-ETZEYesOWiuF+~#Ao}eNFQ-ZQkZXRq8)vpfjNn(o+c^`P9(K$8u zIVW}h{t~w}JEz4!rWiU!$)u6Pq!2q~q&4Zl6$5kgStP@#SM`-%r_EhU)j@9OFj>+9 zxN*MZktsW<%MC_3+PjV?Te}=mV4^7lQmKf90mB}{D&WTf?>_N5sivzcRHb4*aB`d4 zC(FNWoDz;f+vveN5tg4VT(Le`-GfHvWObu6nXY~fKhMV5w8gk%fMi*i4s))s%AqF0 zGmb^^)JI%<+`|>F{vj`8EX@Gk8(Fr{1HLbdt8`xt*vhP1!{Bu+SvzcAr%W2Kw=SoD zPH8KHp!zxpJi0p)&0t{D_*=C)6^iJd>bc*_&zpGwMP*~lz6(^1M-;=yUD%7W*gQrQ zGf9I2hDr^zoZV3qj=5BggqJ$_ie?#6JPe!rWHfP6ABtcqTB;dGsEP}!M00?R4Xwek zZG%9 z0CL+Sg};{S+^{F!nwA+ofnLX?Y0q!KYalv=>gZ&ri{5jP0d^FrHNXNs`o@AyFZ}tt zBPC2yG^@nQk~6!a^*L2Ca{eeE)qcG@oZEU5paxI4yG^bULSdMnlW;K7* zvJU68$dNa<=qoE+4u6LgY?BS<>M3N zlheshZ76&=A9vY~gjDnZas31J<8;#4pBHF-zyUUsn_*L^;sbWbHJGPHbQs9+Jvy`* z)?iLGawBKCq2UgKWFVY4+Ddgn>4@@L6Q5A>(ecmE82H645R^-a&Ywz*RIt_ zqD-C?K-&oWd(@vq>!ZBfz7cH`C$D;j{Wkl2qi->S~t?QXSiA zJ2B6jitkf06|fnk>*ysQbL0o}ipI#?4Ffv*JLK#yP zNY@)^13N0-bl`%(=HQqMEuqDulTO~<>FASB4t{>O`{|wAM?Lr*eR}uPyPtKwL#HE! zHuX7@S$=nyBdrcn$mX?i!Jx_ zKX5mrDy*>>i4%$(;Z_2#`yL&Q)*AhMcsNqct-2z~-$A)!H*`T*KPzrWN)NB4BNQ~m zqx0AA;i1IkXs$X&+qwd&HsHHpIlr`r4r@n4No*2oMOFsi&Uogi!a|N4(YbZ+%Hzh= zVv*{|)B#RULMh?o&snTuaW`@ZQm=tO8IKzx3DFRGr}V&ezhP0y*~vCBe@xV`IDVff z6cl;3hHLJ6bEarm@$B^rq2X8pY(2-TN5vwz{lvZxY*fM4F(qyjLRsXp6|mi{ zA-`5*Dq8}6r()`JE`#=p!(%hjD+Rwtl&6r)L3mnlKDq;IoWVF143om#f6s1L$)-VQ zmS#p|T?y#9MadTJd1Wy&o;&S-o7i`h3)ZPYfJ2$ZToMSCbGy*4d6o=#mcloyLg+w@PtOMF{Euht8Mfc@uF8kt3Q#HO6gkDi;y5tw?xSc(`AQF)zh2fFn zJK2*drrzS*m+2sUNdTZcIL;)AT4iF7rnd`g@4$LLKrrNUpTXj;Z){hPa zakXkOghl0*csN$ahUK`%rH&MF#nK+CzZQ!yg3Eb}SuP5B8g~vwltTz5(4YR;w+#RO z(m2b_+p^uw5DyGgL$5Os|M(n9H=uEn8*L>SlQ>p|6jpWObL7a_LdK~gYK)06H=PJJ zmYdE1WJxI{-t1+oRVwPP*Cr64=n)TLc1S>LvN-DUfGdJzH3jnJU;^6XF|4~%6JdCT zX#)NViIyN^z+NgpOnqy_7Vs@ZUm;X)NA9%*AS6gsi3MGCq?Fi6n8artB}7ZOE4?J| zv*%=OD5{oqK~AQ|`c5VUBE3#XiR2P(%dU%loLQXvca_G;&ZFmvP$a5n7uj-KuLuMH zS_FbR-Q-jQtnvYzIT@bK96~Sapy+!7fes!Gu4jwsxXLF9dNivEA;5{V^7_ho6Wg>n zZ$^kQMlM7cQO82}JDr}?|87YyGbMQ2U9S8GhsPBMLtg?ho)q0yu<3UA11|@@&LBk#HW#K(r3Qz@0GUbRh{PmK`R0vTTU4{Bma-{Nr|P30mjB?t`kxN}-T(I=UAxBr=BG|U%yY!kmy=3xA!IFn{5$VLc$GTk zDs>8Vs#mE~po^^}pt(w&!dyx_-*@Vi_sN~IF=RNm!+Gw5$V#%O{Il7K&!V-40>A6L z>a=!9OQ%7zD>=F{PA~LH|Dl!4QL>(U{$3Y^m zDZ;IF&U~va{e9hNmMZNifdI~&xDG#k+8H12_KsR?GeQ^pB%Dp%@Vx_CqL5EZNXuUa zRNv7N0cR6l0S;^BP${M56BPjmz&JtioU>;^D)ago(o49q8fU>`LsnYLLb!+AZC?X1 zL{Mlp0;C+F;UW~$zU#!Zj*;;u6I^=J)hx^Zv~wn5tu ztdFEurmNzo8r<3ELzonmD9)XX8A)Yt$YKr1%uuz?AC-4vHkHQom$@de8z$j`(FqZR4#gp(DlR_nd8|ZEI@)Q!*FH*rN1d4um6Cn8FytOn>J$1E= z{&<&>p3!9^#>$5lNp5t4SY%gL;YgMe1fbou=deA4A#jm}MHAd2g&qF^EX8J7=KENf zvbRQ?XISRO;I0;C$g@!0-zFmElVD{-zS`+O7@<{9gR`EadSI5 zjYYzBa>`-&-}r$^d?J}gyONQ7SH!kxFO!rcn=Wa#u2*(9YvD@%Q)d1rE91Q{;nS(e z#3ue!(J2<(oFz+)pi4?!piY4=@;vy{l&k)D$n$%UoxT$iZx)CyP4JO4Q_o5NFaP|> z|MuVh(`(oG-|F1J43XMwZE}HB)ztj`*|mQnRcT#e6a3_@D_2Qq-ov_b6`(=9bN?g~ z)L#W?_`wEfSZE(Xffv*MAQ(Wp)!+?P>q)IZERi=iBXW0m9ZWFgAt5rekXPeSFdRXJ z>Ke94EkL~iVkl?|y#s`YJw_TJvkN}6v<{JdbYj(D;(3P zQZyAL&Q%Fau_{zhRab=O0gGj5wHL`fp9pkXB)+D`l83w8%cr76#a#g%BvG}bk*V4m z##nu%ZPw3^b6kVRqp9A35|3_1uAi>cDv;QoGz?q(@_l+z+=^WZsUvYOBPaOMX%lT8U@AD{U|Q%f!Mw8q?welTkP@U*-Uc+EFwm1A7NNX`m|8 z#HVA4)Dj7r=Gz1VI!jcPXmC!4)JBIbE}bey(NQz1U9Ju>C5a7w$`1IKHc&$wU**k= z6HwscY|x7W`*$WUtMv^+x?&MJs)ovEOxJ@}-ISU)lH{$Gja?zs?K!h6;RY2Ig~F4?KqS-4=snzSxP{<# zM=)@PwLP5n0Sj!lJx2FNk{^Wso-}rnpAC#=u!j`w__|m;2N8Ofo{zXrAXi{8{1%j! z^c$Ctf7e-5{I>c#+1RqwS*^jp1*Vb{93i}|IXL7>^I5tW;!>XAH-08Hpb6&X%+@|t zlO%WS=1s)R3cc5D?6^ZXj6fPehKg>8c3y8R?jyr)4&SU(i2)xC8>}rMfhvNX$J%69Uvr>I zeUMNFVda=u!N!&DA7v4H9W`^Q-8>z0f3hZ{#*$AsVGV{nZgtpyYF-DCFhG9`S?y{J zJe^G-u$P_-^kSGWC7|VLjE^Bo^SID$xQ?2cYu>kdi)1tPQLtq{+ECI=Gry>_m}hZVEZE^hIrT+2lW?g@Z;ZC z>aVN#q;N!%=*h@(fJ`e8bL@P5f=max0I!^k8=Q=<)L%bj_1F4nIK&wnyYMcuAs{Ej+0tdIJL-Y@}F&E-5wZ5*DVxisX3kY+nezyMUr zguJ#*ZShR;7~YJtac>(0k2@E{OK7Hiw+}pwo1X7O z=MX7{hsD~?CQsLv;1QbP&J+q_WZ;=V;1VBPp224mq{YJK1?h1%934Q^pFrVTz`=Cb z8@CJfuEk!5az`^da#B5viiq&TC_j-tc?tmNx(2sZKlmT^CqUx`+83Wy$>s%+yk9iG z(LQb$n@0%dJ5+{&Gl#Gp98UU!$qn`fFV=y@{t{^EC#(Ie{MG0HB0u5ii5}WC;nWYU zP#-OO&ApR54>n#)^6ugV2Y+uBPr}sU8dN%oDb@dn%&^|^;r`Z8w zGoP;VVg((65d>!S<4->O_~`D(cYgla-P@mj{@LfBAKd-89vqm>-#fYcVD0b~eRU5* z&v&I~Bz52GX(&6KrX?) zy{Z+I29mNO<*q!yQ5@6(sh9Qdt#%%G!gd|UodgMqb%#5Q5>DdLu0|@3(q+})P zTF;iG-KIZ<@cC>o?caRHSk%vTF?>gG-jt}<40_!FaUGHr?mG{@0uDxn&WX|Nz5Wp{ zcrrW|6!-U6KK=OCiaE{PU-|em{87X61+1#G1I2Og^q_aRy7&C#Z~yxC>sLpAck7qq z-rzoJNu!!z@BRw@1~VI-W5o}!JTUQ~2kqCXmvpfOmE9MznqLW=odbHPgO+>az+c{c zNxChZJl~et{Q3y^Y11uXoZQhqkfOQvv!`>MT2*@?3PsfzLPdB4ZUtqcMExdL>2L2L zXO@w&Fo2kj{qoQR`p9AD1P!nL$ds^Mrtb<+s@jFeTRGyod5Hc=XC8#+eiYH{;r9Oi z_H)(vNsUP9vk$O5DBBChQ&h)(q@5JzTZV?LVJgsm#D+OYJ9dMkU+@9}62{=+!RWQN z+&Mezb%1}lJ;3MF>FCr;>16t~2Rpcr`>&vEvRq>hD?z=#;?uTrnXzHF0F$o{k5MB0 zlvEw+G630HP2sYKF?fOgPq*TLCsjQ1Y;o7j*3Avcg z4OH?-b40OVLMWzZvmx=d&t`S_dmi!I%1#QF&Mo+5$6rJv_rXn@5#UAKFTEU*@WE&Z z1PT`797a4MSd0(DQq(}Ki6lhr=p9HV`l|_BABb4UJFy9r6yivz;mH}I7jP~TQAxx| zbEv5iOH_Ui%|xY|kWnR_cch#eGJLuCn8T{6AwzvfZQde?W6DV$FH1mCC3nxL_tHd8 zQRR}VqK8fR48#>=5|ag{)L=u*390mDDZu<>e|zUGuOil7 zsATgt%XPfl92HSi0>3E(Nkx_{V>VvBX?THLyrAy^&BJpFFy0ULx8@nKdUQ)F;hLzmFowMwC(&$)dtWiJ!3hpshAwh@qApb<$;%?8*^bqnGUl^i9 zWgGPAN_GJiadqp9W|`WwTk#j)cOXmk(3c^7yywo zg{HAxo$67GyPBTWO*bHZW9*S1OCijkE<6}Jvg(BAetl&r&R8vUSsP97vV#dbG{Yxj zM4@SnhNFAmAu(>ckA>sP3?g({|B)FVM4>Tm5<*GjD+O1EscuqmO;Q5jB2j^Ej7*5P z4CYm68jR@Q$Cjym%D`9!ggPo}i{zlT(tCZ@ANN*-!8!?aj-apr=|a4o!r@RLjzKBD zoIo}56KvfZQhUPa&DUf6D_s+AClgVPNlQ?W@dZC~K|AbGGez?{sAFi9iVzLK1khcmijQBHf3TeYiT$0_l&U)fFbg*WjKU#S$5j(-oKpgqyt!%q`O0=_!tM`@BCG zAYE7FVOkzALk|@~egu}%#kpD*ub%&up6T5)2C=lT1Yv*ePli8b#A-UPA%29u1bohb zj&Xn-!krE}F^Eb>#i_v3!yFxYXb27EAN{Q2LQW@>Mz$xT#<2KUzb$i)h@$#O>?wT*71u}{Hd{Eq~LgY|sGYuZ4EX2&-vYKvZp_31Ri4ETm1wC$4%~w8oX{GvjY#Pd$Ie?|h9KuHWA9#ZdC= zw0hZ4s9fPw;RNH%Th^~}@MPsSZ91XlhzXe>9ldH?+RwGDA4v_2>S7XXJBat4+oZz| zy?$XO-4L5G_DBQ=)5sYNpuRl+daS z49m%6dNRTd9}%=qP4paM3lvA}__+m?$ME}X>W$QF39LkJ?@Fm-XXKu2*|ooCL1Aaq?<kvKh30Izp-gt0D@l)I@e_T} zI~QHlfQDN-Ur~v)eKOW!-kCBfHi}SzzBpC>$s3G>bcM-TqM@(q~?vge!x8KB7bg!aV7SfO-J? zs!OLl_Gr6D{V{wHB8>*vAXbE|KP*A4WXQB=Ctj_rN#18tC%Gp6qB*^zz875Hv&jsM z0&5gD1sI`V{gCKre>>}UU-}B_j%I_ygs#K&4AdkS0c4x#XvRcT-~mXGLqIgW)gdqe zn=h{n0#n8TP|U#ctp>1=W6g$)pdwr-KpNvpb5xxoY9z{FIG^0Qb&BG+R$>E~yB

    zvK0FOUl2%QW`Je6kOkO=Vp8%}_DB&J(m@Y1Q|cW`Ru;3rW;PKqCznwoeIAL7bf7## z4O{ZNx>7@-_8bY-N!Guch0|pP(+??>F59O=zcfGf3jQ5%mF1mYD*k4TD#qjY{9Ur4 z<=*5(+Ik!1+F=)^7;Alm*JaJ{sKNx-d1B6TKy%IDR)3~fZHpC-*hq5)CU5cLn$#q> z&{v{RicX|*O#k8Rgd`a~!^}BlN`X0BuQrf9?Uwk!{Am6mlM5*pC2EmSv@%V*QTkx< zvJfd-WVGavQ5B*?dpum2QHH$8_;d8S#*0cL;d47;R0Uyc&)O>YcDo@&Vw^J!7n@a) z9n1Y|nq!bJDE6zei|&lBaq+4V_+knJd2&yad+fG%V-NePGk}vbcJt{uci~&uFAobG zRnT&GpstXPNcbJVyVfJ{aR6{l#Qq;-eCeh&5hvX1u2Ho;FBlVI7N1}}19uJWRB_U( zX2+J=Dsju2yPB>@F7=#i4p$chpU@r<(1mS2|4w-dGAY^5foY-DEVQN9Pel(97D?t*S zH(FP)EN#mW0HSeZCC7!{UBn zJ~|X{xed^E%aa$`y=)m``wGk2w}6!P>sthyokw4_ZGsh=sLHkq7FlL&VbOn(vFW;w zKoHacLEsKfDEOR3S#c;C&C&!Gdi)lRN)lEq)+|f)b zSF~avi@-%2DT3DQsDT>8FG+!^l$vOOt-QnJzw?ljBkq(t!NM^sr4Udd5&f|=ZOGsa z7p$7425Iwt!LJw@6gl`2G^_M3KZ6|gQSo@tVf6GM7Xd_2LwUfY`-Ny#u=rh>$46$a zhhGWrYZ+Ex-9E>_)WD{?7|8QucoUz{$yjWP-a0+fDdh%*g&AnwHt5XIJKvL5b#%)O zq66tzZ-!ue3QasPdWgd+*n>&$Fec}ZtgLnjx|4zk%Rvk%!8U+u2b&j>t~P?V3bYoZ z92)th?-VzDRmu>HjSz} zzLfp|srFbURgz)`N7Uval66VAEXR*-AL;Y*49XJu@Fgh}jm^tw>bgZcwb5w#GZ@E5MFxU+P3dmor39X~HV}m<5x%{%Iy!fJ6S;1JslJj=E z2xX$qEYe;(8b9Z9FE3YTu%aZAHrAgwF6UDNMqg5N(nMoD!ryHt8I9w+lkJVQz5N>~ zk+znuUdKV5-uXt)IlNIS^OH10q(|XC^34(>Qr#y7YnXpWVatjJ-vEcK0zYR*1D;jd z$;=0v$Pa8DTpls)9RRbc4w<*KG-z{|rc&2CQb{!}b_J`;LpW#k;JRSCc0eIJrJm!# zeW-gf9dTT;Qfp=BanI~}0R->7TK2YI>_3f{3meN*brVh1h5=WbrY(T9Sx$nXZqrW6 zO|~#0=%R-JPz|V=-|8Z6UV|shNM(MO#>-rS?zWq$GLQT^;=7`3sga#%X~I^J0XGm` zT9Pt`H3{M^-^uv(&!!12A(3)%jXD+82T}#dF~E>$Tz5gbc|4hmcdjL171@U|s( z9v=fgqjBrj>m&IzOf%aF^ct(SmLgl$j>l9|aMIMAzU#ys)m(^i4ZKg^j`)S0H=-n(sGSZkX=8-u=7%AF z4NtssfMsv+FiXP>S(c)8gpwGy>Tma+Z9dxg_N$HE{mu2YXA13&;x3#^=a7Yg2K;!( z?=ab-|B7`5_lvS8FeSioO{8)6+U-qUz4d)0wg2|S#eWZ(L7oV&0V zHJLW|7Wr;*YY&c}Z))^dQ_e@hfJvwR;WEw`3!2t%rYM+qL)+}*`}8VI%`%tenQ-a@ z{58Z@rXal6=lZWajI4kAusvB$_26%04tVu|H<9@dT3{H>U{<5?iq}thhwiK+*W$Hf z3HgQ+XEz57(8Wei^Mn>L2l14%2HMtu=#Q&0s#IuMqf0pCsY-lR(3%?{ylafousLK9>`AZnaRoC;e=I%^Po!0Y zNr<-!2;VPi!#l*1u%>jaRNIQmEow3ue@XH*F|A2FSr7Ip_aG~ea{EB++zqaVo8vp0 z`y999wfcrQEA(C=IKZ2vdrl}n+;ys}*Uz+K5w5;$XI-s|ruNxKtqF5rF1Z9t`6p%T z{?wPdUVL0I|E!cYQ}qjvu)mM>&-`KsOjA7|oX0C~-d+Dlb7xkL504sG9ym&#g(KM~=$lP7O zVSzR*?NNE~$0gow5GAR1sBI9WechLG)N8(cI732ovgo?4yby&=#$K4L8r@{#eA?$$ zGHyPs;H6O_HCQwuQD$KEmBa}AmCuJC5Ie|Y1Oy7@1n$D^^k2iC*1CP`hRUYbYhYdf zMHH!mEtV_yt?oH_QEnX@1+Qj_7Tlr)y1*6O#?)4K=5hOq7m3Go{5iAa)rS=lO|&_lvBMtZO^@2p}=UFhWiz95$FIlM$9nv>!)gLGCM7-Yk($Y@7;3}LxA0&IC|!und*>$36gOAH+)dlmllP>b-^ z)mY^ZF-rK4pxK*HeFlAX;%fZe|zCZLTVWW_IwctdS(ZSU?sExt$}x(7mL zygAAy4E&S}gn!u*@0OEZzIO&2)>pJRqBAJZNbqbN7nni0mXkSo8sBoq{8xI1*F^A? zo%ziP-#GomWp!dot5Mb^oFLs`E)*TvDM`_pu1Z|xFvUgEP)Q6WK9&qcZ~rVWshL zl^1-p%V*XEhJCc)$Fr??b;S7=^3@QByf13gVBK4buEptxZ0c~&T4Ak6G^8}V$ zL8+mB$|%p%TDE~%Fv1rv%~R0niY17?=z53-B9 z(_t2Azm^|GL#nWy(}~`HNm{ltdVRr8pcEYt@mX0BAlhJ1CNoEb&?=MTm=_W7q!>Db zl?qqaZQ+@~A2ZHnap9M90utVD_@{bXrGgx5lYy=ftdCh4^$G3+U}$;^!0yOn-a;t< z+ihgd2w6~!OmMptN}8Q}_jpF0j)G1XR7of6gs~+9UaZxgI)WlRe%X<%k{4N%!QXA;x zL(-qG_>|=5u64((-{ayk4pbHs7IEo?WwGmoeV8TxU0~Rekz;?~$%0MzVT{j)rCP&i zxi+4!LFu!(_Uzk@-Q8_ye^TO3_8RAFdzc^YGOm#ED^ieD51^7oyh+4h3AwKz3Cmq0 zG|fw4{QnSqPU59Vh#^F8IYp*U@EBhG8Y4&&?jLzyys9MOjU=xHY$d|+5T_A#v?x@g z7x!Qi&x|A3~*tu69@-4lYKGu)T%`fMUBQNMsKy&5VYYt_XvF zHF_!cs$k_H2$`lGJrgVt?96tFyw;>pL1>UjXY3g4^}d_us?S}b>tWV#kd?5aVN+I2 zLODbGCC`0nYO|s{zEKJ)6lJtvB}>!2IG5Q2%!0l5b}RXxYQ<&9F|W{G!nX77TahsT zFzUoXKHV1-5$WE58F%K-q1)I~#r$u6E5zcedppBd%G~~KxvA*T(gGEP2*a7%Vp<_l zUlGuGhJkphiU!NToX~<+J@3Dznj@J_2Vc|#5n2fzKM?l0$h_EZZvEC(IWZk*S^am3 zo_(Ud)oK?RI7|YIIs#;)p)Nvm*KUHyinZ;##l-@Q@)RlcsT8rlcY70~sCg7xCpgQH!;NY(dK{aPIh^;V zN8AkUp0o^?KFeZ`t?Bn1eZn-G*xUPd|C^nSZ#TC#_pw24{>|prlP{DB zd)4TB4*!Ts$YKM%yBs<>9uSeIRMM$7>BOdPwxp}J#HZ9>Th z-KIWG_#Ep+A1sKpg#}m2SXBrCt?&AUr{)D>)PL>Ps+cd zb&mUN&uOFCmVUa(KpEolVeeOK#Tu9Vv%ni!K~WQhiyCj?w@8vPG!E}0pfv&m6E z8H5<$m#B0Ci|5jD%qusiO6m>*B2hKk`1(#GqY52iAA#HiL4=Gh18_+SL`?aY`bP<} z0{5AVGSJSF_Rf!XjnM@VVTK&F#+0l%JN+&?~%^kH(sIE4N0 zqvFwav9-NltUbdCsMy{ub~m1Hf3;DpZ|{7wyZPklKHqMxZ|w2i{?pC9;_>FQjpFIX z+M|tKX<(lR8p+9r?<3^)!O=vB~V< zcL)>jer+pa$vH!4*cCXVb$gPFfaS23n7$CvOFkk9)`vx8eg<4_?QLkIqGIfHdD4M$ z8W79jkhmmfSwBH;iNmY(;4un`s4Nzlmq5_?4MK_9*;E1$hrk}x5}#cxPiySz4x)@Q z=|&m5jESj#LFXXE`npk^kC{KgydRs0PZH6>f2)0?_~bT7v@?8(07@{Q-zXmUkC6BD zF_H#CKz=xyAg$kx;`v%}>(1@lw{G6Pd+T=bVsFidwgZ0}YPe~G1aT_0p;2&HqdZts zUm~*djbgWVcs@cHXQ(caQI$hkUn@TU_|~VNutD0`Xk|iR5#&-G2{VBn_LSpdC|1c3 z0A47`o2kEza`282T>B$LaiQ7*Asj{30skr{J%IV`3@(Alk_#AP#V)B{0+~z@1tFU> z8Ckz;N9>TTIBg7C;*XkNspUriT9exe_}N@qLe@;$D$$EeSaaEv>FJ=oxy?w~^HMeU z+fwimuI*8U1J}RNf;OM-KYzCF7+O$vZGtq#-uA94nx2Bi4tnEFsF<2-CnNRkzqz=M zLG$AYe9Mh`xuP&PL47}I$Cl|PP?*>HA*lY-kDE$_yx_K}ZgpPukA>?mo+?QZ4oMtY zIN@U%dXTi)Aj!?`4d?dtcSE=lKo!~RlsVbG-u7&|+{>@YKj2yXBQfSkkmfa{<)X5% zI8Ye@3l**pvVFiewsSVYMy1|8dMz|;jo3sJO5!3nlmzPHZp`J|nIW+&EmN3QgkeSW zW{o~1QUe#Sd0xBz5gN%UexG8)V}{-_4QsWw5u9%bGNU}gJ|H5%E$eJFMn)bohr-k8 zG8FYTa*PiT$0Lb^B|?RFsbQe0Q=|hEU<9L~$O<+_P3j?Fo?>JO+CCT|4i(uwb%xk5 zdEZqLbu=4_(sT2THN8% z@)o@f1{OA2HXP3kym!*+L-aZw9izuea^Ok_-N-*t)?yU$c^_Bi#y95)*efNF$@ z8xO2RqGv6~>-tm_jFm-{e&RDO(2veqETv$p5HD>ZJ`O6oAFEAH*Zp3`|g@{*UvQJqwz1C&#V{ZnnfI52H#^+k*_Z{UC@ULahyFX!y7 z6&#tEc@3mX*Qr!zC0Z&)oVQ}%^G>+YF4?3W_13KOmd*b4pyC+K#$BlSGG{neEl+OV z5Z#k&fHsbpH2!@Jn0YFyyTqw*!|mCA=bq~ zef?ko1g_bNrHZ!uczgW};i+?4+Nk;0vUf6ks#y0=upjFd6Y~@nSzRr7Ea;4R-jqvI z{mDc<6UZa=$ccS%jQo5|PlxluU*X{Y_}Ak4E7ByN4R~Zf@A2OP$K_tTjcqgfOc78E zs_a_NLR5!`8fpowT#IVI}|E#E9FpGhTe=nugjw>h_ zF*&z4w$`^F!I<*xi~Yx+l}k3RRsCHq=jt2(dvS@F81`!X1n1E$mmGzE@|t<> z>T&bQ=!#-id$vNw7TG`k_LV=0d%--8_|~c`Pma(b1N7>-@9YEu>$T@FXD81}SmMjN zC*t>eJcNFKeQ&QCxKrN7SQ2^O)F;VvF2AI^SOq{elDe3!W8oa*_H;5y1=Yms>M%VK zr|7V_EBYQs2yaTreKx7dsSO7=zRGbd&_=k-)-bgwqTQ1=j2w11{`v)?J#IXr^*Jmj zyq9Dxuvph>tZ#2^ZLFh4?uvvDz}Ka^0`bsKIrFH2C$W~VO}T*AyfPauRCvF2mLOL5 z`Y0Z4?(IBV`$or|OsqE*f7g&8Ua@6R@d%;i`f8X3Z`TL>Ud+fF^Y3yI_!Ej_HSo(> z#|(o81OIF|kIZLJwy$Si|Mw&KB-ym18!$5BfpI9zg=!CMa zH7OFyzY;B*GhWE6ClM#Qw2s9#lt_Ck7H-Rjs@ed0Rp09rC$K8qUpbjh&%Rh)?G4-K z{g?eS>@ywMCXZM7*XpCrwDawY-OX>AaPYLZ@&JZ?DyTQ_t#%$LnSaFG4a_My81T$} z2wTK}8hyAdQ1yUyD*J{gXa*xld~#n1ikBXexF2Gj@=^a3_@kl0jJo7^FztH}lDvXT zp4#tIx&R0e?P8-1V+5BtBuCnq#ZH3r6pJFSI{gYTKhSX(zne{_!W2Y-F8vi8Oy~kS zB=G>3_t13H7tMSmXj74sZ3*CH+$}m&bGR^tQIhSGDk#{EaZw89UZm*4z`%B42~uo` zsy`V!3Q(OzVgf3miaH?lZUXY`_Q4b&6CwYoC$@~p2jhO}xJ@I&Ih7xX7UOn!9e+=- zN7S#L4Pigw2OZd6+Y$T-^282iKH`ETx<}Yl^-qtB1RHpzW0d9z;uq2#`}hSt_dosk z2Brui<>8}p0un<884T`knW{vImSsVBt%Hkc4_YR+8@4@;FJ7xQf)(j}rT7`HDghHe zD^|RJK2!T-2v>guwq2cCMEiIxWgkhmoe zHNy>z_{?6{8#=zpxIIT*m|ikbE0ADDq-kfLhM#EDZ&>}8fmW~KeMn%111|&Xo+NiG zZLq^&Q!Y`RFdI2m=vo)QRMuVIoF`v&72jO69%oxPLaSyfcTS2{P??Gvow2CveJm(m7jQAB_)3XqL;~ z3)spHl*M@nf5;wj1QoQEu2Tk-cxJq++vDAyR(}(Eh(ruXK2$xKOpjuJK*-*^aS2> z-i1zTFZJkhk8AN&qobn;Hi4YrQ;kdelpRIvMFcma{_Td`?E$qowVwz!Tx- zXEyuL7QibpqJgF*ABz++T%d^i00aVZ$sk}nLGDs`&p8p+lp8F6qil9ojrpIUI;N0dL`~On;g; zN*^d}J!#}adYAm>w{KRky#R|)U7ikB>>A=b03g?k(*Ajcx3PaK|3(3CcNu5SX;c4t zcUW@BATUcIq73#71z})n>{85i3sr zVJLiP>j}S>M4EHew5#kkw4g(Kt%leda!3d_G(wbdHU(8?Mixv#Z6MEdL4=(YJ001; zZs2kPG{scaMaEHgz*ie)iJUOmUI4y}2-q_1VY>9%0=$s)hguD*?_(JxG-l8tsuL}y zk&1(87Zn!6f=0Kv%c%%$q^4X9t@UKwIfId8QXm#lxc7po?bhO8qjd3_Jy2C<(R)|# z6gR_V3_cHGguiZGU%gYJgfOy!3va+<2R66xwBCZFjoP_iw_Zm(6x)yAe$%>`^H!k` zzW z(=j`cvILJ%RYboG0ZDtoaQ!Ag&1Q}`El;@hgrKJtgd8FJ$Z;Pgv9T^ExDSwUqf$*> zMyBJromNJmU_sBbRJSsk`aSOd;D7x;W=DT^?Hd34=kxAy+g(Sw@5f8rtiX?d-}~{S z?R7@fP*HW~#Y5Z(E>>=?u6})YeRcKG{v&CI5llw_IJ_*jjn;BNf{L<-HRa z71hXjPn0u|;`N&^SEIKg+lN`gJ*)7WsFAzXux7yx{Q#FfAqfX<9EEWNlsN6Y#GM`u zs&p{I)l^7wIQZ~<4>J=ClQ?vZA!@Zvpku4}K#77n)VJXj3bqNu>ji?i9-kn81yg=R z-Arb*&`yfoy*(6$y$KgzH@CxL2G@`qUf{e%Z`w7T8oJQSWAZ}>iE%^ddhny2U;X(% z{L!^*|M=Rq|N5_9ZXW&e-~W&8zqodd|NSI0d2(}hvbuJ7h-2F%+`ngWe*8Os|Ni!! z8*mm!whrtq#WpmNz{u78`z7z+Cy4uD-oodp|LPvTMXVdlnApe8o;|TR|E~R|FWM`EgWrzmuAG{= zOM~6w_AX-t(PIFYUL=TsaY91E|NJuRI_~n~@5(h+D~v<2>?Oqg5DLrJXQP!%m zV5Nk(nczxp_9ZuM&!kkThv4SZ&VX3X*6iZm6)tX?vr?qA+c-U&UT~-YO)j?Tc9@?2 z4d8IrubT!a8VLl4VLm1peg@Y3Z8^0v!ECW8W>7;H4yYMy4N2|bv=p6 zGTSx!EE%&;iB>bptO1g|1w6^$30So_SpV5SxO43v{pB_JZ;l9V8&D9zS%n|}z7oNA zK6D5yGT?A_xe~#}{zT;;!*L;q83HpwT7VPl^Nrp0r)yjLYY#V{ZSH>q$6bm>k2m+X z5F@jAjOb`<#m*YDNWXZtwp;AH*xlLQ+dz!5JwzX)QL8zS85=5Nnb9NT6c;$)t32)W z2a}>@L8{<_0@s-<5j-CY>kmZ)2W=tx4YeQP1RzNcECNjkDO4-4Nl)nTTA~Wg7zhb@ zhzC&B#v!fBmrpyBlPLofWGa4zTB9`1&~ENDfWyJ~LNhdwj^RR&_lRzB*B=+~ z%bJcR9w&&s+?%LBEBw0kg1`hf1gKMNAH#2Kb|A;8uJJV-uU2n=a&-6e-tAuR=;uE_ z`t;T(pCd40`*)KSsLZq}0sfx(ikEHXj%g^g8g3EXJf6YncGU-RlVIOefZOmVUx7a- zuC3dyrsI^6TheYDn|hc5bNy4sabnmvXu1p&Korzy;?G7M9PkB;DAjR}8C-CHu^bM- zeQ59oy_I5BMngo+Ke!oKX3Z4It#ZWbAL_22dw0|yPo`T?dd(@)IqeTFv`nrEglB@g zz7?SOn-mJ9ODqk0TQgk97$a6(t>B(segN!ntvJ zqi5S*t}TfZc+ekDPYyeFz)i+zec@(q4vn(nl}0iUSY23%VQAItvz>MmI;SPxMGrIXuUqu;2%gID22fBtOC}Ay}d5)6Q>bvwPze0Z-vz zXNW?kQ)>3pwm0#m9nZ><@N$bUJmw*#{+N*!rOQO@F6-drA21Wp$qLqbXh!FJ2}C=A zRpFH9lFK3okbN^3r5rXZ|og{m6XcpQvdZf1*0LyMzDz3`sjnj^~y59bM(a z@OEmP3ZtA8lOXN3p#hyD?=;(?@UnO7%Bs%m`H@EqK+RL^dRm^tqMhVqX zhwl{Oz6*MR(mq-Kvb7sk)UL`B(n-X1pSWwSvr9qo?~_+bhl@C+Ui4eUGi~XD9g-pU zxMwcQHKp)kmZ{jm)R(hmIM)Uo-3!q?8}<>Jspuo*B|oLU)aRjEpn*qirarm`jMGX3 z*Y-Yy=Ce%FOGFH`0f1=T)RA)Ji*YVqyfbB6@LjDlZNpL%4AI)k01@6MP-LgbLD_;R z)HE~Ey9RhzB1a>ofYmTDBwGhT#7+1?h`jlGlwIO}FTX60I&?_!LL5V^?5E|7m`K6R*H52+#Ih*?`tLEqj zkWLY?nG9nNh;{-|{--yRAWs@u!LtVOcjV?19@;%80TJF1ykSK9ppPpa&j}nOl*i#n z2q!f}mGNS^;a7l2(NJk1!9pp1nS3HFH^ByOU0U<NDf^s+!m1= zl%a?va`{0gh}NbV=o?a}7_&94^>u`rgF6uq&PZ%J?7c>$ytK)37cPHU8}WFSo?szd z;}FZwv(H*I-?Cjg-{C~ZEi+od^79?ntWtlao%z$gQ?A;E$&X6JBp?vja&8i5D})eN z`5}=*G{PpL5c5~OPQ#(j=lM&$?-b5+GTG%hu=|I33QmZ}O?zSNt#W)}+_B6iCdTjv zhp6y-X*~Oxlra`cQ9*GX-q{>vfei=VL_1T1GPH&0vWW(#z5~=~!Oj7xM5Q1`M+DV( zRqh=)N*|TVF}Kb|Rcp{j?|{|luch&-Ou0h5#@0#a<;;GEl)J&B!{vpaoE|5YdSoCj z=48o2x}HP?tYfcXS|0<+`eSMQR?iiFEeX-?=TR%p88(vsVGS14y^o{JTo`|EM>8pM%or%H~jI~QZpX@G*oYj}}1?nkC4 zJz2?cBF43A0VinkHSJ*6t-hN542}+JpJLb&iid6%_RTtYQ|?0uxol-+3#+Sk>B*3y zsC_18F?&=Z8TYL5vFY)*Q3BsewdnH7>gs$XP>R}oBvIRlkIRlFAmTmRNZ4eUVW>Wm zQNdJLIr<@3rW+Cc$QP3YF%}glOnB9RN*W0TNAp}a5&GCj?R*|u^%Yjlu=tx_{ty56 z%b#4k#{YiSe7U1Kk#v#Z{Tx=~$G@*U%&t7lU>$(&r9ZLwiQ&S-2?9rgMd3;mljQZW zgc1A%o)||n99a%#)8gyR{inzU`3KPvtJE_p2LVODyHm0G!sn;2xu%+rkX*qblubLIN(iEWv0d5w?x zP~ln8Wx8J7=cBD$;%f!JGP*ySqZl%}BHbiorQ(ty!y=0Jm~Wd`PG{;p_XBb|TiWN$ zi6izsi=@W=DBPL~Vj!MaVxk08m89vbE1tSeAe6Oo;x*)vD158Rf@=fZBvO3FkpoQ% zY!qkWYLZUL3=erZaN)3IZ=o5WlRy3#I3H@HU&C9`^!4vL=;#jnCC2PL!sCV6jKxNI zJ*hyyWv2$4o!X>_rZm>YocXpE7&*j#KDy=M4uPR@K>SlEKG~NU;V`*34&cVIx*BxCxeX z=F2+({oXVUv2-*-jIyEM90)UAe`6@WVepWc@u}7~gx9MJZfcKhuu-Iv%dIV@k&r77 z5#atL0PGI}Z2rJtvOgV`U+Bnet>)R*I)lT*+u9H5F0`0awk=ph%7*v5)0BT3iI)0s zu2rYQ@U&XGR81$v!{bVMda#QANmi$~E+N{_s26h+aHSd@VC&WR)OH;6o2XP%FR*$= z4+B4^#~v*@36T1v(oyKp=z~ZwER!u_RcX9_2#bgo(e3qk5#60U`1%Ol1kZ?7C1TV1 zq#M4*Yd4I!CNNBkN6d=M1C`hra!CLVb9d;y$5abRJBHDxsv1i0CC zQA~IlMq;JF&u74(`(SLZMsUmLRS(2&?{Py0$3dU~1VH(*<7N}#S0wl6Nrx$~aXSR( zqtjw?*6a3<5Vd7=HtnDG|4yP(L9xh0+mLS}u@v$57&0FHK-L(HMrSxrdE-)?u~l$9 z{6%81bTNvK50{Ig*u6MQLD4#*2D~k*gzgrL3hq(O0f=G~5M*d_HAxsYwsZ{SYhP zZoYDhm|>$INk9}$M~U0!EH8K98rh}Op{xNwT!B_}wn+XXJoE@$3+z((i=^K{VNo#k zIymzf|8bDNygcoa+xLZkn*2e~`;&+_3*VeW(t(09{5G-A%$2Eg+}a%^BjHy@TAlu@ zjqPe<3n~EPu!Zp$a)jUS*?jJvBz&#hYZCp2ak<62<2!9^$u?wbJ=u-yk4eiHbi&O2 zp)=@`saM|w=3adfn0)oc)mBt`-T#qnMLB8<(_YV zo?U{b&3ARg!W5l6%1GLmVUGqXTq5V8%;g%3f~kTBA{h)PI8Y+m0uD?a)A<4aFCl|z z{I+u(m52h(z2JgGfh6`rBoXwk?O20Don#8erH%pyVoBjej3T8V;9WDcKnKq3>NvW= zyAE#!Scgv~n8OidG?A(?nEv)2YRk~ zCcep*5h5Y2ya;P01N)n+D1XBHkUXhe)=dZzRz!VeXJg!;9P}Ym0tc`k^6V=i=n+|A z+CM|W8>p#)NDRMgDhZrApjH>NBu?ck>TrTP;Y^|=VMlo=cWRalj;;)3>a>EnBuB$= z&b9MxS3+TU7w0EPqh2;`k1<>-n@3azK!O|h;T>>THe^EGnwzy8jSMNHN`xUQj9Hu4 zh_EbhYCnYu3=cZR-}T0$o4iE>#SL5Vc9neuhp60k^(^&^vVM!MJNzULQu&$3`mMCm zwaE`YQdK{mzi9t=+kf*PU%STtt}o%o15@)L#ED`he*F8&i|5LVhli~zFCN}3>=jp` zT5lIG_SV1zHKOSskr&T`I8n9NbU~X=+K*sZw)E}Kup{<{Jw$?P@*J`{dvL)K(PwcD zdhoO@vph>bC%bO$K#JGPl^#mr@=<7`d{=cv61m5BOG)tuy(lByPRc9b!inNzf09 zj0ng1S2PHOk-NY$Sr;K&vqprs)aWGj>@L9o`B8bcq1Uq>51NjS!}Ic$iNb=qMLdwA7;3ZX;LrVd7~nX*^mj zHG}`=x7YdFHI+2tRtHnPhbPKOT)93G1ZWy>7lguLzy=3#+A*aCDHfM?>6R8Bb)@Tx zlgExLdL3r2Ay_rL!!J!cio>V-LjolFsHFPj!mtu z$>R4x)sSUlz$!fe_WO}ZU~Lk5Z%NG(ELOC3t?RQHyS`C$hf^aXmf;cU=* z*y+AJM*QyK;eKcGvc+UiyR+et(bjkh(k9A(l{Ct~J)@MKo@T@3f?mgt#!q-I&Yc(u+TV}Lh zh%GNaQSxpHS>hD#{#gD#{#Jc={Di;XW=55ktd_8|83?JQx3Y%6Rh0P>t}?5I%U3V} z6$2Nq@jy6*^-kl}!NtR8Vi{xZLY$s;5yz!CNL|I=oU{|cj)WexPGnj$s+-?js}+h# z%fc-XAg6-ZI%zdkywR}6EB&DTKu1x?t13pqqF6MFs9+dJYo&j;sv|mM@BWb2^nFv zgjUvn!{FYMp`>FKsiNzwAswaTL0&)h;8kv>^d1}+S}M54Rg0wvk;1k?(Z{t~+R-BA z;L*hhKq+vTKPzP7Njfe<=Z!Stw%i?9+%a9Q4Rq|6SzFbe*|A=h7P}71v9ao>oP+QS zY=3QP*O^+fwh;UhY^}0gW{b(xprm|9n8_BF8A4(CUQ{@mCsc|4T2!$QRz%pjHW!r@ zRHLwbFDfjUMq&Am3I{~4uJRCou%z@wkpn@=v&>Hc>et>-lD+WEaEkO8bXvICMb=s9 zrcsN(q6R0>UgHqJoP%&4>rW>9iC*X?t>>-IL7xdec%%XeNUz2|?Jxrh5FX>vms0wa z`EFDAT>;+c4u=uOG*;54NiG&KnuMkA1YBqBE|-)PRpP*C%h)9FG%pEdOJlB@(9bBI zjQ8qifOHTFS-CDtn9JcwchaU!o$W~p^afhFmg1Ecb|sT`BWIoHm_in|qu12q%8fBR zQ+cqdc5ZAXVugGsV7)el(n`rQk|rqXL$m0C?_YW>9 z;?9CAi_}+^rfhSA#)ioF&(WO#Ahoop@{daH#eM80ww{qoYG<>&DmjaS#h>E-hL|Ts zV=3%kmgIj017g%Ac2HiC#O~v{8AYENRvc#-_m-*AR8Mkb89T>TMZ+U^Gwd$?X_Uip zF68PM23TMirKfgcfyHC&T;he!@TXc@-Lny71xpBPbXi5_bFb!izE@8J$(L{GDUDWtMjs_{`VXI;9sBp(`(oG z-+xjw%pV@CuFv2BF%GtPmgC32uWa#Gw)iVsJp6F3(x%?Nee34!yGU&PhhU38Jiu|q zEaGBp?vL7=+Z(UDJ>0osPEyaNDqe)R;VEp8f)qACS`M)pV&4|~G1R|uyGw3daYKio z2!}KprE%kUh(aQ(b;P`UK!HVMJ<1JCcZB;e!{Y~=&v&+W_YqL$3#2X5M@1}$i4dm# zepDnJpG-xFf<6MOT_&AEH@s{HA3Lb2w8@qMg^Mk`%pZ@&l_R*~mnLKLpw}YFe!w4Cp{@Q&LNGnkDpFzMqrS=DI8ghTi0taC5 zkN5)aqJuteR)H>&Bc7vt=Ui32jz39L3JlbK*$$x^ytFHQaq@kS5+k>9~{ z5S56wU0pUN=!%}87>~|tX8KLs0M?=*o(x1xWavA*slL0NSN&tbfRF9#Roi|_jQ{Q zz9=VzQ>Zk8d#{!j&F9(a13WGitC7)%AG`s$>`dhb4=(tsKf;+mMnFmMpk*U<&2^Pf zEb9V4>V%V{R3}0I{_q$u5SGEfuEm4o1c{3>Hw=nKFg1#Dpi>;SgG%qURyiIdFE09QFSF<&skntDZRvVm{=&D2@cOcb)=CuN@$Y;I|1# z-!BPqLNx2lO5ebj!}b+zBnh3&a2*>XwGG^PY#@j%;I=>8z8i{M4)z_ZehI)c!UVKy zor4M1E?5S4Zy$gI<=?i-<04eLG2{ilLn)sg3sLd@8@$6K4jkxxIWk%wP&G&o zxwvT5PmlgrN0s(O*qfh zU6MaM{Z(q)n)Tae-b!y%%u#Ty@ggN;>kz>eng=MgLLed>)-E6w4RM23^fTB(BV`tM zsZw_X4TI1QA$FT5CI z057~Syf6%p2k_DhFAVQIf55=-00s;j_8(yQ0nEa`Up&s^dnA(*Rb3AfRm#loJC8VV zBH~2Ei4#Zsdu%KmaBcMRfkJk)FyIk*VQ`7Jkp4x+Y*r!L#ZYWJ^2+TuKmzfx-5LKQ zb^8hNxB2~?lZ>&Pb}foZRMN!U*gV0`a4IH1kQSN11cqR=Az}dX6eB^c)%+eLX?hSE z&2xVl>X;HAz_Rl(=$1U?9cIpQa-uuSy&eB-(p&+wcgr1q4gmgl9hG0(m|6LD06V}0 z3K?#W*ChR<+xy;Po5dd^<$Q!1&n%&~$e6`#ctmbxO=oRtY*P&Vkr5^{1w)tKWytI2 zNQ=n;i$u6LPY^u*zHjkpb9X)8vPd>0Y*VcGD+pBEv8O13fAtB|J#`1qyNI>4aY-7$ zG)aLwPW&#dbW|cmhl#t!UxxXs7Xi6oD*xoyOtSFXQMh3cO}F} z^8%CbeJuXjj&=z;F}F5^HYqbw`Z=>OL2At*Q?oJ2=H=nP!8C2=9}R4p#Xn-cYO%)Y z05OcIz$7mGI76lkRoKN^n|o@u6W1m(I74oLRoqp0*Z0OSK%H~lr8r0?0lJV+V=8uP z*7SUHEa6v1;VRzLEna1`7&H^F!e;liAvhuo#wNaq{xTo$7I4rwArboqWAh}y;?J6L zAe2#p6H7&xK$eKDooRQ>q#{U(7_zoFhW)c0nb75u$pME{G1rh`r8gpDNia7;(T2=o zH{`ZbRy$*$^A-_fRm$#|-By6Nb8=zL6&Bbl5BtO2INWAmiPV>W5^SxFj*sa=f@euQ ze{TwD*k-2Eh(NtjPnFt>W6fvpLfB(^!DLVc^G=EwB$>>ETv$=S(5qp08);Y(8j6#o zO$ZK*?*n@+vi$L4cnmBNN3Vus@s6q$=W@dF>7PvmWA8G7mUGob{i5pEaPL*#A(+vg{{)*x=I z4$S?8-vp~!g}$uW3hBs^8&_d!p1-h~CX2$=915Y#J%>w)$}rmd17p&ibf#w~Frb+7 zOVuPK>^hs4Uw;FxADzN;vQ#`kl$Vew^);{NpYu|Kr~!4B4d<|C5<%3;prZ#dgn1#Fh`17mtz&Df%soxm zA2^a^LIXbzr$>1q#VG~{rr%QT*3-lG0(HL0Yf%0!O5^=cSAJ9UKS2?Eyz@@=khs9W zBURGu*Zpr$NsVfF26Yabs<7IuQQsMi_JkgoVm+E-;t_>{k(^!46j0wOx&+iAyUc3jq;kjX2klXpvw7?g)S4pC;sIFT7Sr z@pJK&;B$ipS1*KMskTs3hs!_bl@~$Nv7LUK35h^Vmi*UQM1D{+^20&tj8(Xr9P$77 zhyUF_``! z{aC}B8W6TF#opFd}0n%lX zis2P!(c-2zAk~p=@dq=&0X;&OGeT(!Ge{@X4`zI@&&QWFh1wQIxWh(&Fhf*-$R$mp zHO4_AZO6G2Sv4d7+yCKD|KooI>yZEd8%<_pEm4b^lB~eL*G$y%i?=>GnjQ~6`vrvT zCr7yFP`=^&v_Bn`pMA2dpYnP+eJ}Y5_*nlwIlB3og}jkDwCgSYrC(C#p3&(HR zREs~@(nBWaVipvQ?c@51{8-qmW&9Biy-s+f2r3?&JPdY(!?4TkUF1^sM{v}2Eyj)q zZl9NO>=v-egbQGKm%Vb*Ka>N%XstZnEA@tZ$R8##d4_8wC!OLR-f2LcCjLT_W!_S8 zj4dFXWu%9fo678^JD83@4GhUa-Y^_G&U-_?7eKfNm?0v&hulJ<8e9TUI8=Sqi@iQ> z1d&Z&8>x*Q$(R|sX}6eF4-q@Ku}j7h{NkUp2nP7b zoUL+C$m*~+23D~V_hhSBd_2SvwDAO~lAl0FV%W%*otM78RBUfNgvY*|Je`hCinpPB z|3(4>cJ{}8q;T0g?GJjG!7p&-Cfd;JS{OKB?;~zVe}-m~7$@@x8`66^F*s7E7bVWX zzk7%sD{PT}80%M~Q)qOEp8~mpq|~(uZ2+MO*dOJ|Ny7ojLoe3z%yU5@^0C{HbZ)f= z>4V0{UjGnx+K|X5xVu$!NJDcXAk z@YDrI@Cdy!ACy?ep5|yrhXKQA5vcfO!yxb`2I-PK_4=4D#|AnC5e%8h2Jy|jL|0~& z-ge~b;SMf%k9MML5CbNUfVQya`)k&AJ{m0z-sI5P(DVprKSAuc^pd2GcE;Vw5fU45 zy6_*48y!jO$Hx>%`x>I*^O~i^8H^6A$m=4~VJu-N5|aX9Q2;QQ3e4tDOa>VWl*;KL z56i|LG|tc?;J10&hC{G#j;-MzCW*Wz$9xR1DQPzmnh zmAxhxm`GBD>z?#-OZSCC>_bQ$X#KpqOn#pXP7e6q`rMPR$-FKdD2@%~`aJW?Y+q<>gv){< z^x>|^M-)>jgh5E`*QreJ`KKSUPJexvS#g9B%*VkbMk01i4ng=j~31T>uP0NHyD z`=kz&q}eE3S_yk&6l8aDc9NWe!8urlhPXw3kkZRp#&n3?C z=-RhSIrLqpa9YAB_e9)bj!S4!po_dy(FI6Zbe76ZyE0XUEUvwB528);s ziAn@6etW$vCW@Dn%SozoSwNAz&t|1oi5*qHS(-K&QOjmUZT;>q{`OnfuKk^B*Z%Qe zJ>B^9fBP51|KjgmyT<>2S+nk#l8E;dF0T&uPLIQ8Aq(@*KbtoTS3X)QZmry0K@LR|)HGhVcN0D;iw>3~kLiZy*q6G*PxAq(?DyBo#b%>t(Yiq!|Z>)XZVcCo$w zaP!OcVr_HltL=^ZU+nVj#@hN0-|c>}u~XdJc(7i4vA%kDeOnq3*`maXWEf*yLO&TD zOrh75zYz_J9EUp;vG9!hxCak3EtxI}Bd(+AAHWqlB_MLTOIQp01GGeR;lKaradBUg z>kNuZ-z+qgspddDq5nP(Xx|Xw)ZdphMY80A^(LnpHDq#PVU0)BD4iD&Z)2&a$f98H zXV7R66Muu-8rBEo1jR<}h$av2ArWVH*r(v7R!LkEv#g&XH{vj4EIWeYfLajTz^a%P zSQJ#i>#c)NHg><*e7wuHRv&#;JXzh|Mw+Uxej{=e*IE|5KuRE^>O~kZb4;Qsn%Bei z?X@pZe)Z1AgN@ypP$Xki=@SwYm)gdHi5?yV!cXy|uZs&T9}s1{`kt z?6D!YGj7RZB!|_IEffbCCdDE(_7l(s4V3-CDT4spP{^hlv3T9lNXcsfCvwv!Ot=z; zBvt|KWo}wySGS4jq&f*Zx!YVq-VD<8bitZ!V0I|zCv)1 z{ot4K@D*-s(FOvsQF5Qav8L^@Be-HPQTkX%!KeLUf0{k4cYU8*e#28Z5uqp_Fv0tD zB(4^b7e;4nE1v90lgebnWWE-zYR6cdhcrl_a1TVF5NHbXnpf#Y-yo-TMIIJCM zURI2_&P+#ZXsWi*Xb1LEaYRuX>m6Vrj!+^*Ults8k=Nc z?d_m3kUJ4h>{5kV-d|EA?bg+kwrc)9s{_%{S|0DxvWX(oRwXHt)-(=mt7Wg#8YatS zeZ}{-n({uaN7RQ(Ei)kR(c*@NHFQ9}lM+8d#m0FdKevIwcPSL-eBo@yeZ z3sv56=dd0fI*;k@od!*@uAiFg6Ha+?0EpF%?Hz7N^{2lAF8tQSnsOKvrZ(j;6!6Sm z8e2r~Z)sSRtxBt(X}kgQ*htN7(BvSfc{p}tubW5M;P0+LiXFWKlnq3`l(<}H zv^Ii7eN$?f*T(1yO#-kK9&7CqfVp?aXOR@zG>Z|4M<~$*hSD~HH>^lANmTa_)>vtv zKA!>Fr!6*#5^*$ngfN2UFK^Y*;FZhKI3b!+4KXRmS6;MES?6A-95Olm@w7Xb_$}KY zuSS~blv-?Y(HZnQi-Nul*jIpnj<+KinrqmQX(Ew+uM=M@O3=$&wM4h4|4;As|NPId zUE}{ZX6V2s$5-VzOVET_i+}!kr3qhY!dIGb!%pgzCQL8?k6#ncw+Xp9j_5Qd*x5m( zQ#rmf?)MI%cG{+4UK&AIDn55dPmwdCwa}X7!yOH`v2b9wvc2ddgk)oXcOCoW=a+ie z9pXBsaeHf<-P7sOtyh09t~&BC@_+hWw#7MX>al^r2xgZ!GLL~`6a?+M;L9k`wjz?s{S#LVZi0U3w0UdYw<9_I6*|)$r0aBAYXhF zp0(8Wlg)l?&Ua4`PHxdTWnuj25NKSUMBG^TuqCjQfIg^HfRa$tN@kFig)d5I0_>8x zH~QVmR`F6bmYJ&rF#%>)>?4q72=fMt@xsm9w?6)G<>Q+le01xhm5){yR8Mq6IA8&84st4^d9)p}kg&Lv|-;bAPwxj*;lyL8I?|$KfZuj85{g2A-hacmHG<@EC z|HIqwmwO+)_u*c-e^Ab9j7f>Y^}4)9oAC=e&ac0Dxu8bfw@~{TCWYJU7vu(OemR9G z`t|^!mBZd-;k(9hSCHz-d#soIZ7p6xR)b<9A9?FF>F$aB@?uKl*lL{>Nq8dS*rH6S$BEE!EmV?Krq3TH`Jfx*f)DQ?7wS_4LwXo`)cA_vCKJQh{+*f z@WMvObzHpEioli|{Ps>K$G|jafi9PprFnA|YiAe_@olJ`z!s+!x?m{eD{jK1gqz&z zo;>bo!m8r4VkI>zr2$xfI0Gfgts(5#gfJo(%^`eYd!onDw!h zuuAYobBp~#L>Y7RsVoQuoJ-iR4-jQqv&Z_$tw-X4i346<#$gkj1kv*?#hp70X)XTh z*2DD>fPXSNImN|`noGM_#5oR$PUAdqebeBL>w(bv2aD}cAm*nWPtO(?Hg_nscGefJ zyE8$46o2zKc7mP*v%iy2WZcKLE6c=3bbDNX8G2`xD(*Tbr`WT#0kB&ck$X#6dF8jq19&4!yT z3c<86F}?~khi8krMpm%cMIO^g`v$Vkwk-l3{gt;xs?J-I)grI~r@|H%agKMz4%pJs zl)Xi*D|P|mqNgbgtja%#61<@&bVud}9r(HlbgS5_@V-_=#zC39B%GqsP?UgPBeJbO z=?*$opb2PRHCFp>E;ho{^8%TSW5@s$r#w3&-#pIj(ka3xOvk3fdjuCz@Ycg$$LlO-`~--_9daR4S%gg_q)I z#?*Wesh+?1_ePjSg%R{-yKj(WOG}3*6}pk?qV)77)x~vK5?mB}OIhtELFzjq{YgTa z5L>C7GFhp3G@Vyb?TU4}2ef}w?mtZ$Bd;{&K1_r$_3B^NAV@(V>SK1*#6z*T;42nz z#mutVh@oKML})Ib6MQb3N*T2fdypw3_AEDAuj{?UnRX@kt(!zUZW6(uJ%nM%m~FXW z1)>lOAH+U1P4Nd>`tWd1mYpJWX=dxZTBj~E8)Q{E-Ljq*)p=zGZHiFYsI``$$|nYI zeE_L?22@{4FJas(a6KfD^193Kt~x>e_Ut2`R%#O&p4 z*ra(HjBtUlrfE&sQdCU`M@r@P?m-`iuz^q!3 zT@Rhymtc@p?+f6b$~SL>6)4 z&+AfLqA8t5TcRnwwiC@9N)oH&oyA|SHn9x5H{NUMT=`bFB|6L}A2=GAfPEzVn#@n^ zr^#>7=#A=35cYzVuqg+2Wx7)@)}m>&P6F4#+YP?14q~mDe`Xb_nXWeis#z_#rlYqw zY37QxO%JZ_(a%E?+#UV(X?a>Argb=%BI=Uo=Pj_@Mx;waR3OrzC<)1WN&OtFC=aC_ z79ww&uSpS&`1J)I4wK@rc?laKKouW#nJnNOkqF%~)U2qF=Sa(hT|^`|NX9F_ETizd{B{ z2;_a3L+ZxlAy>`_m3~wA5td8usU6q~@t|%C`6_o1v{^9~Xd^JWa~T|rVjRHQN{(Wx z4;A@zjwfp&kVC4=0U5wTqoK*FIKY}(F*Kwx1WofV_-7qe(opgPe%a_Ky(H^ngX3s2 zLClz~j1!pyl0UU2s__H`$GMc89MeI*5vwMEbBSh6b;yl24nmvV#=%)z+-)s^4vQRm zqQsKF+N_}W{R6_~80xNBQNlNbx`7;sliD|Gm)>b=6v%t+C)$XARVeTYO1 z>#BUCXjMdUnvDjy7m;|5rT!3E2dr|n8`iXeuZ|B91cHNQsIwH0@)?ZK4EZ7*GV4~^ zpU;SjD?`X`V0;6H5QHgrvc#7tr(NxPken3}#e(KvQU7C)8$oiPsClY1mkJ(hf|ta4 zfOnF08d~HwfVpeX3Sv42p6A5eoR*-aQZ*5giAU+Oyfu#js|!dSwo5X;k)im576sxQ z>%=83BX+cdxYU#Gu`0D(+{8D<0(N|3g~&X0yNiiTzXv~zMYcSn%+T-Gi^WA#3uS-n zx@>UKWPgZ^J9ptWYmy;hZ(sfS;pg?@S>iNUNyIHB1^5ptgh~2 zu|!0rmuI_y*jgMiUe?Raq3_f?i(R`nsP1evmK7pwWLXVlXaRHr1fdR`q)sg^QsD92tbkLqHcb77d(AjXJ%vpP#V=BUv>|rUX?;Hi><}x(}XPshA>l z+e&oV%b+I{ug&{o6%oxAqHA{L`gMxybUv|HhX}A=7Yq29r|v^+Xdx&Znr5V^IG6yS zNd_W7%V`;TpId(vY+Gni({ps8`5u-Vy=4Zfx`H4ZQkN$IwFi+}`qlgSJdtMt(rkGq zMSxCzx;)bc&yi;;QlvV|o8XaV60BYco=X=zIy*lT^@)R>L-@$n-%msO82fVIvxN>4 zA4AaadI(dw~P5$EF5796Yib=R6 zQvYSI%0j5RDw9fs&%)V^dw;8l<{_G>e7cVT-^{=WCG3)T5p5E#G8{PrCe{r1KRw^A zg`)<`C7fKK7g%s`jxIousSDt<%6jRxCkHT}cEAQnK&~CI;VbPx8RgBGCB!!KWPA?> z+n?XL!ojx7Cgm1Ib|R?0BXX1re_9#?kTH+OAnAc!7|M?z4qd)j^qORAb)|tNLqQj3 zQi871ACB5UID_y~pj}VclF1v=l*=I zkPXHVk^S@0Bskh2s7z-FAAx-MBthU$Rg)kx&Q~RHPKx&gnESzg1<_cMUsBX`3H#nu z;s>Qmta5lR%nazDILOfDVR)2Bf4N8G980Ord7-DDjV>W0K5vIq3I!I;STbizXWJj5 zCt@|>7-gTpFqgeYN?pQ8slsXBuPzZfPc|kL4YPF$Ed%zDFEuuNC7nXs?8+qQPN_Ej zDmulLDv_*&2?Bra0!^r^SxzMg`-!R!GWgl5gXLP0Xa%fr2#=K*O^PcywFXzHp60-X zPdL-a1NVHV_Z?INJpJ5Vapw#-;YunW=+uHKmF| z!@us-zOp|g^cgynS-p8Xi6?cs5M)$0&^gDftJ8BSG*LmiLMABZ*UO&MLH`&5OB_bL z??~czxtXSGUj?9K;@?29V3-jL>I)Mir-xdofT><(AWki>Mi3!D&SHSgfDez;O#q9) zl|(SoHPgT_l0$yXT39q-+{e{$5Tf(N=EHT2L`YHlX&^`Hi?d1cInF)&AjDLKfG&-q z4|Kb?()^pH&nG}?lay+q%-57pp*JTNC5l&&PnSjv6>MMHWHv83KQ!?aCZr;sTBiRe zCYbK6uiw2AOx0Wmv3Nb?dTlXmC*yq;*{rsza3|9*9S`bsuk zgaUqI!U=a5@9vx{orFZ1wD^<$KI|=IJJI8ZYPj)uBV0CqC^AOIR45HvIaO#odc$AM zX;B7DkBsD!XjUrpndR9}_-L0}gm=XwMF38LReG9^cA(%Odz}2sPPGkm$RFB9&l4F} zE0@P7mV#P#Q++^eV7?mrM2O733hP#9ul9pE) zXc6dR@&R^a5S`<3ZpkyC&_Ne&P^624JyYQuUV1(j!rbt>v$e6d`*@prIPR}V1N0Fb z?vvpA$S(sF)XER`7~CID?kzm;_ap!Xb zVe%?4a?c!0mB}#_*?LYTLSU-RKJKh3edh!@Ifz8={a$3yrP)UwPGiFh&Odi&)R)IoANH6fW~|Xg`-i*LlV}@ef`w+e`mAscT5-AKTF~TuR|SN?pkWM~Sw( zU2;!B)5ZhRJjVxh(Tb=xy%ry)7WW$p`6O}$y*W<~PwEb*mZR%1q&pVsb@mZ1qlgs>hx+Kdq=!9=ZpJZp}>Xa;0RplNG%Y^Vv>uLCumcKO`0Kl zC3U5zW@fk_vW3oP`pIzy8bu}Yib6+Cclel##Gi}~4v^f0sYlBfPW}EVk(b@c1W7%V z3-9y3ivB+9ua$$rHm=(!$JkGrOwVBDjSjrxfE^(J2p9#ItMi_9uvj;_D18rCi}s3R z-baJ$CXfIXlD=)9a9(qD+8u-8WNc(^fgxpFq#K_ni%w7!rMXQ-4;wU0CHdI3ixH5A zy)NCCN<~865{(l!gA^zst2!(Ry;|O9L&soUIW{d+Je6E(P^V&!Mm+X+ydgn@o!76n z6Rp@cY*&ZO>qVR!x4G%h(Wi=He{OP8Ujb)%3Zg6H{K`20u^8vdb`bWWYQ36up7Kr3 zEs;TjnjG}FrD83lD%;jn8=bA~jm_dwHnGP)w#& zM2p4Mi=5M_^1h#ybz$h*y_89QTsSPl8@zl2ox|Mqp)Z<1vZ1+{%GKnMweN@ID+~}f zD2MG1!>Zoq>QT)FXLxZN4d#Y*81%Tp zlk@q{!^}S(|G&-P1vdfOcsj`U)a1G1Yuac0yA-~*T_qQjVU0e24dzxg4t~g;hRw@u z63$XvXRV^_i!o=8G((RE+%CLnBHMx!L(DYo8$}6YOoBJhodQ-L+o>a~rF%$w`?8myAewy019Vl%|ULtnXN*#KRlq&0VrewP8g z9ubBR-^+~rO+$orx_lR3e__2+WMg4$k%IvljRwaTo4cD}1D!y8%DtX*2tsi}+ED{_ zzH;|nTyN?>OsIl)8zOPb=$JPoBV+)cHhSyfe?*LfT_~#C^>_k5LdiSBy0!a&qScKB z^N**vC%G3~cH-bGdUn@2G9UM<+Yp8Zp~1KpAx|shD!5n^(k5%fn0BM`#MLO(t86dP zFh`>SuS!Hf0t0pImqIDtPdT1}OuD>R7AYUu5mN<{nfP5wPGp=&Z0+$5*#0(0H_HgJ zv+_0&V-vgPi#|uWVw?oBnlOt-+060=n$l^gbM_$bL>&23ai^rCO?~Uwn>hc*FdJHv z^PPHM;4fV5byN+j|2hJcT%1ctkMsiHquRB-NH4E9_F@ju+)9DFb@=rYt)jo)c_$qP z!8rPwrM{^G;Cp5)!apmfx4a5)VBCZjk{vh}2ZF5g+qG+mYt0GwK+K{=C_TKBrL(*J zc)ikO)RW`4nmp_cY#`M)i;JpDef`aKWITEqgbabPd`+fcf~u%+2`)`2Rm!tYm_6BU zK&Ol0$@R%8qIM(-2kqbrq9EE>G5sSM9l<$|GiK0q;opZRdT}A3qvkE}x}*bLvOX;y zcBe-j@Z92U+<+XZ2Dcx#cFShksYM%ZBNqpOpJBv)8To892tm9v8!R>ptk~^L7sU%} z^KTCkR8OOWNFT<3BmKl@`px^5BP?MaW|E~h(cEam8a3b5K0!t`w9whIRjwL_=dkb- zB-LrTPk`ylD$M0IE44OdUuv-_9k%z8h4l&T_=+w+X7rQQRATk2=aFvhZgOav^&9VJ z-7)3^PKL4F(8g=to0Im^OduBwb-?_zVDx)nXp@Y*RE-PE9IPyh=v;deW?El&4n$vz z3%brAd@!m?P;b+|5w+=y(PCp0{T^;E2dK$XMak@eqS+cYb3^0N=JvzY2QA32&u#sQ zsRNYvxoC<-zl$%z0@c9(Z%~3%_&>dcq?bnMRLV8T36{t>JjjOIE2$%}RxV0{tQ_e3 z^|{_Udjp&vC-Jp7x}A$#*7@tE=G7IuxH^;M@};>qNYoQDRE4fD&bRD?ZO&lYCSHxz z-W;P^a4}`E@nFxQVRX`j)e@graX$pX-~bMo4VTRhr|uLnneoI z-6C(+UBS~eu(f)~c4<=u34tXZHI*aCgv4+m!@uV520;{NuYYSHW z;D}&CuHlwoKt24GKwKFj-+Md4TV_jM8w%i;ke? znGZ8}!C5q^o)34)k3!8qjoyx9pm`p-Jj>i9EAbX*q{~xMBx&1A{BscXKBV@vd;~Zg z8%~r))RR-WcKw3bNt*TcLPL#M3P=)6wV=!A8}v`c{d3@pQ$3Fmm~po$WZ($debNBu z=(Rg9SiM0708`Cz6TMGELjxT>>CdBCiMCubUkv;1$*`aG8g7Hooy~Y>xy(NNK(ooF zMN*sR{;uvUe62eR{p1U9JbM-SGpwg>R`9-|>OKt5h*VauUOCwx_fO<(N#&KFo2)$E z?`EZ&SGoCE*F+yd4RVh#E*anyR`|1G38<6MNn+P)mM_pz_ z?*dyE;+VHt7KSk5Mo?c4i8GR26RQ$KP0MdF%8W5^K5cYhg!7R>*?!`-Gj@lY|u5oc?9$<>!%p%dkQa@hj#3gf>FFmi%X|s&* zN1MBsz6RCU%$zU_OOl?*ekCeht-=*wjwi{*zH=#WHG0`OgD2#;Gdi7iP7rlF9Sj$V zXt>cIj|W*!r&m|^*r`UCCOTi(?<3*S+t@!qTqlj{36d=FZa)hQ#d|%WJ}3{n`;yTK z{>hVmF)7R9XgWRl_40DBd{z!d2mqUO4&eP~rZj{x9WVDr`;+Byd4QAb!~GK9Ce!8X z$}2bQ!;OEX|KPlf8P>eO1o05lU1Sg|HikWdYG9S!F^|FH$TQ!Cy&QF+hCziB@DlTi z$WyJa$9B3M=lX4$jl+5!%lyS$%_L2|< zi|^fM$a=skIfer?cK*CS+#j6waMy0PmyGWDQ3+q>m}9a6c`N7>LAggrrG>t@#de0& zt8C zts}zN!h0wkxO~>iWBC1+gpNA2?kt8D0jzJhqc10m=F}ZRmqAS<&Y?Whzhh+F#cl{Z&;+4;) z)o@-`ryl%Eg50014*Jh{L43vk#!~##?e6GG(5LCKJb%JA!#;S6XUNNXxlR>!!h2q4 z(K*M9y}}G!>Gr_x>*@AXC=C7eonui0xb`OJ6yS$MVD^Q~he>3q#$LZq4`3}{Ovn40-$v3MpFmpz!%N|V(O@uo4*B(Kukb1o!tS}1))BFj+F(aRbrOTy9`I7LGk5&li3wGBw;4nHs~{azc?feuRF z&NU>~XdF`PEey;$z4)-SBBzR0zyw1`7Oo09aA;+==731xD>YykRhWyb0j^nGX#wAZ z7U0V*mV)-sUy2M19pl%!nXZ*B*3*9cd->x3yK7^ynz41z~(;U{=5DFhKwlV7C&V<+TB4`*HWLN%9<9o3~yqo z`&wkiSckQ#M4ksqZLAI`=SLt& zoZRBGz5#D8O!Q?kw}AopE@&g_0% zZtPUr7mQGnZZMq!iYD))VQq9Rg|+dzpuLN@Fz#`28wqWNYk1lhu6<^a*o`TOvt>(7 zb2wI-c33YmTZ5HXs{T9|FM+bpw6LN;t*)85_d4@$P1%nf^t^P}JDbFxdP9(Egn z3#6Y}M0#!9Fk}A5?&PTmJBWKEznR)5DkS3}*L?~<6a@Zoos-KF)Tih)*~ksmU(1dv zw^`b@R8eQ*j#J+nRghqoS;I|YMK%?%m$4?`Z-m=*y>6-=xWS>avg1WC_5QVuXcGiY zN{kD5;(f>%cErLSQU|$x;h30v=w89rB86v1yPA9STHY1ww2gDIU|l&T^ye&Wn4*W- z$M*Pfe=?CBc3UG!06wCNZKY!uZaHaCXFU3*lULrsETVvq#zBit*`$pbXh}+eK9XPU zNC8PSvPBa+q}Vx+ExfFM8jT>u6w*xXPakh@%!7;VSllTjX<-H?l2X7#^2;$n86&VI z8tRT8yPl4of=j5bLB`|^2(E*sWvUY}2Y(q^-;>YTM;d9k-}_ z{iRj{dbFue`RQ1bcL~O}ldDUJCkC4^GuhE--2amfPFqn09^#g_6Yx$1Y9Xsz8%0-C zz%UqFjENwrIAa91XaP67GKQ2Iycxc5*qdg2Fgh#{?jxA4 z)><_aIf(9$AUzuEwRh=Sj$+)_=1IfF>h`?7WAstj@_+vPdA{WjSR`WU=;XJG%x?vA zpDw&3pYJTZjaBfVKR*8S=G#MTap6V656QB7!JsApmsFO%INos62UhGVx$KM(6*TD| zpCAT@&Iy_%Bm~=Qmu<0q5Xtk=_-XNnQ^XM=Py#pB&;;uaN5eDZN1PNGFs}LFLrxvQ zK;}B^gUBR4hYb}>md#aAVu4#XXl0OPaV5nBw&wt|0ut=Tr4Q0>U=dd+Haa~#3KS{c z4PM>>C4*#%kGNoXrAp~^6_ZN(07``{!yGc3N_sty;KJx1aPZEr0#)!prM;%iP$R!L zMVg1>?#WS3oFfW@<&-Yd)GMTKsORxkMjgVpNX3CfqN30#_mX$p3M*1kAshdUdH{1c z{nit{TbG!a9#lzK{gV{J*WwA}5hKu$Q0{Kg&D^#VNr8tTGgP`Y*H74vi1BLj*+H=A zL<4Q~x7>KMd9e7aPk+TUL^qSlu357YAwc=3MZ7c0@EP`td5aV!IQAP43fMRBt0(<0wdKr8G9iwR?X64lDwtv2j!RGi>|ROXpddrt z?P=JTF<@Wf0@Pz-JXjry58AjMi1lO(d&|iy8?dSAROO zMF{(aXWY4tk0R4GTuLRbA6XAK%;zya#EnZss5a*RSzK^jA5->2Rj{oL5?BbpD1gzW z0>j`xfH&z>FsoE8U*G!ft*zhv#ovDG+O@xP?b<*7tEU^k{a635KmMa%UAxBrm#_W( zYmAF!YEvFgyt#Z}8qBiO(e^rSFD}Q=`uk<)4+tOqTi5=cRK12jHo?E;8*f3?UmKmA zjd>?5BDAg-w^mj@0(2`k0plh%apOh6`^Cmiac|?n zdhx~j>fQBiX+XTK92!~iV2tqK$>?DE93=Uh;%syZvS(~+uTNRAcZ&1|xID{XgeRnb zfSl+^v2mj~<<(chEJ)G>=d5wT{YQ_HrHHolpx8Ry!#Y?z0G4n;luLo)7G`g7200FQ z-3?vhCr1zs;6cvkJ;JnOFctTZ9Tv+!giEJzl;H$s|8S_W!EkI!D{wvZ_fH31Y>UBf zz~r_T91kfd%`S+u?F2a~7ocLhV-e+`20ZKcnE3SuL9l7D`@$XomydSVwNcSkv1E;o zPmuf_5NkLwa7oOveumtL!w{)_gz#(Bf=3xxb*C~U5G(}*rb20Xva$Qc=Hp$qwfg9* z;>qgv_UfbEuYMD>8gA0bc&IE92Fx6ntus!*!}aa8FHnB<&c*{=b%PsS+0ea>-AC&? zpahV_YO%Gt4FY-mV0F9Ldc2KmxYvQ$9iW`JZ=XFjT3n^5uJE zvS+ofp^!~AV)448@hi}wyS^DX4a2ZRs3bKr>1A$OV^_D}oEt&Vi?S#)MlBNVE{P6b zDxQy#X3VLijrb5Dd;_l6{mxSH{!Nf*clZ>?jIkKwCW`(6l*xO8(P+$coY>zSE)@?~ zijoQ%Y%8FCoR(JgLc^CY#UG|=jM!jMO zMpG$NzP4I?{NBn3@3TQ(*ZZtLAss>ShmR1#gyH-g7x`E<*(B>Tg5wxM%Vk>WLSxd0 zXVkc%{o+gkfn0v;q`Uu=sd~^D8Z;Rgv^T^cf%HbW?k#`cA9e1W9`F!BZ)1oorC6QH z?(uJ03)hs-_M(5av-t>EnUrgAv+e=9If{W9%y-c+86(8r|L{^D~^^r zx>#q8a^dIzZAl`L&_a0EfXaq<+la9)}1VpVy3 zp~L#JgVhH1I8KSkq6{v?afkU1l^h}ft(+_$kM^#F#;mICE_q8}We-)4DX;T3jX++x@53tUju?X}TQ50^QQ!MG4q|BDG)*>Qb6($ad*H z^({{zFr&2H#KF>b7ssr&cUSMTEoM0z)l|Rj_RVlEPi^vuem0Zk$6BJ>qF#EYN$~o!5J9(mBpj#eo3Or-G7{KGiPkOYeu(eN5KWeORnujE@R?(DCwkl zsYWO|zaU_Q*Lu*HuutI;(+S}#ZW87_+s-5``_GD6CVp*#p~B0wB=efF)wmfb(B{Q} z&-_8Gm-v<*CGpakI|_b5&PrlN;#gJclRBp~ChxC#9AZ(%@_N&EI;MS)(9>&B5N9J9 z#~T~}@^T{v*gam*b&XL~&@zUg*ykp!yE_zvDP5%_Cs7G@JMPR{_$_=G4fJF!Sajm2 z8UdHM#OkfQlRCr*v=jkNY0>CSgDGFHolp(yMum)#U!N#6pA~Q+!@lPpKmF8H4pkB` z!a_lXgXrzllflO5C3Z(ITPP6B$%azQupIwdI)3`BrB^nDK0mGY$+nt_=IJx~F_DOW zslZp>tg?9hvzx_l?fK2?zh0;|7P&Tlvk3x80J12E-%;E~&V^r#vX+sytFlAH-dBS+ zYw>z6R$c~i#u3z8pWPNDkIEmJ;0QznyOol4m9bHAD*{UyR+c6|rbZTQCuOuJ7xg() z@HpkRt&fX|r3G^vR#yxk+6>;aM5ZqA)E}&raR;0>DdEOvBf4vx$P5t$5-D_gVr7!Iz@=Ce z#%&_+UWO5n(6OtBbLy%@QR0L&j;ZY{=LY34@BY*5kXSmcO6tv|2u!VI28&CjeA!Lq z()`PGtxMx2uzRJ`w0+we$N|uK){(f*>6|$lO>@OiS008k-5HGbpZbvY_#^EJlOWH6 z{~ST|5aKmAxkA)LY8otvU4>p5Uvo*zCihds;-&p^dRb@;$P2vWzH0S7%jkQk>9k5s zW94)HMft^F1i;AHjZ=t>jGkD`H)+m>`$&K~lo(h+7S@Gzi%7O1F`_P!I;`z~0(xD& zZ`=9uYWxJot2#fG{BHA(jrlx}3HArGExDfn1f9#5*?i3*u$S zA?_*hw`#p4%q<2g^##qrcPcmx`lvAjr$V^G+mK z@6A7R+6qt4L#5tKm5@^V`0736Pm;Sz*u8R7(lY72GF(z+E;BMUf;(oII_j*~qpE3# z9vbycc3kCrK8uhx5|^=}f{b8Dx)?w#nLv2AvQ--xHBzF)OX!*&9=gYgP;j`?Rk9d| zf>nM>iB4q2byA}WKV-v%?<+xOy0m!Bz@UX{VNLd zRqT?Sy+L7ao<3|PgrhhvOe3$DcqA6$Lrz9E!4T>-p;o1(Mm#sQR9ibZ|3+pEL2@9Q zBtDB?j?`yMgwDlCB9i8j{H)$k^)kiy1>_H*iG0jo{#Somkwq+6qikV{NDnNNH)PYL z6)!3kE|J%TxLZD#=H5F#IgN2ur9c6 zp!SKlhj!_W^c4)QNnfWMD&Qhr#8B>Qjot`rp+wEjsDX19Uotky+sE(VFqWVtuS;w$ zFCTZGB5vdq+konbZEaZ91)RLP3Kx>2eC zlRN{6L}$uf(9gH))=~W^S+C68eGQ8vqzejJN9@MXp^B0Fl0y=z1Pul*t`X+BTx7K} zk?({S5XxN`pi;dhDS=oEz9C~3llZ~UtpsCE9CkHDlwR_*G}ezJMhiB1((nd3{nc=A#KB)hpv%8A$bQsT3>X`>1rmBM9oI(I#49P7vlBT1|jOCy88? z_dDF$n}T4icnht)DTch5#Ty|e1ntd%mC&_8Af%Nk8{t$5o{psD& zzHwGgBr+uo^iioNAwRj4tj7HPPygiK{SW@(-@SH?{}=5se_I%L2=ZfD{`u$fjbAV_ zs2b&W^A>OH)XSq1F67?~)vpotCyiZ7*q^j?DRF<&(j^7{Nn0(EfAUWLxwPOv zY3*{N|D>tc3jd4at3&{1l+I9SoH6l?y^QSh2s}hQGrVt^MgZgcq`}!iewKAMi|}K$ z}q^_!0_aILF`rsr1Qvu-ze7Q)CRU!a96-S&Yf!sAsE4oBABS9R-tddbCjkH zWvlg!Rsu;e3L8hJy;1fi9+^dbZUf?Drr^k*HbStYhso}jQ-qcU2*@?~GmSecORJp! zI3|`cRVk&6OXz6LsHw593aMR2cS;YjZ zjhKyt@)-_3_?fDMF=F3oPiiKyBTq%*yzifWHcJEx^zxXNgqDpQFJMz%oXbv>7-D3w zOmwBSNiHnbD0UI?5NSX{br$3$ z!V+wZ7@kX>wi^CEt3*Og6k_mi!&%zR2!+h`-! z-G^}zGoMXVkBMcLJ{rdP#LUi@ZtI4=Z~o}vFKW3s>4btGG(BTI3NW2 zs2{rW&Q4jiz1G#L_LerpQOUF1d82&(yx*H1<&Rw{p_;F{XYQ-eaN(ZZ#nMZZUa?Sa`*fe=ZR{+ysYmCWgdg} z27<~G)NU;cI5K}hc$&HkTDmUaB=GcZf>rCj_}pyC6yx?T%bXOAwl&1_;`oBJ5(Y~o zHMFEtQ^$mWLt3qZkvz+~7vjb~+&$E3>Xh|ncBaHx?Jj$obx1Noe_seqH}#lOd&>Zg z&8nT|kF#DQmN%3|n|jW;x20>^Ce?nEXDyvlOKs|rHD_Ws3XN)~wKpwYZ}s=5*lU;Y z!}>mLY-KhW#`iTK^5+={Hql#Fq-prMIBCIn5RBE%t1q(Ns8PGER(8kQ+r$Vs` zMZ>!mKpvkU(r^ZUr!CC{N92ALj`U#$fX%}bE*4FbkgOstGa%cm6J&6pTbC&=5xT)V z@OI)ETZCOdy@!JtxO8qjs6wYr*wYL=TOc43Hjd#NMlQNKm1^xaoInEWxpQA+Gy^xl zl63<)x+2I9mjt$RbF*83K#@v8wix`a%kHkPY#3Hj%rgbIjAPAC_co2hLG-auyi2di ziU_aFMg3F(aNT=9$311GGw|D;Q!lkR08N}m=9&tx+Ez+e17^CVLMurJ?v)Df;^KWU z!~MYJ3KoB;Md!mo;&=!zh35XtK% zfV^HKJX~4Z5W{yV45^CNRwpf!)=h_Hq~fIjc5f&r38R z(BGkUhQq)lCivm)Qz@Oh`t&V9@(Phh8BD_FX${FZjl+HyFS>m`r>S$b>lR+_RybB*b)*+3YsLtDW?-dK#r zuI4ajTU%V0PHeRN;Wj5<`rnDlFKaiMMK9nzrspP3D&?ZYGX>zgdWy6E>_7e||JA>K z?Hd1|748HugL9N+`RAWk&e1F9sO5#ba*kd(N3WctH^lLMehgG-);5VN{}`RG^bB*SzjLzFyNYrlY*7ftD(YjRnjIctuYrW+m8_b#wiEM=0w@Ek(_^ zMA3R>KWH$*X;c+Nqbh|UasGkqJhrCtKC?nwy^&(av1ZGG59zh;o@dulyGbC>nW-Z% z3=7Ip=p^kkaB5?(>PK0PT-!2<1R~*WE7bx^(p(crNjvAxiph%^P~|0BAbN<*?G}fq zO~pycB$AR&;+hHMA?78d(+o&Ve$B?s0~K;jc(MBD;>6_~Ob*10;uzKOUMur)-tzLZ z!CNy|R)}7!qRSgggzOB$;%JLUh)z8RZAp>h^Bx0(8AH?~M{@6guYob1KSu_X*&|?= zR{mub_|Vk3IObd=>y338WE#=hT%?5n302Zw+w>LZlxweB0D8b6$|i7Z7c!`1??9r%t8(|+V}TAVZy%C^u$R%V{mIK+fB znhrP1m*ZVtZ{cFWWm|3}Z`vC{a!6m|RF`0F{>3@aZ*}MIKj`27m;WZ5x%_{I^Os~5 zoWCr~KmWXP{$4qMubjVSadn}^&*DOhvGYkP`K0EIOfQ~bbI?evCdTZ8fiT@Cr!P<>%*{G~wVjWs|PbqP{kGh{zs z7x}D+XQ#5%Ka{$u{C(=FiW*H@tym(h7c`2tYN0?@3kpJO1-whk%0k~(SYD>3eXVY* z;P2BqvhKE3ke6v`TRhv!+v~Ij*21>Zc$Jpag{G~rzD>(FEDLRw8;YhaEib#QM*|O# z&`z(4;J3xbO%*SWs|Qq?kxNt2-3CZnCWS!7cxx>Y(`osr=*xyo_<21gbr)}G#Vnh` zOO>4j9)DgOP%u>3Whk>KgmTgC8M>?{;ZGrOF;;=#s3q*$i&r5yszHFos+wEy@W20W z{>!I->)JK`|8KRYBCxAAJ4e&w0q+oIasK(|C%?SAxwiY&7H;s}efR(uw%&pBsaSY- zdHKohwdLizyLa`)dmY>|x{F&$^=xN%u)MtfXyLQBK4HV3y;T&S9ATTCU+{I>pAO2; zJ^`8WlP{N(w|k@BnHH47C-FOfKPV5o`)Am}#|^)@+BaOlX!nX9NX$z}{l$AD<=WK= z3-%9qU+v~9E`G7k^0$GAZeE3~(F#bp z#hshuKHCVFw~|n-4Zp(_i#IQ6w%{JL_sO!2=#ym~DF!b%%2P@Fd;k0&{J;P8UtYV$ z|F5^t-)VpO0d}?ToKA7;YjB*i694?O*>V0lIU?x-daV?ZY#>Wp_#?XsI?I}eZQC?I zB*%tBRIi&JlFhtwc1Tv1P|Xa@I>f2m?&Q}(8RzB7WR1yk`Ql`NE5gUizlG2DXw>`k{`&6Q zyy^ba?2w=a|%F#UOd18Jp(+jk!7HMH2rf@-W8+*7YGkfqn~18^BKb%vV1;0T|ul z&Uo}3i}>0Ica9H14bqcc<*pHX9z>{@s1=(2Q?R>7K#!5PO3tbbu@B+`3s6<^h{R<) zM9eFxMjdBTC{;S8S>6T(G6qo3={D^Nnc^RBY}{QGiK3*F8X9=L3j);F z=?mVfDWbv2O0MNI8>0^7xmz!COq+LbkA_?27_m#o$dH+c)1rKaTOwcT$bf3tV86_T zH$zo6fCApq$osA))Yw5}eTm>*yq?zPTvcjgq-#Qy8@)wghQwZKF1{U^05=2$hB&vL zcB8bvm@-18CQsQ$@($)+f&{|Fzxq&sL+6XMk?VGuwN?wriwB9JQ09(enhk zn6h;8S)G3>Y?W&HJ9dD9VKzBmnjr&@&LnIpTmV{~u=WOVRbT}xGvOyckqZ|A!Im&8 zs3QTCc_p!$Ep8;2k(Mv2;FK>qkctpu)9(IL7_p?fq!B@Goe@6QQ3MgPaZVJu!rayi7sPs?-pJm+=@>(YGRS}h&?EaAk7mXXUpi6A{!0BCm*>6{c~RW8TVGltJM zhF;TT_6jc-gk2YKacRPZ{F(9=f9p`>TV#&~yX&exRp)}d22a!^hj1x8fjqg->zQKO9|zf4OnTS~-fZE{;E1+6QI z1aEeFZxd&ef3@N8VY>8H$Z{qnq05wnF16#?l!l%&61&u{+bEIqr_1r>b{9zydkx9V zb86UUeD6CIUw?C56LcrMz|!Z;uD#Z+HMVT)m{KFf(NflIozzqHKno$UVxe zWK0Hv)NSJ@(+#AIC?fXlT+LurM5J{ul~QzyUZ72VTF7TB00yPn1v0@+%A>Q9lQC-wgteBo)Y`M6 zCoL-Y$se3cBpE1%p|pt_h1YsY5Z$A(ms zPk*0_p;X`~f^ttr3Yse0N%No9eIE656aVLT|KY#*yV#WD|8LLS2dZx6u?GMA^9Q$; z_n3h#+=m+uX`Ko!#`-yQ}Rs<;#t=^+#99ia;Ku zkjiG;k0+BmrC{4O95>`9*xJE)m0r1nF9^>F8)5k#9DeCe%A|9zKPY#{B~BPL?(H>{ ze2C@&L`(4@9C%ZnnUOCo#d>=k+`T&)wZVt?cahf*D^D9-D6u_y-qJia{LudpTPpCT zZeuU5oV4vAO3~5Nep^3yPYmsxAxFjW4)W$A-$;9}4@QUWFCUfD=cDn{hutCCXd5~D z+ZvY#NX-k!J9c3jv5Z3Jg7SFE<1ua3r`>U9w>w_PC2u%hb55y^Aud;jYE^cTLcFo; z;O5G(^Wf&nquGP=c&^R^i-4V79Ge#XZs#HYZRuB&0x(YKp{9aqDTjNh5qP9$WhT=5 z;8F6ZrPfLJ>=;`foh{rybJR|X)naQ1WZHulyRFsJ$q|~I9Gz1R`{XxTn!u~>5NSI} z-jmL%f1Rsz3=nHCetG-vx!3{Rhb2M>?jpt=QEI$@ppl%s+%`D4J3Qp^rdZF#qKs_(j6S*E5{GyS9|G`LH7XcbvCQlQ!rO&gL$quHbYAuYjEdmT1rlUCcdc^ z+B}`sxywsY2+nFH*;A>3F{|FpPPY*yn8+uG9&il92CKo z;Dei+aq*IN<>k6uRWH=sP?cew54$HVZ+6Nk*<*_#6ttlh4_HL$8|%pPU4%t6)X`)V zfL-=rZr~U~a>*&;Q+mj!E+;HW)WvZLaWU-w=~(P3w^?`v^iuK3-e*r%w;ydhy8mnF zWr%u^eG9ps8EuFqHtZrD)eQ*;84Y1pF&+a25ro1+qjajUdEBRpIE;f++F}J`EXU=u zzHHqisPVH-u{**O&@!w#+GWqXIJ+=J2KD~_5nE58q7BSF;t2vm5bwgskOVXaiy(+X z50D~?Lcl?}JbuIa>J=j-jJtvO8GyK7_7J~$qxj_HGmYF-50zYX-rws>6burt@hMn0 zvE~dZ7%4(K_oPRJyTeKw46t(zkt|U;tjFf>_9qzUSur^&_eIJNfHdaocv_wh%ac@(q@VD}fC=8h`*1w8>`pzele?p!AE?!SU!2PeYJMcW*L#6qfJ8{clPKDxjD?Va`e8;{`mS$XmP$1Cc2@pzLNwbmcql{z2Zxd$?* zch)O~92>a1=DFPV0iV>#-Uy&qN(QcD60Nd3zCZ5v7?`q#I|d-0(?(-amgx>EMYFQ- zIt)q@;c0(>fD!C+4}0qppT!Ux#FJFo_VPXGYS>O5GvnB&2-zA?nM{Eo-dKo%5zj>Y zNb((cM3^=DoT9&&ir>C6Wk`LhaL*;svE$tpRp<`*^Z+aolVzqbYitkD3(dH4`8L8b!f;Q9|%w*yBEv8bEwZUBG00BPiu`(4*W(bnjVF9zc60E6d=*IdKz4 zz$?h>#gZ7|@N55G8a$|G*+q>)cRv$mu&D$^-2|pu+!ESJ9z-XURRIiDCc3y?`7yYS3 zkY)4XQV!9;kFX{^E0KK!Xs5kTx!u0p@#>a7PNw$%R9)|sXaZo(VUw<`ku2I(^}TQj&jz&SMPuOObf)AQpW|e^9YKP}Z849w zhV2g~TseWH<0Kl2U->u+!)$<#v{B&*J4kjTCn9II{$xYAM~XHaeomoNwr&P% zl}FgnZ)VNt5ds*ASh$OFJchKfSwDdnC`dLZ8jB~ee3vpZtz=Is<>Vc$xuj%+*?{ym zFf4k7vHh?|>AGDW!X(!dcl`9$2ZMCVwB0@Yo<@0SpqSOpUFdTQ@*^*dj(4F|JO#%yA{imV~(d}Uco ze@KrhmO|UuXGSF_9qA(xl14UdBLa}Vphajs#@ETgKaG4&_GNJRa2VzqSiWpxaQTDc zWIr9AL*>YT>^Rx?L2??a0}X6D&yX_7XH!rEh!KnxAe%BhR3V)Oq#jl6>|Dl~*N|g-SYE}vW zi-!y5BAp)wsB#y*RvJblX__fRKgM-{bLY^?a!n8cxL>LP`&dK{-6cX>bAz*KEt+dZ%_!JTJ|;e5O6L zLT>LDsrGv_?eN}%x}pmM_izTnCyq<8p)VQwgL;3hBayOq9IQD9l*(MagRke?FV5hu z=+ZMW28V(eL%(n7`_>Zwebsp z{Dob1JR4@mrooO==_9Jd1?1s zCER$_JEe;ZW*^bjAHs*Pdz`MkS0x@aM}Z(hCWm*Qci~m+o^pk=qpDoN2BXo5L-M)N ztt>#Kb;!Ujyk!u>i9r#YRd?9%S5sQBFz$O~k%LpDr-a7ojhfYnzU)b+z__WQwNWUX z%vyviWb|CT2pEt{CaO;wcoSFCw zI!{-jM0`izi$At2*aZE8hT87BbL|= zwV(tGxr5=CI3zkb8}6@TRE!a-9}>;Mh=)`NhpTV=F4#|q+$9kxR(JWZ>9vo547IGM zBhVQ~X3dL#oC@B!fP0&UpueCI;R;4JCu$X=A!3N|W2UL;1z_rW%@yN~yV#%l5iwrS zLu9r|6Uuvwm&|uFv;$jQo?|N;-drrA^cZ8e+6lDVARBEFfZYHwHHJ|T#3u#2x=L9; z`bmX-%uVXcPJd!#O$yJ97;E1^;A=O+(j}+Ll50oh{?iF>WEZF?L5qdF z6U0@HEhWg=6ITIT)~YoSN4I!7fkMLo2rMBYXbGGwAzsB6j(vpu>f*q)VL3M8h$gUL z=}^tayqhfciKtM(4ctZ<93r>*q-}PH(fxuINGwZ7kxE43U-lxfD_E>)Acw40rmNVX9WOP_4eC&z8#?q{ zY6?(SAS&oOpr+NO^cPz829L1}I0D^F)yax*GTlmrkgHXMq^!-l+*ZKSiD2XDEM&`N zIwjI(Gg3E(vc!-`5ig={ivsk-aG0aMX#fHkIR_+jIz+-4)qsIwEL03V!0)pYYO~!# zXeUdK7YVPype4QssQ}AoU8pWx-pELbN5NgkQBfZ@f#5)u_A-`E1R9om!UqsoHedGb zA&TTnu|kQpZ+TgWktx=oOC!jR=~#r!2xeq6j3g#+=@xKD$nG`^QOPXI&SA$@ajx6K z`Ks_LY&J@C38&G%%b#?nxDxLp)J(z(n%q7tV48!8K9%mYI9FwRK0}c)W4dvl(1Ep} zYC))P4R*(eDP-CNkcj8AB&PYHh?F{?A%+h7zUp@nqC%RyfjfF^?#J%KPc%qFNJ0nt z(goB3HvcCnv}PaD8<(W_ppSS5$^0m87r9^TJAfI^h~N}6jN-)LiScBtU*gw&}t0QAQH!a@bkmhFbXc#J()Z91b`-68zB_GC4!A(g> zd5zVe%FSHRECE=sr!|il*ozr1!*XIC1YZ^0D`7p;?C!rP2i{0FYIFL)GE$|3YSCjR zOb4JDQ`+QMXj3BNk{NdU3f}NFtk^?t10x(u_6NkqqDyN8xlQ3^E5A&dkq{63nag0n z^M5SHSBwSa-wn<*BTOLruq28Z*1oV!y3fMGh9zo;Mq3zC-4F|NmMC+TDS<-?A!tW% z3t60%3`&*~2P1fKd=f4~dT4nI`?~;ki#~|PlqJ%eMBhm~9Bv;AQ&PK~Lx-f;mTO?S zV0H&5N60`29vUzh*i=T3Rmex&Ix3mKS8CE{^7AB*n}{;ov*=Ig9t&VV9|isLU?~0p zSq?n{t%-$6%!mPB

    |h0KP<8B0de~BeoM017N8GruhhtTki9kGY`!N+qh-pt?q7Y_ue5O5@18XYirY<}^r6K@Bye;;-#t`R- zg-3l#O%gzVTwo_ILXJ$sNS`S0DCH$K2*phU^)dLTo1$=fhR)48*Div69t4b~VA z3apU?%~-CXG<0IDkRaW{iAcpl>PV6SJr3A(YocOSJKbihi3i?NSq@6Wj)ckktJI#N zcha9jEzic$plIX;+6d0{V}dOx7UIHQ1H1){?&oGh^cm!&B4gzlFGjdxiw{*DW4@bE zPWOG}QPk_c>0u4s>`bWx>lPx!pUdPJB-V0ODHmHo0N+%I7XyZZxlmucV7l)o&U>jZ zk_z|i4140ePBcLn@w=dsS}E{C7%$#iUF;9~QHL1p3u8d{NVp<0yth9YX#Ap#QIAGQ zKmEWu%*u<4XL00%bK|)=ky+wIOk4O8fJg@Y2Ev~NTsvC`;Nd;6OLd|)5L2459^e2Z zPF!*ksWye9T*WH*(2j;twJ@$A2ie$THJ>L&_+z*uEbU-(VG%eb`hcaS;zcrS79^&s1%aET;;d3o@S`RB!=y=|!`e5Tp^saYx@SaO zwXRNy)pcZ|-)iN6Re~FSL?e+cAgb2L>IGUL1n=_8t#{K=NL{HX-x6i!9=Hr^B_?@7 zKa()YUEGIt2CA8G`wsdF7^OF&!iDf^3=VV(Qf*TZZOO!B5b0TJ70U`r3gL<%kpjdPu z^zOMRO?~7qwHUx9@yoVgP@y>p`W~^5ieq<>8jH3E&jT?j14}{fC?Zge5+LZ~IlacS zE#L5j1y-N5d|o!TlNI7gnYMy5J1$ghHc&x)1m=)$7&99kI_u}^hP zubr{+sbkapBUXD7!=Y8oQB)H>p{!Y{(!LdTzR3s0ma%m6z?62-_?kzhdfI0F{oV+v zxsQ`0R|2v@tuI;MEGmD=?6PTZ0}_&l2pJ`g|CB25 zsng$3j}%XIc+e}%;h?6r;U*N|em4dh*ZAw4)ttzD+)?(ah?326E>|Lk7{rY9ybS=d zK7rI)Eo-KC!q0F7zTn|Rsm5-&+27Vat5p#gD#}cRU$SQQ*kD)&<(D&P%Lv#5ki`Y; zE+w>$mn70s!!%k}O#j%3&|8>(8(wyYPC$^ zXr6PEO+h2Dc9`4$<3K3T8V7>OZ5;?JRR;2v4CJep zI#GC52J#hDsmAV|hL)gfQz|#L{9W5^_9T*syQby9$tVKWxGH!to4ktTPu@1H3;q^T zK&f;FaprQgLhgbeH}{$ee0do;VLB&^3-<E%`dX$QE>leL{X;yep*ZzrWJoX)`*ix;a{Lu)y?$p2#@Z7=l&y7zBr<)!n?j zECcJIxK!yUL2O*GM#a->`klKyq_oD_Roa;h%JKwG44jlv@2hMzmN>Zu({ntM<5S+4 zbdxrp`7=a)1f&}PX3;kYq~q%^r3FQRd`&fPVpbH?7_}gC43&~@08SrPTn(X9Q<+l# zl!thsZudq|UYY&w0Qq|yQ2+cK<`DvBUeJKXek`LXHM(Aew&}u^!Z57oFRZ$o{(FAY zy3|%SIT}F8(3(fk(Z%dUOd0C#G6BpJSZt7S&J(T`@t>?S~dOp zP8h>!xXqItx~E*M%LLgb9$?Rb?v>OZ8zq@Rk4ab7$h~tu82>a*NF<@vui&_`m27r} z&8bV)N7LYaYSz1}M4Jfbl1Gs0Mvt2ZWgO(VMA+ z!};*~+U$od6!49nKm{s!ZLLHOHVtqq*@!`d ziuSUfC1OjdZf&iw2vEkis)f`kCUOx=1=<#OyJeG6EDc9utxIgogu&Nj1*wBij?xDg z{Rs7O2aZcRYZ~gNp1T!YK4i;i+7?L$+CDueBAzN`~fXp z`c5DmId9fE1Jt@-4z_L2XVu}Ssgbfq!t=9zPwgHFncwJ+n&F$EnHfu~FGAusa+oOX z{I6cT#q4JV<)^xZ(W(izDUv=B6ASI@=5Z~WU}H!VZn?PgGPCxmWqb1 zIntOip0!e+PT#!yVN7I%0>g4+Pe`E6!NjSTvf`FVDbQzn{t0Bs! zrC-h;Ouec6N&X9-NN!(Zf9g5IRD}I>k>0e zkR(XsWU)^t=}l^m)25kdvfh>7q9o$Dz5z3WqH-e2i@ftr{x;DWI^2jpz-CP>p>t7J zl-6IszlvMGvWWq8_2U_7-b}WfK{~xb(|CwRf^zdk|GI6{?s2eEK0OEox^0iADx)4B?iH(EM(c)H2Z`#*`a2J~)M&_>*sf=` zF)(yfjU3bG)iI4ej5!^w4W@Z+OvTqxY>>9O{e$Vim~{%~@kuDsvCQSj77ZI5$~DAD z+tQExq1)!|;r**}iGo!~N`7vmG#0m}a^xZD0@KNO2G%6oE7xXui?oPmFqx1ggQnJk*&!N?Zvl;@u&k+_c&3sp#vV-bqVQSs-;R+3M* zfFf`)d?5z1e;|Q9nMfDwh$gWOujY4h%=xEbP{kYhPQRJI4>rH_k)sY81sspYf~;d- z=coi?A4vS5%!o)0K7tzsk(E63&5+b%?2p4MA?MuTu42;m;IxuUy|7?A{0P!!oremj zu;`A5vU(Zk41$_s%ihmH-f8o)0bFByl?GvW4X(hLveiTKGwjkPXTn)5kb(pms94U7 zAhf$PwW8svSU`Lv^@PTsPJBsS;JH zo1$SKiN+9HtJHv6D%5LLm$`on-GY8B1ELFV)r6)zx+DmSq!SDjHm4;lWWHgybW`dL`LA zY{MPQ8A4<@H#mmaXv>JRbrIyZbP!K9pT~?*;2I5H1D}H}lDN`_QnEOPBexo?U@+|X zjQFR`jG|ePXUm5&G25>dRF+=%rG^J?54Sw_iHFB{Zq7;^>S?ZdhTFEK3Xbh)RLh>IdU?Epodzs3WR3l@AnX9z{gG+$QTZ>^I*VeAM7qTUm#WJB(n>+5ZfFCYiyI=oga!$o>=%t$c*EyROvglSX#HAYClOej|HwedhPX&zO3SV`f z^eJ$MaoSW z5rv+(-*d}A7!E>xPx>dL@nzE@p#qo9D}0sp8}S9*HUepNGEWdqLAhy&xKVTtB%f9~ zM&u;}RG)nIcOR(_!6hU5VCE}Vp&}#PAHuU5EeAhs#b{tl+2Xb}tr+n|EiLO#Wn)O! z4p*-7Ch`2+;2h~@AoY?p%96&UV^L$dg|d2T#)6j7;n=3V+_p9ne>*gc!b}gFl!hQ- z8mOeCozrbZawu1qGyE&f-?7$fU^6Lue@s^*1!B2+5VbiRmlmLJiH%T7=sbam7<-c3 z_E@dP#-^ifoYUY?*SYJ6jjcLI8%@^wM_yxpH0f9)34~S@UI$50{3;X;28RnYdGAYT zTfWjE;cL_NF_ga4(w8W$UG!SC+c)Z24Audm=uDgVRl16)=DYx*zSx zI7jx(wl!@i=E3)>@l5C37{X!T$I3}%ua9FfATrJ?XtS;8@At4~C6Exq@` zdp4kJ%viNsm~N>>y8$(m$#PO|2@t9Ci`*3|u_nLdl2h7G+I!`R`kX>o%Gh2~>}g1j z=j8&~gRjUjT-ZtlUK02Ue>543mlvjmB7tl1d$TzEBTOWA@@#|cF8aA!-H$BR;Zj`4 z+V~!e<^qdGt8mo-FSVtVHxQRW{1yfZGYcX!a1#$s0;Zc;)}})dTRcb~1*eq*neeWz zq{nb^8DzB7eY^_MywC|nAKG@qQJ_m`U@H z_@LMPgH!x>Hi$pz-H!^_5T%UXc^v;E%0{yBr6-BR6ctnJOmH(D(jPMii?DJ{ier*R zJd>LY$K!RQE|W%0smm@kk@4la?Pfe6gnwj zhR^H!r|BiUQ#Pw)v3fhYGSF{rQIP{g0A>s{y$-=J zFEMHuDO28u%SwZgUkCoG4V34}RiT5)F8f@Q6l^8du=GbU*;Cy3BRQOfr566c-t;CW4WkI~_AU zNVqC;CnANG*kDyDZnt67!fl|$2c7hX3>az>h3=?|ZnqmJ;4~4=;66<+Mw}NAZ>`9T z;F4$8i3%AeQcR!=w|p}br!S?ZS`IhSxlJYpsW@SuPLh4=)7=7LAS)6rY$JGA32&1?x7&LRXN9nu+qkZSOf5Khj=hmawG z&Pw8ELL@U*s9?~a6n)-{An19ygA_GsIa4GStgEvMNq@}W%DM~ql=_i7a zD+@Qx_!N?KBEtkIRNw*58A~Sf0cLX-x7qgKQpbB1A#xlc32_Kw3v!VseP}MbRQzHD zn%$phxXQRiGF^9UC2t;AKUKe2!7r? zwxlz}1o|>@Hcyx@imIHvo8^oUB{V}NRezE%nIj9NViz`3riG$VBh6ee%%(iB%ZQgI z({#G%xnR&P?|f)!(JIEHHk3fbcu+lu+~6Gg)FsROMQWxHJ_^UZ+PL!f7^Mw95H;p z8d`$u9cfA^Z8V*sG*G0;zQpSH4U{$yc-t=frnA@R>bD$4^Zfls9EH+beY^Z4j>J~T z{Gp^g8%was8=Twt=asmQo`K0{B9p|oTKF~Be&`qhfj#RhTRSf0wQ-{KA`Nz!a;Cso zB>gqtGIF7w{hHPvEXcr>?g-2*DXLAcwqUmF%$OzvN-s0CzIKonuU}^XxIdJSVI0K2 zNrozh@aV(tV6u%t2zSO&E-AyU+S+D`WGtOfuKqSXzZ)!M(p?I<-ae+RMo626DP1URpVaA1w{n!`Pz9vM8Z6}&(~|5) z^fJhrYO0|Afm44|Fj<8j@Cavb5lqZn!zOZplJHN?_pqYN1*x%hLSaklrs3`QsNV&l zH$q)PRD?=+Qf*Uucg7uBb{_DqoLf+u+VlS)ll4dDIbjkTB`#L`dYQSSv_5Uh5|3Qwl=qStKIFD7dwwP zx1X=FAiR$hX^Q=7CAh?xVI3RWm?;1b z5Tg%kw=@ptHk<-~{RW2YpR2!~jm}m9!N0@0uFGQNdv-SVrGNvaSX8}ElLIobDVwdc zz+}%ASQ3FIj=q6{k#TyWDyE9VwE-SUD=!oW)X9UjNrFM7(yg;X2f1NrT40zV{|w7Y zm*QN*jJ?1jA~FDuItCR%^R5fn(m9xcEJS6#*o4dL34Cm6wMSo<{b{$`g)oKhAcgSC zx^c=4BwR-|npBcrf3a2|=!Sf=hT8+Eg#pBdyzLpdQXi z_|amVzmF_+V`N8&mkl`W8hu`RiI`EbRstdHlRlb1n9)cm(r6`{rCgGsap4)TP@gX| z_TSgfOZ&WdV83|}Tb;BY!|0<#$~{pvBOwvDZoJ|C1m0md*3_rE@v#b`pt}Ei*;^7Fl*b_g{se>54YsC(1($Oek>yD`pS#rv8}@-v*4d{BP&nlBHi@c z=7P&0DiE(cmBs1{&SbIf!V{U*o-vOsx6K3ZHKm98VqY^3`sX~tA5hpqHWR)jUvD10 zHk1VWKc6zU5m$8lg(cH|6}_A#-f6mZHHYp}MUl|--MdjWq618yz@)7qEs)WWz=2_j zcFkXC(H=EZM+C5aOT}%S2;5?Q+}Ihu8Kcp@u@g})@IPI3cON1}kn=$K5em7IrIn(Y z2Muxvb{k$xJ)gkM-4rv_8}Gkjc8>Z!##jv6K{$)U9wdS3Tco)fA0gWp@9~9;AyZev z^fGKsU*!mqHo}hPQF_JJ=J8}w+qD_9u2dg)_@!XCifFjP!)Uxg+!D_QZ=DL~09lLG!L@mgac|)rv&uWN|HVBG9QY%kXP1)$R|*yqz8EcnpO+ z&d(O&jpdwWIaX0p4j}a1LHZ|xO9t#zyf?ZK?|iae%acx~u!jppnaz<2vymKsMY24K zW84K?LUI4QxND8~^@TTfU>PI*w|~}^59I#W=G^dW>yPga`-fry=f;#Uv+J#zYd5J| zEQh1t7KB8%Yh}*LR~M|9Oa?oZS(3{tWQxO~&+v_j)cIjqln{!6D+`?mVu#d#LXCty zm*N|XN-wMcHwBx*Ijdl0y#EgLA4e5dfWTc~+iNCl-{=BxGWE|7O|E1+S2%JlK&{0V z=MrnN)&jIztQRL$XzF)Css!|dk}4EyxNv~{Rhg#iaY-UeRmXWd{9oKj6(({e z8eJ^0V&UE=h;}Ls3MHx~qdEx<@-{wU4@h`Vy`C@P!1S*{;24JS1{uzbgI-f@6#BP* zn;|$}Vg{Sx*!5nBCa2NoM71&yw>!2n5MoEu{Xn_SJn_V#Z7CiWL}8fc5vUsZzPeZr zuHZfe*TCc8L=Qg}^^4P$Y2hvVP&`1_I(d(1l@vlvteSoV5PuM?*2Wv;1I|_WQ9kDV zCP;OGR_~<}=2{zq-q@=Q)Lvx-9`qAeoB*8;+|WvM*Rd-l3YGx3V!=vPt*x&-+j#M$ zdbP3pw0dxNt=huvDymu(*v!E~K(Tuq6s*L$4R;d+1S8B3D-9nCfUvK+1&BHbbHCsv z?WvJhmZj$Kwhm<`b(y?^9*+mGJ;umuzd2mj$E7 zFDwpUFG;9Kx7s)i=t7b^oI$_8gEKC_yq2p4n5h4k{&>XX0%oY>)YN*FNN2S)V&R4` z)DYDS09Z>Kwx$d?MU^)0;j1_{!w&DL3jl)k09<7LU^xysrFmt3I4Adp6EI4H7E9Uk zJiHw-O~nCo{Ob(~*~<2&x4_9vA$q-DFsbk<0LeMI9P|;*DIxq1*6L`J$=ZioLTAv0 zgE~C`6EnyIQ)4d5dj zSTvtreA<{1V?aezVPWha_u)xD!2_z)&!R;gg5dXEB*Dlcz$x?n&?G z{su2kLB@DbtX`hbRZ>2jXAXTPrrA=3u!5W)LCEk8FHB>7smz_604k#P7VQ+?OT~2= zItw$!9WSH&TiL5@#`0Hl7q2yxO_aw27CC**h}@j6EDVZbv2;=UClNv7RDE)=oG^yC zhK0MnuPJj(`lqb3>moalYO*tW!}i&N>Di0+#*tn{toz|WL_aKP zfky=GPVMx=Xcwn+BsTz?I_X1TAS`(a(7OaBop>wOa6p#^u=spOODj90TeW$Vq4dqi= z_d&i&Wys(a{4Bu#rO{V%JqTJz{34{#)1;7^+B(frTq3-)1Fextlc>b#Wx>{1&U$4z z?bK(w)-%iUY9?zliE3=NX+W|~gR#&k8x)hdzk`>EANh`x&Z(XdSCosb5pR9sg-iVQ z6>b!=uOH*alvl1xB0l*S>RpC<@(s5y;eHf8W3{LCYOG4!XnsFpQF=qh`8ZCN;a@CA z%xIg{Wue?*$D8|Fkj@)YIQ|CE+HM8Pgk*Gj-fy<0LXwvgC}QhyvU!DTVA%BcrGc^d zwVHliDd4XS@FLpYp>+WM)Bwi?R=+9>VSCBnRRHHssH-zlm#jyd2OO0pe`Ea~tBBqB z4H5(?ISDco{6c=l)7Sd(N6|C5a-50%SGBzOGt;6C7eCH63a@+l`5iJPBoR$kyh`d_%5Eul0?Iy=j8F zv~`fp3CsyJzqU0yVd7GU(Av%TW)wy>MEyICeM^SEY6II)5DyUU7m2_?D@&uvMwsDP zcNbo)$sNxWvWL(n6r~~@|9FA{hdvY&RF+&<4vCVKQts)Do0p{7rU`~~Wyw)Z2Ae(p z9e`!`6s@U3H%b!oMlLNUqh;GqQmQ4%39nL3c0ydQ2f@kE8FCz6r5WA)uGLPq zaB^eI3POkdsGU#cJkdijsbYwtC;2X8PJS!!DK)ytkck#K1j)Ybr8A*nZfV7Q5HnOH znOn;c9jcks(OPeLIfMhXmLYc+`6MslQi|ZuaYnJ%@D+D#u#!B(L*CFWY^icNp-EI_ zm{};D1MY_;_6>H~$y>za(cZ}`rhKM(S)0yuGBa^&10F2UCvPb!?7LrHK({+6xYIq5 zGOO)_;u+Ms87j+)XMigivQ-1zgLZo2d6L`??YFXGBc=C(Ub`#4K$cS6uZP7(#)XXw zOaG4l^IkLvnYg0KS%`nu6nMgOT%eGx?svv2&55n*BVZQtL}PrgW${i#y&{pD1%>1| z4;^d`JU%B6Yy$G~%Xo+TyuC6a;Gt;?C)w+!d;3X;{?NbdMV+P03N;*^XH zn{Fn^NsMg3%v($efmm?+hFmQnyFN@X=cnOV-9MO{z^(zWG{dK`mgrJ6m@@Q6(MZOL zsaeyxcz3yg#xWYMkbzG;A%i0Oy~OI=7er=fe%nFSrbP#A-27qB94MbAKmThhnHu2g ztsvTtlUjnsqVN_2Mw=-CbCqUb`Dud&s^hU-biV**w3QMt3$&7voCp;pj$NY+mnodV zsVs2O8a!z4Khe+2PkdQ(i(9Qbz9ZQ;^f4n8 zFY)-2k3U&p{|FgY;nDz)F~qy7z5Dsb+E%r)wLwC|P5>PkJ&tMU=pt(qwOgt-M`cft2m>{9uw^9-WJjcV)d$DvgE=vZTA$} z>@}_T(cW5b+SB?xbimdvYx2RT)t($Cq8*vT6ASw(SUPSwzl#EDZnr$IoqHE6E8E*o zo;-Slj8kE0+gj@lVZ(61CJKRtOhic@5yIHx6=0liPKW)|Bk)DP+rc8egP*N8r`4oO z^D)5H$Ot(|<8Y%F8ab>6I}yt`WMJu>i{GxdH%21OZnc8Uy)k2M0uD}XbSycWN`}M^ zvxtFij@0*8@q8-`H5h*+8k+X{=pjDtA0o&4DNV&R93|qs_?HV6aG?gcY`SE0ilr4! zi9lmc%ca?frE?5o|Nt}!M zR=cOq$1!4vI48riV_fo}X`MYu=it!C&NXK1o2%*&esh-~yWW4DyE!1+dz#VfSW?CP zM{nXLW#~4e^J`m=?L7M7K7}#4WjZeGB?4=rIN46p&FSf;Zsp)^qW6p`4{@tWOb}a* z_OWmr3;y|yX{j-r(c#Ph&2M zipNlqNheZ;JW*+cD1rYWw>s@UX4%FegE3F=MC9UyQ!EG`4ER>*i-e2>M=Jv#)~ z8+f*JC*|}>XwJxzfG&U_@c9x_%0w&L9t>b2DiL4G5n<2^;4N13K2!uOoGxSq(`Hnl zZCR$h$$k<56!$=*(F|O;_~2ft^CA5cnYrAt5Z5OB@p2I&>|>4j_R7ApcY(qjm=Xw9 zE5jJa4vi0qXhlZT#8uM~gZ8gmolfU)IOMy_Q8Cq`?N|-xQ|<5Ym(~T?2_^nnWYd=1&U@BU@=f$l#LG%B{?4NBK5NU147_ z{AM#RU{;q_zC6$aTSb}~Df!y z#5_sN72tZG{M=T`y8~H5-VQV=9|U>ROSqx^?y)xu$|Cw$;ob1J3iI-m+A-71>WPT@ zgm9eY3h>qGpSDV6Im_bay0!xt%i{n5VG@kVY;TWOR@Z;rdA+l{{`^j$R(ZI!y~!k% zNKCo%>`o<*o^QU`+}T2nC|l_u)|eVqxmrP&C3^S>)QxPTwnW=mP7U*I$(%T)zNZW z&sH{G+-d+#zXE|daWE+1XlLU;furXu&wz&j0G~ZyU)y*Iyh(v)&}XgtYiIGA z1u-_v4sHg;hQ*OvYpGFVZ7`vu7V~jSYHcVAI=8w>ZLgy~08R7e9~nd2m^4~gu8E>h z{r8R|)d8Q4^nzyRU?~l`Uy?c0&nRgtEvL4#5y-1QhJE)4SJEcvgcd)N-(^a8@IaM1 z>&%q-!@YmeDK+|;!0)vFHt|8Nb(b{-Lt9!m9FAqNB$DcHO}8IvPMTccz0Qeu_vf4l z!9iW0a%Cgjz&PUCc(0QZ`ulTMX3Wad5e!_BcR{b4P6~cz{Hwfi+5~G;sDAmo;XfuU zIHUhi>_;#W=r7RwJ0mwV`6rV5;}#@m^qW&}#t5#r`{tcy4gOyD;NNl$_{Mm1OTb(F za|PH6aD)UDe}Dzxef}ZnKODI2booIyfw;4NfNAOcIUh45oyIwB&UUPP6Lu}S|HJS1 zXopEip>O){|E}Om!{+QsN0?E1&Z9Xjt@2R3apFmj?`O(V4s62aSVtZHp^p&Yl7roD z)XW6+90a>D0<)m2L$aT!(t&~ou2j6F6V3z2eW^T+-1KT3 zTaRNC9a#pr^<39HxVgDTfr0zaA!>uCR{H|N5X2Y!+bX%I^XU5D|3L&Mli-tmEdpC? zo0&l>st5o5Q`n4+4EO$!Hjo(%KG)=%Jz6g%DIHa0Fd9IWOIjbmiXh5lEvn&{n>*FP zxp-YsJ3Be9CeUH`Pjyzn{04^-g{7CzJ!YDkTh+sdVn40(UL*4)&@^&Sesh+-qBpt2 zaIlJ;)L=eruoR|s6iZ4ZdCtnoFJb`+A)i&i`uh0eywF^rq0DAa+v1oG)gjc^t0^|9 z&*sLV1+Y0y&nLP!na?DLzPvmEyB4cOWOI^Rlw^rx8 z^L}Tb=h?=$>(5>bhJO6Mi5`KCy)|H~XA@xeVI=pue?QDY;Opx{_PPZ!Qda}A?`L7{ zrXl-&7HH+p0#3`XuZE?q&7GYMQ1(sFpkj4!+EHllR1XddXnhx0XCdxtbNc>aojJ>S z_unh3n$#brJui=>8bocgd=0meZv-9&S>m{djpHrSVyLea_otJQSov|;v+^l-+5Eoh zT?{7wC)6hAb1z$Ab!zcdr#A4mp#A$WUGXQu6 zUpH1~%uK8}u^@Zb5zevDN)1lVPy7%9P;GsQ)=Bt>Y$T>ii>|Wy+y={dvhZ3(@a6*i zqHUu7*E)90(RUeRHiLy6-J#`*`)&SSPVU+JnM&GV2Khaiycg3$3DpM5pQUL>;5ZKRH2RQ7>VGc1(gCm~Q!6$X&MTw=uA#UGXGA%DQ;>ifx z;!f{ma*hSsJooF4DJlo1)Dm5@P1v%-Dna9npuZe-(SZknY(4g#@jF>)edAoBvDzqRy#r4P%@h}j-g*^*Y@lf;Gf621^ z3y5yPG7?ROA~V;slZETd*mzU2`K?*4M){>F%~CySxIjZ=$XkmQmoiJQLR#h2a)a_n z>{PHQV=%3WT8s|*ePFLR&SR|j7dS~CB4c^7$(Dzf7XDq23W~e83y&%-oQ>*iJa|L7 z)ZECy%@0Oxd7CsZQ;W!B|*We?X_eAEdZ+^1#Fd9CAyBRHg4oitCW;{4$$9c!(6H z&-WzN)v_dlz!7@U?}8^j$N6o2*q3{O%PLWT0ujW`Iu9km?GOLD)$g7n3e>9BJ76d7 zrLX$??fzi^2?~RbwO3F|ahOS+@>tmc|8$JwKJtI|y;`A77M+a}mf#z z)7)WiR}DQc^3kqVzD6<#k=;R~rC`_c@&U=hfitHRE(Bu~WV2aydK zau%p>YOO{C%6IBK!si8(*@>J8{rCd^;ZuSB{w+FzbUJ^Dg>E%V-D@bqynTL}mL`QP ziYaNqCA4+3%EvanDX$2 z7`kv)FzARD%u9;#U$bR}lHe~PGgRZ~w-v#<0A- zLoZ0%IKP)L2<6si=hF^`f|?S(w=+7NzJkq*%o4M5t5vYVAw;qVbC#Z8_de`iwX%`O zq_q6x8IqaB$>h$9bY&qyEY^%d0R>H#3_NXxP2_w}AHV?BelTrmUL_q|>Zoem}|ke6461Btiv znM@>I==Vz{EG-)fD&Z4_cD%`n1ZS6YdWdV=!QsioAjJCFO&PG$m~8&$j$uR<2@1r7 zT_{5|_%Yl*+BUUhTm%FVkJ}Doe9sjw5?zv46o*H4TWhJf5wi&nQn!ca=W-&|_G&QS zyEwGJTDxo_2s}8R04>V*#cKN^&)LR&GOUpPVfqAZ*qM{+QQ9a}@x@-R0#O0~WstYk z&e+7p$=R^pR@{>!D4L~}DOpMO{x7=x(%*8E9)W_lR;`TO*QJ;pYrOT@@jPIH_=-+=no^Wwn$>x zvU(3vSh|p|yN*j+bH>Yc)d|m#f09s|E&cbt`tRSBGH(%r^JIVj42^|ufIeQ}>S zmq@c@s5U9U_Wn%w*uwZs8jo@e&u^(L!{70UBBwhYAC4;gWdbz6>X~hEY~1k4&4p8f zG8vsCFkl;}l{l8_>#wW(pI84;@puxC7P0t~M)AMRDE%leU1}C?6;s0C_?rO%i?aW; zXt{TmWZ$7=sb>Tf$Tl7lRA*hEFwh^SUDhAy zHgfl2^&p4A@ZWqf7yV&wFweDkE(fc1hNOH#V5|_QD1Iv(*PLXN+BbI$%2;8EN{kO` z)=?0Us3nY*IoTwfB7Fm@;F|&o`D0L;fAzux@FgTc(-)f1J6#IP%d9|+R>*%2pcq>` zrMt*!f7nrKUQx>AM`+TTi}b*@M04Z0)XQyc`#PA{*3o>pFl1jiv*FsC-Z6>J{KS4XFCwM9~F$~_7_lKpaeEh!={ZW)cmVqwA&<`%3f)7u+P zOuTgW8}%vS%(qeyUn&(DO+_-z9|WwkMw3{{QL=WZhvMv8D=A?Ut!69DszhRqOu{td zOf!i|4Z$T204Gw4+zND&%m_h+*@G4F^;V^tY{r&k{X#9BK??0O`%4>YjPC2a%C8yS zlm>@R07^2%lAW_y@#9)W>8eRbe!^rHdI;G^wgH0c2xZwV4&ln~HdAEqWc7P$uW5@k zQVh-gY2^#2KHHYL-tFtcR=#M6$GnP}kCsd(lz{maxk1IPHz`CZgmzkT7$l$Yl-K1$ z(lenP>{U!fJzbpu!KXGruP}LR5nN z>R}_ET-R2z07D}V)D2mW$lmw|*u=RYN9&c1N4lPUR<3S5il`Q22TdLcXEQ+m05&6% za*j&XzBlgq8RIIqc;bsT03W`cR(0t?dJn!bHM9^lSGLF$W^0~BrdZ_$Ei#4n+YqEj zl!y^WS)F3y{#-P~v`tkIsms$-JRn72lIe;4zo+9t%LqO^ON{c_pNb5~aWfSe5YiHA zskx9bFjU;@2iz*LTYQQA65qa3?Unxe_~UdtA_L%G>8uFx%8rM+G2z^#Ul!CTuw6eK zQJE90&;%->be7{E84M7b`t(733a8rq z>>_pVbI-bbP=A*bBAgp|-z zi`mkg;5tu?liXqyoK4$l^5a?)n^Hm>p0tl21_u`ixeRp7dF>c%@{ZWDq8*e4a)H$U zr!o-#B?$HcY^zz`isD7BW=Y{Y2Xb~Vvz$S%lcfLJR6)fV#$+F>M>3g426XSlQ%=1>80D)n&HNW z-^iFK7fi~%#uwt+ocjIZ%4MCQ+X!{yeZ*(I!I*|k4Q7NoPc(P1M<7FmG|9fs$Pt32 z)El^pg2c_MMq8No9$<@iVW!T@Ayq}?wTwO+wepcUTwW`#_MRw|^qQ}jL_kIrIxA}! z{7!Rco9vHL|&gFlfm=jYzA@ z=e-L&SGA$9=QM7^QACpNesPc_9&>sLK)k+zG!Ba;|-rbvRx zKZ77R=<;_<@wg_SWvQNxMrWAC@#y?W!x4CYxLf4KuhQrforE!<3`W5|zU0N*$WSAA zk{>#hFf#-$o0k;ReCdCo@d28?51hXnC3Aa1o=s=N1LoXx25s-c zZ@kN(uKiR&t0WZ(SScM!(Yl?ErQ$p^e_d%{aXqHPla!)1yu5@Dk|nM;$gEazfC&%g z=)&awq}2aYI=MeJsh@R-10ggJmyP2m2qU?W%7XlBLR5YHuq>}d^7ttbK%j~{z9<(# zP2?vEL~~B-%b=RP?VSk8iTnwuwS7K} z7iAp^&2ydrG6dE+=c9CUiyPDr17kYErLyLMX?Q}7-nO6H1>AxZZ{^QFR-@e#<_2N$L z@r#$w*SC53U|#zFeYL*5i+C$t_Vu>D+t}WH$x9RSN>5jwJ^oQ^dOiRA#?BXc1%t^7 zWs)$~J9U`f_AmEF2*%&Vn6qRU)}H6YD7LH2uE_;9LcE+On5Tu&kQlDsR_6q;+zRQQ zfn6HZXhXyUxNzYJ!(>1{zTx2Lc=}dNYC0#9h|dzKpMErj`>0%%E1Qv&2rJIpa2$ye zhzBYhgm~|52|cbm8%#6~XoGZ+-0Gd|Lx!nDwRBaC=v}{>2$+7S0W+k%!O00QgM%A# z6d~==;b83PmVI3Q`Of3p@UBXf@DAhi%hpeT?7>}46|H&GEDbn}#Y{Tw1Az~2|4k1B zD)Gf>c^oX^lB?~tUyFRT34TtfcA3BWW`~XZAvg>ljL!FPK`pMEWLUCfG{USl8y#1z_9|9 ziX^TLK~sRv8@%4KSS8AZDt2Vju1p)-zN2u8Al|}DqJIHJj+|-3&8p6|bjimhPzPRS z3$29fV5J$qN5Wg-4xaa8?PRRK$=d|7E01tBUN9`Nk~*|1%bds=%OLWB`KKwHbU3Z0 zeGbF$u?i-3-)~!`Y|N(T(P&X;={oEUNlhaFq{jx~>5iO#M*#R7@6#ze5V+T*{@ z!vpH(2&hE#*;$Hc!;|r97}5<{F**1lRl+{a$ftBV0cK8MYlRQ5-OmgL z!<_(Rh?Juc9$*xP)0N%Ba7?$nx1;kR80={Lv$f<6`dV|k2|Z%Vu&xxcliqYZxZpN) zrm0e`g%)yJ5wNc>Lv14+t2w7C1|mE{`XXYAK&S4iJ|6!xPNVet#EvYoLF%KJ>SMI` z6AY!L(MZAu4tA=eapPOwXu1w|E+^CeNf&PHUATRpPKT$RC9PYXp9V>0$xhl$$#I9% zru%q2O;!_W)kuO1yN(e9{vF5eXVnYd9}aIf5j8GqjpBmt_|j##j0QB_5C>Amm#3Y8 zf?2(6vr9+c6@%Nd0NPO4gXS56Mo+`VvA852P1oAuh}BvwFUyVVRv+OoBXQ`blN#1? zin$gU%D84@RDejyQMo}U?;Rmq9JTsbwNm2m6OU(uH>2tIfepx4e8k zzg&))_c|}4;;nQ5$@eU~>$?*Fj_`UCrmLM3rPOuV$ko|_Gm>}5?t}xHP4w@Fjg*xd z$-WIO##HuUJQ1CI%usuNtbhg*$QSglx7k4AxIoJrb>Qjx?>M*mJh`o(_#OvF1(Imf^NQLwJj&*x{@P6tDsb&NC02&Ku(jx~Tbm=;KB^#=9AmaFT?yUHx-syL#~8bK)lAMb{lrX6avXcK~#k4l_ta8}A>urXpL8 z?vT)*qJ_25KC;##=dL~VF{C?soU(0PVK+GG2im%!d0U01YOe?V6VNS6E2VyDuy7>; zjuvrhf-c85mTZFHj{^Nx%skNV9(6^aBy~Zy49y*3O&B^&(`5`%5ocO26ynK5U`V!m z>4F!u8fhE=-Mn@~*f74sFDAOY_@rb<1ErFnX;AtQelu@*E1}`;!s+8N&h|oSoDuoL z$JL=c2bT$OS5y@+8*>y`jQGO&%b_Njg*!xW7zD>4-7A1PZe0!smO!i;;r*D|5K6qm z8NcCOhV6u=Y)&5C0b2qy38PAB&mc_>$IS!Gc3Ad9MD96<4J?345U3-@Py;F@;gp0p zh$#a4Yh|Dl^!ak`zkfV}vlN8)LnLPues@4UpjYfxJA$QzcWkL&?ALdBvsN* zgeK84Ek0o8r`WJYlHk&t)!rshQj0gO0p+lLB3gPqQ9T@K*m@kMHf+a{Xkoclr7X5~@0Y5$l88Davg6MdWYHuvpJ^5%4 zaDxz!;&LY^ANr6(9|`@Lv?494G>LnuC>u&^tsDkJ+6EtE6fRe=If8%3 zC{1RE4+^Ydmin|TQPIgg%Ax$1(;IAl8$Y7xx~qZ6mS3vQ3I`vZhv%g5)Xlf z2n>&cLjuu0Fwu?J&b@L(7w*ybHlm3p&Po>qH zF;eOorR_xH99OE$DJ4ANcp`{#!)RT*XBanfFn_i8^{bWb7aK30e6_sy^-hr(c$-gOt$Rw-DYGIcGZk#9G zS9NA0N2^avX0H#^owegH@1P( z)PT)q)z$^JDja9Bm0@q#g6ps}&muM23R${1X31y6BBpB}fb%QqA#FYt zQBs7ATJ_$^j_^WkeZ++C2a1rCzKu+-#{8WsU7CZ#I}Qvomh5~b=gufw8O|JaVQdLY zcf2`9DdN>9vW4=V2~IiM>(d_Glm{o^ai)US>pQr&!^EtX6p+G+7P8;zd9pU%s>9o? zsUx`MbWk}1ko|*Nq^vcTji=2zqGr`mc@XVE7J&q`-|ruAzrjJS-#@`{M5>Y(lgZ(E zF{a-au|d>diNl_|0}80g?zau=rrxLtVbG8Y)qQNSG4urpC!2V;@35Qa-a`rGrV!nf zW_UbJVVgvt7a-a>RWq<1$%9D%`pU>{!cVqQlg5Bg>}WWu!Kei(p4Q2IXuOUr*>1@7 zA%`fZG+HlF#;MgGXDbz?1S68Bi4lWIa)p8QVfAd_Fl0auCT|>#hJB!#rTW`h_Riu7 ziJM-q%}SdIg}oaRG`{_2kWg#O5xoc!7@gZ2!@?=qGv*_KB1I7gBmnb~6V;90lS{&c z>QB=nega1vdhB3>oZ{sDria@VaK17y?IYYtOWeDXyH*n_5Za@0N`rBgc59Xm^}%nT zqdn=m7sCDS`JijQiGLkT;0`rD;8huq1dPtD#VVqwwwf)=t5N*get^*U@Wx>{A@cS> zagl0+wk;QQUXcwa2xR%7_bk`Kf^M@WQj-(N!psj96{jQN2*Kc-9;!&8puXS zF%>F?HNdjfn;t(C$BWLbs2H{#{l49$H=F%IfmY?B6%&A1Rc2^oa1JL@L<#Br?`1edqnTsJ+XjITa&Q_!uR%an+ z7ZnPqd2lb_rnaC!G+_N|(@{LCBtRU+d5!8TVu(`)ZJ88_BT-kkF!L(*1=<-yF2Llw z0W=e;w&aW#JUrwgC7hc6N{?4&+iB}piK>KP zHToO})B?4s_(tDSQf5RS9ec50Xw4@dsmaNuS zNRgAU7y=U7E38+9g6QkmSoBR2*cI^PMoh&$9?PN=rz)Kyju|331V2tl{zB0JJdt{0 zUs}HO>`fn338ikmEU&$5Lxbh<%wHpwKm#L?PvwSHC+;5<2meA@ovJztiAGiuWWWKe z^qyrDSq=av*PD*xU^)Lwu&8v~UOY~VSLSLY>H=M%wPrU~B5xi<=v_B!aG;^>0`|Or zpCa_%kzSUCHS#MX@b7m&OJ>?D@l)vo(Qe*C6NY@W`7cMWu7bOF^V&L<_3%ZRJY_;( zODdMNY$-KwMIoGF;Uv`0=MkLvjk6F!Uy)nlFyREY72efxFIR?^*;^vGKem|6!P6uj z=$z$7En%m7gM&e}z55J?wj)|Wj@@Lh_D0}Jui8T5Y97N*dv69uI5I*u2&#HsQUz|+ z2ZsVfn~cW3tp;Xp14xB2={NN0>Tn2S4qe!TvYpXo@4@5|0AF#KOJ@)Epi}$DL6q*B z;annn9>iV>vFUk*`(Tbhx4%tCj&$S-rCf}IbZG-r2f6+<$D(7`0Z7@D^!G5Fnc6VB znx^#B#EYg<5i@|q&|q7W))1lqFGY^*&0um~dpZdtfhxe1U2wBds~vAuqZdDIZ$yTM z0no-01s{A9KmOA`Tr(z6csXV$6PoE~*%dV=`{~Ww$36IWEbW~S@IP1mkC(T&zAqH7+U&ziV=Rb-1|Bm%n4N#JPRon-#~BZ zcot(+^C;}KT`>;D*OFCPaut}YZ*m5hczJ^={NF=0ThORwa8)`rLUB6ZRyJF`JE~m6 z5@%9I(%!St5mm&yqwfTESMW_z$|LV3F4AXYqkKLwmu)Zr@a1AuD#3>!w+{w8=}t$h z__;EMs~ns3lk|H0kV%e`4(7PIdQw!j`p4aM+H9(9V9XRAlqP*||o8L$G>p+|AgAScMi`%^3`pEGSk^}N0$20T`C`B3#N z{w2gS?N5W#H}rA}Cz{_KA%_SdCt)4GjK);B9@Y1j#{~6t;=biaLcbKy5o8T1p4d)Y z5q`k&DbQ^$RP^nQb$mU{tdcDXitLcANpjE3lQb*?8I&F?1g>-mv@HuKtc;YEJaY0^ z>Xt6TDq>%twS;~f6e|TX_78)C+~Doo$6)g67@-f7GXz;8TLlPpKLy+X#DaWSeT4t< zW?TL7|DArM7v0*=Y5Ma%q~=ic{wD_FjD?e^e&U)DMn(#U0xx53ly0E@C(J&v1YOG8 z1AlImvL894D5qvb!uYa6YcS-QfriTra9FDuO+-ur#?A3ebk3oJ!30f!BN2D`#LSxH z%q}btCi=R-ny!Z7cg7+YCFg{DQE3Y2VzQkWL4eplfT|MAiKlZ_X0!!lF7 z#OLcT)^fsg+Sk)M*K%zS0leIO@ZtIEE_QgQrmpH?A4zLitGT@KkXaHpg!ezh){~^f zk{TE5@M}Rj25k=~aWodsGFpU*_AauT7x$zN(%gB?q+O@GgVBzr?MUc=+Z}l)vu0F- zv_5|!{|4bfNYwpuK$OuT@$kdo{=XX6NV56REhXMK6u#o$9z2SF&L2naWQ>62xFWQv zl)(g7gU9k&hXdU4SY_kk(|9I3Y}3BL2`mi+?4%t&t%%On-<+CWCW&!Wkl^!MY+mk~f|i5qLE zwbx3ld3yyqi8INu#$U<2nkW{Uvf)_?-`jjw5ElN3OxQNk;|w^L>yCkUNOreGvIAD- z*T1q~|IU7OvR^-BzkdBl7eFgW&vv)lxAngS=?A%B^@qVfcNfnY|BNkMNIB&wy7MZh z(0!Zu=U-&B%&=!0H#q8r7RGKukpmupaW};cNNL+_g#@BwX-J0HS})35tM|cfbC!}4 z2Ak)fO{G;T&OjpY09E;hbaiZTUv-SBAQ2X;F_DNc=1V2g=3^<7Ie-|Ifg#OBBEAmB zh@ryvo+7dcy$(?K(+kR*2?aFyo$!H)lefZ2^1#&B&I5~$LC_Z9;u!e1=s0FjL~=5y z>EEDtgJAx`&+Y$ zB4BBNtOtl{xD=;Lhj?%h>A4q-F0?~p>Sad096;x&?HYG-fZT< zXvf0v&LhN@aqG@#2!B2aC<{J-Z0Dc7H^{$Abr{eTork}1Y$uU)L2nV-r#k+8I3zz{ zoYWyj6N5fGOll?}!7mjJ+jX3;(nFOq65Ol3i6Z7GqnHz0Pp<(5&0cRR6nsCjP+r(+KtN*Jz- z0nm<}4M&%ZRwZ?F4)gSS8a<`kV_Mi8=xGxO4)10<1fS036trrz!>tqO-xAAX3ffN) zGt$t73Q5X#0Zh%2HM$#OD+33f3}~Ho9vq4J=RV{ZkezZ#?;OGr?2BSvQ^z(Ngx61e zcSE+wuSUaQCj4qR_!`iYe|VF8^b)bncUO*x!n+ls+=MswhDZj$g23IwWT z#fBANYIP)U+dmgq3mSbzcr+qnm=rG#pPr9T;rNWicOWYmIxMAt036~57BpL(1aWsAyKy579q&x~f*x*4#Q{N{A;HUTp z6T_1(g0gVW=qvcQbkq*NB!|J$tI0o>8p>%Ku=U#A-F~?~LzGRUP)e-MAl7Y6B@d>W z$ak;WTJZ@jP1eX~sDvroJKAuh+*&FoqD&Q>5RZ>T|2O}D1CmUkio8&METUY=NA6^RpnHbBtCDMU4gD>=1k*L^OIAWoKO)tOQf=!&cq6Hc7F z-b3O%BX5QyKF+whBVlmr3xo9XBe=ED|F;*olDFXZtoDX-ddFSA3TaHV0{(|(K`sXJ zsO_j(mWu1Mtx267I0(!Z8H8=prN-PUt zX9zx^958MA9P$oPc{RZzgP9rPF(%)UAV`!m@Zn%8+lu%NAw(U~TB17PLNiew8sRgT z@IlDO$R$Doq6Q~Oq;Taz*ndNyJCBkzmGeUV6Y&y?%nk<5qJ0OqVAX!}U>sKA6DP*OwML#n2#cfh>g zbh)F*3&k6o5Sg28W9@Tewm^{H5R&)7rNZQFVi05}e`33`fVvUdlxXrF;O+;!7bWxSGXB{=3FwBdAQLzz7tF-3bo#q&P{i!!s3jBjSy6 zfQ`_E*hVa2j$S)*)UlkbaSM-Dygu|Lv%|?0#X4_!KRt+~m~SCg%~ZKbvkB`+bc%c$ zdBrlFW-nLH4+bOcC28B%e01MvuJY7G02zr2tDJ^qC2H8M!l^;xNCqaVHY)Fs$H^%M ze1eB>=&oa~H^_ikzcd_pDgQM3k}PbdC6e!@IP@?_VacefCtEl+51QyqS#Wd6tL_sG z|1wTXNIZrRRLV;y#uMc5#`9Kh!svX}Y2?W9ff!{;)D~`CJMC8MOl}3{88hCY0ZpnP z8FYX?%P(M)M1Git-z(D-7-U|AbPGd9Lbp^Y<`5Zb2Xr5XC5POLnQf?_^I>zMLUDt_ zX2F+94Ww^GV>+pRf}Ny07P+2xE0so&GRWQXV8H%-!y%Hi*HlejZ*{5=-#>PLRv|leR}WjpC^tk6d@(95(dI9 zx1WwyN!FS8F?FQS*K|s*E#bZHTZD4-t)BXMA{{`|0GITfKH`es>&oRi=~xEMM>e5* za54?3@G8wUvB4BAdjB9&q*1FYiacE(493M)?1F$kv_nj$HWNX>NlJ?)J8efa9-3VS z6Ft`@wVgI%DnevKSOTu?}s7Y;n$)W*H zEV-wfRC;8&!tEgMV5>Q2%mmosq<0vW75W7Luqj}mRN?gAET5cx5>+`-;TgawkUVfg z{M$;l0)VyeNhGaurjijhDamYx!*tv&!o{5`U3$tu3!uc+XVkExdmPqZeUF1Cps>KD zWuyEO86Get21Gub$}wiLOv)vg7NJi}CD^EEoKb?oCjSOUCZ4nm4*{1NzaxYg_g=-N z)LooNlAV;QJ!he!3dP}CC1Agif8Dt~84b94JLJ-Al$1R={z4k+{?+|RHqyQzmlrJ|s#X49dY{`Y@ARirztPDrp< zIVNw6Iw(=rDI~a_K!q#9i%x91gt%OUnd>%ylk$<=kKnwasfSnQKqg^xuZ>cnB32#^ zO#TTT+RMubi^Z8kzF72SXs^Qxa%B`&aRuWLV>7wc1`){(G5}E|vEY>!h|(5`EJ1A1 z`e}!abdWRogtwNC#-I7;HwDQEpo$9$738R^SP0gJ$cbqw(S%&q+Op!{4A+Dq5w-%Y z&MfreRP@W!gsaTq7Gh-^WL7qv0GQIE1V<9#yglT<-O2f$ibI{xYX=jw_7^FU810rD zEydQBmY3k%h#I`F5KWJoWDeuz| z0n3yb8@mv{i=cZ0vM?y5*IN2_U#+^Z&>6AcTv3xGhN@F<;x4NNgji#GnY9njcEE zrP`i$Hi8s|<0ZKz&Lfg!diB}bDtHu5fcQB)hsnm9%z@(B23!#Ef@GbU(cmMMXrGgW zYSehco0JMnDQWM$P1&u_5p|Db*)sGv>R>eWvUXS=1w=3{6q2Qd_cj4Eld4wVFovc% zY2xGVuWG3&t&L0`a{UgJCDT5$a=pT=Z1)e{$81y(cB!(lVtRc;XJoX}ob&Yy7!3E# zT??^4^ey!n4;;5d4yk@33|@sGHFC#x6eZXSq0mxtP6iU{8saz^$ku^ePB3B^?!Zq^ zVAw+ohQ%3}LdFgb=qZNMhNcWR)m!koPWI^5D6TAUy|-;nVg~VBvQ<|HkqI?c<1A4# zRT|Tt42zAPK633SdhLPSYE!>FN8nx`mQhf!|29gsVvp=CvrW2@x4XLe z{Q1g@HH3sdUHNWfb9VWyQ6jb8F; zYEvka-47Wg5q-PD@SI+fNL_ER)SfibP;X>w%}*DALzTn3>^L)VTc?Qyp)^j@|B;k! zG}60ylVFP$)@F`v^pyib8l7raJcVI|-Red3H30WT8+oE>jTMh2kt1G7m zkNbVt1gZJqRR`pRgwA}o&;>4|6U$*>co}9=1y~zuM2-`6apUfcR_?RaAJa%c(xY_?K)-WUVHg(R1nqnVb<*+8Aq3?^IFPibiMwaI*C5Ea(u zT62vdoAieDw@>kl>;U^NY`e;g-%t&M!9#R}=y48@;asu_FTuGs zm9en0=|$`gu3C-#sh$f6v*uff%8?BH*w32@c($&SD>sW622DQ30Q*VR5~^qN^G)~H z;J%E-olZYTQSKw*(JVm)A8!2-o-3r1;Mx(`hYu%2U>aDQ{LuUm%o?%!&&8r4;eE0343on8YuFFEWbfB`Pm`~Rc!OEy$j7u>LnC2F0OC&IOi&T& zBYo(j0h2t?++WVgo1mVb)`10Z5XuC}P54$CzIU9gbc(V4fDhPC1O5HUULRgIpx_XU zvd2rnFmZ1O2UwqT2$_he?NV26I~#RmCb}~}QfMHlX)x5z!k1(S87}M8iegVE_s0@Z^G4o(vOCQ2)@B%yGkYF&jZrRoz%`j;ACZnD+~VN0ZPEcxzEJn}aLLOaGX6n} z0bz=+*druMw;*ULc390h0yCy+SSIYA)FXuhO!bO}F$8dWSW|(wFe{c-4-KkFFTt3W z``Q)uwW&6|5S2dbVOnZM8R|nJm?U^$_YkU>6;h3+M+97Mn#OO7taNxjMs4~$i&Jy0 z0}c6kFI^P*p3%yd;kJ|0Q-Yabm63=dlkf#vC!^+`ybCOy^>`B{wh@=U-P)D3-HvtN zztK?IMm7}Fc4No3!R)fP_K`Te3zNMKBHqP%-66ylW)A@6ZVdb#UJs9py!)^aF|Qk= zc!ECgczQB~_dHJMqHcp>9eC;?1#K}+*^hE}kT`2pj_J%1JemflQ;=W{PGs5G?&=P1ur5#*zLYh6K z0jBYoD#8uZzND%`BSKh%FhEp16dMhq5T8Q!Vh(PcRz9wl_D}B<=ZPH!dP%L6S*B=8 zsyWPsrkBiKNQ06-)I%fbIchA$%996`6&j_FiS8DpxnxN~#ic``(JHf0RATgr2xYhP zo8jQi1cugF$N$0>jN-1e zdi7XFsumJPf7Z$@x+N~>Gg6_|h(}mB$m#^9>q>TNw9~O9kKbol!xpYykLf4I&gmB9nRD4a%wLOor?PDD@5~)xN5IlTp0I3V0WVh;o8#%qB738S++A68j>{{H zAxv~(tY`Dboxp6A8prY=D2(2!qyMVr|e` zp3=}gB`V}f(cF-mhnKk}py+C<7Vwy>&m?&IL$tfhU_h_X&B|AuY`(Kl5mb&E!l z*xG{WUvv=zh{c4d0dx-aOJIG~GQrfZeflNj$3J9JHk4en`gLa&Yaqa$HhcQX}v z%`rm-^_Diz_cmFcropJ zTr=!wK3baqVy(e<7q0uJG_Vu5Z&pD&U`iHn3(3e6%KM4EMEN4XTElC|j5{7(); z;)*8KOIr!YiIePvXHFJ3KhFyjXcLpGKqR6P{lX3CuWlYZ>Eo$VcMX+>XG&TTn{`a? zNWLMGp}L#NA;gerGfxdgh{L-23UY2Lhbd{EYLC(eVY?-FG&zUiT!csn+yTU(^q@ds z6RorrC2iR==S!J{Djbh|FST8gM;vb#E^HWJ*fGf`^(8k7i z&iVJP&Mg<1W}rB>CuV%z_@FWrBva=e&HCkYjHtHWj*%oxM3Wi{Zn=3zY+atlz_wS| zz+u-qML6CDEbF+}%csoVi-(h@Jm^-hVInx?byuL*Q4CVTUYoC@GL)!fjh^5}O7zLR z8=^Rh8ooNK<=92dU}J&-(-ga|!t+I!V4jr{oT6V#AQ9^rASS(n1Yv zcN3_Wy=o@7S@j&>aLw2j)4RT{QJ{1EIpmi&Nv9mydU)9Nb&-gx$y})n+axx#Kwv;4 zIOM5uSoxq?_JO5;hPK5{497Vkr}|@>(<~{8>dnJON&A6^1MrF^y2VHnX-~Q13kqy+ zJP+m$oS-1P>&-T9^?=(Moe(hzPMczhHMr%-9|%r*qkdTOd*GO?JcL0wJjB5{CAl&o zx#MOJL47~(A?)rF!9pj?u)aXjhr`Nb8Oq(s@@L(9-Fv;W!SZQ;x{MpCSpa!Lmib6I z!E)@VOHON`I>biTHmzjVZBm5Ov*JEZj$%AyD1qL+GN)*{%?heLAm8RAy2!|U>w=Bb zSOZF8ZOLTy3s(z>ME4=A>qfn738Zq)y42e^jWue-pA7#_WtwAzeAqH#_s)Ww1ib2T z$%OP^09Ln;=qU|bA6!5cbw{5vQyQG|kB;GLdjI5voC$eckEX|FyacoA;Vw3ihLoxx zo562~*+YOos3#mbSPxJnL323(`p#iYD$gh&Syeb3Ea9@a#zjIou^pnX1WIq-2;vw< z@n0C7MprI(raP1I5OR(+DFTazCoM?xkM#B#l{oc-Ad9E^DW=KEq>NLVtr z86>57us~Cqu4IwcK3kwQCKg$wEx#hxQBWLZNL8{>i=Qq6-r6EfJxCI>N7YhsmYNH+ zc@~$I8r-OQmhUI9Fj*+V%CRQl2Q9X}qjT)H^`&MIxaUxT_9b7P?Vv4Mj>2BR#n1hq7$p zVR%Z^N`>_~FkyyrNN!dI(}r8r;E=XiO&bLh5RwwWWDGxQ>5;R0E;Fi5{q&tfOj znzUrU?MLxA;6?2M;P7D8+F9+@naLyyKnYQ9?AjGrw+z&d{;cfsowJnJPP-UiD0pU~ zU~^5bLQD|l5I!~iEWvCd4U!Jj3n$nEqnobFZU{W(=!gs-Sr3bqQRnb42F3hhc5hG+ zrE>(c2LFbPhGm$LET9Pw_V!|sE;UsF4p zK=XiP44N^TK5}F1j4*j}e0n^BS1uywC6A~n@s{)egnrILiwAT(C#sdK<}PAq&aIVrdc zEWHF)H9PCl9Wxx01=-)y^U*IjT=pnQSDl^9lf6OjbaQ9<@7+(otacEm)1Q2PPhQFx zU;O=xyZ4tLK*U>Kj3NFZI67DDc{htwC^GMZwFPbmyul>`cMJ=gW-Rm_QMJ26< zc9`VUv5X@OAs4|I%1qWa4JE3)EUkv#$#2_5+ggLeNB=cqAQ{<#ryDsf(sv6KM-61r=VX3 z3FhhJDp7^YA*l3R!4>+LJjVQGEIkp~d}T>{c4ifJirjXqh-De{JNi-aDi(P#k<3Ne z7J(Zb^i{Ax|Ed5QhY4@RstZfgv0&4;5tfP~tsIDWzXuGKX^(cbq(aOpT=H^MVj%E6 zT;u|eeHgTHcU?7TUUsu85L%11rhgbDS(Dgw0I@no(N6ez%K##KwK4PS+UNusszN?} zw!lBwNE!2Rf=^7la=%7h%Pt%0}L`B35xLz_#**}UN>FMW9Mz`>~3za;6B6`E6>;K zO%T#@8waogArMpBr<+f)xkwUhDGsH*UCC;tN{&*Cj-W{cLrsZi<=|klY>{9*X((#R ztmx}v$@|ElRL^!Gq+-k0_TqR)Oi~*Q&`LE~e`9fG*P>!Z6bSf66^SprZ708o#6X=h zmqJRE3DRb)fVtFfP$~td?dL=vAvI!W(Lm=pEUSOgb6DPrwPqtSgAcjTj@q)PYtZPKMTEEps4F#z>#HX8Gdvy z^E^li0Gc*#6Nx|khafi1?@s#3Knd)%|bl&Z1E@_32dypR8rqqgc`0*KtIwuzK`X+>-x z;%1M3ea}7GoD$$KU8ELpN@^&Oz4KZME22-Ey?nS)U^*#gtGUJQ97oQB{hxU*U^~{P zt)-~IO1i`LgV{nDKR2Sd`^3((O~vk-!3tCkIe9!9qi9UqlC4534dWYcA7S#67?8j% z7iVbSRBMt$avEnr$4w?-wMYU~akOvP$pVhcFHniE9ViS&$eICw(`+l0H=+5!Q{IeB zxcJ9GR2_YutuMLM0jbLGHE1|CpD$04G1@7D=py@I@^m`o1-E*s#8MaMeWVoXz*;6C z%N-MP-^8TwE@?V8h|7iEfOa{i{>!-*^scMCaBQyHxBG>`9y~XjctVWb~ z`rYH+#Hi1Kze1O6@z=wn*+x>|g(64Y3 ztU7Rp2G8UG>VG$Z6sNl`PD;LV0Zz*TA_Qe5H=pKD;;;D4Bm@UR*R09esfJ~ret9n> z-p3Xq{FDMql`q<;d`-j)Qwu|t&9vWoti)~|?{VTG)HTPRIz!K+&}Si8Ap+k;Cdied z+VySC1a3e4ndvwwnNXNOZ|vN9!Pia|~MO!>a7=H<*rI03z zUHWtKupetyvVG(hul75tKG7gcDiWz<2Y{;ltc%e{`bALfiH4cR^tZ6tBsG=;;yrL~G23fVq z&rz1I-&VI`P>R}DtOqPKYc)GDxLK4t-E++B=)g@7v6o1U+@e5!DZ$=?E#{VhIT6uExRHk20T-8# z41{g2^m4xdYBE0))bYl?dApgpZPB-aUIuavAXWr!#CgMvSKZLq2CES~NrZ=7 zB2L*WcB`8iu`2U%keo0DbIr9DmfpJX3@F^iupn;2nUS->NIBWXg%1#aFdpMZA7TkU zzevlp&*&T@(Q!BoU&e(12gQx5{yYEXqIKbDHPHD5h#T zo*w{f0!tc+*$zxz>it2pE$p!!4uAjtAb7P>6}6gHW0^qA3skF0iVC0`3W9_sesm$=6>h+*He!UswB?O zoQpwvKhb+2@T~pW^qm$B^Ux$MrM7nP~*YXW~vMEDTUdl5YYLQgjS)LPhk%Z29njzg&WHgr zC9rC^C&TupKe4S_)8(z-&re&ZX8M}u%8rUcdV@=Q$sx(ND-KmpvKXOvAk$rV&Vb49G0dmY%@EoaFa`NJZ0e*QKLv8xvhFnabtSMyHj zr0YA&4P$G{EG*s!xaJXb@57O3p-r2fP1?<(5XW*VNkEK_#pgQOn?Phf|E6J+xWzK1 zF%%FI3_?iNVVVdR&19za@=(bryUM1M{LD_=nHZ|d3!IC&Bnkjk-`ogcMyx)SQ|4oi z$+;Xy8R8%#)K{m|tD-md^*cov9DzZI3CiefH(8Vtd2klGYTLV5c48-O8h|NEx9-A^c{ko zZj!(o^EJ5<8jt&Rx>q-jfk3o|Aeq)xwSiFIn(YSrP=Ct2;uJa5x5FpItSh1krM}lK zKbXR$!yfd=OJ4FDmrgD2Pl(8iGbA2XMyxA|N`d-Ww+J+|v000^vIeugKDyNGs<~(9 z+9{qz4J}Gp9kE=wgUcvr*Ku$GR!~s;`25pIR8hghN=*T@8{#;`9w{_6LqWoMM+Ul69mv^_jhc@jT3*?Jw(q!V&1GTdl6Gf`Q9j>d1G8)#r%y zYOYackjoNN74*kT%$lwwj8JsFWQgn5?h_F@CeL8x3FeL|IDnUtw=7QJ(3z_}35s|m zre<|vGa4F)B9{7=Q|b{Old9u3K1NnSK`v1%2B|lX9!~%XZ7OsIuyCamwvckyYPPUF zdrK{2gwJKEfF4-d5kd!Yqc~(RG^Z3Qj~$&PHs?D-(t}eVHv^i7kX2KNM|ywglgM9f zN3%Z(!BBRCgy2lnsk1iwrRm-bcZj4Do=&ednoMxpl&--AP3&RlUr*L@a@PGA-XTJk z`KW#H>DC<zsh9P40sNF^gJ#I|!FuyV}q)H;cMNMZgeUl1Oi=7M-l%(1ma&KZp5#XbMiS!h3&$S1qY)`5M867EiAbW^ILV!_KX+m0rQ%fa_Gb1auXEife%{G<*cez7< z@RY44dRkGb2yD4Ke$&RDP@zQi=&cIYPx7)uh!bW-h9$i~%K$!z>tlZ&oOSNslfPOy z*v46^&4t_GOcJxOasG+3^31v{CG|gkNOz{lO!>n9766e&qY1Y8>*aJXgsXshFJxgm z;DbyYl%?VwH!Q*Dw9Yoc<^EeA zUStR|IB{(;%bzm%kX}EkG$f>)ssCko%1G#wgoCdS11b52$?FzDKC~?yDgFWgid2Qk zj6FDeP^Jhd3v0SJ9^(#s;3>jma4d==U*Z9T#dgRxCZ(9;^dYHDemj99$izS?L(<6$ zlfm(+j9&;Y)HB-UTe856Io3NX4_`P6^|OF)2h`8R=3(C;90f8-M;eokOwN!6&td(5 zgNB$E5}z2Ru0He?Z(@g|a0+M{zso{Idu?6V%!CQjtth}#BW>NH;Eyiyrd2A>lgQd9 zKcgiFE;MSqU#cgYrc3yQGMuGlQ9$pl`CLL1ElW~Lw^X6zr!w|@xV7A4Fdzq>jTR^? z>gEXb@!;S9hXPzi3erwEpLJ*-uCNclhUdOI+(g#%7Fl#A)GkpWL`Gnk1NQFd=!nOs zn*drV=GZ}%!Ow(MCJQRgaQ<|>WcDM@3&M6NZfqL9JjB!37E`$-<;o)`QU*w%W=en%;SV5$ zx@P7IPNp=^ha4pA{SYnQgWn6O)Wk7{v<8N8K->j6SF)^@l_;YuV4>PP03l9AZ#wnL zCFQryX=9!P#KkFq+dQ-r{`t_d+_J@nC#s`kmCWDrXDhm8n^qkFtR!0saoGaKD_7Qb$g zOEF)(#vQi>)T=0}2*6^LV%HjZa+)CSaa*y23*F7@utnS6xz7)`+aqRUR_d!64!Xx@ zsOEEJG)Ov(smJ)N)}cBOA1SO(cV}ns^z`ZR(f;At)3a}m_ntmJ{KMhVlSAK;N^6OH zPpLu&4Mh1IUYOSs!OWQ&VoFrzr-W#v7S}ist(m}qa4adUG?&dLrY-Qo0+baiX|pLe zL{wc!uIi-`exphaxFgP-vbZbK;F!W76>@JwZsDYHZGAx>+|mcq_nsx zu~CtXc9g^mZ1Z_5PKfp5X&}l=-0Ac$9v2Sf2e)U+IVaFYPH!3OA)U=|KKV5+2%r-k zdX%n2z-!K2NsMe;!UVdBv(kB_o2XbnAMH4$j$>=aHhRfai#;b~daoSGA;^ zhye24`BxFz8?6@&MOiXmd6`T}Nh7N3fVxyQ&I4)p&fzG;s*C_2#O%ZiX2;WK2xSu| zFV=iq6HE$cE?&?1DYUR1{>+k-qF*5I^>ivJcIU7oEr!qBK@iBLY$H>(I%gG~N=YVs zfqt-@Oejh0WkxsUCfwn-IFtVPRAw8uTPIetl^NxzW-x}1WsW98s|c?$AKcRW3Ee4F z=fJLBc6>fULUXW~k_{BoW7OwE`1}wmfn!^)r%y{q0o*Y?e?8%C_SUsZ_jMoVus~Ft zylNzZ6;tO*JN2=&<}UIZdqXm#Cs;_hn?^ceXcl~?L(MbYG^nU9$bxjGt1U?V<&LU@}-5qr2@x zxVXf{z_<{XDQUqw*Vri{eFf~}QX1Pkbv(h={5+!^49ye#&!!;3$-f>35N!7D4*d%VyT?yD8m9cq`8#ijHHi}N!hS3OtInOVET+^*&(X8y8_OC zBD%#njJ9ec&gXdCq%f3JTunF&`cowl;p?=_#4Hv75qvqSA(OES($O6FK4Z4UsNeaT zXb4)OohBTa6WvI;(4qq#V_ zD9bR!y4GkxN&(Eck({>y!vSq(2`ECbdpf`)@mR7Jw0#XZ8pF^?Jq+)uh%L3|It_IN zi|j18>hU3IGUX6>*&@HEFGyK=DYdI__!h0Vx1?oCB<-;gfj2%0HF4JymIdD8VI9-! zO%)9tK7!)k_oZud`66#8BdFY!dgF$ao@~9*ItYBiEBFj=-6*2&h;gkTuId2-4(cRfcK;B{-NbTkNgmWcQ$}fvSdnk6TzSE z2Nk3$p<#E+Yu`m1-GRB?sXiC+Ovq@ep3F}eiQE3CS%Bbh|30&ZT zh_w7BpjO+G^+*gqd^}>}ksBr~%iY{Ujd07DY5)4x!s64SrS8afz~IW&2_CvG6`fhj zy8ce@nn6l*Sb>$W(X!wjx*u^nQB1kVGl~O7*^3b(xCsm&#~Y9|xvuYRgAE#QaKuT} zUEaRY*bhXx5}{)vQ{C}8^w=cdOmUvC`C+ z_tOt)VO>YQCK@;I$Po-OI+yL@qGvFC;I>3-PO?kcA!(oZqpPbS?f_d1dC8F8(*g-= zyyfYk z5a|Mj0nAbug|L3ZWIt;yC((Tdn-@vwlG~tWB3NV=Ep=ZhFSIX4I2dWBm0;p>s#w}W zbTCOZsx^2G989CsuxOjnpY5$vh*_k>gj9n$5t#aw$y}-jypQUj_Zk|m*mLerXUNWH z58PW^(8kf&*f_U%6XmiL{ z(-&#s^}PgFZ`{Xsq4#Qn{6wjzGZUzXFV5JlMTOJb!loc)D9RqgAWpkFM8N&!Vu5+D zv5bdc=^ejS+oraixtidWPUit+%B3&m1m=GbGHn*~YhYT~HT()PRHkA37BW{K40{(+ zq?i?*a7-zMOd8HQC8QJ&#UW>FR*%{(fAKHoJSSz6tCg_PD_tW5)2S!^-+~9?>U;uG zIZt_4;c6yqz_i5ViQ(J}@Y9DQpb?gmq*NVim64$m#4<49odJt_pS7%w<2lN_E%DAN z%<@Gyv75Va7Zp2WChtj_ZMw1yoAM#HcP_0Z_Hi)2c&xSI3o9tT0$2_BM>J2TtAWGy z&q0R)7qkFY*SzFhW2sfjbggCKNVFstF&1F6zbiC8DQ5`MrM1 zr&_{)+fa4pIPuY@thLCrq6ndSBrXKSv>kLxGVHC}#WD7Vs-MtxZdSqB@4?Z@qwd+$ ze>>j$>Sh4Wg>zwY1CL=)pNs~`E{HqaD$gGddCw|e+$&6uYB%`X7zaIq=`D=eCga4~ z#%8=<&Xxe|;5KZzEa}BvuB%%+74>vllchHR9#T;5A4Ofeo`jP4m;P{JLB%P*2{r2C zDTTfIt#Ahn9WJMAiIvAPFK@SSeGEs+4)m@e!Z}s)eKO1FYDLj9Qk1H-$xtt9D#3X! zSYo*V;`>-4JR5LLiz-dJW$5he9iHu-V7L>^lZw~|^@qBw0suk>5&x*sF!JNuKfg(S z!7a#4)Z?vN=~`j+T7A$PyBAzb+Fc-Zmn3Iwe|ozW{;Tgq`e9jk6L8`Uhq7+gu&I03-}gTUAo@W@Dxsn*$hS%C3RvHFka;@T70w?)etI5 z#Mo%c+(M%(X4zBK7o=!^-dCnIWnq` zUNH!kZuu981;NTiiw@3Uer2ki{kY7J`%0D&4i~R&@pl z)(OSLfE~CRW(`_UF0s17hIKxhK1b}9hX%^k(WLA-WW#f$RmVAI+Fo&8DU!8}2!vO5 zb87`Eg9kKJ*y+R_y?xL6=5Y%;CcOM~S75A(R$U#^h|7@~mO+2=7;#q|4x;2^hdeHL z-XD(;1>^XIsoo!5^Es@`ek^l%N6JH(V$hIey;232zx{=swqo|PQs`=~C_IYcK}^11 zqKHPy;H8x{6$-Y&OPJ<$+dD5tGImvmNqWbH>In#^_anGGTZPt#~XBzFws6LQvg{Vj5Om zFYDqzhS6~zjA0PQy@wY_tA)BO?_o-JFx(M+-S#WZke zA~}7nVf2?=&0bqa(+M>KPu-@;nGQKxq?u&RD39}ea3|1;Zwabh7myVuu*g}j}nP9Tam*lDcaRj7~=uu3?5 zHC$3>DGSK^WXOGxkhKekkzqi?3doZHJ+VND6aY8;@zKH8k6>DS_N&ssAeIAbWlP9O zTI(t;JA5N?LcKcW3{zJKkZl6PqHHQ%f+L2BCX%q`bgWs#`iE9Qt4f(pg`{a_#{xn#7$|SwceEo2IYoS_-aUn z5uzQk5vL6BLsF}7u{E_37eGyscvH_W=Ep8g_2lBGniQ4-l;dG#ovmDnpG}w^jj{t79i3v^$c>5!+$(OsuX&t) zG)JTc)Nrd$Wf_|-?D(ckNxG%2FgzJb$bd^Cedl^0|1}EpiY&b2h|RIRY+ za0>5N;$&|J*7|!$k^||Rk&}l=q1<%1;&F$358sqqI#%Kq);f(U2n`!^ z^d;iJ`=;T9p-&D5TNZRm`iqefzkeZDfNyK8%{eKJTgjMX8hYW3)Z$7AofB5(D`cj@ zgPz=ab%)7@u(KkBh~Rw4jIXP@HMj7l8b#LA!|86Hs@H9AoBdw>5Y`dp-i+e&w!Lfh zoo%?iK_R6rj|9XEw^zl6F6^pAv z6hYXW29y+!w3N?!s1V+3w=!&RC!4sUDBuLy-<1;&nY=8D15Cr&lwm$RvMIETY^Nud zvU%am@}*%YD+pyS8zdDCh?#+M;q&H8F^BcP_a?GEL|~ZGq&6x+RF|d8AtB3C3 zzBm_n&Zxm}n$XpnbF#*9;rgz`n|61_B6Elw*Ztvdbpf%k ztdQ^*G7TAvxnM9VE86}>lNT^>$=O|=_a#4t)2^<&xAq|d>FjA;!uu5#qnMqD>Cvx7 z-^m6GOilTTJ|#;i_>PMe+Cj)TawlAa-cB(o&eaGk&dUY+t~^lk%7hrnapPx8;D((u zcZ#Qwwj-YQP1<({ zgaKr^ia*v;aqhxEg)vlp%*zEXCV=1un?o_f>aO=wAm(++lg=%~O1iYy@(h=4mh`SP zcp}>hwi3XLO#vk<47)hq%yXdFKZxK$VTlvhOJ!Azm!_TXr%DpMWR=X^9ON$nnylzz zjj048#|79@;hP{}k`yk1@Pv)A#pHrdZ?}^+QwL*;Ao0-qMP?YBUGdpZ|`jq|gA8sA@xX7hz8JLFyCeatI+ zS}Bd3dZP7YWpPjV_%%UP3ggB{h(8=9K~Q{JK~m1BBhK6im5P_Jmei~9DNo5T#9qA* zm1>CF7}u*^P0!&jUs-V|`c8_XKB+VlnzPYi1t&b@5tastbY;#7q&n$C$E8YcjuO7k zooE@4+IB%hWo;DPn-&Hm_|j|`!taFA;aMPJcoOIno=7)S#UyOVf*w&{40BtS8L&tT zEJ|W{Iv-E_&z&-`>}l#YPzA>UP$G3Eo%iNgJKLTi6^bFwZylZ93VXI1%`NX?U~PjA zD5xx(6HxrwczQ0d!a=FqAU<#BlMB3G;_@2$+V+k-&%^=@SZX^7i45e zVgnu_F!sn^ff&4q>bDZ;ak~W%K3Tax#9%##yBgMPsBgDB9q+38Urmj|tO%zeiPQ!5 z+vQH%#77|^FpyW)XnhQne0l~dhsFX2>IPb_J2X)SE@dyn7=%rxxR@Ej)RMzmwq%Xu zaYf?V6u816C>{sbQ|D%V&nmEMaLem6Z@DzZHClmqIb##&AP@yW_~q>;EFoQLYaJ`> zrLuG5<@K6lt83vejIyv@Fbyj|4MuSe)mXU`211=-SvzM?zF2uFb70TnK^xgGG5;_^ zulnZmLBbCtwu0f!X9de^*IId41U54gWaCl`OQ41n9`^>HGCmJ$U<+CN;v{4s8_q+J zSn&8rPHvn8HfFk>UW@&W!AUrb7wv+8-;X(#Gb#9169L)fK$YGE`L@x4<*YyC?__#N z&+96~4i;mG7E2T-kuyAQc#Rw>5}PD(G7|eAC%PG@D!f|G(wFYp$q7E4UI<)|A z)WZrat5au8SWYgn2tI)yc{FM6uB)zPX}ftBF^^qI3(oErBRGX=`~mjZ&oxMIl4)_`*E5li5K@ci@I2%?(fRW+4+j`cYe2il z3V<8R%#H*DsKJ))>T1uE$G`zza@dN{L%J6O_LLjideRpo6{e2u_L8<;*;g`bx9;zK zwSU+;JLw*t>Uo|0qr=vty|af$yQg>F_D_IU3B7YUL`qg_JDj9v*ptk~iYLKSrYdqD zCaxffLGUF8u5mH2K_#5S%`-;CUA%76-Tb3@02vkHzhD#98AIrI)CqR$dvT{D|07_D zq4F8?BSM~I8sVt~c))w4IV^0rb-_eZO+^^%rl_^t5V8ZbmeNy1_sIk~8j*N#2BU)2 zx*Q@pjb>6vA;c{+fqRhj^hNb1ufcXR7+aU@*E1L7+$3UF`m738qcht?W(11ckcefh z$;g1e-;6vy=d(%dd#fUdWC1m1Tf5~jMlfACj2fgeqUfBsMMj|PcH=KTg_@EQGmK4? zS{tzp_Q(z-;PE%iJqI4JB(0kaqo5_Ko*}S zjYw#?gnd*qP_(xK0AyHB1AqN!b$Ka%1pkJ_cwtSov^s(vPQlPl5io_6+GFzQuxr)# z6cz)V7{H-)%01m$2gx#}#0%OOqy~4d0VIQhMDp3nZ8Hp!ug>tOs)8mcblO0e{Vq6V zKA9uJL?+hdBnWCb>YO=Lg!*zW1|Yw`{zBleFCro#%mg5W`AYc&8m;A{$wI_daRg4<qKK+>MQ2thQA6*KwI^%3fK#CX+CC!v z5Uu|jHzU$&7M>?A>P3}|!)jqztP*;L??5Ab|C0f%?;;CAWDXS-GQr#ZMSM6V;sU&Z z_z)_(=uncv#E3)jnegD;jFU|bep1-Q#?5QG$k?#vJBbWwBjW!agvBYD&%}g45A#cY zg}Eiaen`=vh^-b1H$(Vs1%YBxkr=RIlX9Sze1cB$d83Jsed8~x1NVXNsye7Kk6MF% z!|p(6TeI803aW+M%uKU*f$bPXg&iHTD_EPLybdbHyFmFas2Xnv<(&kHv)+4^B`3zu zCQf85e6@b%Utar{?|wi%BVe{#p4NXzOV_72$CU=VL(Kf9ThHvIAK(I=!w}trm}rS*z#yvE%x2v5JnwJs0qFd5nKCW zG#}xZZtFXksePYQtM$MtUBEB|L;Rwl^jnAmJF6Yd9){$T){h0j2z#Q5NfXFmaIR$ zetqUDa$7+12Bgw{X1yH){*ue7*&2DcgP9Y4F=nJ1NisZv>Nnb$jE5JC+?ruW3B(*A zZ-)c;8e9{B%O=i66*4n9@<8d4Sw&JfT4Wud^C=v^S3!Moxnq_ip2MN5Sjwyeg-iph z;jq9uAQXmWshC(`s?>lmlsZ8u22on9)GQo%ic-29PBk@5hls)Zm5oQ7eI^yj2rl|$ zF#U&)hyRiU4{F09@%%Ap@dL?9#d)=qe6M}6retWUvQv@K=8R}gE+LeWXodU~ux}?n zgT;p42>7FD)qI-TKyRTmc>Ol+_I9IRT{}l>H(OiOI-rVJ&`J{DK*eWP zQTs(L%9f=WO)|q@RvL4S-AHj)TOze?{kDNsu_mA2&aC)OV7{ZP7wTVvEk-OP_0>Ha7a3JiO4C`NMG-({(?R?)vE2@G zqls-^fI!AVIDuOLozjIOX1^~(d8a9K#$J)({1T=LU-%LaTe0p0U;CHLrfxH5!PD89 z#mV7w?f?dAyS-UguuW#o!c9_j7q|G!DodEqQ34}u(%9mrUNasBf%^p$$LEbjbyPb3 zH*VUNaU&7mhTHFmf6^#jA+vG&sv^eiiBy$pqsJg%H`~g&F$l-e8c7;f!}r1d z9%1<2LXoR%a_WnYx^Qb!iu(f!H9-VB6qk#km%7&o&t2!r;!10gnjvyBXq7e&$&9YJ zCi5v0=we}#)MLWJTAB_!$jxP2F2q_${45qg$;04XV!Sl(w3Gw!KV!N4A;YfcGtJp& zmn&4+sj8?TvzVSJ4lU5ZZv>y z_tG}o>BW6HqTxC95Z{3`sBUz@0UiUGZX!SAkS^|t1xQ@WwV_e# zkfA6Cl5ng-P?zhedFmgXz^SMpAgU~|_*B5F$GHYSh?%z=dZ$%lv2lrmvmXBS(`5L8 zEiM{;>ysXWZMGr zqws?;@OwF=VzvVeO}B-E=(E;mE!^aK#go}GK$xG`7(OakIFm6%5C9XpOj@voyuQWq z{Bj$nl*N*njBQ>!N5rG(e$<}lw;Nh&BlX-f1R2<|9pr$-xu7>+zCZ-SX!5%c{8&q?%AtAjUZvqm-627Bz?{BV^micU|LAX+E%8cXf3w~%O%&^dt zs!&on6oAz|Az^y?KnB>PNjM#C%p(|_A_JZPVxDCe=Z0I`_(mDb&*nHwfcNAg2V=O< zr7G4~)o=%ww!x$U=(*m=<*kh-xMfbE1P)NKLayWH6`!F>rDHx==Mtaq{G8slrK{YZVWo@8-Uu$@ttq7ct2@0{ zqw3^ee6ym)>tc;Rt*G&x)M&Nkz@(p+jJ-h)fY07hew^mA1JY-;+`u4jE;H)DG3udu zMbJd%KWq{c9Bd!k1~I`R$0C+xrUY8qv~Mj!l*1wfIV?P4!WOW16c+D1p99j>=}gFj zyAUYJyout0vsF-Mi8#sg0vLdA2X{aDgjwZBlW*tp^%Ia~vtr-m#c%+p9k6YE(aMx- z;=?~}GBo(-7MlB04o4?A3$L2+Vvna<{Xr)C9Ftv+Q`*_T6|;PfSza$%oZfRx?|RW+ z<~0}<`^3~AZQ`Iluji!SsyRImb9x@;^!#sqPJi5*Z!)J*?7hrsz}ak0%P=R7u$?ht zk<}H})1>K4?S}|KTnrAooNw!71@zP?uRTW?w0tC(Muwu6<;uN}x+g>C`O_7f_v=lO zYpZ$Hz!A3KJR4W#<)Yc-isU|`5mA@URb+>CJGv}zTX1?incROI%&aP#(Qh5A?bhDm?)y&f zlcWWr*q4^%AI;!$a=e@;X)xw3zYIRXIz5t8y7^tNlo4I+8qoF!Sn`hLdLX1$K+Z`J zti8oIPe%hJKx(t(t=66DMc}f=Y5gzow)Kzy2<9A*&yl97dWQ^q;(uPIGaEj`g+{!G z_Q7<3GE$r{CF?p84~zN7xyL^}He&j~dmwrE z{9@RFcHZ57ikGP(9r{IXODPwUsAd@9*r%rI+2WyZZ;-`v-d=n-VQKK5K<|SeB5H30VVI z2@D-iw%mT$n_tSEnM`iq+eHrcnDlxQsGQC+a#Wn~WV!4U}jomDC)BID!$s>s(kMnVm2re(gjZ#DHziQr7@Y1oLD>xoGH4&uSwaF}lpAKs}aGF3kAG@SyFxy?* zuzFAGYmBBgr?UHKh`g5U3PL+E@6C>_(Hu4r`Kp#w`3jd)#uR5gxiuRqf3gr=_ZFAV z=V9`?6$|gsc$TNuGH&9;3XR!jc(jX$U_8;JY*J$|jj11*CP{B?VRkgZ7|ssO^j*80 z$dkzmaN8{MnWnz=Q)?!nkO+sK0vj%2@fWxbnpfB&FQ-JpK6_-jbFr|OhE<8H$jEoC zh$&W!o7 zU`?4QT@-byoL$a_y#W_Za{uR={oB`d&KqeWnJ*_v3d85fH%D6&RhA@kA$+t~*E8e} z4_8H;FGpkW5uee%m_2eykp&n9i|Vk-EuPnQUxPF)7N)xJfp22UJ>)LkdS?w|IK~`YB99 zGf42Q$CKxi>B|Z3ti`~zAmz7iLDl&6_ODx?D83we`>VjRu6a7h5~x-Db82^c0}(7h zm;<<@67F76PISFg8EjLx6BPTNT?-=|hkp17A=op|f)-PWc@Yy;xO;${>X{xrsJgEW z?(bHLC+r0RN!8kYXi1q$ZO&22#mxy~ot=YyML<={#wEBmm(nSrdC)w%6%7br!lU)y`mIG8# z9F3=}x^<3uO4Bv+VEU|c-QIEx*tTmdn7ev~8_7Bv{I*3E83X$Xz5tmPM3O$sF_ZTq zHWxrlOZW&SD{i_ti&n)lPXQBi28sRSG~50d>RDR4xJSSiffxVr<4xB6wC2ioNG|L+ zv7e<%d}5P@(bjg^Wd0`018bzFif!wHEC?d+ksNe7nGf69Rp9gk!CzQgv04@E9Wb@n z6ad8&(W*R$eU*SC@w`4ib=QRfgsl=gpx)pBn=99L(t`Y6CYx-^uCw7uE3RTD;RrOY z`X5##$!e^#)tICRH*UY!lHI@Pjn249h9_*%mh7aJj?3Ez&^}I)*?+QtT3gc93F7f= z+%8J{T(--)rIYmW$pMA?(S&TXrTIFP})Vr?E$pY->D3c3< zN(&X3(>W?M(;PknF835y^({!=tA+QfAY}@OE@@bxm|Tq?*X~qi=5y+Bh*+Z8bIU<3 zSC390)M3MD-y(Kr)Bm^}E{EO8;7M<^X#433qQgI1J7%nSVgh0Z_ZI8zrJvrt8(aI{ zGGiyz$i-SfM@{5iqBs7s?qlHz>$LjUlc9X4bwAsHrpkY51@#Tf2Vcd#@kD`OoB4bM zKbxYY{9oelGDAIp0su9TC*&&nA3WD6P{>TX45O7O^?H zvCxDrF)E778!i2Dddjq1zY2Zm1tuq2b&08nUW#*B21ctzU=QUWpt_aaQl-*{qOc|d zQw_tdGok}R$*45ZSd{8wQr2ZQl3S(B5|IKWH_u;B`p`=!ye~8WsTN{EZ=fRtf$=gn&(~3- z&~N2IIWgm%MrJClp%z0s~rjI z5#r}!D2~P7$`g|5f5aUEeSc7tXS!*D4F?+3(PXGYu6A8mplFZF1S&_2f9o7LTFS2r zZXumG6qtW6iDABaDia!2#FSJOahtKVgUy(!ZC%@76yieTkkZfQx48X50@mA!hXh`r zbt5=@)q#g$vN&D9bc$#OZgHDsWpnfE<@LszN7`S050re#&9*Hhsu`_7l{K5uHEOl7 za86%xxy-{eSh@PQcy~h8@yVZjk9G7|^%+>}sU~gR>Okq4Ez&{JI&}x;N#an_dnxyi zpzNYPLw3ZIXKowDchUEvrRYD5rv5M8@(qQ#2BoyS+vh!+XbF1>`tAk0 zB0CA8BK$+}_U?2Ead|VO22v+dsyf@g^1XYwJ)4dM4JT-Ycmfv(>Wa3ljHwQYBd0B6 zRWL$Sy<8+gfzs;V{`t*T4@TqZcJFGoWnPFf@s6&C6YgdQP^)M);1M(pW{}g)2+4@i z7lv?fotyc;tcoD0ZnKA-0Q&8h*rjawd_uU}sz}Uf(8>~JO$>r}{cBRc^f!M{7 zKxXuEz}^}Ed@I6kOb9h!4N8O%n~uJ}Y4^+Q6>kuIIYb-`{Q3#2X-toI+CSf_^S;R2 zy@XC!3mYnR)fZkxqM^67kzISO;7Ovi#Ly=m|AGDy_zWCs0Znp0>P61)PKh)oAw*gE z1meqD1EJrQ>6B4AV||l15H^n7F~+IP`88^!N>GW<Sj!K{YjMz)pX~z)e5J z&37;!GE8$eh3|EL=M=|OxkPy9a5x$+z*ETJ&Y z4MuascWAVRpy4nHh`7P&xbz6GaM7j2OQ6*d8uD_wL|lx-qtfDciNoKlEPYAAW<+*g z^Sk5Eq^kwJZY_IdbPT=b-PeMKlg>hz&XIc>X<@dDvn#rc z5nB94#$tE`Wsb80j5?JkI{K`s6K*H3Q0=2__3PYn%q!=yObQf>HRfp*&K(tp62`fl zw=lhNnitBB5Vm!RDI;^h`92GnzZF)HGXTnfTMY0W*_lf_i4!eUbEvjH?UUVv&Gwjea;>x!P1q=n8rwrx)8Zx)sux`eZ~9JfeJJOv_X?EM&~ebBIsYd3ENl> z#7vSA0;j}g&isDz7sm_cmj}E913{`Q>Pk5nAu2uX&7MKM9t=i$asj95HN3^5$Mca0 zbxoZ?b`Ogz@kMef2Yx^@ru5gC)vGCDTVK=sk@W?Gxrku}17@9ICYXV^#^*R1HCT>^ zazlAaZm}!CPGgv4a?vz(Y321Pz%S=mV_j8<{1Br1(orr(`B?#uW<2y@0~H@6BXGMF zk4uoUsRZy{&>G!4E=CAO2j^;#vUVz+SU8PwIb|d=&nsZ5W9V>YQev$n>oat=I&!Wz z@cny&osC7JQ6#hMRL|YO6IvilrdtTU$&Tb?cr|@t*<}P@7d+@XG_2(uA=XF_LH-E= z&Q1Law6I(eLL_5c9V9>rVHOG{u#?5|miSLMC!_h*Xg)todR;S0C0mhtKNrgxHoWQh zEGLLZ7|RSgI(1DPYAM3dW;g+H-ophsR7P4O@GH{9vTZRyLjS^la;`9L^jYrc)M-HF zQVM|CCUu8A>#I=l8CTOhg~K+%utc)RCil?`$cVS+kPwdmx-bQYilFOjIeTf#Qxd@= z#G+OPVpI(V2EhTD8f`F0N_9JW`0>X+6k%s(d&Cul zr5S(%Rc5bfxRAduM$fVnaY<*riJ)k%Z(`iTX|_wQTc(r81{ercqCgx>8f{ebJ`8AK z$xa5hwpGh!e;`sK0n`vw?6Jg8i-PS3P~#09K|L_F0PEFgu|za`povNWnmV%=+gc*^ z;FIiyZnf3i1~;sNzTNT%4)fNV(4)FOwXS19p6S`zIT#uPMxGg>l`y^R_|vw!rA2ulzE6HS90pnUvUGg!ZBhoJ*Zfd0QY9)b0Q9@1HY- z_VHpg?jVQ=QJahk2+)ES8h|D&5oQb)vB$gnyK=z7cH}z$%}j@5SxzVa3{%1Dnnl9i zXNy_1K|DsFYiaGmb}XJ*Au8}t)A+D4`j1ZcPj?UN9T>jCs>bu*CA_cZqxk@L&8um0 zHRg|`>{{Fvj|%oedja1-d}Ad@((5IdlV;jHvXLfFlSeRS%Sk${s~Dr0UMAINAPh9v z3K|TqjFJOVLDLLPV7miP*evEnuhPhUP_BK4n&~Dy8|h<59|O8SfynX)CBm(Q9%kL% zLD^GlUn~pZ=emAZx#EoHO>MtMO-AI9jXZZ4t;;EF?}HJPeVnj-?bt+VtO^)L{pD<= z$Bsi`ozfvc-5StFo2;L4B4cPD0u!+%`r1r3w-SQo=P;wq7Z2#IeGSd>>SQ`y;E?6F zcaua|R$e>`pVKN6#Q>V1K^}7{iIz?r=(Ier9f-Zb{0R;e>Zy6aV3V3y>U7A}36x?) zNhLN!aQs9XEmny8{b(t$erZ*#>==tri1iu(L{&|+ZC1UNr0*rsuAXCz^i8Qz8&cNP z*Y!0JOiSAU_9CjyVEukR!kmy(xE0wUCWI@w^zj@n`{y3kh>3#*1*cg@=c6%B;D^a! z?TbD&A0A2zJJJ9SsLp&3nlVaLWq?_&Mrl%DlT|DCqx4qQnG!le;PQ*LR<$A-oJu8_ zDYtUOI;BD|Qk5Pz(JgL`IhGY!3c1toU5m{GV)glOc zS# zL782G0b<&DjCQKGc^^rga+gX2C_86X(f+h;bxEuwiQ4&i(gZwEniMu#g1i`sG99Ja zrGTq8ELbLup19LA**7OfZCqrBJ54nMK}*uDzr?|Wa;rXiP?GIxy;M>>TP98lyK7nsz|Lhy+ z3-??|RmmjEpYa1Y1EO6dEyv^EV1PQ^i$Vzk34(~bQOpAR(CosnmD__^@8zVCnfMlP_GCXfkSMu!`U7|%57L|Zq>n315coje#OJkm6u?l(o2MCl z+?**LVK+^zF)-IVq4^sqP?5=NOv{704UhMC{;+rQ^z57Cy{Eg~v%RPEBAx9&+PmFK zU)7(mutPTzDQa?RpJ*7S5+F>QAU%?yM#5t*-MoWt%(rbbRWgiY0B4(Oc!x1aQs>sbqY^5i9RfLfs z;Ntv>_NB3Cnm5M8(0XVVk>t9noqh?2BPL!SxQ6^FnJhGq5j3=ysy8U_irtnYb{i=S zoboypAjqSq3!zqvEQhG=Tm>jM^-kt^W z7KNLH+FS5ixNl<^jx3gSfCFsH85LNg1h<07jwEUoDbVZpht~^NQK0tPiA3uqCJ5K1 zj%I4nh06&hb4fiTh?b_HglZ%SMYOXa^bwjoWF&QWU+{ezWW?q`(wqQAG58OHai@wF z1$M}dQlh&;GO~X_N}ssm17fFvH|L^B2wl?}Wza8~ybG(I7~z%tEa$H)kEL&i2jB}Ezn%lXGw^@PXeeWZC%2svDlH$%98!+xv&6lQ=aSaNE!$K#_Kq#_-b4SN}W z#^ZWo2^xKG@PJu7WLAUmhrN&sS&{QKh9hkauVe8iFczqWe}U6*YOhL=HD!InzSo>n zs+LM;Ikn{ry*to_O5-ZaDBlmyrp>+7jBPlELU7*YWISO4dBJcxfhG=$c{}lP!0^wL zuNO!#XTpPNFdYs_$C<_xs5lS~Gd16K_!F{x`0D7Qjf{htF9*q$t?(D0w`!-K4FNVM zkmk$txuj!kBQvd4Opgp}M+6PrKk%!IdB@x@f@O*(%c%cFUa4t@4~L2z^O-#*AKiXnIT;ldyWVN6}O#Cw>Bd$n8;!`ski`hql7N8tna}UGK z_vHw?GWdpzHYph-;hXXJ3?X}^LoA71(?<;Bk{%+4Rja)PZ|6T)uaMU-cVv?+R#*Cl z0s!HGyr?b}HR}|9MOU7bwrqNwOWDY`uNe-^$INr_tLqNZq2SiIwl`68+?Ci6c+?)} zd9dQhCf&fG!S#m9;1FP(do__+5Y)I_T#dK4^4ch^JfroK?hrOcAUWR7-HjfI&!0DE zcsoJbZ1~ZK-8qO&@dV6vz~u0q;=JuP5$d4ft(4)}t_lNw!yg*koA8h`Zx@352rv#2 zyDQJq!?`SLqEQ5kqAE}R<=(%3nz(9NQgdT0R%JCe1~HHBLK=pBx7sG5!7aMzjOM%U z&8~-zvlRa-1cwoo@GEp@!IfzXobMrvKopRWW3Qm{@g*ewSp{X0n&6QKRhd@6iIA{7 zr(y^YYi!M8{+Gx*7A<3E=2x%dpGR_mjf&^XlnR#M)-5$*=D5RoQ@-x&#Ymjh}zS>%{*rf4uIN&rw;sd53c3Y8K)etnq zWV2Kiur%Lp$$3}Wd48|uzo_1|C(AR8DYyqngiS{;6HMvon^UrQ2&6!TWUodVY6JH* z(KD|LLlNfs$eyQgv7Cv85E=?a@7>n#u=?Ta@8ym&{qe~s)kRu*Xq)$lHJ^4DZPu@l zpQldjmJKW~fizXH>;Z~qeJqt>IrNR$G_i+iM|g4USj7J_cy*e2F@C~8fV(2yb)CM+ zS&wh3V57@Bt%v>)RUc6#WU47tUL2lgCe)Ggi>dKebz$+s1PV?*kZUK~cPj*EsT|`* zVO;G-g`?8;jNUesl_q0z@!JNSU)yPgR(Ef8^+d)1hkFt3fK9wPqUHKexKu=w8w`;O zf^ImBES@kzoN64rUeNFur<3Y=Pzqsl#k|G=J{*OAsq*FHxR*DNshOW}iHQU*TL`Kp zB;$lvyG(GN8k~Fwq*-!kh#g%m;n-kURH7EzW+xepIt3&QL-+DAdP4&uqEF-;-DFt2 z?)Vn3q40|5!7a|-Nj1TT%WgOkprYUo3)%~%8de0H#^mWiSfb~I8nkQkQ93O1+=|Zz z+fT7PGoGanH!f|*yf0h;%b?81jDLa+@QT+IggZjAa_)+zo>S(K7N*))pXIQ7L*-8z3J zpGUYtn(G7=(EIu*U4+3V-ZZ$0rbXwOR$VkbhOlEkQ$2Mwr$TT75EDrL?5wcQF&Mo)Ne zmcRFbP76FtB_b)|f0S+K$|;}AJ!oFbR#eVHP^zcb$ftA?ic*S2+>iVgP@* ziF;O_w|`5^tjVZPgOD0cqUaEj@;-$W!b7<{KJYV?PF0) zSr_b`7DTA}`w~+|-5{nM@Vkns%@F|t4K;VAF$y{V{g zqYw#x4-u~Zr=!EO?!nXU!Twi=PtT5y%lN+CzS7z3!|g|IO2^T|2C4P_Xt)F8z~0Hv zl8lKS2gR;+hZ`Myfi5g-1#Cbcp1hb-XGf2I?&KwDKO|Y*YGw2OVDCYLe)UtG_>7kj z57TQ6KDqn5mVARXQI}}@jl;j7;mp=g9url$}jPRr6G65M6I0 zq@03(jcf6{5s~Dzy{#LerSsRHR>Q6 zlGKdW1=Zn)A}&^Gd}<#XkV`bk+X(GTaZaMjHwLMtJap5VRUc6K#=o z+fF%-pbEiv%{Q*kh@NhPUzlsi`wZcsNwlPLM+<^}v#`AEh)x487Hkzx*jIO4bjYlU z*h&o~^P5D*Y&J5h#+J6>1Ka}8n>m?lQAm~GEH8J8_;!nSf~l;b(B5QVF;98+YBx>u zvk(l@7%)*9yUmEu%$`405=fM2VF7vz8Z=EY_Y9mMNUk^bk^O0KKm$jeNWPF4!$0z< z&YCjcpiI%FM7CQ~_Y~J5XK{6`!@nx|qv*J~vDWEdqj+&nD8`j|He--_9PtCpY@V89 z9?RYY$!uZnfkPQtemp@7f^!$lOg3KjnYe|>AQl$ki%PSQ_PIGoH#zIBVz2dV*1NtO z^$~|GY4#10pRj%aK6i=2ge9S_3ssUz@t z$nfJ6U^(aGkO|FZOVb&82@NN#1ELth!~M{Bm0BFH{?+v#b93MI)Wq>3NoV`n@f4UM9-R1Ma*m!&(n<0FrzLPQ82=#1o%CVEG#{oR z(Akuf8aTd%GAw(DydN(>mb?a7IC)VWOa09{2`4wNECH=&F}6JPncd>(3E|KQ%PBx= z_$%d)%Dam;YcYscjuKbgcPT^4#mYKP5=&tzH4o5#n8~G z@o*Voft3g0vX=RSQ^QywAz?cF02_v}i48*m8)s)OWySC|X@T7d&(q`^p#>?2)h-eia8LlAm>%=K`FN&%=rglU7j<7b+o7^sq}L zpmf|H4MrR`cFb03c}4tW3zs2Dc?HqG3XByI1tgWD+uK-(F-P$NM@?VdmJ6LUIW$gB z+U3O9zo^D<6q4hqDa3${n|h>M)fp>RjiC8;%Kiz5VBo7ToUsI!sFDqESTHHH!m!Gc z94a|ffbk0AupOl*20W8}_??{U$W@E~APR~>`7KUn;hb$)sd%G6O+*p{|C8+ck&pZ_ zKa=jP@{=dU8Uqpt?k)P1*T@)K(`e;Y%|7OBxgVL$qwn6douqw`RR5t*WY--l=IjIw-5cb9(5?7%O zglr<%tCU*D(i?Oko8}vo4}B;TF%<)Ap?P=G$@7yD7n`$lK8$O7{YkdX*r50tl2`dQ z-!MCkOP?A0t|9!-g@0GF?TsdX%C$e3$ZuHJe>{nAax9VgHxkBocy_a@PsoFWt#8RH zyTMFJ8M>@fa2l-HBKSZzvwj%CZu|0jtVKod zPd4*nTEgB}O!Z6!(javqs}j93-GS2pmDq(_|M-t;{gd7F=Plh}${NG`GGU+XZ@7i6 zC5~XJfKl=T;k{@|#CYVcv^PK|m@%46gb6&@ZDLCmGhEU@$vl%(tUxJB(F9szfpywh z9!~7k^JJ3S+sHSpH~vauC0&g2GQlBqstM|vT?a7pptqi9BX$6uj;hl{FCA}in7C*o zglKWU-4bI<&5M#OpxG`yp-73oWK2}mC7afEX5XufJP~0zGKKd3$yZeaUjF`}yw8@c z4fLEufR`;Uf`|>KP5&>_Ip1J+m1+TZ;)V$*v&n$m$$+dhdL*=}aKzVQNvgPMJ=@U( zm{m6Ci;Qr@zWP_?8{xQ(ctnO4oS2bAe=9N8uR>AC-gduTBB-jUHrqvs17-=tb|9(< zbA-z`C_`&iu)JFw<%ldqD_?6b*KC;rLZ6FWSA?r_{$I)X#%_a@jqLPRV}tR^$=ozp z#bzr@q;pF$^&9p{EJ^i0jv?|sCf)o2=Kfl8HFGYpe`|SR6jvGTQ$(eSuHN;PrAT`s z;eT&0L418!DMXTyNrZ$qo__vdb9$4}+myH2fy!`hA{c(E1DQ;ts4irKROF}ib9vQ1 zY!!GE=2r;v@e4)M_VL~4zRrR#!kST2=F)mmP*G#?RbN3+4^_Qq&0??# z<21-X;_~)xq8ToyD zd{R+&%a(B&!*?CHY`Pnr*R7W~*9EK<(>3cOSKAh>9m@A1yw{Ih5sme8zR{ESS2f{p zILswZO4;^DTA|ktvJ0qkI9zIB<}xtH-HToovNv zkxI1pwO>zRZZu9MCcMGG6+2d#@6q4g6yv*(jNd~BfM`x;u7J9hfr<2@Y6#)a$o-H=kdFW)a+WzYpya zl@-`F>RETQKvEpVkTCiXcN@b(Ly#`kCd_F7heMbjmJhmVL5>l(XY0de1z?qn90ILB z8S4I`W)UJq z$$YA*Nj1s*p8EIKDb<>eCuEZCftVpp7L&F*t$z#|w)#9koPwFGquh#9AdR@=n?4<0 zh(z8QkFNh%5g^I*m7;WGSvHJQo?K!3e1}k*+$F#qB-YS2$IX9o z6HUUp1`X?{p9R9P6a+>OB}uUQC};VbyW6OkXf$p}KPyUe0+4jMuT_J{di#NwEMdtgx%aQ{L@^LM}mM zzjOu!nidci%ttdnSr!C&RipwwV8G!dRx;b2H<3SaT&dORbXq;#z@V2| z@7bm>))#`TjWt~Ov2#tgSiv{_5Zj|MJBrN7)CP8 z2iC!*y?Rj*n_?%CcIh*t)846 zV12nn0sJ>u%3VOLZ$|_G=h+k&wO(G88p5qa;KVuYd7WXWisz(1USdzjSoX`-!y&ez zFSon1-ub96UEaf)>e2jid$PPb$7uv&J<*${>;h5t#{Sr;+2~5Pkd)UT6|01smM~bp zj}#iUd*}=|mvUtL;OqpqAWSE}#)3QTlsdv&L3t%G?y!=(uGs$|kw^|g#YtQ=!zn2g z_VJ74gM7hdN(ulIY#9%Cr2PQ2!Sv;X`(4r;q6fo{J7Z@qzlXRscZS=bUh^FH{1Ro6 z6BOKwKD``{$DO(}ki1#od~da3x`1~pQ@OhGIRJjzL^YoMytRe7vQ>69usEl(mZf@= zu6Bu5VkMH*kyX<_Qd?WD=@)f4SVmp2VB-}xmvIqm2&+h2~isZMTe$|P^w&hY#gcV@v-*I$R zx71lK{Z*yAKAzgsG$!O0kKue23J#V?&2DS z^IaGM({j0zOs1-7@Ge5=215s;3luI`&0gNuod+WO9 z4H2Xr6Gx$*cBEROo>`KX0{9heND2IEMIZw+6S)_WpSG zba!v(=%jnLe{}d1d$uWWHHY$a%lcH$`H?VQrk}o}WjJ;ro#RPkO8nSL91I?>gvGhM zF2UT8nHnfK{SGFZPQNfMX2Z{rY0b?Ma+aLRmZ)hjmoYQBWD|czTRUJ%2HX6^3D)HDtCPhB(1T9 zi$M!I32XGUMk$?ALk-*pF7Q#YLQ=$oz$l5#={fbL4|5|LRVR4>%#`xF7> zdE#H48i}gkIHKzsi&`2>@~<&Dj^k9K89EFqgIY{Vm6&D}r2Y%Qr6IW8y7y1(Z{{Y5 zn=Y$Ra+S`iy+=M?vkz-Tv{&eQBf0v8!Z+=~4H2&jV-hVN;1vi2ZKQ%Xg~+CY6ITlF zo$xAQl}05_AO_5kS=+!<5yFVYwTN4l5KWHd;fY+XTT!5p;GkZs(u14?H|fvm*~$JN z_Rb!jJbo`75(lq^$8X*t)Ov3nIzrygcNm|IhNBVLVj$5CIa0^6t^%KE4ilJ9J(Y^@ z&BU({HRBvQM!r2r0!m6LP<*|Y(>bz^5Om7ZvcA@{19=36ppus7eB@sx)L=z?yzOOU znh74GsjmbTfX!!ZYVf4(9AKO-@tf6?9%2!ThMLw5ZJjF5deewEC77)ln?@Ld;1Xt!qM(&>%q}UYj+Q~ha7&@ zI+)^mc z=wT0c<-QSgY#7pZ`n^eiIIh9;P6}v4a(@uvkTJKn_YTpsO?#*W`8fC$PlpyChLe2o zD$JmCBef&!+KdVZL1DpOyd1(XcOLGhZ(R&=bNO)IX~9^+&4O(ddNy`ET5X^L6!DPI zcY~~mOBh7}eK-Js(<$2WoRCOEI37Jm+efFjVLeA>{NI{Sk?IIJ94B@ZP;3W_*%Wyz z@j_h|0v__Bh9m5n@c6+BZ{C!SqO2YZVxC%6WV?fHPY*c49GY5mLfgN;{^Ivob}`6b zNarmt<`tvn&BCOzkU6MQx7eG(}uro?Q2+_ zQwKhW;hY|j`4age;cKYE!?7ItaNc|g#GkkRel))y$nk(9mRw$r6lW?P<|xh-oY=jM z=fm$UK<#7BN1Dk%AnPC-=kP%?JOknpU7O%@_?D4VQp{&L191rTWiTjtSHGOYRJ0n= zyeKvi$Ie`p-t8O1wr_>867cZXcG$y7?`n9j6KU3|)Xy5qD=kNz-O(K5@S3-quSEcS z+icX@5P*}+=Q?LPm#$TVnwDjGMRW+sB9}q8xBlTDb`I}7z2DvW!&fIq(EFY~*gM;K z_;jDwMSk5q*n)XW2P#nqeDNkgAyHz(`l>;8;99%@X_fp4B)6rCrq{K+BZGPqp4pJ% zKUuZ`J8|>8mhIBvzbUKO0Hhp)CO6@j-`qt2&TrDqU{PhX2JR#ts8yUL&KyxdC?U`r z>IZJm4+7ByA^g)p(COL~1kIPuSu^Mu?*K;R)Y~!A-)}Z{VJ@(#T>Qk|{qQo&73x)T zC$SwExn(hNoij)d6(5-{wtw}khlO#x)P(D%63ICToNido=cC@_KHlod2z@@f>OF&A zWp|MyZU1tfvc91pr5pum*?`9$eU&tju8pdt5$&e#6m+giPyX)vzdQcJfB9ei-A5n& zHy?fUzyI6w{qcYPfB*0Q_J927BmRHuqyOO}4DohYmbR%^Z|~SDbu<~CUCt29(D_U6 zMeo1(=)adrAK{Oc`L_-A?c>(Y^!l|V3qs1cTdhy;-a{y|!)O5reO}uz+m0Baa)CtS zBWNMe+Pct)q~07IoI}flCPsL>N3Fx7vsU*2%Rvi@^2y#K>^)mMN5|i2N(;Q*-`P9m zyR(P;(57+4bnD?>7X}0YAPNyXMaAl321cGwFBUI*vmx$6oi3pqP0-?C1g&R;*a{RA zzZ`MAnj)$N;VcNa__!q-4w>@ML9d`)>iqxe@Nw&_;bb_2R(h;T`oRdt7w3|Id`^?| zr(&{3m z@9!V%pM3*0mw+DZpB?U<>i(+RI_{o;Q63+3Pg=*1PmYgH_o(TE^u(`u6bXn~O?4m{ z9(XlH(9B?nZ2<0ZfVHv@j%T+=8kiLNTq7buF&}A-j<)b7YrBb z50R=IM_{y>jhT+XKE?im`#uR)l0kbpojv~@mmKKKxSbjSSm?g)r<=GC%J;{u{Yk%b zyYw5rvURywT>o}^`{m1*K|Mye6~13>6K&2{;xoZMP2%0i z&6s#;;3!5&NY|UZZvFcb;Ug$QNBYOxe}_28=Md9CA=SRgP>4Im2lp?Pchk~Xd&|Wo#^Lm`H-cclnj+GaikbU^Wx&raEV4#sBpbMTyZbRSv_RsLr zVg%tUp<4rkzWDZ^@812huBS;sEq2VXl;JFY%R33!-B#r}Qx?IdBf=7E%kCZ;sbSa= z%yWQ&fKj@h8j{2@y!LGIs%}I}#||S7X3PEpsJaAO$?Hdjz=n=#R6h<46j>5xo>OvMO5l{q7q}wpjm}nb6#lg0 z{pDy(Pr=8m?q4+Yj5Q8svH;BM=8ILCmv_yjzjeDX=k+%jZg)O&zuu7QV z?MS5i(M9{$onPOA8hhtn2|Vkhcw6Nhc@}EqK)&?eVM|UGoE?;}zgPa$U*-O>I{$$9 z{99In3ahs^G~%lj!265mUL)zlCpd+(g%Fy?o_O_~RhpmX&Zj>~LBz>fF-i%5$* zcS__x??9Wt#<9Hx>r!<(5T#Hcbha{QvO-(`^P~zS$Jgf1d2#-H4|5`fbgP|g$+1pX z@gBbFV81$1*?dOfo-$%=&)V9009z9*9`s;QnnSG9;Hdj=Y#cdOruAyws@}Fkq@cJ3 z5o`)trn!oqg% z>~x91%#S@!XMb|Rd)$V{v*|OK8s@>CU9-!>ayn5P^a(OBz|P-X^bpZv@O(V#Ov2pQ}G~-SG8^)(A#{ND2*s$yYJgZb!nu{ZZ2_C+A=e|Uz9mucs zrN5eu2J6ZqDC45@c)vRE;#U#>2csb)W|ik>I5-&nBHi;jx8X1`$^HatD|{cg%3aoN zIHPFx<&k?Rqj1Nb4^cpz-8`H*AD!bYQtyJgJqjRvRFpTmvf{}kJBLr_ECysSy+Rd_ zb4)6=tVJN>qekx*VXgMN^zsfAlnz{efIm^R+@0cq2@>l| z4@9NQ7Dv19;!kzBv_NlQn_rS2#eP#P#h@#2@*z)j;&_Y&={OumY>wc@;UhSs^Je_D z;C=dhBnHR4h-r>?@a^De=MQLxTY7!sx}A_i{z;5yJJ`n35#N&vGZjGG!y&u@ydcFn zAimj#LtvspsCEUp>EP;7qg&I5sV3lBU^TSb9hkr)hBd@ol)`m<%|MEYIFt}P3O8~S zYH;_dZys*_C8BL5i3j&oFd)LdZYw4z@_L(FJGl79BQCM>8 zJ6kM~jxxlbXe0@xO-L67VwPljVGjhIc@ewQwSuwc*{m)PcB z_U31o@P^AHMpW1LjHq6=>w(D*LEje$q5_0^MGD?>%@K`*<8fA7hlq9f7wrY{TU~h2 zs#Fjl3Ib7O8bv%}R-V`Js#TP$&hg3q(FtN}o<7|F>S3}kmwJ@rAb8sdpS-T>bFC3= zpOmuIH_i=2NHrjowJ)FJYlkUo_9r+OLH+Rlc-m(ot+ZCI=2Zp{*^$ns|B-T`I~hEI zxM-)=1&o{XWYrAdNOT5>ww}&2OAT=)#}rn_Di|qh{b>TlGTLM5Y429QMIHZE}?tPx1Xq2Sqz%o)C!W7d}0y0wGoE~7k@J5U(D>BlCi)+^H4{Q7p=)#3Sn#ri*CF-h`(JAwH=kz@QOy z;aoE(%zPJJlB}*KkLKNag^Xcre_7B!bawq1{nhkR1(ZNsY+33(;_`+uC{aRVf0*x~ zM!2?9sQ@vZ4HDH@D1+%+c-llZsO{;}nXZj-+mAiBSR%s`Y{QeRyQNN2oM5Nnvm`~{ z0q6vJzsTu0QD$+kl;F6*csQeCrF)2=ov_KQ# zEcP*LRJk;*y#YOPbV!v9W{o!4TXJIBUL&^74dBIK_A1fHXU1rL>ejImi2{tq29-rZ zIU!B*Ywfg+%{xk=c8w(A4agC`H)58MLT0g>_*RpnOEKa_OC-r)H8!3|I0qJGTYR#X zJUKc}q6~)`nXZw^-oG3&3yd zuUq9EB*d0!XQ_TPe?93VFmr;Ks6m^C)f75$1L)2OO@7jdrUPuGkQ`Bsb;>0QMbCfHxK)D1I$YUB zFHrcQa+xHgD4h84;f!C4s@J@m*+A1nH(|!5y9IW|Yn-}(Js0~ci3jA)Ox!kp!eL>}8}&*^gaT_aCuBV*!J2eJF(u{$PRLPh^LCs& zJMg=}HhDapU0@RcrYe{@V(ssPvPU>V3-#F;WBWl9*#o@^wDS2E88f;!2q@cpDn~`P zgcQ*6)K+M6u)SL^B*$PW{-vHS95lro;GQ6TnsPmBKtEDvSNptb-{EE;ll0Zu#`@=D z?xl9XKEv7lAr45v(AQ2I?C3o;Pw($N?0yYX-&6fv8N%<)rb>|bgHbJXvjh!i9tXF6 zr)A^6f#Q5b%M2$O4hT++4)&HX+$PvjI zVt<)_Hi)gXNMzIWX+{!%@qR>{L*pkPzP-3h0hNVGCIHCMjiN7wl@4Z;Q6??_o58DwE&A@Uz^IOWx*^iPeXN zeD=@bp{>q-Dm6d<*`E`#LY_vx#2ppWC6edBiang{4jD06_9?;s!+b@sW<5i^L?E#} z6#XOyQnZmK@6)O=oWsProlMxvdL`j9ZA$J^B_MAG3|CLfD6VaQ%u#9}Cmq3LC}ykM zDGrxEye%E6aCM`XLxFK|(k|9#-c5R#K$HH|q2=Alf6a!^7)CQw7X%cbip+?m!%AXj zbfIC(CSW=_6|-$cqjNoG6JvLxeWx;;AhNv_M?#L7iWloXkDpX%UKT`hIS$=(;@n%U zJF|@xiB$_nJ%*XJ{qIJa04qtJf2d)yeQDA!96CQmD`12|8}Tp|N~GoZJr3k%Z#?)q zgiW_9q0Ut>c)czV+pE-Z$)8lEeL0qa&|$vRbfs3 z`DZ!e`|iI$R^Pn`uY;xTfSmdzugZpbRg7dm&5SCH{=z8igGk^wA{Vx0^ztfd;YSAM5HIf!OQ7%fOH%@z0Jxy-PXVU)7{_vGxM_`Sx)Q4 z2=TuyW?h-WvNV>2D-gYsZ)J6^6+&xDx3W6libPYA(_yLWFP01%$b7#VXN#CS2zBPe zIY-7OHN!D!B5ieI3Kdh|{!yhe(Ndd__?CKCW5kjpVnU-nSO*u6t%{k|%4JDyDwL@o zBAiHG0;ZnL%1KFNr2amxgP^kp7Lz} zZBm+Hq>?-fCpb}%3~D^w^Drhovy)))-Pbr$HU%fdY-q^ic!#v6KhbC&l?`N+M8K^( z9&reWiUEn{t^x6Fbaa zGvclYW1@#%8sEc+g5x`E1D+m*ApJGnD(f1fDt5YOPxp79c6a2$w(joNdxvL_Pxb)d z-oF?EYFB8gd3th-Xp7h`af+{esA|Nh7gzS zvC3v6c6@S#N@x3DGqERXZ8mP;i@lSx?*8E;d_%R*HXFW2px6GRz1{sT>uffNr^ov^ z81cAEGJLk#I6gkpJf*0x*+8Bi?d*3Co*wRCxH4 zy%X~AXTP!IWiDtq0da6~h?|>V*+0Pf~^CiyDhJWS9ifN|l`nq>SGg#K$b zVir;UN?+#YWWEuQNwke>9czHMwI{dQZ7crbR%fW$S-XpN$+1vx*zj~vFLGq_@-hRw z9~EyBPis1#wG*8SrU|5>yM=8LRchEOA}hSf;1OtKMy!<#F3M}g zj(mv6C_zRQKqjVIA}`(+(mmbzm#vZ`5yNrWVd5doG7NO>Zb~-Gza|fSPB)gU2qhr8 z4-tms1Bxkrv~eY^cqhAzdiRd(E(^Tt}>oDH;O32Se~HtxtB!dtk)?A~t*3>?7I z(1tK7{su;?+SP)!hI4jdM^nKGm~jrqra*d)QC(o|ETNjNjM?}_ z0PDst2eEqm^0LYJ6`H%j___A5f&itlij0uNU4Whpm3urJx1ohsTVbJl>A2Sm36>kQ4FBS6IvVV=Q)?Pt;-ad}x??5Rz#Cm{1`U?= z(R%FWFQrWDlV*AwIrO5)bj7HVZ+^KcFuR6(CA6!_W*x<$UFP*(-`5xO&sbp+9C5T4ybEQ@;R1S5i}GqjKeTp35vJMWS>Xgdp$?O9#g#ReE*9or~-t zs_`31v!OjDO4I`?0zFrN1rw$1+aQJDK#QQJ2#l#kQoImjM)RlGyUGJ*6w5Ko20ZJ7 z5tN}O>GODbIkMST74@BJwgfq@%MiKRo2o|J=UVds$umxoKZAK!+T464Q-C8Xg}5N4 z7?sKt*Cs;9jmlIBB#DLQoW(+9sS&bc^%;$}gv?tV9B{+ZxBm?HL=Sgxod;%o*qhff zC~7_}7*69zVvHE+u91Vc-e~?BV(5QqP!~wE5BTkU4smOQuT{!>Er7!33(~h%T&=0~Py?OJd{V;1Ky4iI+aLs5tAEbSO?GFIcad;hv}}tdS5` z)RzCBy|?*|E6Mi6YVc<9ssRHA9t_wU&n>>0uB3`0CDrSm?kcHT6h)QzN)kCF)#XM_ zp^;=Jscey%oJ>+Gbv^C8G~k7S!7RM+&MU)9{|^Sd@ZSCp2Jp_FrGLNk5nnfMCaF?Y z>Ge~hO3b`B;zY!W6DLlbuh`nU-&@*nug`SrFH3_6)hC`v``#_5YfVFE0aFNI4 zeB{AVa-LkzAJqsjC0RWp#6T6T?$HS0wpE{N|63=vD|u$;WCPzkQ%`vl#s`xT$62cS zz(&JZ^V0Kx$7dxY!wP(Ppo|56s>lI>vvi{2Fw0Mz%7lq~56d#m0n>)`%E!xPJ8>Ki z=|DJUr?p8Yw)<^ujtSZ3+4pGmOEFv4(8B9X+jKGQR231DMdXncUV^?@!#{6<)*KZ7 z&Zj$$qK(|Neol1Rn>jU&6bp~atairo_@;C=&07XZ@XWURC@_wqd290JK^%`lFcIvE z@{&z6SYQz{k&rc3gmME_E2n!?`uyFHEYcnosFStyBS{uEEs45C=jY94#aE`Pmot@l zAUUQf>uMtnL{APRN{g=TSBqXGfQ@JZt+klI>1-AUu>NU!1QI8(q~;|e(9>>M=Mn%Z zOJnE&?mY>HTkzQAS7#>;gLFYl4pj4TV>`51BGN7xtOQPHvx=Lfq~Ip|y)e!??S|nd z0g!e~aFe_PZjxV}olJ0}C&Bq>c_dcv8ntNc&UO?TT1fEVUl*dlnzYetwbsB5+8sO2 zc6K8fuB!oR1EzHj9CE`9?S*;#Mk~^* zJ>qCp)SXw_YNgBn>;LmV{rCS2H`Ma~8yz02BjkbXpWw=-gGqnN+e8o-jyn{B2P^CH zz~EKZyPbkHqg{i z=sG`i$ke}M}(_t*VOXP!QR%NlOKezcjiwTCObx8OIIK6|qL@k~OZ8leraaTKT=>7*>sIC2RG+Ux;l?%k6K>aP9FX*@> zo=7rL{DmW?w4I0=yPjYgBA(N9m~Mvrcsm*#$E4xVql}Pn4f8*M?i`tc;X;B0F(NOu zK;+RyK5{?uMOc;#J)}=(3P3dWqF83$n{3ok@GIz*);iail>w)te~i(lL(;4d(`+t1)h#V`1JJ~}@cesOzE|MKNp z^7dddc%=oU@LBxM-}{)8oWkK6rMI19G8jJxADqBo4_@H{`xnC#dKKVaQm`Q|r!f|i z>TXL=dfUBD23x~NlLu>pEpX1~yf_`PXrqG>F9JtP=P!|(0(Vya36xC*fJE(WgWpc! zv&8$;$u`g>gFS1^9VLabjJ>VdD#ej~} z;Y)+aqfPJD;~Zp?HI(*!_tU=8Shs=K;{Qz{>O}IlmMII0`%Sk zqg$1@Nx@4X2(RRKON8FAQN2)7aW@)cRwmqqjq8Cv*bAAR7KMRn(rb@fnARA&LfL{Z zIXNez@$;-bOiACz`S zMi$o2SAX@-aR~hD4?g(!fB$^z|M{Djum21De&nfUK%tZ|y%s<{1jq6q>$X z-`!n*vj2zA1CL=~l&oj2)e+>sm%KZA3=WDV2MKfIAwlz<*=?LXPv+iMCA@2jbE|xFBm&20o-)#)~vfD2C1^WwI{_=WIzCrj_}r@aJiAT zU{>J-59YG0XbeFR2BD=6*4`lSgGg6QP%_}bXVqK1ZHgOcIl?l!n7Tqt#7Y(A)A zz+ir_8)XfYMVQ%8szBttM%hnEdDtsgVT1JD3nDI_o{vseUm|#E$UCnEhbvMo&UIeI zhL{#w*hfD+Fph#Fx9tUP%{g1ajFNu3!aylt_N4#*ohuN=#5YxyLV3I61g9X}E{EaT`0mi zN*x;{!g{I06DZ5gm&^O^5TNnHeQ9_p8+9V2ik=kag73t-33vs? zI)3neuI2^K4@f?SA>w6_=lL4r#b)l>sB3DLKyex*Kr$!Dy%x>^maz*bdpNS+<|*up z8@JcwFPcL1`tdV+45;Q2Xzz9KBv*~~oyCIR-1ydkw4r<>PF>e;e(R#R6$ME!BXGHf zAQJbR$$=yb_Io_zib8b#aC-8J(s{P#Ot0y_aS6pr>-ofmTie#*Q~d&3V&2`77a^^m zPjKJmJs^Cx3(?P}u$*B09;Z~1blgr2J|S*85Snd!quhcm?! zF(|d2Y~sM%$D@7p)oe7plv=NjFv@gd7F#TJ?@K`*Qm1CAHFO9Dgb`q$fXNoY9ICQ|@m%&HB^Iny80NGG5-r1RrK@Fcg5!nV9w^q5 zJoGsBKuY?Md86&2*P{VP5-F)P$or?Dt597YyDEFyfolt3dP(QWI03fR>YDa8?#`f1 zXfEE?HC2aJ=fpe&40o6Ik3h`aP>Ckhsi+v4^fcDT^%m8R+3~2&A1A0*~EH)X0 zkc+pdEQ6GYN;+tK(V>N=N!DH=w9v0LKx|dvvt?fcn67WwIrOZ9+K)z4?0)me-MeGg z+6T&o)!*?I$TRJJoV18Q#g|im7bROSCZ9L!BTJ%f?2X=0 z$-p@so?>J4VP%Z55f;`U?YeB$=*}zPo@P!j&dZ3za|Jrg3EtzX))V+7Ix|C)5Ec|n z7?l_gXBVS$k?Hz_KfzMT@NrqSfI;Eof*D)+xkj->ahG#2dl-=!;M4q8!#3hn!wAq> zhYy|x$?FgW^`6C12MQd5wjgL~qSx8Q!HjnaLTF+2KoEI-Xr<#?GtS4@hq%>#jU^8gle)yj z*+Vn+X><5pl!IfNk(=H+~HZcgGaV#(% zxjXV933LcDxZZs`r2gqGL2l&%T~BOjOlpkc@&OUL3Q}zWwhOVwTvI$s?0$woC$%f# zk^3Kxwm{*%i=)fo(5hIU?!;p;nK%*XZ|dRdKNy1wz7vI*2#SS$W4stvsgX90sSvs3=lfm3A|%g_X7<#>^BI@_mnc zZ~@1?n>*$7%(-eGqm4YSI7`9WNr0D|GUNzh*|)c7M6%c_xnGUTh42{V7&_u>jw6{atDWIu&45i78i#TF6&1T49gA;Q+N{@hAn<; zIxUn_HN^(whClfvJ{BJl!7-|0QN%Z5y{GV*xu+uA$jRhb1;P#45PPf!aRR>KD`_j8 z?Dzo;pQ@oWMj>lQ{nwzy1}OE^#Y%>?=TJ_|E@{l3fephY^;l#JJ*dO$8Nw zQ1|1dLd1E}J$K>1H=7~18{1X$E4U;hVBioedL|xf`q{Oj=2+{DNbLi5N<$7EbS;I* zL!#*5DaH0rfSCc+3phscD>6+;C2$#%2+Xvr=r*+s z4KrQf8<_$yw6#(B!wD-G`Jn*BL(WN`?Jz1g4J zupQ;WF6dP(X$uFf&<$nH7k8vxIh~f=f|Vo0>o-3qh71A6yytoX-S+4hF#%(-d_ioN z^0aw+!~R$Mj2QI%Qm1AnX)fw}~? zeRR)zQ&9MIF31F#LM`Y8+>2Y-O=5P!EE@&9MTR`y3VgYlu!s zIxc5g>{5$A)@k=8o^ef}vCQeuy@WQRNi*s^RQJQzT3WLk3s$r>|CX zrjS_c3H)Zy4+Rti$(td<@C$_UMLYtf`t(!7y43AcHtTf85nUt&sHQ2g3sG`Q88Cer zaA^oMXQr?Mv&C>2JBk)&@XngTmkM9VtyOG64BFUsJJK^g7&2aG_V_ii>~KRCA0#Mn zCu)7M!yqgzjC?}1jKvWlHY;pUQYBfl2)Nqf5d$6MIY;|~e(NT|z{-=84Ax;ER@MP- z&+AX^V#?K0z9vOt++6zkdCY};@GzI-J46myh}dDP{P6&LA19R)8s|olChQW@f0r!7 zQj6somU4+d8$Dm}Gk5805&gHt2B@OIn!^(4`8d$sG_!VEJ+cUY+J559qhDO#k(aFT z+qtyP204@6^v)7jV8@)(L;R1lm*r1W)&@D-0g$OWI` zmiA-|HNR&bk?He_+tHx$N=lWo~XL6sGLU(ZBPkd*o+B&G_UeRZ$Vm3s}m3Fd~Uu;mU0;=9#177l&VWQ?(osD(qL z*ozSFc6z2xJM0zrq*KPPEAH_N1V03|9o@&y<0C|f7aRhy`Lxba>^Ei*d#X9~SbiC{dNkq5GC@1a>ack{fxABSp3u*J z*4)03v=tycL|X834gcRh8F9u_YuEVV^ZwS@p< zp8*4I*a{~)QidcGBKhK2cYShn9h@AK$9QTPLuWsP$UQIezP=vGLS>gv82c<4D;tY!?=Mx8HYn20DuvDRDCMsvJO*BWiFbRgoa!M>-S4ikU z{!Q}Ox@_nzr-i{bQCyiP8LH+|L7#-n;@^qH!OF_>|fhmM10_t3rGrgyJ8;koxunO$MO-J8K;sHO1=R8&x9@zH%tYbNRrkP0>+Skp$c&A~Y?7b+x{L|BUQV3aR@7Nv{}n(ade zh2*+Q=EJ#i=!YL(MiPCI%AuUG4i}^P@W@)kHZXwYyXwe3?VGm6rgB?{iuF z^JZJC_R~S{tdRQ5)jF z{&_>5IG&e003Vvj{JI4o|ri+TBoMbAXE+O9+|~Nlnz8!PrfZwiY~Tg2%NStL)s`A&cYq4i_l2SMk;S}OM=z2qRO>~5{949 z`Gl&3nwmI}G#8lZxGKQGt+vRmL##r-sArUZ&6)lNsp&zRiPA+R&ya{ZNj(Y;xO+DA#%I=Y_SjEt%C41iA zf|-oQuUCU!2nR4jmgDTMu?-UC80rSF%O90vJuxepq*>RRY&?PXlYygPQwws1L>TF z?+R}EJZ{3SF$PUAd4>~V_dJSmo&)AKAxpgFyU4fNSv{A@_c%MglZ&UOK8~38?q5y_ zmW}z1F`tH+LqJiUWW6(>^cvFVK>_PM?72V_Rv-l$*$B)H(_eTE!!cFDg( zeOC+xjmt7YqTisaU9nmq+t^2Mfjubl806#e`Sl75J)janUN#iX6D^VQlWB4UfQS}| z%g4>#l0?M;i_VfI44`!Y0(~eQ&Iq#0$_`vR8N`~p#so5udG&*Vkg|}_BDd?B`lrt{ z%JKXJ1n2;?e^_!0q}D{I6A7TVw97bQvEE@5H3W*_T#o~wSf?(;_|~_n%Y8F2+TX*r#6L)N$HlCw?2vV+IkdwNV92D_MpDY+t?jyfV5!C9!em<3L(&}rDR zz6D=72Oc(akC(IrLq3+ovgD{RVwAfn91{*MW14Yn4s8KO97-z~J{3^7HbvULRB5AB zE1Pj>Po+eF0r{Eb-8Mqx3@^%LG~*svWbMGmaJrtTd%o9}ftR+09UFG(Wl~XN5~bFW z`AWgq+xq^lrutqIw@f$6Qk90IUFd(q^kOu|!@v%QC)lON&Eu{6JMg=GfgIU1AHxYq zvhVXS3h5QgJNHkrP8H)+{BdL|b+os#4F-dAft8{goAdPXV3PMW{9PK*z!l1w;^4Y$qQeXHW%@A zkgfKuB%Q_aQ1>Uuus-B)he=RW;Zvd{Q<4aY#ZUqV5pc9vKvA^8z^&`o6uel=wU^1$MW|@GO*^A{#vX z)RBe}3sHgufl20B+F0L%x(M%7ffYD<7w_6lF8UEqEK|Nv=@Z;Cjb}LPxT{^&G*Gqj zUm^PM zsPEn`C@L*CE4k!u6aRd!v&#iCHDj;a&h6fZ%OTieZr_&%GX zS>IMyaDgo+Q%|L(BeiTa?S~65ymZfcPcn%uynNKkJDDyak_}w_^Td=`jpd^*q(nS;Y7Y^P zsg3;Lb zOOQ;01}E`YzeOhTmF&0PY!{9!{uMl0UC}L}?*N{kVm=EdGu!vnuM$UOn{~dY)PmS^ z_&ND(ha{EYv2+WS+v%E(ou^j7%cV8QJxir)GUN7b zAw$(sa>!DnHN6Vwj=uFlry;?}(hYglGax^s8OCndzDHEg@56s}~<*gq7*Z=ar?*6yE4?f`k*XG^o0T((P!1h#!LK7ly zj$|!<{O|i~J>FmIfzUNv4yT7^67w^#AS^t1g1^7kg9;b~*U(mvRnO=jTG-!T>#+kh zJfcfin%&{xogX=7{ME=dHM3?>I9h;APYgO zMN7@A$psWQKy8d^0+Yq22p1T+XH%{hlt>+FjwSpS&zS-V2inVDBe(F@4#;-YgxM|~ zqL_cKYdccD4eJ|n*B~!(_V9bzQy{IpptDfx@St0pzjnDt)v@`z5` zZ6pP2XUp~_99e&X;C5QteQ+A=)tdH0RRV}SVQ{p_*H~=~JV7c8-%{<6Je{25qzSU2 zLW`=MZ;$~;I-6|e1Rmo`#6)WfFenDe4MP zA_G4F$h_R;9q#k>dogU|$3@CgN^Zxf)D9P8C~O=UD3L*_M|_R) z2^J+|U3=*C!J1Ls_B9koptu~$B{W!h1qdCqkZ1z7a&ERX{7ueHm?b)fnF`fcAecrx z5xpa~RcLZJ7|~qWELL5f3lrV}`A@F3vm>G$0euQ%JZlm&m{s?=^%@~Y3#Fh6C)qBl znkka*ndx~u5d?eb54m$Man9!+*F$4(mPOW-@b4sE{7|9fMod=dj^;>aM`etDkMS>v0lrC`0{Y&lBf1avWh?#T);5;Xd= zg3G++sZtfrTUvHM*UZmdysPBScgRY052V$SmR%A?H4q{3it3==e;gT7kB~KVL5kGo z!O6w!nUGW|>g6^mQHUI|ux?t=RSBBr#IUM7n=VRXUezvfCZheAb0QK_EwdhGPcNjU zL0)WJQZzCB6S!6v>6kzH>9Q(Qjxq@+E?kk~L@^AZQ#l)U9JC!ph;B}b#u(Kt!Yd_T zz<~=7#SO@7&fn4%k~*&lNnX~uBnvH)nGvBz>`n&@CnjK7yc$e4E~hD*>e_6zB+@jA z*;|g&z)YwR&WvD)GvPEXHwW6Swr$0xR{iA=-stXftQK;cWE&=@OY)b*O*6?~VuAMx z4?i5<0zxtV?QEPm3AU%mRnni1;EyEg3iCyjb5xOg#Z#tex3D-VtH!(?Dv5vWR0_{3 zu1$+hFw!Lj&XY-zc*Hx$V?IxEo-pDH$+YAg2=(ge#{rtIoE7M)Uh*;-BvdH#LWp)& zx-31^3gZ7Jl+1_THJ!BqQsNz+6L0g!BZPRHgV+m+w zLN7VwB5}KAK*OB*8up%rjoDVduKn~77$qhYVH~y=!C_sp2{RdvpJ6+zF@{*H#q+Y_ z1gH>fdB1*C-ohq3G8qh^!Q_zm;fEc~CRq$T4MNQH<+&CBdqwxrvPU24?uu}7%*~~?1cshxW#8hy&}RD& z$N^Y>xouT{ibbgGmR;VmG{g8J5N%{7X@jw<-A`1H^+`<#*zCbvMyOqdV zE#JP&K+BHPJSS()eP3&TYIf(Ac-JLty?61$5kn@;^|g9b%2N0y+?iaw^c3v!KQ7BH zN*!zSnH-9`PCxtDPR&m6-v5uXMcZfs-VgE2mSeV#es=#q&NDVTJ&?Gsr=LoKY$zuT z+s^d35Cp|6#@bUHlAm~BlLwVU+R|1uvUxjER9kz_uk_kU2Fq!M4rmY+aXYYI3P+h6 zLLMf-!NfNhQYv#CtY( zSR8kv^)ow(4-QL=q4N&OA$z}Vh~8l@Rvs^eOnK{iCY5-tw<7!}x&)W^7pN0tnwj(H zGG50LAVOIlxX%bvWb?UUNRE^_QAl2-O5CE1@+DG+0A886MHtGV2|<#081rEF4TT;_ zQqqnt6r_{k#V6MRy$xwn=2-f22?6pWDL5##LrUKpWrz^ZHFM&2Bq~c;2vzgRHZ`|m zy#6T(bn4V?5)?n}_&`2wNwItwvhIdNX3gk$Ow)Eb?$?M}8Dn-|B^x>+@FN5F;H38O zqMnn5FBJk6ph9SCU5e!`MOWhjpLv5ikC4%$>l(qgPMLGt3^UOVJd^oIde9|!Y`u3~ zU+jkeZn>_P{*C|L<~M`?@4x!s1OERnYW|HId%uVG(F}KTxl<#H^5cK&PK`Hjtuz~O z;1bL4_84Nqc(4Xn19Hgz5u(KyeTqPDxb-$urm&%!56$2rbuh|n&He4>$@YG;{%C)5 zx7prpb~hhy|9-RC*xvcW?$(zN_xW~fV{?!1_8)HTH4nBPZ8i@#*Y9uc3II_KkXJM1 z!Vv|P+2rW_B?A0D7iTDD_5oKIf&Ga?o@8^@KAui+TQ(xzATVB2Nk9Y%c+Z?#{@G#k z<&&q)mzK=>tvfYlh~q^*$75nkHe2=yG<7~Yyud98jJpGF;l6XBF(HsAC|fLT;7C6^ z>z_Yc61AINp2>97)5(hw)WZaWd_>#gB<6a{N5JTly-fuwq7`q@YdPf!exY5zrVc%h zdE zLhJ-nteM0L@_#v*KKI+hSIlX~2;~7+#-6Q=<^g@<#UT)Z+fd_<4_8;3U)^jTz$*(W zSjM<{VFl^Ujv(hhIGG?}M{^H1j7-KW&Exgv#;uz-Z(P6m>5ZFoMie3;kRA1@7gs9; zEoHP#W%I@Hv*y|P`PpY{Yjj&AHIZpRY^U#{B&MYEB0_AmyTV?eWF==w$Wx*g_^K{|j-b!};gzi+!w|@9)a83heha z17euqNa4~rBt{J}CRqR(9XV%k-NcQSkZQ!Wvfls#I3L6RVNSsh;t?c)oEH5C=eMIf zOGN$**oR^B^w= zZ7h8uj7a@SZ?E;gU^D8~Ox`3}9>t4L;(BI?66CO z5iADJ`r~7C{r16BU=laT%YDX#`a>Y3fl87jsbG@7*#J0gai|kTpRxS#^CRMH8>pn>)#&!_U6Ixw}Ve_ zuKsDZ^u_Hp1tp+wk4}$sm^IQyp*5t7z%Y;*F_^#)g>efbH0Z!45sZ~|+Fxqc*gKB85Zb?vJnspH6V;0{wiEgJ5)sWCGYch`=4$`b|J~oft1Ff;t6F^g+2B_@(+pf3Kw8 znC93CpTek@AcPRl4>^`jI`WLJt#-wtm!+apEkk?s@wkJ8*m-lYz_#2-p>O4smH4P` zjgcf0$%Fn(ga|H?tS+4CU415KYI+~9e7qb-C|z@7a;7{A7|OJ+JQ53tE;TD;9oM4B*I6ucY zhv$dj)%@gMB5`n>n%EmQl%AzH+|`U6FiF{O#{=6a=S3*YQ_ux(aJ^x~G%uuIRiLZs z@O<)o2tIc(?E=i)etOxu#TWP%Cl)B$ai|^roJ=Tn}LHD(aLFc?*MFOhy!kA11iy zO#X<-4o+j<@>{_EN*G3E9#Zzil$=}@3w1DHW#Hbp6u2#ImSc6-FqX~%CD&M3vlY4wiv=RV6LakR{d0^_0|AZMS!4>A65z zBTVEf4j2fG>ai1XuqjY}uOTEYQ`JwV1rnsR=^!nba|FJb3%fNAz120raAj0^8=dfh z%?MuooUjelZpiQfTxo7uDMw4L^L3#9HyIO9xM)ULi|2CQ3|61l91ASpe$pOLCjE7h zt#wtGX}Sa>KF@i(DtHNQxT$w97KM5Dk$9Q)ZgiBr8fv=HlHAozeDKr8z|9-YKm0?^ zFzz%rKkdRrn{R-Et_Xu2x!M@pQ<=c{spn+@yJpY)b4Awe)%bVLw6=I_Braori`Yhv z&&6{Q%h$O`?NWN(6|Ouvu_;|qa%j=ale^-!mF}!oBtBM!&ZKpp4%LAin zK{A)dSQ;uFacSorg{W|&fj*L7ZyOB#`N=2c3Nf;vV9?X=%W1zX{&W4jM`*>$Z}sXM z7NXZV&s#Ri;i`=-_LYPZMt7?=JO$JmBrAr2`Y3&fw>aeX09mJ_qu-3gLtZ<&JX}o% zTZ}YLZ~SKTr_xy!WafBV%3AMpSGx@t$_#c+@N zXTglblKlAJx*6%lZ&sRHH*Ufq!7LRxV^XG=gp0AiR2hiE5neWcCDMM7o*kt zdYfa*O4Mn85>wG8f<}15FU&l7O?mqe7nO>Uqw-F7&S+#>hhG!;G4jCUiliB=1~VKr zp&o|?0ahUg1bSpz8r~2HtvO0eNBBz<4dUolNTB+VaIj@d=m>MzQ*q89y$O80&yX7hZJ$C#1MLH>m>9+p6yOqU#de{;rAi**PSR`m z4ImTBn6XMyjPNbv1iPpA;xH_Vp#|2U8{TFJPZ}NKs%X}RsUFyp;fP^$L(oqj1lnfN zEF9(}$1ZX|PJkeoW@axjInl<)xH4iqpdSJB%-jGcCb|AfGPN{tid37ByG5!gXEb9H za{6n+?AAYGbob@WK(=!iRv-#UGM+uo4o@p88@LuSkRv=ZIV2siieBNJYj4_>UJm=u zJFAGO?seD^LylCi{uJFYIWjG{fs-$02XFG8tGuOy+W}>bzQgdAmhwWbyXv1HG0$v| z$y4$INw>Zlz5)bSYi6CdZo!gD5SU*Xg7qx3D#;O{RRr~^Y>@QSg?gwyRCL7UXlrqm z9%*CvLF<*WBoR$=(_8wN8|xbnH~;0<;JYQV# zGIYEopJrqy3Vn4?IOXVcL|>=_@a$*2j^ZPO>vY7~Axe6=P%D6qMX;7_PoqXbGh>uQ)p1*wj|fgbdYf+1-6RwD=*8H9qK<^2K> z97WaDPAa8iqZ-gh!(qD_>oK+M;VSjmR6HHPw|BH?Zy?rFLpA56Qmia zbx2&;F?)}I$mJ9~5{xacvZORt>lLX%wRHpnao@TjerK zYTFs95KqKuW=My{uOT7s4v(x#fL?%4XI=&L*hW$`j!R}=<6#k3%*(JAMZyvfV`nRHD#fH=f9a8{0Vg;OR6;pJe`8+ z*R|Q848XtwT9q65W~8y|l{B^-i-n_;VDAtlH4Nf?A=^XJ2jtbcwl{X)8*msv`+UONidtu- zN~ct$i!;pTBP;NQ!>7`{WbN!G!R{Cl<3Nx}RTT-Duwtvi{z< zBS1ixd#|XQptQ@a*eYa8O_4&9?^tPCfID_Zi0J}kWs+6I2&t|sq}h5q0ZqmV5q;Jn z9B|NHT*cKkSm>krPN?8bp?r?eF3sy$7&9pQqDc7@U5j!*5qP`m7L~+(79nKYq!gk* zfh8Y9^9!yP{k~l1NfnjJ8}L-NjB&r{S_etbk`o9z_aZS2b~!(=av)T&mtvWuup3ycnU#UgzXmnOFI>rY4)m?yP_sB z8e;~dM_M54+t5zW&esnq?($+?do7z#Dyh}D)9t3^$*EHrX~%j+I{1N%i?Z5_;h`xG zQch_K(;%@a&e0-xLpW6*@JucE2(P=@ptsZIm!L?(W{NZWkP6}-AlVth1=3e?+?KD| zwo3G20=ƀ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

    phy zX(Q#WHhUKbGfhM3laiAWgFE1AMP_T92=ffLk8mocg zevx)ajp_XIMk1$am%PRc%-}fod-}+6u+j_t4`xNM4x8|PK;0|P5=Xx%;%0AxQ-FOIJ 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�Jm66XV`<0_y^%1@UQ({!GFoo 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�YVhSb` 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

    {PI(Se!+hVNRGG+zKze|1B`mu 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%0D@)IksknfxTAa42;L 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%0AvYP&o%o-`H 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

    )y4R=C8-Ru20+!uI)XZww0-Dq;%* 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 z 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

    oReXPc5{qf79Mw%@vhQhsQ-RaZ}boL@O(6PLK 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�xs6PGYz--uLwkems4nVIn! z9uxd|m#x_kWT12Vt5*%GQ?ZAdIy2Oo!gFrs(N0QgtQ*0(fs2OsSmmj@gi^^X>0M1K zh8cyfCx#%0i+`tWMmNF93Y7>8@LB}*yW%EqN+v>>Ac$DPqY6%lZXA0C6aX=?jm4ss z)GwojRY@vo-K?qWNmGA1zNv#&Re>n+iJRd^!TCxg_7c%WbW#8MWrlG;_jo?#PAd4#Pr z|0Js$+@p|xTpwf2-KOvjzgAC>o1YbS%^04WDm8g&(MrzGDl%JA90pX{^`Z33DScq> z6bBIT=^S=BD0r{*52z=|8h_Y1t=8gJCzqNP0N4-CBDfmLu;+_KpMq*ts6O4XORSUB{B)H+!t0rg` z8Z2Y_TgpKGEEqN(PS%_%dim(t2l{e?L6C?4SXyO9d8gQlK0M6AK0$uoM44QVS?iar3V4CIj=gZWXhc zs57fdW}Ii*DAva7Ma3eX5DB4(!`*>z(-Z@y^`e9_OKn_p#_QuOaf2EoYuG^`0;ebb z5w&dY?aFY~x)Y4!ib0IV6P-dq5G1>yoEk%Ex->a1gLZN*_I{d0hL@NCNu*MT;$1*h z4{TX1IEbZ5P-l$yKM5^ec&g)tbOyp5y7X`TxZZjad;tMFH_w7X)c`^L<0%pD=OGO! zpFlxjVK!=Zvvwvx7D|-fNYJwl#PfjG*Gd2nyw}7?b*M@tl6}P=?aI}k7@oG@m?+Te zq-K{XTtSN1HWxWRrwB7RaC*%@9Eg( zNd|hv)O%JgT!w_*^VpjJ;(%B$jCVG#ih%F1{^*l%JR2wqrvx*f4bF0`&~QX6$Olz7 z01xQR&6vB5tKR>8hW<2nu*V(lIBWDDDJOR{E}_xWc@2 z0i#k{1dn>Pb|%7OGpN}RMbUK`aFrRGX^L&iN_Y??8G8q+y0D|sR3xw3)u{!w`|YobD#|5+<3nWY0YNFM%ji54SPEJzk0*|Z62_5F-XPfdEm zN-$ymqEdaO>apH{fUgIvp~CFRwVEOI!+l!)^8wXL<+K|AtJ9Vfka) z=xIEDxvoId`B8er(pH_%$)38AXy0N0IzQUkmHn4}vTQgUoVJ(^OeV>CTCxIhf=C03 z*OW2kDn_0QFoXz)a?$TPohyX0Bl-yjaHuZFSOF1V4W7fXjvtpHaw<+}IIP1%ttoBs zz$?3@lrfKXd8(0u#LS^(29ojfnO+rX@QEV?tY;peVS4|3XjVgrguWy|OV2TBrHX@* z<31ix`iUZi$gq3Z8ScxeCnGb47HM({cgB;mAU6CIDr5@9JZM?L94$uv1UHG|dS1I4 z_M#VDAsd)b=T!nOTF!^wR5rzlgSD26R z#pUa}XthZmr)bI0U?MreMi~iJN?&G7i_nIj_{K;)r0hvT>8KX?IQ?&sM5Ly~&g}2= zAz*4G>oB{l6+TG|5%PBrvkIT2Gg%+9-%~6Rf;q8;CN;D95XqCg#0ru88aKizw!qF1 z)uhFSd-yfO? zdT(;Ld4G_ls@!1P@(kRW}+&T zY7r7R;oWONsZgrz`$H2-?`H z`)Aj#@&B9S5?cN+?Csy{9AYT8ol=Md>1C6!Q;kWkZFas!M+Y#}!# zGBCk%C@s;7Ai1i<`3ioZp7f=6Lc62nk2F&q^A#~ip(Mj81{cUxIXdc{N_KUGB49Av z4;&iq57Dsni=i@=Pt1F1gEm|&6hC@e#P&^rsYT4p+3Pv@gD_jsapzJ}sWabGY+KV& z(ww-54I$EiG9yYdI9y<$=mAa$1X~&GGOPi6R7tpKhAAsnbj|>RK!LsQ(b?JQ9h^a4 zT(mnfQLtnjF7~y>(V``0ym4FLmP$`f`duXd3hBvUwC$V%E~IzE4D>q}wDHMI2?+oU zW=;fV5j|*$JEfg;t|H+q?euivJ#Uo@K>U8_X{mx0RKX|46rkR7P%x!sb z?Fh?^69>qQ)Ta%)*jim*-dRId*_gM!x#**1;2gPV>4BlwvNe@`yn%RWDMo8dQz?ix z225Kf{iae6H@4RPY6BTg*HQMiX7p_;`{ODTol42iCxEDn9=o@Twwu~~ys@QVPJmO& ztuAlxu+0f@dNBYw4nf;U42yie+T<5glx5dnPEqdZs+!{8)q}OI?VT5S>l3CesbYOh zn7egMajA<5vlwew517f6l;mImEB)&Xzy9>H_Nn+r)V@*QlDvog0R#`$EpcYZyUAXm zuQFg*@F2}9J<;Nw7hZ$ffo$0@A>&V_eDAbVGd?~o^;wmQa!7GV{AjoUzgnmPzX~R> z93>w|ox4S4V?-<2Z)-}&S#5^{T`01_DHt-M`1NvLKzI`Xk>e8q8w??T6)A)>ykqJi z8BfhScee|JtSMuTMB0eYykkOou{lRS+3W`>^eN%6Z>3%oFL<32La0sb;GI%K*00h5 z-eLNLFmOzAa^COH7k@5)@3a)B^F}f4J>-9;`(chi!7^G&=qGe8)MM|AOYHUnTONJ@ zdF1Ld&+S47GAXF<>uT&;rlj$WPfT*F3@e1WNS;UR-)zU`BhJ&O0n@tL#o~r!uG8_M zV^xkh6qPNcuebjaG&%-NBolj%ID3>MZ9`MD+jJ!8vNI1JtJEM?kh!45tbdd-<%uz3 zz`Rq6p$C3uBALL7#)d*sWG<2p{!)7ApGzB>0WD4x&<2tJ9&?MNrbw+=tRYPKu+v{2 z9-ec*vKms#zX=dfL?GYOV@$FQMo-b&kCvbPu(fu7d+o1Q;XaP3j8)(S*lNi*i%%of z%rm&u9`kw@&C8_4zFU$`@GSPsu_GR-b8*)G{mRk>Z+N0x2fQ?(W*RKXhVM@C=4QO4 zft6*DI_(YPY|Ty4>>S(%1xoCH78m~n)OF+W`u2@mf0F*X{U>4g5eRxiDk3iH5pjud zniLV2#biXh?_q*&(t%-^>CXw{RF1Em^yHPP+>s#ko!}y%ku%5-lXnsQTIM^WlTfUQ zUfwe?2s9N;CFC&yQ6>XxF_pfnpvqp3$CVYD8d(9GMEE;q8-?X9Q1zNjfiQF@1Yr_z zO$Iapr+7(71)1HFT8=k9OzP(3GtJOF`L)OdB!NS2ZaF^g;^-C|Zg^c;4*cEGpwH_^ zNW9nz`&Di%&E$aWP~o4;66iXNzMt|vtSXYHo%8kV|SH*d~9 zM4H^h{X??+d-pKE;TAHQd(4l1+-L$?xoEjI1}W2SfD=pd`&@|(f-_O-JI| zItKcL@at**y($z2ZwvoV2GJiIT~Tg{kz3wQVY=_Qf|R*E0bDCtR!L%Dz}rohmB)WYtbN5 z+gN*-+Jj;#_WX>&}qSBv418V--proK%@eh1x)xA@q={2rb6~hlTUER^Qim2>F^;E$A5V;Nw*T?O_^nQin{UvwUCg&rT(Z|#q;$vL_;OoFMTo=lKJHX)f-1R+ z&&yCyw9n6a{q{2Mth`)@2SBJ_dWQoZYdF4GMQA^67v;fw&D)2a(b1#MX~UZ{x-Y=i z3co#`p(9QryRJ;GFSJv5_>FXq2j?TVm8z7JBvSi`#e}Pb2I5*rq z_vZWh2o4!hdxzsv2w^|{Og61a7qnjM4Po%O(1v*<;RqXBT!2IehWxwZOWb!%%?&lAKYLaM;-b060W;tE{3yO&|qU>jag zg-PFqYkBvi)by)CA7y|ZGLjJ2-Qb?N;JlEW8+-?Wcd{_;cBu@vGO;xe8V6=yeY^#N(5va_Tes!(Wdtj5D1{C3&1Ql&91l1~ZnXKt94BdU*7N7sh8O!ZD~LUX1i{rF z$5nRMY-1X8?Q&)GcLZPs4?cr(A@(sOJEO9zqiZ&D5`uU*$6p*a=A%_@Wj^UM!Ih`E z3IxJd6oDo~5S}R0F#3z`r9_C=A_8KK*TvwP&|z1u^-Q}Hw@H^TjG7;1-LXqOVvcmm zXSGACvPi5HD=dD-v=jM!FD?>0Z9g(jsv*7g8P@bx!RFp?wug#{hGnEEKGt}kzUienh7wH zy}{ogGMKX~EDTn5o(wV)b+4`938G~EB?63R5^@U@715hi%)J~;<1ulG=E7JpG?Q>K z6sR_Zh`Zo{li;seeAn{DIzgM@sX&*c?oM!8>^{bZz4 z`p*NKhgM?I!0#v>Ng>iZ*B9Jo%@OM{CcRv{@?ij|Egu?4oY0Ix6+Nx_o&1jYTtthfaYNH8Up-u_Uz(K28TG3R)F0o5@0qatwkabM7n&%wNy?RVk~lp%U1}@yZ6=f02T4h;m^w)`Tk^*+yPEZo0#{cj z@_^?(427!9Q_<3MsI{$R5{M8KS#g>hJw89)MfAQEB$g`2Fo|bi7+hSd zyNiqV4Dx18&TGVzr;G-_WzN8@5kP&h5C*9O;&=JuO!Ow;elsYNzS{kK3>$|&j!inS z1)m&txpuC>KKBl}<(nl};SE3UiBl@QT!~9WceI6gbZ>yOqmd{ZwR8aP{=;AY;jgK> zXzzi?Mwz*Y(zZO|^~!c4W4-Y=VqxO1n}5BKd@p{go7vh1^1j=`_Ri3NG!KWMWNN5j z<|B;F`p(%xt$sO1%%u1B=tvq@jMxK5O8DupaU7B24KED?3s5RbZCHz+*^X>;0Q49A zf!c3D54f?L3kfd6NVSZ!!Jz-Lch*M1m&;Fg(tU7sU7DUIIFMvo1(>w$e4t6`y1|A) zU;uE$FBM5rY6aQF2K|FuYuCF6XFCJUL<8kF6#EIz{0L#h;mVuvjMW?|=O;C2(fM&I z3YTjIHY$F={Rq92+LYO0Bd4sl#$AN0?Fj(hc}>?fGlKclT-MnDIL${`F_Xv&j*G`O zLJ2*2Cznek=L~+qMAj7RNs?k&eZ|3X^oJho;(U>Qj+n_<3LTjVyId+#HtQwi5pdT+ zV&9|pG(on-N-&R!ioYsrp)w2IjSu>r!z=SlvW)5)E0bQ{I@RszRz_>9BYRh2+8+#Fp38N^q9oPIRBt#!UalL&YcgxBmCrS{i;whhDkGaKzzfa_ z;M#U03@K~dL5F1HI8m<-)VGlUuxLt;>FE{rS3IFMt)xOz>7*ruL9PKu=7J3mu-?T| zzR!s?a`g>SY$MK7Rk*xA{pzbF%t!C|{8;&qvhqD?ST+63tYcMVy)hTG=WvFjRF*u6 z8_S=|=m{nRMbOm3(^?v0kYj;92Yu1{as8)cW=*m`n0+)gC1yOdr>2!!t7g@<>ITv} z;X*MC3w@}BLgmIY=YFIa;jRu06&IsPBq1WtO6E-*t2u(+Q<#jsu)27>d z1SXg+w|mIbg5(AA7rScMuCsUPRw;WSxyPre6FU!)vei{LcXNqq*Jd=copM{&iVxa3pY%QWffc=d1%qj6m(YVF}IETWq8w(n9Pjr8x4Db&Zpe z>AHsPv6plo$7j<2w5PCzbzgB_UU9{aSH|~30%v8rJjqrLt?2$hv>{|0+e1QY!6e1J zY=^t>BEh9PqfuMj5(;;7Q6~Vn2Ay19bdWvCK5=g<1UW-A!0vjRxxd*NgSQ4lAGXGgULfiTX3cYBkH z!jm!)HFBzS2X=M2K#PK&a&UnR;zA#ThXZaBd~rrfV51eT5zksf;utqRPF4K57Joiv zah*-+LG-72_GME%Rev`3r50)^LYb&;#v2hEM53$_K_KRjgLn+IM_h(kEP!w>mg4T3 zYJIT;Qm~ya54#=iQBe{eCT4!Vj~7_U`7W*>-d}>9VLYed;%U`niSV`)w8AK)Yh^m2 z(u84cTpNzqg|K#3T6t#iof(>1DIlOFtavu+I>@lANFG;ucs{WQkYCjUpUw9`a z0-^1%j1N8|^y|Xbi6^6w31^RA(z#|0=FbUNZpG?IKH@dn@JAe;y^vU^^fA2D^&!%} zB(pAh9-@Rp_2b@&f|PbmVvJq)Y49Xxj0Qb5*})I^wfwI`Sh9HbEGx_`(Wj9}Ya0;p(3q zh{u8~Zv#n8#PNMxzS%9N_kJKA&_o11o%2bg5T~gGCelV^J(OpPAc!{?U=Rf2m_5u^ z(rfI1!}CkJL&?*@ND_ROn`hztGFVPodvjx3^T6E+Q_qtA(W^TvuNoTCpz->aMzov5 zDxcz5In1Y;7k5{BA|SH?fso}f5HtfYb>ER{2%OPZ>dPAjfjhW5LRYvDth0B9V+o)@ z9?lmccXjASUWSKIo2~P+80&;tPUs;elOT{1X=DIOe@<6C9RUcn&GG&>Xcr1_gYXr7 zw!D#ANo4_yG~E7hfi1;1a6g&zeAueNB}t4m3vu@*cN|gy8LJ(aJ)+#V3HUbMsp1?K zr<;(9Myl9B#wc}+Y9Av|sVn{!SQl%`+w9dKAf$1n`KBw*IoTfShsxDV<|0 zC^IvX;N4P#VdlL}D=MjcV_6CrOTK_x)M3FNafi9pWoXN*?y{sB6nC<=mRcx26$B=y zk0~aQhnEi9TDB~4L`YN#pdIoqjY&}Ss7K{ECCY|89SnK7CYABr)EfI<-STU5VsL)Q8aS#Q$kX!QKQ+Y znoohT=E4?ZY9?74%4BD}1F;9vB$1yZu2Dyh^SYwT3*_E}2YgYgk@yYrZ5)%73(6VV zHgT0`#3GEr(UOlKcB_*WG%i%7`b8lzzHUkH3S#%iWcL_PV74L1eqC}GyM+=GxeuF4 z?)vtjRKHH}TI$M#6r#4D3*NH<;%8ZoADPr9xw|_!LxgB7{C80B&LGdEDAW5~MS@5Q znusYyZmpPV5|Ps{5wi&1tB&W_EO$c|oDW0lI+Lejx6I9PqgxWYV=9;AE}6GUS>ijS z?o-uiq3~-J`?s@`T4Dd)k(L4+p+=;8-^qnnWfV72e@stR<-ShRXOk)xLAV0zc?PVR zyB4+Pt-6j$wZ?ajsX)r(n$c5i6nE<0koDglw%VO&IwOscvHyC=2=iM(mLv)j!FxsA z1tq>7%&;K5D_F0N%K*w4NZ%T(F=N`>AT?}Y>Oqy)Z%>+_Elr<)b({uB#sE4MPNQ;d zW{SWbN;oA!EDCTq3Y+NwjT;i#%1ZUJY}MW)u|~LJ9f<9GGl5G~aAe8reVTmo%X??8 zKpjTr!drK1XFb(!6C+6HHFpLmOA8Bksv|n#TxOlbvxqcuO^>N`Gmp3y+1(F@EhKR* z?KKen6`%P+INuJ7oS-Vvy&V#6F*2`vE*UaPD&`t`#fTn0N~;6;lRY2O5^~~ZGFy*+ z*U+TSpme34XwgYB01@C`Ql~wavK5s zm4p{nl@668N;cL7$%vV|Jnw3r$^)5slBD8UQh%}$$mt(@qaJcdRl9duQ+)iPcm4Wb zW2meZ*AbS9YYBfv!x+WbYi32Mj-&0VmaEn=w!wttVj*J_k^p;L6XmszE!b>@V^97j zvBGqvVDaq9eq1olu!KKrgL9j<@i1xQ(l=#n@JQ_4rA8uR;x|(RC}jePa{U5y`1hf; zP$Fhh8YX%r5T}LAu8i|&LLJVP&Yo7tDfOykX*2u|X-lEIe!YpVD(EW@tXY{#beJ-> z#-6wk<>g+0zW<-Sx7&{ENYcgn*j~%-zVd}{y;g}c(+yH2NUDG4j6~@OfdKsvmI5dg{#7CLovm2JVAwGeBli;T>%Qc=|lyVXl%8SiJerI$5C|9Pe+0V$)@X&O`J%@B$d0A z1JHPb117-{0?qi9ks$=5Ki_>fHbOcikl3t{`##$ZZY#SF402Vu z!>QU&Tqjfvmg<{I2_GOlc8>6>di4=DTX5)JlDr8eFE74g79}29ytA0y(K|=iut)wK zZr@}O(|mkWPad&bUNv9FcyM{~MLO8^QrQHf_i}MEyg0Q$GQUW63Ws@z> z-U^QdGBZ13Nvaoakb*j0bZfca4{*Qa_*p`|h<|u^4mYgx0>Ot zOL#0iA3~&Llf}23c_y!_3| zQM6Jmp>sHu$H>s){GhADGHXgDS{IWP&A2l;g(Ag40bNN~S#7F%OqTlU*#+aGB}Jt) z70Se}MAgvK3Pp!-HJf@@ll$aRYzVgYy+ zAlmEG&^^}X2U5-pyZ-a19~La5ub_CaAv$_zZ7s17P2^LHF}t0ga+RGQPjN$CkpwEbatN)2-@`U{?9D}d}AMZCgMt$l32H!UTM+w1m!OEfizBEkQ*R%8vb>kI5G;vymwD<= z{R*ujItw9mRTVsMN2?P&KP97dpXB$AA>`DW_*OWyk61eSPP?wE>+54Sj<^Gu2+|Sz zFOoQDJcLm6DkZ(mx-||qxjRiucxAhpPDI3OqRjjsd?1^YY_V;M zd$SZ)#jDU7br)FNKLbqRMcy8Bcnc+y_)`)R@ZHyCF>$Ee~%g6$UnW3rMeoJ+o8Wf5eYsc`r_MbKfeUj5Q)x+GwQZ`s*ybyc%j zTD#M?DdN>niZQXl`7 zgyd5W8vwHXa+q!OdbGqc^7Lzp&AuF^WebcWpQ?I|_CLfB! z1;=Ogr#reVVR)hDQido2kZMUK_QF}m_zdapZ_D$AvVW9cD zHNh|IY&j6L+yA4Yv;q!9b8-= z@Sy)Hd@>>WERVLk@cL`U#QPy9UbRwr>pr||>ais&fxf9o*sJ9hpb1b84oBu~=~}|3 zTH{9R1ro)mqrK^`Afw;uI|NDMIgF3W1Fvi%etIclb8<&tK$jTk24NhssG=!~-oFWj z+2oy;qVekdn@`qrKdb_w3uS`0g>rX{A}l!L)P*c|5mNVQ_el@y`WoXp{sp4Y z9Vvsz#ZHq)u-a*i(J=Ea#j@X0Ad(&KZDTgbz5N~S@MOYv8B@L{L%u0y6h_R+HI_1B zm$}L(`ImmP8NxR}b(=M9Ju%)PIInCs3r9y6(*w;jCgYcmc|-0nGo`6%sJxzIK?T2) zjm$7q0rA8r{o5{hau9b35kwUV%5mxgAIr)fv%5x)+ zw0EHw92JMnwgFs7-vsW+Md-z|CipPui9*Cv6TN5(9skb9Czeo#knKl6xI6UXJPi4* zQX?TR*8n-udy{daLr9Rt4FycKkf)U4D{O2BtVl)~lz<0Ecye49%7A2_O$%xF2aD=z z(~2vJs`7Cdmvsu3P2DLs1uCe*4WU;u-b=dm)tZ%BpK*8~lXyaJ6Cc+%c0Q99LG z9sBDvK-Il+53-)WLKj$R^**fJM7ZSvD##{atXO|YwnyM}+9#pH52}e`y*!_0P{p+w z32b%O1ArhL>KF;L2HMt}7+l`Gd~Va93`*d@-4eYAeMtkFyJ*@c#eA%F7xsO?)Tn)J;Tp{I!Ld@uFc7f}#a6%0i z6x$R_-5pRxuzBLV*ir_f^TEmh?%vwOh0zG?!gZVD_0bo+olGM6K(MpL#q8t+@Ah9= zNHL~$geHaT!)+W+-7sAl4JQVfGt~wOFxX4_d!9_tYc-auFKw+@OXbE)k*qLC1pqd; z-qSl$L6>YNNQ#6Y|{gCIfZ6b^EoU=)jh*Mw4|u!go7Zu7MY+1p0=giixP3YFbH zTTG5G#wW$}N2G$i#GmGt;22?kNQ2XvB3RaxO%j4yF%_gN0cS=Tf}A;i70_-YHL@`50`o?=N|B9vn% zr8&PQc(xA2R$EJvv_{8aXn9n;x87IGi#D3m+)gyfWvt)5s$}ma&$R3 zSVejKlj6bPc80ERumTZ|rUwl4Uxkc=-7I$-eWXIyJ_025ms&pzQ zY>POA)h_fC-tR7mi7O=yaZw%`a!n7Z1 zmr7=+-_?4#GIbT1#pT7BqjFWqiFMm_ttZVZW1gqZ!3Of&xl#*e8h*`LUo}V@x>-Vz zGpuSD>c-6VMwmnOLpQ?$2ki|o2m9{p*?zW&)9byer@eevUaWZD(qP<$JC`GkdHTNh zb*p6H(KKe%=0s>OD9g<{H7(@fy7>r@yommrd6CBXjI7t zbr8|M`h)>1N6rL3{P0WN4*bn%=Bv)pm?@KZN)4BIL5-aqH;qMt8H#sX1@Q7SZ)~L; zA3ouyC1lD#X?bj98MH$P%Brb7k{pWpX=mMyl9k;>F#L3J?LOfER&2A%m{(PiRH&|UOK?2lk^2CtF z>3ENN-CHej7a1vQcwPj}5+ts%R!x$Fd}_tRb~C4erW4yKDAPXk;4^H(>&wc~t^s*B zJq?j3Uc3IQ1o-?6nGH@(aH*Hv2qdWl3fy+}-VARpaX>Gtdpqx9-9ub&C#3Q?!&ItY zs#3V-K(o!aG9(}U_#^V<@&s{GR~eII_*+$pv|X+~BK+GK$Hq{!#%bwrJK)zE$K?Xs z>GlCs()8Rblk7Cn=gdq@`21&6KQA(8nqjT}&olK)A6i zFuQPmd8#9aQK{6sK6jfNS7cJFJr|ZCt+)-+Mw2oV8ZW8EmsLZ`bvPbjL0V9Mt+wi} zC)68*+HN7RM^6(axAb?fuk9gWgww*)jJCu?&IHWYd09e1ih6gL1WcsDs5SNoBB-Lz zEm*n0a$qJB*s@-45MAFA3byNrX8h>OYB|=#K9_vr9MQ&13#K(zx6sgNv^j(lh82hJ z&jmIV^*6}&EJ3z6CF;sCvr0n>SqFTQpRmD0cS^TnT9;5_(Mal0 z+AVUh%l3x^%R7kn2X#bMb{lIiE>i!wthl#cT=5kdBsSnkRsJn6js>Ioz>#eQTOwxs z;^N-v*|D#mIt<9lq~rX>_+oM>dnu2*EaOd>dK@1d1O*A~yS-+OrDTR@c{~^8xs1*P z7h4UUksh+M20y}omlvsL%o~Nvp@gotaJf(D%H2^K75J_06f|k~kPW1v2iejLo*p8h zi?asU6349+k%pciEPjfSKtEHRHVR$#TDEt>i=(ln43S23) z)`ZM7E3l(Jp4>Gkh>>0(@CB0H=zrOf9wp`TGt_g~u>Vr5tTpG(YicU19_HvC)#QDN znq#TXam<6@wB+Uu%1mNrI_MG?cDbk|JXw&dO89o&vV$i#!BWR>`pIqHULWt$zFc!t zo+zgNU=RYPx5A4c&fQKEMz`Z(+cS5OKGl|K;%GQKkmoZh-6p%unRh!iRo3Yd0f_}r zMK8KUncug*SC0%3$)~RGY~@1rW%H-RiG5yex^Q6(`n7EWB`&$f4rTDO(lfX$<{&Ej zFoR5cCRFci(!d~=O&>y*A-?DRk7yB%2byJVZP{&0+HkAs?!D5?VT&a6q5cw zfKVHWE?bvRma}mqLgEdvaas{{QU95X;W?z8_;~b&xi}I1C&I)9K3zs2+m{^MebU3j zNA5_oFAtlR>Umc9Sbd{|F6<5mR#C37Ak;AKYjhS1Pe#G zIqZbYPj~p+Ps?&c0+PZMVzijBJ^hI-I>#uCd$cvhYtbcf!I<~45eKFZTh4-mvURleN{2m!!5bi&X-Xh<25Y&R ztdbyFpts2>@3krlcv~xU=SiJRt<$f3X3|n&F$?aF;%VIpWx}+S);EBsEfj;RjcLR99%=~2bGPjU817v32Eb&|7{<8Gk zdoas+$^(LVz&ocVq|0E_MxN6&y2kBS;*EH;mTX++nlXq2LtfV>_ggKFVEsCd4T=?G zz-kDD%A!Gh@(6TZyW~K2RP&oKzxW0Jt^MME`vr)Od&CYWXXDe!{kxabyL!vp{4PnPI={e&b@{n_>sMF>ZqCkM*+mt&oaMcH_x|&3{C^+!89cifA3y=%zKFX>hcJcS z86(X8WXhw4>!S_$k)hUbJ^yNF z`?E)Te7n85waa&VkG6M554Rt0jUH`nAa}d~*n0t$!#+`Pk1i&>Q{iaw5*qe{(W}`d zbkG@EJVe(2i|PL50>$9eRvb@fhtnfO$iY>8Yjnx$2*iVpBN3-a?S3RbK70E4=(EY$ z1ShaY&-I+zW5i1!)x_mH9f1oPNAU^8iQba{gF!Pq|da(nO5v(NVkYvbuxqc1mhb~c{w;o6gz z)5QyB&!2oZQBc#<^Nk%a$mfqYc1F)X-$9n2Ef97WBqx#jM~{G@q~16y0d^ksUPYy>f#>jw%>2fmt4j`?Sm3fU#y$4l} zU{0Z+j@ZlD#kVlok49%R1f{&Zz@0eGC4J0?{rOv??X!dR+oRv#2aAr+zCFR1?xOy~ z>CxiF=pjy9T-+XgGMg`EXFPg6y7%7w`}gkL|Lwi|qtACYylc--CS%9~rmDpl%&FW4 zp!e=M=V9*q_T?Dzu`@Y*Ih!4hb}?5>gv&QKM*s4=dw=*n0b+1*@6DWi^z!BUOq2;P zXJo%9$7d7L>+ld4S~26`P>7C|X~$x1jrK84hfq}`==bT#n4!&39|uTw z!#zHRfX$u7k2%*9%rUt14C)0#d-94bL!p{u@)$8yBE$a=Ucd%iz|4c0iFZ&~$J~^s zms;}uXhDo^)#^HQ%LG-ybkG;j()f>3C@M$?hV6+tDd<2(rZk8~ll9~E(aH4N2`>g2 zy%edML*7j#O`pHu^A|HBc>vvewmy2WfANtpyz2C`%hP@6dO&230knd1`e z47a3YLa}k96^?B&0)cdq(FXCxqu-`xIX4(>aUB&@&UY-$an^2=IH_*{`v4<9J;&<) z;^4y@FBXgQ`TKY89>WG$KgPUsxlhHC3?YEIdvN%NfBEenetU56FTelo(I55?_y6#R zgY|FbH$HlBS3wD-9!yV(DF;TG-5-T=@tfI?@91)T1qv-`0i+6t=&L(rR+&Rt?@F2nIB}9I_ zSYQFmxzo73mUm_GATiMEFJ>o)qLN4CKsNQJ==r-|dj77Wr%)S*=|K(9g*m_4LP zxN!SWc%D|Hnlj4lD8;!39y!Q&^2-Uos`7vi;e~cd$qH|midM*(2_?%3jt7+otzvTEnd#tPJ)nA;^bB0nj0h_^wHwRXl5qpnXu6q#t2&0;xLb3 zpemmky|@Iyy5JFzqssu33U!ZJLIsYXEMCDfBps+Byh+pVu&fqhPFQ7`pL9h4{sjJk zO7r)H@0|axswTz<`@fyMcX)9B-emmGfB5I|Kfial|F+ZwdkMPUp=AO`&Z39Mt=Pzm zC5C?^y2_Ej8YDOWeGEvj`$n5oXb-3J7yFax8D79V(^XYo>6

    >blzt&<%h&$4=13r#9DXaRDlZ6kQUxMxt&J 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%0DGT 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

    Wpn$|9-1rJGn9m%~AfTu#<=o#{$P1Sg3$V^{ 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

    P2lNSIe48qx!{!;S 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

  • 69Qo*@`!C@N*l% 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
      Cf-X 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≷}R7?<9A&@e0JCZ{}+pJYGB) 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

      + * The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. + *

      + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package com.codename1.crypto; + +import com.codename1.io.Log; +import com.codename1.io.Storage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.engines.AESEngine; +import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * A Storage implementation that seamlessly encrypts it's contents based on a key. To setup this + * encryption use the Storage.install() method, notice that this only applies to storage and doesn't + * apply to the database or FileSystemStorage! + * + * @author Shai Almog + */ +public class EncryptedStorage extends Storage{ + private PaddedBufferedBlockCipher encryptCipher; + private PaddedBufferedBlockCipher decryptCipher; + + private byte[] key; + + @Override + public InputStream createInputStream(String name) throws IOException { + try { + byte[] buf = new byte[16]; + byte[] obuf = new byte[512]; + InputStream in = super.createInputStream(name); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + int noBytesRead = 0; + int noBytesProcessed = 0; + + while ((noBytesRead = in.read(buf)) >= 0) { + noBytesProcessed = decryptCipher.processBytes(buf, 0, noBytesRead, obuf, 0); + out.write(obuf, 0, noBytesProcessed); + } + noBytesProcessed = decryptCipher.doFinal(obuf, 0); + out.write(obuf, 0, noBytesProcessed); + + out.close(); + + return new ByteArrayInputStream(out.toByteArray()); + } catch(InvalidCipherTextException err) { + throw new IOException(err.toString()); + } + } + + @Override + public OutputStream createOutputStream(String name) throws IOException { + return new EncryptedOutputStream(super.createOutputStream(name)); + } + + /** + * Use this method + */ + public static void install(String keyStr) { + try { + byte[] bytes = keyStr.getBytes("UTF-8"); + byte[] key = new byte[24]; + for(int iter = 0 ;iter < key.length ; iter++) { + key[iter] = bytes[iter % bytes.length]; + } + EncryptedStorage i = new EncryptedStorage(); + i.key = key; + i.InitCiphers(); + Storage.setStorageInstance(i); + } catch (UnsupportedEncodingException ex) { + // moronic exception + Log.e(ex); + } + } + + private void InitCiphers(){ + encryptCipher = new PaddedBufferedBlockCipher(new AESEngine()); + encryptCipher.init(true, new KeyParameter(key)); + decryptCipher = new PaddedBufferedBlockCipher(new AESEngine()); + decryptCipher.init(false, new KeyParameter(key)); + } + + class EncryptedOutputStream extends OutputStream { + private final OutputStream underlying; + private byte[] obuf = new byte[16536]; + + public EncryptedOutputStream(OutputStream underlying) { + this.underlying = underlying; + } + + @Override + public void close() throws IOException { + flush(); + underlying.close(); + } + + @Override + public void flush() throws IOException { + try { + int size = encryptCipher.doFinal(obuf, 0); + + if(size > 0) { + underlying.write(obuf, 0, size); + } + } catch(InvalidCipherTextException err) { + throw new IOException(err.toString()); + } + underlying.flush(); + } + + @Override + public void write(byte[] b) throws IOException { + write(b, 0, b.length); + } + + @Override + public void write(int b) throws IOException { + write(new byte[] { (byte)b }); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + int encLen = (len / 16 + 1) * 16; + if(obuf.length < encLen) { + obuf = new byte[encLen + 16]; + } + int size = encryptCipher.processBytes(b, off, len, obuf, 0); + underlying.write(obuf, 0, size); + } + } +} diff --git a/src/com/codename1/crypto/package.html b/src/com/codename1/crypto/package.html new file mode 100644 index 0000000..3e5f941 --- /dev/null +++ b/src/com/codename1/crypto/package.html @@ -0,0 +1,9 @@ + + + + Crypto package + + +

      Provides common cryptographic use cases such as encrypted filesystem as a simplified API facade

      + + From f0cfa050ab6a2b12a8be64dcd539489f8b8607ab Mon Sep 17 00:00:00 2001 From: Steve Hannah Date: Wed, 15 Sep 2021 03:00:56 -0700 Subject: [PATCH 2/4] Updated version to 1.0 --- Stubber.jar | Bin 11737 -> 0 bytes build.xml | 213 -- codenameone_library.properties | 4 - codenameone_library_appended.properties | 5 - codenameone_library_required.properties | 8 - lib/CLDC11.jar | Bin 2103535 -> 0 bytes lib/CodenameOne.jar | Bin 4488132 -> 0 bytes lib/CodenameOne_SRC.zip | Bin 8454625 -> 0 bytes manifest.mf | 3 - manifest.properties | 2 - nbproject/build-impl.xml | 1400 --------- nbproject/genfiles.properties | 8 - nbproject/nativej2me.res | Bin 86436 -> 0 bytes nbproject/project.properties | 78 - nbproject/project.xml | 15 - .../codename1/crypto/EncryptedStorage.java | 154 - src/com/codename1/crypto/package.html | 9 - src/javabc/BigInteger.java | 2775 ----------------- src/javabc/FilterInputStream.java | 61 - src/javabc/FilterOutputStream.java | 42 - src/javabc/SecureRandom.java | 141 - src/org/bouncycastle/LICENSE.java | 59 - .../asn1/ASN1ApplicationSpecificParser.java | 10 - src/org/bouncycastle/asn1/ASN1Boolean.java | 15 - src/org/bouncycastle/asn1/ASN1Choice.java | 14 - src/org/bouncycastle/asn1/ASN1Encodable.java | 6 - .../asn1/ASN1EncodableVector.java | 27 - src/org/bouncycastle/asn1/ASN1Encoding.java | 8 - src/org/bouncycastle/asn1/ASN1Enumerated.java | 22 - src/org/bouncycastle/asn1/ASN1Exception.java | 25 - .../asn1/ASN1GeneralizedTime.java | 27 - src/org/bouncycastle/asn1/ASN1Generator.java | 15 - .../bouncycastle/asn1/ASN1InputStream.java | 466 --- src/org/bouncycastle/asn1/ASN1Integer.java | 22 - src/org/bouncycastle/asn1/ASN1Null.java | 64 - src/org/bouncycastle/asn1/ASN1Object.java | 97 - .../asn1/ASN1ObjectIdentifier.java | 37 - .../bouncycastle/asn1/ASN1OctetString.java | 146 - .../asn1/ASN1OctetStringParser.java | 9 - .../bouncycastle/asn1/ASN1OutputStream.java | 194 -- .../asn1/ASN1ParsingException.java | 23 - src/org/bouncycastle/asn1/ASN1Primitive.java | 69 - src/org/bouncycastle/asn1/ASN1Sequence.java | 323 -- .../bouncycastle/asn1/ASN1SequenceParser.java | 10 - src/org/bouncycastle/asn1/ASN1Set.java | 464 --- src/org/bouncycastle/asn1/ASN1SetParser.java | 10 - .../bouncycastle/asn1/ASN1StreamParser.java | 247 -- src/org/bouncycastle/asn1/ASN1String.java | 6 - .../bouncycastle/asn1/ASN1TaggedObject.java | 236 -- .../asn1/ASN1TaggedObjectParser.java | 12 - src/org/bouncycastle/asn1/ASN1UTCTime.java | 22 - .../asn1/BERApplicationSpecific.java | 10 - .../asn1/BERApplicationSpecificParser.java | 41 - .../asn1/BERConstructedOctetString.java | 144 - src/org/bouncycastle/asn1/BERFactory.java | 17 - src/org/bouncycastle/asn1/BERGenerator.java | 100 - src/org/bouncycastle/asn1/BEROctetString.java | 168 - .../asn1/BEROctetStringGenerator.java | 102 - .../asn1/BEROctetStringParser.java | 41 - .../bouncycastle/asn1/BEROutputStream.java | 36 - src/org/bouncycastle/asn1/BERSequence.java | 73 - .../asn1/BERSequenceGenerator.java | 41 - .../bouncycastle/asn1/BERSequenceParser.java | 38 - src/org/bouncycastle/asn1/BERSet.java | 73 - src/org/bouncycastle/asn1/BERSetParser.java | 38 - .../bouncycastle/asn1/BERTaggedObject.java | 147 - .../asn1/BERTaggedObjectParser.java | 66 - src/org/bouncycastle/asn1/BERTags.java | 36 - .../asn1/ConstructedOctetStream.java | 111 - .../asn1/DERApplicationSpecific.java | 276 -- src/org/bouncycastle/asn1/DERBMPString.java | 141 - src/org/bouncycastle/asn1/DERBitString.java | 312 -- src/org/bouncycastle/asn1/DERBoolean.java | 166 - .../bouncycastle/asn1/DEREncodableVector.java | 18 - src/org/bouncycastle/asn1/DEREnumerated.java | 146 - src/org/bouncycastle/asn1/DERExternal.java | 294 -- .../bouncycastle/asn1/DERExternalParser.java | 52 - src/org/bouncycastle/asn1/DERFactory.java | 31 - .../bouncycastle/asn1/DERGeneralString.java | 98 - .../bouncycastle/asn1/DERGeneralizedTime.java | 260 -- src/org/bouncycastle/asn1/DERGenerator.java | 119 - src/org/bouncycastle/asn1/DERIA5String.java | 171 - src/org/bouncycastle/asn1/DERInteger.java | 136 - src/org/bouncycastle/asn1/DERNull.java | 35 - .../bouncycastle/asn1/DERNumericString.java | 174 -- .../asn1/DERObjectIdentifier.java | 371 --- src/org/bouncycastle/asn1/DEROctetString.java | 48 - .../asn1/DEROctetStringParser.java | 39 - .../bouncycastle/asn1/DEROutputStream.java | 41 - .../bouncycastle/asn1/DERPrintableString.java | 201 -- src/org/bouncycastle/asn1/DERSequence.java | 98 - .../asn1/DERSequenceGenerator.java | 45 - .../bouncycastle/asn1/DERSequenceParser.java | 38 - src/org/bouncycastle/asn1/DERSet.java | 108 - src/org/bouncycastle/asn1/DERSetParser.java | 38 - src/org/bouncycastle/asn1/DERT61String.java | 123 - .../bouncycastle/asn1/DERTaggedObject.java | 118 - src/org/bouncycastle/asn1/DERTags.java | 9 - src/org/bouncycastle/asn1/DERUTCTime.java | 259 -- src/org/bouncycastle/asn1/DERUTF8String.java | 120 - .../bouncycastle/asn1/DERUniversalString.java | 136 - .../bouncycastle/asn1/DERVisibleString.java | 123 - src/org/bouncycastle/asn1/DLOutputStream.java | 31 - src/org/bouncycastle/asn1/DLSequence.java | 98 - src/org/bouncycastle/asn1/DLSet.java | 101 - src/org/bouncycastle/asn1/DLTaggedObject.java | 112 - src/org/bouncycastle/asn1/DateFormatter.java | 272 -- .../asn1/DefiniteLengthInputStream.java | 106 - .../asn1/InMemoryRepresentable.java | 9 - .../asn1/IndefiniteLengthInputStream.java | 111 - .../asn1/LazyConstructionEnumeration.java | 43 - .../asn1/LazyEncodedSequence.java | 109 - .../bouncycastle/asn1/LimitedInputStream.java | 32 - src/org/bouncycastle/asn1/OIDTokenizer.java | 48 - src/org/bouncycastle/asn1/StreamUtil.java | 88 - src/org/bouncycastle/asn1/package.html | 5 - src/org/bouncycastle/asn1/pkcs/Attribute.java | 88 - .../asn1/pkcs/AuthenticatedSafe.java | 74 - src/org/bouncycastle/asn1/pkcs/CRLBag.java | 82 - src/org/bouncycastle/asn1/pkcs/CertBag.java | 66 - .../asn1/pkcs/CertificationRequest.java | 91 - .../asn1/pkcs/CertificationRequestInfo.java | 148 - .../bouncycastle/asn1/pkcs/ContentInfo.java | 102 - .../bouncycastle/asn1/pkcs/DHParameter.java | 104 - .../bouncycastle/asn1/pkcs/EncryptedData.java | 115 - .../asn1/pkcs/EncryptedPrivateKeyInfo.java | 86 - .../asn1/pkcs/EncryptionScheme.java | 55 - .../asn1/pkcs/IssuerAndSerialNumber.java | 85 - .../asn1/pkcs/KeyDerivationFunc.java | 23 - src/org/bouncycastle/asn1/pkcs/MacData.java | 106 - .../bouncycastle/asn1/pkcs/PBEParameter.java | 73 - .../asn1/pkcs/PBES2Algorithms.java | 77 - .../asn1/pkcs/PBES2Parameters.java | 71 - .../bouncycastle/asn1/pkcs/PBKDF2Params.java | 108 - .../asn1/pkcs/PKCS12PBEParams.java | 69 - .../asn1/pkcs/PKCSObjectIdentifiers.java | 257 -- src/org/bouncycastle/asn1/pkcs/Pfx.java | 87 - .../asn1/pkcs/PrivateKeyInfo.java | 160 - .../asn1/pkcs/RC2CBCParameter.java | 93 - .../asn1/pkcs/RSAESOAEPparams.java | 151 - .../bouncycastle/asn1/pkcs/RSAPrivateKey.java | 187 -- .../asn1/pkcs/RSAPrivateKeyStructure.java | 189 -- .../bouncycastle/asn1/pkcs/RSAPublicKey.java | 95 - .../asn1/pkcs/RSASSAPSSparams.java | 172 - src/org/bouncycastle/asn1/pkcs/SafeBag.java | 96 - .../bouncycastle/asn1/pkcs/SignedData.java | 166 - .../bouncycastle/asn1/pkcs/SignerInfo.java | 178 -- src/org/bouncycastle/asn1/pkcs/package.html | 5 - .../bouncycastle/asn1/sec/ECPrivateKey.java | 143 - .../asn1/sec/ECPrivateKeyStructure.java | 128 - .../bouncycastle/asn1/sec/SECNamedCurves.java | 1029 ------ .../asn1/sec/SECObjectIdentifiers.java | 50 - src/org/bouncycastle/asn1/sec/package.html | 5 - src/org/bouncycastle/asn1/util/ASN1Dump.java | 427 --- src/org/bouncycastle/asn1/util/DERDump.java | 41 - src/org/bouncycastle/asn1/util/package.html | 5 - .../asn1/x500/AttributeTypeAndValue.java | 72 - .../asn1/x500/DirectoryString.java | 125 - src/org/bouncycastle/asn1/x500/RDN.java | 119 - src/org/bouncycastle/asn1/x500/X500Name.java | 326 -- .../asn1/x500/X500NameBuilder.java | 81 - .../bouncycastle/asn1/x500/X500NameStyle.java | 34 - .../asn1/x500/style/BCStrictStyle.java | 33 - .../bouncycastle/asn1/x500/style/BCStyle.java | 544 ---- .../asn1/x500/style/IETFUtils.java | 301 -- .../asn1/x500/style/RFC4519Style.java | 443 --- .../asn1/x500/style/X500NameTokenizer.java | 99 - .../asn1/x509/AccessDescription.java | 98 - .../asn1/x509/AlgorithmIdentifier.java | 173 - .../bouncycastle/asn1/x509/AttCertIssuer.java | 91 - .../asn1/x509/AttCertValidityPeriod.java | 84 - src/org/bouncycastle/asn1/x509/Attribute.java | 93 - .../asn1/x509/AttributeCertificate.java | 94 - .../asn1/x509/AttributeCertificateInfo.java | 166 - .../asn1/x509/AuthorityInformationAccess.java | 101 - .../asn1/x509/AuthorityKeyIdentifier.java | 227 -- .../asn1/x509/BasicConstraints.java | 158 - .../bouncycastle/asn1/x509/CRLDistPoint.java | 100 - src/org/bouncycastle/asn1/x509/CRLNumber.java | 54 - src/org/bouncycastle/asn1/x509/CRLReason.java | 150 - .../bouncycastle/asn1/x509/CertPolicyId.java | 20 - .../bouncycastle/asn1/x509/Certificate.java | 131 - .../asn1/x509/CertificateList.java | 127 - .../asn1/x509/CertificatePair.java | 169 - .../asn1/x509/CertificatePolicies.java | 99 - .../bouncycastle/asn1/x509/DSAParameter.java | 92 - .../bouncycastle/asn1/x509/DigestInfo.java | 86 - .../bouncycastle/asn1/x509/DisplayText.java | 165 - .../asn1/x509/DistributionPoint.java | 158 - .../asn1/x509/DistributionPointName.java | 138 - .../asn1/x509/ExtendedKeyUsage.java | 123 - src/org/bouncycastle/asn1/x509/Extension.java | 266 -- .../bouncycastle/asn1/x509/Extensions.java | 214 -- .../asn1/x509/ExtensionsGenerator.java | 94 - .../bouncycastle/asn1/x509/GeneralName.java | 439 --- .../bouncycastle/asn1/x509/GeneralNames.java | 102 - .../asn1/x509/GeneralSubtree.java | 218 -- src/org/bouncycastle/asn1/x509/Holder.java | 245 -- .../asn1/x509/IetfAttrSyntax.java | 189 -- .../bouncycastle/asn1/x509/IssuerSerial.java | 106 - .../asn1/x509/IssuingDistributionPoint.java | 274 -- .../bouncycastle/asn1/x509/KeyPurposeId.java | 119 - src/org/bouncycastle/asn1/x509/KeyUsage.java | 77 - .../asn1/x509/NameConstraints.java | 118 - .../asn1/x509/NoticeReference.java | 170 - .../asn1/x509/ObjectDigestInfo.java | 191 -- .../asn1/x509/PolicyInformation.java | 87 - .../asn1/x509/PolicyMappings.java | 82 - .../asn1/x509/PolicyQualifierId.java | 31 - .../asn1/x509/PolicyQualifierInfo.java | 114 - .../asn1/x509/PrivateKeyUsagePeriod.java | 84 - .../asn1/x509/RSAPublicKeyStructure.java | 98 - .../bouncycastle/asn1/x509/ReasonFlags.java | 85 - .../bouncycastle/asn1/x509/RoleSyntax.java | 237 -- .../asn1/x509/SubjectDirectoryAttributes.java | 144 - .../asn1/x509/SubjectKeyIdentifier.java | 130 - .../asn1/x509/SubjectPublicKeyInfo.java | 155 - .../bouncycastle/asn1/x509/TBSCertList.java | 309 -- .../asn1/x509/TBSCertificate.java | 192 -- .../asn1/x509/TBSCertificateStructure.java | 194 -- src/org/bouncycastle/asn1/x509/Target.java | 138 - .../asn1/x509/TargetInformation.java | 120 - src/org/bouncycastle/asn1/x509/Targets.java | 121 - src/org/bouncycastle/asn1/x509/Time.java | 122 - .../bouncycastle/asn1/x509/UserNotice.java | 132 - .../asn1/x509/V1TBSCertificateGenerator.java | 144 - .../V2AttributeCertificateInfoGenerator.java | 158 - src/org/bouncycastle/asn1/x509/V2Form.java | 130 - .../asn1/x509/V2TBSCertListGenerator.java | 281 -- .../asn1/x509/V3TBSCertificateGenerator.java | 212 -- .../asn1/x509/X509AttributeIdentifiers.java | 29 - .../asn1/x509/X509CertificateStructure.java | 129 - .../asn1/x509/X509DefaultEntryConverter.java | 65 - .../bouncycastle/asn1/x509/X509Extension.java | 248 -- .../asn1/x509/X509Extensions.java | 487 --- .../asn1/x509/X509ExtensionsGenerator.java | 117 - src/org/bouncycastle/asn1/x509/X509Name.java | 1280 -------- .../asn1/x509/X509NameEntryConverter.java | 113 - .../asn1/x509/X509NameTokenizer.java | 99 - .../asn1/x509/X509ObjectIdentifiers.java | 67 - src/org/bouncycastle/asn1/x509/package.html | 5 - .../asn1/x509/qualified/BiometricData.java | 122 - .../qualified/ETSIQCObjectIdentifiers.java | 16 - .../x509/qualified/Iso4217CurrencyCode.java | 93 - .../asn1/x509/qualified/MonetaryValue.java | 92 - .../asn1/x509/qualified/QCStatement.java | 93 - .../qualified/RFC3739QCObjectIdentifiers.java | 14 - .../x509/qualified/SemanticsInformation.java | 131 - .../x509/qualified/TypeOfBiometricData.java | 90 - .../asn1/x509/qualified/package.html | 5 - .../asn1/x509/sigi/NameOrPseudonym.java | 191 -- .../asn1/x509/sigi/PersonalData.java | 214 -- .../asn1/x509/sigi/SigIObjectIdentifiers.java | 45 - .../asn1/x9/DHDomainParameters.java | 139 - src/org/bouncycastle/asn1/x9/DHPublicKey.java | 52 - .../asn1/x9/DHValidationParms.java | 80 - .../bouncycastle/asn1/x9/KeySpecificInfo.java | 68 - src/org/bouncycastle/asn1/x9/OtherInfo.java | 96 - .../bouncycastle/asn1/x9/X962NamedCurves.java | 621 ---- .../bouncycastle/asn1/x9/X962Parameters.java | 86 - src/org/bouncycastle/asn1/x9/X9Curve.java | 161 - .../bouncycastle/asn1/x9/X9ECParameters.java | 176 -- .../asn1/x9/X9ECParametersHolder.java | 18 - src/org/bouncycastle/asn1/x9/X9ECPoint.java | 48 - .../bouncycastle/asn1/x9/X9FieldElement.java | 64 - src/org/bouncycastle/asn1/x9/X9FieldID.java | 109 - .../asn1/x9/X9IntegerConverter.java | 47 - .../asn1/x9/X9ObjectIdentifiers.java | 132 - src/org/bouncycastle/asn1/x9/package.html | 5 - .../crypto/AsymmetricBlockCipher.java | 45 - .../crypto/AsymmetricCipherKeyPair.java | 44 - .../AsymmetricCipherKeyPairGenerator.java | 22 - .../bouncycastle/crypto/BasicAgreement.java | 21 - src/org/bouncycastle/crypto/BlockCipher.java | 56 - .../crypto/BufferedAsymmetricBlockCipher.java | 171 - .../crypto/BufferedBlockCipher.java | 313 -- .../crypto/CipherKeyGenerator.java | 38 - .../bouncycastle/crypto/CipherParameters.java | 8 - .../bouncycastle/crypto/CryptoException.java | 48 - src/org/bouncycastle/crypto/DSA.java | 36 - .../crypto/DataLengthException.java | 29 - .../crypto/DerivationFunction.java | 17 - .../crypto/DerivationParameters.java | 8 - src/org/bouncycastle/crypto/Digest.java | 51 - .../bouncycastle/crypto/ExtendedDigest.java | 13 - .../crypto/InvalidCipherTextException.java | 27 - .../crypto/KeyGenerationParameters.java | 48 - src/org/bouncycastle/crypto/Mac.java | 71 - .../crypto/MaxBytesExceededException.java | 27 - .../crypto/PBEParametersGenerator.java | 157 - .../crypto/RuntimeCryptoException.java | 26 - src/org/bouncycastle/crypto/Signer.java | 43 - .../crypto/SignerWithRecovery.java | 34 - .../crypto/StreamBlockCipher.java | 108 - src/org/bouncycastle/crypto/StreamCipher.java | 53 - src/org/bouncycastle/crypto/Wrapper.java | 18 - .../crypto/agreement/DHAgreement.java | 94 - .../crypto/agreement/DHBasicAgreement.java | 66 - .../crypto/agreement/ECDHBasicAgreement.java | 47 - .../crypto/agreement/ECDHCBasicAgreement.java | 54 - .../crypto/agreement/ECMQVBasicAgreement.java | 86 - .../crypto/agreement/package.html | 5 - .../crypto/agreement/srp/SRP6Client.java | 93 - .../crypto/agreement/srp/SRP6Server.java | 90 - .../crypto/agreement/srp/SRP6Util.java | 91 - .../agreement/srp/SRP6VerifierGenerator.java | 47 - .../crypto/digests/GeneralDigest.java | 135 - .../crypto/digests/LongDigest.java | 354 --- .../crypto/digests/MD2Digest.java | 237 -- .../crypto/digests/MD4Digest.java | 270 -- .../crypto/digests/MD5Digest.java | 302 -- .../crypto/digests/NullDigest.java | 48 - .../crypto/digests/RIPEMD128Digest.java | 461 --- .../crypto/digests/RIPEMD160Digest.java | 422 --- .../crypto/digests/RIPEMD256Digest.java | 476 --- .../crypto/digests/RIPEMD320Digest.java | 461 --- .../crypto/digests/SHA1Digest.java | 290 -- .../crypto/digests/SHA224Digest.java | 292 -- .../crypto/digests/SHA256Digest.java | 295 -- .../crypto/digests/SHA384Digest.java | 87 - .../crypto/digests/SHA512Digest.java | 89 - .../crypto/digests/ShortenedDigest.java | 80 - .../crypto/digests/TigerDigest.java | 866 ----- .../crypto/digests/WhirlpoolDigest.java | 396 --- .../bouncycastle/crypto/digests/package.html | 5 - .../crypto/encodings/ISO9796d1Encoding.java | 287 -- .../crypto/encodings/OAEPEncoding.java | 348 --- .../crypto/encodings/PKCS1Encoding.java | 238 -- .../crypto/encodings/package.html | 5 - .../crypto/engines/AESEngine.java | 547 ---- .../crypto/engines/AESFastEngine.java | 876 ------ .../crypto/engines/AESLightEngine.java | 440 --- .../crypto/engines/AESWrapEngine.java | 16 - .../crypto/engines/BlowfishEngine.java | 576 ---- .../crypto/engines/DESEngine.java | 494 --- .../crypto/engines/DESedeEngine.java | 126 - .../crypto/engines/DESedeWrapEngine.java | 348 --- .../crypto/engines/HC128Engine.java | 256 -- .../crypto/engines/HC256Engine.java | 243 -- .../crypto/engines/IDEAEngine.java | 366 --- .../crypto/engines/IESEngine.java | 256 -- .../crypto/engines/NullEngine.java | 84 - .../crypto/engines/RFC3211WrapEngine.java | 175 -- .../crypto/engines/RFC3394WrapEngine.java | 177 -- .../crypto/engines/RSABlindedEngine.java | 126 - .../crypto/engines/RSABlindingEngine.java | 137 - .../crypto/engines/RSACoreEngine.java | 203 -- .../crypto/engines/RSAEngine.java | 78 - .../crypto/engines/Salsa20Engine.java | 318 -- .../bouncycastle/crypto/engines/package.html | 5 - .../generators/BaseKDFBytesGenerator.java | 142 - .../crypto/generators/DESKeyGenerator.java | 48 - .../crypto/generators/DESedeKeyGenerator.java | 56 - .../generators/DHBasicKeyPairGenerator.java | 42 - .../generators/DHKeyGeneratorHelper.java | 51 - .../crypto/generators/DHKeyPairGenerator.java | 42 - .../generators/DHParametersGenerator.java | 52 - .../crypto/generators/DHParametersHelper.java | 73 - .../generators/DSAKeyPairGenerator.java | 61 - .../generators/DSAParametersGenerator.java | 335 -- .../crypto/generators/ECKeyPairGenerator.java | 53 - .../generators/ElGamalKeyPairGenerator.java | 44 - .../ElGamalParametersGenerator.java | 43 - .../generators/GOST3410KeyPairGenerator.java | 57 - .../GOST3410ParametersGenerator.java | 541 ---- .../crypto/generators/KDF1BytesGenerator.java | 23 - .../crypto/generators/KDF2BytesGenerator.java | 24 - .../crypto/generators/MGF1BytesGenerator.java | 114 - .../NaccacheSternKeyPairGenerator.java | 365 --- .../OpenSSLPBEParametersGenerator.java | 131 - .../generators/PKCS12ParametersGenerator.java | 221 -- .../PKCS5S1ParametersGenerator.java | 119 - .../PKCS5S2ParametersGenerator.java | 158 - .../RSABlindingFactorGenerator.java | 77 - .../generators/RSAKeyPairGenerator.java | 147 - .../crypto/generators/SCrypt.java | 147 - .../crypto/generators/package.html | 5 - .../crypto/io/CipherInputStream.java | 244 -- .../crypto/io/CipherOutputStream.java | 188 -- .../crypto/io/DigestInputStream.java | 52 - .../crypto/io/DigestOutputStream.java | 42 - .../crypto/io/MacInputStream.java | 52 - .../crypto/io/MacOutputStream.java | 42 - .../crypto/io/SignerInputStream.java | 52 - .../crypto/io/SignerOutputStream.java | 38 - src/org/bouncycastle/crypto/io/package.html | 5 - .../crypto/macs/BlockCipherMac.java | 174 -- .../crypto/macs/CBCBlockCipherMac.java | 229 -- .../crypto/macs/CFBBlockCipherMac.java | 388 --- src/org/bouncycastle/crypto/macs/CMac.java | 237 -- .../crypto/macs/GOST28147Mac.java | 298 -- src/org/bouncycastle/crypto/macs/HMac.java | 199 -- .../crypto/macs/ISO9797Alg3Mac.java | 305 -- src/org/bouncycastle/crypto/macs/OldHMac.java | 138 - src/org/bouncycastle/crypto/macs/VMPCMac.java | 186 -- src/org/bouncycastle/crypto/macs/package.html | 5 - .../crypto/modes/AEADBlockCipher.java | 108 - .../crypto/modes/CBCBlockCipher.java | 253 -- .../crypto/modes/CCMBlockCipher.java | 338 -- .../crypto/modes/CFBBlockCipher.java | 254 -- .../crypto/modes/CTSBlockCipher.java | 265 -- .../crypto/modes/EAXBlockCipher.java | 304 -- .../crypto/modes/GCMBlockCipher.java | 421 --- .../crypto/modes/GOFBBlockCipher.java | 234 -- .../crypto/modes/OFBBlockCipher.java | 183 -- .../crypto/modes/OpenPGPCFBBlockCipher.java | 312 -- .../crypto/modes/PGPCFBBlockCipher.java | 450 --- .../crypto/modes/PaddedBlockCipher.java | 253 -- .../crypto/modes/SICBlockCipher.java | 124 - .../modes/gcm/BasicGCMExponentiator.java | 36 - .../crypto/modes/gcm/BasicGCMMultiplier.java | 18 - .../crypto/modes/gcm/GCMExponentiator.java | 7 - .../crypto/modes/gcm/GCMMultiplier.java | 7 - .../crypto/modes/gcm/GCMUtil.java | 155 - .../modes/gcm/Tables1kGCMExponentiator.java | 40 - .../modes/gcm/Tables64kGCMMultiplier.java | 78 - .../modes/gcm/Tables8kGCMMultiplier.java | 106 - .../bouncycastle/crypto/modes/package.html | 5 - src/org/bouncycastle/crypto/package.html | 5 - .../crypto/paddings/BlockCipherPadding.java | 48 - .../crypto/paddings/ISO10126d2Padding.java | 79 - .../crypto/paddings/ISO7816d4Padding.java | 77 - .../crypto/paddings/PKCS7Padding.java | 76 - .../paddings/PaddedBufferedBlockCipher.java | 298 -- .../crypto/paddings/TBCPadding.java | 89 - .../crypto/paddings/X923Padding.java | 80 - .../crypto/paddings/ZeroBytePadding.java | 73 - .../bouncycastle/crypto/paddings/package.html | 5 - .../crypto/params/AEADParameters.java | 48 - .../crypto/params/AsymmetricKeyParameter.java | 20 - .../crypto/params/CCMParameters.java | 18 - .../crypto/params/DESParameters.java | 107 - .../crypto/params/DESedeParameters.java | 57 - .../params/DHKeyGenerationParameters.java | 30 - .../crypto/params/DHKeyParameters.java | 54 - .../crypto/params/DHParameters.java | 189 -- .../crypto/params/DHPrivateKeyParameters.java | 41 - .../crypto/params/DHPublicKeyParameters.java | 41 - .../crypto/params/DHValidationParameters.java | 50 - .../params/DSAKeyGenerationParameters.java | 25 - .../crypto/params/DSAKeyParameters.java | 21 - .../crypto/params/DSAParameters.java | 74 - .../params/DSAPrivateKeyParameters.java | 23 - .../crypto/params/DSAPublicKeyParameters.java | 23 - .../params/DSAValidationParameters.java | 50 - .../crypto/params/ECDomainParameters.java | 81 - .../params/ECKeyGenerationParameters.java | 25 - .../crypto/params/ECKeyParameters.java | 21 - .../crypto/params/ECPrivateKeyParameters.java | 22 - .../crypto/params/ECPublicKeyParameters.java | 22 - .../ElGamalKeyGenerationParameters.java | 30 - .../crypto/params/ElGamalKeyParameters.java | 47 - .../crypto/params/ElGamalParameters.java | 69 - .../params/ElGamalPrivateKeyParameters.java | 46 - .../params/ElGamalPublicKeyParameters.java | 41 - .../GOST3410KeyGenerationParameters.java | 25 - .../crypto/params/GOST3410KeyParameters.java | 21 - .../crypto/params/GOST3410Parameters.java | 74 - .../params/GOST3410PrivateKeyParameters.java | 23 - .../params/GOST3410PublicKeyParameters.java | 23 - .../params/GOST3410ValidationParameters.java | 84 - .../crypto/params/IESParameters.java | 44 - .../params/IESWithCipherParameters.java | 30 - .../crypto/params/ISO18033KDFParameters.java | 23 - .../crypto/params/KDFParameters.java | 31 - .../crypto/params/KeyParameter.java | 30 - .../crypto/params/MGFParameters.java | 32 - .../crypto/params/MQVPrivateParameters.java | 43 - .../crypto/params/MQVPublicParameters.java | 28 - .../NaccacheSternKeyGenerationParameters.java | 97 - .../params/NaccacheSternKeyParameters.java | 53 - .../NaccacheSternPrivateKeyParameters.java | 50 - .../crypto/params/ParametersWithIV.java | 39 - .../crypto/params/ParametersWithRandom.java | 36 - .../crypto/params/ParametersWithSBox.java | 28 - .../crypto/params/ParametersWithSalt.java | 42 - .../crypto/params/RC2Parameters.java | 36 - .../crypto/params/RC5Parameters.java | 35 - .../crypto/params/RSABlindingParameters.java | 35 - .../params/RSAKeyGenerationParameters.java | 48 - .../crypto/params/RSAKeyParameters.java | 31 - .../params/RSAPrivateCrtKeyParameters.java | 67 - .../bouncycastle/crypto/params/package.html | 5 - .../crypto/prng/DigestRandomGenerator.java | 123 - .../crypto/prng/RandomGenerator.java | 38 - .../crypto/prng/ReversedWindowGenerator.java | 111 - .../crypto/prng/ThreadedSeedGenerator.java | 95 - .../crypto/prng/VMPCRandomGenerator.java | 131 - src/org/bouncycastle/crypto/prng/package.html | 5 - .../crypto/signers/DSADigestSigner.java | 163 - .../crypto/signers/DSASigner.java | 138 - .../crypto/signers/ECDSASigner.java | 163 - .../crypto/signers/ECGOST3410Signer.java | 152 - .../crypto/signers/ECNRSigner.java | 182 -- .../crypto/signers/GOST3410Signer.java | 127 - .../crypto/signers/GenericSigner.java | 136 - .../crypto/signers/ISO9796d2PSSSigner.java | 621 ---- .../crypto/signers/ISO9796d2Signer.java | 614 ---- .../crypto/signers/PSSSigner.java | 348 --- .../crypto/signers/RSADigestSigner.java | 223 -- .../bouncycastle/crypto/signers/package.html | 5 - .../crypto/tls/AlertDescription.java | 47 - .../bouncycastle/crypto/tls/AlertLevel.java | 10 - .../crypto/tls/AlwaysValidVerifyer.java | 25 - .../bouncycastle/crypto/tls/ByteQueue.java | 123 - .../bouncycastle/crypto/tls/Certificate.java | 121 - .../crypto/tls/CertificateRequest.java | 28 - .../crypto/tls/CertificateVerifyer.java | 18 - .../bouncycastle/crypto/tls/CipherSuite.java | 135 - .../crypto/tls/ClientCertificateType.java | 19 - .../bouncycastle/crypto/tls/CombinedHash.java | 114 - .../crypto/tls/CompressionMethod.java | 19 - .../bouncycastle/crypto/tls/ContentType.java | 12 - .../tls/DefaultTlsAgreementCredentials.java | 68 - .../crypto/tls/DefaultTlsCipherFactory.java | 70 - .../crypto/tls/DefaultTlsClient.java | 251 -- .../tls/DefaultTlsSignerCredentials.java | 79 - .../crypto/tls/DigestAlgorithm.java | 18 - .../bouncycastle/crypto/tls/ECCurveType.java | 28 - .../crypto/tls/ECPointFormat.java | 15 - .../crypto/tls/EncryptionAlgorithm.java | 29 - .../crypto/tls/ExtensionType.java | 30 - .../crypto/tls/HandshakeType.java | 18 - .../crypto/tls/KeyExchangeAlgorithm.java | 33 - .../crypto/tls/LegacyTlsAuthentication.java | 32 - .../crypto/tls/LegacyTlsClient.java | 29 - .../bouncycastle/crypto/tls/NamedCurve.java | 100 - .../bouncycastle/crypto/tls/PSKTlsClient.java | 192 -- .../crypto/tls/ProtocolVersion.java | 64 - .../bouncycastle/crypto/tls/RecordStream.java | 191 -- .../bouncycastle/crypto/tls/SRPTlsClient.java | 201 -- src/org/bouncycastle/crypto/tls/SSL3Mac.java | 117 - .../crypto/tls/SecurityParameters.java | 23 - .../crypto/tls/TlsAgreementCredentials.java | 10 - .../crypto/tls/TlsAuthentication.java | 24 - .../crypto/tls/TlsBlockCipher.java | 240 -- .../bouncycastle/crypto/tls/TlsCipher.java | 10 - .../crypto/tls/TlsCipherFactory.java | 11 - .../bouncycastle/crypto/tls/TlsClient.java | 39 - .../crypto/tls/TlsClientContext.java | 18 - .../crypto/tls/TlsClientContextImpl.java | 59 - .../crypto/tls/TlsCompression.java | 10 - .../crypto/tls/TlsCredentials.java | 6 - .../crypto/tls/TlsDHEKeyExchange.java | 57 - .../crypto/tls/TlsDHKeyExchange.java | 211 -- .../bouncycastle/crypto/tls/TlsDHUtils.java | 76 - .../bouncycastle/crypto/tls/TlsDSASigner.java | 34 - .../bouncycastle/crypto/tls/TlsDSSSigner.java | 19 - .../crypto/tls/TlsECDHEKeyExchange.java | 112 - .../crypto/tls/TlsECDHKeyExchange.java | 240 -- .../crypto/tls/TlsECDSASigner.java | 19 - .../crypto/tls/TlsFatalAlert.java | 20 - .../crypto/tls/TlsInputStream.java | 37 - .../crypto/tls/TlsKeyExchange.java | 30 - src/org/bouncycastle/crypto/tls/TlsMac.java | 130 - .../crypto/tls/TlsNullCipher.java | 24 - .../crypto/tls/TlsNullCompression.java | 16 - .../crypto/tls/TlsOutputStream.java | 39 - .../crypto/tls/TlsPSKIdentity.java | 12 - .../crypto/tls/TlsPSKKeyExchange.java | 152 - .../crypto/tls/TlsProtocolHandler.java | 1259 -------- .../crypto/tls/TlsRSAKeyExchange.java | 166 - .../bouncycastle/crypto/tls/TlsRSASigner.java | 37 - .../bouncycastle/crypto/tls/TlsRSAUtils.java | 51 - .../crypto/tls/TlsRuntimeException.java | 25 - .../crypto/tls/TlsSRPKeyExchange.java | 203 -- .../bouncycastle/crypto/tls/TlsSigner.java | 17 - .../crypto/tls/TlsSignerCredentials.java | 8 - src/org/bouncycastle/crypto/tls/TlsUtils.java | 438 --- src/org/bouncycastle/crypto/tls/package.html | 5 - src/org/bouncycastle/crypto/util/Pack.java | 100 - .../crypto/util/PrivateKeyFactory.java | 159 - .../crypto/util/PublicKeyFactory.java | 196 -- src/org/bouncycastle/crypto/util/package.html | 5 - .../bouncycastle/math/ec/ECAlgorithms.java | 92 - src/org/bouncycastle/math/ec/ECConstants.java | 12 - src/org/bouncycastle/math/ec/ECCurve.java | 668 ---- .../bouncycastle/math/ec/ECFieldElement.java | 1196 ------- .../bouncycastle/math/ec/ECMultiplier.java | 19 - src/org/bouncycastle/math/ec/ECPoint.java | 588 ---- .../bouncycastle/math/ec/FpNafMultiplier.java | 39 - src/org/bouncycastle/math/ec/IntArray.java | 518 --- src/org/bouncycastle/math/ec/PreCompInfo.java | 10 - .../math/ec/ReferenceMultiplier.java | 30 - .../math/ec/SimpleBigDecimal.java | 253 -- src/org/bouncycastle/math/ec/Tnaf.java | 844 ----- .../bouncycastle/math/ec/WNafMultiplier.java | 240 -- .../bouncycastle/math/ec/WNafPreCompInfo.java | 44 - .../math/ec/WTauNafMultiplier.java | 119 - .../math/ec/WTauNafPreCompInfo.java | 39 - src/org/bouncycastle/math/ec/ZTauElement.java | 37 - src/org/bouncycastle/math/ec/package.html | 5 - .../bouncycastle/oiw/ElGamalParameter.java | 54 - .../oiw/OIWObjectIdentifiers.java | 31 - src/org/bouncycastle/oiw/package.html | 5 - src/org/bouncycastle/util/Arrays.java | 532 ---- src/org/bouncycastle/util/BigIntegers.java | 78 - .../bouncycastle/util/CollectionStore.java | 57 - src/org/bouncycastle/util/IPAddress.java | 188 -- src/org/bouncycastle/util/Selector.java | 8 - src/org/bouncycastle/util/Store.java | 9 - src/org/bouncycastle/util/StoreException.java | 18 - src/org/bouncycastle/util/Strings.java | 304 -- .../bouncycastle/util/encoders/Base64.java | 121 - .../util/encoders/Base64Encoder.java | 298 -- .../util/encoders/BufferedDecoder.java | 96 - .../util/encoders/BufferedEncoder.java | 96 - .../bouncycastle/util/encoders/Encoder.java | 17 - src/org/bouncycastle/util/encoders/Hex.java | 131 - .../util/encoders/HexEncoder.java | 172 - .../util/encoders/HexTranslator.java | 87 - .../util/encoders/Translator.java | 23 - .../bouncycastle/util/encoders/UrlBase64.java | 129 - .../util/encoders/UrlBase64Encoder.java | 25 - .../bouncycastle/util/encoders/package.html | 5 - .../util/io/StreamOverflowException.java | 12 - src/org/bouncycastle/util/io/Streams.java | 87 - .../bouncycastle/util/io/TeeInputStream.java | 62 - .../bouncycastle/util/io/TeeOutputStream.java | 52 - 619 files changed, 81842 deletions(-) delete mode 100644 Stubber.jar delete mode 100644 build.xml delete mode 100644 codenameone_library.properties delete mode 100644 codenameone_library_appended.properties delete mode 100644 codenameone_library_required.properties delete mode 100644 lib/CLDC11.jar delete mode 100644 lib/CodenameOne.jar delete mode 100644 lib/CodenameOne_SRC.zip delete mode 100644 manifest.mf delete mode 100644 manifest.properties delete mode 100644 nbproject/build-impl.xml delete mode 100644 nbproject/genfiles.properties delete mode 100644 nbproject/nativej2me.res delete mode 100644 nbproject/project.properties delete mode 100644 nbproject/project.xml delete mode 100644 src/com/codename1/crypto/EncryptedStorage.java delete mode 100644 src/com/codename1/crypto/package.html delete mode 100644 src/javabc/BigInteger.java delete mode 100644 src/javabc/FilterInputStream.java delete mode 100644 src/javabc/FilterOutputStream.java delete mode 100644 src/javabc/SecureRandom.java delete mode 100644 src/org/bouncycastle/LICENSE.java delete mode 100644 src/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Boolean.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Choice.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Encodable.java delete mode 100644 src/org/bouncycastle/asn1/ASN1EncodableVector.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Encoding.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Enumerated.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Exception.java delete mode 100644 src/org/bouncycastle/asn1/ASN1GeneralizedTime.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Generator.java delete mode 100644 src/org/bouncycastle/asn1/ASN1InputStream.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Integer.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Null.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Object.java delete mode 100644 src/org/bouncycastle/asn1/ASN1ObjectIdentifier.java delete mode 100644 src/org/bouncycastle/asn1/ASN1OctetString.java delete mode 100644 src/org/bouncycastle/asn1/ASN1OctetStringParser.java delete mode 100644 src/org/bouncycastle/asn1/ASN1OutputStream.java delete mode 100644 src/org/bouncycastle/asn1/ASN1ParsingException.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Primitive.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Sequence.java delete mode 100644 src/org/bouncycastle/asn1/ASN1SequenceParser.java delete mode 100644 src/org/bouncycastle/asn1/ASN1Set.java delete mode 100644 src/org/bouncycastle/asn1/ASN1SetParser.java delete mode 100644 src/org/bouncycastle/asn1/ASN1StreamParser.java delete mode 100644 src/org/bouncycastle/asn1/ASN1String.java delete mode 100644 src/org/bouncycastle/asn1/ASN1TaggedObject.java delete mode 100644 src/org/bouncycastle/asn1/ASN1TaggedObjectParser.java delete mode 100644 src/org/bouncycastle/asn1/ASN1UTCTime.java delete mode 100644 src/org/bouncycastle/asn1/BERApplicationSpecific.java delete mode 100644 src/org/bouncycastle/asn1/BERApplicationSpecificParser.java delete mode 100644 src/org/bouncycastle/asn1/BERConstructedOctetString.java delete mode 100644 src/org/bouncycastle/asn1/BERFactory.java delete mode 100644 src/org/bouncycastle/asn1/BERGenerator.java delete mode 100644 src/org/bouncycastle/asn1/BEROctetString.java delete mode 100644 src/org/bouncycastle/asn1/BEROctetStringGenerator.java delete mode 100644 src/org/bouncycastle/asn1/BEROctetStringParser.java delete mode 100644 src/org/bouncycastle/asn1/BEROutputStream.java delete mode 100644 src/org/bouncycastle/asn1/BERSequence.java delete mode 100644 src/org/bouncycastle/asn1/BERSequenceGenerator.java delete mode 100644 src/org/bouncycastle/asn1/BERSequenceParser.java delete mode 100644 src/org/bouncycastle/asn1/BERSet.java delete mode 100644 src/org/bouncycastle/asn1/BERSetParser.java delete mode 100644 src/org/bouncycastle/asn1/BERTaggedObject.java delete mode 100644 src/org/bouncycastle/asn1/BERTaggedObjectParser.java delete mode 100644 src/org/bouncycastle/asn1/BERTags.java delete mode 100644 src/org/bouncycastle/asn1/ConstructedOctetStream.java delete mode 100644 src/org/bouncycastle/asn1/DERApplicationSpecific.java delete mode 100644 src/org/bouncycastle/asn1/DERBMPString.java delete mode 100644 src/org/bouncycastle/asn1/DERBitString.java delete mode 100644 src/org/bouncycastle/asn1/DERBoolean.java delete mode 100644 src/org/bouncycastle/asn1/DEREncodableVector.java delete mode 100644 src/org/bouncycastle/asn1/DEREnumerated.java delete mode 100644 src/org/bouncycastle/asn1/DERExternal.java delete mode 100644 src/org/bouncycastle/asn1/DERExternalParser.java delete mode 100644 src/org/bouncycastle/asn1/DERFactory.java delete mode 100644 src/org/bouncycastle/asn1/DERGeneralString.java delete mode 100644 src/org/bouncycastle/asn1/DERGeneralizedTime.java delete mode 100644 src/org/bouncycastle/asn1/DERGenerator.java delete mode 100644 src/org/bouncycastle/asn1/DERIA5String.java delete mode 100644 src/org/bouncycastle/asn1/DERInteger.java delete mode 100644 src/org/bouncycastle/asn1/DERNull.java delete mode 100644 src/org/bouncycastle/asn1/DERNumericString.java delete mode 100644 src/org/bouncycastle/asn1/DERObjectIdentifier.java delete mode 100644 src/org/bouncycastle/asn1/DEROctetString.java delete mode 100644 src/org/bouncycastle/asn1/DEROctetStringParser.java delete mode 100644 src/org/bouncycastle/asn1/DEROutputStream.java delete mode 100644 src/org/bouncycastle/asn1/DERPrintableString.java delete mode 100644 src/org/bouncycastle/asn1/DERSequence.java delete mode 100644 src/org/bouncycastle/asn1/DERSequenceGenerator.java delete mode 100644 src/org/bouncycastle/asn1/DERSequenceParser.java delete mode 100644 src/org/bouncycastle/asn1/DERSet.java delete mode 100644 src/org/bouncycastle/asn1/DERSetParser.java delete mode 100644 src/org/bouncycastle/asn1/DERT61String.java delete mode 100644 src/org/bouncycastle/asn1/DERTaggedObject.java delete mode 100644 src/org/bouncycastle/asn1/DERTags.java delete mode 100644 src/org/bouncycastle/asn1/DERUTCTime.java delete mode 100644 src/org/bouncycastle/asn1/DERUTF8String.java delete mode 100644 src/org/bouncycastle/asn1/DERUniversalString.java delete mode 100644 src/org/bouncycastle/asn1/DERVisibleString.java delete mode 100644 src/org/bouncycastle/asn1/DLOutputStream.java delete mode 100644 src/org/bouncycastle/asn1/DLSequence.java delete mode 100644 src/org/bouncycastle/asn1/DLSet.java delete mode 100644 src/org/bouncycastle/asn1/DLTaggedObject.java delete mode 100644 src/org/bouncycastle/asn1/DateFormatter.java delete mode 100644 src/org/bouncycastle/asn1/DefiniteLengthInputStream.java delete mode 100644 src/org/bouncycastle/asn1/InMemoryRepresentable.java delete mode 100644 src/org/bouncycastle/asn1/IndefiniteLengthInputStream.java delete mode 100644 src/org/bouncycastle/asn1/LazyConstructionEnumeration.java delete mode 100644 src/org/bouncycastle/asn1/LazyEncodedSequence.java delete mode 100644 src/org/bouncycastle/asn1/LimitedInputStream.java delete mode 100644 src/org/bouncycastle/asn1/OIDTokenizer.java delete mode 100644 src/org/bouncycastle/asn1/StreamUtil.java delete mode 100644 src/org/bouncycastle/asn1/package.html delete mode 100644 src/org/bouncycastle/asn1/pkcs/Attribute.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/CRLBag.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/CertBag.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/CertificationRequest.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/ContentInfo.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/DHParameter.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/EncryptedData.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/EncryptionScheme.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/MacData.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/PBEParameter.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/PBES2Parameters.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/PBKDF2Params.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/Pfx.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/RSAPublicKey.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/SafeBag.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/SignedData.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/SignerInfo.java delete mode 100644 src/org/bouncycastle/asn1/pkcs/package.html delete mode 100644 src/org/bouncycastle/asn1/sec/ECPrivateKey.java delete mode 100644 src/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java delete mode 100644 src/org/bouncycastle/asn1/sec/SECNamedCurves.java delete mode 100644 src/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/sec/package.html delete mode 100644 src/org/bouncycastle/asn1/util/ASN1Dump.java delete mode 100644 src/org/bouncycastle/asn1/util/DERDump.java delete mode 100644 src/org/bouncycastle/asn1/util/package.html delete mode 100644 src/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java delete mode 100644 src/org/bouncycastle/asn1/x500/DirectoryString.java delete mode 100644 src/org/bouncycastle/asn1/x500/RDN.java delete mode 100644 src/org/bouncycastle/asn1/x500/X500Name.java delete mode 100644 src/org/bouncycastle/asn1/x500/X500NameBuilder.java delete mode 100644 src/org/bouncycastle/asn1/x500/X500NameStyle.java delete mode 100644 src/org/bouncycastle/asn1/x500/style/BCStrictStyle.java delete mode 100644 src/org/bouncycastle/asn1/x500/style/BCStyle.java delete mode 100644 src/org/bouncycastle/asn1/x500/style/IETFUtils.java delete mode 100644 src/org/bouncycastle/asn1/x500/style/RFC4519Style.java delete mode 100644 src/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java delete mode 100644 src/org/bouncycastle/asn1/x509/AccessDescription.java delete mode 100644 src/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java delete mode 100644 src/org/bouncycastle/asn1/x509/AttCertIssuer.java delete mode 100644 src/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java delete mode 100644 src/org/bouncycastle/asn1/x509/Attribute.java delete mode 100644 src/org/bouncycastle/asn1/x509/AttributeCertificate.java delete mode 100644 src/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java delete mode 100644 src/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java delete mode 100644 src/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java delete mode 100644 src/org/bouncycastle/asn1/x509/BasicConstraints.java delete mode 100644 src/org/bouncycastle/asn1/x509/CRLDistPoint.java delete mode 100644 src/org/bouncycastle/asn1/x509/CRLNumber.java delete mode 100644 src/org/bouncycastle/asn1/x509/CRLReason.java delete mode 100644 src/org/bouncycastle/asn1/x509/CertPolicyId.java delete mode 100644 src/org/bouncycastle/asn1/x509/Certificate.java delete mode 100644 src/org/bouncycastle/asn1/x509/CertificateList.java delete mode 100644 src/org/bouncycastle/asn1/x509/CertificatePair.java delete mode 100644 src/org/bouncycastle/asn1/x509/CertificatePolicies.java delete mode 100644 src/org/bouncycastle/asn1/x509/DSAParameter.java delete mode 100644 src/org/bouncycastle/asn1/x509/DigestInfo.java delete mode 100644 src/org/bouncycastle/asn1/x509/DisplayText.java delete mode 100644 src/org/bouncycastle/asn1/x509/DistributionPoint.java delete mode 100644 src/org/bouncycastle/asn1/x509/DistributionPointName.java delete mode 100644 src/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java delete mode 100644 src/org/bouncycastle/asn1/x509/Extension.java delete mode 100644 src/org/bouncycastle/asn1/x509/Extensions.java delete mode 100644 src/org/bouncycastle/asn1/x509/ExtensionsGenerator.java delete mode 100644 src/org/bouncycastle/asn1/x509/GeneralName.java delete mode 100644 src/org/bouncycastle/asn1/x509/GeneralNames.java delete mode 100644 src/org/bouncycastle/asn1/x509/GeneralSubtree.java delete mode 100644 src/org/bouncycastle/asn1/x509/Holder.java delete mode 100644 src/org/bouncycastle/asn1/x509/IetfAttrSyntax.java delete mode 100644 src/org/bouncycastle/asn1/x509/IssuerSerial.java delete mode 100644 src/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java delete mode 100644 src/org/bouncycastle/asn1/x509/KeyPurposeId.java delete mode 100644 src/org/bouncycastle/asn1/x509/KeyUsage.java delete mode 100644 src/org/bouncycastle/asn1/x509/NameConstraints.java delete mode 100644 src/org/bouncycastle/asn1/x509/NoticeReference.java delete mode 100644 src/org/bouncycastle/asn1/x509/ObjectDigestInfo.java delete mode 100644 src/org/bouncycastle/asn1/x509/PolicyInformation.java delete mode 100644 src/org/bouncycastle/asn1/x509/PolicyMappings.java delete mode 100644 src/org/bouncycastle/asn1/x509/PolicyQualifierId.java delete mode 100644 src/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java delete mode 100644 src/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java delete mode 100644 src/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java delete mode 100644 src/org/bouncycastle/asn1/x509/ReasonFlags.java delete mode 100644 src/org/bouncycastle/asn1/x509/RoleSyntax.java delete mode 100644 src/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java delete mode 100644 src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java delete mode 100644 src/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java delete mode 100644 src/org/bouncycastle/asn1/x509/TBSCertList.java delete mode 100644 src/org/bouncycastle/asn1/x509/TBSCertificate.java delete mode 100644 src/org/bouncycastle/asn1/x509/TBSCertificateStructure.java delete mode 100644 src/org/bouncycastle/asn1/x509/Target.java delete mode 100644 src/org/bouncycastle/asn1/x509/TargetInformation.java delete mode 100644 src/org/bouncycastle/asn1/x509/Targets.java delete mode 100644 src/org/bouncycastle/asn1/x509/Time.java delete mode 100644 src/org/bouncycastle/asn1/x509/UserNotice.java delete mode 100644 src/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java delete mode 100644 src/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java delete mode 100644 src/org/bouncycastle/asn1/x509/V2Form.java delete mode 100644 src/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java delete mode 100644 src/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509CertificateStructure.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509Extension.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509Extensions.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509Name.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509NameEntryConverter.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509NameTokenizer.java delete mode 100644 src/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/x509/package.html delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/BiometricData.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/QCStatement.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java delete mode 100644 src/org/bouncycastle/asn1/x509/qualified/package.html delete mode 100644 src/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java delete mode 100644 src/org/bouncycastle/asn1/x509/sigi/PersonalData.java delete mode 100644 src/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/x9/DHDomainParameters.java delete mode 100644 src/org/bouncycastle/asn1/x9/DHPublicKey.java delete mode 100644 src/org/bouncycastle/asn1/x9/DHValidationParms.java delete mode 100644 src/org/bouncycastle/asn1/x9/KeySpecificInfo.java delete mode 100644 src/org/bouncycastle/asn1/x9/OtherInfo.java delete mode 100644 src/org/bouncycastle/asn1/x9/X962NamedCurves.java delete mode 100644 src/org/bouncycastle/asn1/x9/X962Parameters.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9Curve.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9ECParameters.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9ECParametersHolder.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9ECPoint.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9FieldElement.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9FieldID.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9IntegerConverter.java delete mode 100644 src/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/asn1/x9/package.html delete mode 100644 src/org/bouncycastle/crypto/AsymmetricBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java delete mode 100644 src/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/BasicAgreement.java delete mode 100644 src/org/bouncycastle/crypto/BlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/BufferedBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/CipherKeyGenerator.java delete mode 100644 src/org/bouncycastle/crypto/CipherParameters.java delete mode 100644 src/org/bouncycastle/crypto/CryptoException.java delete mode 100644 src/org/bouncycastle/crypto/DSA.java delete mode 100644 src/org/bouncycastle/crypto/DataLengthException.java delete mode 100644 src/org/bouncycastle/crypto/DerivationFunction.java delete mode 100644 src/org/bouncycastle/crypto/DerivationParameters.java delete mode 100644 src/org/bouncycastle/crypto/Digest.java delete mode 100644 src/org/bouncycastle/crypto/ExtendedDigest.java delete mode 100644 src/org/bouncycastle/crypto/InvalidCipherTextException.java delete mode 100644 src/org/bouncycastle/crypto/KeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/Mac.java delete mode 100644 src/org/bouncycastle/crypto/MaxBytesExceededException.java delete mode 100644 src/org/bouncycastle/crypto/PBEParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/RuntimeCryptoException.java delete mode 100644 src/org/bouncycastle/crypto/Signer.java delete mode 100644 src/org/bouncycastle/crypto/SignerWithRecovery.java delete mode 100644 src/org/bouncycastle/crypto/StreamBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/StreamCipher.java delete mode 100644 src/org/bouncycastle/crypto/Wrapper.java delete mode 100644 src/org/bouncycastle/crypto/agreement/DHAgreement.java delete mode 100644 src/org/bouncycastle/crypto/agreement/DHBasicAgreement.java delete mode 100644 src/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java delete mode 100644 src/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java delete mode 100644 src/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java delete mode 100644 src/org/bouncycastle/crypto/agreement/package.html delete mode 100644 src/org/bouncycastle/crypto/agreement/srp/SRP6Client.java delete mode 100644 src/org/bouncycastle/crypto/agreement/srp/SRP6Server.java delete mode 100644 src/org/bouncycastle/crypto/agreement/srp/SRP6Util.java delete mode 100644 src/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java delete mode 100644 src/org/bouncycastle/crypto/digests/GeneralDigest.java delete mode 100644 src/org/bouncycastle/crypto/digests/LongDigest.java delete mode 100644 src/org/bouncycastle/crypto/digests/MD2Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/MD4Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/MD5Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/NullDigest.java delete mode 100644 src/org/bouncycastle/crypto/digests/RIPEMD128Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/RIPEMD160Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/RIPEMD256Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/RIPEMD320Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/SHA1Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/SHA224Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/SHA256Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/SHA384Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/SHA512Digest.java delete mode 100644 src/org/bouncycastle/crypto/digests/ShortenedDigest.java delete mode 100644 src/org/bouncycastle/crypto/digests/TigerDigest.java delete mode 100644 src/org/bouncycastle/crypto/digests/WhirlpoolDigest.java delete mode 100644 src/org/bouncycastle/crypto/digests/package.html delete mode 100644 src/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java delete mode 100644 src/org/bouncycastle/crypto/encodings/OAEPEncoding.java delete mode 100644 src/org/bouncycastle/crypto/encodings/PKCS1Encoding.java delete mode 100644 src/org/bouncycastle/crypto/encodings/package.html delete mode 100644 src/org/bouncycastle/crypto/engines/AESEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/AESFastEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/AESLightEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/AESWrapEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/BlowfishEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/DESEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/DESedeEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/DESedeWrapEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/HC128Engine.java delete mode 100644 src/org/bouncycastle/crypto/engines/HC256Engine.java delete mode 100644 src/org/bouncycastle/crypto/engines/IDEAEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/IESEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/NullEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/RSABlindedEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/RSABlindingEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/RSACoreEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/RSAEngine.java delete mode 100644 src/org/bouncycastle/crypto/engines/Salsa20Engine.java delete mode 100644 src/org/bouncycastle/crypto/engines/package.html delete mode 100644 src/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/DESKeyGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java delete mode 100644 src/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/DHParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/DHParametersHelper.java delete mode 100644 src/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/DSAParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java delete mode 100644 src/org/bouncycastle/crypto/generators/SCrypt.java delete mode 100644 src/org/bouncycastle/crypto/generators/package.html delete mode 100644 src/org/bouncycastle/crypto/io/CipherInputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/CipherOutputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/DigestInputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/DigestOutputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/MacInputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/MacOutputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/SignerInputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/SignerOutputStream.java delete mode 100644 src/org/bouncycastle/crypto/io/package.html delete mode 100644 src/org/bouncycastle/crypto/macs/BlockCipherMac.java delete mode 100644 src/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java delete mode 100644 src/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java delete mode 100644 src/org/bouncycastle/crypto/macs/CMac.java delete mode 100644 src/org/bouncycastle/crypto/macs/GOST28147Mac.java delete mode 100644 src/org/bouncycastle/crypto/macs/HMac.java delete mode 100644 src/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java delete mode 100644 src/org/bouncycastle/crypto/macs/OldHMac.java delete mode 100644 src/org/bouncycastle/crypto/macs/VMPCMac.java delete mode 100644 src/org/bouncycastle/crypto/macs/package.html delete mode 100644 src/org/bouncycastle/crypto/modes/AEADBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/CBCBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/CCMBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/CFBBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/CTSBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/EAXBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/GCMBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/GOFBBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/OFBBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/PaddedBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/SICBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/GCMUtil.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java delete mode 100644 src/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java delete mode 100644 src/org/bouncycastle/crypto/modes/package.html delete mode 100644 src/org/bouncycastle/crypto/package.html delete mode 100644 src/org/bouncycastle/crypto/paddings/BlockCipherPadding.java delete mode 100644 src/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java delete mode 100644 src/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java delete mode 100644 src/org/bouncycastle/crypto/paddings/PKCS7Padding.java delete mode 100644 src/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/paddings/TBCPadding.java delete mode 100644 src/org/bouncycastle/crypto/paddings/X923Padding.java delete mode 100644 src/org/bouncycastle/crypto/paddings/ZeroBytePadding.java delete mode 100644 src/org/bouncycastle/crypto/paddings/package.html delete mode 100644 src/org/bouncycastle/crypto/params/AEADParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java delete mode 100644 src/org/bouncycastle/crypto/params/CCMParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DESParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DESedeParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DHKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DHParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DHPublicKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DHValidationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DSAKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DSAParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/DSAValidationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ECDomainParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ECKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ECPublicKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ElGamalKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ElGamalParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/GOST3410KeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/GOST3410Parameters.java delete mode 100644 src/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/IESParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/IESWithCipherParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ISO18033KDFParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/KDFParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/KeyParameter.java delete mode 100644 src/org/bouncycastle/crypto/params/MGFParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/MQVPrivateParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/MQVPublicParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/ParametersWithIV.java delete mode 100644 src/org/bouncycastle/crypto/params/ParametersWithRandom.java delete mode 100644 src/org/bouncycastle/crypto/params/ParametersWithSBox.java delete mode 100644 src/org/bouncycastle/crypto/params/ParametersWithSalt.java delete mode 100644 src/org/bouncycastle/crypto/params/RC2Parameters.java delete mode 100644 src/org/bouncycastle/crypto/params/RC5Parameters.java delete mode 100644 src/org/bouncycastle/crypto/params/RSABlindingParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/RSAKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java delete mode 100644 src/org/bouncycastle/crypto/params/package.html delete mode 100644 src/org/bouncycastle/crypto/prng/DigestRandomGenerator.java delete mode 100644 src/org/bouncycastle/crypto/prng/RandomGenerator.java delete mode 100644 src/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java delete mode 100644 src/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java delete mode 100644 src/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java delete mode 100644 src/org/bouncycastle/crypto/prng/package.html delete mode 100644 src/org/bouncycastle/crypto/signers/DSADigestSigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/DSASigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/ECDSASigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/ECGOST3410Signer.java delete mode 100644 src/org/bouncycastle/crypto/signers/ECNRSigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/GOST3410Signer.java delete mode 100644 src/org/bouncycastle/crypto/signers/GenericSigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/ISO9796d2Signer.java delete mode 100644 src/org/bouncycastle/crypto/signers/PSSSigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/RSADigestSigner.java delete mode 100644 src/org/bouncycastle/crypto/signers/package.html delete mode 100644 src/org/bouncycastle/crypto/tls/AlertDescription.java delete mode 100644 src/org/bouncycastle/crypto/tls/AlertLevel.java delete mode 100644 src/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java delete mode 100644 src/org/bouncycastle/crypto/tls/ByteQueue.java delete mode 100644 src/org/bouncycastle/crypto/tls/Certificate.java delete mode 100644 src/org/bouncycastle/crypto/tls/CertificateRequest.java delete mode 100644 src/org/bouncycastle/crypto/tls/CertificateVerifyer.java delete mode 100644 src/org/bouncycastle/crypto/tls/CipherSuite.java delete mode 100644 src/org/bouncycastle/crypto/tls/ClientCertificateType.java delete mode 100644 src/org/bouncycastle/crypto/tls/CombinedHash.java delete mode 100644 src/org/bouncycastle/crypto/tls/CompressionMethod.java delete mode 100644 src/org/bouncycastle/crypto/tls/ContentType.java delete mode 100644 src/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java delete mode 100644 src/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java delete mode 100644 src/org/bouncycastle/crypto/tls/DefaultTlsClient.java delete mode 100644 src/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java delete mode 100644 src/org/bouncycastle/crypto/tls/DigestAlgorithm.java delete mode 100644 src/org/bouncycastle/crypto/tls/ECCurveType.java delete mode 100644 src/org/bouncycastle/crypto/tls/ECPointFormat.java delete mode 100644 src/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java delete mode 100644 src/org/bouncycastle/crypto/tls/ExtensionType.java delete mode 100644 src/org/bouncycastle/crypto/tls/HandshakeType.java delete mode 100644 src/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java delete mode 100644 src/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java delete mode 100644 src/org/bouncycastle/crypto/tls/LegacyTlsClient.java delete mode 100644 src/org/bouncycastle/crypto/tls/NamedCurve.java delete mode 100644 src/org/bouncycastle/crypto/tls/PSKTlsClient.java delete mode 100644 src/org/bouncycastle/crypto/tls/ProtocolVersion.java delete mode 100644 src/org/bouncycastle/crypto/tls/RecordStream.java delete mode 100644 src/org/bouncycastle/crypto/tls/SRPTlsClient.java delete mode 100644 src/org/bouncycastle/crypto/tls/SSL3Mac.java delete mode 100644 src/org/bouncycastle/crypto/tls/SecurityParameters.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsAuthentication.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsBlockCipher.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsCipher.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsCipherFactory.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsClient.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsClientContext.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsClientContextImpl.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsCompression.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsCredentials.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsDHUtils.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsDSASigner.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsDSSSigner.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsECDSASigner.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsFatalAlert.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsInputStream.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsMac.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsNullCipher.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsNullCompression.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsOutputStream.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsPSKIdentity.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsProtocolHandler.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsRSASigner.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsRSAUtils.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsRuntimeException.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsSigner.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsSignerCredentials.java delete mode 100644 src/org/bouncycastle/crypto/tls/TlsUtils.java delete mode 100644 src/org/bouncycastle/crypto/tls/package.html delete mode 100644 src/org/bouncycastle/crypto/util/Pack.java delete mode 100644 src/org/bouncycastle/crypto/util/PrivateKeyFactory.java delete mode 100644 src/org/bouncycastle/crypto/util/PublicKeyFactory.java delete mode 100644 src/org/bouncycastle/crypto/util/package.html delete mode 100644 src/org/bouncycastle/math/ec/ECAlgorithms.java delete mode 100644 src/org/bouncycastle/math/ec/ECConstants.java delete mode 100644 src/org/bouncycastle/math/ec/ECCurve.java delete mode 100644 src/org/bouncycastle/math/ec/ECFieldElement.java delete mode 100644 src/org/bouncycastle/math/ec/ECMultiplier.java delete mode 100644 src/org/bouncycastle/math/ec/ECPoint.java delete mode 100644 src/org/bouncycastle/math/ec/FpNafMultiplier.java delete mode 100644 src/org/bouncycastle/math/ec/IntArray.java delete mode 100644 src/org/bouncycastle/math/ec/PreCompInfo.java delete mode 100644 src/org/bouncycastle/math/ec/ReferenceMultiplier.java delete mode 100644 src/org/bouncycastle/math/ec/SimpleBigDecimal.java delete mode 100644 src/org/bouncycastle/math/ec/Tnaf.java delete mode 100644 src/org/bouncycastle/math/ec/WNafMultiplier.java delete mode 100644 src/org/bouncycastle/math/ec/WNafPreCompInfo.java delete mode 100644 src/org/bouncycastle/math/ec/WTauNafMultiplier.java delete mode 100644 src/org/bouncycastle/math/ec/WTauNafPreCompInfo.java delete mode 100644 src/org/bouncycastle/math/ec/ZTauElement.java delete mode 100644 src/org/bouncycastle/math/ec/package.html delete mode 100644 src/org/bouncycastle/oiw/ElGamalParameter.java delete mode 100644 src/org/bouncycastle/oiw/OIWObjectIdentifiers.java delete mode 100644 src/org/bouncycastle/oiw/package.html delete mode 100644 src/org/bouncycastle/util/Arrays.java delete mode 100644 src/org/bouncycastle/util/BigIntegers.java delete mode 100644 src/org/bouncycastle/util/CollectionStore.java delete mode 100644 src/org/bouncycastle/util/IPAddress.java delete mode 100644 src/org/bouncycastle/util/Selector.java delete mode 100644 src/org/bouncycastle/util/Store.java delete mode 100644 src/org/bouncycastle/util/StoreException.java delete mode 100644 src/org/bouncycastle/util/Strings.java delete mode 100644 src/org/bouncycastle/util/encoders/Base64.java delete mode 100644 src/org/bouncycastle/util/encoders/Base64Encoder.java delete mode 100644 src/org/bouncycastle/util/encoders/BufferedDecoder.java delete mode 100644 src/org/bouncycastle/util/encoders/BufferedEncoder.java delete mode 100644 src/org/bouncycastle/util/encoders/Encoder.java delete mode 100644 src/org/bouncycastle/util/encoders/Hex.java delete mode 100644 src/org/bouncycastle/util/encoders/HexEncoder.java delete mode 100644 src/org/bouncycastle/util/encoders/HexTranslator.java delete mode 100644 src/org/bouncycastle/util/encoders/Translator.java delete mode 100644 src/org/bouncycastle/util/encoders/UrlBase64.java delete mode 100644 src/org/bouncycastle/util/encoders/UrlBase64Encoder.java delete mode 100644 src/org/bouncycastle/util/encoders/package.html delete mode 100644 src/org/bouncycastle/util/io/StreamOverflowException.java delete mode 100644 src/org/bouncycastle/util/io/Streams.java delete mode 100644 src/org/bouncycastle/util/io/TeeInputStream.java delete mode 100644 src/org/bouncycastle/util/io/TeeOutputStream.java diff --git a/Stubber.jar b/Stubber.jar deleted file mode 100644 index 0e082799acacbb1c077c6e47adc51c2aa8e3228c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11737 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
      M6+Iq?nng zRG~FisL(=NxKPWqT&gsA=ec2|w-yGA8gVOvSLii=;pzKTYT`9!`q!}%Z(u9${Wyg^ zjKzEzw~`R{@08YN>823&OKK{XgRp8W%0ZY#8eR0(Us5X+xuC~esmEU%AG|fEM~j~K z8`AR{@R(-KN z%~wBraaJ@^Fl+IdA!BGW%7=|fgp;2sH%yx&=5YTFok~;oOGYa>! zy-&vS6Na#{$2}}}-hPUjZc>k?sCJWjG({~kDMeFM%%l_r*TV&C9nPl|_T>@da6Y9l z5^^bpbTpAv84E5!_5Ue-aaR$Z!aj%_aioN9)ETUH+hzmCZVL~}kX@Cd}i(0+84lz47daB2JVv?KmJC9ML7 zr3Ix>nilk+bTAs~XWE(cAf`sO9vUe@@cmO%k?YK2gs$behF|u*mC_CYIsJ&K(y_`*r!J&J%Q3%+oY=y}rA@h6Q}_~^&KFnOd3 zQHJOr7}wRtE5_;xcndQMLz+qDGA5M<4P5@7=bD+Pe=iGhU`8~Q971X@YD}Yh2m?<> zc?M!nt=_wR)DF9f=P`5el)3ywZyv@-D<<&G$8UBQ=E-tO~39v5Ee~;~+$!lS0$p^uun^*cy*DN=i zKf|WJ5Pz!``rWSkPuYEuOUX^EKV3VH?lXLC{;S@i#HaJC-}M$L5aKIR r$o=A3%1Wj0eDkCp+r9g(2@U_e!2G<_xw1-6=nM;srv>1Ts(t(q;z})O diff --git a/build.xml b/build.xml deleted file mode 100644 index e2931b4..0000000 --- a/build.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - Builds, tests, and runs the project LibraryProject. - - - - - - - - - - - Currently testing a library project isn't supported - - - - Compile is forcing compliance to the supported API's/features for maximum device compatibility. This allows smaller - code size and wider device support - - - - - - - - - - - - - - You can't run a library project - - - - You can't run a library project - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zipping rim native code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zipping JavaSE native code - - - - - - - - - Zipping Android native code - - - - - - - - - - - - - - - - - Zipping win native code - - - - - - - - - - - - - - - - - Zipping ios native code - - - - - - - - - - - - - - - - - Zipping me native code - - - - - - - - - - - - - - - - - - Zipping javascript native code - - - - diff --git a/codenameone_library.properties b/codenameone_library.properties deleted file mode 100644 index a80328d..0000000 --- a/codenameone_library.properties +++ /dev/null @@ -1,4 +0,0 @@ -# -#Wed Jan 09 17:59:31 IST 2013 -codename1.languageLevel=5 -codename1.version=1.0 diff --git a/codenameone_library_appended.properties b/codenameone_library_appended.properties deleted file mode 100644 index 3dc34e8..0000000 --- a/codenameone_library_appended.properties +++ /dev/null @@ -1,5 +0,0 @@ -#Place here properties that should be appended to an existed property if exists -#in the project codenameone_settings.properties for example codename1.arg.android.xpermissions -#is an appended type property. -# -#Wed Jan 09 17:59:31 IST 2013 diff --git a/codenameone_library_required.properties b/codenameone_library_required.properties deleted file mode 100644 index 9bee35c..0000000 --- a/codenameone_library_required.properties +++ /dev/null @@ -1,8 +0,0 @@ -#Place here properties that are required to build this Library and if they have -#a conflict with the main project or with other cn1lib the refresh cn1lib action -#will fail. -#For example codename1.arg.android.includeGPlayServices is a required property type, if the cn1lib -#needs the google play services but the main project marked this property to false -#The refresh cn1lib action will fail. -# -#Wed Jan 09 17:59:31 IST 2013 diff --git a/lib/CLDC11.jar b/lib/CLDC11.jar deleted file mode 100644 index 06c25f537ddf667ceb2b4d99b950d1012436bb0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2103535 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

      ;OOwpONW!$Z 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

      g$% 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

      _H53UUf4G={o5hf7WOL#( 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 BzUlw~ diff --git a/lib/CodenameOne.jar b/lib/CodenameOne.jar deleted file mode 100644 index 5825328a701e207b787f1bedf08e239b1ce3a37f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4488132 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

      pyXv9R((VU4#2@qXZN;{#$VuzF$i>la3Y563`C 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

      _@mJ>8VYx1&e~F1tQ2$EOlJu^Uuy-vZK3YCE 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 z%0AaNL$$365udLq0lbIVU3T~Gb-$9Ek`p;xF5%3U)r5;qYURpB6NeS-HwBM3tT~Xg z?Z1}8_`2<_aUH?lH%cicF7OjRast8ouv}l=2D-lu^It%f4`wh|bjb^UlQ;xfN(cC(@LQrba=$4zu$gB!s&mQ zYYx*0`13IMZFxEeNCoAb$wqrJo9a@Iq02aSuHbOFlAH|=MtL~}4(Cja3$6}g3)f+P zDI~-gw^c7?gC4{7tUNIqM4Bvh+jJ%64tE=Mm6!qiBOInnr-;nqFTpOUe<@n*ehUw* zHGjJ5&AX{te+@hb1H?G5aeUC)($;heL?r$ei^UjIt7*i+N=EBUiWT;#$k$?}8J{$V zB+UezU%)QcnQ?m;9MZBvg`CsH3B7E(c`)K<%Gt$d%JPuUE~Bpvv3Nj~LDBKCZvc#+ z4%FVcjVDTE6j>jGYV~GJ2X$5z{T*kh4_KCOd5`?`Ns*T#+#rUKZ8afu+Ysepgg!8T z0Ly(OWXy+@Sf`cmyYbV@ZUbfA_eg}a-)V#jw%B`3-A%roJ)4mqT25$`Z%%;|p4zP# zg>|p$CNKni#^zQQQIa{y5z6uDVFKd+AMBita1{8x_$CWagV4-J{~Y576rYO!N>+oSQx( zf-1R$&`H4~#dK41GqE4XAAUHqXF=Zvr^JX35o=r1G>0{HIxCz{v4`HIY&Awz?(+cQ z3?1FQv#JAwh*%KU*n&B-{!pc^EmZ^Ik*p45I_Le=BMqIJ9nwG}vzBX*G}5eOt!b@N z)h49j=^E8_AxJ}8{Ujlcy(W0phr-t76L?C&%ERZ6tZY$~odVX zp6IX7nB<6}<3CPJGvab*#N{3+M!+O9wFbe*G$n_p4E|)0btoGy_Y8AnN{sFqVsy_i zN9&zqQep{AGP6_W*rb`0bnE~IOSFb(dX!_53p4zJLQact@k(s@36Ym62;rD^-N z)`GKf2$j7Y+51*K2_d&n(gB%@8dbJ7UKVmT#AatHB%q%vMJ(waD4`?DQbI*#8RxQR z8k}ns;-c~&VQT)5B1Jrph}w^N9x2tz@blOsOmCChle}BDZ*HVK%ciV57%zVJwfWb2 zkA)etNAGHlT#bvrEwEJ{yqy81;3&XRevZ!z{uZ|Ll;1FL9o`eT>y`2oVdatdR8V3T ziPu7Cjpk02pJyCPBskVrX#0amMfu(Ck#$8LiC2KM<&J-G^yCTD@(kCBj0CpIzmu%d6kWo)2cds0%uiiE>I_&a{cDwx5A>$<=$=EZ+q2b>dd0e<^NGKb>@FB zqW|AOrq29-03$n}8vkN4b=m7rrdF&kOQxOzt~nK4vkEeGHDv0Ve;Jv2RKK~WbJ*42 zv7ns3Y`)_cAiF}x4X)+dE?N5*2NpR}bUO#&8XbUP)9EOHlfco6FEU#3MMgWWm$+dQ zllcH6uYub9mmi7iO4?i^P&>Malr2xWly)BYD9-Z=Fu~7pz1ljbEm^VXqUP4E>TTZa zoo*D9#Rd2nmQ;+71~WBeKOYwA#2{zg$VxaaWVv01m5UWS%$mjnn*n7p%xmF(Wly=& zb;>=qZ$vz&+%kMG(TdxacFNJ37bRq?o}sEse9x30wt}j2ir&R6y4T2x(~4nQxr4M1 zBO)p(A4a67gS2P_PlNp!k}gYwWn+AZj_{E~bfC?~3wb+KhiX6ClS#od&eT75j#e&A zf3f$u^6yl^=}$%sI-(m{mhm*^Q;K>7fwS|+AR=vlW(M0|n9=rEP)NTqGwiRKb1$2t z?C)~W9Rc;?Bag^WwU0%Ta7?-clu|ZSh!90dsE}dihJ(HWb)-Kr^ZPPi3n?GGrxJtk z<4QiE7@A-+=cHSl`@~MIR1F`T$TBZo_to>Gj;Whu3+akn`d=3T34S- zlRTy5-_jVLd?97NsNXN8%$HN{2*z5h_hMqqm=ov?thZTs^n*S`{#P`7fJKWG^^YJ z@~f2jwJLvEPkw{1UL5(RQG58kKJuR`{fCr!MQ{8uDfhi|%u^|O@SS7+tmH44_2~C+ zdj0Q7`R-jLaOOA%zA1Ah)mob}S5bpaI48c#Y(-Kod{>z7rfgNpT%%W#xbaPywv??V zS_*y^Ql=AkzBu#M!%#^-CH3DZ5P9KJn#@(HAqnA z=SI5s^Rj#xEzV5^Zej;=)ssCpm&#>c4bl&sd@r5b(YN8Wx@XCbb6gplTRnK-of`>& zw4ZknhnVfDwP{NkXlxgk>k1a#xqQBaNNUf^P3=J z${If96=6KxBVRv+WPy(C-nqPKORIpvUsVj++=d%}RWR`?of3c5JIjL{iB)=<;@HE} zFC!?6Qw%vT!4(}qK@}SI2(GA#{RH`rYKT{w1HBTKtDuM@h};+BoEbEQOBNICvMd9r zh*_kP`8h77#M~@K-EdwG&3MvBGdZ6Z>73-qBk_zpp_C<&UPl>2;v%T6Y`w1sRhO;n zwUcrCBdVRH5%xu)f+$DUMT8eFXCtNX>29Q0EuH}w+Iov_G3HhwZr4f9Q_`m7R)dep zA)y^=A-wxLgz3=CmZnXup&f2Vz>xL1V%A30`uE(B>pk$1dqtz}%Axv?UDOQ*Z=lyI z5>J=GKj_HNjxrw!apZ#s(Naf!&Xrisa~>_U2Pu@!8xQz6khBMfcC;O%s>X(P9N)I% z?IB4!L9LzGSNR&}l?&}8c7$aTSB*w8-`dm?+C%N+q@5Dl2HMA0riS(~wd;`P0=aq* zdS;=WW|@gON4L}MjL;ro;gR&Jd)1eSNrLuBC5MM_2l4G%iR>QNy08hk>6t?u=elcP zLwJfehxQmnFskqwvy^d!h1w`$q|@e{9%)_&Vmxg+*3K!%(Ep%$K%tZ9ufElEgc^ju z{JyG6EHQ_@_ z@Zc26@;k)I$@@dRTHU9R+pNq!N)f!;N8v%37Wi0k%TRVyTqEp>CM_u4jTRT%!ZP7< z%b$TNU1kt`8>g*VvMlR%yHMYJTsf>?ScF>Z!SK$Brt1rIPNl96LDf)pb1PX9t`ybu zCh?66H?lrlM;F%QP|h?r(D~Lxy{1`c&B8M9oDu89yjn`HwDqfD?BM);NsexWj@+-m z(_YjS_oMv(+BB+a7_%-$QP|9JAo5c`*DbNGib#k!RpHArjk6n#=@h zZr|P_BT2%^`nUWG%bX2W-p*84(Fu|(@6CCCHj$iVQ2O-N>j$RqY0c{*SC89&jDbI( z&|x*OaUfE-N{CKzzfdXe7m~&OLiD&_$RPI%VdQ=xIovO_hWiBtyI*J~exsI?+etm%A?IRh zorS)LBGR4+=VS?dkdxq6oQx~8tg7o={32e$ouIiif@V3b6&tKS&=B#~Td_orI8?j$ zGj}SrucY=>Fw$1L8ojPc|ENX<@Kv8kSLHH1j{277b#Nawf%m4ND!rcEnK8gBqiQPX zoT!^Dr!rLEj5#0P8*I4cd(EIs{T?$|uG3Ni6yH9BGDFB&)}S2p@%kwT(^F!ODF>6B zI^_%_XI90qif3?vDeKx=Y8?Iy0lV~zMe1bx7+gLqTl0PDoy%=7N#@1?;@%E2tuPKZ z!Q$JDkg^SPmh<5jx5K*ILLYb1>swK|y?{R2PK3A%QSIBoT-ph#d$DV#Vs{NdjCv(? zSZX;OLUa=ioXO~2%~e1RHRc+w5JOP6AEyctuu)%b;8(L|5`fCH-l$v6!Ti9s9IBru z%t01%TB2L756;H0Q+Ip4!7HixD!y?wU%Un}>l1SZbsw?M zn!0^v^tw9p+d6yv<7Ui5z%n*Ju0F8a4NQd_;bgu&_JJ|c2dsipMjtpKns_xD%Q`ul zt<3kouj)PY8WvE9!!?KfjH`*N(t6eERIglLzS7#VmEJ|AcT?&6d#F@PU6sD2e5L)$ zR{8*yevnEZ?4eTO6IJ@w@|D(kd-REf&NZ7)N(y*3!W_Q6X{di z@U$6sE7N>RMZ;b*o|V1Z4AU~fx*Wf0ZP68^yJk&!Y#K0t%j>PbXbX`2Rf5hCDgyE;|3sUc+Y;JDffMX*+ z4sT%`w2-Gw%??4sRD5DaLjYcqfq#Ao^q_DEhEsttzoUV_2lxDeA$SE||DOesS5h+f+AX=HqHn9(Nbg6^k?*7w<7AOQkVkl{=5gsGWRJw&zCKb1nL(+HxenU!h?z7iH{8r^E-`fyc#vfl2LTK-CJ{|!;r zKfq)EG>6!PInoAZuB|YOY|@;LBw@X+HXCi)Y_T=wBHPbgW^2vWc7S=C9ckVT_u_r_ zAiTC6%t?9-QDerLC+&Fi6?=&JhMizuvXjhD?PT*?JJtLhrQn1;8LrDxJIXGDS+JH9 z|LL~Tt|MmNnRsqHn`1K5sY1){4!omD};X>et|jbc_lfl=`?lOlH=sT33-d zZPmKU%-U7!sxqgqT9?eMTa{mlUe4DMtM#BSL536T4adV;o9#_IC6b6=7Dc#;EvAc3qnTJ)2dlEDwJ+t43MA5!tMM%JMC7S-Ack zVQCJlswv+duQhfv?Rf{EdZ!s^Z=pT!#&_y_&>q``Z1gr{qVGk6>~>Ty??8*}P8R6h z7#_YKO|pB;x%NKSM!(l=%(Zc2)J9rlcH_TS6VZFJ)(#UVI&1R4_-XT@*Z^mVPRq{y zK-5+7!u^U1KU%ghyqGeD>xv8SD_a;IPMN~B#f3jrwy<}MUEJnT57G$lP5@!|YEgn=pQl=FfiUE1CEFd36 zMcre90zfw85vT{`2LSTJ9stpC%MOsgZO9%+XT%4xf~HX)mt9 zf5{t^T#~exD)TZWmn*qK$(1R4m42^Qf~0?-y;fJ(sqQx>?VHkOneUG`>*{(vdyA5{ z>h=bGl;lZ!qe{Mw_+{$Hn*=NsR;a=X!BQcpD%6w;efCLva~j8U@6gpdmC&ds?YorR zqU3F9g)2+iTXnMwwTqO!EoI-EvhPdT+f()qT#%;hT`7Ba%Dz8k?@8HvQ}(`;-JP=c zr|bt(_JNfBV9Gw2vL8y>52x%$Qs&u|eTa~|N&9fpK9aN_RmG1gc}&S3C66oFtKJ+0(ZN*K{6?PscSP5W6T&*=79C7)A5hdpW0DtXd= zUdb1fpj`5#{gRR|EBT6&uPQ;sLD zr2V!Mv`(J1sChi8A$!t~5&9x60nUKh2`LCNI<<{b8GYY^E)p>_|@ioC(6t(Xxp-h z6jvLho$WAaBWs;3Bb7D}@J#dV-EHmDluh^94X+2&HPJ*fi**ngv$7^Ee05M10@y`Z z&jN__TaC-Q1KXd=0US^F?lR0dAj;NOR$dW(3xH4s$oHzEfURt5Y3s~ds315gxaaL` z;5wvqyq&)r$lZyZU2PX@Mz$}F;tVHucs*dpH7|WEABIcZVqGjWv3f`6BDn2s(%u*% znT?il$&-*mVykOvv3R6MFV%-wRuAehDkwFQsGthPZ+R+foY>R&ZS12Mcg8=c+gQ!f z(`?Pr(`;4I)A((y<|7Jg)@`ij=xMg*=xMg9=xO{mRx|91ILx|@)f_#|)*L;}Ruw&s z-R5N+z3Wa%_uk7w%C7A!N|B^!QH0p#vMYOCOTLN|f7v<91hupZzqFCay+`3QIZyE= z^Y2TbRGg=ItCDJMZ zbo2<$ecwBZ-oPGGCUSQCJ&avBP5A7e@_%a>At&xd$| z|3nB!ndB)YPb>M9`9#lpAt5~H&-7iZa#P4uyU=rBxZe{cUYv?J}P(0t##6cU5smC*jt z{!(E6DTHW6JB2k5AE||!tx~|4Fn;KZr=Kfz$*S`KEqFM2lvRKifENqT!ZDstY>XwX(cjTg5iF({pIlS&w3( znsB?GUq?AzX$^XBbD8;*2eh|Fls@a(D|^OMBs&%n(S6Cr`S^3h zdO>}hoyKLA`HJRoA2ifriaO;K3JWWQ9sz<}V;4v_kTAQ_4m`ZqUMbtny@sohY!9SB$b^T+x2Q4?r1MV!IrZ$&4X_jttpkS_a+3RYIhb`-OUPzYtLF z7aGd_LM*vowl??6Udiub*wP9_X9+^5J1@XWBh$2#k=!OcoBfMC^Ewv`5XUV<(`ON} zjj}oyX&2pyTazZb(dVd3bw20oOk4`bI*H(K2X*?u!kNm)P1R$_LA}rU)MLo`bC>D- zWljFld&|R9p44;pnE{B7krQX4tEKzQz;y`A1|dzBx2zD29%bz_L)P)Fp*&gc?_EJ| zrSFp&hD>(wQyJwT;3fifAqsCt1MhD43?l5=lG-an~r`F zMUT?s%t838*YnJ1f053N@fS6jvHl{N8MgqQ3|;2-EdWZRSu# z*VF|=)8MYqdzhR7ro;A{X_>=`4>_x9Sk*I5(Wh2!25004@IEZ#|_+Umg4+(IpT#CsB4{qvev0+kE}#}U=@K_S0goCgJSVogdwLx zoUdczoPmYhnZ(jO3(beKq36zloI4kKYdza%ldUrw*f*OI4!5vPw&E9JBOBr-dxF_) zPr(<&>E=8Fik)vaqm#S^(e{NXOKD;`zlL^4G_lS^#H|onmRbf980+gy)63Xhzrj@i zd_Tw4+1F{;;~X7c;Hr}PYRxy%_K;ZRTWEav>HQpUqtsx|9)Vo;h&#;M5x1H~`jdg2 z>3^iDz;Mo7))4rNMkd8k%cqhaIW<$y&*0r=bo7${Q4vOdrV3Crin^&4BlnH+$dp0~ z9wK%cj?`@|;-M+X$PPy^bR=4K$I_7F(1=@RuAmFAc8#A5kYjoKJFcOJQ}(;Ap#Yv+ zX=f9Y>lvD5MaoCbn@6`uR6Ybqq9&;=_Z7tD6kuN1biMnS*HRf0Rcs0C^~0#TxQs0H zVy=AQcg6}=<_bgg_`>!s+8`a3Z>g(~zQcSSm{>x`EYt6D`n`^2Jd0&Kn-#qq-5z03RXM-&4qe%CpmYqy57$uxR=#+A2WJ4Yw3P-8nWnC#JU&pdl_r# zTJvFa$v(mgdx(+`^Ts0xoIi@>@KI3vW1!Q$%>5^r%lmRGV;%lbeoQ#EN=lAG+vr8E zAZ5+Z+=Qt|59{Y3`+)DgnfPbFbaVb&xvBFl^Q&m;aQceIT2n`w3)N~d$YnvkaZbF- zQ9DJId7NLJtFD?zcfX|?t7BRZ)ty{i-506uOZ%yg!(ddM6qcl+FjmkpGHwz9r5i@p zq_mR!aOS_0b%&UWTpR);bm~nlBMzm}*Yk1X+}9Tt zFNK#}oqio*(2TwryPZzc<;p*8W+lz4%X4<{<5 z)clxjKwHi*>M6!!03%Y*C=6p9#?zZq!1u>;m_Gp(sg>+6XM^cBa;Q5WPSeGxO5MQk zJ2=MeLS5=k_MQ)-F7+sf6Qh1Rh0HemTEF-)^gaS`mBusf(B~!j^9CtwejQ zf=JOpaowY1b&t=@L0BJA-8-3aTHg+dQTMG*%UM%|VBV{wVClajEjMy!k-Pfg{J=Pc zN;?VH1&5k?&cK6hgTby0$FPT)279>sxYz%fn(Lyexh~>V9D(u6XaiP2-ZdlcFwOcU z0xe(FPQ_N6yUOmwKI2Gsj6+1iK|^X*YkOO+?SW#Wre;R^jahE5(me6IH;-bQaU)uw z2D`D8J;v19S!Nu3qUm-HYIcMN!USs($Ma>J&Q}x0bFE!~cF{s;loMRjr2aO?3}NPp z@>m3I@dvjdp9>+ZEA?z!uHkLDhQoD=8h$jt8e8oszNM!WP_Ro$Y#j@RZ z7u_d3xL^d;oPGz+98t-Uh9-SDoh)cJ- zb#%-b=pUSE2HCSv!#W!^taBLOb5SX4Lj9`MfhNQ`5)JokqZi~Fy&&6Y@mZoq#|enj zi`&`}Yio{xU=3%FBJmw539et4huACp>;U46TqS(Vl?Ug{VsLIQ3l0pa9>6)c7@XSx=e_&s9T;il z!8xlKoO{ZGBNrZ?u#WeRVj`Ce)`tM+!}|dT)?XQLn5-p(wWlmNaPN8mr)01`2{=#f z2OPML<-sW#tk0DN2gYF!;FJv3bAa>we!zj@Sst8{!FsVQIHC_r2P<7}uzmuX5 z{V0cbU`&?>r+Bbn8<)d7u%yd?qcHKsD=RS!aE9*(99ZdPz^N%6ti;%|;J^*<0i5E& zN=yNqhW&s87r#6>#eToxPzYGuGt{Pwep zuyW!Qz&W)%IF4Nbksv`>8F0cqCJH$HMP{Bmz$ey~1qZoA8E|x{i}8Zo7Mj=qIL-S3 z2YE^vaC8bQ+9VR^mjwrbSXBPui1=Fs!E&yQ^2Rj))cRYou-jvrmg_J=DIM;QASS3+MY>ql2o28EM*JV56?R3OVbi~bc#5?GSchV8>q9bmh zBi=(t+)796I)IKq7}`TecwowP#NA~(0_j;)Q=DwjdMUvsA7p|)=ql-%s6zA?RTro6 zm`NqrlPwRh{+SC&Yco4Y2V@Qr_%A2IKK=n?ZC z@-NBd-&&A=X)gchg8a*J`AZA(FL(KB&n{}cBKOv91#exMd+WUqMMf&jUyj4`j0wh? z>R_Dd9~@$a1QX22V3Ii`IMhrIrkEpw26J?9n3)$$GmC@iW<@Z=tPW1E z&6k2@=J{ZS`Brd>`F^m{{5)7?UJllnKLw|mzXhk;%3z&M2WQ%W!C7`_aE=`loNFfq z>up1@!5$v8*kgiLdwj6bE(|u?6NB^Ysloa7^q}3I6?EA3!B*QATwu2bUA8;uwig8# z+AD({_PSuFeOqv`y(M^q-4$GFZx1fFyMrt2gTYmK9LJf~^Lvf`ux*T(4(NLL`5xQ~ zfdPq;7?Pdu&Khph9&9M-d_U>4S?^PppZVFW+m+>~e>Uq5W%)Ib&AL-rej#MD?oyUt z4cV-_mF1U2HtYS$^6Mg-b&sc#*t1Q1lvRU^j%P*5`)^26_wc@g_-ec}pmR};- zw?3dOzlO3|4=Bqooov=-W%>1!t?Prz^2;Xs)`QCO>nfY|A!YgHl+9{ZmS0l?CS%oj z%^vgNJ($Rn>sM4Pmzh2#3XMb5ihb zvy|zzCfLQ|y3L#$yw7Y7Zf9}bVY-65%o~Ec&DFvC&9%Y3=EmSYa|^cp?+HF&?g}0- z9|%5ZJ{Ww+JQ{r1JQ;k%d?I)lPpyxbuLK`8&jpW}7lS?K2f^d!N5K>3*TKikE5SY% z+Q-pO_=HUbpJbsu%|iQ>9T9xmjtV|&Cj`&f!-8j7X#d7S`@EeOe8DaVzGRmMU$(1* zuh`Rq=j^$`^LA74H5S^}ZCCIOdvWj|_LAV6_S)b@`}W{l_U7O__O{@=_P*eI_Ws}{ z`*83B`(*G#`-$Mk_SxVk_W9ta_TPh_+wTOwus;rdX@460+Wt0p+5R>7js1J@yF^v+ z`$YfXKNACjSKQ)s0-i)xsL2A17N@R`f%z-S9#ybt!;SMPSL6o8AF_hK$M&>5pAsFz zsPLJ7Pva1StAZ7x%^iE)i4I|}L${rhCzPDGl!{7ISy6@TBWZ?LROgWiu_Pj7!j-f$ zbQ(lgE&5Oqb^CY`pcUmg322{1<%@~!y?L-4Iax8(q$-BRz=<<9j*GxSg{=%YFjSu? z;_p_J=Om#07L{*}`b`c*l875V#&31>n~r{K^qU9MiS#NO0CTDtP;rx3{@V`vu=szPJ37$PlU zPbiFxcH-3EyuATr@BVn9xj=E4yQ~+w6&))!Zd|pat-E=1Nhrke)ljv=(}){Jq>+V< zOqx+ia}aUTP=)H=e>}8U)!4M;th##h5f(4<-w;tK_Bj{K@P90#Pz;bB;~|a?krxM9RH%vpCA#~urL=G8>5mEa7HiOQwX0vo`uu2dVV0ac<5sp>kOU%lmm z$PjSMuPxQ&)|PoAW!@C4EtRV+g*MwDN(YF11)+i<$~}zSu`BXfnrBkn;a}mZyKzMF zl`GLR(O&~k`?Ttc;}Nc|29O3Ngd**44omaRX>t@kJ#8kN8A^^&GE;d+>Z(zm!jIO~ zF-m47T}W}_htUzZu^r#My-N|V8OC0fCYN1$J>~*B0Kcj3PIcxZ-AIoq)~V=C^Wj*4Dxgn}s$49}&SOyA>JxBq_<|U)ZV=hv6h|WSj_%=vosacjZ%N1Mf z6vYo)8KPV_udjFovw)aSL$CB(&Il%^n>(+gZHtSc+-I~>9Sy>2e7jdpI%A3EfyXYT z1~IV@`T2|<4QjTL#w(>zSkB_4>4yXUOC50sqx2DebA|YX^^$rg6!t4Nr#C{IX|S)e5@}-K+G^-26LRQ)=ik)ws!f^P~9aR!RxW!^e;;N zTiq{1v8YcY8{=dYw+t+wjY1oM<%N$GqgEJIzb_D+&CyGNC=UR0#ZDE_I4L}~X z4>KW@j(n?*BwwwHJQw9V=CWKBJj`_rYtc;LJ}?tqLB%T5Rz?U_^o;ygrf{45E8NQN zyyWspXB}>g{(5!L5l2nU?M>UZef}RGlZy9r`;ThWpavHzn;Y$rlpU&^VJSOY zzawyVP2f;FL^q>S_8`4^u#(Zr8KY!u+K#j1Q|3+%B<;kson#MHGC7SB&=eJE zNZF}+hb{94J55E2x%oc*PEVOT^gAPEkI?VTq-EzEZ`nC-uty~=o99H!<~h;MO4-@^ z1%`?CSS54x4oS0}tK>N49j`o+iFTfn`AQZjStwutYmr^7s}q!m6OtR`qhz9OP_dJg zoSd{v)A;MaOUXpLTs^Qt$tg-sRkAW^S5@29c1;@ZNvA1iZQ3lAUy`NHFG*gHQe6Eu9g0x9j8+6qy2wKv%)oxU>Ny%m#P^Q>gDZjTGhKmYkp zU3DaJP{Qxlz#MVJ5xTlS32sSlw8TT`R{h)cr3;mV1CSf#3gkw+Q{TK;J@E!Ty+l`+ zrtM{TB_X*&c~>UomE=O4h}diFwR-*A_R(8_5m!tx0=B%G{DN zZ%>(qQ{ES$Zh%woD1=3WHkemTUCSueISxx<^^c3*D?95Eci$LpG#+M7@5 zYTZa^t=5)R&eCXHxm~W%4?ZRP)4fDg=xpA;O=0J?dFDJ!)9H-Bm{QuUq?W{1{Gx=| zHFvi)pTBb;lc zDis%|tkR1fWp0aT!cy|E0^45JQMIO3G@)LF>jim?$kDy4x*3ULuygi?ayU`^YC#jC zH$}zD_qwWzyCKR|6bJABSnwK<*YenYB_A2_d$nv;;daxjClFcB7QNrQhY<}|R3NuW zXh_N?SU_G5eD$tkGn89eg61sJN5N? z{8ua*f@s`jZVS=(zRyL{ps6c3#lPL$1X^6NcyVZM*5x53N5FDhz6;0!NfO(LLwl?F zX^1Hh)w_@#cbeOic2{U`v+oV<`|Rx@{-Zxs&djxNLrvN{LVKsZE3|i$V1D$?5RaL^ z;w;-K*7K4Tt3*`E>^`*j*n30VX!6B(oA-p6F!7N)%iSOcf+P=BNxYzCu z?fv!xy*iTste=MV0fCi^1N1@jtI$4ZKNQ*zTjJq7WFHRgBf9;ll1B~6V=A@B-j%eE zhjy=hBD5dV*Y?>bL!8etIR8#t?8hx`LyB0fj7nJ!JRM}KLkz94^IzO8rH&ig?>LEw)uB?WaTgS^JFYdKM=p7B3XH*?$Y|=P^Msy+qNdbmVDhzo2G) z(S9kkU)H#NMeY5nuAWo!yppexm|M&{llI?3`*r1fL&<+Ac|plH?TexPmi>0pekZiw zwciWv_w8;d<&x=`-;hK5lKp{_ABOfv6gN+sPnGwP67^kZf6Q#cqU=|p`G#iAe<*oD zdAsO+`xA}GPc;O1Pf6Negt$LpOnQ$s?I+u`I9<1#uM}Vsoa(PS)NM%T;AKnUsbBuV}Cb{V(CT1pl9jHnE%99Pd&+pR_qK=+qTU`;Bf}_F8I#i za=~uIYl{a;iK34jfU^q~!42Og9YD01E$V35wzjQ%^AV?r9E2>@wzsAu>#4*Mqu|kU zC!GA^fFP6q1Vt?Bk>}ST7kV06|JLwg&Zgu4@sda%M*~E@QX&ZCyelGAqa05H6&%F! z?i}Q4i`V@r4O-nh;Bho0p_n+*23wk-uN}?HUMP|<8ZsZLub|p;enblQ5eIdVACdh# z1F6A>LDr>(J0EW8ys$N&Awng4=TA&NWK%XT@AQIWTghZBMZM#FO>6&uUSE9M0l^xB#3NAV54djPIodU8h<&?C%bLHx#oWRKC0O%&6 zf4Ev9ql*G%#bheXK#F8fo6#jT=t!*G==-Wrw^?M8YUXAohiO*Uq$T`Q$5zA9*%6_l za*iS0quKu5ay)pgVWLXupcQ?#;Diz#!6b0ds$mj#a>`BXqyCY6v&4L@MDIty4JrFb zU~BEFZPdk8)TdgfZ5;Coe3t}G8^BXSfxyrwAxpgvCx)M~)+HS)w!ZoVkyJ?ZF#-21 z6}S?4%v2F?>M?})`%E?Fwo%L}#%X7aHWXpz;8%M8{wi^03vI@~;7y(-6k2!*Kk}7(nxK0Dag6 zK@dPQ=^g=8HMwGs8J2IR*Id|u7DaQchN`HBgidR|N%pfe3H=}I8!;R~6~?)>h^|Ju zDt$wbRWPYh1UyB_On8MoU!%W#aBGn+$*A;R@U^+(m?W|FES z+6hn}s$XdiOTB3nC1nXbN)BRh4?`4}JuVUo8Pmy_5zjcHIAi8g73DAGgSSwqan6*H zD6<{4*Bp&)iXL+}OBOnM_?VfkD?WNGqcSJTo~yil<~W5&Ii6@J`EKn(UZ(gA{fJRi z#~d7t{q!hv9%8uj31ZWZH<~RtBkExIwweuC;9o#6ft^IIyo#VT*AqYJHr%Q_h+CD9 zllxg*s(clfDlgzt&yL7VijU%X!_U$Nel;l)6<)hd)2zzn+!UJ(iKwL2Au=jCk2)nZls^rb?aj|O z-Os39XwTf{D#=>5_(dY!93N@G;`F1Z>LT|Xg2z|)eyY1?Kh=E<4EMXh_1Z%NK6cT>K1ifW1M!Sa3dXqj5%rYc%6jJl8YB!34r`^@5XlOHiB zJZ?_J1Iu1>(o%ZuJ@Qv@v@e#y>K?4ur z4MtAFT4XP?n1tKTylYa~}+rAAR_47C!nMi}Ja`l|X$Y#4PtratMeY5g>A z@hf#sV_07mm8)!DUmsSsw~TCQ>{qX@p|T-l>TOK@c+%Kk@sGG!KPA&7yS7KoxLu}B zRae#btM5MmJkt_Y&Lx#k$+YrbeX{ry>l@`1gTl2coKoREM6Rh%)mPW2>udIyO}ou4 zYBW#jzOlX~xCWvnWL3?o@(_$nY@V~*jPQ-iJx=MdJ}g+|KI@#ur0ZXGkD8fOGuJn! zdT3^KwwWHrep7~32{J)Q&VYLVq226icq`kSpVa?Ak;vd@~=Rk>H$BEE4@Ei341jRRDP<{uuL*HkCzr?iv0ooWp zB1dk5erkS!Ta(|y(fA`*e>1%KwjZ!)rI?Z6>63SJ9WZ;o+i#ZRQJH^|$}U_VYzZuPQXf*G5;9*mhJRnV4gyyAr9y8njzf zqS|BYP%)J)T~i$Mjl2 zPcC%TIwJ(su(BKbKsQa)pn-0hsHa}cev0yeCXRVPu^z3uuX99;-wkSanOnHmNNa}3 z(VS*Xq6Jz^+l0H>YqqjOk^5ffpU&k;&1&o1-23Z!-|b?Dv6)2Es{-oHO|M+m43|}3 zG3svTbtwB)Ss{BE98I{#T#)Yp7Y-F8mP&gvDp*TV!CGd<*yTjv`t7fo`gebnZb0d(g!xtH5x zx+jlR&+jqY_n8aV5fpaB;|3e0i`>xUo9#X4Yyi(R6SJt57-ySM!rE*aZJU{G&%>S2 z6=tQqGS?))$$`I0ynKLF-uGx+0uAaD9c~H0J7dA)FVSGRa5G1YV2hv3ToNJw=r z{%-#H=vcWy1*;odp^HTU?R0TE74#7&O}kAyRn4B8pU8n`lAE)Q74A|qR@4GBRz@KC z8QWMH&7WkJOe!r)5#3Uh=j?JGhUKVnDs z;Qr0klvV%F;n*j7;4*-dYB7lC8JHEwxDDt(HJDu2< z$^wLBD*{Mf0EKbRU~2B1lU-|Taa!j0w7EoBo~@lg+N-0UVRrI^z0xJXeks?i$}||{ zvfZZMP1QZ-a^*xb7W}d^k4Wa~L}GtV1AhVe@=G(+{t6ddzXpfCY$n;?pvw9?0i!e&Vt$h5?6oFOdCFY3$Gnlw&Uc!lBXECH zlNj#m@l!O+bwG#%!9O~H{)GELUt_$nZ=$i+sj=AUSCZtRtWqNqqhrwJ8~bPTm#D7m z=~5l>8>eKh+GE}R_p!(K4klxA4T!1_d-y+AGfr{N~)5nrg|idZd)m9cTiqq2YI7HUCQ$Z^H<;|$!P zc;26%A6d?w7&&6IGGYDy4v^z@Pv1G~O+TUsXAR)B4E+3UWB#5;l#2EkWc{=Am(!3I zn3h&S2=jx5LTdBi`Km4hyvt2GaYbx+YjV9-BZUkHVuhgW3B)m_Al?XwZv(_QpDGVx zWqA=>FTlwb5*tk~Ow3ycvuCanq<2sx5rInwYJmL)K#G(ls z75CFE>5J=Se2}u4Q&E3gTLJ}CQ2AR z23C1sF63AL#E9S@l=@=(nd65Q+9-VQufINV411OSCh}IHfR?+gip?oqotvbCSr|do z5b|-lX-UJ=XszaIW72F&v;S;X(x&9Rq&Yv$vA$g|Zc);aG=%HiYA#5blT!vI_^oDJ z+JvSx4J#Nm_-=z5{B*M;X;6Z%H#?K&;-q;)(p(|~TB;dhE>+T@mo8Isxe~PDuQaH_ zUumw^?KMiSO>@q_PFHVCW2cBJ{B(mV{FMe(_!;JU0sK}aHz>I=Y2KDLQw@snQw@PR zr<m)1$YVj_v!%F`aqUV7vDE4-4YhB?20k*e# zQJ(bRQ%&2uI|=TD`e>4nPCJlb#@DnN&@5r^$RaqAOVjT@NF)F%I@XR;TDzK2mBRN^U_qE@ zsNfWJA9HniYxj=MuJad3$&LnNj5ja002Hz=e^+3z*)NB26cHsvfV4o#Eg{T=BTJMr zdl*@jcz1}fb)ED*QB^1v#AhRl5Ps7Ol~ra}2x@3q zK4{h@&4U8+Lm|%UKN7;Gy+6cN{UafM>UrT&vnFXC3z1f>2@$-KJg&EnF-L{wXeEur zaW|vr^l8m#o+{YY^l3#y9pdKxi4b`XHSZ(DyBSmXdThk9BVDea7Pd9DcY+{`ls{Sh z1!_21ZKIxb?I#v%^7M#C6})q0YX|5dk55)~INcZp1ND!bmVT6b;CgPaS{dtKqidLI z@5ErpSqU9o4wvU+5@q#j%54L^sKxF_H;Q<=t2?(hZ(fB4Ol!x&)(hL3rTB*q%c{1-TtC zzmrHIDW_Cc7scakZ;!eOU8Ex1S8o2ZAD!RU&NevMmoIJFAO~0xy~FY>*IVW2BCjFo zX-Ti*7i#C00((2;r5OX^B{}pF(2fbAdWh15@QwQg`M6&&5x=7SXF7^l>4I2vTQfLUbx(qa~fK=*YwNu&(!WQ1Bh@m z3-f7d!|Z~)w8sppyxUBZCd@EO4W3n{=tld@&~?ej&G5&~h*`;DNr@~+P9Bz|vfW54 z6s%~JxTOavIe0IUfjwqSzNO2NM92YZB|@(>$JIfwpog0!wD=^`fUt1}dOV8=O>-Kq z3YyF*=wO_RzQsy(ELI^-TLY227Hy`}(O+7}etCxLt(COC2?6FpN>)*#A9bHVU(zGF z9^94d!Cg@g>gkD$QUDCs0l`U(=OVsvG7wa9y$n{VAGb#sUvat?7kAC1V9rRIH}-DS zh(_))wC;0@M6fDz~#hzUpNkjS&ueK6M9S=m|4wc z60F*(+&7}DFbmC;d1$6ALK>l2F&QYva1OzV15gj7&+y~`Yzm^4ohggyr=`GcwJS#O zpTawuJA?gbOoBOhsCd_tl}yRQS$!G=9!$a*mB=W%ep#$zZm11`={@N#BDx8;}XvAIDwmbgl1163t&okM6Ub^rRZ9X6%7 z!|p8GVNK;bEH-u?gWS(2KhQ&m2{Wm~Hqb>0(_DDU-uKLBtKUWE>2D@46ykC2vZw5o zt5&Tf#$s#N`1wuE=SQf!=*WF&HKRWwWia~3o0M*__{V2M(u_?K1Ovs?&g~q7ywYdS zj#hFWX^IcD<-lR5%h@l_E#BP97AW1ToI{NRKBm^hIs}d5LPPY!i@sJ4qIi$eoY!

      #>A-X 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

      @r2gt^YXeyg5|^@_T}6BsCzvCn!mhR}SJ1r5~Gj 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%0A-WC9; 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%0AC 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

      1pa6YZlRXCr5hRl5? zH_=b0#=zmX+!8o*9qc zoXi%DW@TYC3CE?{aUUx@6AouK9L~yyipFeWIQh+RRxq3l9BV;MTHY!A??3KFG|lMw5zUzS zY_%HE3KYU`b|YF@G@=j0Bl<~Zj7IbqB_o;`!}CkV(1DNbcUohnJP0!k>Bh7#kT;gK z0nx+e_T;elchI#ZybOch+vsk^A=KCl8Qry}!M3qJ*O{?)J+tm&Gu>`9t@aYaZ*4ML z?PbWjE@z!?HgB_A%w4wKJZQI>N9}g=jNNHIVRtj4SD4S)E6rEz9`jAR*L=rznxET! z@yLEI9@)3WBijLz_T$ve+SSU_s{KVg+P{cL`#a%iH?aK(n`+hmm0Q1=qLF=&wVc-G zpC(xuw2-mibwk-&>DJ=~8cUX#X8Gt1$INo*fEDb>fnOBqnN@|Am}|_1D{-@~!j)JZ zz1vvr7UBFxh?p8e)4X72G?0Nz&sVDO%*?9BZ1nJ`S+#+vOO4emOSk$0zw8dbcyB}1 z-R6`sjbnz5qO8^a^=2lL`*MV)L{Ps*w}s*-@Z&=NP6O+A?FM0rQ@F{jW8nu4p!i+7 zZ(DOwe-%@QeL$-nJh6`GE07s<5yIy#a}Bi8MMuqs=gh^e`Nq6Ub#c^8Y^`am3Bj>K zS0OkC=sU!dt+maK1CE-rTI(9?8fzPK?$@+u%q1zv#7(UO8wWUO4QLzyv>Hjra4E>> zNMm(lUZ6Sr;>{`t;;OOwNNaUt_0#6^#@q|WwaVRn-YmF_{R&tw_=GU6Ah}t{mTe|y zAGb$P_NN`k^-V|?g2kD@UT^B{s|jFp0~qTj0+Qbh*1Cng=QU=7eXZGSZ^Z`oHq&Ka zXRfwyKrnr~xy`19Lewzd%69P-D#g7GUb!@HTJ{y zjrJqLm&%hf0Br|k3g^Y)YW%l6Z5Er}Rj4gaFu zu9~$sl~_Ozvx2)Yhj|aYNge$gL@+=iGP7b^-FpMT#5;)Vc5X>6!kt{|3VF4zTSLtZ{hYuqBuoh3|iu_qFdvu0C9s^3X(K>hRFE-*aT~)+_ znkU=pb9FUehXpz;beVN?$|kIz=LJfuyF_Vq7nuu4s;e_u=*U2-+pBc7TE(o<&kM88 z{yQ-119MTpd^DLoUE8iimVtmNv(Krd`xl-wbHEv3lp3)d+&y_6$&MCaRDvWYBgF^G zorF-uNriY6hvpyMyG}F)k=~yZ#>Tv=55-;KgWd~`B-f?7*ksFlwD+U~hE)2&mBOSb z)PEoGLgG$@6NApzwr^8R)ioXaQHJd8*iO97QYg^;j;l}*cTZm6-d&;}-d5s(%RW`s zRwBK-^C~n9iT)PCRd}-wsmjwGS0OGtvjnE)YoxK7MrhklGM`nlov{S&#H?hJdfxw+ z=v!FaarzPGGCaViV=TX@EWD=G|yV^T#90ZJCPgy;*pS@xi7Gz{D+ zxSI4D$|j*;QbbeV`m$nr25VHYo+zpCEAIu)5gvvvppHrIJY_d_fm=qSD%8wl8 zOdyQ~YlPnl`>3pM%1~?&%J`^!qYG&)2uGTh<#ndHF+=Fl7J|f8PUH|;V#~JHoBEy$ z=Qkgb-vVfuh19)>`->@gi5bH?-qLwAX6eoRGSsH}t-De{8%e}RyEa0raHUMjvZ^L9 zQrNbCrmY#C?Scf(-fgxu)10ix;TOzWP8Ic4?2MHw5iia%H0u)fz`ixNMs55$GTnyDR2S(TTV+?(8`sV zHLt>4cQt~xHT3pE_@lMF(Z-$i#FE3l&-~Z7-2>zSCE~bAjKWr+zKu3^Q0p$_=~uY6OFuD;|5K60YnVZ z8P9J8GaC#n#+7E_7&=#PiJ8)wI}yM(mEW6lLG8wJ5CZOUk}83it+7GzE@ z^g>MjyaaRLeo|Vwt#I+X*Niniofg5Q@{-NfH$nW=H#8hyRH?$&J_ox#SJ(Bd%a~7*T>xcuPq< z*0k@(a+~ThK1oy0d?yth`}cQYn4aVtW6HVLt>R>}q$DiU14Mde2&~=qJsnHbh6otm zRR`KRv9W|La&m-iUE2|gh_Md#5}4naP}hd#9NN~g&!pSKx2B(hRYy2(!ByRl|kIrq>b=yUnaX<8`6k;9BZA%(Y=lX&1cbXgZpOACptG zcH7x-F5@VBG&{6%LucSGeINa^7M@MyjyTUr9L1w~P@T{B+WRYAOFi|V7CKul^lTOO zQr8N<=U2w9sDx{pMj3+YbZV51mG_a>0LTYf)JM*hI^k(Es8F)ARIpnpxg8n&R#&>W zKg-3X=it-MrgV8tYuBE|zU}wx!SJW2nUWyV_ocu8$a|?*e-Z}tGH*&Y=&$79=U$hKzoy}ZVt>X`td3qUK1$GVYPnTYHrJ#*JYL7@K&WatTwl2B}A`Q zj>D|WahO$x!>oBr*8IP$d280ZEo%;CU5>+SnBj0ONe;8-Zlb7Qh?h0%vgTb`B{|HR zd$Z=giWkFwVXnh!^I+CIq#y6jnul|M`aN0m-mEzsm`BunLcpBuQYOjYoF<-aUXwMC z=}gAOPMzPP!w1yJ59;dPz&su(HPZ3+{o3AYfRbHMnxeT#P&z<&?p11mQ=l^5xP2l4=&-?y& zfdzK4SYAu<0C<6icmd$0n-V4Q6d~~v0ZO7MnF7Hj2@wP+926-zmM!0sE!*-b*_LHl zwrtssZ5Aw$LtN$ zdIyF!qx9}Q(krQE-`*WWKt-?Z=^h%opP(uhd=KO_E{!J06NWuP)3&i z58ueyspj2Qb5GoVyu!j(nC_O+4y(jGNcbURvZ9zZ72a;-Y|mivNH5v!YY7%gnUht` zOgZ=$fF|mO2aXr9m5f7X8mtP+3BuG7_T~4PRrX?5=v0AyPUeV&xdu$yxvC($X!BRz z(8R6?*Sy)Up1t|=I$MDLr&Yb^2`<5jy~OgT5|?sJL7-Kgq@a99qAcXu-op1%|c{^cPokpFD|bWq6gi+`Rd=`A!~L_YG8}TiN-CD#noH6pX4)AGQY|2< zP8H=0y}44Oyfdt}dj_NqNiV-s56zA?jyiu!@6bs*#<^uMmwp9U4RDWV3QC!)tHLkk z8U-4fu+Ac+gQ#a*mh-Hn7-?h{HVz&gaak$GsO;=hQRW9ZWOy69sk65a$C^G~{oLq` z@jAqk6v@&+xlQ;IrX@LF+RZD#ICGfj^ROGSEzCSQGaHAJt^DdJX@zj{WSAyPn)`+pqlz| zMHe@sG1`Q7U^9x6E%dt0_9^4Hbo_hyuD>?Sx*CYiR9sO?j5c!{*Q6wALvy(eMTgGr z;H-`|XGuSa6663^9n^PuQ2#nmH|ky=>ZW?!e6vjrf;uOtiK4NgG?k&ghaS3t`Vdg} z0CmwqebTi%VWyS6P2Y^A(H!EXa z`D+OrDN1kpewN8;3;*@*$pHT5VAh+1S#J(zy*ZfmW^dL@(DVc=q>bLkqh~AQYaRtICWy7V7(uvpEZ{>%VIcd}SM*}Aesu^Y4IK4EaD zE?inz$`@QQ?D;Z#2Td(+@@lN=#oxvfGDNgA;443ckf$|x({3ctX)ncp?cafd>;2|wyy!pAFVEmb`~|#wpT$e}i^NnsXI{gD_c!qm7P@eo;Pv3O zy&f#0*Mmj$I=#59`+Bg5UiTIe(;mFG*Mrygdhps__g-5Ay=sf+7=?;cI+S!bXh6te zSz*N`hCGmMH_YerV-$5vebak+dKJ?sMaqm%cfpXF5*J7KGL7*ojO28jh<)s*+%d6}2Ym0#ll z2Zjq>`%_fBe})?S-`Q^Wx&{dYb$GemzGmU&cKez&_3idG3op0Z*DSo;ZeO$1_wDvI z*VF1`Uf%$qzaNUCU}k~*6{w9&z{}#Oi_kLQykdP;z_RR#W=a6|Z$Tdams$Bc3#{V4 zRNB!8c3A-IvS1}H3s&N?U?naKR^l@2;VyK#jNuIdY?B9embUlc^X|a@7tC~?yGk?d zC<2^bV3}*s8xx~_wQPxp8E+_bFacY$vjicvFg3&AqUd57N-7E># z&5~fw zR*1HQ`sf~!5q(-Rq7zF-bkYLG(WfONImW<>b8QCB*qVr|;Vc@#4 zDPKZVyTFo$z>4fhcYb^s-d!KQsaARo^M z8}t6pO(#A2W0{XUuFc3Y`Dmtv7XacJ1BR)vQ|=Rqe^@=&VT z+#r1f3DSlKTI@{o8g~t}V4@u+Txh6eo6E&mv-^0)wAx(aUP*v8dCdAezi8|im#{MN zv?`?&+dI$Rog=z3yip|+4N)FBJhE2&26rBE^+ zwd=U*JwSCU?d`SgI}OWBul;!4-ATA&$Wc^oq2d(uC%%op=q_I}^6Z13hFR6WHhzuH zP{Q(Fm$1{jRA0DVhgCVIih2}la`Gw3n9CX%?BxxN`3k8ZuFNq^ z9nAK)F(M9Kc@}+Bp7lIk@p79Z7|SU+GiFO(s>?D$Tm}Lzxn?`wxaQ_OA^}xFke*n0 zc7f%kvdl|gnK66w$Qg7Mvq@Ci6cLzwGeYcHP);O%vlL8L1!f%^ldr?!q?#S<)24Yz zHwRmcIYGPKHBd2P&22z+TE#}wHdDg-C0L`XqUepn1j7Rs9B^+rL8#2|HOlQIa3$(k zp0Hrcn~RO1Y}r_+TsMR@;HTK_@m0Za=O@i>3HvY~M~HSFItJB|`@Q(H8mJCy9D*}d z3m$|l?oh#JaO<3H=DT>_DK7Ypz_%JmP^}|Da+h-?=rDR7p9D=oNN?erGSjI^ksvmd z*Wi=ry^Qd6WMt_6hfDa@v9JE|5I%NXzmq#zc+3h;JLudPChWCjff#}v%pE7|8IH&s9Tx{Jb;#?dOY%y3jQO%%Pq$ zMH={I_dpLsMHQ|M-R5jmD!Pyx92LC}Dp{hU^3>Pg6x*bzsOXhz@cU3C(Y1T3qoVC$ zx{87}AGsic+E$nXot+xKPr=fT&I-as)~GTJogIPBo&u8lQ8%6@0{je{`~mjrgBE&6 zZ||{GR?y#LX)7BXGq9oyYIt(JjbK-r!glVcA*x_CpJ|BN8dwkYm4;xszd7Egm=XO+ zJmoJ+Z$H%a_76_NV4!~rr5~LSawsFF=RDZJ8(f>?B|0f`PMF%x5w&gdsBP9A_ z0!b*JmF)cBuqX_96e}*&O(c<=Nx4phh!)GQvtNo*b&5ppkB~Medn#i~x$|1m+n4r4 z5JOhyy9_VDUL{S{BX6l%!uwgEzhOP7B{kkMK#7o`rIRqsN+{RT=?B<8gwal0l&5&O z!`8)&dXsx$Z2tbOR?G~O$3!7>s%WGS_*g2&amM^bW!#IYeL5Z2B>8I41i`nY>Gk}@ z67Gp^uS$9hhuoZ=_mPVXK{=FF!vxhAKY;(E)$96cX2Lu{CB1Hm9k@Hh4&(xYsxpQ1 zXgS0Vq@;5dJMa|jK&|q;AS`1Ct$Wqf?<$e>ADHXgYE=?5xYSS}rLOn^vKR&ziR7QM ze`VV%X6h?uT4$StbD|KpR`qDmNcOy$ZX3De6*I$YB+g6_#)qAJI$mKd_^0i~ntA{q zi%*jI`m+Ski4}6p#8bi8p9+|XCp>0iI@z(64yT-%nBy@ME9oW9OgIgBz)V28?O&9s zNd06}eIv7~e^oLSaST%DV2k;NVM8#{h8X0+lUSz_{R1vI}^BCND5)atloyTX9ALoiom8A=cc zCTioaUeK+?%q#Zg!tyDOi!Cn)!!hy-r(pe%-G+BUq2X{?iziPcE;#pq<#sQG$SYVU zpgQy7+(Kw=Yo|>{Ij1EMJdhhKf*X2OxD*U5=N`HCM3r9?HX-dt*eof(d~=PIUvU%C zC&73^=eK~)Ym{FDi&P!q8y@pnXwY>$;pKt2vXCdS#t!c%+zUM#kl}QScNGs!M+>C5 zbAHWtLyq2o`tD&kzxQKwdBofZqj|IWKnTcNJe$%=tXnRtMy>U)lZI;w^whie^Z6HN$g$ z&>1>AS~J7QFwoirdt?~U((_|zs4BI^rMjl5dv#xk*T!c?s)t9F>C)%G5) z=uT00f{;dnGUF`0uZV!`IS;U%x)0))^?wKC@+seaeaW-FP z3v^gyR(kFdT_hd%^k-ueCCI2vfJ{h685Q(L6CI}>I8aGNq#y6{k|vWJxhk@#XSz}1 zkF}*ENS8Wm;3#HO<1C2@VmG=}Aq<;SHeN_1l%MQ+_W8(S5{6_wqrQ<*e{z`2L2LzRpbY-q0Rh62}(M%RV%PtHqnT zU7_1@-91EV4lP-;25fY5{FyQg6VGcAZgg|8uWv6(VH}B-tWMT4|0`L5<4sq5QcztG z*UfH}TOqS%>Ji=8me$l|y_4?L%GiiV8D`xUesl24|+GP!6=WL>2doN0?_E*d$x|zmm zEP;1vf_KpTPDI9CAgC?|d>g;rju>_ajwSmsi#=vRbsDS=57adNVlH{}r2y&D9j>!)J4V zMq;VX9O|?#9rop9m&lqs^toR@->G2EyL7l413l@dBwXH;G2J;t_(S^Aqr>5>DQ3)( ztT`%<;T~N&rbBPW+?!)a$FrtSjhx7#^BYjZCo|?g+_uf3tQpkjP}U6Vb0lj{>GOV4 zVCnOWZhjzR9?bEo-bKXbvPI{@NQ)+Tag?!w!bEI#$chku5 zuqJ1D+2pV+oj5bJI&`O|>QEBr=Sb?^o#-$AM1Ce-FP?H_~rEC-rpq+gY@4 z#yTu27XA%G<~64w52Lb2)@>93twm5y_7CNq|JU2|2qzE2fyqR;>Lk_fsR{V5yrJG@ z#=O_oV9z76JetI}xEGoA>9d;MRIMt(I{N1kf?kCyAs#UA<)Gzx;o)BH?EseJS1hKDXX)ha_CHglN`(Y+} zwEn_mT0noM3Rld;(cAT>94;h?OD>#U36Y4z$Gow43D)3D&W?eRL7O~670Wx%5SVnr zzep5S(w2!n$ktRj2XAAvg*hjWjZD~eK7vz95Qiq`Brq)QEG+k!GXR$7oFlIIk^Z*9WPYnXGb7yw3$NO zrlTHO_?-vba=8>7PQc=xW$lFYfPQ;*wsptRYH@hUhL~QR?da_L=w*9yvrkkKME25ewt%)cF#Tm=73F%Ag8MS&O1P|)uC6T9qyiUbab(Usuokv; z9sl{cMzU~em-EdpN1-v)+XRD|-qHF4rE#q*kP;!YLuLE2UL|ccIurg>oz~$+ z)j+1w0=P{1R@H&yZ=1Xh>d+ls#T_#Fg6}x0tKZ=%*%@* zoUU>|G}TewV;Wgc3bM!+WR5*cLA^RsE?5S4_I^0;wx+sP*xaT8}N?I)UjMwl!xOt8uMSVh-nB z@5xBH_!3C&;nvW@b$Iz{xz`Y?qT{XBcTb^fo+o@%6#3JWkIuV=^{IbyrjPDdCj@Wn z?kOG`7&vaJp8S+z63HF~c(v+)k!z}Hr`WEHU8{3!06g{9cxJAwHFIS>BbU{6=2)8% z3ztk<p)G1+~DyQIM5q)Uu&rG5uz|Qd#0C)P!%2FROBr{6s})L>4C` zy)270nb_}}9n)3Q4^Oio23aXhnX7xofR$Q}<&39fggY)omP^H8RtyIU-6GAq4c(fp zSiP95UaU`RQp=dldC-Nkkm0GRXf2*BkA=Pb$iQIB(7=ge3+(97K!1zomT=wvB>{iwd?@}_pUy~p}6I8I{<8ax@_T*Q{#*4U^JI+x}BF>tOl zX{%aaRm2va6W0?rOumndv$JIjxRDha2`0{a!NjEqE%oOtYDXY%MkekZv{^(GHWFqlM6le)nthd zUH!lM!9C54ME|O#NpS}Zatv5!u8e6>y7h&X^9xw})HrEQc`AZ`Xf)?d4yT$31u3ON zKxe6(2=cO#%U7$_e-LY~LDtcEK7q zxCNF$rVTlI332)5A(i`RKF>$98_0;kUzF{A=J!AQ)K>{Y(LZ6QDoAgP>7_t(vn=+_ za@CsS)qqMX#xw01?O{!YdTx{je`B^3*O>!Mdr{$?Vwkr#z{I%P&C^vJYKOG(JN1i= zP1%)GbY8{=o>O$EOpQM7#0cm!t0Q~?gS;&+$S2UiYu~Wc2i4-%3v*8G?I&U-UYD75 z;j6$q`bFZ0i{!es;t7mFwmPy=QzTEl7v2I-8>%}*8{^BjFn&ClQRwDA6=brOdScyV z*(Qo*MRd)NGEy7dl2L&sj7n9aQ)|JekP|hW*zzYZGu`9WB#yDD2`fo)UwPFj_TzD) zlcws$w_~=l1&lFu#_ix<7G0Qe$L1?Rj_n13qu1P6533kdd=d3PLO$SLLqOnAt9vzt%`DA!^|Lu4wq|ENH+O@LBMs&wjk_4@6L>2Yk zeyZr<*4H(N@D>p*ooN8vffH#Mv+QxtAn+=w(Z$H89TZCoHH~;?f$L-UBpVt*HGXCa zIUOp#RxC!6o583o#-&hZ$70-Vjr2Z?;rkOzu}w+}D)|%q9*l#epaXI^#NSYYQ2nlR zCZqJb@)3|0mam0I@gNGC$;-Pyzo@F$b7qO2nD&CPdRSZv3ev-JX%-)6&Fr(L>05Lt zmGCuC=&+|jH`M+R#9bm=Kfj;hj#Fs3?njq;nn1t@>>yO?D~mo`+HJ)Ht+4(DDni_1 z{R_k&9SB?|4k%rc<#gn0P-A@!BuuGvmfRrabD&UM{rUNv;A!+1<#@91-g;_$ias(R z#dw~dM@65Fs2`W2Z(V|A!c#lGp^842aq7aDnBplALY!ZUBN|_W_fLwx2`Tz`PZ4Z9 zZib)=mIG^mS0g0z&BKiPEO4-q6n$|7^Qi{x8Mo-LLkA)|FEyy-mYUre z)q|}!yLGrVrz{~TTV(jhA$PC2En{w%s*l@n%$=f(lgxh9C<+MOoizvaiH~lFxm#y% z(a$Oqn9@Q#rw)t#VF&f zH!wBOF+tm+>QaRg{cv&sl?B?qUR*aqgX=#zf+E9HN=!t7Ihe-`Fzh+CBIyUQ{aAa} zn33_RGEbTNGv;(2;rxLzwO8WHR$87l=E1yqtNDd8TX4c;RM{#T&bO(-%IeE?ej&S~ zgWV^Ot@3qptE5FbQCy8P?C`+Q4bJcRpe;taA+P$@*6Fz9X^gtY<@-YiYkiJ!Kz_e@ zBx4@cBzzzb)AtxV+WDU5aTEJ+-h9M7o-rTQ?;p#9oj*}Y5&KEaes$u^KWR`EZ1jd} zP{&YSTr3Uh^pGaDXjbp@n|Eg+;MA(5f(8-1h0ano3j#(dYT&m$2%z|G`aMu9& z`UehMT{}_maic_n5GxuL3xx!oY$KfPj(5oZxvVUOBVe z;l1o8ppKNaEK5JY6GTw-7j5ZwpIT|+)9ykoD<9$Jn(b zNq>zpdlrtz6!1cq-IOjg`C4#!6sJ^YaV}SIMV`05o}cG8m98w{hxA#~a?UJNIk`nR z!LHA!*4Gj##E(${?h`Pha$YsK3Qy(uPGDCF9;r4y!u&qYZ=Yhmp1>gaBv!mn^VDal zd-W6wh|lr-GqmtDcYL0!U$Aqe5@DZWcI8hkL;h32Y(3?<4`+FX2zjeY|A=)}R&@Uv zT$MMWCf|h@>}KAbvQA$qzd`1+7Pnlf(&hduRXVnJ8=ojux-1U*^Zb(FPsWX;wb&=Sx;M~(s8O@|Id^KUn| zpZDz9F4g4HL7*-J`H*rE+ z9ut?~^{YGp3y=)tdn)&Fc_5H18slBY9L$q&7AletxLO+>cgXa3mAIXCUk3YY@{)H; z2770c?CYj-#MaY2)Sl>7^kRs;bnJi?63SeP-RA7{O}%;QbDe}3s1$MwKEgZCv^axq z6+A6sL5sOh2P>Z}td0@Z{fIIxW+X3bUztFWfIU*l5qNeG|43ud-gtL~DZN7*DU42V zT5k`o;kcp{*`U4ArAT~7ZLZQp^|9>Zt9KSBJ?i*T{GzkllD$0KS3TSU47L|R#7c-KumGW zv;c82Z`%Q)14id&l*l`nsh!N#ZhqSXgWk#9bcF!B$^(qft=ENIN0igS0roxEJ~8t9 z)4yz{u1~l9zz}jrBG#$x(3&_=*Ktjv@dPfV`hOl&D_U)^Vme+z&^+0KT=J zp(+i9%7(3G&~89C@?Cd%!FkQ4{@ud(1`Fexq3Q7#hJy31vVEmkIM;Zs#e>)M3Ycz=gj?m2$)?p{7n<}+D zdL_b1{*4tww@Qxp7o`qi%UG`~!rl4a7S*R%^2Z~$jmj3eHzd$#Jek%iWg@(|H3)Zx z%xo942H|eP2=-tSyw$evP{9S)AWUu9w{tb>5B))s-oGQzRFFwLJ={>T_t>^pb6B?LPWNrh9Yj*=G z58UDwmJER8Im;L{Oyh9Nw+Zuzu2O{{`$l=>kBvLYB_-+a(mY&>tx$nG{!(*i zCR$GE9{I|1Kpw7SdO56zNQQF6;M`r=h%__g1FxzTLnnsh51&ULM!usun^A>qPjZS! zl1PxEPbhB`=~xhy^D1EP+2Tgbsf@WlFTd8Z#4gG2EYiA<#j6gEO-!CwS{9XLKb{ z2Id#hmF!XB5qM&4*rXFkx*?O!#C*|xys7sei)k-k00EYTRj7uUvltmA&iqkZrq#Kl z@i>4OL=U^TwmGI2V}q?m!Dq>TUg~Kv^h&8m#xBmb^Ih)lm&A<^BsOvEzPw%>o8DuI zs1wmHai$GDDRe|@HsPg}w4}~A5GZZ0^_NHEpMB1>$rO=$!8D#XdCUxx z3i6(p>7XFn!>gvi*Ry8&Ss=4zE@r%BX1*jR`q|EXem0^S5s20)$4Ns+m2r-%#~64o zK;4VJz7O&3gauoPHs&&9iEEmIeZc_sAr~dN$S*+-TEv~o>bsCn{YmW5pX3$&c?Bn; z;>48ybZXHL>y6Pr&GBgOPO(a5Ovh~v2*u=jpKhxUsK{}s?C~s>J)Tj@g;8&=&UjgW zN%yVMmE$NuGMW`$}a8%sZaE#*jVI{oC z!;|l=l13|uJf*IhUCbaLS4A>IT*FU=u7@)xS6vjLT-=f$1GWI@)A))>RY54mm6Cp( z6f&A^JJFK&1~d9UZPhTeLZy+>mfIpuO0nU{q#uN)lvhsYm~&(@s8^y8Dn}geg3S6E zy>jTjTKFafYI$1wFJjRa$=!*XFkZwdR(y$+8|{T0s?AqJrI9Bo>DS6Obc0hc)VrEX z(;Tf9I8MEK5ar)J4C)ZZ>H+kc_gU~<`i-3dcsn6zOBi?^e1Oz$H9WE2YIT)w;Dhj9{QXOM|vGsNrTuo^h zcTDJW@kxY-E93#YL>3G+a~Vz!BDg|bSV>pz^zNfRgGKf`sC?g%lMQvwd|r&KrTE==7+05J@E_#k%U zx0)L%=Xo<0=n@zF2G&j5aQ(nB5*{h(kyXWvjvZs}lXo@18mv|JKb*X$m0rvC1$Mti8`Xhc!jk0B@wB5sy2pV+jo?$#FWSEKjl;KQ!7_goqtCD zr&6qF`xyH_AaJ5g)}DmYqqV+?%@JITDTS}MpPdzM&yzQx!ge% zBWhGJqC6?WC#e|GWWN}Z(zx41L(^;w1{RQ9EQjscyD>J-nMp2K|${WHeeFqr{)e0nDzfLK0dP3*G8@L1YyMy;l(lD;1FddeT9$ z&o=D2QDM)Gwlt9fqg`>Ltm)3EtWb~4CieHkx=Hnkq=Y+~RrK@iUi35G;5l5w2$v=R zdY}f#EOCm#aA3%K$ydrr2FDT zIE;l&OWyy9YT(9+6%+bLQZ(oyBGvNnh$yR(myZ#qa0ssQ)jp7y?=#N(+J z^r#CYUNt6Xp?(NA&N1|$QV=1>8CPwH=VLXG!A5=p&QJ|1WcFTog*-81*P#9OiUfVk ze({O~ecXQWiUfT^vq2dPY}`@wrr8i>tXL$d-F$LP>wPlQr5KZcq~RIm+TJ&~L{No# zKNF}Nbn!|Ay%|EPbmhdQj`7w6HwhWpp@pYM&H#WO_ls443m zFW>m8i~p!mXN$W6``VQ_t6YWR{c3pC^|k{))WLP2PzU8?6hG-)=GE1UfFo1kEiTjn zj?t_Av#XsD+sWdbr{7APxGOO6$> zC}S39%n}%1tIG-s{#I6G1uCg{6_{A}$d3W{d`ktH)CV;o0YU|R)P#M9V~qX6So<;H ztrzjns9AP$r$22Kf-o}jAZ|2E^Pr_%9xRj9*JT;AJTD2cEWJY6*he+Vj^(xbGZY+$ z1|jT98ghND$RsO{a}#-$ov$xwsg9k(&P3m!!U)nkFsXL0%GfFtpv=0`I|!FgbuJ{- zLatef^k3^le0fgzjwDk!cW7uTacR!C!nK*w^H%dAG~`M(tL+>4CN!IskL6k4b5m_P zvUU%Ub=#x_j_PECcC%J@!caV?7ppk|PH9eLG8Udu7#V+2vHu(Y@-LnmrU(67%&(*3 znV8&vE(bjBkT)hAuO&%8fl9?6g|I%Jf{9XByc{I zv9d^+lAvaI05KqjP!Jxvh~eMXTkJb57Y{GZ61mosZ`?=@EbdDyb9iELGgpc?j8%V{ zu2mDs_b@iW$oe{7q87@h$+M)?4fhWBks>WojZxBa)DGJW3KqHHxLn>`awvAn{7fOR zF$zzQ8mlsDuC}F`qD>RP|$?eZoA+6zm!p96qK($CN7$R5Rs+2ws*t{$$2{Hcz&k z&+$CD1eDULLh0wcdD?s)-(;Jxs?sXSm}l~2&%OJ^OAWvZ_euQig`;J zU@@*I$%^I_XHNB7x4ff6%x5KzB1>W0E{B*Vpjl8^T#<{Exo}5~i=d?lxve;+iN)3D zW&dJ2RMnBa=j~e3lqBVth;8hcvkh-JA(>gU^5C14+AKZPeF}`T*<%&8_DWgOJjsNM z5yV(-7VqfTrsdH%JP@E#*81`l2R0?`E<1JH-2>VfE_&bQFF&w}MOKdT?C&7FYO8R^ zxLbhVH{44EU#5pT?)@VqwTY}^Kg0^~FRq|=VGcJki)c^4F1rG{(mqIyB0*Vd6n!d> zfUIB!ytV;$_Il1vzz~aRpR}^It-UFoYN|sDcbxbQT=tbgDgbvQ-(AIHTt83%=nvNq z6d&ToC!rotm0q3Q#F-o{C!rqLW;>i@1%C0*kPp{&&A*~+IQ-Opv=TKd&zoBGBI%cj zlTwPd>{K#CWL}1mKW`fL7jh(Mdl}bnLZv2g#jo`Ym!DM%wP~E>nEaA07Y6;S>rC*~+G)*;8{J1GoXm+>GIdA3y z*1YxEb7ubfhNgzs%zdf#x$|ZLS6kMTaATnoz%5#zYiel9H8mENOf$d6|9J{5H<40q zX{|ke`2T)=zGt(bgs^tF(TF zA96gTy8vls6R^)=6iO90W2FU=_GX+nZTnXiq}y7xKEsV?&1!pG^DUqcY}s%zFkYB#q^f;=_nM?OeISX24j_D%#8%+QBN?!y3AS zRdk5;bCks}%%XS~i{T?IhtIGOzQ`hYo>%@2mcR?V{PSpeew7#g2R!{3C~SU&@b}+| zMEh$#e@tsXF}J2tcyOc%teH+lwq`su<`MI~#N3f;CldP#Tr6&&RMrl{clT1p>JD<< z-3X+g0?NN&`A}LGvGT{9?IKl4o<5J!>a8r>^X8!PNF#Q>3v$?neK-SjAI3&}JEH0H zEydDl zYe*R79jDHW5}aA;5pVH&#?x1j-lSw*T8)& zW3CH}bcvFP&&g($yRGZYNk~j~AV|wpS-c69X6*^Oi%PU%!fLS!zQ7^-6m%!u->t;n z)~uGu=lcZeO$^%`%iMiU((F~4c-70kH>p>$$j;#PRmhqL>lV}l6Bp=F^XlWUz3hHd zc-GI`kfp61I7Aa*J(nOAN8FtJ~-o1LLoZS{$HR6~V4n?EnD zA&1F2EHDdoAU6P&O)`dL($|~SsR}M-p(aOFCC2y^LPacBX+K@M_k>3~*?T4!JZ0^)y(y{(4he6ZC5RBQ&`!ro?PqD0bP26qyN zy)r1xn&}RW4f-M1Y>x#5ofz1!2I9Js&sv@H4?0`-oN2U|f|{l3vcN;A>}h%_4KBxz zW~J@gY3mjTT`z`2%@-BZJoAJ;7kV9c@LjEVY>b+9_;!PB%2{w=G`&#}o9T^0>d8E# zP;-kptEG9>VAl7gbmPY5N5Iufed#GJOS82Dy09|@a(&QGy{7{8lZ9#OZ>2ZQX`|Xg z3;MFJu~dVue(P;CcsuX)j?gP;3>s~;AdAQ}LgWQ}iWzH70yX2fx)P{wq2+@WKy@W~ zL_FHPwn}E2mrTY{qSDM3Z8L5y)Oo0 ztSwQmB~Y)Y&s_P}_cCw#C-N4fUIRV7-F>!FyRu~>&MR$knT2P0nT4m`EX-IV5Bpvg zp26ZUA82e2;1C*^a>^2`Bz6ZS2#8ZzZo{GEM-JRMVbT<{*u-&Ra);J%GwWD)|KYyk z*1^Gn!Ei}PHpudha?#B~NP2G2VG7Zk;&MiJ!mJdm|MsGE4IEB#c>P^3wLR z5376EWdYa7bzZlmoAmNmm-)yfPZMZ?Wzc&V;j?Stc##~b5sA>Zl(0sm{Qyr?X9gLy zU}MP&@>i0P*bYKV+Lg`I zD>KIw^9yPMGY9n@at41eeSJ718%N%}E5{h$jj=sz-kUY=)1~*Txkq&8qdLRT@pkh; zonh#By9^y~Hy_sFBRV{;CqAmf$8`93#(W|NQvPHPapj4uc~YOB&YI8Y^RqeW6m@ty zBduX<|7LsphlacRRjssYbkop#;$+|EzHZez_NO9|+yz zE#VN#x&Rl>s9tJ$nYt@^lL24~jhl+}2D`WeFj`<{bPpZhGja%bxnq06ucR#JzBf~J(%Zk8 z^0-p-+epTmKC)SrWe0IvD0(+DdaQdWsW)bHSNCx5siJ)#G^2T^XWQM4vYV*9@^Z&a zg!@s8s^7N3&@}yd_l*|qK&QH|9ieHO)Z2fGYRcONdr85>GOV8Q&vly5E}8gIEj{Ub#NQ3d+$(3cx<5=t(JV$ zc}e8!BaDYD9u$AuN%V~OF*d=qhLlKHim$bvd{T?D=ODG%k63x9u6Uwbs?hw%P;v0! z5%pJ^Ioqaj5ikEVDM5=uCoTDR(Q>Nv@A^#vAdxQ!$_8=rB|?+Z{OY>6&O8K|5HjU(4)AG{UDxzXh%svkb|w-Z0jNwm{6c9 zJ$)d`;SLC$;)^y1-}3H<&LYT~`=kzWKl)c12aAV$A%(;H_QIx5=J&nv3lZWob9n+o zAZC9>8Kv}hmX)wJAz?YXDQe)64kdRdQFV1v$hA)FDYtng@ar<_$RsRlkrkFoWr!+N z5V}~^ab#-j8n|_&I8xl$fB5$9USKFA*ojCPkzgV0AVp~4&*kbP#cURlIBcAeDDBcb zU&q-Uh!7H&7hxGmt*rlLQ?tLeP}{jbT}XHCuPfAbzHI7O7D|G&ay&cD$yy|W)hJ=s z(dT8>z~hASMX34JZvz`)BWkzUNE`WObbVsW#>iH@SK@*i%Uv3 z*?yZ;`obgMq#30pn1c$!rI~hqwAZ0+*}yM1@Y^PSy%DKmBl?p~@WNXF>ZSm!xlG3< zbneoxsG^JmtBp?$zQ*$;)!>}|W>4^>bOLTbDd88sX+W1V!Fm$&%#{6wsjrx6-%&e2 zl53VlhDpbM`=ff9QQ)5=f&3W zLMp%5Plx8nAD8r;G6Csjb_L68>_zfy0!%6K3m!BjP1sp8_iKO^USVGeJzVF#thBW{ zxuM)`!EsvAdDs+@&KI0BEqp9I$9{iFD{b*PvjqELX-zm$-6ffyj5%utlyxpX@iO4L z{k=F?b287lt}gSss$-EYEiGPW(mluG{b!*Dd{|Rh#gZCW7H{B}Y2e$54cwVHQ_JHs z^(%=F%Zlc}mz_+yQBRFq+QhHh2c3!{<&9e#*csk*CKH-8p$E)8USlzxaH+9Bv5omU zVTV(a8q+n($yyB46AZ92uKJ76=zLt2rUGrz1L&hnUz*XaPXAJRXIpK$>%3V(F0)t6 zN*mG8+Froa-QHeUMbU=U=gb=H*=yTsFDp&rB6-+iP)(cv#@Szi|Njov%umpZ|Giw) zO>4>-_}$P}2lKR=M8`5P%G7%l+*QMq^GFkVuiazEX|u-kfu^;4p#FUF7gfK``1jBM z;ahk$`d3kvbJM`U(Z1rvR=&o?Adh>CbOs|5s9q`C7nSZ3AGmmm*9zL22z+m{+O-hr zd_qdsWN9tZu4)2Q#lppIN_rnZU4?7+8>?_F!Yv#DgC9lN*b5fF_l;7xw!E{j_(#|S z^)DgYpwkvb-eFAL`tedwdV|@MRY-b+*(=+Arw&A>@3XbJZIQeNvy0UE(t8rd?xNH4 z=B}){J8RxTl`=hWj}F~B9MS<#_XcxVhoU0Yk7UeIRoEjq9b}YMVeVejM_jt~bYG}u z2NZ;Z^Z7#gx%bM+oodE9jAU&Rb@Z^h-mlj#^r_N|a>4DYn+F zcIvIu%7ZY;)0nkbeOcZ-V9t0ow#gw;ibk&r^CfG%l5!ZQ%oJ3jg9F&6q_R745{b0# z$iQF^nh?U>k;Z*Zi1nw*3>-PaL|{>fm2L^%ivr}^Rr8v|!#ccE2Q0vtMs!$b-d)LJ z7C|Gb^S#ani{uq2f)UxDQ0WTYTy~%A9kTOzvTtN)^{KV1PZkGG_7$xf=Mg)n(jnji z^Z@#0l_jiPm?5*Nh^}q0C67mX?~hu3iTZbLU>5&{HAxZG z5a9+E$e2dyUEyv$`%tKlH{?nTlQ`{D_553GeUhFlkU9?4$@$6RT! z3WVa-t}Mvw$BB_rMLC7lWe6gd)7TZ*ny=(PU!a|adQ9=lI1=J_>KY9xtm>`8Dq|H^ z(u2Kf8eTN@PGQx6Yi^_chQiAK@`9-^DXb&{3k0XIl27vuFfJQWSZ#p=*#uX%ncub` z{cK}I9RXNUSUD$ZiKud+)>z|0pjvhct6jm9lB(Q*(g=n(cuzjU@Fe11=aqgSD1353 z$&YStEl?&;C$>=DOSbldYER39dDaVNHXltm{5J1wb6NuR>9ho$NP}ItrR~Fi>UN;L z!@}UC1fa`%vDmX=CIu)Eo^hLf&INewhPUl$RbgmUn=d~B+pEV2G3oYl( zLMD5W3tuOM9jyhr2ArJ{SCOq>l2LQWy`zH`r`w=|{0PrM}d7lN;iK`nu zKmmbQAQz-GcPQFi;_7PIYnZsK4G4EH0cS9JVd4ubUQ}fa$?K&Tv5Mz*a7{tuO5!ci zmc&^4i;A`zC;i{|tY#_e-y(iZ6do-hDDx*GyY6JOLQV!NmB6Vjqrw%-%&G>6_wWhE(HkumE-en#;yvM?12i?|Cah`1KYi6_2|vC?sC zco>=sFC!)1HQodG+Zh(DS)CClvhXSBYuITZumtizZSfTCUK*nycuq#58MmIo!ouAV z(`nAmUPWOUV;1}0^ZuM}6JvU5abjuwqJt2Q*<^DTQ5Q{?u?-1^SUEb~6fu1UW0L8T zURnLNfJK?fGWt>?Z96`p%={Lg3?)l0B0`N}Cd*iZpiKTw&besycx9*xy>*34#a>@@ zM(z5}5-@3j&}`GwwvXJ zWj1hquD~ZW+8(!IbeC&OqL-Qc%O-}Lpfa&~|L-G%G!-S8*}As5}S5Qo@%Jy;YD^J|g+j-rL>h49>qxONucMHgcrthEzS^Wv`(_38&rx9hyo{NjF$*%L<>!-* zsJ=rut?hVF^1?hbI6V(j(2!@sIU_%%&F(>suhB6jUQVGPP9IYy<{lqaGK_0Aa!vqW zvStmH&Bh?pII+b%{6Tas60vTmuUI4wF}<9iT2`OjOA%!3_Gh##8?8p=c$7i5^7dDL z47dG%$F4?y`%hup>o2FdqYWr6$i%hfn?k2+-n7~9cvfB#o*^QlqisQ$Y& z@OwP^2exr%mYNQxQscGcE)tmXB9(K#d`PEqrj4PXK>nf|W9qBzcYFsPO#fty7-eHv zN-eCdR3v)_2Tq@f=`r^!uk~`}wO)}CZ$>>A%b?|8ELZ6(RZ-XIbFI8VFS90k7&CK~ zz7oc?&RnC1DR#O}WyRL1tk@-%=2KMcXJ?}o$|s^sA-Xz7Ov8k4N%`|^$8sX*D1J4h zitdYYD-XzCA_rG#ljpTs@+_5wm9;;VbhA7anY%pKBuam=q%6xQZV4YRmwMXEFwOT} zw!W7w=4I1I=Y`Po(q()3pTXs2=?%x2s509}`2G?{k$`37H|n_%O~=zFrYX`3h+Sgm z^T;k6WLANVxEPv@Q4!rl+-XN;j8WAyDErpRP&IgP&tUOLaj=L#G-~HsSj6$LV&lZZ z{_Sgpv^T}M&+vP_HXeN*{?UKw5-b8T0HJ9awZ%K-%^m67nvw zzLg>xW{!kR4g-s$6Ang8&simYQCy)V7^yW@TJ{OXTv#Ffxw6+H7-ETBTb~EZr}*uF z7tbxa0kcPt7hGY1C|0yJ4ep{Gjn27pUgylDC#+Hf8Z+5rBsn{4rhH5Hrq7`X(Fs3K zyWJ5U0cVv8smslZ)RidiuR@%I2siSiFHe?$=wu9Wgopha|w+td?8T&>sR^ zQP0cNx`m?2odLyU?+pI45Cx+(3Wlw^nc8S_sZE5aY&Hv0Tj9WN0<7(3U8*BAcb9n} zh^Q&DjMyR+O`?p;U^E>)q$C5(W{e(Q`t^G!{|HWB|5~`QGChnDzuzP#*F2!ZgE|ld zah3Unj6xvl%tN~Jc9A;bAg(kI>+3rkldO1G<`I29nl&HL=LfTjez?+R zc+v_Wkm7O$KwPN+h%3!UGYWrbR;0yM1`{GlSoHN%S@VQGiGm>iif;U@8ha{ZK9@C5 z=a`MpXU#KN^9B9>Y}R~Hw|q&5=W_VyekEg`m&TFKzHGjlF<;A}bo{(p_>mG(ZSwfB|z7sCuWhW@Ff0;s~?7Y@aU`#n1oWJ0XKsIdhV!xtt(o5~pXK;t4a zXM!a}XnI1b3hTuiXe-JbNE0cD>>xJcBkBU22$yc{WiggJ1mh{|e1*$=forXcaL8U2 zbAle1b=W6fRmwar!M8^se|jXh<}~grKIj*V?$Tm7dOW03w7Np65YZ!UFxQJw#YsDs zQ9HaA5_oex^nwlM$fM)$%Hv}Qr@L7-j$Jw@VwiUgv;-!=mLu4*54R9=&;kRsTjuL^ zSOzoZtQ_YLi+#QkbsLZPUgps!{HuAK-?(uZH-_wp(R)L#=F)O<`wDKy4v(hQIjBeP zcWt|0@@Qg6kQQSXBa?xB`J8}2eE!BwMLoiY4 zXCkHIzvs>O&99QGjXARhX^t&EVacPux?2)VN5;ICH$O1HHu_vqr{;&|*L`&|ymTm6 zSRRWC@20Xpz;^Q+V<>_XB$_c49bl-?L!D>PH}kq{U1Xf&XD!EX)u&{9Ispgm+#jNs zk%O#`wGSn9L77P9Fu*J5CHl{L43vc*RMK@j9rDkp92VOLabc+baIvpATx0@)Kjtjp zvHw-c2uZ0YCYEY`G7)}wT@fU)sc%4>(yTE3Bwow%OLoplpj8rXD?(e%Ju7ZYFN7CV zLlSf@9q%-zL{@mXAeWW8N0OW-{sLOxg=M(Udr)<_GBDgAC?Fp@y4+hM^i>!=b2x zCHo7PzG9ZT&=a-fbgrKcwU7&1fM_SSuq>g4XA@h12qw0$JfVfJm$#5kiF*J_IsV`2 zwN#35U}~I$L1`ebh8j_>6SsN~07i}7AZ!b}dJk57kqFu=cC`M$;GV%`u^5+rXC*>* z>yxH^Wvw>RS<`mTw4XPtv{F}}WtkwIzhLDJ4tk)^hwN`;*{84=Nj04^Ytv~FSvx0i z7v7xsN)ns)WpSx@7f$h?5vTu4sP%fUb-jII8!fwgutPZ<5^1X@-qw$4>u)Nwb;t&1 zq_AWiPHJm%tgRI6PRhAHxKW4UQYtmUbtJj1LcA?h2C2pha2@s9I+onl)OcIdY3q^- zZS{I>-J9IjW%0I}X=_e}wuHeo#^cFtd1b}4xb1sPEu^hQ71|QDkRuBGDW9SRdwIJx zd^Vpqmuq3>_$RH=RQ_G|in(HkSInW*ew&${Y7e#F?5z`})UXJX(g^*y#JKju`!Ix> z970)Xn{ia64nrpUkcaQXfLZ=&Rh&-N(J}w2oQI-Fuk!rT@-2I?)jsIfoByEtbS@Qgs?dYeO6zG6>89TM*8kl2 zResPvX=`K3S1ZD--aLp4{NAGSlEhY1L&jvNhd_75(>=wLPCA(#=6!?Q29_<3Xbq-@ z+tq7A**;eP5edtgv+MO1G$RZal3&Xk(y(QFtughb;VQe<{~Vsa@$a}-|JHItVs~4L zN4iJ)hC|R52g_XIT65rpnQ~8E?>gU<*78BGz-#hgrV^FM$>Q9~rYEkLPRy;qc>_M_=T%9?@MSxESmrX$)$V zs@q@>D(Zn(y!=j^i~C}g607SS+IpCF{m2oNndAs1=SLrr5S3-UOQMh?$AbH;J9htJ z&X9}hSu6U}Ds_$sLI(->qmj!Ff4mRQyo5g{*+?qw;Rcqr9^Or3LOwIjsThcy7dU~t zOn>W~?}@C&oGc+{+(&u%1IR*;VK4hosPP$K7Ny~;wQ`btP?gm#&0RA<9nNkeYzO4g zz4Rwvo7wn&p430NGe>7(sPfW`;gDZ%peK@B%`m5QxL=3Uaz;L*vj?)~!5pQ>vAGcW z(ZJ#Dwt~moRKeq|vgy3dyep$39#fPQ3){{#a|Uevm-pz(doxOQHN%|An)l}@Ek#X_ zN6ZJ1d#s_S*)#OalZ~g@Jf2aCs}|+HYB3+n%EHs4JXg)il>ez5_>o_hnonfR6B!wM zR+>*M3D##wqc498%7Q$VV-@EHDm76+a7xO*Giao~<4V-rOu&gT0()C6vf* z4Mzrx_l@8f0Payb!W634DyeLpT{q=nYG?_!fXxPuiZs}=D5Dplsp&a{zhrE1G-Bsu z)4*vB=IEeoGI4{NZc+^~zb?oC2!7NW9%(IHnj2#6CITLmy}{n*mN*o4us8&vj(SO# z7!EuyDg?+?CW4;%0;xHVXv+b~$aA1U)5e=xvU%6qgFRx1tPZev80)Qa1$`~!)vm~! zZ>q|KyYVE$Axn~FB~-ftKb#kw4TD>p`%CGikB^Re*@MPIHXAMQ4$EZBE1szVGeVi7 zJXk3ZS-WL52Q0!xQ6$f8r8=>vcXX2+YFKwVqXh4<>~`TCS0lw5EOKr=ZlbtM-h5X! zk6$t0OM1>DGcNo9Cv@jy*6tuQ%xW#>$>%PcbKt`_Kp%#~{tfl)XyD))mu8P?nLq+d2^E1Qz zzNhQ9-aZu=BO!h#O|Ug~5U_yzIV=~;Yx3T$dv@>b>ezMD!Ckv|Z7uOo+yHJ@-qv!J zxlNWdrS#;Mt(*4YD3=}TIaWM8BC5s`s4Qsxj< zCQn(Z$a=qm-D$xsQJnqbkA}9IyT?8$v-#G;y*50VW#JM>DU;N`j*cxb7zF3Bpj~m~ z1V3H7dAy%(dwzABc?sQnJHyFwT4sCDF33A%b>d4&AR9r&CellGV%+Ho(p;K_Flp;y zXs<$}-%zW+(OyREXq^muNU3sayOI;nJtDZ<#w|ZUeP3kHg@9JK<>P+m)%eq_Y zYLKpmB3*Uau4=%Ww|S$w&J$j8Xin;+7q53(5Vhir6C<>;nodVTE# z{2vjQq?;KjWNOcu?2{%>6FpZ`X(Ce%~^)`g3hY+9M z!D4(T{&?@g!1Nwm-rmd7ejgIs;|$=VHWFi)2n%UhWj3Or1pVCy$U7v1B>-zFG6^h}96_k)!xj#)C#A3FsuWM7O7OuDR zK#j_=)VuRqTbkv(S-roh{uQ%keb%04blT8Vr?M_<`5-7}ZCl|on!cQJGP$PAm&|N+ zbj1^Gd{_&KzuPqVQOT@xFhu-ypHE#+r9^f z_Cs<{z0Q^2refG1;yv=m{PL&fm&~8zW}!EBl6jwnZ^9w=Qw_a-6YYDEC3rLOHAjfN zNz>a1xrcf|WDj!Bz3Aub>GgJW>&H<8JPsZ?fgU^y1RH^>pXK}#>)<56O0NG4?$jdJ z*#T7E5Hi%>{>D+bu>NKgt^{`#u6ohb6s~^J)E2IJ(dEB(_`$^=uK|R$G`bE!_%eVU z;=vl!;7Z!2=!9u%DK6Fj>9v2@_%xUGZzcbt43#IS*jCa^T)(F8VsboQw^U$csx9 zK{3Nzqcb8XrkQK02P5ax4HLn{{OiL6Xu>Y|EIN^dz@U zGuv_K&nR1K=2UU;(7+I!i?jeUaTjs(+%;g`=^Z@i(L!8}l9cT1K8Zxu(Aj&mzk7IO zkjJkozvH?P17%wa*IafNu2(C)L$~=rICWS>g+LB=Be>UNK@z3^YR$dO=%75A9#p1>THEhP<@`NdglZ_-*0@O(dn?`#3$P`fuR)KZx zz|TxED|_;o?DzRf;^+&IBjBaHHQSzL=DlTaqg(Ls8wFYUnYbve?}V%)|oYE=92ji%JZrc#eW@ zn;UTSs29ze#{Z`A@8L|9FlB+hy9)BQ*e&lJ{1eGSk;+`HB$g~zWrPP zx1#U0b{?F+M+b9uGX&ulW_Aa6?&7ywxofYvksY#)4RSMFf(GBhbJJj%U0s|TnH*Qu z2Dsr(TDe1-c_+!}${N18_p+AJx|}8&?VYrv(Ka(q>%3w)Vi*gJ8`!6Nktv!#$6Oo& z#vV)xMc(xh3yZTnHshb7e$|hIDvN8C!a>xJR)PNN(%w4_zy4N!RF)Ldi9{_8oB!i~ zn)4g{pnpsGm$=Pw_}%PzpT|gbz>hQ|wT|>1-dIw-Y_|nsY!;y^1K{H<%+zqd!WNbE zDxv!>kac+=^Y{Pb4kAbOuiOVTsP78+5o{hZ}UbQHPB>Y|>$~4qJ5Cs>3!N zZqi}94jnq&tivrj?9gGS4!d;Nt-~H2Zq;G04xKu5>99|S+jO{HhdXrGufv@>9MIt| z9q!iQEjk?3;T|2jbvUF$j}C`*DC%%Thod?i)1fz$x;K+Lo=Kr`i?d*r>^+IBT-q5v z;;tV_YY(;sZ{{MI^-O?4v z4itbX4i1x-9r!&?Glhx5a>>i@3=wOe1ft)oCQdhf#1@07WXsCAe!B)o7(yNH>iTSS z7q@lyiBb1%*)`G!Xpwe&RsvA!2M*nf(kmK074Q`i1ms;!9?~S&^{#WXwT)!nmkaIpJ~cUOiw z&At2`j5v1=ZMXM1f?*8&c5NAn56c0bRR1AIroOP>YB7qK&rfwuLT0SdX77T-=;J6 zN94}PMc18I5;ywOo^Bs~k$ zS=h!tc?f+BLpU~ISqjzD;V7HvNXu!R`g4{&>HMZ%D zd$%omx1%piS>fCgj8J56LXv@-MYGAjc(l}emEJdRU3%ojH?8yXwFmsK4u&KfUBUqT zhu8^4uloDNUx@Od3*42$sFi2%`bzcZQv<1!`ojIsxch128MX1O`JxU~=6cqASqD5vo;6?9;p-ey_vwII z>{%6P* z9rG{q=65xFzo)OiZ~j0BuKm8g{u>?sKOO$a9sVSbvE$G3=HIKm|DeO4>+m0S_)GJj z^5(zl@FN}m()>4luFKy!jvIf9mkpdFpP`=#TaF$L@@4f1|H|qhJ3<*Z#Np zKY8=FdWnB$e!?M@D)TQ%k|z>`XLJium4N@;KHNkl|Dt6`zCl0kquL!PXmW{|?HK46 z3b2g+?jz_Tm){&#rs-!XV=Xsic|XS(C9*H+h1M*T!X#uc@ual4IUeU*SU=@?bN6xC z`F}3PO5|&9>TKMEbY;rv<{p-gMY@!-2bYH)Oa%|#H}-?85+5AIY~*@Ws#5h>Tc~j{ z6D44;2t8UG^f`Y?kfF<20rjv`0&YVI zc$00w>7M*~;&!4d&e%>tA07}&uqypq{Tw2&JhOGFtzA5`+qNa0n%;t9RrFWywWYHM zaXFPG7JTHjs@hkY6>OMwarkbdrQ1UTOa}u5m3hwx10?Z^X9X_-^%e$ru)+WZie3l^ zG2Rq&m5IaRDmrORmCx1Ny}1IddQC;<$}4GI0;`|78mKT=uC4G~fu|DyY={GRim~2b zVXQuYVEZHhy-=qTfNul9hpGk;@(~A+m(dsp@I3(d-Uu&F6aQD`mQ2>`~ zR%hBe3g!7=GT77N?UUpQPXO(ma@^pzUjiFeBN1#b=&&@$-v;dOOaN@y7_WoUHl2IU zOpk+2B{m!tDuMlB+HkY|VLRLKMRBm_%w@K{+HfVXe+#f*uL!nlRM2V7q1owwjHC{iy(Kg{<+a7c4yI`z)2(|6ly} zn_|0A&Rp3CeZ11Z7+e<$tZ`j5;L)QlbYE#SPkWtpFm`In|o~pr^h*jPgqKLjF-s~#g`RdRl zMc;X4M32bkbr8Xr3*+ry3D{Rv1Urr~kpbgiTa39V-YiuZQa4ltyE4W^zDxq!i_j1D zaB3T1-&7IoIL1U^O$2*M9PC|yy}KgVl`$s5a1z*;#@oLQuy3yjb{u0OT_=LQG~Vo6 z0Q+D?uq$KCXN-?Acd?7L-}98OTn5rycFru1_j1HErjCYy&j))cAK*8Y?QwYXnE-Ff z(k{F?*>78zXGOgAelsaG5E{eep!LZ?>yy3Kn3xldJVNg^v-oh%wpk?EE3=I0A(0InepstTF21PFv z-yD(<%GTE>*c_j$^7S>a2j?aZAsagz*>M9BBw)hMG5@0`95$rF~ zhT}QEWVs-8VToY3$D92{!2U)>uwAnv_G&iF1)*n40((`w{j-4mN=2~05`g^`5A5d? z!CoD2_S=B{or++)W(BsIje`BvB(T@S+kXwPe^3$ZuLWR#%>(=EiD0jdH~U+F{dz^P zU9$pP%|^lgMX!S{k9W(qwk>?*oLLv|;rH3Ae-P>+x>vtp0T;LP4cmjb9fwDs#oyYg zlQ^&xJ@^&xJ@@uH5~5oSOS>-84!qOEP< z(#zw+`43FkpNEDM-Boyi*=c%|*grR6J}-)n*XtnQMd?7Jxgy@he+6CtC^VWVx^`WN z7j<1E@uKLG6GwApysQ7kXntIAG-NvQM)PvnXwFs`%~kO(e!^(}zT#+H7aEQ0B6&2g zc%20-o$%<@v7Tz6f;Ac2QxYCMX9pwMo#=VaQLuZhMmf=I;>}Jr^)*u}&XH?YTSU!< zw+PDnB(T@V+n)v4vnzo8ON1ggJo;_)2Lc;wKqA=J#+z*c?1dG;_M6R6`&!Kk?C*M- z5~4D_4#N7%>*CF?FzK3=w)t`;qZ*Zp410ywROH2Nh_|(l8Mv&%47j#LNd%x~00W5E zY5*Ww(Cg!kt_Q$tD**TdWM~118O3Yr8a_1-b*KYxP)L*$%?gVnH%HH++3lVf8jNQDaUIj7#PrOj1O!t1M3{4DGWjhO>K%dbtg?7sL<4Jdr)Ck zN@!|xyeY!YYI-U(^{*fwnkS4?UQ;1e`j&W0_nO+8K)e^#DyhSfQyuBq5tdg^ewtshi?WJxo*Ytk{&BAS`tWO>K`i z^$1NpTCpj&Cb9P=G}RGr>T#MYw>^P?rL|nx^8m8-Ezg2O^HmSkI4mW+xEB?Mw>LNEy>ro&4@ z2qb|7WP?LVLLdnV=@q9Zw2<_4=b7tnu zIluHEVkI>fA{5iAT!@|oqN4?h`n9K+SdWb;YISZ=pQorVv{MwTx)DXK$t~(D6!l_( zqF(c$Vr@90s55hm`W8ifyPcv~VfKm&df%bLn1WuLTiB22#$Gms!Tfr}=;Fl**0W0H?6|B##fDN3^Z%&{BR^1~jI4ie;KT^S;j-vum z$CgCV6>P|@;J>NhA16=&-U5*rcsmRN`#nbRu2}2@D!>!Lt03HP&(7(1V`)=#zMbOt zOZYN)#bntjn{wz7D^*3Y?xw7K1Ji0au~Vcw7dr*#h^SIG=ax#~$5_7trCJEXrQ&Vj zl^RxiTXG8>N)*^(1<>~OIzAgw0G^Xu7RmEs6$JpyM;j-Q2msH`EtHJ8vB?Dh^bMlF zMpN*-+_H!y5Svv1z0NZjd;!0H0Eqqx?kdlt(3#6lvWw@e|sSc%ZL zteyRf^&`#3|dvDKB$Np-35;UuiNtKO}y zkc%s|TCtuQ%XnUCaz)rw9<}wvFsdorMz+|BvR#!sN$i1(w7G{+l{FK-r)+O!Q(2AO zB~)F;2c)sBON#&J0kwdDfG(ac*Fad~)|byz0rFax$@uFFdL4!l(`vK8*;KZdC{1Ns z*}&Xfwzsx@D-eqpV?DnYc06OpZw{eV#YgW`^Qi@LR4pGcSWG#p;% z%14LfFkf6>?~t>3a=267<=2|M3)`ouxoe^IHguEx!zTEZcvW_nK8z7PP*o$OaanP} zsrFvM>^?zi5e~+++x8p2R@Jflpp3XxyIZ#6d~Zls-B8mc#M@E12U?ajv0aJyb+s20 zC#y;nOk+z`vur8|k(Uc0h6SMx$fwZFH)|{ zZiPUrw!LLRim)3A*+{dPps`Ja1Ot`h-Z$T&J^x*edIvW_ZGqXqFf=!gmXB1Rat&#N z{gF1*MrfBLp8N*rOp$q!!SaeU0ntuIqRcdu_7a@N2V)M5l72kc*Igmj4{=Xrr38h~ zaXfeAS0?B}L9r)rnJ_npv*kSF)I5o;;!@yg{>S=CZ*lxqw$nSMF*e+rTnf0>YPm|7 zt5RHBQY?`aKYCQ9HxZqvMAB!wa|XmeOc_UcY)VnjqCWAb?^mUL z;ysJF-*w#qRw>_llhbaYr{(f^A{i0w(+5<^3f$k={Z5SC9<2(GGBIR^;{@8BZRqpO z?*e)oxptIbd7;@{KL*=t9ED-yYaVA^;XHm{ zf0m~6ol0HAW+Up>bZT>`a}70)28R_qnMJK}$|F(@fdzzNw*o8th{vT%Fu!yI+$T>b z@EPXn;e0KAm@P~}pVF#&Kdbtzgf`HzFC6Pv@r3HH6~_Tu&EaRDR@}zXp+^PDPRbro z-B)o=;3*+!1q|g@g%og94Izla(9&Uqn1bHJTh)kG@w(_yI@1191Ac-Iv6oH*_`!g% z6p{?~$Zj*FSMs!q=mgbxIM+b-ZN!Dzj?C^rMr-+Q7hhfoF?NDr9p5)nLOsN2;O*T! zy@=3AO@^%a>+o%<2`(4oi!KmpF{qb7v?Y8gStmwvwwN=C)MW)(&X&O-k^kk~=dJ9K z!SLs9Pc0 zfg;wXi4tK)3UReTUfY;bXQ$Mrl#Ca)s0}G~j@*^;LQ0*VQWwZoWlC*L$ygz-s#B^a zrM9JHs6ZsEl)5k_V}u>5E~R#{RGWro3=PP~z_=i(=n{%W35m+1yNxs%6YTTG;>K9r zEt?Ec!ZJ)q$i8d2I2l8OLj6Y`LFq$ISXHw>P_~nFz>*Fr&%&mAX76Rkd$p`FMz(1t zn4NHsA)|+qy^Rc)tmw(!;K0OKZP;gRA`=19X@J#U#3QVQtml~hK?jX|w1B^mEutsR z8cFoZoGi}C$-nH;zb zBW6h192ez!nTv{`Se<6@Gs}ctEo&yG)9fLv{S6_E*X2m}ta0YSoU|)3P2@!znraME zO{fUfdDgh>8zr;MxJSUCmJ0c%SJpeWrg8G|>{+Mp+g0ZeA!ZMmFn0V96B1S;2hSdY zi8W^0kh0U~qzz_GEikA|+6@DurrART?ROh=%CK~scGm9RT~j@K2t^1TcmY#*NSRLs z23_oSzye~ZX$N@8v&dSuOOpGs??B2CkUFI;{H8K!aJ6izyEZ9X+K8c!vDQJ=l^2j# zV2UvQf+TpM!3|2G5?mzC?U=AR?Ae!LliuF)1|iZ0GN%387!I@>!YS3wr zPq@ir?HkQuc0CiafUbEs-IT1;O8#e=2XmyInO_MDB-b{4)viDM*&%4B+ZTTC6jwe-#7kE%G9MN#?Y$CMb5 zrAZE07=)!HBxRzMm`w>HHc4VGsmt4^BX!v@q+ z+nP6eH4}C-sM)oZCQ3W`)rBguNKGL;($r8TgMvy1VZDtsmCVFyvz63)l}rg$V$dV4 zco;o$=gDPPeoD!k=b@TQ(Akh}PN?oFLETd@c;=Y8B@(Z#`#I_sJGim`AvLpn(_^YM ze!=6aG#3)m@+AmMDyWxYJSR$f2K7Inrpb4`)0zt#G(%w`I@FWuKQ`%R6 z=x1+~%FPSpF8TY20z078WbiAKR|eZx3>$`UZUTV~ZB@fEVE3XTg>5EA`5KJuYnU37K+bQ1v*3ru!qAw*|kW;~m`a6@!9-UMn8UeLtW=Dm|)qKc-@%=vbF z%0t3@XTBR*Xi^~?H4`aV9HGsY(~-&o-;I=9JXY~7Mndt4R@jU~>a5rG>nQBx$T^b8ErGCM95>wJ+} zCXjn}cqs86xW|$~QeEk?7xsY5rp~J)>=k3C`T;`C(8yzhO!OZ>J$SWX$79DP?F{?- z<-V;6(>KC)JjvGS3Cv6%k15*5^lyCq+Orm69lQIp7E(?rAK>+y?|B-BH=JvZ1kNQBaDV{$#RsU$b{JcXl~|;W&e~ zx?62~H0zN-e!^yLf<8<-Q&|BWYR-t2%WpCLu|yHo#>kz6i6s4VS7XK=RSrfdVeaF$ zyO!Qo`Z9@T8Rz|S&TN<66_Z#>Eyg&Ocne}MPd0BV)#KBu$i(JMP+0Oas)%b@sAq|S zqqSGZ(d~{WD(6H>uye9f!X(}iXo|}DDi?$qfG{%zLJfH z-CTlUiFJobThgkSb@euTXK&Zj4@`9GTUOv0II?JJ~}% zgSXh!9`YE5aqq#WRjC9_eLzjf{{Txk>H};Z>s|$RD1MP*hylj%MeO3^EyU;ehda;ckUDznZ{np%>8)`c@3TrC zF)!QqS=CQ60g#{ikSfC*HnDAaP*TbSu0U?mRS$YV4ajKpyqv!kK?BS&kcFz&K)%>i%M0|5- zD&s5(A(NLPazrr*kr*@C6oA>nUV!OTd9=N%bb7L_$B##l{cOb|$TmEHh^=H5X0o5Nj3AHB z5@Zo_Bgpz}BZpRDrjb37D@<%8)0Q9|xRF{B|P{xU#N@|me?!)aNix<_9!KPGDavo!)E(fvtad=e?9p$ z?@n-jpH|28LvnaHt$wUOQOwyVlloI=UHyraenfsBmBXh~`ZMzTn7sRVTDR)MayXLI zPtfz|C*|U3T7OnQmDEqC^fPk(ti1a95P1-;ip*nbO}%v%>XlIeaIrzpKB;=H8V4fxPjTK(|0<<_ozkz!JFlknYia$uej}xSBfnoy z>Nkt^Z}soeYOemh-1$RF|EK)^Q4W7f>;KY!PU^p;^k36zss39^|6T6?x0Lmdl>TQ@ z|4&-2)_;?m|FYeoQWM#Lnv`MOSv+vGnQ~HcTAXr- zir?xG6~EPS(@rO+vm6MB|GLvP<#bCsrA~J_^pM*<<*b*Sosx2Tr<^`1r?1@VCq?y7 zIs<^t8JKnkIc0JfEQcW}htT)0JHt{Af$v{;Mx-3V-nTjitU&QSV=JhbQpzFX{p$`9?_YPOq@1ZRz?qhGNHTPTL)`mT zXGY4IDW#FEXeqMf%uYFT1fJ7V&fJtUFXhZnISW$G!j!WpPBxO=N!HVBbR9Vt) zN+L;#N4we!G+UNCKb{pp*@mC?W6^rSnN2A46_MZhS&Tz-W4^7L!?Kz*v z8ygz%8i^!>Up|()$pXuYgoN*X+aau%zI|-`pxBZwqIW*B{^Q7C*@Y}6$=A>)zpNm= zb9N+c>!aWW*$%C@_cHO9GXue330u5eHS>|##bgKM4kB^uZ8GSfx_g8obeo9Jk{pY{cj&eyO!u5S_C0a+mz)QofZH;TXZ0Y$HDDBL9r4EP zTPyi#Xsq2H$?0XgD!11_l9ar$*1YW0HV{=epLi`yg^V-rFI&wQ@m(#=Sk zUS1KKZ>3iU6Rdc-RQ~^*DSIkOj*g>y{@RM)e;~-YIaB(HcVr_g?xEx$GG$g%ZQLaN zTqO|+L?lm1=SJ_l^Nqh6i`J5qL>f#R8BE$pTrw~M8nVu00E)<$^3G>{X+Psj;cPE? zsaO&uhVdxGNkk`am?T+Q)(75R^gi>$3u8g=Q$)vIL(4C!ln+??6^E%{dzQDs%m{`3 zB;yN4k?SIhH2GY3niYXOsL-Tk;pyT6-=cwdy0E}gB<9qp%qWqsXKi>3mf_k=ThpV4C7ZqRono%g%Wjn2UitR9ufD9I)c0+O4Y4@e>k@<{xKqHIbEHn-Cy%E&OYv(#nW zi)q|5&*+!eT%z8*ndb$=h(NNLjAKi4b7d{tHRaVjA86ic+FdKVIma!j;aFR>&R)9C z&CV@J=T=C17Kwg#?`~*h8LUi-G>+yo%974)uJa)w-U7W)=y?bhR+PEU?am#pbEgAU z?slDfoO@AQd2k0%foj&caipu`I*ICD&bJYjlX^Jr3YikD@0hofp{%-vZQl(v;Idj7gqAH^%~o*Jhzyi# zRxL5mRML2l3V%N9+>vyia-FB0XI$r5=X0*}dFKnr`l9PRuZO$N3(l8Z z=gZDlquJa4$m!M?F z6*90iVEqaOG0zNqJV(5;hI)}Jvp;MkUCT1{I)oLvf|lQtla7-s*Oq1SaAqD#Voa_w z=Dv5s`&JTEW93Q{E3WgZ^O_uhX;8!mp%GFBK9keY6!C_utM$2Z z*eZugIWR}+Wf_!@C1EDCJV)L-N8UO|-a1F#(p&he;O|_TtF1eeGLmnab&Jci)^<76 z%H<_;cA*^Vaz-uNq?TrVxg4&LOX}OEtK{-Ma<)+p%oKU%eqbq% zOgg`Doj0XF_^tChSFhkquMin1wZN@v$h;fy%GYZi>uj%sks>@QtCQS)G}yAivylJ= zyEC`B;gQJ~CGY26?#;QE=2}rxCOE zjd?@X{IP9j5Z+C&^i%yUpvSf(W2K~X_{ltO50b52c|-_428)pN*x@?TQzI>#+3Bo_ zSRXK&mw+y!%NZd7>^|8Pb2^d@u{z3X6{=h4=3^33y;wvH?xN`IJq5Ipd4T6zM8npz z36f@Lf09Ab<@s0__?U`L4^KFIcy|1I8K-xtu5H>aop1oa{K#>WL40OM$~L=KyI6h- zwLCr>3HRwYpb&TE1MtdkmjQU5q{xd_2zz5zG}P7cf=yGpz9Go;DJ{e3!fa{T-(>QF zcJnM?$&wvPkFS7^7W=3t&uy=;3~(pb5BM{O0tKOhQV|1obD?Piok z-2)>S9lU1dG^-kRjjQs)?MxVleYK8gFc^tZ4IuNBDiQ=eF;SdcAX~d+{({OX6BtCc zIMUj?dB|mAL>*rk7(dyjSbUi>*mIc;FpABmP^qmkdrM_`xb=8bexCZGIFq!`f0)yM)>YN#~t~7~>W0hNJm2t?*Y;l~A7fKZo^UawuB3*E;7qJk0LE*Sd?4CGAvQe?? z(!}ch8E2Q_1Zacp{*tS3{1|WR@2|LRooXkkUvqAK5sS!A`YKn&>NWC{Y9${B8y)(7 z#@}lpAKSeacB4bMfHzG2#WH2&74ShECdEN=(Wh1XkQ#VY6|vXC>>5t7542eJJ+O7S zgp7ViWamTYL#hWSM^%?ieGkhv+injiw=dqjrM@@sOf?sOc8L!ofDFNpSK*kS;ND>N zu9oA?K9jAWbBW}#02lv-YJCX9MMSXu9q$**be0F;`zc8PoSzLK`wCKoT1n*s*t7fy zK^jKCpt^S*NXQlgw7K`lXxTbqp&E#1sA8)@f~^LF*=kV1R)g`Xl5GcDfvnmz;18J@e6<4hONm^X_mmv+)o3=Qe zf-tfJdY_SkQ+?z-DHu_DD(JBrB`gjgJ#uzz&Vc^+s|Dq3<``x7c?_FT)Tiiq)um4n z@0TA^i9Yd1`ouq{MjukW`oy1AquGwrOJ056JUS2~Zqm~_BReyUH~K-Kxe00hAkFt? zw)EV>7Mfd;=G&0#53$+#c8GNc@nh~}=f_>_`nVag-e<6tP&>0}w<1k(zNjE++#hi( zpP&{o`1>6q0G3*75d_YR{K-D_Wje-FhZG-iEdi)RV9w)OJdrE1+Xk_N3bu_g8BFX3 zs*eNDL$rcV80f5~sn7`{rfHc_^*Auh(1?gcv>Wg1i$Jq zh`$8HUjgDPfcPpPz6OY|1L7Ni_!~fcGYiBnM%pqUre&hsqvA8P2x$|QD&38`iQRrrU|SuWQp(=B`e~y`{fNUrJwXv?2((hY4oSnyu)gKt6GpFy%yN60NagRa@|#_?!msio&eel^>&I{ zrF#d!ma5tM6s{GUB&Ml9={|;%eFMq;Il#tw+LGP47Fv+PWV9y0irDP_5OUG|D0o6y zEM8U4Cch=72k0?+jDS5R0Q*rRBi}x%mTvMqtRxnbnG>D7f zus-4mP9yaRZ^mY$yWD~`A|y2)x}#x?mjyz)dJ~94PXx|Mz~-fO zc}ECu>-Tlp`P42w&8W!w!{kP4dmm9NGa_0leA0A#WP}{7=TY^1Q?2c4MtKI7AnUi1 ztzKoeTMJr=K{m3LMAWy8`p%$9tiVNoWvIRiuL%_E0f8)C1B8NHjt#u3fGhO=D$h(xB?IKzySrXJ^q&eV#g9U!WH1$`DYC^gyq_Wlh@Sc(upz zfs~Bl&4$@Ck=EN)*B)xEnA>l?vEqTZUXlHCUEyw@z~VMrX?3;gs<)|LdWY(xx2wMV z4$v2dY8>d*Sggx}8VitNeS2g$OUSSxAcKx1!$pvx5i&GGh8Dg>w70Xa}RkYlb#4izWT;>JNY-~HCl1Jif25BU~Od@5$N z)dO#}3i*0t^9~NkXLZySm;hJOV;*2L$kjl7l^Q~(#d3Wunbk`7? zxip$#G<{NuqV4$HpXE&O2e6Z4-_+zVcMZLPCOV4jr7u>GWrIje(_`?S1t>#!o zNO&SgiYQ=n)wHT@o^GO{r%JcmqLv>~JGibrq^{zn3n7VI?mVLEtnqu{j3O=ZK@&X_ zW9TN&9n&*0woegb z->-)2|3ImJSWVR*p|AKDeZ_-ngZ{X>P(MT{#)k>U{s|(veNw%TjEOg58Xh7@&`0#A z)mQXq)Nk}->bKnc6WI>`qL1hz{UkmDM=|g|OBeW*;iUu>{Qy0;sN#eK%|mhj4^UpE z>h-C5B=Yw@wOx=+TnVjdsHz{VGWfGvoA>9ukx>A-aq`xn;aW8DGyX19i_}3We{F^>=!3OvskU zy>K^btlyKH`*Q3J+mC!7gns~QeuQ#;nLf-KoK~Sv(32sfRD4={74L7O;)^3I#;nws zmHHJbewB(}3t^n8cuG+5MQ~9x`_ycVFDX)ss0aC|3@`J|4B{J{}rl! zD!r-2ds=(dU)FB*(b)fk>iM4W$mWmft zx!=g&1qef0)#Ya3%oM@prSImBRYng;5IH*yl>eF-(=z4@Sscd7t9V{bK{xbXg;{mQ z5Dr&fec^jAm?AM2-ZPZL0drYo6>LNkMVoh>90QP z3@`+f5qO;%ZS0*GW5NDW6%ddiq8G6J9LlbC5d zo7}k8kT{^*)p_KNpxbeh>l!nmm1*~;r*bgYoKb3$Gg?h^D%28ZjN0Igg(TzD4rhFT zE&(Y5glYqXYCVLeG5H|V5iv$KLp)+^V2EIeQLN_$=>EV%w>lf$Yu^EMughR+3@K+O zn9c&zIbeD^n9c>$d0=X-Nnt9{KmshQ11zfpEGq&m2LxDl4zQe#U1|sJzw)rGGgwY) zr!nMNr0{k4@ic=RF}HkO3AU?flp!GH--2*w>^vti1FLS_?k$JF9738Fs=gQYA~(=<85HP9gKIJB#h?;7{BcC zczZUF3rO z>kW7^=iy339h9XEN{4%6DxwtXMJBCOF>X;yJODoF0kFnUI+(ge!CT`}G~;OgLOqI% zAy-zInL@YXSv8i&?|YP!8#sACcvSFvV@5xi`5NbDNP3GZcWzVToDV_TLu!t5yE@&u z6J2qaTJ78uz^>F9Z=@k-GSw+lc!Q005cR%TFZE#m2>1!{mK)fE-t)ZzyC)OT;14ed zegsNokEt=v$JIpVAvN83Sj}@jq2@cELMk2!fxO%!GQfBsPh`|5YFj|YUCaY{ z2iMYD<;)Zu1Y}H`n?h9Xd%G%;IgZ2X1J7ijvW#aw)j6UDJ5Q?NWN94ZSVP%bcw@C| zmyyJ?*sJwc$Rwh$Dx1kctr1kB`XRn*{h%iU)&LQp$Z~K-2r4tGb)EyNFT&y%*xvmm zwb1#pT1mFX%w*>(4>I7;%MDwL#X-x1Q37zuzpe(xRO!u(XJSXxErPo?1CLS}YC7Mf zmT##Nd=b0gd`Jm_A%Ct%+fz*m!D891A`bk8Xd6R3LMtt{;A0g0V~F}wHNyFs0oxMv zR0FJ-%qs&np5s+DBD<>FBG~AmV8>3jCem{|uTsLW6Y(-x~ajWV;mFfk%jkKy$+rh>orV3S*xZ1-a(BK zcn4KS;oXnA`-3-OoMVHs@V0d;#`u0CJgYstZ;!y+pKgx8dpLEE0Pm6DJt`9Kv)aQu zs4)s}zv?Kw$5ZzN@SX(TliR_21JizOQvVJgZx4zr#*hAJVb0G03W6BMW&_2XEGW)4 zoEPeE;!I|wHV~4?Lh(LiU;4B8M)rf@N{wEl>?r}W+n zZ3qZVT6e!1c6+_t6$^pe?)~ zL=J{TD!MJy7~u-Hh3fX&f`DC!3mLexXm8p=A;3Qf;5XA2Zlx{UMqBt0ZQ=G1;L&YC z0MBj#f~9?QTVTUU+ijsO zE_AFdSahP=0zGH`^N4}bu5?YKz3xDTSi52ewF?xr9ux)aihL-9lsR@q z2ArsV^BLfImS*^Qn&B4=JQ=&f!XtKtz!SDB*Z}kn(dWy+^A+gxRp|4z9Qy1G=(E$K zPu)9CpYH(AccIVsq0bL;=wsm#`UpJP^x5?e(dQ??^Hb>abLjJnZ2B-;B>%8WIkWOp z|Bln=b>Mje`n(B!ew$4n4<6`a;K`;>g9q7uw4#_k(@obIjE+UJ2ezt@n)Zd;f1KaI^aU(#86<}Qy0y`=n zj3~_;0w~AyC>7lJKM^OFP&}p<#^WIxEeb$dic}dS!zYMK1$f3BU=pK9&m}=32ZT)Eb~>#0RSR@iGIRwKEq4;4KKi zTi}5QFd^Fc2J+RcTgb{q&TND*Hrpu3&~C)Y+YYJph>^X4?!jE>SPzPif_S4LUWJ+( z9~&Z`=x}QV%h=Fb!P5+Mn1>M0?;;r;7~6MYKJl_)itZSJ&K2myF8p{dd{cmLD%2x* zeSC&m5T6yI-ogOBg#mmEJ@`m|``^AdMLkL z#_>^)6TCmZNKK3{HbB{qZxTSsR0@> z6~J>P^f>^1uF9rQo=tF(ZpS9bhvK;D^FH9Y0s7nsee94fuqoTH2`<8a&Ca6TMQ?MVLt)!BkA z`u&r+fHT&KGuDZJ99!ZcwKD!mb#~k?W7!^3hHe&cnZ~ey+i483AnY_o!e}$UhrGk< zA(v(MMuI|qZcB(`sq_*-*1t2FSMCTn5Ot z+gui+wcl-i#_KjW8bGsXT?o)9S{sl9S_eJpBe`II39!EmrC)^7Uxm_NR~zErG+*} zy8@DL?GiMbun;Yw)-S**W*`@b> zdJl?9ShYa!C33rL_?xcx>x%(VK)s}cpt8@S5UBE~El~dfsQ(1i{{hs00_t0;0(*OE zk)!4m#R96jcm#w&y)+NhZXE=msyu1~RHB-vi%L|FB3BLO_tc`!fZ7F6y8&uu zY>@-1*~F1e)yp~v>Npt=Mhk#EY75jpfZ7*O`vGcSKpg<6tgjW70qWp_RDD+-RWI)# zsO&|$ya1^3s4Y-O0_rG0EeF(5fLZ~lV*qs=ppGvH>bvtmy`qDlPLQ>MXsXJiwm_W< zsM7#-I-pJi)R}-f3sC0(>gfeRy)qBf_jC}{i8A7d22~!l1?plzT>_{}0d)zWo&l)K z0d*yyt||!Xfhx@cgpNn08d0bTb5!K3%9V22;CF3NX2ol^ z>KSN+b!c2sUVw+j-3Q15`ZXTtp965Q3C=a3llZr7(4)G75Ds$&h|5#=@&S`Z512%^ zaKvmR{B150H6XD~O)uJ^<`&heg+)6-piXVz_nacTkykp`#q6vQwI-B3H$dWC4+*&^ zt1&VtyNWFX9pS_iAx@a{b~tg`=>Df2QBOv5q8TJw;KW`yu@6pM3@0uDk&EHPWq}ao zazb>o<;0~PC$8%dC-Ok=C?`%EJ>WDraWt9}2SDN~IB^Y}xE4-a4+8In6W7Cu8w?Ur zoUlj;Cj^OXPF&w1PJA}R33J{KC&rHMKlX@vDw-3l#T4BPCvJrkx50@+aN>3lIRq!} zEW`=Z^%zcYX4}MjJH&}R&^yYBv7-l!g%eLlbK*Zh;=^#_qj2H@IPo9|d>l?Z2qzvc z#0d`xIAM^;=EVCvbe^Uy$t>OGNbU4Yh!f^KniEsvJ>$~0Pbu#iA9vkoIWVjE?14Dj zP+rSz-=6`O$6!b+3^@!#o=}U5o>c4j-Bk410GBzQ*&^y^GwoYCSUKConMl>QmmcNU-8yrXxRhpa{HP$;AuL zxS}tr8KldcSM()t`ifdz^rAYS-P8QfZ+X13ZtS_d%EP3iyg~wtz^Q0_h*NnI z_-n9w1x~#Nr(Or6-@vIi)w%pu75&a&WjSRHXW>+JfK_#XRdv9r>JX<62AoP59!GQP z3n5OK^Y%G40ZvVTQ_q=JmB*<+gVSH&)ZgIL-{I6h!0VrI>K}0GUj;cO2A1X2m3f@H zDd1Gnw5n)MoC2q!35HW&G;J!EQwb*K6G=5AQLN@A(rQt{RjU)7)VcgtCAt*k zl*LLoWwDCp)CWBL+P2T04{^$zM{~-$b7P-P9NnKSs4qnJMTwrE(@Tv{^j1?7ebmfE zKeZsyU#;MGZDOE7M+TR! zH9E0fjZM@VAZ4{@w2B!ZMMlOM(8PuIPPU?28(tV82;?jV2LK6enb*mZaSyW8N_#oXk51XjizOd`v`Mr@(ZMgvfl>yROz>}zQ|Y-W;Q)> z19-e2@*V__n-I$nsP`m37&J0q4z`0F2=-R2Ws7hzq%79=2HQbox1Zp6qroxQ4q|X@ zdppS6N3-KR(EJfLOR=*_dI9*#CXcX=REmj@yhMz0-_3RssVQa{WWsUN|K!Xotzp!_Bx z^=(AzJBZYG3yReJsK{bXpkz<8pXMpe5~~vtmzOi~fJ`X9gdK8N1z6(AXPP2D;uRqi zJ~9A22l)KJW8tt@H+W&MZa|)*!d~5w7xwDqHo{&_k#wzzS5#5rRplmLQ{5AwnT0{}E~Y6D)gGZBG2v5JbXV4Of1+s}&~P)%^?@y5q!c!;&RK z;jYfn+6zW@j>p;}KipNTVY?_}Z_5(*{L*lirc38rF8JO;4LjwwF=SmehFFhrTuxr)(xmE=#GX;f#+G`UXwJr&P6wgCo05u54-(UOH*vbP#GxjR zWwMIE#`P_`ZRA-Ab4!weP^4ReeU>)uXlSV;X?#r;@jO@8FIu>sHJx=0Esa$*i)-sB zs#5@!#I+;}XWOt-S0?_YAJyB&=Qnwo0+16LK^AqdR1xlAGWkkqTCU_*9K=jEZGMZz zqn}?%4llnhZ^#Zh$=>d$&KW`vc!9LnS{I8F6K(rTz0mPU$4B-N=&H8QD20i-0gt|STN`24uDm3}o% zq&4vZ69-ijs?;RJUa@+?a##=w5$lC;rfkW$F^q6cL-WfH%JEQ;c)Nc7>>Ux|PV?T+ zFS2cL^8pm;I-z{4ISE~d=Yx_9?XU^pXG5P_sm_wlp1H4&wNlz;QGHciLldE3SJpJ| zXsBk#oU2Bw3YTz-U5MwP$i?HTPA)MX`XtpDmv~g;l4`um7IyN-=S1g?6q`svkBr-z zlOZIcG_876R#yk8%nJg?Pl{k?+q@FajLnn!Hou`s)iy1wU(?vIU1Fje?Ln;coD@C; zHa?5glki;mQ#XZ8$l?Ye9Yr2Mwq9#)y>^`YISoh{fHlHP!ijp!WCbdaz&x^RuZ{QN?k^&GA=o# z{4wRUD(1kua2AtjQHclM@>XJ`U>lcmC!p4;UaHxsWH}KDgsr z?lf0TQByrF=P9^pNj2S7Gt^9%NtM~IBBF__PFHi2YM#q>v}qmEcWA|kj(tR)rtxwW ztTQqBCFz9Z>e9IxmLhdvuZDUPtlxec$PljL6)JR?$r3lKBP}B$X1$l`BS-&2 zGMkJd-B?3Iua)Xiw#7yZl@JZEZ6&(^{Uvh=T|!Fsu<`Ii zNH9vZrvDx6_?l8AYIa7VPvYq*$=H-s&s5Lk{p!>{iJqy6Gm887AzEtue$}l{aeq{? zTqWXDiVmb$TlzsyRC6c3)<;y5;Z{cDj}?PYU5&!M1~q#vCfIeVLS3&Ws`sj?#7LXL zy}9Z}!tNf#3jd&iT*ewh=@t5-ti^m=ipm~f%*r(ZHfvDdgG}GB1_BNO53nE}#~?$X zHCXq9s53@6qV$Jh^@-9S!4#jb^ks7+|FV_-KlWVs@$vL>@^>mv^CUJ97EdeYsQl}T zfo63YG}a{5nP~u6BX`!yVVzvAm%~{}wIK~^8|84e+}V^=n@i|kx5&jga{F94J1@uu2~A(HeO zU2{~9RZb_~LlteSYiS}Yi5oUOnR}1GUf5{{O_8G+A&Vp9paMp0yp3_rlH;x|WOWAY z69`gOm34KJw-7j@-oau$+5O82+ghCs=>t(E6=c|$&O%Gmd7jK(#ilN8-?(s5gF{^w zHKzFK^|D*2D~i!oBjqqjUE~r?6M;O=&em1UYND%J)D&0kQF}4m^V_DY_SwfxE~`Sk zxL@r}s*7DB>0Roo%LKkW!^9=r`sK#t>5y$he$;aHZdYBQmb&UnwKS>TmR7vT1~t)i*U))>lzjWR5HEU9p(Sx>>tzfADc95|fczk6SBD&a+5ZXs7?i z8H&6-Y+ZnHb^QXH9ELfdyg_bYWF3FtjWve52)2e;P-P6)9ab`81o(=x4&Eb=S&!lSIOTR>eB76E1`+9gta)b2B0k!9t|-;OBqMt!X1p5fs88M+hS6Bm zs*z+{pMIG49LiSIBD3X_naw+m*@!7vw9}Y@o{m*G zD^&9^ujUlC&?Mg0d~+IaTU^1=)V#&3`EE5PRGmc5PqS5$pOObuSNV~r{JI+-P@_0! z$tHQX8YE{H#7<8TKtp-gT{e;_AVVf={?3Km^B~!L%-99!+(i&=F~nF3aLX9VouO8# z}PMJqgNnF66gw~Yi6Z&lqhW!kBibHrpt63z=ykl7($0=mK< zK}NHt@0Uz;Z=_C1-i02Bo3m2ZYJ197j9yf6RGqS^e00TO)w|VCk&_X-Z3w`2tmPeu zdo9AX+f-^dWDN}}9qLt@f|hd_D+|SDsJR|uLP4p%n^fD^uQm%aORfEkJT8V}mw?Zu zp^CZ%6?O9}qA=JzpMtM|%?rJXR`9(@dJkBlTUEcKsy~<=R-~61n4zN0zH|U-z9mG# z9zh*F5Sqo5h^>v-SV`VYxl(dpR*weRsj-A%(F3X&{|tmOQ@+JTcInm$-x%b~0~-DaKo+A^3_kd52UNa$LoLOu-|^%(-#u zP4$HaUBj5~Uv=@pyUGzv`I82aKj>;{ZtxU-jbwgYTw7CDoj2(}O46?kOas>-83mQe z+2Eua!eBBqGZvv%=S3AC9!#w0@JIPW9x?~AVAC{ih50pk6;H;bdqjrGNHomMd%^<2 z3{Jc7kv3G4lbQvk1(kJGBzxOd)7V&3z0Qnb;$&5$|3Ag9I7Pf56J;*nFbTbb1m(N1 zL5g+w6t&=fNV& z(P~(PIMgvH9w#GXo1ayP6!}`dG-M47qI&&EC}xh@tjdsg=?^v2MrNVSC^UaE$RBq1zvIw4xs&{Z zi>a)4nmYQV0i>^^`^p++ad znrU=%kU_bVwv8^L&Fv4#aXOIWwAbdyfJyVQElsRFX@x1TrDa;LH5V@9n|GPgZ2z0` zN{i82r7g(fnzV&pG%vp`hylpI?6#oGHqCklsO9fC+QOuq+0XwEwuMRmciO_Fh)I;l z*_h*K3vP9dw1!&NDr5@N@2e)Bq^5A)Noxu>&=lT(GMd7Ubw@9~i3MT#JC3F>Ij1R9 z7t;pE$YHD;Sm*7b#;0Wf%u25;|4x>}X>yp7mZ6>;rpx6FIn0#HS#mZzErS<1%#}gp z{G?itR11@85#5@s6|hMSTcBg?b|MuIPqt99C z=&+GInO5ATvPxWv*3>j^BMZ2!ACHVcFF%dDG3jG9d*~@5JYgc zYKx1hc5YIg=gP{Ht18t6tUR%OMJ?@kuRJ*m1UnHLrF620BLZR9nLFH5r07oHK14%7fiI&+G|idu5Tl<5R`8O;VAUn_H_v z5yT0MCPpV<>#f0?p2JR*cj6YwzMGmGZT9+f4XM5@u+fWFnG%;R%crP}vV4wB7Md=O z04kbe5li;rEaYtt6w{D?Lv2$ni;m(;U`E7pZ;@GtL~-Pcp{O-{M#QzVw!RrN(hjG3 z8viOW&&01v{GR034q?QIltB#Mnw+)oUp0ug%%D!Mq5O=0)nGFpEdEtet{9ZE8g5H{ z3S(C4*(C-hf8t~Htn5chZuIUjz{AhI_z3nauP_^WNV0;M3wy)0KeG7meND!1xpzc$ zVLDRg4ZTwtFLI~UTCoDI2?9Xalu`n(ml0BCj6RzX%bVF)utnAAb5tGS0yC)WVm4_g zUjeRJ$d@tSNUj{FpUe4;(_2f&;_zvUPwo~eHjbmK|5C79n zs+-GvhwCze>zn0{D(kCQev@5Uh(Pzh9l?w2TqB3PGfupkw`mWZh*_EMu$wO_=v%rF zT<~mvA{Y4Cb=Y9&vfH-ewb%lcO=9B};Uj1qUQ;w$dJ`o+Sg_D2V)%)Y5CvI^!p0|o zvo?LOWVmg0@Nclqd>z~c{VrLFaoiFSp&*T>@9Pz~1T`ju{63;7A5(FDM3LGbS!}ZU zQi`^zAAd)Z(chcm?Wn(xSA5LOe92t<0N#zGe+HU4GMT^YjQWuo0KD+!U$$0U{oC|? zbAJfzl& zhtwK%mK^YrS|dJE%f&~EWM)#v<}}lZI7lrO2dSm<-cog5Qk^ezZx@tcuHq$?5-+Kx z_E0TnI7_V&XQ`AFnUW$?Qsh$comw9Dof;;-Q?+VWQq?Ct=cx{<+7l7?z*XtrFw^%o zyMnhhG>Y$Sti(X?pRcLI23Kr%L!pUCW>NTO3!%N$l6CA+mI#l$m60q=xkk zy3eZ0`qjH@>b((#tYma_$->kBW7S1uq;*x3Y8Ho>JxR4!JYV*^EFfOuvU+$~n@bQ( z=DF%}_3os)LR?t*;yrS}iN(c(()gxuxK12(u9w4m)%%j_2A6pc-nvl^2h~kc)~6UP zF6nANm{d2rEHLust#TmknX5h|hePUiSKXoRbXgt*hr3;t2=9HH{giZo_qpnR^&hOe zp14kl?C$b4epX-MTWS8dF#q*PD}k!a0L7CyYqa-aq?iZ2Cp;;6y{=OBTXfGFP@0=a zSD}%BxTdfoD1x`9vYuhY_^|Vs{d#jmz2PR)Eez{|h8CHtw%ww2eDQZIaeI)sCgmZq zz@Os=(5L}VFaus(+Z2pYEwr(i-N(ngj-z5U6Tc*nsRV z!jp>ub^~1O=;i`1I>f0yD z^G@d284s5(Jnbq;MW)0}fzJWj^JKm$-_Zswf)wTM2>N@>Hb%%agJ*JPT$MsLum-Wxo zH}ucd_w_H;%cKu~L;qU+S-%47Ue#&+n(nS&*Qe+=beaB*9!G9(;kKlNABTsL_-!RP zPQ)>72Fnut)OwtrX2EB;?8^dYvymfQp7luC$Ag6R)cu&?pT=;Yx9-jK!~$%12R9;- zzD3M!SWlW$FN@>OS&tL|X0Br-Huxj!NqCn6v{adUR4(q%@o4ZqjU$JE+H{^>{r2dtFaV zY8Fq1>Hc!T3d&9TG5 zmRi@y86%l}daVGsE~y#J)M^GPH_4$^GyJ$o4g>W@DTXn~KFzRZpJrIoNpFz@W1D@N zvCTov=8w5T=7XBi&0Kwf94h6&5T}!_Dj~a7jU2WmHRG7Mnmr(Mb!}2#m{u2PHiFF6 zbt%0|exWYgL27h^l)XExF4Pw#bz@RD$#t__w@5X6(h?b1F89mj#q#tLIb14-%jEE` zq`o|@T6ABzcz04?A;0G0O8MkHQrm$NB0fRgp89IJye6%$wN$%KUV(ml_4V@Edz1Qo zDfOwOz9FsOuWwB0gYx_)`T7G%^@xz_gHp=Pa=0a_Z%yjkIym)J#ArfR1=<;OxYbxB z;>2WoRk8RJ+iL5W=A&cGx0g(Ryx2TvpY6W=Vr5!)pX}W*bC2WGS^2ZtvX3Ptb=lRB zhz>f^*5#{G+WYRh8d=6#TT@?+bqOL7-v@@pf||NI|4qIx_G`sNE41zBbPI6yMuLd( zWi*U}TY7hG)y|q~Yr=&$&Iblur(M|=nr6(`&%3v%4yUsE<|bU!_SUoE*)lp9O!s1& zVP;*&D^b=7PRK(hf_9M_RItj>9wChYqJTqKwizgp8ZLOIW0b>Q_7`l4!B@YsZbK!8 z4J#7s_wTM*FDDoo1>`W0+XBKjEduR8WDH=D9}4V@4mfto@u11^A}GdtaIZhgW?7`8 zOIh(|v(lAh&|rn9?UB8=*UC0n!I|EB4}u-G`+NbBv50N?%VdeLKNDB=kf>bqz0e%(kD}{s|#P|xlSd7P0F;{h zt@mlxxc;4SO>p+%9_`n6GW-+#vQF;0ykF`G&0T~yOt!JS=c=34Ew1_x^JZeh)~%9c8#6HT|^s*mXpaZr!S;qcp<{*|q3$wzsl5Eq< zRrks)>jUbe9rw?H)k82>##PZIq!~{b$DTR6N1$ok{DytZOtNP|V1G%fKg8~){MQBX zC}UV=ln=QC8-0s*7H%7+Lve{d`V`AwdF4ruKCiK+($#mWm(UU!h2Z-Su_#9(0axFp z?@sD_Tz#+lo=b$k`#X;JL|4MMx#|fi<|FER9shEYt3N7I@DcSgTS0SPq|1|KsXU>QA}smwCy>mHjPOe_9Tok@p^xqCP|c9G-La zkwrQWmq2K*xJ-^vl7O!6R-pf+rlh0t>1Q<*E$HXts;>zfzbRiot)FrA zv-)$c{=EKz%UlUXd=VViI%Kno2va5b6#l9e4d`W=*vYdTIznIitb(uf`wU_kQ zqgq2`zwa{F0;j&IzopffJOpzaP}p{H^|z(^@2IaL5Mfags&t%rlSPQX>+0|6@4Na3 z`iJezcK6GJad%ziwsGs4_t(|9`bSd8%leqBf2@9<)IV|cPxa4S{d4^bm$@Ry_A4RQ zujTNH(D+qp{}Fm4vk^oV0lXH+%+l-8(3zR@nnq#Q8?OG1RP?6$a#H`+)xU#d`uF+| zN&TO${-a36p9G@+%4tUaRCt$6%QEIcQvcc2f6>n{=(MkFIoDPHrQUS)U-jQy^*8l* zR{}M<>R-~L^DznYMH;c$oE3#c=wbFK&F|mo@lNtiE3r=O^tT-m$}(t?b6SsD&}h z;)bdgEW~zKPZGRdS!c}72pbHmMoO>~Cc&yoc!B5y7N2ApC|IS)S`*50tII3~g~I1x zRs)Z3Js--6iy(^NjDXU1Gt~Z+Bhr zWUT*nv5XI-wq2i0+E)-|AcmlVo-JZt9Yd_{5P~6+H`MV-B6lro);IVbv>1xq6+hY~ zva+8N6Th;#0TaKMzX)n<6y7lRWo9a4x%hVxq#cz_tIUu-UT=P~*Yg51Ube?u0%x}+ zf94AFq|NblxJv<+&Vmv%5UW~tZLMiU&`Y?HDeIkdY8SaM{fO`?VnsI7(Ez8&mK`oi z^iGkjQ8LCgYkw?cNp}SBqT<4D6^-07Uk2JaON5;>T7PAwEQH2(Rqpc^Vr6I=l;XQY zSs~t7TP-h}85(~l=tds#y7x#T&xAyLDyU;- z1l@w_AX^ymO%@ApuBQDJRw4OWGI3hBpQw|F3fEqPuo`dp$jwp9^4n{$rWX>MwZ4g| zA%MuQD*F`+riqj$Mz63#W(Bh7yp&1ksw^wLmbs~M3p}HJb$yM@RhijP6W50(Y{aV( z&`qEw)4f|ACXIC-G87%71jkxDM_4bC;N=W{ICEscV}7ybS*E((oZrEHMk3}MBh>sd z{0N@k&vV92=02vf`DJ9n??`n8!-)rZ^W$7CGD};EkYPtvViTL;lZXAFVGr@x?rvLw z!M{>H%(dM%+DUyveUd9aQ=d|gP?VM-7F9}-FS61mtF-45!lJl5W`kFxH*r<+xN@nd z6F~+#KThm4=W$jfkE(8)IFxQGI;^@MRy`zW&kQ9cc+)=_CZh9-ZnHsL4hHI(eI%+r=QG-@b1~pW}bK!b_3K|Xk6|;o(73EyA zWIndM9~X9|SjxBILvE$~+hE#<@QOTyY~9WZ?HwTo_4hE5eOpHnUZK%v)l(i${@OnQ zQ4XtdnX;|S-pwlSJ)yD^0kae8X&Q#eEF(v+teb#cHfT>ZWsQCw-s1fEya{sZuy8)! zY^`Q|=m_y75IvFq4yy@dGvLO=Oy$Or9#D&z2k1wm=#RtBaUj~Vek@#obN`@tMZ3wC-d2_Nh3 zSCh*9Z=Y3j536}5tfLmsk@;3HnmQI3%FA~%2HcLL2!)yCVl(<@NU+v;JbxQhzQfsf z@oxAY-1t6$NPYk(eu#4W5tM!zuiIm|JN_6a#h>7Z_*1%&pV6Xz&dk&=m@#<;wf`!b z`!$r^Zw(3OP~z3>`+nYt>^X2#xD}`T1BP4DCLRw6{J2Np1Va3R$4h1@V3Vjt@yU@E zDh|`9Ji>|Po^iube>T-w6Y20=i!SvTYR?~g#zr?s+P>|-!*ZM>fAqmk1FopHFdA` zlo77;beRdNa7G3gllDc&$un0(M3V&3f|D$-r_?-MLh=jO04NQ7D1P5xhq5B!O9Cn` zQQt7SOv_BrNd|Sf0d++#sHK3~9Z-7!YEMAz1*m-hwQmPOb!7V01N9(?#X+dT=pt0e z@X?&DM0{7R^eDWl0+qkoUaS$_l7Yu=G$Mwm9;k}-Ak|%$0o!0zriT#De<)jOh8vh9 z>ri)m^}me`B%z|aBKWr$ZdQ1NEW$a=suoRy_?`#deBKsv%f2Y_v^sNRrf%!BKbCsO zg=8olFeXidlI%sAMpdZ1wRz=DqrB;DmgmU4wS~_)p9aT%X1&f(&yr}J{2*&atMEJB z>ojL?JgVky;>Goc)mf6IYQx>CM999ORc)-`#k1wGNic0yn^%o_0;eka(Nj1%M?;%) zXT&Q+t(-^7L0($;g6f7J*ZI$?3;3+^0V#{St!isUX;rJLt~jb{HkDV1jd@=68WWGL9}|nMx3_n~-#YI!9s{CXM^t^QYA7d6)VwLOaYA!*cdNQcPQ|}$ ze&$}IoB~Lb{I;rQqyCU1^9t?r1vNR4D9NF5RJC9*?rBwfkE(r~?H89j`|ZUW`xHsG z`=)FmyB{N0Y5ctOY~|`Xgr+%N_1AONa6L~=&=RA00gYf0JGU3BGe}IcjRY=rdKo@w zXQ(|SWjdf&s`u&D>H}=xyH{VJ9@3TSQ+liVjILr1v08mzZ&TmZJJd0Kp?X#CRDaNQ z>L0pZ$8-ZeX&31(x(UCuW<5Z+=#i{+PsY(^w%(_gu-3RrU!vFQ%Z$K?pV~GA;zx*G z9PhIcM%)GJZs_t`c!Hq#;;vVD;yytSLCgObF@FdH<0okO7}tA^4i`J}XXtyYOv4(v zBGZ{z$H=P<2-zB0(@pp)DWi$AO*h+$4no|ULQ)^r#4_HHR>UN11Rz~=0r^lQAWYtR zA7=s5HMcq63n2Fu07M2nto_NPy)8>$hgy-HH(x|NFPV+hT>6A;1)yV=jvTpqK_$AT zAC?E7Q#}u<9&+}q_(HzRd$DKH=os>Rd8>N&jw#9hB7J^$f2z5+iqFiwp%y5xBZs?=j)u$_Wgc8GoZKo zzds(#=lfaT=Y96~dB0!p_ZjNw`89QOQn=0RuX7g^uVFi%c$vP6u|U(>aJMv0m+D#} zSM-RW)eH;##O^5%Pbd#hR_j<5BA(wu!KrfR($ElweKV&PR!w_!QO)V&#@=DZPLnXK zXX73+uMeom*KBb6JN|T9nlZPa3nrQ7U^2-cV@3y4%nW`{4z%*o{)x4$%*P`Ks#Pfp zq*oy{vrhkmQy~n)Vfc@(Em@g5BKG!@alJn+F4FNy2~2;?+{k~o>{dD0kGU{~Z%CPP z3x{9^rG28A9LzLRf|DFGe(^OeDVJ$ciIa@^i}@=hZQYJoeiT)pOf^o${-G4!n07li zkOqG8_wA|}(X_JBL|Ir2J=I-t)-Zu0R$V5v?n;zzRK|jIWC{|Dhd}^KqtIW_hUmc(5H(m4z{6p`WtP z%K}x%W>?K*D6m5bt*`D-$1wY5Ji!cut^cR3P4sVy|Iv`Hf91IH_1E9?^RH2k`pex5 zWl3M}zTI7YiITR;Jsvzbxb{Z+BU|-ELDDcs46t8GB}ufZ3Ca_cQn_Xn{6f|H(tGl?Crzel0_^asH=IFc1nNB<8+d3F{)H3>~IG>u>$rG)YGUVPoe%0@T zNL)#2EXmLa5*k6|;a%f29{6G)JjjPyTN4fDPf-LlA@HxfXS{6lOF#cKI}7RWc%D`j zVP$btI9t>-!0Q_o?deTAd$SI2DVVn^py1nz2JHJh^Nt3CGQJT7*8YOISzD;RNw?o! zH1E;xE&ArxMtN*DqKm&nhdXt+OP{U;o?|xNQVc-$3wdJunvcH__!WCqK_Zd;S;*| zn9e?_!>4rkbiq7cFrUE~Qr_eG!=bNe-@Sd0EcuKDMQ85r5maE4JcGIrz zo{sGsdoS$m1#m2&{}A@B=)R)M+curCr*(@T#PXW?$<;|5sc(?#Sj=Pt^qqM*qu3Ft zKJQU2Xa9=Iwy9zT(;9W{u~?G^;C^nN0rQCLX9jVP71!2GEL_dF>Jl!qhK}mqy~fp8 z#L|YnyLR>V5zonuFI1?kxG}EOn&XcSQpyxj1Ngb0(Re^`scgB~h#TLA>6w-0(kldnsALK3hj!oJ!r^3uIK?~PWz^yQ!QnB;4_ z1^8K9J=Ko|x>?6IjYq7MsNh@+-@a!jJ-e`lC>`gy*^;tcu2?aOUe&&*W4lnrgwRUO z+R@i}=2?eEsQ8+;9&}v+Pu1mfSjgI+7+Y=qpkLe8iw_IQ`Z(pI|U~!%HgXz znW(RnBO9Fk`}ukQjPPKNYIbU=eQ+9uPEbI7y)=VxYjh}W4;@rP$3fF_stJN^m#uF(VTI3+Wa^)KhZ(3Q}io84^gOa_@yp? zrNh7Lu-*JRL=(c{Kg@5nugiimgmN-j=kcG{#X>Y1zYDdSa1=q~_vQ~Fi*pWt5}SY4 zgTE-{zv>WS5@8cqVyLBR-VSw@C7cILOwc1S|7?@Fa&5B7t!s-_HBd>|b%qpQ*e@KH z)+QJS+w4?~2m^yV7_O$5^DyxH^sEjyMpg2uo%k|6A;w--FvEJPQiKvj=sDteDzHH( zr{YS!n7B2`_U!KR!5xnpTs08Lm(K5|tjHddAz89* zV_$m@^HE<{PY2^_J|nY~^tqQeQ=uhqBdzjk$kbdk-(~K^b;+nUgi?vf zM=}bvUfzBxixON_)nw{HXb~YN!3d$0y`FnSvei^I>`I=9^N(z>vL_?;4BFxg1_Z4W zc8)n>8lpHj`igPKOGZcW8Ditm^s_{aYKrc8Ix*qo@v!Le(lXg<$`QGAfg&f8@p3`d z?XpQrOXMj56qiJ8!^utm!*&t16ctj*#i7RGVEY}Q?T;t^_CwAZ>kW(o+;z_ps zMBAvdB8jRwx=|&ejCg^o<54~@v+7yz2ifBY4ak}BpB;A4TTxHUS|qM)x6 zqO4v>z7j!Eiua=XCM3!#o-|>=1==>Ktuz?Zn%h2AK}nj4eX@Fb4gZLM68#RFKGZyW z&LtfAbskn@p?sulR*(D!ch|c8B#hU2sE5n;y_;*5ufX>*#jgZPTUu- z_)fWbZKkf8BC-}>R{tbMRg!pPE(u~#M_eo;gVN-MaTb&PpwiZN6DqNHIyzoA=t5-k zjqGkOayhg_vwk6T)cSHLj;<`T_d@Zu0V!SzCFwKU`P-5-&Qq((Y)mET_tRw#me4w=v7 zlG!!@nTeHTJ`b6va>;C`Px|3wb=01Q3L9DzH7e|5lTu=SN3(A*&U_PYMWLAX+fq&%^-mp!am;&>RqLF(9Dd` zV@l9j%9yF~ot9_P|BJM~ZIq)IZULS{iOnOB-?qB8G_3T9|pFhvzi1esPrI4eDf ztb$!eK`f^r&dwA-wxh?@Je10P6*W*`l!*)A)dS5_Cs(q*mXy}HRI2BxYomGUH6UYs z&pVS$RLp#HDrQf+`3Tgm14-{^y}W)rx01o_C{nr|$?AT5JpzIk6>f0-`1KT`df1Kb z_y$_PHrKk4kxI{S;x{;IS8*5PkD{9T7<8_nhB*98{) zgqLCj7-a(>0Q#*h+B)8_^*R)Er>H|iqwoMl8|rtE?hJ;69il_CE{Ez+(nrH|7_LK$ zo(^xcBNRG~xNeQMRq?Wj^`^sE9meS}UQZ`*@YxaTcA^fGbWi*%j@oj?QCn`O=pOmJ z+#X9mZZwPR@uEQ_wMF&>rO?)3r`hScoT2wmEZCVvJ4>g8Q5$7v>u|Cz=jd#%4)b(4 zMThx1oZ0}H1qDS;dx2$ae1XEJy}&L~7Ejlg1o*m~@M&ahvCfw0Y^lx&pEgS2(;5{% z?QBI(8%5+adyYL<-x4-$l)|Q6uCQsN>{>l=XX}bYP6MO3p=dW26)o*@0;NIoe0{Y^ z?_MBsoAuzrg1v}Ucmrxo-XP z4I7p((@kcA=;pHJXDvQ&)kfV!f!NrYF)tjwX`qfIWe#XUf2<%oD?79=@u+Hz%gUWB z=+WhceZ4z&u-$W?e{)!T83pO_cSD$wwKF1D)3Fo1^yq4$Xv}uD_jE$GeoybVZ3_J) z3+Et=MT&C1zP+9&%TRP=dz`Ch zF8X0y&T2i*oR;W=_U`JWoTFP_O_yAZ$@$n9w?3`yc2zPXtAdO*XdPuvcId^@&(KVu zjB&2hstFXtTjfT5Heqb37U|iY1$wBvyQ+6L`>DkDysxKg7Cr`%oF)l6qjnN03guo{ zR^y}dY^rga8Nu7@qh?d~)d&dZK9Cj=ds(Ip=}!ErZ)7q$mfw;3sf@l}DJL@+`&-9l ziwUC}c^)S5p>p=3LT{!(+j(BRdEs!%)HAUX$mxO=2r8$N^FP3n896sQ*X)>(R~VPu z+~^yL=dm+PoXy$t@oI`epl|XOL;2LfH$~VGcoTA2UzfL@cLjZ>AnIYtAsX0N`|Ykc?6=T zYI$)fi{+3GxOhkRwjM=31VY7beA}2`ifqXgjrX!l#OIMQztHZwrzV4T$IMy)6T9)% z-_WfJR~wDWKb{~IB(37spzhs@?-AXFj5x{OsB;?{v71m%$2^+|Zri&%cKgn|jTnyA z^F{IwSxv4(}}3i$nWD`=ZcZVr~m@Mz~wC@?Ra=OU;v^ZI>zY zZRYwA04Go1=L0!$c0gw!q(ZR1oZ$``;#%>h5Z{V-9KC_^b)rlxe|kaHq~RG>lz(Zg zqbu8~G`hsq%Y1ZyBB*W+?KZ1ek;K<5M8 z!}H_%g54R~9%Z`M?kd>JLt?D$4)Ook8{+)IVISeA?3L#J&|al{e~(wO{Bls7e>iwa zh*QW*Lp&|7&$C*W4Xeuqy`cQ<%Xr_y$}5!cEA2G}`>K$Dt*_Oy>q7fFnY9P7eb%`l zDa0d!+I&p$h7KwQ(GB+Xil{_pA5-pb)Zq;}ypbH+H`zDGmRUE}I_Gwc#G!qQeQRjn zro-DQH2V(iT<|4*coPRa-Z*=w&c32l-etFk1hcxiVBbxYDSJz3Z?*3&SjqBwxdwDpU+#$656S&l<N-P4a7)pE~yT?bgB|-n4ni zbK{Z9pub?`dB-&7gPv`PLP+^O&B%MNKn;W;=`n6yafDALy5-m z!HBN9s%u+&2cd)GSmTYIeeL^vhO9Xyrwb+GY}(uFKKQ3}VN$ zJ}d_o+kv!>d%3K(u@eYETdl!k!{UU+6-&aJx2v+VI*~8* za+v#ND(80rX(Rt}yn(COLRV-j;msI$MXFSy-XPL}F}u^LM!l|^eVW*&NmdBt*oed# zk$xB7BuGTAO(}^Tkl5)+cx7=+0y_pSJa2)Bh`lu;c3DL17)6|@<&U^FH999w$pdnK z!XVB@AsEOTQ(k>Mlq*b#l7A@0Hv+T8c#3T@1t+zxPxzRKcSB?W6_GqE5V50#z15h# zJQa1Kzy_ggKN6h|(oUfMF0SH{53MrjLu&7ccd3% zfQjseDsG=)dBm>9Znzfb79S;MB95NN5=5hoRg_{AoQ4OWGVFE#ixL(WMeWT1fDp4j zm`dCL=5Q^$K)vHAEoR>l?jzOv9aY~E>JzFgaH8yLZ(C6)(K;19rj>XYMTIJ9O{w`N z^DqT-nCAL%n(Lz(s-=V~E2fC*X%W>%s7`59!KKu^h4*o&eFpHw6B$a45hbftQbZ|h z*KNHUMgz89ivby5%zRvzuyG49T76xnxEbut85Vr;e3jz)nxo+RT3S5yT1Y~}YSo&< z$T)8bN*Vcn4kOmwp8N5!l^_2s_v1T~_MPT}4tH!?kUkgBkc;2-lM4;9%Eg_zj2u_V z$X|0AVKJXm1mi0{#+<9>8$*ZU5f>#u^zkNYPNN8;gL(@+NKvV#@^?a-r4eMt;4oQd zOIR9*nZd*_DcP1x_J$?ZJd6R%XAiAHULxZLOk@IyOeB#>Br;i>CN7mBN{qZj zjvFwM=_E3PL{21;nItl+pF}hZsu!YPh!VLeDz3BWK^kz!`A|tjAewfwIhGsa{f+VN z#&B*N_XGnIKit?)kS9#ts~DV%3al|BEny#x;D5^JM~Wj7ti8IdRXbY_JzNO1{CyQ^LKxFG1lx#!WwjR8Tpo zlFFqyR4h>tqCSK5&NurTsD|0AIGlVl7&u~2Q8oJc7>Bw08F~pkw4X`keq3Is5w?Zv zQ*@%2X0Mv2*XDl+-j+KKH4GZJIoeo$TMxL53AL*{hhPDTQzID@}4ZzdcdE!qd(B4CzY90J3i|(bFE~ zJ;k7lJ9#=yf}(6CgPEbwO_K!lsIzwyZpaGbKv{kgy4NHsVe~PFzO|DFC$z zA!Ex{;|TZ)O(m*2DpWz+gkb(SXA&7de{@9u3!=Y2YNAgit?_2~6dGza zoUUm@tX>K6pS#( z2cyi1L900>7~{&)b2~rbc7DR`{D|8+pwXV&TEZ&DP4IkIb%g9pW``!%+Yd0$xaCdR z5agsWBD^#b;iW`$mytwv8510zX=7s(4p974E}C~=&##)wB1U#)9?7LqKLju12eCz0 zh%LH0)?Xd#uaIE$3<>6fv{>8%Dwt+!gXyM;$Sx(Ky0iwf%*0?e#d0#mGS|!v=9$xi z`5DI21r&CO9L6-yq>NoCjuOUnl`^KQl(7pd89NQe7Qxu*Fm@)4ErzkBFt!ZF&VsSC zVQgg%V+sWrkGv~sL+X`&;=3qK!u88wlc^89u;Tk=Ja|hP5zjM)sM>1@+xN97zw@HX z4r!VfA0#+0G2SY~m*7Pi*21VVYh{v&Xr$r~VdM^)ODn(c%6uOSQ3mL4JXG~YJSf&s zdq&J51l@i!ENX=}M}bW5uDzSr)L9C(2TW}Q<5f@gEpZ0{ly;hypvN2=?4peOGKtTP zn78t>jF``^9SfD5do7C}WaE*}%0?G`oD8xVHk^}0aBU{pbdbevMPAhb&f!;6#o)Fv zhfD{h-pMrAmDZ}8f`S|A=x;ECf;T#9es&w2bf>{YgVXF53#1qjb28O_H_2oc#KAi= ztfiU4$29tQd&JsQ0kGT0?02H**3vd&{&}%OuM;1xC5r|WJJ1) z(tm%3@u>;pQ?+F}sac#_W0wDuD;3C{j0l&VMu8v$D_}6)YKnf`ie->L+d*T1FW&%8 zJ79LHMSPf#`Pa>#=;)v1UX3!#cuv=ulpj{UMb@&yOIH0M?W^kWCrK8veQ9SUBTr{? zkv6-ZCe5ylk)3Iy@{IfvMt+qk%Pb>O|B8`+!xh?3FE3)KR3jKoJL=hwwCV>pEpvPC zkhs)%<$kp8KVCylh){@;f^M(-7iQZ0Nk%;_A3@NT6kJJjRnxF z&umR&&rAkX`?)V&GW4g27y6sbi&dr}uTnp|uXpdRa%8RPY-HJhXZRvz|Fi~_=cnrc zsI%3asRN+Sz%0=LP-n?3)7f%8I7^pj>k?#Vt6@*vz?`GQxdj8bvt$5wwwg5sv$kl~ zfl4*(hg&l13uZ&XY{X2x#hZtch#StLp8&3KFZGVRD={eu=Y$>jAAwXH-=Dp~6%J;d z$?O|iRel*Gzq1DheOs`L9^pk8)_xT`uqkQRyPTA>WRZn=8?#c5u_XJRET)MuY_K!I zWo)&wX8FpF_9gL%!!i(&M`y_l?mrZM(Uq}2&LkyXR_5%nka>mjs_XV2E9y#2FTpjI zA$gj!tx#~D&`dBBu^p!1IbZ!D0e8oSz{AIf1Q|OnG;Ee0%0n%bb6SWp<>Zh>?1dpv z^HW2-%q|W=-}7{)nJ7Q6lR})lE+y*DK=r7P;b0a@Co|b`;9wLhLGNvA-?6xF8%E}y zJsIEsVXl-WvNgrT-mMe2I3ucZuqDL(4`@<#YMK1TxpZlGvnFs7kb!#ukOC9x&+OSq zn^^9*cIf9NnnS@=!CK&hxn$@$&XL&lH`mPbTUmx(*T{hl?*zJ+BwxF``z08-8|auS zn#BOn@^_I?^*a~mGIlc1U*SmOwh|flS{a5k(ka-orqe*x&#z=6S_#KVT%F5!tBJOS z$y?hr1gy6(57cTahdMvhYW(vyf?2HD+E9*6!?1G_CaYK>+=80qSgx*t@Np60bRf?m zoG}}Tx*N!G-b|^_XP`UPrQk&;DPoj@yljrgl%!yqG~_6)%g9_k&n8Vq!d__l7uHk z2@@>>)toQAYogieBvg5|_aJ=8JXpNhnObz(z+a=pu;@_}7CcR5gHlGEAc7BWEf%CY z+*f5q8iniX1RPhV;g33tZYsunIh>TRa}w-KgAJlxB?@Lu%({3_4b zCaDOW=?*@@kC_sy{b3c&%Qt{-g6zGRj9x|s?<7;ZT>4&yKQT(*YJ7=OO;;~IB`>$A zK{){mt83asi^=zlbUURh;25d6(+RiB)nt=sJco< zZp?gKmwY@I?>XO$&X4MC^q6-OP?UNaeg|!aOtG?1iNyhDQ?_oR8^4ow@-9cYx{sVf z^{H*lPuj)}q)|h*reifYPPAziO^e392VFF0h2%~fYK-uJQ`rqkTdC7tVDYLocYqhT z6C2@ORMh)ur3c8*2WS!>q&0rnaicCY$c&^vk0(u1jB>2AxXm)nM0vj>>OyPCdy~ui z?Pid+iz$sbWJZ2MRWs%`-?>yr)op21rl4qVqqO$Pj9i}c`zWvb;rJjt9fIqJ;pF4+ z@F=eIpP=VGmMOzX9j^H=i`>H~A zzO{i5mg#`tH`$z}GX%dS68xGa_%%!LJJ+l#NakA;34CkJ3yMzMYou{*ESU2ec<+3@ zj1y0@xj+PP;#p!Y)a6AwyI2Rp9=#}%FPE50barXcwCi_^4jql)DY^<~Yr$+Qp!qiu zzDJHOMfL!mvZHG&Gt)pGDM_%=92jz32uL=GxS5AvN#3g#7X3WxrqJi*Oj7|J%ZY~< zC+?z+4)HKJAWsB)bHKRg5bGl7APQoR#F>FDy2v)&kwZgWPuITHS0DteMs(SJes|YC z08`aPkT96MMtRnBT|vdsb3(`*e7r6%bAw`Nc9@-^=`p<_qjzt?TpkKq#EK-9NMrH^1L_%{Uhg)LmdTRd z-W@{CutaI;Xy1`OIG=sH^)PR%(@g0u#bv9vC;be-Hy*=zFzlFP}3z+%7L zyg~r+Ydi)Xy$4x*jSjCh*8x&b1zazN3GYX|FahZSMc-gvPeD)A$&F6&RuC#1Y!OKP z0fvcOp|*No(6Z`{v8(jZekseP=A4X6%|`Z9yRf&X%XKMMFNnP9_Rq73O_I}q85 z)5XuylBB%}Qs+vRhU#{T7xrzlYj@Rgbjz}|T#$J06yhBhDxuk4-Y1R!9Vqn>yg#-h zk`IiezECbXO+FOZh8@oHW6so-7v?SS25O$fLTp?zC_^60dM0D7lAS8$62;Ji57Q(X}v<|(pFPx0f6xqBP3TDJ=MV_WMVG%cI7^T>z;W<>O5@;Z>*Ry`-N>Y2;LH=lX$ zbmq0i*xJr!Mq7yya22S|O`tk22GO}4MCY|2I&T38azD$G!z@d_fS1*`aI*RyV84Gw z-~B6|{?5GDjyAWkN!0DGR<&D>R?u@urHfWYZ2O%{(>bnO@oW1E3dh}UKGDG8F`a!f?1cO!XzqLKB}lLhn7y7}3< zXQO{bvsdqbuHfR6O11k1z3@dHzN9B#Zp5ni)uQ>De!pHc-w>V870owMW1Da3@NM1U zH7s2^d`AJzzpKOd^!@jB_<>hN!R=Vt};^F~Vl z7e(_+{r*Y^Vn)nV%!u<9Gva*nAA0e(Iy_S}ziU*0QGNe=k^O_zC#LSWi^=gH#lz=x zAbLcTUb5!TMe`SBjQ|X6&LP(Rro-PG6?7CT*7CpxjcmeHt3#bG>vbrQOIu_si3UZD zQ0xTaM%36rIvZS2)QIzKbHNU6v?Ya$IA7r+tinaK+oBF58tq8JMR3-t!{~w?Q?O%m zrr}hhJ~~G;9j!_bbaqFY^??^j=ySaS-c9rMd%E|yU53Zz&9Kp)^o;Jco$Xi2>oMNW zVc->(9F&%3gb4&M#EIv%Xv!`~Di%;VD~=p-BeUK+vOH6Z_bdw%w>H^>bc)LilTS7) zwNstoQ$u;MmYI5v(}xb*)z@`JckkZaPBPel8;*Or)30~RHe88HJ!bztO`5Y zcSmAYH>tgtKW5xI)_EPgqZMyWhvME3&j`zL)~JkvmQ8DS@JZ1n;ZEyG)15Rbf`S)K z5#%!z#6kS^8ZGer*X~qbyAxI2GAM0zS&3!lj1WDT=;A1lkrUH55Zt4soJq(qUCyCCe z?r;Nq!Gz4ebIub07`Lm1aL`_s}l1r|GbW9Ubi%p*_PCB*b73tSqxmL!$o#eXfLKXP-(+!b^TSVD+>07#7(f5 zs?D_PyN?hBK|65dG}GRlTY70}A#)EeR5=0`Y*$F=l5HV7Qr_eP7ud_}4j+}k_J($s za(sC{XK@jv9g>*BRqefu|8zWyg6HJLTaH_-Z>?@1Oxmxp-oGioo5m)rfQHR8vP zRv>eC-5ajKFaZ2Uk;qys>rFmwZW&i%50J+UT- zbfrOX;@q%EtKmQ?8c$q(*YF%s2iXNdhC)O&-4y9jn7iQc|4u7XW>VkNg;u|;l}9Q_ z>Eh(79gjE>@FOne|5J_9QRsCf==u67(J<3`brrK7+NHgvi;nw{kFuGr4MyGT| zz~y=b-}^wrmvc3f?~%A1B%}T#?)5&79%ecgFeuWPe}NDH`?#{mdRKAeWBjDNE7vpL z+x@U9Zmv6I8t`^+Yi@hQG(7-*Vz?QkVDTmSq5~oty7{mvZLV!D95Tar?*Zp%?Qb^M zr*~Tfiy4kqQ@`xUJmNt!vNQ_qYAa!f^~if;^Q;6YVT{A|JZQ!}dWTbj4xgrN$fenI z*q)!c$9xs?Tsx14EmF`<)L!f&#^r3@ZGkJ`3(<{f51L5_@vrxf0bU&AXg%CE@t~RF z)zK=bEvQ9JfJr~Af(00 z=**aBqKeU(YFM@T3~Jj>SF_%URW*HvQ-R_-&^Cdv#X*_{r%?|U;A^nZCFM2h*kE0K z^8vcwPRIsYI{BKf+rZu7#?-ukf{{;Z;X!lUgXVa7=^ZvxrN*v5WKJMlbZc#MBXz;v z^vzP1>o=qt^($q$eh2$sp3az8*IJ8ed&a!_)>;B5%$QdYwF!_~P;9Mj<<@g0*botH zj0iS)W>0*=%<^ZG4x5>%#%GmI!hN!Z;QuG%n~7&;^j=FN?wJS7DgN@5C(MlKEc#4W zEsYPF`FveEwT#4qmWGzP+e}MKV@v&QW^hYWOW`(C7`HzdPbLnUg$K=P58%Ilzp0^* zy!~b$UZI}O60sb@vM)0K@+o*fHWySXLwqU6REC>HUC*_&UFkO0%p2M=r1mcJGIu6d0xY)YS2xwNG; zV$ized?sf#l(lxb4qHmIOUuM`bn$>$e!zjN+>sU7YFB>%Y#+8Dy%lw1Z&Lo!CLc{ zU>zgP3vgRlZ$21oF!ux-&EeoY^Dn{q=I6l$=6AtnJ2rTsog2K!E)FiStAb1I#$b!R zIOwn)L8sjrblEF{t@e$+xG`AwjT{Hvj>A6_R(Oc{bbN%pA0UyUkLi_ zPlMg|nP9K|b8tma6YL9y1Xl*5gR6ptTrUn@7OV+g9-J4vBG?&R6YLFM&68_`HwCW= zZVp}>yg#@ucrbWf@OW^2@YUe;!4HBr1b+UjxuzJrrKS|TwPt+qwwe=y zx7VD*^*VfCG)+B*C-a}dY+b_$S+W<~|H4dlHL8T2_Q#Bzo%jG=VZVbh>T0}KAGL4A zaCJ3)pr5pF0=029WA{}UrLNo^;x0WKZ}IrGDy?p=?mtHw0fEXLe*Bjf72 z8aaSo%@}<_@Mp|lS2KZLirc}PI4e*qKXb7>iqyf!Fo<0(@A}{agmbwXYsNjnZ5YU| z#`a+eG;ot2U@@L)%NS#1vWy1TRny9c)@kYt9#5#5$U7G?j0Epy7J5%+D4!VRp$Pz| z_(gXjeaCZ1Nn>(lO1F{H?WAtzkTsD6@SdYa*J1eol-YL)jsyUX3U5>O)=b1Mn@pxX=Xq0?9*){cq1bW%|=!0w ziaPo<8F}1H37#-*!IQY$ex8gxWtIeAKrs3eo#o3eL-MSL!6ZYQU9Cxw+3adEAZu%) zthFJsz8A|f4!l?rUq{C4$og$bBfBzcWaFbo_N;GY?=cO{O|-FR^V`_hXk%ZejeUbQ z_Du$ZZ{acYZ7SkBxC_f4&qQr(eA32RlQuRqYGVrf@?1Il z7U)SNHk>P0bCvGBX8j?v;h@==j!@n?^6&VWJ!_g6gpOe%P;2o6$dss@Es;(>;?uFG z(>^tT+(99nw|e>~&H4My36enQo0ATjO^=xi9*q0yi3iPv42XINM{*+IrHl5P?KP)6 z0S4*kh10nkj+^~{vzn9TxS#7M5kAJH5)Pj(9XC^JG5-b94qfA7{$7ZC@XerJ5K}JU z^3r=iw;Xu(wltR)8un$c0Yy_&XTq9#GpVLvj_0?Hsq&+$(&Zh{!cZ7%nNFU zmh1^>yz)otZfN^0nlM`^ljI{6x!FEoUBZ zlY`C$-xoi7l)`CeA*!a%$z>&+;jdU)#KhCk0VMt>9dph`m( zt3S#SEy0uqbE{ph0|@n7?b$l4&|#$x=jg!B6Svw`IsjC^)vnPQJ5Q`*#|h5XH`)z$ zqt4DNu;&D#7)bSF?F9vGHZja@Dq5iGx7v${Jl)7%IWKG^Ch#Rid#Qfgi*`%F0!|-i zJF$o~nhAERF18izcKu#dwA}^!;-bAwBq6Z_)QL#$)GyaPjb^&i8)Qjy}HpXlws(l+UsMJ^7XQ!eYq}PQLwKBS8uP; z#jEt%t97_mhi$<1?Q075wT)(_w%S-@uhZ?*G5L_RgZct5Jb%^!EG3>j9m8K<|7|hY#uSVIA();UhZ0|492$9sWs&kEx_7!*TYW zqPHV{Yue(wP?Rq zv|lgUZxrk|%i;1B=#+5JzTRcs+qwZeC>py!9d!<^ksBp_X=*izkQBkrD{?{gaVJSF zYv@KBq_T@cO;;;LV-ryQ>a}Y&uGoM!JlCL9yKM1h9@ei~ykz+*ovdED=Ddx|VIBqg zpcsbi_FZwPDr0_mDF%}jYtLKnujl>dm6%bW;w}Zc;_;^C%g=S!Q^ISxex4h!3?qjX zunX`=b;>utfmHmXI~6mIkn0grrf`oH|1_zBigu|~ z+(&?h5z^j!al6({BGJw-&M=YqeK+~1>I?vzCRMl59R%H;sr20|Fp$Bs)pQJihOz=; z2@yro4f>7JsOfN9DeMK$45X_;F0)qYp6VJ)fPb8C9~C++2T7)Y^75ouF9180Fx8vPM#N~i9aqJs6um_^ax2KrnC{Xgm9BZ5l2ko9a z^PQ#L<@j=C-eSbhCUIU*MIx>6*&hQF@+|e`w6kAV(f-FE=la=cXG9qsF2T3q9h*~Z z(Lh5bN8@<%zAMJ(iic~h#KR@zFv^wj6%T66Jj!wtTiK2tcHuFl&k@y8hrwnHvFuSn=AS54cQ+hwes0V4k5ev60KH z$~HI~%VZt(>GC@<5W#^d{vmE%4k4J51tj?YpEr*KCdO$$Uq_qx`+o>FV?dlxoYMak z&J)vl-k6=l0PdPWa&?plj^zD+BupY9>Z&2RIywt|@wAQ|(H?sPKtw~rQr;2bc`QT&c2`LF#!qVtBhKzNAJ)b{9}E>BNLv^kDA;d>_S?2LG>@Av6zso*SQLJy zi_heNJ7Qd%-klRIgM$6n(EiZ= z$otVcfAdvHTyCe9&^~Q{jOc-w;~uP+h#T$U(m$&8ar={j-BgwCPeVJ%4ra`X*;1lf ztYniq0xmZB*2^FL;*}DFtKN$iTm3rV+JCb@3+>PCFOU^MjsDVK{VKHoZhsxx->7Ws zmja^4SJ(cB{VfCda(n``Tw)sxWT`d1ee#m-AGV1^mI9^X_&OglA4WkF+Gp(V^6-{U z#*TnXiKwk&{Lj$-m;HTc|6uYn#Gg90%KM2Zy%BmO|W!N?|ZwwNVC14kl2p z!9)&dgg+bxlY+^ap5ZW~BpCqiKE~obf4jMZwhGv>=A3q6bV@H^JBnjjT762RfcI|d& z4V$_;d!qB=#_jCw<8IfV1rl9v7B{r-+1uw%gAIG(Yc-4fjXK$+6U7ezmmO?q&+Q^n z=PzrW=|Z3ky_bbOU&Xdh04#?_@{hh)-MxcOW6eJdi##Aw(YY4=?|_fBmz47+cjIoX z%fTBqi>iz9Yt^fB_Z2I}f%jm2{sA>I4n~O0;OCw<;x=^}`X75Fr;f)J2yy_+=@8H_ z6cL?Xv>%qF^ zJg7#x1HD6^rHMt$=IZDY>5`QW#`<8%Hs_fSkg}_%L&FLmGy8e)bv-Yv-?%CtpIce1 z-rxPXx&~G37Ug#S#BWb}m!V}U60g7+l;)iq%&j>sAnX2~=z~18ywa;q$*oh?$@BQU z6+RtQ5#+ku9}89T3McjTrT-OS=?K(#{=?h?(x5jFD9@S#x~0RrLSq`S^g}>H^6P#b(C5>#S(32;490 z0r$%q!2Pl+;CHk^wsXHM72Gd#I=`bLtEG=Td=J<6IV+~WzMt!Znd?JbKa{zC*xB$N zfli_k$K@;R|{X$~G z$3YVsaE<>QSA0THcbQp5?x~2}Jc!A#SY&^r!G}x~@hhd)f&H}8Q49Th5jD~Hf~Qdn z43wCFCioP{-)2yjifF*;FiwZd5}lj|0ERyfUbwc6$PBh^hJcYJ;eL5#Vy@suuw{#{Ua*o*@%2x?|Qy*mY>GJXNr(FvQ|S^=U?1U*_W^ysA4g8!*6 zO$O21S}0B7=dd{zRC3JUf`-4XlglSx{iyID`>D-b4)dgsiulIDFgqe=dRGor{b;< za|e?yecg)~^)l@M=hJ(xXye%c(eHi2+MB)zx#IZPhisznePRkG~ahU z|LY(MFF}FwMYjK~BbWEE`R`Zg^LxqLS2-(?%2+h5V3v4dm%*ux;OA zj{><=KFt?R@V|*D*xxiEIXKg$HVD3l5Y76V;3FA_;t`KCKjP`02GbgFw0-8M=ijH@QP({!T zGWqyDsr>;bfM3^AK4?0rysnggzZ=dV z(_{y;iO>);-Zp1=o{*II1oHML5+R@oIdh58j%ys)aqpP1cPW_V*3G4Dhs<^bvn)Je z+VykLbgzlW*xIr4>RRf?Xne)7A|3c!DAag-tz&%sfg4{L4wn+u78(i=w7j*JR`ufj zE+^VE>9RBn^T5U$JBses3LJW@8DWV4%rJ925qM_Vi6BQNn6-AYxzHYCI_wm)!yaq) z*r_g?D`bu`NJ&0lG3HFV|Gu0z(E3z3Y}A=U8rCdILrs?`P!y7xEE)Up1a z)WR|-s1}4@i)$g}*9kCoCPh9gQ`8J&kpL4WMg43-adlL$^5}6Ct83El33MvTxdi}_ z7G_8fO-K)oNyB-+EsyO4a$4RJN6?E$Nz1d=D(4zp(&+d^yo&b9RJ--LJ(t>9m0_tq zVX58?Su`v{+i18Ft(p9)Y*qdBm0e(ChLO66jJ0*lW&Y#E6uk;xf{uzRiqxO-@o^E)FtuK&@Z{3%8J|yxot-vNBo|MyKFFDMwi~o-1TO1S4?sj_V@j+%I~kt z{T>x|Kc#bdWp=J1JFn^|J42ZKR61w|`ytm?N$v*7z5WQ~hT2j;vD;ACeu+GP884TwfS&v+q0qht zyzc86j^lZ$2zGBgvKfjU#V3gpeH(+Nc!lq_3?GM>m??>iT1W+wK{RUPGld)_e%xG3% zlPNn1VI*KA3+-ftVsO$Z!KXwFYL?b~($F?-oV+_K`-NO5ADiwY+bm1TBfYDyce z7oX3_GGeD|Hs|9R2>!k!EsUfBw$i>31wj7ik;AJ0oO~4!6b?8pX4#V>LJOi!Rj;j? z8V90NpU|m?4owq=hA0-ak48Lar?>h znRanb%9X=)-p7nIOOn;mr`<@w9#_rbBj)1GHKl7eY_2W6X2a&X(rY(tt}k7;VRNDM zx(%C)rRz6rZmuugz_CzzJ;!3{Mve`oH*jn$y^&*6=}jB%GiNjxJf$~_(pyC7t)lcc zQF^;5y@Pk_OE>XuF@E=*diPy=cfa1fS?|7E@4m;qdkgQrL><|;IlqI!3S3NAqMkU% z1a_&)%q}yx@vC`uB-+sTaxSL;{-qHyCn>!Bxqtl2JD8XCm+v*Oy{qFg;uw{C4Jc~l zsph((d7XZ*2Xbz%YvAk#9bR8FH|jR{_fri}_frk{_fyTA_10T-cxzF6Ce1K!)8Xxk zHu(;{aFY)2Y$UKKDEONV0Qj2?0Qj5DEd>MoeUt(IzR&=FA7ySYnmhD+rw#z%7n=7K z4e5<@b`rV`1?Zh;erADew+dPjuVPf0rGyTxu;<6EtvaoC{aAi2XG=0 zD@^bumZ_ua=f*zSUATKCXVw}_VKbWL^)E(c(aEdm=GL{qtkLzj|{Sc-A zsBd=$YD#8jSDygIqcHF+RzMQrp*QRzTKHMLeLfPjHxkEtR1NC$fJ9dxwBFX7IH|D( z+rri{)n)1IldF1rFC!rNSzTQ_;0j#h+Okd}YgYLkakzw@BL>&?^@23tbJd#mopMR& zFKSobCjx!*33j%uU&d0Rgzi@9sBgy9fraN8nL4Pk4zTq-B!1G&jvc*wJ7iqVGc=<7{K^HUi#QbM}#oYH#<0`PqvtILbS~s)*7M?ZZI1| zbAb+zD+1+bbYQpV5E+f9tX~ND93p9ap#Q0C|IdA34Wt_2n zf}a@b&RV=`!*b@tjqA_jXZY6czOJ^)JNWwl{0)#%5OJiv>H46+V{n{_dN7c zGJRI};|K$*rN^F~FDW#hg~4f#0opJqDv5BCNs{@79OYG z0V>_Jo5^O}P?2}bIKVQgkI6Hj0aB90kL|_X3M#bV`81fE(iKoAVkbch=|xZ z5wW=>ruBWHtrW0tMJ2H_A-32N^9q6jR$>toiE|?oXGZ)KA;E^WRSc~p;d3$!6(bs; zG|Vc@FP@<_5w)FAlZIe6=)QTL^x_LYjkz5vS5CVXudEii;->6Yl`9 z3G5>Omy`d#Ox{N(35=v%&WEsJmAr|w02KhUc$Cx)FsEXl???-JP_M9IB)i{5rvuqC z_+B&QUenALeh1vn9{yG{ce$1F;_KupitQ!X>#oLF`ckZHFE^)PR#&U^buvHUYktDl z{D?101eFUTzB=Ga#d-{^l=cI}VY5ZH5z(fTEsA@UUXDmv@Vk3nN4t9+#c=~6d2Y;< z`7ue-$7p9*5~>AZ^r9%ic_gPo(l+!;iJy^PHIuf5w>oORM}!fzTFEXEjTI4%@rTVQ zl;N#3+R;FM9PWpbtvjeqy~kHl-JhX4KH(8*C!#8Co;a(6+=MiCOrOgpn5zZ#IjSRT=A{YEvX>*eX=PJ;%ZF4ffNik&A@Q@--QK#6`aQ=0Wj>#27$i5S_% z(BMmR4jEASHr763rlI;9yrHrsem%oYTr*Z1-{nx44uu(26uz5F0hubLN&8V|T2c_x&=_j&BS~OQSGo?0OdYZF#)zF+F+0b2cHADgV&Y_76Jt>kXEYgk zp5~@J`4;qBczOn&erJYac5gMmhp#^n@##;1t^R^??XMZ$W+lAMN_d-<@TRCTzPh$V zy>@)eo5nyjZ^q(}G5CH=yU5Q=tI*rAkZ!QpH(Pf9wRITQ3NB?Y5u}65_$Xzo1x1wJ z6;WACjnf;`MxPow{V@X?V{+WB4w_SZ8O%@1z^6Qzl!us!z)L1!`#c_7Z93{tP4YZ7 z$@5g^hF6fs2J=d02%qOoG*LB=p@+?>o0UJidOGH_1=G`Py0HWkQlp&!7-V85k)dvq z=W8m#%NLDw>{lVT_(WbEC6YibTp|*szzC5@WTez^?-Q9$A~Q(j#7r5+iNvHSZ}`79 zBE1IwH6oNmx}+V!`lG!7bjU*L>9h>(l4IK-(RjAieP08$z`QoqXe$oRh}(8uFr|+0 zPy9{dg{pN53o{p)ziPwQV+acSnm5boX?Ygt>35%!?YW^Up99V;km1?N3kd3*akIQ`|uDNS-n(4 zGr5z(15)UMVOSO_6-u0_?%jxiZaFS47`Qqs*ord%D*3?%KO6et&k( z3Rf$ryuAYaHxygm60^F6X{nuA2zniGb~z~51s2?HD<)M4+~+9^qPl9S>UjPeX<58> zJkOJ+ysVvOHC4vI5o%)e-C%&#nGp`xG_JNXT-Nd%M%xh1 zh=Os|C?06Eg83U_O$=oS!N88>O4>is)5I8JUut#3R>%UX6^dirUH>e8pN12qc`s6j z(wxtHRKuRuC-PfM_Z-KM%*znwfCCSNrN@NN6Q$S?oOhuGPtT=`7#WR|M@n+64u>un}A*q(|G+iguBHPcPat^!}N8X|c|hG-)py z9hMjES-Nw!4l5e98I9+}=>M8;c4Eb`o*W zaHYIJhs})`1TWGV!OSk!#fiFjVIy$N7wPO09WE`{_C|9iymGOnNJun(J4LjsNJuoh zP4Up~vfYhrXLgyM?a*OoqwOK^8E3m1%`FOjc8l#R+T8`ho^f-puCLHL`*eAwc%2)? zKZD}c4P3ue*?gIvT%^Oxi}n?I_mw(0Mz2wlCl(X~twS-;ZXpI5&t9XPyjEw|6&3kx zlf7OH-k<{k&`S2kM*9W@Ix7+V%)Z$d!|Qbq6L5>ZTuCf6K6{&K%+Fgp1RvC`;XD>3RwLR1}=^_{$x z8w;yn*`v}VCmU2WP@T4M<3a^@8tJFS3{&xwh7H}@dgL{Y;cIkcsj7NS85l7&Yh}!6 zKg*)RMfdT{baPtXRETGEHe{D*YbUAPcwwQ1W7yX8isM12K`I>}LPONE5f9Dn!KI?rs18xsqxVBFqv1 z0t6PJ9-Y{UH*_WzTHQXc24{3K_1hyoI2%fKcdp%wMm+1ixxPy-`N!mmKu(I$b3%9R zPzW&jSDxR!yBkBcv(M6Yv#yydDPwR7k%KU5aP1)qIKZ*!kPY>_JNkNe(AUFVy&x94 z`c|-!4AobddeO>@R=TzUf#4$87SdsO_O0~^DB>R`QOeApBc`vCBq~5dR%C6hZZ?Tz zn$ws?BW@UZHly@;j&V34JcO_i`^qHeRXL3;dcB%KmysO$j2AoE(}g@9Oui4Jas!L5W+GP0M+bqF3n+d7CGv=7go?z_Gq(N7Dij4 z7@KgKWUySiL+-fr3Bn`_?b6gs?80tVUQ8o2nm*c*;yu&@5^;Mjjjk?`G~+`us}dDc zKdS&&f^;psu-*89eZQKjvNkiCE%ZTlaG;EHeYf>q+&-Ev>$)m!-36|eGWt;j+W=}X z>$xt(9<%CB%XheKRWYLb>n_%xuGbBY`U*>%-DS|B_`$Nib^?n~d_$r)()vYPpG6v8NxcE=cA%4$&=6Xv@u|>0Vjs0;Mn@TH2x()W<{sKln2&|_F&#c>K1TIbeXjh4_EY9N1IFlK ziio*UOn`#@bZ8&9pHXa@NZ4^(RWW|2kc={eb!eZkPcl~M>(KtQ{VYR^`y{lVv!4&` zQ}zp?{i6L+!G1ZkU$LV?`&Iij29*oaf1&-l?tjC6Gm5h{s$acIGE0W`U-Zp)boj0z zI@ee12uj<2FT|bndjo4&LIOUCO*i1v{oQXAg6FKpY2}?_OFToq7M7^`O$3-9M)@Za_@tp{uG>m!;hTEsZphagyV3LB1 zf=9UQbQPft5tS(*s?z9SjAAkI-Z(p|5R4Cl34o;tw#3DxkPW%GI7W}Bh~Tk0J1#iB z5KIk&6SyO1x-e)9riH=uU`806NJkB3>aAJkJ0ZrApN7Fnx}2>CCkJ!FU~Yhd5NFyj zI7KBkpM$)ZL!7F)TtKr37V7LYoh{P0rw3<*!I?T+tR9(kI`vXk0lj;+clEh^#S*ly zum*QeeJgIKzHbFf0@R4r)wv91m+A+X%g4fCnOIsbM$QV(E(9yWU}bPl7@Qld8d#Mm zxi{uRyL;w{Hg0ed^A(e@3xt9&wPx?mEnSKNES#p>(Qa)|G?FL`$jaRtoP-)lxl}GU z&+5JsC~PXtR_{@pn<|4J{E8Qs08PqA`f=#Yss^w3^3`{u;|JV(<*gLMYQ>9b>=j|0le}h?$C>a&M-g*z=?(5vpyLC^Da#fD~gqP-6vFVcR zxFU%sv}iyp3wRe>cdOG*$3Sv2c(>OaNAeqk90f->N!In!3bDVk(+ah8t7vxYh!$?^ zgld-F=qMtuvrcA|NKL=u+%*sK63@rcFtLGMZ7Ih&Q&(QNGN%n@I=9N9OgtnjQjSGc z6ss*t?v~QdB&OhI3E&rnN3C=`#0zzqy|ACzFlttfP9H?O(mFoR(_rAwpW|-988d1b z)2MNL&{wCkT-`3fZOzVhGS`0| zVN|D|qI?@%+mn$aeQtZ0CU7Bi-CcKE?+$$t+SKU(o7;$m>>zY7}e9rg9o_NC^Ztlfiy|{ zP6jjeVW6NED5wFEBA|iuGq-|AS{zto=)#M5^PkvD&A*udVMpH=qs{fI$3ku=;cj4@ z!ZV0q9b2y{F^e|qev(#F?Ytv+)*zq>!DirPH6YDB93dt2G6=lf5%Q?HLEu3T@)4g! zTdzIDdHU?(^4qD3Mj5 zA{=7F-~RD-v2D``?~%d_t1!PR1^Cy)u6)Kq{0%GJkI{)B>RWWXu#oPKwpn7fd>aF!{+Z5 zh>jO(8`vpZw}Rd#2Q_X`@Gb@) z2ch@~n59q97#;)X{3&>UJjthmaD2tZ$kTrJab<6j7b2YN-q$$`_@*U#FKzvLU-_&h z8eiP6HLvV z0&~t3#xg1pI3Ft5oGScHhJ0Lws_h?=FIVR-YGamsTCG1mGWq{{-sEegz$ITA zQT|Lhi2Hqq%}JXX+}*H11>@N;w#0Vq8b2!T&hd8-nYpW{GZfDQ$bJgH^L25mE=mj7 zI$6l-)22UY79BLF`=2w2@^~g=)8d0>$@J1vMyO>DdF@-JT&)bj@a6*ZUI5H{i5+Ur z2I{>IsP}nxxVhN20G}FRdYCcx60T3}#aG?Fq-E@jqE*fXSE{&^zHEK_(OYUGWRTJ1y+|`+(NNe)TpsWgDJKs zYS3tem1yh{HO0ghO)*i^yQUdU@&EbEyzSom?t*^v|Nfre^ZfRCcHWt}Q_q|^GjqlUjy7AIFRg0?8j zV1;sxbl0LK^$f17G|f`+JPbNwd@4=D_fM~st!qNM_1$7aBZ@OIk{ch86*a4F6;zhZ zMC56VJbkhQw*}+AX`g7VPGl1BwymXs-_70PjD4cLI>EwdOBf_~a*Cgh@>I9zTw7g$ zU%Do{nF5-c?Vtmi+_@G%7}X|*@$29 zJ$!O8B5-M}6A_t$OyTXKYH+5|YWb2V%@hu9tTqQ{3L2;F68*Vej9NR5k%*}_ci}PL zX^5+=wph(s8LKgqXr!Ux&x^v0m9f`W)9!FMCJQPD8|Z7sl&&RRo30@t1r(Dg4b{`* zFyBYQmerxSFEI+rrxjw9Rte?CDxmlnp!Zmy^%0^;n;0He38bs}&z;bF@;tfjLAwK^vtl z)T;2X>@nJjc$15xsf;EkSE?H#--_(!Nby{mQMC6+C^p>5Ui9;{xh zZP&}Rvmk0ZTOXyJqgQF?>Jzl{^hw&;a+=yW z*3zIjh{g8<{92%G!nWf>{OW2~<0SA;#1(Q<`-B2MWtNt4G;kXs!ZMXw`XDe;WI1AR^aHMvvtq4!faivoVH*a-z^ zS~U^KB+o)7b-7&Pn)j}wrRVo_NjCP?$1j$A$!4L;AK!Kz%+U{jjyR7=sj zD3eRk`bR|>H!#C-9ssPn#Z}$n)BIlDEw17BT97|})7|1aey{HqH&m8=2ILTd*=08> zA~oz$QH0gzrUg}HpY0Yqs{r$x%RYy_a3u!nI(Z#Otvt#A>|H>XU6`hK1BUm&T;ILW z6aO;I_3Z}y?!#2QA4Xumf|ck2u?CwpOp;&)S_D;F+7IPsX1xbF7gtRc!vnj;=cf)TN!*GPQMdTwgEZK7ONa!@UfyGv4Uc19 zJpm+m5(W>S#=Wd(g2tgBuSxJh>75&=geZmTJGZIf&W5Sv@(5F*epBY48SGT<=2Uw@ z7O#30+1WssK6_sl>}U80mYPa1G!egDg3(6yOfBh=La|*^TWby5rR+9`#TOsA_}Bgi z#VdoQ+%EB6Do2Nyb}MeJ$zhQ_;t^k6?D{bX)tewfKaJGrpM^R4euvz=4h839kn=JR zUL-vnghJwWx44Z6e|v}na9B&aN5BXvL%x#3QqpU#wN9a zL1QCKr(_P(30fdYZBWpTi5`e7Fr7RL1Ocx|?=MU|uf@hGs9V}##dN|2#oZo^qi{*& zz(pS(&7243;82FUjy@AC3oeOVxKsfyV|suK6uQu)a1edCB(!1vGAi%*pf|!Yz1~K- zahrkYa!alqq76qPT^j)|i@HQ}1an0%(G12t#eL_U-+dD%BmaltS8%8!Hl~zrI)xW` z*Az!4vF9II_)}wKjrnZN_+rQf@9`o* z>=gk|$v@{}M2s@9#|oGC5TO7o`QkmOb{E%6eb2>B?bLszm}hhh!#1l2v$sJ1NV0v6 zrY&H;A9{cutMp(9DY-?h6sA-0hvU@4%|jQ1dx(o2h2vu78t#Y@E;zw`;)V9Ippi$! z$yB{sFw9Cak6ZKyHDuDl%aj9jjBM;CK8F+|yz?rCoUSK@`+TjQEGYYhgZrio|MI>b z-~pT`4NHKHO&%LfD|ru&CN%rw%hs1;l~j|Oj7+pX zycx$yU48lLO=pz~!T%xn87Lb&sdKDpUYbI|jY)K*iOzaD8|ZAL)0~2H8hxkJX`!>p z5v|PB#sDsVl?hz_YNt~!IvDJ91g?LT3EUwo6I5;~wk$AZmDd3s)heBzi_6?i|v3!+S_wlu2X0p_s-D|<`~i8i3e znKci7-p44xd$82hRF(jnd6&vFc-Yn1+%j%%eaA-ioLKa(&M}c2Jzk35pL+N8i-GU~ zb?gcAKM~dIRlEMji5s`v_op)fyehd;Jb6FJjA*0eDSDHw23}|*SSEntw{~Zxp zs&v#TQG*?;lcH!6)D$R9lo->yLD7g39-HI|7gbK)$btAZf?teTl7)cOSj>)Li?fSC zM0PO;w0UK;tvfAyEeb@}3D~vTsIDUXFD^^exI`bQ))h=&@1kA_RQq#&!4P9=N9D5= z?gqkIsizX1Z%_lvdX_KHQwi0`gZ>*30Yd|Hb5|#>o`h2taR<1H?v=nDg>Q-S|J-_K z(%dKR$9&8^mC>*XGpOf10_;hMbEL5WR~$-H0wcsomshu4-n@2Ut86ki4G0dWa|ri# z`8rnKvP^O8d9Yd`4tF8So9l@4UDzOlor4R+g%|-jHc{&6ii^aBE^KmK((4X{ZQMay zk<&qTa|bx??nLa0FX;$|lIk$>`YQ-FbjiZgP|L<$Hn4tJL} zVZ}j>K)Re)2E9c2*`iGeO8TGegfUzNSb_muY-@CG&#?>8<;8q{F|0C-L6u*Ou>1lA zd54w2I7wb=Z&!qsfq1{eDom-&Rb(M&xpSZkFs9qp)3+UmQ@>Hmd88_+x0Ta zdZmZ5NHkd%);qW$h1#J&ZIZGdR6a$Mke0E#@<~y!N0`rvdRX&Y4dyv{gYI2oF^+?X zou_`Mbi=w!Oi>{lA^TPsc-$ijRZQWXFu94)e$hV?*)58Ei(k7@I)#m1>8reIkrwMwJM0>#%pAb0-c0LtE7JA5BrZA7s=oJFRN*{pm#;4(mRX-f8 z`Vo*$9vUgTEP!?yb_i-USC&ILVCP|d;c6~%Tv-+@gOsVyUYHht4hm|js`T<*VA#_S zSyN_t*c~OZ8HZ}eLtHZfj}1-~!y)#q(k96!s1<%p(1bBw6ZpXKYM>x(&7BOpqN=0R zIOIYLgLZvaR=}KLzlCGa(f;21Q^W$*&zWG<%oD}h@v;)NmX<=0$2}7b+9^U$AI**G zAZ-rT-U;X_EqxMZ4btpU3Kf%~lgG9>MBFj=QNV@&!|`(*+eWFp=W$~vCef$CDbzV6 zg-V7NVE;FazC-8?Plyrxj&#JKju_>@^j~NwE}q}%J!&7}J`9cFV`BU7CH!x3Ux(!L z2!l!_|J7*kg7!I%jo8s=ootSXOQdlvlx6#NtJE%Q8&g9{7Vo6u4WGD4-+VSr(l*xPii@naPaXTl|OzBA~wr(j;TlW|=Pf{oiDw$cG3cQhHfnmCievr@EGnuPuFbLl(J zoPnpoQUbO^>0HP-SnfJoTukQ@=GegkE`=><2Rb_bZjKkmHgfWqyd|GDU>Wa zVjO>PDPC&qYWHkRkRdCh)@@kOrp!)^%%3iin?EWQaK4lUt;fY4+}-fA7RfkVHqVOK ztS))h(Ta-9vt@0W!F* zmBXceA{MXNjcRSOz~rdaD+ zx;k==%pP!`=Bxvokgbaax!ZxU2q929dVTlcF5H(4@KNrA^IAz$Q9Qz)iV076W6=q263Vz zKI7sF2~yp}#^B98N8Ie<;>d|EZjOAx#m$6UTyd+o&Bdh=ICroF98!AUk72tuwjo#M z8JXW1 z_~x%%b$Hi}_;|eBA2xT?1`DetS5k$wY7yy4sz`SEN%bvVC}?0_Bf<%c-6LwRRSPLl zw!UTa#(I>G+{EG@>~eVsp2;g%<%yVSuwl2WnJo2zqif>;=#|7-sPe)rVr;4E8X=N- zMjOypY+MPT=$&O-?Ln{|CDR)lG9250((viTZ}|m6!@zF|=a2ki3dt{Kk^EvJ$uH)T z{9-!EFJ_edVp7R3=9T)ija4#?+@@k|gk?M>%TRl0-7CXq&oF0{rQ&f#!p!?4nXMqR;>RE}beom( z-_sOK^ueY+eY1E7A9Fvti_gGIz+QmIQen#v+bV4PVMm1>Kb%nEgda|-aMBN_R5;~_ z3sktk54$St`eE?*B$vex7pZWO3PWqvdq#ylKaB^AtAMTYn3V0fQ~OhXL{$T^0UaHiyfXR0>< z%RV>DzVrhZ)ZDGYkK+T7lcR&fRsWshKKKB0Mp!c9^Y8(PjKK8tC8F40j z7zRe*k^xdQ!-sKT1WZ^XVg-BvBqIuC#2oklNk-s;15#AOhoN9Zfs8m5K8yt;z=A}I zG<+ERQhpHOKkgGE?PQ!vMe=W=DEW6$lKh7lp8Nn1|4__I{!=VV{tJh#e~Ycj|A@DTX0*&_hNL&Ix9|A%5$e=7S=$ECAgb&@6 zv1F{Huc(W$=&p=4=?`MjZ5hkcKKkyZMfZbp0RzN(SQ3;ASa`7jM^G+c;>7|iLAihp zV?)aML+q|ZDj}RyQY2E~K&1-Bz*LbKo+`$x52bkBp-fClrNy*VM$At26Z2F3#nRLO zu_`rC)TaiEjj16xqz}VU{19!h)o7DbGhvl{ z7VL`GYRgk|VETI=tb892Gu`uHe0u>*W-roqrWV6+^%CtXsioTEsb$);sgtx9bA zh4{=+h|dg#_{>m<&kTk5EU&qSgSL)Lozy89v{OYcyZ`16Zq#c%@@KUgOvx zj!rd;>8aC1ZK_2qNNo~zsW!1XwOOo7wL^if13GeDV4Z9MgJc^xAlvam^;zQj)Y;QJNXTrxfwQCTX0smiQ(VzzBF z1NO4osC^7BSS5q{<6RU4dnkTan?I&tUIb ze4S1)cey6vYLl&ga6G9J>yVt?f`>#365Ddn{6k2R+;LvnQae#IdCW^y{9 zMPze=VTmvPvZvvX#vJMV))s>QQ}Aov*(5;nUXGbL^K(fOki;`UC42@5(g_A30V)=F zh~g+wP2Z#ffcR+oj-fM|Kj0Y(94Y8bW47szIL;9@4sHnt$2Lyk!oV(b=XTm@I}rOY z*$9TD$7)RYdBK0kKZbdXL`*W1c|HM^H~H>*QKGbr|xbwt{Tc`(k2i|Olv1tv@2SngC2JWMlM=z>#R-m> z?_$Hd(0i-;MBGaM#9Wt%s-7=y%U4be_|}TsR-Ok6ALy96U|0B1kY=mnj2Q;@#(bhU zVLUiZD`G}7nA0&=9zxbh+&zcLuOacBKw3Se*Lq^EOk@?+I}3+uwlg+Jj=wYq-+&by zKm%c*HgE1P9-kBM6)2d2>=%O;A+Z3F10f|jr5>M>zX1tkSY2PBnjQ90SRQ~%i05*k zbSQXJp(hz1^%JFjRB{Ar^A~{>^cRY?R9N_r_$UJ6778JQZ(3Kj_$dCtWxdlg0i zKC`hKIt!t{2yuQrUcw9xJ3Mc)M8Be}0(mbSUQDRAQ5=4hbi_YXR;{4=f zaYb^9xG8xocmh+w511w%O->gtB##rXCTql7$rsA z!p!r;`Se{tALN+lP>xwiIc6p0m^%b+&Riz&^3Y|ByG+I54I=R2nd2(P;SHi4;%Wx3 zNr4f59fQ}?xq)$?p>rdDz@tOwiO^ytCEk3?HO0)Y<4~aB+o3KCMPec0I@@*oZZ_fBtgh-@+)w4Gi$6Tm7BHfp#5c^QO%$;PdB{$XHnaZp8JSO-+kho8}=b zUtEv^W9&RW_Q7OBuXH!3dR&;yhUl z75AilP*zL_BWsV`uRs8{_+!G6#wKG*_Vdzqfb2uw#_Kh>OcQw*FkTXXQkgg5 zBRX|X$JYn(&5(lW z&9FeK@$8Ki+kZ7EcrnOm-o(3e|IN*!qfi%fSxH0>teq6SrJ5tVbRpO{&IKFeZi*l$ zQu>I8Oz)9TVN%X`toK?b&NPm=m!d;lIQ+7Ud)xOp;(nKQ2k|Vl3sY(j@I?$bd+5N% zl?yw7@aonH_yY{BwB z?%n1Uq|Cwgx>Jq_@(yfoy$4tYZ*$;qhnWh)>OeirncnvEGzu!Wvn>#}BL_3CRJLb> zXoM-HRAx0t#95cl9x4z@c4xVInk#BmzW2>FO_$EtAlEsZisS0>*T8)1*j}#E_NFts z@Ptwa9s%0w$FbPJYHXdf_OJHrRoNre`;v(BJro{rGRDQ&P4yd^SOd(vMpPe?jbWv6 zD}`#kZ|WIOgt07exhP%DUmjIzoNeU6!t2YRn6*JAl!}FM#<%@iNy~e%W^9eFt)&g! zxYLaq6si4%VMSX!uYa~#-^@qnc!W-%AM@tTU_Hw6aT3>jv9AEEpw)pv2v3petZQY# zU9SFes}#)TaL_bS9aR(XGO)UQxaF*<2c;K~ic0=tj7OL8O{@*Pb>FTi0mrQ(W-Q`J zhFnGYd>od}^-WMdX#803>87w$*TZ19REOcb@^lRppAv@(O4oI&r+}}fb9s20DA~^x3HP98r=!S5~JupQS-{rCxRH+X-ILYf&&5{t&`J z4?qJKRcGI55;nVAlG~X+ALU5F6?N_W0*P)FaOOMM}bI2NU|wgp~ory)#8 zMrwo70WHtQ)piML+kx6HMQxWw02p7}LX0qh)E5Hgqa^^UNIW>At$NKiTO~& z0K?h34o7ncqo_uZ+;8pR2V95LF6%6KA+zEM-dVUy*@5U51q-XdJ3xxUwbdrPMer8G zLLR)3dX`q(%2QVDjDdyT$%*pBers?!M49QGR)*h9b&{XH)hQ(CcQ4v258!B(687AL zxd1MVz6<}u)o)~le3E~oNeJUQ{6CBTKZECeDE?2z|9SYo8~-n%4$7|2#Q)n!gWtuE z!GBo~EKu_F%JM|Uq!GXj<RK~eQphN1H0h1GB$`fFF4D>QUZ2Dlv z-jPY}Xw5h~GN~P{`^4a*3lQ#CaM~5sE@Gso(64Ev%4lcYMyq8lYIHJ%(&uI#rZnT+AqM!(DP0SIBQCYJx^&k^zv!{~K~8_*(Y~Z?pOwij<3|TBW0;3L zYct74piXxFpZ1vF%N5p4Tz9vlY19nz5 z=D-O#TMr5rLHGRRAg(qj=*Y;7^pq_?$+Z`8(LkiH7f$*HEIywRCcPt z=`V^Y>03l?`c|U#uOF6vK_8#~rha1j+xnXHcl6WJFY0Hczo%cFep$aJ z{i^=O^lSPp>DTpL={NL;(?8IkP5)5epZ>A_V){+}C+VN)e^38Ze?R@U{!#iJqd5ID zV?_Gr#>n(9jjHsojAPTkHfqzqF_z+cO8R%ksp&r$>(hTUwxs`LoS%NzxC!6e(tkE? zPyf}pH~lx`k@Vk3<^%;Ph*xhmtBt(k<`mPwggGX>_Q8P~imQ)u3vDK_uTl$eiXO3gPiW#$huY4hz& z#(Xc+*ZgOupZTv$xn*VsSn13_Yh-4Sb!cXYH6}CEnwlAAEyx^VEzFFtPRfk5)@Kg2 z&d!Xo&dF3**Ji5Ziu@{M3Ws7-z%7YkOb5SzIfTBY#&&R>mG3b~2Bc4Gfw5xVJuJ|= zL@Tr@R>02Rxwx%*GJJ)41`O3x@N1Di1eS|VMO?9d7@jFu17C?~w+h5s_>y9~W#Ts9 z3T!dPTlK15F~vFw-0T(D0@Ye4;C9~%EU=5L88C3T0{e#*)-kAM1$GFhS`)>3Y)~N} zwyyIxBk*ky8@Xb`*9?t5ZmmuiEox^WZbMmI%~u1tA+R2`6L!d@OaMM9*6xO=0=Cx? zso{#!;rt@1TT~cSxYHgLl`HW@RxclJHe#j9N{8Zg>Xd@zj;3YCiF9VX7@9dk9F~DD zYi6RDm^n%;%2bP$nMsk2(CWxWXp`66oIAL|4k|N6W>i~OUc6R2WzFlmjuBxa+8{aP z_KjCE&w^TOjs)PkKc%m_-q8gAhaqA10asb6Q zPl(XXf6@6jga2{Nk5VvOsNo)^rPDF!m~<@1viWt8&`LN~61l7todP;8okH9>vx=CY zm{?LmUn!k3I(-}~?O2(V7;5#!HBGA@Bm2`Sr!#=gKstly45l-L4)kzJtYLHxp);J$ z2s*I9S7IINSfltoj13q~=Wsd|39B+;Ri&&k)>!^Lj=u3J>j(?V0wvZ&`i`XUD5i$S zK#4VpanKkjv5ui{GJR9%JC?qw^i890I(^5{sbSt3EO{n3I51pl?2tE?}mGDJ{t+53v@}SmS2mNe5D-5(`qK5^F2lzKy=^js-!|C2ad8 z7VgJgVx7(CbLfLysl+;u&iQmMVBCfDT}0<%IuI_ESUXba6eLU~)@3Q{a_ducu3!+t zr4s8ZmIvWdiFI{K?`vH{=UR@=b@W|N=LR~EFqK$0Cas&S&!()M7UW7L*5~LzxKv_6 zxKv_6xKu)5mJpaF7Q{>?7#eg%rdv#(Om}MvrQAm6b|$%lE%=gS-I=oPvUV~0?v&VL z-NWBbrh{SFW8F*Nm-*{%)_)(J`#yp5w32(|LjY`aGR4()lKx1x)fS zI^U-A9Xc-(sNYRk-{ahVDPaJ^O01V1>y?!F6)+tgdzC3(WAyjwd!2D_(Dws2?uY#0 zM=V{!RD$zc49e1vr0>UcR?%5a=S}AL37wzPd5dvx(f2mXdxvQ8GZz1I27i&Ten~iE z{Pw8v`xTS^nvndBWBrza-=(bITYsSMkIeEXg8JP8>pknwjQb0d{*J!C()k+`lXP0| zGx!fWAEc}gt$)%X)wKRil>HBVpqo2wkjI_2Mn^}SZ6L30(y^GN22HhXI;5d?0?@HZ zMeP)w0(8zM6}1cL6wv_{9b#kVl-Q+oNJZ^F=(U}uFGB~Ew2$2{W%sws=^K!;2cq-# zKzk751~YC5ouPDw(K&?9a5^LCjHGiYol$fSqchsE4^L^e9Ms?26^yA&YPEJ1oiTLA z(i!L2<5Su~`v|s!RMmzGR*8KiD<)O7tLaRlb2K1kA44Chsy&6iW9dva#7A4VV#Mre zbf)vy_2 z7W-DzZQn-ccE`RWr9F>zLVMo+Qo_EIsqaeIyBNMZVc)~=y$Sov343?KzK_4&Pv

    1. BKP10#&$V=?U*>e(4`$;-a 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

      1s!4S9=%fNueJ@r_TcNK7XVB8WgzGb1n?!E7@p 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

      r>%6J+`SL*?It%wq(9P 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�EB8*t#|nR>WWt^^Sk;%Y3Puy( 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 diff --git a/lib/CodenameOne_SRC.zip b/lib/CodenameOne_SRC.zip deleted file mode 100644 index 22bb966cc3987a3349b6c7dc7c556a7ad4b1340a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8454625 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%0D&4i~R&@pl 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ƀ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

      phy zX(Q#WHhUKbGfhM3laiAWgFE1AMP_T92=ffLk8mocg zevx)ajp_XIMk1$am%PRc%-}fod-}+6u+j_t4`xNM4x8|PK;0|P5=Xx%;%0AxQ-FOIJ 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�Jm66XV`<0_y^%1@UQ({!GFoo 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�YVhSb` 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

      {PI(Se!+hVNRGG+zKze|1B`mu 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%0D@)IksknfxTAa42;L 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%0AvYP&o%o-`H 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

      )y4R=C8-Ru20+!uI)XZww0-Dq;%* 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 z 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

      oReXPc5{qf79Mw%@vhQhsQ-RaZ}boL@O(6PLK zqH^yZBJ$ZwDe~S+^RI%A4rqL6Uhc7~9j@63?WEtGua48Sl4*lEKlL|6LBN10V*9w0 zo{`WW8weuRhSaf?-rmR~iLICO54>~yQabXra0y*TTizl6#<6|;oy`#kdap(6m{<8l zTIGIAmGWS*bpEz>?H$-%fTlo6c{|NTw0AY4jeAcA zBHHAn$~m&u+E3S(D?Q1rUbpzvCOmWIe5G|*)Tntk~ zjrq<{Eup<^g0!4I^Tx2H*#DDOV`ggxyXp>7;7h{%>;(l2Tp-xki3-jf@G$CaGg(uO zI!T9UqD?RWQwUvW+bO%<3XMKH80^*>Zn6W3wo07d@}U5Zrt(gzw4DsZqy=xgrEZr| zyEC)(?!twy?#$vVGBnwS4;EC~R?w(P1dfp0^bDSbZUGO?Als4HyFOAT9WH)p4O z65H|9GuaNqj|(&0d%TZ3Gq-!YyLC~6O>v$>b2l8_4*X+!yy}Uea^_?b8{67SdVY5J zXz!ci*s|Ha@!;ThDVfH^H{B2F8b{@tYJBv(3iGMn_QFdU z%0mkfd@cALJt`L~dXBNKe-bhoJ%V4zKZNN@?EpGA3qVPmVNhtH6+v^+Jm9drM~v!N z-T|raV_HYVL>UI&$j~xlMS?4A-g+cCR27`wi~0zs4lanV3vJg}MC2jK3rK8F(j?MM zOLcn1ipqA#59_nM3*_giK3XALQ}EMgset-NJ>3aJJ&xqtX2J2uUZ0)!r_^PzxQ*io1R2 z+L+k~34!FkE+}Y5&k?AM&5HI9$pgk#CdcsUiDn5hHz=OetzYF0`nQ|cu<^V4=EF(` z8aK^WV=rCye+(mbs%Pz7gbcfSsd#t^1r@(PG6Cb)|wgs?lQ@t8kR zSLc)CZCSolp7Yh7D+rYH9NP`89PTQ%b?%_wt+O)BH(drCVx&{^7>S z5C?G~T%GYdWc+K^ey*X^S|#dVq_>O=;F#%PrRS^-(NC7w9%&r4a@w}|lSQ;0N803Z zXs_HEQKXBC)iV%%k<%|}@haySBWny}UvfRa%~%OGKlL#`98YIr6i6BT!oh1hDH1{( zZ;1_WF=D0M;u7fbrV1pHa>$D85bv|iv@TjnlhjBhD~d86;l_eu@jg#UT{oQwI> z^zY&l?QhF(nosj5@s|mU_6HV%S8&>@UQOVX-qfbb-l2N%^<06TPP4rUuGL$jI48yG zo7C}0sK=eQ%csxK4zEan7JOvU5Uy=cwxHtSNPEZ5XT3MIPbl|za)O*5 z=lmD@qi_Q$F3;EIL>OsHerAU-sX~!QU>;1mxP3Z>3JNR^CZQi~3^lYdX~149jR<~9 z6e2Z+EUMdAWwr z5#ECX31E|xv7TXZB!(*{ZvXr(M^+6E_>XVRmBLLPpZ%6)6YLU`uwx`$>*I;=d(@yTYa{PXPbDZlxdrj zjH-qlj=YSVxUV?B$mS2p1o6*--(F8@vDszD^+v29~Pbxy?TU4|2JjH?*I99#%i0650zZi$VL=rByMBjyY8tHr=n$ET)* z{ingTK=m2lB7WbNZ&6;lp7j(WA%yj0D?5XUyC}d~dZCj$1Wss`GiGSd7V|^qnY)f9 zvP^+19>CQuXNmOu8$W-6baP~abpHbtW+NuhvQaljnt)O$^fjk%EtU;~2D zRT;ZlPY;u<{F0DC-c`fr+`o^9@WJ9uS{sZXyGmkOn7-N3I?GWOsVzUBC8Fm5Ua{b} zOn(=mW*HBBAt5RhE9k)rn{66L<#K8C6blCv9WQsOQQCqw30*yJ%3xrQhW_vzRE2Gk zK`{yj4@pqPGtzg4q!v>gNAMCmmWKoBwkbvp>(M*5qYR3}_9S4~AR2-&yIUQ>C;H6`@4^+*l z5#WiFtQcF*fL8y^Y?nz7VbMCPm1D$GW}Nk|$1_nA{RZJglIVc`wZ9pSkdX{b0m=SA z4RFtv`EU^mKP)V5~@d5&8Xfn&fKJgzM+E6`b_u_UMC;&3Ui zyLoNgRK(_%Atg1Kim|gCIHjeVmCE)}a>9@5b6Ja;!U_r)FM7EeNr`K%c%k$)h>h4a zdJG|KvYhRfSF1M^%);cSG-`}8G95mM5R_un)WmLhk{=Drer(QqEe#q-Phy_3ajR0e zsg?QtGd_C0P+)(KeHlZxg&o$nDtZ(be@c8y#}(EmNK9CmKX4l^1`hmqN(|^MUNQG7 zPF4)Q5O&bmW4`>ESfcq`FUt{wuF8j$u}G{_qwm>#IGxYF!G^QC@^^o?;u0%dKT3NI zFTG;U553n6t5Jg&5pznr`JYp4#_4gM1iz3qx;Yy=wz#Uq*lsSyIf7G~b`ElJfXFKo zxB7b3sN8Bg!jAxZ$a#7njtlqysvtb6D?fO1h~ivb<)*r3ZR=@0;HYV=NoF&D`4glc z=5t+ra&>+*nm%OC)_L!TDu$=9Jnra$2{rP0mNp zN7J>WCWUPqaA7758|}>#y=7!T0+_>@lUEThL}k|_kUW{YYg2QnY%*`krsPNoJ?j+M zPn8+f#8G8wu%hFWjy7T-6Awj&@1V#J!Ocv*&gmwQa3Bzip+xjgYT=0ulS)tykk0zi@a-Fwz5`7J?L)@7Vu>$d{yZ_YktYB3Od(It@4ak*zO}1>+-1AGL(H$+FbtB7{W? zh!&S+`MC!iXl~c94)zeh-B_4fL0fTZ`^C;Pqd!?o>4G(?t?bgCq`UfxmrP_CV>sN~ z?H6w9iHjr|OHN(ht0CioY(thIYZqZ<`XF6u31N9<7Zw7I`wRYEzGbIh0k+glqy56I z7)|8t>^&{s!}E^V*_m8HmHG4Fr>$+s^bG8K&j?cbZC)N!nz^s06UfTVQC~NAOU=|l zf9I>hg-Ini4#v1e^JfABIhT8b<bPpf>90(fDUi@qbYH9mg1YO626Uoy~QM!C}tFyPR{S{BFWS5uS z)m*SBw}w5PKQ2|ln(l^V;a+B|AOc!71j}mO=m$7#)96Xvy4psR z)EZ7_c$q39p@Wie4KMBLx2|@FpmrE&#Fk(s^e_pv7Yt<{ch<~q0NpK*$EcYS94CxK zhsW)SO^xpJ6B%pf6VG;#`(Zxq1U=2x*6qJrxovqM>Mw5JhKNZ?lvP|G^f}T-)B$8y z1d!#Tmj6DdGFHUpHFE0V$bDku3T?@!K*d9@q|0HqA)>)-T_+a2Lw7Hf#5Z*vhMVe+ z&yf3$$@ZX-z|12AlTj{EFWS{9NIWwYs|sdW2t)Hq!o>ypcDvTYCqBBu%-+lxUcg3i zhc}a*phYO>Kqr=AP`pL5Vv;t3S9?F7!172vOmf+aD@432v*xwf)Bq`z>On7z&d(+n z%yo#w#?TVVK!$!bO4f}U#_JxE^wXv~C$@-|n7RcKe>I3WWW7d2Y6x0Sll!@XPYT~0 zA_qt;#uOY}f0yGQpnNQ}tIU~zNVCE+;HO}w%7{)++s}i>h zt?Hd75scSz>C&Qh=V`kS_I7uy)!eWsTMM`$q#B#!Y{j+C2AR9H02?EBFsbK!=hwMg0|Tfbx2Hkc}#x@!R(B& z2Uw$CG42@zow=O(cMFBcj2p*rK4by80ZD8 z3jB=D4(^ltn)|iv%8@)_vfwt7^9h1GMoJ5;BN*S5k&)Jg@2x_psdIF=7pKZzAMSW& zEA9GLbiXOIZZeqB9H%Wsa**$`*R;hBK$g-jkdVNU$B|Qwku#pIFS?; z`~a6}Jc)O}zlKjOt3TR{8rr#$TIr^z~dmF?#g1J?$8_}p_sFX_XN zV%ZLyn~IgBXbpBB*55kiCeRC)6-FVx#vGT4ujYds zWZz&Mw4(5f$#*!C3Md`YxHNfnA?8-xP=N@jXe>1GJO*?~m)Iv{M?g(T>7}mNdi^6C zJL?#LwB&{FzuC}&hu z-gU0&hvH#LBawDQpaMCy?3rF(fRaWZMmkkOE5pZ%&g&Ws$y?>$*m6r+5*8|tw*1s_ z?F*}UO)6XTk0L=9bHWM6ht-c2gSi^6Df+BL0Qv_Thl52YJu5?!J3d+H#;t$Sj z_@%Iv2eo(fJp*7SN8fK{(i*o5p>TB9vNDKi)N_9OV-avp3$ZI?v9-#tYp7HPhK0er zSP17@JH@C>kEB36&2XeG;IOi)5z39%_7WE7Cj!?LrL}~vb}|ig{#GJ&Xa{&u(UVOH z??{^E?=~*P7JMDB+~>wibW1?WUUfFHXg#k)Y?fv(T3g$7P;E^8cm8aGxb@9ak>8Y-BB(;zSA)OkWem{ z?Y=e2TPK4vptPZ$I)`#PAl13d%tfh3Mdc8}IfN@J>w^{~)ZyxB;UL#;Zvsh>+_zQN zD1h*d$|nW^dP!he=X-^vt?%OSeaT!VwLJ5!8E(E?8+)}snL(z}L)2R( zPF3XZ#HI51WbY;t7HE_TH$}DTvM6XkpF2Zk;{`Hh&7=~*Ru{b2?5WcBo5 zH+68jqhJTM@bPTM5 zMi+1abn+B!x|&RSPx-6NuL9+3N)8fIFh34-Qb%S23RmW|DcMj#uA=(d(l%pc$XY#Z zAA6RfZD~BU1#c+YS$+wvFtSf3>{z4*sGSAOW)-wZuBWt`y^$JmQDB*YKRWRp|h18rlgQiqZNsiEgUg{5U|b2`Jez zaBjORKw=sEEmMNS2V!!D%bld7lybG0G$voScn79@gU9~LN-}}5Ob1)awv2XPl?88d z<40$Ex8Hj*aF5k*pGo@sb-7-%ub$bf9Pk(SKDm$Ff27iT)CdZ4q#O9#^MP3KPHdgjTFw+Q7^zode=tWCh|2*_?@rwD@0MG4mO3Z9yTW6~m<|wC7Gtb%90F+7$V9zjR z*jonz{E;IjT{`6As2a@W1>wVsq}zuidmK%Dn>TtFUei z^C&>`H&!l1KM-22ZNjfyVtoF*zTp+haslf)Ky=b;NnkcBEnBu5%L0NO7_=GE-M=`U zgu9>%aI+#mVX+Nf;3jr#TO$S(aR*yatVbWa+0e+R#-B;p5HO=((g+TV1(}s&`iqprDC@FIn?70wHm@ z-V?R}rcPg3zo0AVlj9qean2 zT#{Zu5Iq~2?32mnF2~rYaMx5*wpq`mXI(NWv-2~AoC;xWccF;OLA4%}>HchVbu!sL zLs+vI-(x?W{q1MnhlAch&2Vm<+r-J`v-A7;wH590-`x zg=a!tklro+8V5?A$R<|kKEch8jb>P%bGQs{asu(50|^zn#>mllVJahQWizdUgrOJY zz}emxLM)lAID%TCj6C{spGuReaxh4^f``&$Da}3mK%Xw)$-v=xxoOm&Eh{l0t z5cXGA@@8y?x9soTm1;#OLEIN`i{*^j|G`{vo`nY-pkDF}vyvZAm2)?nyjhgxqT)=7G6e7Kg%Lf=&MmWx-O-Lv?4nlhZ z^&^@DcNl+WLkq{)whY*GB(IJg6Yf_&E)b9k*k?y)1-?Xl3loAnI=#`$RPVrlWMA@0 zVH^CgomDSVa9_XI${JW3@LA-Bz)R2f!dO_6pAvEC8!mVM=6{nT3^qWljoD}l0s9+j zSPwbLtH-Udaa1U!Qy)WwE42CMdTKcE;G~wfy0G` z1vuu&Nj2ux<9j#v>G26Kjurlk>{*f;1CM8;;S@4?<3fawzGMwy zrVw{f)w_zAQwhe0HXcqK`iF}}D~URhss9;=-I#VS&%eG7wO;q^th5r-3j8h<%}MYB zHLnWiA)T@N`EwXg&eRG){i$Bmy2;{pb*m2&db4GQ$lfEUlB;Ur@M=U8;oZ1SyTG2( zPaU!Mgu#kJn3F1;u3~Jw%yX_I=FFRtnBHk=v-R)o0AH)Ls5e!I_!>%RvWK)mneu>n zo#|Q!VkKI{3%otMYW7vCcA{jum{M7rP`nC4^Fl<{I-5@pM(6bM)hIXxVVN%34tJv7 z1r#My&EqlJdet$Gf#bucqYga8AHxu3vNE47g9isOh@ea+E>}eOZ6c%21-9H45!|bn z{vN6iJeCx`ZJBX#O_L|oY$A0lNP6h6Ng$=3{28VO+njdjGekLh)#V{ES_(XYZ48Ao z6#Q7d(PjT)e>JJA(902fY2C-#y2u%$ro~%|;JiW7YH5YE$P!+y^f&Q%D^6i{?k=0P zmRMZ%o;iS}oaO2j)8E{agg44=v>H+#q2V=H1Ux0t^-Di()W0iwxAbyq>0qmd@wXVZ zao`_sG}$$XYRQlM?R9?_v*3E|o0X2_coWv-ecHiHu^af6=7RMy%l>s%Os%oAHr`Wt zBZMzM_~lA2SE{)Ygu%SW{oqwc@$AT{?E*_;>iQ8~UqY3Zlyqji`4mnA$FwCwbQN~1 zq8K#{XPN|;dCQrTmI5B6JPLmcXSE%If^LHJRjvS$vvDMr(walAyp&O?crs~r!KDL% z-*>fgb1c+)^7o}-L_*5%&SsP2G45hXt`kKkEt7jKQ(D}zDp59&?u@zxBnoQps5oCJ zPfx6R#3juJ;<%{3Zrd$!nQg`&w%YX3SRjwU7l@udU#tvQK3T!GUS=8N(~|PeR9Mv( zF7jO~Pa$W?7#$`ka=8WAVvfR_H3q%T&GC;)bFZXHj~H<>Gw zS(oo`UX3?-xZaFPh3^sU{m*XwYbk#VAJ*e%6W(`spuoO-GnLftP&iZ{-@Etgb^Lq( z-g>nMA3j)^U@+Lk8Hx!MhNmztaox;16^^Tw)T0*_bQiBiC%BB^PPMaFJ=q&n-Cd~h ztG$Ejp!XQrsjBV0{cj}~1mE_zdxv~Cc+@|v9`=!g{!y>H(>ss`2I_=@%!ANpolfDg zGn<^wU*mNCY4v7uCC+Hm(FxKuXs$s(<}e~PIIcgy0|IgdrJ)}BLAJQt($r#KJ$YJv zHG)zYtaBeJl#qmBcYKUnBXBX(Xez!s>IMdaM;PIq>XL<+35Dh|9ycEnrbB}X0RiYp zjwYSTQ3n4P+0kPqR6%>V?O7K@ohRC^Ekg0xZbz=4$xW}x8(W2{7#NZKG~SwBN=#37zzsB-B2Fa`Bt~;1Mzdv90ctZ>w**2M66JgKs|-UpHzWk(gYY8lNM+ z957(!ro)T*8&1IE-of@GlKK$xnlcxqFy;md*;EmWYmUZm zL5Fs&xA;ZkR+te2#Szq|y(~>@?CN8rBSC@&_Z9?%Os?=L58O}+!w5B{)1^^K8}Y5P zrT)cnXTAE>eURwz;^i6U^bqwQj!)qg_wZ~ofwJwv1k%LCdiA(l-TV0d{d*hte{t`A z_4KgoL)(WBAl3pELNH+%wV}~__nh+fhtrp^2(MQMqm$Q@$w>t#VXy!Ku-&cx`j_|q z>Q`)#k%X_tGt$xP*PV$llMYCeg<4Nbi zoB5~5k^>r@^e!-5 zNPsO6T+PR4okUlX_aJXo_W~S=w>H)=853|KiZg5((3gti0NAB6DnWU2&#`h8+HSd& z=xc|e2r+Z3J?ubrqNArszPXIW_#xWFCAtV7A3t$Oe zz~mYPb2#6aUNL9Is$914rA-ulIKPw@)LT?Lu<&}zEG>*9%NavQV)3R{pGYrGH7xpG zp+Ww|=y3Y&) zy&Z|K>OLEMyN}&=tNKyeUXLCAq#CALI}w|1NzIFe_r8pbg8Zk*g(ArMJYWV7%sm?T z)u0^3g%SsXkuCqb_o#9(=ANJE63PuARH>EC9Q*@}70ix(Tmv%1H5KqRh|(fY4BkR8 zCTM@sDb$@-O}w2$gQ?asN^b6uVpRkMZsAR^aOgRST4~a`yj~1K2?vRL!1NRkPiL?w zW3>Eg8;T1Y*ybRE{VxQ1+cT|JyzOU3s5BAq{5mQ1)0Q!*}J5gVEO_`8ej*F5=k zA5J8+rLo-oU-0f-ZrOIS!HqwjGKAp@cz8Y|`)`NHSHA z;A|r8hvM@WxFT*=CE|#^QdBut7n8g>eH|WdYa^=&&`M++6+9{=i)uES@Jwmyc&nO1 zMK(Oy2EHFoC+Au@<%{I4$3Xah4~SFVn@? z%uKUnw-MH&K5E*zy6|biK|V*VkrvPzpU3v>t)bC05XrX18P@$;=#q?VK6!~#p0F>{ zCOZz494Pd9lD875{bckS#}({6_APenHlhJWD{Q9x>nC2IrJek2bd9 z@iP!MaYP~YgPD0B`jE#2K7C(Z;3!ws3nB$3-_}sTqHgx+gn0CY^A%J%H zqhyNNnt@W{?nZ_&u9Hph6ImC3Ex|uy1>c)6GIXB6qTKpybUNoKHHlZ%i>9)j3!IYI!5{}4E^Crg0I#E>B}qSxpXOzRU%Qz@J#Mg!G;rQ z52*HB#Z}O2#M}zLtnkZie7PNv(Mlrlt!PLU#E-WP*@J?V3aq*;zlqxe)+UJjm=X$? zGS@DaGJky{RYLz94nE#21g=`6%=mvXLwji>sgLPn-hY!#0w zPi<76;P44q08+uF1QKkB7H9;0&THl>sLsZ4x&@WL#2t#H(sLeQsBIC>s#3g;*PZE9 z<;CR3M5VxjACN({O9}`K>y;?83akLvOrtlj66gqcL(&lrUN3pJ$E~>{Xw-)f@@k0S zbx%^0yE4d>tNtWhSik?6e7|$MQfQs@bN~u80LH?X%gzBPWhc|{pN~%v079ySGqH}m zqj!qlzVjrKq{9){XW8KoEFGC{7-1m$VsH)R%ELkG#|A3caBUxGE5@P=$=3C;V&GR#vLJRpB7ftaL3vg>>#Zd7gdXS{x&d+VP`m_TlT^5Toad0Hu-4?X2AVphl|VNb z%bmRfi51f)dFYd{D;>lB!8?Vy zj>X9VHZl4BewvtZ$65?JJRpMuVm^%Yk$HVv%iI&NCmLf&Ntpl6OR zGKk_LjwrL&S$p$|3gIq&Ti40?6&7yZ<_y(onsbteS6y*Y&#dQBv)GGX%fC~rMe|`& z%g>hXwN7Q`D@nSIqTznK=SX>bNjVNJF(J1IVA2%UObX9@V$gWIkpBh~0fI>r+)JK2 z8{UZcRchNB$(2B&4`rtz@^rR}gGH~F%)oqu1E^WX0|6%`0Mc(LTGpZKe8n?BoJm+( zYF@peshfKDCIj&{wvy4U)jYT&G+Y}pD!K%1gP)y*@zl;O%Iv~h#wOv?O{s#NZ*@)L zAcF9IK70vs69$F=1eBG@qOJ z=}ZqM0q|s4TC=%W4$M*`N)k*lsWj$nSfqW?eIi#~W{u1Em%7zzD>dH3+)ZGsMYa zf^b3z@IIDHJZ2dY$T-rukc~Z5nK^6ZQ7JwRe)t-olTBoC663Uy$|yMvx02>O!3%|n z$l{D~N$FA|F@jp8@}%XMX6D|yG~^exzbyfhRmJwxLBy`4qr12xCPU1UqmHODOkOuc zs40;P%{ptYfdl7>U{B@>0C|-Mz??hEpgdEyWYU(LMD-k9HGZfHzXAEIs!P>B$@wAD zH;8Up8#l6chXnOgV2+_7ysbu`NQS(X^EXJH*1`WPYe?Is?gi`fSBA@keZHUZxOJcwE4w`NbFLo zv=TzcNm?cNKuY{ zWxnCyC?;JzhpNv+il<0^gXgueMF`l7Eguw1U@ZA{TftmaYYVBlo}%GYhUo4#eqIcQ zYEgx%tz2!&63xstr}elyB*KX+IK;)rTzDv=ggroYHt<-&6-&Mdal};MsUtGq3T@rb zyHv#jG@cD;Q5Ri27B|3{zMhT25n>A*zcuXboA1MTRx|xF3Y>zENj;dIT8)wUdg(F5 ze<+Kn67PPYLJ$oZVU1U{)u3OEg*G)+Q4Xx`x| zJTVarZ&h-(QM5=yc7Dv+JXAeZoB7Cihht2RE!&<7#dDMt;QLV_0ijz9vL3~>;|8ng zIz_44KgpU|+RkG;aouig2XJUye{^*t{536wgyaB$*3;Z^rntaCHXP zmC!UH@fc1>IO1b5x?(jn5#$-vYzCh%F=E0^-WlgXZb_)KR~a6xL-4}g+#JyYbSfU! z0T33*d8Ke{VxrWR;j@!y``Chink`W+1d1p~_=2^1Ktis`y8Tmo&5e!7%GrJFIw6ME zu@qOS4emgk01EjW*qX1+_Bft7@^r=p>6qc)TKgc$5*Vwb)rM1xJT3Y4;!G@#u1Mmm zq>oH$U^gs^5aP9U2iT>;6ri8r^oEJ9Ru{SER#&4@Y5v#{I4DlMnow*%^GUXpV!bEZ zdprFnU#(XwU&;z!L4pwQVkAqjod9oozA4;Zx$BSbuH1%37LGKU05#(doeIgoMza4u z)~uUB=FLWT4Uy;5ktAZUoA{6~%%Kq(*nb#YS?laKZ;!M1^G|PmR^uulL?+E-fW=i) zcE6D$g3M7;QjJYb0f2b{RpYyPt+?}1QAFKID2EmMt5-JpWK_(8_ z-mdEyAcW0E>`)}ECTl4}!fe)Lty$tufy0n0eKGn0FrF}wwuCA2Q70XWUFiQ~yJQ-aoZQr)EjYmGO;rFA{sfWFt=g_mX+R5lLKq9LXci?eZiOb7%agfaEq-h`5G0xI zwO>+3NaKa7gc0@Hg%!5XLOxZ#3o6C)ZSCU)jRaLE*fvX_a1+cX&M7zUEouAt?&WV1 z_!bX@6#~5s>bYe>_dd)Hm;v00LSES@BvDL8kcVCnAzQ@C_yPyy@q9&`f57KcZ&8-x z-U6&h2HYariuxHGyoIu$xcwC&^)`#%NTOZm=X`xWuGYA7We07FC*$ zQ*FdF5JzipH%U}F)kYStL*L`l8tb|;5sOS~@H!cGfnO~h*UQ^(HWFzuoA7b96uqD=oVH#aj-l8Ab~vhWbdQQ6#X*l#zj9X!B46gom<~J$BDEvpC(9jF zWwec1uC0aay>wX8?={Fc&OxFUG5I*GQ-o8?zPWCG1nbhit$;teQ=c8*buyrQgM_Y& zke3OJ5j2Rb4~osYIk%?TW-LhR0>hP?EKF;|4_?B&Zn3m2V*Bm@b zY^54a+gVO}f~eExC=#bAj*^|@50^4)r17)T6;?4~@brX73PlVMJ!ZN4`E5AS(<&Z& z;q0*Lh7o+Hx*Ccc3heMYcvc&LDDVdoE7gUlg^b?V3`Q@J9|NJ6n$IbkiLp&GbyH~K zkAd)uBwM8Y^rjq@W$b(wadge{pco-F-J#+~MHROJd~_x?!(^Pq!dX3T5V06^D9~5T zu{B6Dk^9$O;_OJTk5gkv(iT0vzEZb8?44-VPVxan}cDfAI^Lkq~l_sQbNrQPvznlSuEx zq!VfQ_OSZAI=XFYL~3`~Cz6~{!vjfcbjDii5R{Q`1^|f|cN-PNWFFTkJ-~Gu6jGlK9{#!-&5vyp#ehs}!mAXa zBnb_Wnn~<&WdzwdE5mXkacsqsk$(7=pZKn(P~ywh!{;@Ul1~mPcfGC*l7=%#;dX2d zVtrC*hcA>o2%Z`%pCQW~E}@3U%I65Dtt*Y#WYMp_-p$I7EACk(9Td-cDfC!(0)G>6 zwS|}UM0ltf9ba6H@|uymunY#i^3%;BYP#=fhpAhqd1ZyRnhBmz0!GwG-_=U{f`fXEeOoGrqeX3am*z+t-KkP~rB7k4p9 zP+_vIT0^L&PCPnRguPW}aqU63?tB5e}c z7wjz)^Z-^Yi4bTg(2Q6y`8WgJ;BayZ5G6NP+8(}h^{=ciK{u=y=(J2VEK;5hzDZ6u z{K=1W{`r!f=ex)IgaFskn}WD~ArsvCZtxyqkd8Bb_Ig=$LO7&w!z--r!N`*QTr+76 z6;|r!_4)e(VwuTX2np_$Dy>=$@Mh>(ZW0T`>M{WpQ~lXC#gfBZmdRKSAQfL&c#FcBqq+9|V)EVv(Pk7uKc=jd+@`(nP?5U|DsMfes>kHS|U z{LciTrA{HV{vkSj4YZL^3FQkGAe(*{M6!OXJj9p$ILwKlOwJEp&ya1nKIoofI|-%& z`}3qCwyXL0T$}}|xTIx1Y-gZXy{ipUG5j(pUemi927PQRNOh!gB(@Rs!2L;E^PMT% zvGUhZbXMT?-&{iRH_7=0f-ih=8Yd~iZGiyUg74$AG_SO@(^8=+NJ!~KjCQ~lPRU!4 zNSMKPVrSRyPDu^M!)BL9bFq5yp#;z}I4Li##FK_E(!E zt5oCZwH4KhDBl&qdL-w?K=?~I95qG&d0fMts5C=xXoY;G{Q6l!;&O-O;iJ8S0dl_X zJnIey2mJ?62fb&z{lkF;Ls`AMciVS?B$#hui@zfP-z_IKIsw&(yO=4kRz%d<88qX= zqqC9t)+-Yi0Q-l}N~7N1+uiLV_3ds?A#Kj6L&d-Jmc=dAvo4*i>UZ>|1^HdLm9XsS zxUA<|J)Nijf+II(Gi?v&8F9SVjC|OwBr6=xU&pvSX(%JcdB|-7P;_wD0jNmQ%EJ~e zVPbwhSp0RrdLu`nDO}#*eIz>2#3hOsvg6iVXkU@$)!Oh=8jOC@3i26CLd~=M7PAy) zepj6gvib=!{48rvfBD^FY$pyZ?aG#Vk7R&~6G2KF1(&LYnf*+mwbig}6Kql|{w}oi z-6E@C9R~gmHS6BQrNVsHVCG<`3NH}bYV@Q+Hk6lG%j?GbTV#l| z&BDF;ZLlNH3wWPaBeveY6mh)QqeMZ|Q|A!}?D66_XW=Nr%V4v-~% z;pzoVGRupsRHI5JGzoJJulZ$&EU|0`@Ve(N&E8e5;BI^<2vt-Oj?nhjSb!X?)z&viFd%ipzuK02*XxMCcRj1_1W-Zwt-CB7;a_+ zNWi5k5ny1`pExWMRfw^}A3HW&ZTeN*FGsk+Tfhl>u;@FF5DKcjSK2+QAl&Q(`B>Mh zKQGQV7X)I`uFmFLEo3VU6e?H9rUOcct5XvzC^XsEV$(iESD^eo(iqSBnvxN@=2urX zUJoxfnB#gj+rW@u1YoeV^k?E+S~|f5^-tGaVb$oRme3xfo3ZIQN);1!E`D~mi>6gtnPFj$`|{slEA*&S^EOk_8TbSQzO z^QM-NEQ+lZu(_#1R!To6qo$&&Bvch65%#T*U|6TF9P75pP8`;ynpOG?jk7@v&@6RS z$;1St@O`b2a6K}H454$^Mx6utB%XcJnZFW4;cO?yf_^0 zf)wK6M8Ggegi}DIsc;FyZ37bbT_yk`Ey&WU&ZW|6#1R zf&hLpSm}|01yiOiSGh3u2S>WV>3H+;g`6@jN5`7}8XS^G2wANT0fJD3mwF`1IhflR z{cgnOC60z6!mvP_dhNC@c^JKY_p$c8*)Oq=!*xUvGyn=iL1eO*r?rxyyDnOkFq5=~ zV6a}pbl6fj%nNDBQvX;3%q=qsb&VXzj=8I1P{#;Uf#OgrHga9S#2mLS%p_nRpXdlY z6eSPR^|LRaC`j&R6c-Gvi+ts?$Z@9*AU>jWI|jh@gZ}mB=nS*prOlB!#O1LaPObz+ zoY^Q6W7~?PCO`&FW+Gk1_2z=A-ilolR7*#G72|R!U0@wI1y&-BGu!8)s!OKJwhsxh zcETrWL$jYZ+8unm+k4jEdA9fP;bCt;Bq~KYf5l(6@R83N{p=l!xJeCC)956&&*KHR zjy*=xivd(6ykwbBS57qnPxo&|xU8x0NyL%RFUT%*96MY$if!BNcoV3IHMoyiVPk~i zbSerBINlhQZ0LHKHKj<0E?HjXz9OM`mHbKT>Dbqmtk~I%0$5>v8Nr5`1nnA|NQl*Y z=8Rc$^=08j7LKO|d6=X4+^Q$u6F>jvgRQo7e#ZX1#9oB$$O0TCad{ERXh|IU!jg^5 z9XcweLB^C-vnIa1NspjEsU6 z7j$0tE zm%9zUCND}s(hr#TFh?@=RzoRtq zUUt%ZiLU2eHY76RY!eFXl)N}f756_K*VSLk?)nR)3ic5;jmGX@Fwc~v7Lh90Qu^`z zhsLy}cjmZ*u&LrE6pOs&CKGs&@C995mqXkh2A)7h5*eZo!Ptaz3zPBvZ7zqu9`WJ{ zUed>7%Ou7*>%l;9ebSWk&2=nHz-dN4VZlz03BqpgZ-zi?S0#q66(d!4;|& z$u%E6A5B%tJfTWOfiG%Sj7X)28yv&`(TP-cX%4wTtGr6KMukc=*$(xmM6I^nggGHv z-Ur=68VJ-S)D)2ZZseN-dSmL8$xXFHxVY_%*ST4`HB)qH1`l0Q!s|{Yl1nIE1R^ri zobe#m6O82*a?sE;?rf+=OwzzM!yZUb@(V&WenQOB)dacMuG@{gC1V1vTB^0|3;f0$ zJIu=;%wov7uHxDEF`#1yK^xkjYJLI=iGZRd@g(&OgbN)uZk7)S%pL~MdclRlDGf(ihzw^h1 z9-f#)^No$ewTkd+zbpF)JX0H3(uIt9SLv^yOsIH;Ep^7mq{J}=5}ndWlx9rG%gIk9 zK}kfzf_<3vo)6Eu)8~?aB3!6TUDYK7DKNX9sE7hL5(LF6NfuZDMeo3r{nH~T3(|*X%@K^)1S&5U9-MNdz<2v6&S8Pmb@N4v?8sjVc>W{lGF{r_ z6C}ZSQFYlP$(4q*D{kc#I{fJ*tXvxa60$H4>k3K=L$1^$7%-k+%v0E$E9*L9)N9*9 zT5WGRp6;@hetCtkzT+ynyEUhK9y0PLvQi_OQb6fZAXtd6YdC5X)NzZ$$q3FkLj*R8 zEy^OgMIypES2a7sBjrS3H7k1074C0_y4&tx^<|G$LnD}62w-zk;d=EkeVasymU!23 zld>|6IQ!xS*qjX9hR#2F5q7V1t7odtCw$@xyNxd#7hDE$&*^ZA(1JMoHek@Uq!QDg ziAkZ<&8k;IS}XKOnEaEsvxUT0v8%)*BnYFdcc)r;D%V-gGPK4VLNiU62NCh|Oas2C zk7OwJIkTJL=6Sk5Kmg^5AMS|caZ`$x(~(?Oj*3%^pLlo}E-_tKSH~!K8t09}xs!Z# z7I`eJkyzC0chR9zL{e5~i6ay8*7xjOuwUU8(Hv*=Ip%9(6?2r_Thop)mQ~`E0D%aQ zXuG*1NcxnJ!PqbR z7UG#_2P}jW?sT?016fdv8#K1<$keA0m>Q;#2p}t^eF`l3*t1g2EOg21I71v>fjDq| zc(Z}pw86C^n>pN?tEiw^&kG`W&ht#zFPl3|JAKq{D1w{zqti_{wB|F z)EnI2yc%!v_^{bv*q!fjF#Kn?{IB{{Z39if>gTqreTa2-)XB`Q@lzKcoV&8lA6<0F@V!FWD7L5f#AARxFy66=FY1zhM{0zdiVt0zyZ zuaNF|igmEByWcLZU%!A61yae3c9D<8)PT(bX30C1Y>~)`6wbyE3Dcp$1Tzad8d9$5 zRE{!i!!XbiPw0QFt-t^@KBkwQrvHMVjx_e)GgjT!=E^o`4lYmg7c1~=J07X5gmOq) z@d{Q9Xfp5ccy7~TY+x6-d~(>+Ms>S{SL^vDQUd^D_AY09VwUwYp-v}{dk5PHOMpLqf44vQ7Mf2s^sqm8(gQPm2$JYl``rT&$kW~KLAC$%V1Mth z2gDu%<%?&J4aEthuq}6UB904Mkr{09zyt1*0zUMr2SC<_LN-PFUjvJ4j>d06hp<-i z=0haV zJL}c2?pF_i@t5%7f=s-Q)aIu!*gb?76a=6Lli7T7v0gpyR`))>fB)Xb{a@U>Up+nS z`q1{zAS*G98|FL^r&1dly?4(k4|~>2Tx7al9gI$1PbMc7&E`z*4`$M>{`!~q{_0n3 zkZNt*REpL4`t|D$WIHeuBr`ncxVVlbK`UfCu|;Ar!d+`JJ(rbabRnpvgVEn3%7H74 zhCB#gh&F$T^s9jJ91R)+>|BjIWPp&FM5+OOisf0(h<<1V#bbfttfmJqNst9+I)oB} zPQ^rO!k}!<7}Vry3YRqW%F%sUln4QkuyowXCwsbX>DzuhHOG!1Y2B%M(G5Z_#Nj@z zEB69SD-+!qw;1Z>cWYc)VZT@7!a=JQxo$_u_6paEUB6EXxu9@EVPoY3V43 zq3~l8tV#c93A_mtFt79|j6I}HU4)GjdxQz5OAgANoZ?{g#Ml5E{oVw=g1Sb)gIF!i zECrsRS$qg3BO_9#ffj=F=7?111)M@@mu_Iy;!u%plbgZPL%>e>?BU+iCp!Z5$2Wpn zPTRCAG1o8=S%-cY5`8LTflw%(0xZ9Z3qB#Q<*Re1Mc&IR) zo^T7USP19BL~4A4Ll>fP1cPPCimTK;gu9|R4eP3xRE4N=!qnot@!Gc)m#)pNkj-j$ zw(a0}1rY;$7p^LXCht)=s~8GU==2IcooJTmH(R49)hKmfC%6n~XDj2`3|@?3WG0w^ zd19NkK|BebHZt9&6vTWE&#)&1XCI1ykfaE9Z)bqNJdijlys<9<6nr{mTsP9s)f%8i zZGfKm7kl0ZZ5$@?{cGcbQCnPHK^qhixKN#h+||`6%O*+Bc(&8H`YdGz647cj;95Fr z&FaQMf6%JV!|H9EnST1O{`-IR!+(717XM#sKQoQa&bF!iox-j^4+kbz;>Z7fI52%U zFxjCq93DO#m~dF6aQxxG^v8Q(;@+MJ%i9?{q-2GIHDlfoURV~OQK#o11f)a zhdABMJCUFIIUBKXkPUGjd@(tL(sX!4bpa)W8NFekLm9e&Q1zi#HZ8sGCUE^?NeYb0 zq(z@I8saE-3~0@LS1u^Uxu04fmC@){N=>K;lII#WkJGO>9J4`Fhzj`Z@?<)Eec|E- zWD1R=N4LNL4R(O0eUOy<=2g9{nTQ0c2%( zarBhW;v%G`)|q??63sCWyXq;t1?Rg@H#gxIJw&Jyykf7;FTSCVbJX>+@QaZsN%PVN zlh=>rd0rMuhKonhCwi+&3_Wa%@4t4p>c(4`?w?=aK$4n=SPNK;FBA{yx|Oj*Q3ia= zQo*v2LjXJD0v0FkGpKDuaJS3f&adQxY`m7pu5+Gts5C{D`=JYJKl~FMDWzE?;nhpz zz!%`T*Q^*d{3ZdqrO}6f2Fja>^wPqAO-96_mGoKX7#H$)N)F z`7_RHy9KBP;n5}j4+iCtA`daPKOCe-xZVowvS4j3Q^SG4(2EKuY37opme6#u%2X0U zPQJQTQ5nJooK(bR*JvBN2jU;7%$F0lAKcC8nKaW%?7~j=14x2;>8nogT$&w)VoQf~ zBNCi~?;4+aM@(2N?;jP)E^D~Z-ipXDK(=gLH$q2TgV0W3?j+%xk%R7)lpT@@Oujlv zD9;W1U}v}YaIh(ctW6kRVB<>aw9bE|@Gjwy`Im-^L)I>l6`N&mG+^iQZ$DhyW8!!R zd;6OY_6CE!$2S+ApHe{$;<|NnLCk$y+F z^Bq%j9w4nLYzU8_<-!IRPWWttAOHK|g#Y1$|KWr`sv1`14=4OTZj-29|B3T+?cBZt zgXq~1c@^6V^kDPA@w87POM9tnUekrRbKut0&78MCRTy$#@2M00bn9W)ox77FpJnOlc?pJ!< z9uCB^1;JrJ_8_Vf^rQ^E3T#4LVPZHk12DBF+h*K`CIGie3}|1&7B4<3=EMLs2*ZYX z;Df|BKBia6C1bIuQFv25?(gigVcb950RU#s7FEFa?ui2H7kteSwl2vy@c0uX5}-8* z}+K53VG+%9SIV84r2_A zaC$mDqXVd7!l}xLm?V+B0%wMJiW{^pj&Zm(XC71$1?6z|0u7@^xZvgXpWjXbb%Fa; z1PHw-#F3$rRfSU`H03j}_p%Okn zfI9xos)-#OeIFWq3}>{u#$N}vM|Eew7K*RpnfOJnBG9akvrYu|uNWZ1lBBh|x|+3%K4mIo2s^|1a22@CrZnx!zn5|EZ*vC7r_Cn? zJOgu!u^i>TY79*O9Ap(~#s|Z{PN(p@LcifxhgZ|Bj%yU?6~`S|KahH{?KNqIR3b=E zh<%@KGBZp=85YusGrb#A#kg(RIMBtF;xG9(BlSq+%frt`-k#Q3`yYYc+3jMQXNe}2 zw?8fNDHi7^ZzxDdr~w z-91MjFM!FaKhm*tnJ4lp%0-dor-ozOXaDnefB(P2KaKx) zuG4~3udoee1AXCx?wd9F@xLE*-yd|}A9UXzbl-n+;XrMw?O@~#I^TwRd>2uM?QaJN z1nJ_Gy12x{@#yTNy$Ivw=Ce*0`R*qdJ^qNAX3?lY>5Ev7R-JRo+p)VLL_!q7;P!7I zppGQxD{^C>Q@_gqK5^4}IT~HcRw%VySuJsA)Fr?x4&G`WEy%D$QQ4?h8!m{U9B1(g z%rAX*hTKCF@kKHK>f|o zFNr6C3s4TI4@@G&AWOoT4W+X_y+v1C@8KGpY8Q8sBJ{IWb)5p8Dy*~TKdP!G(W?EJ zsf|sbE(j9y@%(J`^b)R)NZy-|NK*fV92QbA6(t}{V-g{qy#NwL`fAFsOF-dL3xuPX zs)EWR_rLcf8g#(-?;&g}JdrsIztW@=iQs+s26wxkcjyZ$Cy=v?mh==x2-GTm$|S~z zaC>0lavC)VDE-Qs(FP#F8R#we_h@ts^I$>2C~F2mnG={xBq4#kRVT)`LY$H}ls7m> z&989hHVxxn_`Y-{^k-XyY0Ck^6~6>I-GPR%M2d4mKifB&b`vw+mo&JjT2t?YCa*~KEpNN z3s+ESa0Qq}#3s?nz3qsRLx`u`Cn-IsmF5h=qK`2Y&+_@Fq=6xXm4 zW=00Trx|DDLJGL@OF|5r=jex)c_&8}(Gck=?3sVBRqwiN>lW zDHSwDjwVgOiL8EF#`y#81~Uje;+ulKK+3->LOAOVz*{Z zHy0iET;?HJqvO~p_7^0pfZm>GrMx8T>#-R3g~^e#T16i)6Umhj{){;dBvV*+;RTy} zG#KpD00T$18RUO!gU%v2n#-{qr~DyGoWNHEnPPas9!^-9x7am@?iBsaQ+5AvZ{yd$ z{?%V2H@ZW~;3c`jf}vV)eJfgq)KSCiLw0oNJ=xyd=|B1E85)IVeI>TNV(t~malU#w zc=+q2PaGnlh`{ymA?ti*iCWm7G=&cFcjMQEzWO1!L`aImqx%hf)p>~J)G~nYd2ygN zL`oWiZ})r8NJbc3Av?}Q4 z&5=9mCEdJQ4p`7XDv{B$M~7HcewXv-u8|TX%k#K zQ-e74NK1a+p`Wb~=m_^0nfknd)%7*7RUdC&n$$4*0avs^7l7zY-hMd10e&k`NR!?} z2%Bpey{o`lPHd&BBWb`ciQ8teZte_CkfOtnnYb1qHz#s1Q5(qBh{@DEMhoacPF66( znTKi5n3ns5dHd;^u8t*8g%?wVshUnYP1Zh81|Y$*qrmg!}YUh3o`YHUw_|(CEFCaVQiQnEkK)g<>cn{ce0aE*SdC{gdGZx%CU>(7k*~=@6<0_mG!thA(K;ew-N0G6XG95CdmvAL z2cFzt;l{UR2q9?Q6f9)mn@o_N4dIQESELvhgR>1`i@MXmY>0Y&8*5@kB<<(~uv}x_ zni{WE!8bg@{Y_U;#FE-!DwrHILnQL4A);IHl9D+tPhrwS8-1WcQ*V)3yi0r8zHEFG zYB#Q+6i?P$#{U-&68R6$=voPGMdwI}K*wiSA~!`cpB@=+-wLy{L2AoREGBG3_s|5n4!O5Rk#AlHMTl|9WFGQh{4JJE9gV74s z3hPjGYiDgR{oF*Y}C_pmWV4?aF9 zj{ww1Eh-_smXS3s=?zB*=X>dc`9=n83Rl44-z|^3tr@3JQSE&kIBKoAj9ckUBBuP z4_KBLF)ydW1W_p2%-&DS*~Uf|g?+o%JjaywaR(qd?kHt7_w+;EU@+ZYDZ>Z%94tL} z3D84wS)_!EKQZ+d?1yaGqcfPI=@~0blR;3R5{kNEg@^WqI3y>LoWbS(5ta_k4Uzxo zx`t%Re11rg$by6n@tA7JV_@|JCTh1ZPz^*BRgUx+^CspRD#a8d4Gn&}kq|s?w`f!@ zodI~}2Y4f$Bv zVB@%9O=g(!BgA;NACCg1Rh3ANZ3B+0X(v4=12}c|S!$dr!X>@k^iWkArO$slMjv_7 zRb%dxcctS|lcD&WCq%3VFB}}X|M0LD62EMS1_Cptr--&0kL#h{RIz?Gz46eqZ&4#n zCxTQQZ;r?&HLS@1gSd4GO&jUe;kTKTe&q=5Brh*`k|uw}R*Fnunmir6R<_KDB307V zQIria%&iX4My!KsPN+hYpN5-*_Gv`!V?E%hQ_~T*XilxKJcK&97O6gZU#|;GX9J0I z)pLbb3coez{av#NBa8t;Tvn7hArn6CL7-oPFbs~0cVS>U;+08|5RDzH+TXPl zHdfb?I7m`9{*bxtn0bQUSLblFpoIdnPE!QC?71R7y>3gkJ}f;+^v2TaPKfPeQcPIx z6cEs6m~>E5EGkQPD@RiaC__tRrtKFaTq-6i9XKyRk2;2b)rs$QSk9?_!tvsNZFi$A z$idoq^q5VCB2Fg>U%#%K#f;sw;m+R1v#x1mctkbK)K0SoLoE^!hqK4S`HK#SWEB^H zppIQ|jL@^S5LBvXAvyF=`1Q_Yup1yLqAw&R5DDIOptiKss38_4Ogto;A;nf%za&v^ zkR5#f68&$PRNR4q4WH(^#U9PWxJvUuEh{9H&y*xTm(*ZF_*YZOiO3TTmNXD$(-US% zc^M~ifQjT^kR?QC_7?7S^CaxPOoCXPYnU?2A9TriDk4?Uv<~WB3Biyqxdl5>-1Erh|GlD|1ZTca+ zs#8R45`I@;0XZZFW_HfAs9K)#2Drkj`komIIcI(t0kuFAU#1fZ^!V{`slqD!F%JAJNnR!9}I2~%p2ZO8(`L19B~ zHd3=0FI(d+_kpi)%fZQ+5_rXYs;2zJb-IQtghDM&H(EN^FJJLNx`dDL@<~Dl*Xq zasg37k%Nwl{n`v%TlmSfU#t}6hZgxhtcPR+v;kOsC8s8Q;WX9`T&H?E1Ba3{P}K1t z=hW!rir3iCnH{!vWH060aH$P5=otrHV3_j z>9HZ+QpVNH?V2~M@J5b0>Qu0@QA^42UCs|yK0~C-`wz@0V*JJ`rb}Im@ zr1i9oNxCffl!*$3A)}+x~1Y*@o)*}zW3TT5wjgP3fY>97?dk_4Cf&4%#myco@S z*&@Yj8tD3a*gkOwR_vnh0E!JIszBplXq%DC6dJC*kf0_uSD&jvdx#!6G zk696Yk4jBIG)Ekoj%{-Il<--O^8zgB^@^_J@b*oMh9)G3VmABQ=CCt~BzYaiVH1M5FP|cT*M@-uLnDdD|MXw>{=ffw z?ba>+-yW(X);N$Yk1iophgJCTzaNB-4?@QWq2q(l@uwZKo?2r; z_KqLU&pP{(Tfp-owKwCj^NUNoLz<72!E;{~X#&DSxUD#Brf1{R(eWGJ%5G^xC^|f* zj#{M~$QY1Dc-)swS&rB7{>^n9<9V+*Z7m`F!#dT4X;{5%op`pJ#i}nE*b~K+Y*4&0 z_X2l*JbxT;IOs$Bfln)+v2ZAmS7D{Zo?VtfqQO79$dv(MmL4V@W{^1_w?5gl5 zd+8m@_e*yuFTg(ZgW`XO69bMD!{<0wAa{!RhTx()xPVa)D~paL^Q=Euci>~<$;f+u zy&l}rUM;uG`cJ;@?)G<{4Z2@Fd(`h8bPu*4eJdpNOUUYEBunrOEe6JhHOGYvvkUk` z&Wqlj3;9V)&url7rd$;bu5}070ccX5&=c=ygwP~9br^5TeEF_fRfmJ_;OQZj`V)rt zZ4~aq=J8&-k|oQ_1i4%>WKGG!09U=okcKDQW;D5wpTDwWRKohKZ@GY;ofnpI=$w6$ zA(NLO(>!l+0&b2*I9bXClgdxPaviSg?gY2ax4Tcad%L?mUdZmZ?S{Gj)@PkV<0>9`QS$$`Up0{O6wMIDb|7Fl*sx|>Mb1-2cK%JFc< zmTh;xdvGX?7G^5P66F|NGNK~M3>q6y=!PUClVdj|9?${T56uwf0n78dU-3S})`{y! zaf!$o_femHTMIlEKcC`a_9gML(?8tb?S3nuFQRZlKxGjKS+x~mLoI^%nw~7WcLlOL zd$Zj1Z|^;JbPZb4)KG1RLCC>N-BG#PE!(Uy&Sjeax^GOX zz(~4O>}jGY%|^9KF%vY3C5vqu_I;2ndL8OpI+4q-FvQ`}=*&H-+I9&UB!s;O{hgiO z6AY8g=Z2Hj4|-@nG$n_Ix1TH?Br!s=z;>$Mo#No6C3zglhPrb4E%W#Kp zMIc`u-Y5^C8LZKf`He{1$q6OFD5jT5AB1(0Zs3Qanf-*{bCI2Q0`-W1XqWA{+5k+5 zg^+pgVoYvCk4!N>Y*L(tk$p}vN%L-sGCs?B=gRod#qtvdV1+hYW@?VBtbt`$r)Hyk9$p=wP@ybc?aFGd{F zTt;HLCACx7h)N1%O_cuR2NX82Ktbq%_|811`p`(+!o<8&|+5D`F1!tWR>enSdx!V`~ap7oWVt5o28#2vB)lIUsVnU-_ z3oc-h$lRGY_UQyEpp7|XOU=>!5F}}CiQ>pO2ZJQTM%HB!d5$JOY)+vkn&70tcN&?( zEM?w;@NZ+elEs`FBe$J^Wn+@Eo;%~2Vxy;f3Zf=u5RsjG%eDrQkXCnm;xLX@vzSpg zg)!rWQ8J7qxHyHWQ#5)K3+YfCBx zoU?|rg)RpP-6!^2bMa=#Lq3D^v+Z(<)7Bkb4pYk#hB?~+f0BdO@$s|IGIIOMEXN7G z29qw@{=rP-`^Z`Rp5_o2q|rkNIh234`SXTtk^YHH-#g`X4tqh7dyCwO(mOXBCINKsi3MESxj<#w9?v^wZL-ut?@vtD(fMip^?`%(AF zSG}DYQ5)^*Qa3WD{5%2fxvO zGJc~EL>tiV%ehT+2_&BdB}_J2SmGSI=Y<9I?7yf8?qNf=mT7wtyY9NZz(eR!7QLOG zx4->rI=p-_K1Q-?XwD}{dV%9@?t!~YgYAOXkP_P89#AuL-CVfYpuL$OJ+v2r6^t>k zu*r8G!;f=v(Oy*KjoMv&ZKKc1?qaN?g>&_M1oZ8Up^}*`1VPFj;E)C5=^3&jw{;JH z8mOpeod*&*zbn6%DgDE;MIR!k;&o-A!9O(!+WVG5hx0d!Mk8gO_8$)~U=mwE@pIa8 zIs^V2I`nX~(%trrLP^}tqIU-)`07SDyo;w7v#U!khS7I`4)Av*?+Yo<#SAzIxnW^xh_ zkyuc-(v=drRWW73Si!TwZ`m|l$d8y!bALLKteW>b_uSw6gke_4P?=LArw%^!WLX+u zpqA)yq-mL)kN;tahG=yjo-hL^W)mKXFk;e!3ig#F%p6?=aZw!-ctU~u*MI#NZluLQ zir(zZ3j|PO#;9*bM-Qfx*Hk~mVFq`*@QBW9$1l+#%>yz{M+pP`cul3GqlT9NCWIcM zcd8?6R)g9vFJWFFWtjtlVEJ?irNSG!}E-{4R@e3%BuMgOhki=XU0(G^z!Eb{v z3vZ8B$(iZKos+Eh_ozRobDQN1@CyoD*AK9$?G6M8P7QTEK4-jL6MhiW`2hUJpPEVR zeD+*YeI!MB9@CO?`okOXkb%LZTA9Bd4PO!|D{2HAoGE_JXt%-nUG7MU6b33s82~2)|NJ=&CQ64B9pV}H zpP(iL5Mn41<+_?m6#~rT>DlOqF$SRt55Tz*`6>Qk4qfh_G#k;W238{JA(#uIDG!DL z>+4{!DafM&a-d&JA+5?W0Llo+J}y>KZDgM(=VTOREfR}57EdJ*e-Jw%63_xJY>2G8Um99`-; zx9iHsfFpf4RF{pDE7;I0DnOkyO+7Xpzal9V zscn0=*M0JA@5!@$+}(m3B*ottbSG$p-)0N_1$>$pkwd^(7J4L%zz(TZ62lej-n#H) z(Sn7~Ml#Fr%?FCN|K>MHoCY&1@}R9(e>435xqBD3wvsDt^smUwb7Em*u$@j$(rI-f zgJ>%ah7ZYc`^)shBS6@S0Wp$jo9W4aKkvIPb=kYN5N>y7=8&`{?Om5ut5&UAwQhAi z(r@3x8)M=6xUjmZ~_38K@nh9*L577;>og-W400OblUBD`YT}5=Xu)otgNXRE#`6a&L<_S)+ zPe8>i0*j!3;V!->v|nFcOt9M#hAT2?<_m|BIdOR8b=Sh*DP{4BTR6;~gByGt&Ccdw zg$PVoPzLWAc3!SEk;0_jCkkL9)WDh@hDStb{sMw(0+Dv~NqCJ&B(muW#%W!F`;_FS z1ph{hl%TL?MHZAcvgzO2DiXl3`(m#*INm$h2KDy;F9S=Q=ZMu*@-67*7FMXp2-mzM zNa7uEzX3nwRz={0%{$$N-9+>k@8;mnYyH zaQUIHIAvqC&fx*Pft*2th)$+(w}1iZN@cl)Bn9VprP@Y3?)P6E@8j~W{xM=8UL3qQ z_~951Nc+6>3xN=nW}B;ae`u=u`?|QoQTg>&!ZctoiW?Vp2o4EWO>w#8{+0TSF4 z1Af&MLlV>z)Cm3A^W}ixHlLeIaG^3RgaQF>BSC{_0BuA^3Pks)*9AiN|b$koSfspc!6u*>9K5oP0)(4W0>!>ILr!Gr z+|E?(0bW1(IJ$n~Wq}Cp+pB@K-#vod*E`ckvGSS{LuZRMagGPPMbi=wkEP^UV_& z%r_?skiaRg!{F|Y0|U*@Yv>=54Qs;FB^4~oQb@7l_=X5wPgW)cewrXxc5VMdx&GutKr}dsig^Him;Q(;&OCd!I+%jxKRZJi4evy&u_8C!q=D> z_K8gg!|hWyXB9Z<8o_!J`AKmT8wNZy#iIiAb>CsX=nwb1hxxe6hpnbz8=)wPh`T5b zC6YUKbU6`00<#NI&ZuTHP|e5jLkXgrN(gxlAo}lb_x4Ylpd+P*KMqJ8&WtFJ9 zYgwn1xp%psoX?Xkv4j~20J(ypFJ7e0XB#ZMDW34-fe;iQ;09Pc-R*Aojt6fC*l0Ie z@?{!JY@FDl4vvn^ z>G+r)$mEt!KmGBKPoMtrkM&-=6f0C|>JlpjcWM`~w@Ye!M}plmmjhzELeRY0ngkY! zK5x1m#=8ZLqlfa58W-3nT(Au3>P=)24-mcH5AaMsViAg`zoiUAIEuIzU<n!TgOOOJ^|a2_|fX3s)rsJnvlgcdmd6ggO7j*03Sn=R(t4v&r}h6*^wlV1?hIs{({sof*owfKf_|T;4L=~a zpbr-!d7p`#){JXMZ&`+GdA{E;n- z+WzKRg7H^t{*K0b``tcI6j+6VUHLZ=nXtK1lOszaECnNYUn=5vH1Y&&etxs{GI~c{ zgXwZA2Y6j8$MtxsB0o{h_TPWBT5?~|V0eV|DdZ+UEBrEuR%=bPH#n=TZLGbYoZ-xf zFYe=mui`MyPbwMKHuAa}K83fG%<&N2|@|zpKkge8g-~30k4-b?(qjAfWl5(;?=>-#&!w)Iqf_U-$iu*Idx@d z`upD{RGOTYQ^r_V4mw&Av%ps1`QadTLlY<+wZRAkao2o_k?0xgEv%_ z1PKiwTwKznTa7O4T*ZI10jUg#re$!7Qx>(|Qq9rJm%<=OUJ&Xg*HqMTb-qemf!oon3D1OAgyVNs+@MgS| zggITNWcDnjD+-+f6%;9zm*TgX5QymX*aW+RtW$-JkgDlRPEgQ|!oHPG6yzWtr~)KP z*?t-#O>wN9mK%uhtIpiaRDc0cNQX$q@DNDmoLC9wafB!r5&sEMY|(K-NtLQn(fR=i zmvT!H#W}ZwDq%cIk3xC?3WUPV92i0eVl;VAEMUEGH3L`YW2EQ7xbc+*RefrW<|7u^ z<`(6Hai_{^LUbsZTG;+^G*;9tZ8q_HY$D* z2>BZG%7!tNZNgzS!v|;(4XT-5iJr?xvnqf)Rn~!@6!YD}wh3>!IB`8UIBAOpOf?S{ zrE@ZmT%z`+;r&=s+K-Gj8SD^HgT;=ZHkP_GgxG7T! z=r%&m{Ng(~Iz%p@3j!|=cHRn$LyNo?FW}s`b+!|7y8JlhE%NwrE`N0jPvH+hQx;(F z8RU#XYXDuO*1&v!G2Cp9s=fnmly|850?cwmyARMZ`JW54(}07GX#oBcv{6sb z&w+O(oUM@eS4l)E&s$?VC-1gNJDtiT>WWMYa+30*5pVU<5=EIc907Hz*lHc|(j@Ey z!jx$x=C*a;;@i|?Wuu}vbzK{9u>TV9D`&ge9v8Nup4mig=WXg34(lp zN3dMOM`tm74`uNgil#rMMdp!FV1+$~BGjxR^oF&dvxAQWOqG?UHAS;F{eN!8v^7Zu z`5qg`o+VaPJhP ze9~B~CvmFoKBJL~bN?AeOVU9iD;#?IPk zdKQ-H1wzweE8IEQ$K;5K(~MbJ117q&C?dK;Rlhij&p|65?Cm4sO5v-447QWvbTi5L z7MinW6gTj5fXX?oqZ^Gk?m_}9^_b;Cno$`=Y~I*#nQI8#P!m<0-Doxn5IO7MTs^rE z+pXEAO9PgSHC6aDK!7!f zQHB>00VR2hUF6i*!}bWFbPM*AOoO#961!NQ**I4|ZO$yu=r29o>E(;jx+jq9(ghHT zL7#RUJ3jWA+;iR$Ri}4KB-w)2^<55Q_c5p#q(n+bQD=ijicpr%C^?9RPo$I*m9X&Z zet&0aZ59ao%N|vgSa6)W3gdBQAe{?f6#9OQWE^!pA-J{ZB+dG-M;Oi&Cyu0}wOb!p zT}UzE4Z?v?2<{3{H{hm85tpO-)R7Yulc;bCz5X2fUhTH53YC7fq#j(8J~O<b6A_mogfC={Q1?0AP=cE#4yLpDVwVBFJW7SRlE<8JRT9m z)&;_YOJkHf6HgePY9XP!uIu_{#$%pq3NWD(y5GWP3{T$Hcdz@(>Bh5c3XG$3YkM(0 zyG>-DA@Gb#vg~GihYYJ03>9G6!6tA|P79qmG?YIuLf>YTDUojIPa>olOH)ID)oUq@ z-;bf_K_@&TNk?s5y97Hd5BTUseN>1*3g($V7W85a6@ahdT0rGob!h0BZouZNLSP}W z+#vWD2ShmJ@>phuB8NC`3_P%l6e?2ZAal-%ptG~B8K~; zv}*fhJgltLHpkVRZO@p*i2+7zOojdzZ z$iz>=*04?ZRtQxERvYhJPV{z=JW=$CusWYL<$l8R#NkVY0uhImsxyRQ+Y&7Xv4FeI zU^I`I3`CnCk*irr%VxJq2|oPjV4u=BnglMf@l5`cYlD1%=NnV3K=KFSsOk^e8|cL@ z#^;bG1iw&7V^FGc5%0QnweN!vGFngZD+8{&y95g3EvX#8Q`%NbgH%X2Pg<|wzV&sh zUv~}x1)j11;!D0d92XdU;3tG@~w ziUBkzAd%pRDpO!_M>br5v0~3BpUBC@Q=UF7Lg0ZJ! zLPr$miuMJ`eiVRI^hJuvwj(ws&{P^!2onXTdFXO-YYlMz)g73Z>IH1AzrFK(snRKVp+iVezUu@fzBH-e))j#QF^hyL*5bbV_0GC-2_FhwQy5%PF5&Yi8dNe(NstjzF4e zOh$)@-g)@%PalSnI3iVq$7_`wWjq;i*es}UUaKw}zrM?A1)2tW{s!ktoItd$sQ1-f z+(8f&`dlWNdlQ14UFMn_rC6jaL>s%<-fM7$0%6CpK(pAcKRsJc6wd0~3- z`WhRuz^1L?Tv0K56J*!mh+`Pqn@9>CVSwN`WDpsB5IlA{gz-Jhk~lAzJm4_a;PRRT zrg39nEz%OUyRcw~6h!kCYhx4<)sFZ-L9_>Fvz-N5UlsTe-IS>vKmjJ-Ze--F;@8^s z4GcSHYruulMN1n8`;}9`+VvEu#d}p_xo{_4g6_4aL>0yBd~!h~g@2nN8>*&g7=uiI zkj51gWJ!XUeTYIhiGjOhIs(a^RG}LPqcCeQE0seTaJ)a6pKgjYk9z?D*~ALDRf1H_p}CNF95@JMa&O@t_}6)U%rY zxqQGtNw5!7jlmG2S-ifH_(pDPowdo?+P985&O_^~+9>7PdG6UV&|CvgEX)zb@ByJl zvzvwj6(KWUL)n*{Dl@``Icl44wNNtpt5tSs`;2YAB|ISMZ z&kGYA zx>=0hgF}46fFQQSqUu3dp?C@)Ds)Gj8L=rX!{#aCJzaPFg-)%b(3U_rHO@P^=Md2y z-OsGF<@cJufmAE{+Aci13Kgw57#^M3<1AJgbvCJ*nSorAl{`;_6v+(8*p+FQz>(Kw zMV#JoW7@Syk*PP7t!I(J-7gK!!38I=aQYpZyNE1VSLch=cQKuQxViR%swFTueik5! zF{~rWLNGeELA|zfnt<;Lg8|c)8vEHPV_=wsY3~vhc%-bY$TK<^tc=IB}bKI zI7-aFwzj;0oO{6T;G6^7tjuU7BVh>?dJ z0%PbdkV+q|hZ%I|`{w{{XH0%~g0k?CB93&}LG>(t`f!~Qmw&vK>3ZfNqu$c*CHMo) zb!A5Mv9=WI{N4u(ZZ?C;3uD&G*lwx(>iV z#u1Cg-f?1ahWIsl8sc|#9tFQ0KXy#q!JZ(`Cm5%_Q|T?kP$HO9rdeX!Hp zXnp@;M^3niC^(G53qbakUj?T;R#I;_10k7Z&;u3tnmz_u8&s>H4rVaKvnn%fkZwT0 z@Y@T)1QRKlGGD`v95eQKwhFMqqKRbCwI?Vz3m?w{i3 z2H>de0w~b2;{=avHm=y#cn)UYmnipOOC!S(x+L(#ruww;m%Os168Nd<9HFc&ug$f%y$c1yXoeQoA7ekWd;+nIH))qt>(EUw<;vl=vf=OEnI#)JGy1eP|D} z)=RJ;J}0|G3V>^BOyQFTl?u+1Yww@KQ&^IsXdlTdL$xl7O%!yTVUTc@%(Vgn1SY{N z$rKYCI(*2U@X1gqlxy?_sfip9>mD3IG(Px27zwu{RREVWKY`^_8L>44mpA&$EB&ae zq~J6l(E)x#fYA&mAq{9^O=ygTJOiseGgcCSP^Az|gfN<*H|+7dm^fuvS!-zLX0AzL zh5ca?lqIt%#!$i51r{5?8wT_w)In5WsI=?D(^Ch$rF>*d!;iM+kjyTCQKcW@acULH zplQ2OK)cn_>*9;T$>V|)%m#3T8#&7U0_5T3ub3%FT2#*!t7bNjn-fOgnNXwYz0b~e0ZZFX5eApW2T41r6ocU* z|AIjNpu+&9^d*OBFFW?RxtQ)DNM^PTCPZg-!36&KC%no*jZv!N3vZl})7wzlfgalH zj-M&fY=Wf3*m?a@uRVq$gtb5^<(9gFzktL~d0f&7>iFh{O)i zv2_)?@^2i}d=s~|I1V=0JGXlF6CSb{qp7sAd?eDXNNqf>Fq4v0Ha}CLV#=nOq^3YU zYQ4C1T@?JSWz;NYRbhER`VkmqP+NVr)jTixHL~VJR}R#npx;80u|NY0Gzw>oK)?=! z(XPG?9&84Laz-nfk(X8wMG;mzcjzSbkBtn=s&%P5%ip35EqhTPams=yLbkEGvqXPc? z76JGW@@QTVE0Vh5fvrck8Buj(4Zs>iyH~dJ4WvH3)`UmVL?Zk7)#=3zj8gO_C%gQO z?l3b13h?KjAl3j!Sgr2a4Fv%6=y1I%V77xOd`18jk}=rH?d&Ug_*wNLCK*>O1UEN6 zX{0GMKt|EycyFD9Y5N;I_Oo(ITs9qfH7l=$n^vt%g=>qrQjwGdzC1X{2z$X`z+5mB zqDRJF8_Wq|4RKUFvqRp2WRBDw65t)mxhe`L-`Fn9ChW_^mDbwzdpLePLEdv{@ILFd*N4Zq?2KhM9h-{UZ_}p(P zv>wKl396tHsY*kpo-4$`hJ&!-j$x=`BM|$E4GCZYM*~fB-&7vx`RXEag2?OLR>@0o z_Wk(w6}Ld*TJ}PdVG@*5+`&c(xfBGPz|h#>HkX=^WSo~qs;q3Rg8)__&hUhQ3XvLc zfSp~X?_4u(w)-&J8Ln9|MV@f&~93j2V<7a_>=g@zGq|>AP zfSG%!JiUT00F)=)8An!dxtJ-UK&--BxJ=JKOfriD(lYYL>S~z14+f@svY0 zB5Gsob&0=u>rn-1R_ztq`ep5A;!es0Aj0gAJ`Kg0elB{$*k_8Oqq;9W#h;{ZQm<)~ z3J9`|3QLeYR&w5H?4+*<6DX7#ou|UBQ_on$g`aWK%I!7m8Hk9be?L>;t*xi}EIVl1 zp%)rNDjsBU&u-`yfK3stay!CPXaqDb1lB5;F%y?zW8`k2hr&FDPdFNsbU4WJTpGp2`=0mzoTXMz`Osh$`MkbsE9W#U}Du6;`*2%IN29gJ!F*f#{ERg!kbnfqF z^C~=&AR4*~(8lf)DfBb>d}DY2%{+hG9a+mqrEI3M-3K>${jAez(tVrfw;hdD+ksOu zPmg)XPP_RacLx|jlV^t}4T_oRscEse&imoQR813>7>*{ek1(Mi85yK-No9hQXK=j2@uPB%)pn+1c4%MMh z$TheZw!^p0x5wQd`U59bHbuU>X(ZRN&nWomULwI=V%jV0K5e#;@DKp;5^NtvgFaIj zwCPimzaAiu)rG{Czg_zFhqeUTRw`dku?uJu;LhGazyTb-;fln#aEejBIZ@N1P6Zq@ zmjEXP+XQn=$;kZKXJ^al525YeE~m?3r~LCy;O}-d74O(W-@15~(98b8tAoK|cN^9L zA+6Q2^|1e~t*#iTa=ehG2)3vi4Tuz!i4KcUn+bB0cQL){?)L_NuRiVV|LFF!WXA5> z3T&eXuf9V|nZoRImk})vj-)h!(JugSXZO{Y7$=Q8XeZFYFMx=ap)b@Fj7?vtrN4EL zz6hF-{qak*123B|G_aS?&`_N??_9Kn{90A&-0L2F*IQ4S^L!g0^t4j zi-A|gou?+lItm;N&VWN4P=>=+dkAk8dho5&{G-+;2EnTFs+QLYYK9;u3=bm+*fp7~$@Gw>;;+8x@l#WYHbdE;<$?!?@6XcRKh38r z#*g@I*K(9I$=1b67Xua2cqX>%yH}`^iP#OYCI*&^xS8~AePxnKeH2jcLeqd_JrAVI zN6{p1vntp19o4fDxxJzSf5Sj+45{3lN?&k@s*I9bw%|Uo3Z?Vq{YY%O9F@&K4F={A zHeNvrgNVjwTR6Xdyjn7^U#RH}TUnbt9N0t={L-ACO;7o1sS*PkbfI=L?NF4Ve=T#o zShRw?J}}=w8*!Be+%lwRF0P)?p135?K#sV&F|EN8IAUUwWf8G7K28lOKziA^x90t% zB#;_-I$j`3;Bi$eA8^RpX}v^xSXoDa35Z<8GzP16(WGKcNi)TPYH`R^k*Hnb67gLM zxJ%~}LcCu?j3p7ZD9`{4ZqXo=wP;*5U^Sf?XFa^A+Ga4&Vs%*#+{G?EahR63VYF2u z>4gGiyZ0@pHdmD?u)xp#Qq#&4*4M!bD$ed1LkArWz zCWC?t3KeZ^5|I=j?GH4!(3t~;@qZ>;4XJ9mo-C;wIi&y?y=kaRh0YC7sftc-?SYP- zSMCP4J5z8--60zJ42J|?W2TEC0^DN4W`Vz7+aW<|6`a}7Oc27}E${?D_@%Nm?OoYf zfiH8nfuxV5p{4~WLBoS>7QJk`-aMa{oezgQ9n5x+^f_q?j-R=7hLNv(0bG1 zrO8`RWu$n+JvI;W!WwiQEaXr+Rc41G-4ta34W~WDlN=iCyQ636oWnHpfHS&>!yT34 z>*?AjpCuE25a2LK=WRoGtvIU)668eOgopMT*`}IYlUa84%H8-#{WjQTw7u|`1rGhx zF(_%&c|A!r9xTO?wSRJX>Nme>wSU@VXhD1Z+o#2G1;t3~^zypXZinCNKW&P?hEGDO zh+|LuV{fSD-TfSdL4B?NZbOVi`~xl3aBqTih#CYQrz`xb4!~>D4ei#8f-%R%=_UB7 z-tq0Ww(M|l*#3laUvc2x%Yo*xQgwqs-Ox9QXFg z=@cOuOamf2zaj%NfK_VQktj$6zd%Cpti)3U=>((;Ro%rqZojD+b8iu}7Kq#CfW&|M zEeY9gQ+wH7e}dn>t5mtpEhUYn!b$U?Blh4Vl33tLBRZlZczX?}%#VObjW$~Up$!Qf zXFhyY^DcfS5UJBxvX+YEgp>5Z5He{JzxaB%`-hEIe{k^R4}bXGAD=wS-2DDx>Loc8 zfbg?H&To)rkcnwlIu*F!pH8nuX@ps}-wu6B6$S`u6Le85l8|t+HJmGnY^2tB<)4Du z>Uo?4xqD@dF-zDXmn{&=|MDKkE|91!tN#Ublr7a?mxQoELx9%Ir=(3GJ^9JYG%`)7 z<>(MEYa!Xmd>2SnV#U#nNAs!}ofL^wN>vGUgJDXd#iT9K)g-wsWm-^ufFDcSDl{7_ zOx)+Ngo5iVfeGSR&LvyF&Tqm?onnj?U&OZ8dd@;M^R7un=J$vgMDemv zYJw+6AP+G_4i9z?5Z`fj3vYSEg=q^2%VtPk^cj(jnyd>$msu}u@|yR%gbPJV2Vf^7 z+`%OP7o%GWtEs($?!!azmKA5GBV_Vo3`=H5A~>mS2JWS`_bfvy@Z%N^Nth8VEQU47 zhtSAmuD~VY0c-Nlk5w#itL{U5Rwciql z_b|$omhio^hC7Y;-2YfzUiw-8=j=6$#k$|{ij!}@kq6(dJ(kbMYu{|?gKxIvb)|#I znAnyRduQz%e)UEG8QS5djwfD*Ez2V`EM+6)c8*|+FK!p(E~9Lc^$ATmBms4&jg>f5 zUjpUPE}-SDkKY@E^G2z&u&HtjVFBp9Y$vR$c>W2sGH;p2#l_)#(X+Bay8r`GbrLzw z@h1&~f-2(l!w?CBvN&dzh?tJwIA+2hHgFhM96II)roky{*dWuLBihoEle10!NqxGm ztT_5~)X798^An{Lkt=@r6sep;7;C-A@Hc$S)m?L?2|8+A{fm&c=z;!JFY$m8*5rOm}Xi78oC)@=>3iW8z zt=-HsM;5;)V!QilySKO3+err0qG<-*_%$T+?$w!^a$TocA6N*^i==)!pSwt=#@8SS z(3)B|(o#brN9fdgt4W^>A5~*e(gV*$O+tctso=I7DIb9OM@Im2eyzyC;qZsur{(ZaBx1 zprCE%X^-^jrv*1*MT+-(T9Vv8hDI)GycHbs(=02gL>$`9u$mrzY&Ey__+?^;wVYC| zmm{;@Nj>zutgZDrkr@JLz2%jB#+g_RihsYkfOc{ZQ`ch!v+G?U7y?K-6-6h}Bx(6s zHBtCb?QngKJ1EuOCaMghNH?`VLUWl5a;2#5NU9w|@KKtjI z2W-@OjeA1G;E&{1XiE~_!MO?1>%f=#J=myWik{&*N#)Y4=B-uMMr?-M$9zRZ%j>L+ zCGMI|0R$>vB0RL1PA7+nbF6_3TaJCp_w+XL9qd*ve5qNYYf~;?|Na%b#8ajn+lyENrpI= ztAQfrY!v|ViAk+-)isiwVJa(kdwP8X={z}#bCTi_%3JWEJnsC?@4)m|v2gsRVDbo5 zQCf!=dWV|74)ab4e|xXjeRX{B>iDqxUGLZ^H)Xi&8Phkqy17obM?TifQr!!j$sz;R z7m^eQUIXbHTaL~({W4io|H=&LH_fABVE6Uc>TZ`nE5U-U(^D< z@u)0HLqLMwokZ6>rTI{p<+((qm-Ba-va4vBN1?|Z0P}e5>$S)2<}RNExYi%9{rgp- z;TS>O2mO-$JyE1I*qiDI029V z7nBmLv5tL8rs{np7(A2Y8c1bH)^-Y*GRxaU#R%=8;#l_^* zL4$6Yi&=f18yE|C7f%i;BJDg?tytkitmQ?77g+~&ogtX7nX7NxX+J>oPNE&~g;`in zDR_;FWyg70!_T)|+Y?AK!l)7n+H3mfGTm#W4Kk3PY4(dk2%F2PMV`1mI*K3-%4e2# zZvY-rYT8v6&_Cf?iF|hV7^T5Xq@$%8`$~^j?&dtJcXV`cbliJ|j062w-)#_mE%{gf zStIqw4QK5!$ig{nM9||kGdz3^VUBurpl@HT|M$Qihs(hdd=Ls`W9YnL(s7S1p6Yz- zt8pho7PLhr8<4-1F2t##Y;4FlX?#=U4mW0?$uz{2qs1(Y5d1Tf4 z)P-Y83mXr$CTp^`3#e`A9Vjb{`wr&)S=7DOg&o+*pUewMeUbFvHQ{R12VOzO7Ogk* zq(Z}~OSi+y&pO`u^q0+Ljjon}PR5a!iWW2h|pz9;M8&%7=Pi?9X zb$d0xx3$NFB;5jizH4|RJom&iO%i$SR&thdlG<2nc z7@E+uIEn))_?pFbolP&@l?WI2@`&rFeMKq!n_Po%+3ISl3tz9n9xe=#=Vv5FbEBJh zmpLj!TM{;NcU)V_73c;7iyI>D)aZso%0sgDhfJhn4Hpg##i6EKn<0Y;SSkKsRV|I_ zW}>nNC^s+z8one-wJn=GIgIf;RT!cX<em?I`8B!wdk$FeGIIp z6zzT)9t5i7mu~!Vvu{*&5mcL`^6APLjo4mxl5?%sO184102=D!comsigv@802jGOQ z0e#l8u{1Ze_|cJ?uRV|IOmGi!S=`L7{`VMD8aelo3`9+KTqza4hV|pP^9Agme=!`~ z#Te;43`4#92ncCa+x$z;8>#$@@q}EmJezVd$OyBjLW3q_g2^hND>m7Fx(G;(*~F$V ziz_6D$4+ilNXl!%kmLha;;e6=N8@uSC2@U&jMQ<(3Bg^_2(jYEr-o2Y2mZ7ke+_L)b1Au`TK0m=C#p~k8E^u-i90ks+kA1+dLf~mkjKz;Qp9MTwBX@NT(wP=lP1A zjZbbS7m|Gn?)YQw+H&6*3FLvIosHnHe9+PQXNQ>U)F8(SrZj59UOD|pd9X#@R@SDp zyUNK$*J>QNv>%!(ZafW;MQrDjZ-_|eKD1A^)P4|@3ADXKSLcceHG$S5%gcrbD#Hi3 zJqsTQiGe3s7M~M(d=eX5rXo${Hr5xxf0y2ONYlF^SxSQ>bc<6V3J zxLifp5)l!k`tBX(O0#I{eNJfu6gZ`zIo(;nDfbb#f{0t-gt_H|#-@)uAQKFAB-$Rr$NW1u!y-rO-gM53Um?Cpscl&A z-=Q%IlV`X{+qDZ zMHqpg#R2d%%B25T=M+*pqPSDPgIF5Ce8CX_fJ3PdJMi* zA;DNRpKjn3BxLonxpsZRWZuhWJDpxTDQ0u0b5MYSpveIu-ENdyCD zf2>Toty|N?uo0BQy>@Vl!^K4AswCPtJf8t|JSfUVy?A>v#?^T6@kBg6^NOJa^Opt{ zoI`4Bkb~TnG5RWu!}f_-Y29_bp@XYkqG=CU3d=9_lFpDEwZfZD_|`N_-P46$)MSia zkDkJfWgd88BSssYSRj0J=6XBBjEM9snu^VdFj{nC1fvTcb$M_>A`F1{c-|fOcSbP+ zZlt_wyyE=`#Sr*%9xK1Kb$EeDOC47e;h9dDBNkV0xQO$nc1c(ph>7&& zW?jVy);>8G4;`Mpco#I*bpLF<9Q>P-(NPW>LFeUEwniIN1^n89}rQ1_h_>H7LOez9c&E45eY^F%KzCVxF(-)+ zik}q}2lOY;L2ic_FO}5|0mD1}!69JCR1lo3I{M4JqFyd%rwLRBvpli0kPAVUVlF#x z`8(yS9q1b&bcTX)h7!`U*(rJ?nk=QQ#oBQt(_6pYLmFBnE#@S*#+^FFI-iDOWsFO@ z=KDB0n64M06Mw2Q%0TOy+A{oHA8%g43*Ty1wKU95iJAMsSBy~`Q2n>j#SQeG3B5%4 zYj^-f?@kceg7X%tRF>E;UlkdJE?E&=4o~h_5BFU%2?9t}87TF|k}L?L0?LU&L^E|s z!yzHaW=MY}Svx4GWNH5)5448;;a)GXz$@9uY$#;jpVv}$XfUl4C}B8RRB|i%(D)*Z zjo4`z7$qo-3HmPw)<47X20;56saCoHF0vamnXP1lj7{Lxs<6SRN3LZ+m0)9oR;txL zfCbD9K!ag-_#yT{Ouc^lcc2ipdF< z2Oij%0%&p3npX&dWOZEXx1eJd)diLGNds11Ar|pJXYLwB&M{~kDePnonvYmKh4mlRRbw*8YfZ}HlM!<0;- zeUKZZ@eGc^O4}8_#Fmx{hh@N)+iFr6)9OjVk?m(6>QsQ5>9ZGxKbd>d5)W5 zA*f@GLg&q;qTE21KGiqQ?5a`e=ScAf^~ex4q_+MJEYVm8Pn)3#&z{u+67m&G$j|mJ zz(M@!+r8c~1i}6*rm0Mx>8*3lFWvj?qhzg*z1i=(8si;tu_@oMxXYxtA!0J>10QGf zJvbbqc`8XX&tYW@S4k*yWL=Jc%zRrL_D3FIsR%?)MY2m^%DxdJ`c(&%vWCcCce~p| z1aR;M+T-2set+*R>>+Y}jGt?U%i0WlpqO*&+e0QP&9>d1MG z-@=Z`UO-TAG7+tKp|?5p28)9|54*V{+xP9-r_p zXEN+g>0$XM($-!VzHX$1CMc<-Z6&R}=F5S56zOUF&Xtw0OTcI+;tI zCjoy0w9vn@%T(6aAEi)n4dpN;vOPN?2)cH^g?YaK1q)b-)^AcqC%oxFC(g1aVF1C^ zN|o9zjxYnA%Q}ahb#e^mzXYG;Nz2BffxH=z#o*Gt(`z+`=Q=tg$k3OaYlvm9JYjW*pl!4 zfNiD5=_-SNK%bQ=l58K%w}hhDX(g@EI1B~Spe8#_woc)$cJBO)Z8K~E=TyK|w_|Tm z_h2DqhNAOIoJ2$;=FZE^*+z6u?V9cb)lqTAYZ$VjHb`m#X372YetL1H<_wkA&Vip` z=N{5p!~gRxEl|#=wFU(}BsrSYrXOyu5vB=|#anC?@QCvunc=87heq-AeGuSm04^EH z6x|72T^e#Q+R^|AlG0K^0mdSkoKTPpYDzEfr6mjSKD&O{0|+1Y*D8pdO#T@@Y=!GH z{Wq?+`0YN^PcuH~4Va!$JAx}7VXlGHP6t~=TV7n8j;?uc7Um0c&Iu750V27PY&yf$ z7d#v@d%Iq}m?p=qP3W)Mof3fSQ6Vl7{%ycd^mczj-cs5NGF8ogKMlkU*u^Yg`E=%r z6k;-%Nm)r=!p*^ccW>`_yL&h|#^v=0VXU*vgodIj(8(wgPW)yhlz2VWSxC2a1MS9S zaU0TqBi{~_g5y$aBoO*YHHm3_Tf^>mnSP2cEMeUUb%o0bqZTW0oj^u<^5YHKWFGt! zuHfoPx59#0V{?_t(iv;Z7tX(WMSr9x7%TGhMPF|8rH9whK*E)(WrXW-bwr-&>m^14 z5ndz`pNEu!O0XVr5%9r{Bf>!9m7CX4U3{(iK%h^V8BZr+%cZt>bm-z-MgNLENPD7`yPY1!qn_# zC(@=aqR}Zl0QB}5^?}nx5P%nlH8$@n$v@qn#lewP9rUA-?)1V%XuC7|+foAA!u)Ls zax2ZUM`=+r-3Y9q$g;J3-|^H1kIM2*F`g~d=Jo6&ZJlzti(o*RuhMXwzl!)MwR|J_ zSx4=w)P^oaQo;$PLfXV(2GSj5T0mUf78fi0hLh2`YR9Pn}5|XI7cmRLb%;(*xl=I2jcbd@{{vV z%W^^;L~}wR0&lW*(%QC88nB#WIQ}x;$%cqFpDUaEd@1@%!kMl_hvIJdt%YO+2DQD= zR_pwHo9O^4F5xU^YEj|RwC$e0pIn?FjE?3-2HlP3^XcgXzHn!)*L_Gw<`>p>WuknVr%JMHo1pq4b1KqZ(%HX0HC1mf3P~KrGqw>PFfe{02P5ph{&$--YUZ&X@J6V2b>MklyNS(6f5mRF?%vC8-pD{NS zc!y-~X6&8_I7o;@SHl*(C2x{zrvj~AjL&gN6t3u8q&ZPP@kb~_-L?3$%^ULV;{uMD z16~-%pUCb8lIe}sW$wq5bFR#4f&BY#8;zdf_(+d*(r;cHAbHD%U_;204*NO6fdhr@Tu`{Wv zh0A1h0b}0q_IfNy9EeOQyt&sO43A&E-tQgtx07`QL+E%0k9>GoLikHTVm#W1F@gkd zYOk0Kc4v(9iuk;xm2fZcyYc?$I`C2;1M4i#z8Ba*=uPDnkS;fjpnBzvxbeXUb#k3S zcscqspo3ri&8bSV-g&@0Wr2=`_fUvQ5COH;_yV+uZ0Z$=8Kbl-l(U4i7}QXy$Va^6 z797M=4wLrzN0(f9fL3ede%97p0A9=wv&%{^BvnjD7dD3a8%)E=^u_d3bQelj; zV(`x$Z6Ec&d$~g6Rt%036bC3@KY8|)JNamKGQk}tNbSQ2Kar=$XYduI@@*b5&b6~W zy_n8AJH6fR>%HOeu=m68c>7@Q;7D;^7d2l(Q+t7<@Tj%dfAzhnT&cT7OSoW+agI13 zkXu01VCv;_+zqCqujQa-DXgAW_fQg_H-p3h=l5vk zr!i4iebFL4rs5JVYVP3eV$?9x^qG*4hM=tTa zzF~+;hRqg=)?&V3|2v2*Va|F_wxa0Lf0G^1A4g>lpTu9; zaonvo!fmr0DA?1(6!F*wZ%b&RW`VuIogUesP8aZS6cJW<-_gOr(D|aoKH;Rs;3zk= z8({-+-~9R09&lT<)IAm15#gv5G1ok8+LUc6w?L%$2$rHvg0aU!1}ncL}6VCQ_qSO9kQ zNO;TO_2J>c5jL2?K)D6=4g67ELBLL;a&dhDsWI2l6m&40p@e^z^e}0AO^O&cLzqPa z!;YCuPJP8qJtM|3?od_WS(ShJ-c(iPXql9n_#~k%zaN5+F;(ATV!0;@Ze@Oee^Jrd z)~j!OUA+|S#lg;7r1%Sw%&h9;mQ5Q{f{>V={%zycizlR2L{Uz!qAFl(D@7_93-4eM zwn*#<8f$wejl8Uuth8Dyl>>^h`_L|!PZ{yjY(-ekpo)t-;xz4?*Thzi66tH|M=Gyv z*T-6|yl}=`X2>j0$cUyp#EhN(QGzN?yg=!-cNvmxm{!Cj5UZ^gvtDUI7T$xyql4|< zU?8(`ynpyC@gXvQ-(Vx9L+sk;I?H zXv?M*E2v0!u=P;abhl91GA^9`rGJsc_%#0|l(hO3zQhVndPsI7%*?Lb!;r3J56TK4 zNr+a7Kta%sm0V&-hzJ+=&UvEk5NHzY3M2=aA%U0U=S)~bG)*oKDxPz3vXrT z)=Ejd#0t)`2sAITV(&eiLd#UiV#HnNyw1(}E+@tMll*-)Q8M;rqAvH?!XY5a{@epH z`I-ImFPDp*NoQ-nWS7*+`4SR&G++GQo-h2WanhUN0HwODS2l&ig$0U(#?I^873E0x1ay+ zcdInz=8azlP_dOez%jL!Fh;6z1Og8pqmbrC5PMb+E(TSTxm$ks}Anygis$`sYv{h#947&B%*yZCQm{F>G_^7dP|wI4hn* z$Cp8r&!(88n0%&anb`3L-D`pJd}Z3 z>6n#C*{QadGGR3VFn9faCCw2MLyH#)&3H`i$^E$sy9yUOiE0MADq{bZNAMd?iBx z`>kw78EoN4QLAk?r@}_4X{ax*+G|iRir#7g%@*B}B(|9vPx6P&RAF1$>e3X^Idg_> z;q=213^i1+wkhEx)2Gl|TS+WbH@Wf~7)4Ibia+x?+-asCsae%rnz&+9kVw~l@xWXtuId{lsSrj*`>sUx+H8LPM=b6c0 ze1&OBsg6K2OI0Y`yMm2a?qNzyU4m}BRNf0Z!JUt^m&%IAbNq2J;JYri+_iuRW#TU3XVcl>F53S$-ww?gCy$$xio z+Z1TS^&@s>IiZ+N%(KooZRom(`kENctRneh%*c%kGa*HpZagbbcUluyO^@!Ot|A5! z91}$L#a7CFv4kDF-!B%|h-shv)M4=zWaO8_;UVsg@BgjRqxTAmwidl_ZhGNiY3tKj z=JuChi|zTJ!Aed}r^6K?#Vu{aUQILNZ4yJ)paYt(KQG8nQ7DYz$~0Qwh+)-Y3iCfP zg?U;&{cgZJ0aG!U+XvFZ{7%Sld4hJ4eoepadGtdNzN9M7-@aTv^_sM}n9$ zBtio|GJMFj_4U>kETqx2<*-yglg2yA_svKvUo9bJww6dK)yDbT*Ql?N*f4Zkfex4S z(TqJVLWfzdx=#ZDtFV+W7)eWIO+iaY4_R?27*l0v@Gk+BZG|>q*Qad_J_AR#Q4Qsh zWt0l#CYQ)XrAxO{MDTmKlNWlolQHtY z%#bc2Tm#d(I&Zu!(p%cvf{Pmcwvh--+JJmGku)hqt)EwGAg4MN2x&H%V5&x5;?EZP9hFg-f%2pV#r*~ z%i~$*g-;@?x0A+Acv4vksL5JuB%1D-1)OmGmidTMJ`0Kt@!h2Zhow2;NnD&+Ja$Pu zU3j4rpxrQF01JJ`CeQ}A=GZ9JlSalsLx#(}G$XX$OU{mD!*VE~QaE%Urp zv~Qq^iY#{pr@15{ZSe&e0*mnos)}@+*Q5XVX6watv6x=sR8Ox}aS1&`WDm~)aFBB$ z2x&HAohNkZ0UbsMA?b^Teq6TZ`U9ON!NC|>9c27KP*~CmbL34fE_9+pWSII9$&0hu z=p%qoXO_kEI^Bn%A$bYcEhIppA)0uHOBDP{ujbGnNt4&=U`q`KNeT7QA-|)+1PU99 zr|stzmJHHKrUzZ2vf~H!uRsr1PwH(z9V78EaszEMD81zl%cY% z=2SgAI3xw3305z?UVogg4|RMimVR+C93Jdf6@|E$O4=`VuQf`BMPV$L*H}QBUe03A z_n^JWmuEJ{fCn6v8GY4&57uc0>R*DBS@dOKn3wuRdiE0L^gn;`Lid6(I8 zqJ^Cc;K6SHhu+TdoBq!5WlHtCP=;!R2a@7SfAL9McW564PQn-L2Z_9~aVItdTdd`B zFK&;fAMLt;z~_7bXwAY)&M(5?YdYr$5n*h{pX=TZ7>>0QT3HoZpI>hZAeDk;;uK<; z2!~5BUt@L*FxiOlqXDQ-o%ql+6m^My02e;0_DxpW5Qn|=<{E$+C9^1s*|r4r$l_MP zEh+M>)x<_rkj3vVmPN#1*C@24Lr4O1jj`G!X=Ni_|jjz^?mGN9tSb$Ha%6PQRVmln+r5sCFh zZh*-r7;;D&m};A0X$qDYUgC8HVS>s3vB5#`!Ih+xe5oFWjE*q~GUbLPq`cTox$cY1VY;` zLF4;IkshoX`)-P%B}Z)&32q6ehZKK%O0Tton%8r+uw6!d;Sl3^B#6dgGS!p8dI6Tx zN!64tC7xoRI{ijEz8GJ0wYysR{kKK! zqHHJxDjjZi($O~gub`2;o%!Ck!y$&TNl+6h!>B;x^_!NSzvpKSJO0vHyZ)|iD_)HC z>k3ihSS%FVS!Lj#H{hm$#=bN15n?eAjb6c}-@v3fFBABNr_$4Awn>C3pR-0jvIP+X z^g*fuF=Awqj2N9rp&AsOboTPsqSWobet&FE0*prqi^nFl-3Bcq_3WqLe)SaeOxw)q z`)~03kLTy-plPhvt*x(mPoF;dV6*DW;HdVMuPH1b)ie>R@Jn~kpD&tdGHUS3YG z;OohDo_w{lq-+mn!K*p>Z@1MxLi9~NjgSL%{>L1s^N|3xwIyH?7S0ct`HAM_OCj31 zu~Q>-aW{mRLA}Uff$NdMCZYeB&Jgm0Q>9oO5Z8&o^g1MTW0cS#WeqsWf_$)LK?>G< z7~Bw^egd-2;m(%nEErcL$6s37PuY7F`9Q6Y^f@zmr}%$9`u$m$fCj8bOukS|ZnU7+ z!qzZ3EsZ4fb^eD+U+1G|>}zXlDM|+jlG5{gt1UE;VYJ>ONz4rtY`6`lOI%$DR`%D? z^+>;ck8B*Ht9o57o;t5#i)1YgYm=}2PZnsIo$}QZcG}4Q*mSK~J}B_y$c|EgvK7x4 zjeW_+$zA4Q>tV9Z~b~b8%xE%718Y#YWPWZ zG3R@aS?Dnawqz2#J$@qJQGsEmCHTD&m1)5mczjTpKCe@sMt{SKwdwSi28&Fhc8PmP zc--JkB;>J~B=T*zrl4`3hryK};#30QT5Mo`11=kt9 zdxvY(BzYB-h$yDj)?tEqeI;5#SJ?gI24@Gzhm?O+*fwFS#;Sa1$z-$|?7?-UrTBP| zEnXr+6vlJ8PFph)5oM2Iu>Dq&89a$cLE|Qpa#NS09vjGNdB3D+P{E_gh$&u(NR03y zX{R(Kot#AI;)60h@C_y$aK-bxBV`%w$zY0R8 z0ja>47%m5LN+wBbic#Sm*$8Akh?^Y`u~djKD4MA;c%sF8s%D-QTVps6V40v4SOo4Y zowX#B4z3QyH)wk2ex`L)S-w)KO#UQaz*g*>T`6|2BkfY0?oK|9&y*jS;LM&kiYHML zgG~vS{k$=U7YoXwVq5n)ld_`Cq4coqT*|VM8u^Pr3y*!%QI__p;&zjrDsmzbjBa=? z8bvqT#GkLQ<(F)-^N&$at5x}La!$e5;$|keYVfEb3jL5QHx|g@L6g_eRzcBR7_b>8 zEhq|7X1%SuP_Q*s`>9n(4z8g- zQWoMy>yO_kKcWS+`R*`7AMbd4!@a?nz`E9r!L%O>d@Mn~&_xmXEF=@~z{Ztn5s2;D zi&jCM;)CO-b+-D>%}Ru!xJLs6kEO-Oj)e7ZmCT7S9R*6XguEt@eWV)!!(j zxh0)<(X!9NDrJP;6n#MjjE)5WP7dMz;=Agej5^A6SX?rdSYySlRLftSz{YixB?81Q zaw-vZ1XbeFB5ewnT4DtepA<4I3^#LPG=2qM-I6eTJ@gNshU}IFvn9mPeLyu(C-gs@X#Y)xO~Q%BvQHYOOEfi^qTK5BfvcG#Pd=h?Ayc z%kTiWxpNnyv36mU2%bIiqv~^z*v8RJ!8T5l=-tf_v5p@X(0eyJ) z|Jbf3AVr?i2a;#Cv_)Z|bUnjrERSSSCl|OaKobIPZD~VDemdVovPnq**jJCySO>aL z;vt8L&;%$n*(+&(I7JYFWcwAdM@ukaD-1U9Z~{=mcHS|52~0xH{17=Hw5v6W#E{`A z(ky!f91YWI2HB?@^1lkO&DA^yV7cB(l(4ktm0DO1L^JS1@UNH+Ra7zYX9Wc-0kUd? zMUg=mNyuedW+yg>>UA)k35yn%BHIw?EYz=n&x$J&K8yYfh+n$NvmO5`3xNIPi-1oe zqAI(a6h|sDBp|CZ8<3KqKH$BA&Fc2fn&{0XKCR z&*2dn?$2;X%tuMZt>-yos>5IlG@Rma{S95suz9iZ3JQdZ!GxC5?{XfrT1T9yl@{f_ zz>m|$_Bj|G<+r)BQ)$De4n*Ec7KN{;+$mB-ph}G}z0iwbpQhiKIb?U;1Ek>NO&KV;~FIwZRT zvz&x^N)djijsrqe5FeNV{)&!M2RPA)(>4w>=4s3`h}8AMnoJT(QIy~<8510-T5XV= z#!W=C-BJ`S6&;t=e9`2nry>nd_1)+?OIBtW95TRS*1MvC@~oD}*$VX#rom9E-yTk} zM&`w0SS!V8ziZ16lgi~OD1FfR>+8X=zl+kUjh@R4S)t3IPwG!5yP*K?{%)zBeoYn(>mu^8asTCs6QvJ$`&q6N)|3Vxb{ zOb|G88!e!CC?kWrI)&3xneW@J2qGiv_l-&m$tq)GiSE6|#v&pEJet~}!tXfJfb~v_ zbz#b+@f>-hi+8Y?FWz5MpVosG zPRu;msxBNlnPkS&`ut92uZQH}w0j1fq^g@a^C0CAr11t?%`Mf3RO{OZwi5acMqFM=Nay}N#~^; zB9OP>wf_N4`aix=Oc-AN^pCnHSzcLxDeRAF(r?B(i^g53)C{R=@=Yf}=`yPF7QRsD zNi&a|6y8lawU!UfxDz=m57e0D20E`}r+BdPfm^!??aP`dG+uA`lWL3WvjqU5z`<35 z5}K92Z-nO4<4$2ARw@T3l(0rqO`&q5FEkdr8u{!RLQMuu4Fa}qkES_CHe2Wn)V87p zPu)nP{XVjfmfuq7x)70OgXTh16Q|KQ>ctThAq7LLIG{3WNkWL2k3}HhKIH+HiK+u) z43r=YrlJQ%=o9t6vK+ZC3kn3|1g@4AhnMml>NkO zPbqpsao&3JadiD8)HkWde8M%GNU9YgU(~`-0L45*3?vH9gAQ`KGP!Qs@deePp_w_8 zxHG_T-ezD)O*J3x`rx6U>yuKr2gIqKpB!F0zql~z5VW!C?Llnp;N%~SghQ>)c$20P zcT+7aq_9D^PCHR{T~9j4X2kn~3U!I4(+3PHN^wUB{4c|R$QEb`G*M_QU(xxm2n`SS z5vOrI#`0lN#!3x}zwa@q4FVsV*+uX)=i*W>NB8x{r>WB@$IU`zNs4c1Fhld=nPon-v-Mf2umgWD{^UCW#|{ z6E+yz;jpM3p+0dhh1dEt`L-?hmHUA`HlZAG+rD& zTVG5O$);1SGyYfy^9a_5awU**t_7l){ONIQ=vzIK)g)ve6hD`p&b(Z5yz)o<#H4jE zByAnHInW|+8t1-k8F@h@+Ij@b1NX zQN-&(Z@+uk)HFE>ZOMU)h{{ZI;|L-!U>s3+6oZqsX4#Vy7Vj&FH`f=TCT;+!@vzi4 zVss(+Dfve%Th!7Z;0>+-!WmO}gC(kep>%W{aHygvQmqsZ0@XJ}m`X|5E1SIv(rS?9 zx_*F*b%g~9a_;YD-~(t_=Ing=2%4@=`MGf>*=Ayf3lMBh<|IjMN4{&Wu;uk}5BuS| z(cH3GD1wvN!LS{tlsiDCQi!1tf?(FAkN}ZN$k^luq#s#KuZoRwd_E|#{l1X0IGmTf z(pj2+qz0&jgq$4^@~;Q>EcM^Ki%`9H8iYhAW^H`-B+D6Xml_~iMVeh}bSV07rH;e& zOXf&s05szG5o1VSrUg$|n+&>DNfp$PjA~1e5`-g^h1h0M(yI;MVNL2`YiR{#OnQ1u z(Z=t~SDd$;Im7*1Nav^cxEx)}u?q$}9I)VDc-#6n@#u%ZuR1)I5My2&^vRS$a8QCR zZ+gLGk=VV?ahgLu7s&lw3KFzQe$6oWe~ZSuD(L*}0AhE+4hY;Waj;A4FB!Hq6p<+^ z6mLH=z&j>WMO{F|D~X+oxXQdGJ`d`&@5i^{MP03yLeB4fgON?NaBab;(@r0)XI)T- zTsWb%L0|59ctgqgGEyaw`LGn)+3HFs>6Ol6*S=$a06-sP&TPJqI;B7iWI0ecP zP}0rmJcH%fOd!%$%nt~ehCbsG+p$X1lJ`p{GqZqylxYo4)uK5NrNwOW?mhJG=X8^y z!b4V`P*Uy>oD5a><1k=MuWY2qkVhw9jjFA`{Y9Jfa_elFIX0|09;!7K2AkGwL3@Sf zk`!gAdW4$$r{dz&cQmoM57)?^j88| z!P;V1naZT#t)v!JweNf^TMo;~O5U<%{E`0jH0|i6rkuU(eaPcpgfX3=f@89;*t%O? zMhVGsFFJJ8oB14I?sji>pwdwl0V+3D1`4Ec0{i@U#&!Hzih>shM?1Zvrd3W(A3L}! zVBAp+&*<%o3DkXuvnjGyBlvlHua5-W$GE8Ruy-_kdkm%JvG$B>SHXSy=0hF(YJ$l5 zP7xo(aclzC{$iOe*UnH$1ZdFd6{Jaa! zx^q?$&)aI)1lvY~{2{_fcq-2GI%dyI)*wt-b(+D#_H5IjH8;0GUA?0X2mFq9upboA zuj;tA>cuupKZd*-vak8)-7OapziQiMy-(32%aGCl5Ihc|=Bz=Tw6)cBKf~huIW~C^ z4JE0teaT!^@lqomRa7Ol(L1o zQ8K?bGqF@v3rhty$$a{Lk0vbkFsRD4>#|qkUBi&Qxio(=s2HaQ6+(IT(Z-iFa3{<2 zQSCHeo&}@v@iyhA`bF8%154B&wZj;4WuQ0QQf1SXw9wYax)}U99`7StdZ7Ox_r5K zur&yUp-OS>n8{!c}ckjjKsInrYPz&Ig4OPe?@>uO$HQl z%Ae!wJ-{m8jvP9)16*G&8`y^Kx4nj08{J$iM88%d#>!}zk0Tq56MuqdZihSCETq2= zZ5u|N+KdYlJVi(WK3?2K;HW|oq!r4XPG)c=K&f={9WZ>ZItIu4>6D(y_rv`50nQ1f zi^&Oxj4-t7(@xEt;l>^{z%N5FngE`WJeRPg$sDCb@((SH+TY)Qw2U8k^!KlREY6)& zlq$?FOn2s|&E=fT;dqD(ej4dP+PwQ}5pasO^ekB@1ByaKaw!#MGS2YT(^JM48gf*I z8p#(<&*^*Es5X!)?B~)dNDAxMFb(BQY}N8B@As@|6NfHjGJfpzYgeu~5!BaIwP*S5 zO_h=+lq!VLEhRFq*}S{4#PYX-dLK=g^?K}{_mzHrSv;+Zqr1n`#HO5;-A!SJ6`B4{ z=c{`VrSEk-3Lb%V$~H*_0)LEfxf`x~67Kf*r$27kw`bwo^BPS1w-{70I8sBW7<-+p6v(mdUG zCW>`FKV@FvS?kk=<-tw?t$YVK_d&a(_<2D4vw-6G?D>z6o4G{g?Jm()DH?Ij0$oYRH*nx_;6U_*H$3n;>{S$;~(>TB{Jo65huZE^Xblwqf5y zfSc1-kDG3LEll1+rRRsxA*&+MGOvQTCs#j>E+%Jk=)bvO3Kn1jxm zYq>fPv#uE9m8-~|Ez;CR>nr&cNMZf!7Bc*~WVAs;^ETAyC!^C3o4uo>gQMf_aM*wG zde}SuTX*ku@3{X8pZy&v>1Rn4Il?8|6qSs$A;~P+#41M-$8U`|vIp4@BKkot02WYQ z#4;3B8fFLt0WX)6`JAS?hC(ky-UKFH7n=ge`m_c>} zXbDV{YcJ>T#EVoG1?^t)i}sKH*@l$?K_eSrBB60|Qyqs(*7*)=wb@pKi>P+fbb+K) zB)z9ptd#z$yWbo9U8`4Q>o8wJv?-LiCMFJ8a^iR&M6|Y^_ROc8)*s=TjNw2DOO(Kl zIDeN=i+0_7V(0#54#1;#%Cc)`^RcBf9-{2z3I+?LfN1tmW+`lgLQ&v4l1SegZa&Gg z)$9mwJ?P9!_*gR6HjCo2Yz0?1rw`v|$8-{mv{3Yj(_ped%nAGE5ry^oI~_sXG20!4 zYfbrTb1~hU!k#C`>eRsDeWGp$(V)qYNExeCTWS_}gvzI>Yg0?2`0UO_~ z*AoOoFd+(Xr(()8m2CK;^>FPmKOe6>+-wa3Q{|)i*Jky;Mr;}*PZ6%fD;ZCwpK$#n zgtIB!OU0?3w?RU)z(n4Nra?Hygqp)f#f3$}l^l`srJ4V#(?F1Ei~{LZ)LESZxrmds zX^l+I?$Jblr`~`p{Cl(^dvekY=}y}yE(Lv+su+^3IA{{(hOj&>*c>~|>3dmZ0J}o$ z;%=x5X!~Vv`}-FMKiD1V!X)*dZBGA->8IA|iQ2>LcWEX$iq)q=`t0qvKV=0t2jTRD z3M{vORj(cLQaRP|DMH&irzeqncuB$t-niQs!R7_6kXZ42%p^9fh?5POkYxV6QXLM- z#g~JT;QeKPXQ%h7j`h!hvM(H5K@|8Z(tyL5Fj9ZC97s4~_xExblOYUyKMWgR9(D(V zH;^y$0_>I^F1wR4MB&A`>BPb#T?z&CF3w2|d*ky(_v-A3jyAnB=(w+7;hnrgQteu5 z3?CrzN&ZHzuN3c)RTqWV(5|4DpEIi@a>@nhHbd2XT3It$mfldkYr*Gd^egqcJ3B`O z%+v`lFv=7VyI=#S0R$W!?;afOcZW@oa0?Tf;#$GUO*Rny-l@Ff-jx)+2NN(53L_%e z#9h*DS)las@pEzBi4(P+RNa)=u{fRc_Ts#uQ?|46`eR}KIky0LrifVJvW*0aB|X+B zkj<8#+O8#cW*vOE$F|ekKODY2_`U%Q4!UiPI;yD^&)H=Yxe#2oU=0)u13aBK3ka;w zzXX$V6T!jvn5r!GxR%TRP4rRC0Ep)6vmv-E#-lt}^`|8s0fCl&YVH!X`X)N)|KDQR z6h&lY{6Z?x`?tB@{b8^7>N{L32tp~c5rMUO7jB#odA-xy?Y`a{9&>-#?f3R}jtT3^ zEK`AB;=-j2dVlnZzGMil;aHatHeq6xG?r=*H8=nPU5nL0Wr3CEQ(+5Ut8YNTWRZTs zAikCo=Db;3f5iR^qpiY4xJ3Pq~5OthbxOZ^$H8Cs`brcMe|d zy>-E_X*v{%+~64p(zvzPCxoKk;=De6D>HRxLD1R@GjE&RhrAh0f*-NHfJlSTg^RQK zaLRpBbFPwkS%Za%twX~uv14g2`IGfaS1=yki=<<#ZnRy#%V%f8<%PRS(T+7UQ@S(wzRPl zaVbiby1q8H{A<#fLQ*HPFx&zjNo8rhI+-n}s{VfWyWZC{dx^=(P)j2rboWe(GGW{( zY)H{G0%PJ2Je@t+KWshQd@5HBGaC)|GTIZbZa@Ha~Sfefo`jyY1ZG*5mR5Dt;;R3k`i?Do%4}n84z98-*?l(^#3LM1U7|ei?k( zDuN~7ej%Z0r$6Yv*o)e-lF$Tdqe$44O_XahU)Xkz93l4b9*4;8_I7VD_`dhHf+-m- z+e*)l{2d%gaQ$r2DGaokM4GdPxeGmoDjTC(G15G%s5L7f=EEnzlFNSXsj3|EI%CVr zVat2RL_2mJut zlayQMISis)^t~v}Z6hzz6>oO;tT&u~{K+iY&fvpM4*8p~NrMd-hX<8``EXCykS<*$ zl5a~A*_?>(U#{b-Z3U}PBM^p2E`n4E;BFLAD&^2g&Qp`M>7$**So<1~s+$p+U4wkj zDml^ENTiyib8`RO6yi6@ys2JnUGkFc9(y&`iz<0@RIddaXhSE2P zhV7tdRAB82I8Xp&E+h%oixy}z1Yz{9ki#1qX(qCPH5^wXf*4Q~F{g;83n7SXQkoC9 zmg{byg-5Lue7VH^rWDQ8tt6&4bSOMm633x>TUr@I%b>{X3*OC0$eIT09x35c8AZP$ zh0Q_NN}K*{EJ1ikV1ggj1_MBrY*OkmPjrAqP)gYYDL~+51)ypT+9I^J)F>M2V`cVb zm;x9`^9sSB;jO|XQmnavZoJCiwDzEyR+(msxBAO!3N+z#5%xx|sm z3*W$Y(S=+gM`^R25Kf_#%m4rNU&Rp$G=WdB{-Joc02C}la*3pQ38;({gr7GEdFE-c z)x|B&x6T3(#AKG3ITV}B0=T%DA=W|SF~dTaz+-Yb@FSqpx|1t29gjtjOI|$5oV5^d zUcxL{@?eaMx*>y0eBjZ|mE>~I(g|h_*^ld+6Zr3GMz`6`)t%-47vj{19k)+^;-CL) zSZn1P!aOFkIdq;OH%uhvl=FJ~{#g+kR#>@p2=XWKSNvuaS!EQ;8XCj`hUIXjJeiIE z<7P6$_70r|HbD`>JQbTJK$db~Zs6s%ZB+w!A~M9wH0(cxy}6+~Z#doTj~p^_uEZoL zAmB!!5j`S`-DUcrqjnOL*~ykd1s+-(DzWiGK4ael90)P)i6|2X8*&-TBQKfK11aZ! z)ZR*fs?d_-y@HD{7`_`@BUJ#~K1=3GT=S*FnL*Y^);a`YBmRPi99~k^4~IQDlhVSbl7DjQ=ftA@vUJ0j zrJRANAe*EIT;kFLy->V(SO)hZ4$2wbvl%sP<#Fiftip8>dtHDaPG-|&y}rg7#vEnWK!eCJ2< zYxv3!;qQycQ&nYE0ezS)+k!Mrpei#mGBPqUGBP5vdN-ND!2@Y|)WXLN(#6od9rN<| z;H}IH!zckh`6GKTeK6tf98p0hlpX#~_lG<3(h~-ROFgj^hstBm`XIp!c*j1Hst1>$ z!HuO22Y46xiTNOy275=FITt26FgJp7CLDw^VDxlYpCQw>` zKoOsyzXZY@VM}AyB+>)M4cPXAP#BH$u+!N^1t=E7`FVDM4+c&9p^>G;%)LyB{#cg5g<{Ae;QOMP4aV?D((!SUDAS+^~tD6ek?% zNV=c&-#p0&16azFWKnpyZX`jQ^>v6|vo)t;X20&p&fLFCI}A54iTvA0&BS}wPBcp? zdM#_$j{KV(X}+bE^=iE1mtD=elPZ{*u!&YU62V|r<}as{`@1abl}|QeG^hOCaWI0p zl|+iIin6E`vf_HT)5P^`48qSVu@5Jk;u3qEPCu$(vUNjQFm{kUCxLhg!z0!VY1nHD z$L2hzxP6J-YO)$=N&>DIGEQFKVEe(x3?oqS`F57Ugkf()Md7GrDT0K)j$)CVqC_oD z9?Jy332CBaSrCKIBS}hv#%V#_a{;*+Ws}4VjP`Ru=;?kY0CPejQWoj5oQtGWuu4V{ zx0NHM{83uZBgE}ieL;_hQ$|z6m8Yt3 zQ%i&hp1ao!`ls@E_xk(Ijg6?FK%}=5_p~$!mI3&?*D~A8^&-9DT+VX_&~GkyhlZ=m zZ9Ug|_%Sd8rw#z&G_W z@RM{3cJw=(SxGvxeMkqH=XOi`F#$ljX-bHt3oxn#RI569iM5FP-kq!>wU0Z{oE$2~ zl&BQs`_jfR)^Vo}Ad~`cc`>H^wbj_Glzxx-$I$PlVevYaEN) ztwe6>U5;?U(1r0E_q#EG$z+~cBK081^RpijN^Eeo$O5~2aRblo2A%RNlbZ|v-MPd+ z9t!K4H;u^+b3WnVU%vS=u!Y0i4^I#nm`2|lI#L@uy1#88vH1m7TWqLC+1p@0siS1k zl#3i6`Tp`(xQjX`4oTZqfTUnp$ALe%+EIlduzN7pd#Ne5}w9}jF~N|;yL z2#p`OL6LdpWlhtD&Ja@ZChJgbIe;vwkwx$&T;mZZjtH?qE9T1vHBKItR4y@qyx`Uz zop@L`gIUo9xfTKbB@jy0@YF5X@|T>>rzDHMQ>#IK2u zlWP3c)rXq}?Uk}iM%|=*U4(}kb&;@E0{;_o5oa_v%xmWZT`w>;m=e02#l>&#M%psQ z`Z`w;92O0xA|m>@mt&{*0lv|@M=Vt96cg}n)GXM?6vF^Bi! zsCkRKUE#PKHN$C>uVA-ErE|Cj;8tlIti%yF`}ir(H5y1P28Y9v`Jxb+lN%d*)S>_~ z>l!*Dx>_z@m69oS2xzINe>uDN+CR3Mr)s$=nbsarqPT~YZx>>DSrl0|x&Xr5J(9+x z$TGAL@HwkWeD>*B73{5)O#D|hFGzvNP6#)W6XETUaBRzKcX^U^5!z!8_`l?$&#))06H2f=Pm{!4aIstJweBM^2fS z7d+yJA!*2n$B^`LoF{Z!)r%lk;2H|4%6;*4c%$wp>^Kvp^Y4FAlJq!(k?2IKKyt<_ zQbr|i+~nAY<6uUvNGIWzl#OE(2e}efrdn}e-q7wfM0yVBUl=ccbpdM@X%Y@Y0blud znJ|tQ4%$aQFyG0pB;0`uM9FGUN+wb=&@zQK`7OU{_xcjNwNSIK;N}g7gpzd5@qtR6 z&Jaz0u)1EuSdeA*_<6NSlNFViBs2%3e6E^3uEduu+HziWnRY|}m7)HmNV5=%yAE|n zg4A5dS)M|Xw>^uG!!n|Le={q~qXvrotwjqyUbNtoMGHP%wBWOBL6V(jEE}%^mpA^L zao#7)H7b*HmT(TcK*@~`v%@Q;jFl`tobf@E-JjaBaJ3%-q9C%M!6HzL9{!ox5FMlA zc=xRi$#a_EOnu>Lp@-OF@~q`}+p_nAi(l_&!Sy#9z!qiWF?1VMLd}@)=0A>dIqgZdyHJs@D0E)PKCS~RJ;VtB?!-U`jYzCmqgB3prSMOH|9yO<3NMoNi(n68L9vddlwuRPJi$6;vV567 zHdFZ{**HHSE}IIR!L4k~;TKb(47aZ%oSKmgE}ztkuY=x6gvilVu-T5VT(sn2>*yrT zolB40{mlW~o^SFlJ%M@9L_<78hE60!?Vp|;F9WlN6K&xRi+V-ur9l!8xu7JnTc>qK~rs4UG6lx}9szKM)kfeqB`D&_77eBY59 zVPQNyz#dyNfuFX?K5eKH-QLe6c^{cye|fmF^3XIGXDfDNa&vMAd$e$>@KYFlVp|m3 zA3E&pLk4V~bs|1KmSM4`gJu0L$eE$yJM$h+?)s}WoN<6{ER39+V{PBL=jia--QmT7 zAxEL^9o0iPU>LD9ee^I&^cw2jO4K-Oe4VL#(2h%T zr?-g=}%iLXK=b%VmrI-@o#Cg4p?9i<9 zH7l;-$WshL`K0?0I?GN|eCCP}7{Rqf4$T#uqn}*(BSR&tHKl0com~^)q!P4V2-`s; zvqeK?_HYCUS1CCllW&W|v#uk-w(B#X#jyidid~EN@9{_8LZY-Z?B}|j@{-a*_FwEg zFL52zl^L_W>9_nab@jWUjBw^n*pky7ejVyM%ii`P(5Q$k+c(e3>${2P#u3J<0* zmBHT~A?b+u%lBS@cbLqW-0=~M5#^>2v0m%8U+(t{$H@T2zAf;?rsdDmacw3J^m;tH zvW?GL1^J)jj9;p~*?Dhxc2_#Z3#L!T;s=plU2A4BL@KfrTBu{a6~w zQppKtLty?+88|q>b_F}Lz0d2tc8(B|Vl}M1cGT(i_iI`-2UB57EB&#&I-6DU2K3jh z9{gl{qkvY@MGKf`(a}yW8jfqHh6PyCXSD+&T-%6$wx84YaBd~%MBu&I@A*b@I$~NW+lGA|^{E-T z#Dc8!MY`S$@076&%D-QyFZ+@GKU-V6F9!p-k>VCgnUL}$&wcfJnzW|wck}G1>+2{B z2^lQ8Duj}LX1mnSyMxhe2-p4`hM^X7Jr(i41N;7YkDhZ9eiXO@lx(=vCkMF~8MS01 z88fqn)YH~furI5cNgjWsQ0|`g_uGvhj*ww9r%y`AV97HbT&(y$?l{g3jbSH@!7#Z9 zT&J@wup~bV&d4t!>2i@Mly8cs|2Hb$di|dcawOX_R?ha}%eZ(9^UjJmuURu^-W@$e zcqs{e+|B90o%eyuv%M`QWTKR79cFtRE!gXKJ4X@nL<=|fQmM2_j%dk7ry1#Yv}mt> z7&)7b7X4v2BJ86jU)3X`G+MIJjxC~K`b$kDd!ExA?r=R8JVig9-rWT1%k zB1*j7_M%+YJFFk%m@|dSScAlMbU1}0x9-f`KHhBIRkP0#y~~IW-h-4Sgs{DaBFG9W z$B<0aDBe*HnUWQ(-eBlQ%+oDyVmxg1_dCtS%eRgidhcLd&0S2ou&c`uES7MeF!(Xz zmWlP$&gsPM7Z@qIIx9X@U$xy{>!8)hIe;=I@!R{GIfHW+WsF1I&(l7Z5T&TBf$^Zt zc##?W-;wraj-V^%)|3=$v%BH>2&cEWArdCecku6K!c960Bi@fufQSY{paZuj8V@1) zb7qJ%!WjqC^>!qW8$x4{Hru4Srb%IlQyJU~Azisc!mHU3O*2z6+%s^YXZ!?23~o}z zI;Al;#-d~p-D?5=McLkIERW2_Ly{Z&TZx>ihRw$(0$I~<+2O2wHu;<#JHZ7gQN5;l z^5x*Jn&$%`RcyOnAGdwT)5s$&sawPWMz^q%Yb)OpVD{HRPjV({seL8@;iRSQTHdxK zt~;9fBz(H~bSiV21b&MJm6?Ln!P_FlhzMnv?M;!^nB$S4lOfN^A%Lwh8m+IBeV&}e z4<{^V{d|Gc`&y$SQo@&yrQi<;q%ts%lj61}ks?KRTrDb47P+j!_9~z}CuGs(4Yo?0 zXO~$#5e)jW+c}A-!)$|e2+*=3^<#96UZfFefK5->l$w7U$b&xYa77Kw`-ad;5 z2+O>IB&xzT4DY$au|W+byeX}DkJ@Qf*XR%`ZZE8FU+KF*yQ zB*u~rF}qNtA$gp`%pBf4!IeL4Wu9lEU*da$v`8!P&tR7WvM(ytSS`*Ce6tL$=?eyz z#I@|gL88M?9NC=Zm--K{3-Rn&wkKhazs3@2`QKPTb2uvAxl$#<0vGR;udG9uRY#&r zf&kr;Wv48@gk-ONR%{7|y5KgWfB|e8?)7yIMZx_=dSxW6s?N748JogejXZ?hv5ShM zWmd4i#ic2__P2Y4$ESAHMF9!_!SYz{#FCO{fLsQ(J`;+@(OdfXLZk}l$*5?%B<9P@ zIg6!TN2G4fKu}81WFut`vGKj3!CZbB_nPF}yiE$>aM;;CcQ*1RzR)kSNpf&f$mKO3 zmj!YjvLpYlZ;3Ni8`l{z8rfuRyJdhk5*-YtxL;^Gn2r!$aWQ&3!c#gEh!x@N1I!DT z2)}^e)tj+;DM(r&WJfqdcR#Qw;&5<(2rL0eevg}YnA~YrskSc(92cg*haQ(kj$mdG zea|I5VIwT-j1y<~qnml<{*K;Re0hlje1j{IVMgx3Tlz`B{(vNYxHpLIV4BuwHNIt7 zig6>BVvg)mF!r;YAGLz^BL-|Xwj9T&(|n8kFI%|c>=N%~6nEJfWcvy1Wq`4VZZ{X+ zX27r-pPjO9EUNpKtQw!aXeM;7!^$pV*IffB4ZLo_L+G_42m=vzMD+n$UGe5ViaC~hEose z3oj1BZ_MT4h(ZFX`*HIV?}h*>VuFNw6Apcug$3plT-L|S1N0VM2%Wc@M*>0p=Wo(P z6XF>4;&N~c!L>NM)f;&kpLje>IrB+J!*L##>5QAPiK1P1kqOJ_zW6i?qbTfK0ten8@na>$sfMR3ZrN`U6 zjB8wsxkxZqMKmJ~6pNJ=vJitN{F3#$u)pt!Z^Rlmp{LDOqtmVPgy-}GaT8rcy0@ab zL6o#fEOPX-C1iImBe$b;#%XZ-hpZMCE!%7zdKkJYik&#)Qs2;3}y0Bt_HBz<;^xI8M_AZ|&9^XvI^bT|L}LBfUB zWsN*~6lJ0%XxC@z_-HdrX@+(;0tZ_hjrWFE;=P;P&8+oWFA+b6m>fx0AH_T>la}cY z^W6W|-I3h-U#B}v%Kuw;M=k16Jpcd6%aNNaBTARJFrJo!yZTd4G1 zsFb`{7(QrkN0WQz2}b(s-0W^k+i&hBckVzv&w62imN^Z_g-+b*Z0URx39hs&=07L7 zmZ8H}OV(hs0=U8b0u|Ha#h>kG?MH%hjANB#vw)l%fj@myR` z+e-9~7{RtAMAfG<5A^3o(wGtP^lFUd)0_UbkX0aBGpY~yMc+=4ls zvlSCd95V1{OVF@bU42xPVVMJ;7cp#+UvtU!YTPr@jZgxb*CdC-(aB+}+iv8nsASSq z{Idf)yFa7tWPDZK%nJ!(^$2g8d;prINjVg$(oI;WRKOwAaK^(X=nN)jfMn{hY^rU; zESStNqGszT)0NI4+fBHsFb}CuX%ZJ-@mWBYvr*Nt>?k5E0^t$c9g%4KWQBufc%YmQ zGpo>6$`dwnA}WdDoFg;D9g_e=xc{veuo(fMcnVrOpS&lg<$C7R6y0~Ts zG5Q)u9Ruh#b`>1zKP*o*C=v{D(8C|ta-;dPFl?PzZ-nu zLd8QHT%i&jIj2m^hSB{Bm4DZf+1dhPE}{K%6Y5~bXHWn=Aq&+V(q_-k2~}QS4@V(y zJBmxw!Yzr2BKRumE~ErK!`a!R==d&ufrzj?jiRh4(FPYeHw>??$&Nu3?7u?HB8~%5 zN-Ys$7BMwPLH=e@SJBoH2p1I;a*CL1v*Jp%%p#B2QXq6G-oidk9(M$3mq;?&*GXc!Qm2 znFcQuXm`d}Qpun|Kh5XFU{a8&r%cW*%SzTQIL@|4h5yQ7C62}3Ar6Z+D{+z_8{qU> zcz`|=V>**n2KV@Wjg=a%T(opC@?=NNkA5Ok0o6}?8N|gI)yKnDthp}7=SN% z=kon9zPOW=mNhWK$-tIA)CHc`eM(@9_lGPP=w;+VQKTIu0(xNsaWIQ;0tRghn}tL; zSdkX(R(Vq1#DE1b%Z-vGCA~?ItfxnZlEcCLdJR9S%y}q5eW#7i;cjQQ^W!O^jt_g{ zHEMA-_XibBK!H7YpM)J^sN2BWVg1Kwb0wfz+vAL+LTsp}ofy1d)-PY8_f~6$7Tosb z3NBFK4vE}AId$ZKNA^zGEePzcdU#B$lAwzl(*|4!?NbLJcMew{rh0GV2Uk}g zaFB8dNe1L6T|YoDdV^D@!NLj#$)XW8ONAq>FuEK<6`JM6v?@;NT$3IFiC?Fa@X>UUl=;g*s3U(%->!!8ciYhX$! zhTX}#U|TP75f!LM*cXe&E6&dSZiQ<#-5up1`+}Fl!LuZCptb)9)Rv62182GHGhP``Fz z2)etk@E-Xwls9TxE2W~?wg|ivs|(lGDj$NxZpo2{MHW&Ejep~2#l=hH*Z;=@y`MLP zWxqRLB4u0`&@Eig^9e<%!-=ZGzkoQ>!fM@0!9 z1$d^MT5SLMmwMQl*q}LJ%lZxPN@C=qQ3m{FL>wb!j5 zwpQgZ!JN>qA-7BCHPS+hggTW1r*y_VdYPA5%Ob7W#tdC{^q1Mq;uLbI4+0Vt3@$+y zPF)gHh_kbUQt<-|IMF?AC6E7S*)Kc#gKU;R@NAx+ z{0S{@ab+qj(jN=E&4Nlt$AB}#e&%rz2eLLlmKMK)7QcQ^7AhKi#7Fmj7Fz#esrBpP z)Z$#6VZWP*e2DQ_(9F-j7EB}Ug8r-2pZ&}R>{yhK1M6x{FhHX2ml#J6JvjwriGU{LoL2IuceIZ$3e<_(@1rn5`! zYabo8x~HnO^iCmK7a~5$)`prqRk|_AwklmHsVw4L&o!6Ts~W9?gWhqy0Zn4HR_F>L zG{tBzm=sgwn+2D6oo!TCRrk}{77C7c^+8Dwi&ts(|4wJ_r}Y20-fS-3f78&S{kO~d zm)Ik62rRrWxKAWlCzZeOUXidlhp}n<4fcy{&1??~S0giqwVb~t%*a;4k7+Tojvkxk zB&QwQ{u1pKPXvoqd8y(O`EN@^wcX05Ze@2vU#Le1M+thT`|v`9snMm~YjbVoPJXM*yReEb8j(lhNF@Rp$%<5 z1A;7aCG{Z+8cdp#VC}M_U=G1TN}z!*h%5v&cP1|FzLg^qDD?%M3t;@)<~Uh;@{)R>hg(}i_e7ZnJTYF#J&}-t8kx!CnpkQA#knKuU$s!C74Bf8 z+_^wVg~25~YjFC()i@_BNfgy35;&w=Bbk$V4sy;JIVX|@mrBd<=*y*LSYiynQpSZC z5$Rj6IThq+t$>QDl3#?3rI{3BC@(?Cyd()mQrc7orNWZsN4JBkA#xBf@4=2N&qb>N z_%l%fBB`=Jm|cr($P=`v6qmIrXls%M-REUklVrk_V75m&(uHu)71tNH-C3tj!L=-u*a;Zil-ofbN7tMANPec(F{rzZ?hj`I1oInBI zU^cl$e3nF~prLg_9tA_Mb1J~ zQsjjkSE$dNe;#2&0ywAmGy)GQrXmO<+g+)fsbj7zI2VUk^#g>O|84+N=zL;OP=|!O z>F6!IWGZhbBY4nU{CYo|3tY)^Ler_huJM~~GL-KkHow_x|A^yfy*^5UtfbO6^f(k? z8A)gs8V)UOCr+XoKbD+D)G!0>9OjBY4#OUZYkvCnl48xXZXQGKjjrzDa9$zny}KSD z;77S}a7X{7>4+p^0E>E&tJko4tLw#n@_e>R1FZ1vy}c(gHgEm<|92*#KWJV!MUF)6faCQ7P9nSBkaDGxq>Gw%y;Amr5vX?yu z#~e8O7QPhL2+#<*!+3$SF=B|HJEj&#y~NQ$E?V*9NSx@xzXP(sO=x~{pwO!U^gwWt z!=!lRBto7CDEme{qZo3rsJ_k$v5;ptKyhBN9C0;b5L!p?rmh^2m+U}ecLB?nj5D)) z!eea?_4Di=&TDq~BvT+#{2?7En*#L=Bm(LK$!g0F$Epp8!!6+^!qnbtYWaixD(A$` zfyL3{@t1&&@RqcfQ8DkMY?Q_{!bBm{m=+>kv>YcpDt0_Kl2*r2kP23v-*CVjy;RKG zk>>1+5LFAAv9Tk%_X+xf50bvkHejAlY0IWJVW?zhPR4XBcWv_ZwV`rhU`I(b7sTo#MBhz zpvpa3@)V2!s8;pPr?^6!$2dPm&v6ja%aV}I30G6eY-?AbHOYBB0b4`v+;pxE)HC-KGb?EXr$EJSiAWI+yU2`|{qt?fWX;CM#6lcWZ8oTflccb(Zu!1Acu!7vM(| zSQ(iTy8^)Qr^rc#Xcu=x2)sP~n+YRu^40E1q=Ib=*V2#vle7xZj~Cgd)!o%)8@j|9RuPO-XydVYfwy z1Z2D|Zpp)X1ID@?Oc{1@CGixSqQf%0LsZ(q)mmjMSrL_HNbx(q2&+BT4Zp8esh;4* zV>{VT*3KFD&M%ZyeDrhfP{`<;`XRYW#p(*%nP>w8Usqt`UD*)h{ zAP&{c?pKby9=-pbvD-)+$}BB%Os42&?SjT)K&zf^mt##G$oiCB(V|EB4af z`RG8(O^|R4N?I_3Ys#d zoe^e@KD4!pxXUt;yt+{E8*xwc5_SzSPVySd!5p#s4DPyw2)(eTw4^vQhJ}5KKcQ1q zSvcqgi-c`BX%^BVlxJi|M+Ccv_~>Q;XK|v)+VDTXMYHP4&F~UeI)R)Te%IP;U~nvQNR0$KQm zmkKF|dxdz1so`AB6%mTb)j$9Bq=y~JPv3d2iz4ENF)%8dE`&_N)#-lBYgKrADzf{C z#Z)S1?KTmS!pS${4GOOErwWvmOz`mji{(jX+!4D_tEeme*O}z6K+`(MqI`~rb1*TZ zmYL4;$z35&dQL;vm*Dra36hiCE(lr)nhQNLU4M(|9Lyq>0!|JjCXohrXD3Wu*QYU* z2PE6V1tZrJNwi^BEiATXLF2*;wGod#mJup zjLuRG(Qbz}6zNJhk3iLw_(!D*y08N{l4B26$JvlT60N*=>!Nm(sO2H>RVKQ+I(u~rkUQfdiyTY^QfxhiM6h4>;I1cQKK zAH~0BZ5p3J`e2$3D%eg?jKL8^bnm1HNRiN#4QYt;U!1*BFEvM99-gag`oUGyzfDa$ zJ(k1f8$!b9RH6*5)aTVx+1rDGfvaVR9%DYx?Vlo0CY$pE4QJS0|a?H$N>X$gPnktu}O)v;YD7yerDdYA;!K+iU~u_npqtj z70`ijjo?pf8yXLOJyLp$;BZE%gIq@^`we%t!>RvdPjDsLE55pQ>h6O zAjLUgp>QMYThrNLm=Imu32|Rb%#g&JV48Sf!L}|@*iYQM_o52Y7=5hFWb)M+iHM0{ zZfTp1kZcSa^jYQGt&MNVbNcn}{kO^$#2lZnp{0@E3YKj%%Lx;L9yd_lB3j%vl~o8> zpq*9*LTp0VcIkI2StYaBudfs0qfOtYc267+43GMEA-0s8sQW!cwIm%(b0^pn1aFS8 zt($RbNe&sq!LEZ#G-fy{h47V-mK56|D6P2R6h2N$CW z93PMk5*FecxOX8}ud~(J&4f|~x0Q-*7&`^ACIS$Eatoo}+LbrBWY~1k(MQ!d#N^4! zH3mi$`c^c1B@Vi`j(9=E_+oU3f>y?sIT9LrNqZ z^zhNyfD_2@pgnxKgPsbu!}~aQ+)r0jCanszU7CqQz?Y!2RX;yWE2hg?}C=d)sf&6eWId6|ICvm%pl~h`W&daoW5g;K2 z(hJI8Ca;O9jFNH`bYux5@)(lqZZZ=l<+O&cq25+}%{~60(!|uFMUJRdCTG9WZIc0|#I9avxTIznML{mJ^j0ucV1;>rXffUYL}Nqu~d0}#ss9!AIsdRC;+HqeBeMlDiDOTuuhpWxL>^m~= zLuABX(9CQ=dW2f|^YHpl_~LSXA&X>41xgKmt{L_p7JB468HXFp1p?3k=Qn_0AlmBg-^2-LhV-S}oFteqim9EzL{ z_pgzD4{4CG*XiDmB?oT;S0yHt`k-&q`*E}k%bxQ{`~EJ?B^JySjv=F)i(|-k6oImc zVPXb<=mWR*+I4syjjymCJc1sDjW~jBhe%{U#bqp3$FR`wH#zA4KYiY7a(%b~v5_=j@7KB&X8w`%Zr$*-9qSopfOuJVwRqL>ZL}Z2hCfp#$I-XWp zz0SJIHj~}5Tr{{ScON40rG|F=>sWfcuCs|E09H0%*dYfg+a> zd5PuDNCj1WkT?zPS+@l)n6p@mNSI*`4ztUbi_J3$pRXQq21~TjDib!V{}>NBX?j- zLS-bo>4=c6d*J!R^GF(u5IPSIXA?ENIG{=rAvace&}@MiG&=(KHk3EJH(ikJsFhl# z%Mi3yF;ssmdEkTTou*5ayadgq%8b#fLh=0}Z)SSJhs)C65}pE2xlP+jHU*qr!EbhO zN(A#cv;_Oi`CwQ6RH2WRTW5$7Kj;octOJ61chcW`w2cW!Sh!~=xxHi^-xK~S?d-xl zVwuBT8z!_(_ZQNaXOeDtw#y84BMZSii*-0rm-|`D7FRJ>t`_vv(bP~vm52-ra^}{| zgBM&&zw4VB^8@0FRULxHZOs!Vp_72H8Q;gPeqo zizke9CYs`Oc{0Uhsc~QVW;nd#mV6E+oI6KzSDxLBn?=OBa~UMS_{QD?=g#5u5gJzX z*9CQxgBqEmg;mToB-qnRkMzXVc8Bx_Qff7?XqIvKx_n^dAB$f?T>#4XrQu=N&biiT z0%jR)1#h%6 zBd}ZfX+woi5Qm8x!=3dBwWlPR-eKHuL-w!&zfdKqE$MoK5gy*T3GfPAD^Th!w{5Qx z7&U`~xJ9exbCDT0HIr_L_IPo&VIy>46BeVd61V<1(lkq`QnF|7!KgMT^Ah2GWhW!&PuT1-ems$|HA{B9hGCXIDl9Tk>p$F!Vm1Tw=M--cV$UgJCLOJS+nk6sQ3MR5G zU4=Z51AH@aH5mK-Xg0TkU!@>N3{s<^#89%S)?+~tkx=-RbEQEpJO)z4LG}_ZkjA`l zFp$VI;&=}kS~Awz0r^WnE2s#V0yB3aXHPqn7G?`&k6>YAPZy7EqB1ZQ{Rkp@l#(g0 z?2&GYW=*UbX2cT+nxmC@7Cno4rj2j_=eS}Fr@SdjK;6weOZVh~ek>PKfpvRnEZPXi zS6#$K;hG9C%4HOyI=apMuAbP*(te4tx#p6O`)x*&sQ`}$(6wOXt5C&68v+{1{(-mELQ!8)&0dgVzHb6^E-jad0awCHi!Fe+L(T zH(e{Egd}2letI9E4c)H6cDRPfn(_Q*TwQrRn2zBb^zCXo(sqy?fr@LCYCltff;!CRY_o$8X#~r$>j_T5hmRzQeO5v&ea# zVM%^CP%;?#hfi8i*GmgD)-cN{DDIKa*B+cD?`O(vQ0bV$Zmrj^_fLAK-Bz>RZ8iF> zW@=F;kdPbr8=nN+)ZrN4dm;suLqoQbEFoW6&rxzG>B3^5m_LC{s%}pF<*F39!1f#m z0dKJA%4szY&v2AMZ(0}*;npN2kcI$d7{j^Bqjj9{VV?`uaNYp+bP?+@me@dMaQ&4$ zX+nS?+r*Mm$(l8J(K#JwDtaCjNFpP2Mvxt(3qMhrEg$)A;;WJWb$^gL*SXU zxOL%B2@fkD(!D4&6iXM^(%=Bjemg)W7)&fROORt3HZNHyv~j8ign*M3I&NQzpQLgl z4975aoOTXQ8Is>aw?D32K!v^?z)Zb@>nLHD7~I@l5AcgFdH$Ea!^!wy?B3a5NOv@} zCT(xb2LEZJH2F|7!k&}9wNi^d;LJ2Mt86@aVQ6N@&&CMH@$YsH>qnYV1Q(3pLYr1^ z=i>@+YV$w+NB(_<-|`=Sy^=ThS6=-{Y_(NK--Xac_#bYFt!{4Awl->yH!8#V`I=Gw z9s4bXe!q2O(8ryID?jQ#^6vqD%YXcJAaC%mylM#gg1>5D2_|p?&ppLTp4Pxd2!MF+ zBC4B}+E%Ud*ph?gy_89eC0moc z5H>H&P6Znq*J!HE6LO^l_(dA6BYX(vn0TWM3YNT5@zzg{5pmk6_ga_+a2Is#Cp(Q^ zA8;n*VK9Ilkr$Ks>S4c2P~eqG76ruidKd{B0EI3mo}V-_8}l$~*V_C){(Dt>RaukI zr=h2FP3Qy~JzfGq5gvI6jdXo7($I9v)WsqA%MiTi!@tM z)L>46Uc@L^vuc31r6k0qAC)CW_6ULr7(ERzN{lIn)VN^|6fc>P5?-A2cBek%W|>Fj zLGaa@ITS?SR*;{OVslJ#F@wawR{mo4_5`B{6wVM8l9)WG_a{(s~9LSSj(nMArNMK)~>0(3K(&SJo;kUaIl6Usm~RhA})Gl<+azwpd1y){IiC$k@g4bhed}5Beb7G^HS{u|QZp$io04KUyQFa7>4r*F z8rcR(B@a0?=t@|5@dB6WsC(q>{_=8!vk;!FQBM&OH%l%9i;6gcHZsaf2V^fWJ*uaW zNhqU~uIeQzL<;JA-6bo|@zB)cDd!>lTz1ly#DPBX7BMP+4?o&yrWufbvuz8N*x6QrVlsC=$l|j?1i9ts}`T< z-NEGO$3l;wx3KTwhs&NV#E6uSnG!5*OYA(QgwvG^9Fi%UTm@P4(?^K4F^6E!Nq8Re zv2P}yc5SBWt{TB8Nuf_NCRgUzn(%n#8XHD9vFe%pEqpJzfuzg`w*vmy&$Md(I7t=R zI@4gKG30(5y$dIi;B-KUnAkZe(q<2R67Hd8J*ln0P4yhRwe!&wj-vQ7Lz0iFY>h); zoO(uHx%{DSp>T-^!yylu0VU%Hmqy%$kx#)WfM~+3n#ztw0NVkZ*(`E7XR2M}tku3k zUfH3nz#$x_unUnUL-1qpN_jU%StZql>^RopufgL5Xl4*o}#~0fT8LXP^ zUZZTEokUBqs8sbjb&Hb>tB8Ovg;}HBZ5(i~R=5FA;-(YZkV}888WK`EeJRv>e>b{HI$@e%WUX$*s3OjOd`Os4)3S=*T*)i@b!Q3Itx`CnuP{I!NRvO)8W z$j|c$V8@K#X*r-e1HtSFFpm$}Ti$xmJN|2=oU{pdheWR&l&FE6ZXz!*vJ}Rd6gF1w_U;WT}luIVYI=O z3J&_{!qYT4#FF{Zm{e0t`Zz;EdIHX(5!Old59ERkX*q{hX)QJ9_ufN_-Q~xb?)7j~ zJiifAf?%yGxeU4l&ymA}Kih${A{t$woJzsAKH+>tl%|){!QJ)fd{#+hL?lG6w_wyZ zdR<-3r>Hqy5nxv-rI=uJ8BKDK?~XJCfx%1(!Bks^jNvQ$xuQd<=2Vr*mTE^-1L4-4 zK*D3*bA0!Z`GP(Wc4d z%$9%2QZ@Mp_W5VolW>VC%;K(VfWf|Xdj~Jf9OSRosC4{S;HZm1lES+5WGH;KMnW<= z>=!V`5Mpk7u3;x*z;nI}}Y&BD4>z>hrRUgq@ zLq}pb4bfKv*0DpRAs@N-*n2VI3U`{RGkbHD2^F5sasOqvb8@Ul;!wVEK!KPxpUv7BIFTSalZjNlNq@Yle6LxITUK%K2w; z?g5BWffqM)`Qypm{T+X2{4J!=4U{{=a9D4vuy3x!P~+A@Voy-YWxl#*5qd$eDVOiefI$#1jr&(JzuSCZES4U z@GlN+ar4ChJ9B6j7wh0!x#a?O$Q$0QGFz+EvG`t5&7aIsQrWlj3c=f#Y<%>+iRFmAy7L6ud>L)fE7JIxMh9^b3a{6hagx zm-Bb94g9f!_)Jk~=w>v-;S+D%pli6n@pf{-1gneGPpnX3TPkihm0+ zbU`pc!L)(hJ8K<)mPa_16`&$Jn40MJ4%Q!F%+`gLq%7+vi0f&H)E)}%8i|Hci`VJ! z^bcc$ zKz;xzXK!J6fzLafso*(Lg<};sojipghMRk)G|VF*K}D&!YRUK$_%O^}0B6x55=JRKnZPh3dc2I-yUFy;AGx-|s)tw%M3|%Z$|ZTsS0kkM_Gv;P7s?ju2l}}m5r^<&5cK!k2f|eC%wAu+OfDZp&K~j zLDC21HUQn&u$*^1n7(;8KXc=2w6#FE%)K?D$iM!oXl$;Pv%1V~5Pw@8BmK6>|V zZ6Y%Rdx=~2i}RSSN=ytf;z1IUlZ}vSf*B;~xTJjHB0MBj6rRtB3k+=KyO2o)J z4UYk0vVQ7aYJq^Z_PHUPkFe4sHz$@ZhzJ&ON!^4wk~a-e>LC#iV(5_#pOmp%MHaip zT_l4k-h#4_M9?7+(kIeDg0;-~z2xN)BaCfy1;c;2QZbZ55R;uqpe7WO_ZA_{C_zcu zcMp+7fk@rU309DBkW-f)O`MP>Cy3>@xQ@b6R^jZOb_`C=%4mN>L5W1br5>S31!?DJ z)F7iD#LT6tM1DdQT9>tzuqy2)cnrP7@vK2MVF9N>i5Cpe?%Rg7@n!wswAVU-S1aV) zPUX>K+1|GqoMuJ(i;C{x5!pQ?t%R0g|-jvm22w%uO z&G@;8^27H7u>jw}4v(LMpLc%2L9Q4H*Ubq5eB;1#_WCN*6nK1ft>X1jgz2mP^Rq85Y(H2>;o4!bldKZ?89j%P*Ddt#5&j5u}PdmK(tz z-FrkyftKG%ju;wVwMi_VsEgxZben|3_W252?n*)*tFQ$^*HZMU_JGSrD;y=>B2YBC zCr7yV^0?E5t1<_bzESJzICr=|=cKDZWxc1vM-hnKPV*-|mYcm)6qtbsj((Tq}=?;n#O}$-Yni$Z3RGbu^)vXPSQ-h*yMNz0vI){d5Qb zatgO>?Pjw}O<||RLTS&FU`g|MEmR2lvEpR!ch z0PH_wsWSTiu*-?FRYv|}7AhnDv79k%l@b4MgjGiSUj0zoETew!xK75{!jzFI_gbQJ z?Xm$S5uqc<42>x5Kx==49fVbJo1MeNYJnw5SB!zg&Y~K&2~-T$+s)#^!$sGfqnAXc zY?xm`fk!cnvn-l0)8o2~#ib1EV)R*8i~=f1%Y;)?L|+*{H2Z-5xQrc|WSYli{D7zt z%8K};Y%u#|j3;G-+23cWvZ>vdwNyM`;dMuM4?o(49cv$Q7Cylck}@W&bupTBcK-?` zl(nCmRTPSy8X;+AD3aaSoY%=?Pqrb7WbqHH5))*uz*!45RNcxcO2tqQTYVX3u!PQc zqUGG~AnF(^(8@p9A=` zjAfk77iCrNZ|EgvP^NJ!5OsG*aW@E5>l_cy zpdfu(CS`DO=0UU9B9A{cOr_iDCybGsVQayCioefX9>T&Xqky&4-DYkWs>%0EA5M_swTQOT1r=L#1A9ZW zAb9`kx};ja+x~$w{uu-pOOk#HPW16Or zgA3~loI_yC5inynvEl54IrxUS(&L!1irPWklo@OTr!iU&XandPl8|BgSj zt1=JU=oQlch_wk!gfkPG^~K~yTqKE+nuyeCeZu>Un7x_3AL`+l9!SF6g*ZNAooyOB zELRAUiwA31S@9D`M5L9^n8iZ^cMZHP56d|h3hb!V#~;RAHCrc)gA_pHE7-BvsUyRu zALWF4#UwzyMs^DL#nPyaKl9NXZn9FKwlX+7o8s93iEYOpZuw0UEaThR&E))z-0H|5 zEOn0K1O5R&;LpV+V^S|hZ}IPtRj)Vs&ldlA%zvKnpQrri8UA^5MjY<=ADnY*EB}H2 zu-@ zc`9F3)Y)EvV}--!hT-OyI6X%>D3Q>6T`7=#<@byMUc^9-b**lV$uVR5f@XHeFibsX zmM$`}*ZckMX#>)QszK47UJAmt4uesFg-S|U6}V_Em4bm4HCJtsf;EgdADpPNOr&_XIenY@5qDjlkN!l|C9jXIZOPeim=chTd zSV-V}0%;n$^!?u|9WE_bXvGv{d+qnVOn}3agMRy1&5-4*lpH3@h!xr_gULgRxTV9@gI^hk3--to%3@%3wR}=KV#q<&CBM?DSTbBlQ$@=q?TE!C zttq|GQYd8Yog5z4yIk5}DJ+57fZYfe!n17Y+}iK=k6V8`k+Z`>tDRy2X&_Uk(01qe zfEbhx76+CEF;?8AA`&bxczUG~ZcAczdxXO=aYe)C4qk<(YzalwzyhNm8t^7o+4}j$ zjN=z~R>k{T>ECXr3*ST_4x64L&TDAk%OV?Q?pKXf5qO$53OqtA$wYb-8vLZ>o~}tS z`IU6Mw_lf;@N5C5L5DaH&q{gbq}NjG(=*I)88hv!SIkSWGAa^`d?f`NtpgF0ZBc!n zmGTnHAJ>~rQ@(Wii!F$KE}i||lLIvxmCk;I>G8-&Y-yze04G^Znlykzp@~jLz1=fL zKMW@JjOup{|E|C^A%5s!K{pgj87ice2lVob*eWDeF>bA3y*6wxt+dTTPLFwe!w4JD zirpYrjM)ND;D5(Wu6+3px4B@$Tv-vrDZiXuN!$#-${rklx!vb)vgA6>qeV|CFERcymjB`(MkU&7K23w$-AcV-Tp!74PVJUdP5TOJe%@lUS0DfpANq}a}Hutx;gDLOtpa&^@{_yR3 zKEHcJkx84=3|%JTN>sLrhinLc)TVJJ@#;Yd_G<-c+KIsI8g~HU?>W3#FIWdIjA8^) zcsk;+lH9O2=P+K@;aCWYmCfv>o*5%!heS0n+N zorHaQ^e95wmcZt7prmi4O`BJ``68r)Y(VEw^wi}WNTSv2b3_5&`SX|tzW zuH}>rc}h$BX$+sqZpu)^oaZ?IKFV8u6A~DcMvZ#JzfGrCS7&FHzhejx=?b$G9yXaq zkAdS@rFnIMKi?({d;|>59XT*iWMMF34Ow5$A|fr7g27!?C=<8=vf4*|8hHK5Q%8pN zb?JdIun2@5fO%a%#?IvA5SOpQPa$!zjnP?OZym9%*Y?nbdEsffwyyJzdtE!y3e+kt zMEDr2ypy3|rB4HEm=wh!^(yfVn0IXc#kCh93@WF zakjzJ0^^x~JNOl6cW0D4?#gB}3TY?706XUs7(6pZE2&6_e1DgGjcZz{3g)m+!x8C>H+m{tU!G zg}mb28k6wMq_O4+5g-tm63P`35nS}_9xVag`$I^~cj*zuY3qhHQ z47#OF1uuZ47{Z`vl-5Fs9~+S5LL60Pi|B*xYZ-kkHZ)U98}9C0kAgK}%lm5e&!g3! z>yQ51FCRB++yAIO^50hpS)qdShhsTEukskgrto2 z*mqm6KCPlPo@;GMY*}$bXt1JjTi&1Bp+SrjZ>rU^U%fc!unhwV_X>7Vv7s%-4J%w? z;g^dcg9n3aNw`4FlG@?ncap;&LZ9}XXK-z!#Sd6?{&n9xEBb66Ks$>d-GrIqxA zU0PK;={<1+EWP7x1k2PgFVYms$jGUk7?_zvehXvie0+(Ib!pv8y7}@|TH)2x86jyn zmjxMf9OF4QIT(5ZBX1cS^LO6-JWr@|q33Y4ZFAnHEo5Yxk!W&!V2a?%@gOOaVyR~a zQh-TVfQSTgvq2D2_f>X@kx-}EV8m4Ubo%kDL%{i)oGmVgm0Wpgd?2CD>Qy&zV!`5) zq=z0zD55gIiGle6Jmn9v{V!`ArGz&SnG?ogt2H!V469 z9?j%C9$4kR>o(+7W(q{4dJ?Le>*D@{Ie=&f#Mxee3&jX?hKvtTqXrkF3I4)^;ubO+ z51iot}JO zwBxcpmxiKSL^pZNsMK-V8$%10;Q+0S`dPF^b4|E;g1witk(w$71VlWMKCn;M9AOGI-{wEix$TJ`>Pj86bw^ss2k4)W6tWX1vNB;}j8) z)(zjk*j;$<|3&PsLudHih4Ur(UHasO?oOpx>;@#DL@Ai?rdc{3(7#4;$;Jp4ViN@q z!D4U>%*p^`dJ@>A9P7%fjL`V`55J^Jh@(>h@BcIGP|P&6j(LKuo*2;lX3uQ{3BT0h zmr_IEq-PsQl1g0&W26#V8z~PCQ6ZlpwR&bqeVqGBEX9*#3q}JXm*tdDFN5rR<-9P! zluQ;0GWEQ-{(#?=gOK8>{YrOm{|>_P&{IG1T8=SsfJwYEySN69O&FS)|JH5eM1@R( zZr1y_;wT2U*+R2j1&b@ZkcG?N!LlH47pe5Hb{#c$f0DK%c$F&kMV*Rpg3BeX0~Lnz zDnZ=-5yK+gbI7YzElD=ldhDg&Ugf@JeNtUaDcmt%Lc(aQ1u@me6xASn*a@_}fMN2C z>xf-k#oaBB&d$S43K)xWvagO1=B?;aau_OS5L7S4w$5WwIVud*UL+d2Bub zn35$C|IB{VLYs(zP7=ekpFKlB#Rbn0iWK;i4EyIjLlE9Rqz|Sa1UE?XGJU+@-Wn2S zP7%Pzq##^{idKLnPGH>Z3Iv0WdLnjRM;!?cZ2USiT_i_c1r-AnLJ_C167lQ`%N`Fz z!FYvb0d>V0 zHB1vfGUceG+$s{nBSg=-xj!{)wjRE?czWrfbejo5!~@qq3S#B`L--5&$aw$QhE5Vn z(nBF0qb@ZSQGOMUlh7e=0MUoS5~+f8RSk_IHV~YykpftHd zPezMV#iB;Pb&pzpM7l2{ezWoT^Po^kw7D<2Y;3u&nHNbeB^<3}1i9$x6B&UZo;*@m z{D}Q<8y29)aO$Bf3(1BMY7?{*2Bdquli}z7c@S(KK6Ihw{$VnZTpQF0lnnVcZ_+3t z3Lw=J-H`^EGbT3?&n=CADxfgl`?CNA@!*7$){Yi4TWgSyu9w&UI;8^{Wyudk^;bH3 zG^@uy!yZ^>^}kN(x~HjQDR6_3CVfhWQg`dUR>RmWvy$Ao{f_>a@08Bord zcAAdRJas2LU-S1&f8(#nmgJ_``0;Y-U5SpNdq}*Z=dd-@(y9dE7e~zW{Y}3 zyn?LlD8a*&cnQ&8Q9_d0;D8_AGeDPJz<>6%NH1HK%-`a+4kI~SV#U1~519>u%5P15 z=xUk-UDLTB#Xl%=Gn-g{I$WD<5{a4Wu&mY8JYN$aTKiGu8rL5)2`gfOG^+_cE`*pM zH4c*}H%KOobQ3xK;+78GVqi|Z!;wYZoA0CmcE2|Amf(wu`*i2SCIEpai+gA_!N=W`6V{--X|7%|~&kfdK%XO|o- zcRQVfmgH8H(C~Oyd|a%Ag~toY!4>iU%u&xJI#$!3JqTxGWj6m?EYC_dTzBbO_oXaje7%}3kV+5U~t!4sDxmNW(bL8B;UmxDCGr6^1QC|i# zBg&YWbBPvs+Qxg@d5!KBGpFY_sPkPy((?;xPm@^jm*J(h$Y*5Y{0tn4vb(jGBxJ7t z`!RfEB*?|x6N~)RdUpvtH$UJq>b2ooWs~lUxX|?v)=`rAP2^^y8j|1R9d4cY1I%u4 zube4HJ^RL08N-N1Tk$KIg7^GO z3sQsm{PQGTtTVC+;>wPm#Qpi&iIJ6Hz~G&zF@mm-5A?772y1Yle`8U#5rqDYuj670 z{mWp%l13A;hSHOm)+9wuAfktrThc}<`l24E0b>{a3svI;{yOMvs6S06d)E1K0@I+2W~6oPuVI1jrWB)ae4*=S1-HXuz9 zfa%}+x*C!hdt-t${VQ3T1ydjs_R(qy@-B$w^i{2fASJ9HUkJh~2U5U#&4mR##+pdX z!w%l~*ifBVeu6M)Q*wX#da7wigD!m3zYQqJh^tgx=Wm19P>C}26}_*3i#+u&1E^RU z8I9`S`F@xH)z~YOYAp83xTM8Fy2w^v(})%&KoIWgOL&YD5wJ1ZhOGvjBKqih0tmZr}Z!0`hf6b#!H6vbZTYzQS!>dr;4?0fr?&vchM> zlWkD1ts&P1@#+zTelmbuB24a)hZq{2y?F#XR=y`9a;^9P8|`cCZAm7@)ik@?wMqXh#JN* zN9T2`d5S#rNd4edw=r-Rwhbl}$Zuj+l5b<{CCZv}ie%Z)6oKLXh$MTLjA@tsKK^3+ zgMZZ$fG;jRpKgip#02E6h_y)B#qOY(sRN%>gWdv=d55JIc$!0tRJCB=pQ&dRAM#_Y zO}E?6)C@QJnU_u*Bk>m8<7a@Rw)c4daRnQ9P>xY5A=v_zi4A7=_)?dVC8#WsC1LH< zR$t26>bcgAPf^qS%Ncw}iQEj)9yaxNE#ni|*o#Ok2AwFYct=OKkD2)N?XVoXk(fA>GSA5g{O%d_JzcoiG6l5`5tH zQv5|ORT=v0880%$gSYm}%{6~c$COwIphNBys$pWv3S19pnE zGY)cw4f7_rC~f~=n&1*$;wQKdP8QxrLf3RUUutp%iR0z4gRmZcnhgw6#wl7 z@IPQQyd_V0cah?-BPr`QfX^cIIjX->^jWwZ{mub=kOd!hwj3W`H7gNZicfh1UCH~V z#4iWmYac+-6@1P&_`fpp_gi)9`ecViM(g#y-b6=y7U9mHkUp>TS{h*S@(y%x&99u= zvV{R|gO$Ss+zva&jYZIKpaQAB#FLe+was`weJ5==ea-F_Y8p10spDs;VFR-9Bwu^WGLswJ`isAJ_fuSsiZ4hCiGOFK8)$s^G9L~omvIZF zq~QMm3kKCOg@G$^K|H*^nj(vxsI+GPUw20x+H)(tscVLZ9xAttC>L!t(d8^@Y>u%5 z91f|fWt@n-h^y&W5nt~6Ny~gSV#oZVNO4~wF3fj|0`pa;xpr6qa~_+QGDppKoqy&B z=9c-U^Tzz(oG@R7-_3XB<**H9R`Z%jdgAhyTzk>3Umm|OU(%}+>U^9l4?Eo!PR2O| zN!DDc-{2zhU1i5QZp+2B$GGWFIH#^W%RgX5+$RLKssAS~7{%Y+;YiqMcQiu{J}{h( zzepc4yr|zGFCF>Pz~-M+0`&FhU3;l3Cc*83g`27&4sW?(KzdD?pFL7BryT{jV!tqCk zmm}MjaFewu(;JXj_Q!Bw>RTjw?0JB_{8l`r3G>@w+P|OTE{>5<4|SpiV~xSGhf zw-d<;X$R|IfLr3B?W2(Witf*NbH~Bp-PpEyFvM6it`Yn#Lvk>>y0$zi-!1>?4`DBo zM}E28TsxQLVr1q&{q7o>1(owXWQ_ZZ>l#R4sXn8ONjtO zS!xcj;y4muu9F=-Yag10Xyp*8H}7vL67Wbxf<7{^^@rti5=NgK+r>(M_I#JjgMi1) z6DaQED~pmo3prb#C~xajIvib$gV8#~!qY%vOoWq@K3Vz6uB>?)P*5_V25r3G+t}OQ+pFPAy|vqXjxQS)DG<6HP(z&-b44{j(=8oO3Wt~}Y^l`m-J*#@7~U+{n7 zmyL~QPo%-!=I--nEVI39sy}`DYd(b9tQxb@=2v*+y3_TFw| zn>C(nKW<9PTYFFNKRj_?HZ~fq<|dxJK)cPy__DXR`Q!z^Y;5c*p`X3r|M0|p*=)T4 z&GBS+iyx`ASKlK^wzjtM&>}_hNx^1=|6{>zJD_{b=Stf;Mu1gyBOHF=W=qP{n|piO zd5$#;@9jN%vCAQDG@mw}67myL%HU$kY_y(j^Hu9v>)Br2BL$9mipS3zdrC>btP6J_ zgZXyr8D8zlHjh;ubJh3iO@ePe=KsPkFE&~r2y5-_K5LMgfVUxIu(h$fRhPkd-e>^@ zH2Qpd`vs|KzF>-1u&>Q*1Gp6zb8wv@T**sDsdC;FvX z2X>@*tJT_;9=rhGz97E!Jv<|t&F$wKU`azMps?38E!THR$wqVg>0_N5jg1CpO|x0w zXcDR2jh2#(lv3=mRXT*1_wY~e4vH^5> zDoE8go^EY5EmCL~|HJ!jjB|@9JgYxdo_daUg*)6A(o(3&A$~41^x5{7aB~xXgk_1X z;ES2NC&LGhfBb|fJVBqDYzq|I5?mnmTDwYLz}~Y+Q637T^P%+l1yFjt6^i%9WQ@Hr zZpRy#ZM`{CfQEpBlrgsU#wDFc!Fq(OzEL&>9L|%)dVsA0{Jv$^dkxpks`zyd;L?p0 zUN}(xx7C_t#J@1sy-M|RI=PiIA?(ZK9#_2*RyWbB;(s{3I;*~~eW?8>4rCs{@cN+g z7r84=VZg8;!J!6Ycgn%$c-AD4f=cFOup#JT*U4i-gZ${yeBoV-tgpBFBGDbZ#u1y2 zhNr{%{d6o1I+|DqO1YuY^bCdFR+9yBcq%Pc)ehoNukmGw(yH0}1D9%5a7T@u9UdmG zR{s9?ihH((-0g6Nudb}DuG&fzA_l_{rk*bULuL-)TCi)hFW2YQjn!{nbNm6b<$G5Y@TA4d-#rZHwwDZ*O^ zJlb*zLFcln*!?{EC560H0}Z9z&d#IF7+e;LjRQS+PR2<-VcFoLqZB-lTXD&YxZHL; zydgJ4XuMHFXV8(=HF#y*R)KVakc7w18X!BgvHN2rT!e7mgI8a5>*>>)ErW(?m5mxt z?jt0yfDQ-q>$Tg_xN08MaHrSPRWU>MG{yqI$xJx;obp`;tt6zudk<+N0cV3y#=|Rw zySyD{dnYt`xMQF_P_9XG3yEM!7o(vN@Zn~pw+d~YOqc|j94#~C(nc@<|G>Sb@B#Xm z=z5Yv6PBkny-p&RX~P+;LZE#$hKZqpIQ41*64|$eKeasdZ4^#+j`T`)F!_rj;+rHV zMemD^VUX;8p!pl?TL}$_T0%l)=#T|jL=3_+qZd@nr3#BDX_0;M56`1oG{Xi(ylA=5 zKuPpf*`vC;v-23FrA(2_uZLr-yPzvJffWd8-YATH_>6V~$=9m)F*qi~{N@rj9=>Z# zM5?T;_~B0uPgH)oikNgnV!P8Qv<8!!Zd~`UA2xDVA zZDd%7^=(aLDSo&$t+x3rn83*yDT9PXeU7_7sz;J!dQa%pde0C$M1WPsm&1@1Mm?)sG z%LAT0X~y*?7aD44qZF;V-3M&|6BLq&J9tsSI0yxiD%E(XoL0HK$DQlw{Y-hus!e3M zDZC?X^YEd;$DT8D5Jwj~MD^qd*OVW3y8Twu$jg9kbvWpp&v7Dk4KpZN6$s+`>)GUd z1o)uhEr>~+OeeJ!*UT%e%wjVuj2(0gOB;k|zGED8X>#wAb^sHkVc;TH#(SMXgL`EC zW2`06unEKI9Tax$Yy$f|!1-z?BOK?6+Z%9@!VZTA@Hv6wB^d#FHwaBp+A=p_+h87( z+FZIXnzN-T*b1Ww1(kW2Wl#~>1D#7^W8k7H=XVzqafX`mnjiFr+(inG^p0^0$_@_{ zcO=D6;8C@c!A!>(@)#j-Xo&rqB6kamHo`gK6$`ez6V5Rge1ALRY%t?yTq&GZkLe&e z*Ew$jlAsRpPYkv>><>y={n`Mr=yQ-ph>NP)=LsQWIg`FiTFeMXTRJ6zs8uQ+0v6t8 zgRAxhbV18!c>L~qbTh27J-iV$@!$U)TI2US$s5VF+5F6fHXefo4&F_YSaWL zY3VC+rQtKX)igvCVIHuXVagf<@hBN3jWuV3d@@nddDWCQdjaLqC5UJ`d5h(kCoL zN)yxBPSw0bm68F|^3dE2JnlOQ$A0Af8qQJ-vlEM;NZ!CUu!!QqFb-`nSOlgEzR6>k zCCfQ0MhO%4)L;#Ziej6UBJk0RbJlOnLFc!3DGnn4T^I*jqkRZN;9;cS)rO^61)xG2 zkR_B3#myP_h(bRB>6TY;P2vKFb&k2ob0o$jr8+#-?hUck@ zpF0+?vx(-*_Pq=5R~#4ZmYI2I9UZVnA~#0TN25hqKEl!d%|+GJgEa`h%#V}>6dO?F0=9U_AZ zu@~sxK22$Y;pJtJ=P;H8j%!YS_g&T&zXw7H0fM90OKN#D3$JE(Y?qiLL%V&X&@gUu zHoS`42-m<7RBSDxf&@`okk$ca18k&lF(O0Efa1mIEdm5&^S)J4H{$Qo$YUDcKuFd` z7d44xuSu}G8qOKEcMtEIps$sxgtgaf^g3f4@Nv6T9~UP3A8xrcV~V}PNRds@Pp)!= z^B*n)MVK0H;0((~aB$@4NiYT>MoI|<7|Joag%=-HB2YrFYpUrGW0d*+d^(a{nFG6r zRTlY9^=bl?<*G%iRW>I((f|EVY7^W+n`Ju>-7^2H_}F@4`^x#%|z>>Nnj583%@up{P#OkFE_Kt&DIadb05 zI>U-B!fi8da8LpfM0Z8{3Is~;wxx!$p(*24vyk2)QS%AKRoe9(hXEJA zv~TEoPJ|m283h+LBC^9yO z_1zE9Z@n}t6vk%IzTeP8d>#Hj?F5`fVUsuG=GX8<Ygf*JGiK> z)Gb;SP~;XD&eAXpRfhf2fDml^Hy*7#40ur_oM{v%*_o|5NB%RoczF(vPVfbKFN67T zg$Eo|2_;I!sso}lxRI@_JWLVY&c#gcvwYlz>+@SNu475mz~NArFY|@ngWQJe#~gbn+zG zCytAOfkM1>N;}C=MXB;Z4H?|4F7hURz8X|RblBKhSw{X;ZQ`fF&p)pria9P>5iSmT zSuK(}ZvtyYXIlU&C1pLhl~$_IvT}qtRowtQTW#Z9hJ|0PS7WaP=Ta=jTp=Dvo_MSP zqLYfkIhBmwO2as-ge`!4Iri!SD)_>T2GCv1y#-Ibv?1S|WXW zbfJWjFr6fXRsd=|iC|Hh1*q~Y1~x9+=_cLq6N#E^=*cN8#OEhM_w)5y|FboRn6dHU zYZWcu%%&G-ErDx2!e#j8uBwi@%2e9Xh61TmJva=lFYosF}GN3ux3(n#4(t*-4IWQ`k% zMk2cd;}iKK9F?D}7YMon#Uhf7jxXAGOw$ed_Zvo{!RdgAD@|bb8x2E)A+8G8r|X|V zNZNKE*zx6aSw<74|e!K>BsC@^2iD$ABHuO4rdd$|?GEhS_XZW0`C10W{W zNhpXMPsfyUUk%Z&r`6MX>o@P%7E>X2fNy3L7(D&C!5;`UX zgFhKfju2RZ^QGg{i&JBf($JB#)r$>Y)fM}PLSRCKVNm*)!=4f!r4ZMLRw#QtxS{hU z`Cced>-V#P*Q^`)nxUOJC{3N+4~V{UXSsx>KA8o+alqzI9^cDHSjG#B`fk?Y^kQ<* zsTmy$k-_ngX*K+d+vYWkmkd7P?cyT}M{G7XF2_;>hYRj^ZrsLE7w(J=kMDJE{O$%2 z^Xsolo`j+F!6_Wp>85oaEmvod);UC-I=pyyikEzy@^}2sCtsgbfUZG{YO8OHnRkL% zo#F!1SQI599q8-T*CNjlU|A?w;N|&%FG!hIPGIqju*CJ*s zE$bwq%WLJ3la0LTWK(5o*&IKS0^+YKT~!HT*BtBOHBTbH=%iz8K#b3idms)3r1-)b z*;a=k6OQdY3jt5DVsF`92fkfIkEI2ZAbfHYO9dwrmY9o4bks-JyyC@ecGgL)MJ!DA z5!qh#p{E;ZvdYIAtY|oZ13mN&XKE}{nFac|HT(ek@J(#FU^aU0ophcH%;3|2EI!yj z#KeW7*#uDAQ=~G6FY$2LP{s#MQ1vw`8&+UG-JzdI8fq|L63n|w8p0_h2odZYBBnk{ z65`|IxT}lPTiBH``x(AtIsX!T$8e$sFQxDQy3OflTzoSZDFh<_CgRp)bR=P`F8jnNSj2daq*o?Q`yieSOQ|+myg{aTyjgLmH^oxH%?kY9=JB$8tzZ$d5HYml)3nuNR=*BKKv$v(co3noWYi%5Z0w0>Ty8Yyc?xe)$`M)rEI4fH;eJLM;ho@WAlXJny4dJ zc9b+zn)SgcjM7ycJ6|>`HwzRpLCu1sAIxCndjLG+PP7WtHDfc!M zZNoJe+G=c#G?Q(h1JL045^P1Umm}}Zo3F0PxVLLG7;V( zOGPF^OT88@NAtPjI_%0M4>7{Yx@5e?w{T)+lu^7Gy++Wsc%rd3VLQk+4MCwfuL0d1x16%~#RWla3t&?a<@$4J1Pk6`xycajmIJ)GoRlULYk6VvCbai6KI6HJ*-#o{^~sm;ccm!m(_u&eS?Y zB_bI^)#Cx+<1w~VkYe+-`=gbtKu>;xnEYpxY&``Q=JhfBd>lAIWiT%$6TxC!jpZi)+ARkKzom+K8f=0^TW)HW+|75`zSx+{Fk@8&(9IWNc!1U}RR#wL0BN zD9a=J+u%!y(%&GLioMMR@%8L9Bo_2U0VWFO=d-oW%Dt5}&;V2!VcXK=UrqY6(R>A{ zr+t30ho=C03bN<+sfQ?AuPmx)mEp>-le;2?X^S0Bb9q8!KyQZf)g8 z(bC5dqH8OwFu1&ue@792Bi(U-QxKK_gb!^k}BDh1cuEE zh&3m$%9a5~l%zT6;nLF3M80T5UO^;?&f$S3_T<#|)ngJ@0QDJjfjYkpVP8iUfv2%;e4#xv5 z2hV!A(*_BJG2lW1<1$+1amIPWF;3$APeIE?NjN#&Zrof|JXLHbB-F^Pr=`SHI?`u7 zq=|xkOSPCYR22-w4Y&RCq1@GK&wANV?p{IEvR#>z^w8|+ZZ2mV;K|vME#*)0ztRjO zoqSU%7Brd{h!hD`KHC^THQ)g&tm2joB}5x2`GKmrOoM<${{``y8C&q)CY)cq;H6EH z=g(*%oY_$w>x5)1&&K7&%qTsx^#$8Wo${umBBDCvB}|_r6nlfDlpgK{ zXjIs@=^~bJLtupY1F84O0d=)~qktmpii||~5T$~yz|a*&$ejov<_HQi!9}u`cG?RL z$H$`TPSxP+y53kNvk8hT!Q4#LbIoatx(X*0Pi<$N9&v{M%^!R zcohf(7Xe!#T!mfuCvvktkyXa!8?@6)Tt%$*ODc~9vV?lP-I|`tn_#hs(MgrLf~AkW z3k)lejW5$_a4@I^*+XoJwl9xs5=s&ipQY4m%&b|I+wa>ws&mI*Am`k-|O znbw>xkp2*V9pSvqfj=tR_!JK}clI9RXw{?M7Vm_)Da%U<1@7Yt{@9QK3t>j*14Prn z%DM{5GIvANN~+8%`%!|?2HtdfzE??ixy0cd+@%2O4QG<>Fm~-2Nj-7XKtg7bc1XbE z`R3`_`Rl6bWouS6mr0(nu8s1S2Bl|7ev_F^V6#qtX<8)zF%q?n=`TQIsnjZZ1EHXmI;BbQ7J-hh9*Wf4RE-vKP;Xy1e$&*Pp-#n2EPdBatUc0*=P z#^98l9j3r!BLvLia`a>m)+yC@$u3h{0 zu3h_Y{`rgE|K0xA`~TI-wQKzU=C%Lu8uZv(OnN{E>z!K{<6Fn)rzf`riIO|=3Cvq0 zDV?={k1Iv~$+dqb6|dpL2Ka#^@deYBprLkXsC_YRvmv-)kO>55+^Vl1T%4azCto$b z-{85R2h&#zN;sc17a{b`Z+DU3e0muibb55*BW-SmB_54OC)izY8m#8wY_Rt403;dP#NgC~o^YKYLadC$B;@jX} zt$C-i0Q4feT6RiIWHaIlW<0+OyL5ny&yQwICk=s4uQ^@jkn4h8IXlOZ=otlnhuA~9 z;1hd|o*6r1O*)4xIbyaSWEX`$Pj1A6_kDDN<|l>Dn2%WUo(ynBe1bR4w~Cz{@$3W6 z3Z4Kr5{A@F5c*=Ddu>0c7fDycAu3a&ywMh?ycoTbo(kk`D28rtu{816kBl|l(c zf^Got?syUP8$bh-B4Buu3LgnkkAb^wEQH0A(fAzblC1ZN=_=dDL_YHpF4i+FK&Hvs z8KzheK8Nt-8Q}2L#d>&Oi@@73ksDDbMB@Q3z@9SS5d8#N_9$k5lQm(}L?Gho0m&R8ef2jAVQU=Jg@&dbagoy-38i4%61i zR?8Ydv#absXWlXZ=I*Y6gX~^{0$AFgVl~P-RAjNVOguFWsfzyNI0+od;&OmkvLZZ+ z`H3-6-^3@7K$;D}G; z>U1_f8c*P|p5k5ykyj+})4>aDxWhx{4KeF=nR+=S`xv)c43{k>wql7Xi-gfSM5fxJ zV+oSOAEeyt4f30lCoD|ekyPvQjw$SDZZ=h9<%WuFAW9cHhc1IGfeOjRD30{h_PTRr z!UycdKT%Pue^R${n!0vQH>doF9^d!r!YEHe#ikWwbaLI*-)6{l~>69Ae5TSo~eBQ-2Q+hYNS; z%^?l81e-Cj404XqOA_*sNcT1)D0qJ@uB8S3$wkCJJUF=kV|)I2C!S*?O?;P*RSv;p zoXorFTy}nV8IQ5`DxcLqE%6%*0RiB+IvN6n)nKHC@u~$QJo>AuW;}$3p=&cVMbl_Q z(-=K+7mp@LnIOs8Amgb~QD>#HdNM`alY3i})gJdJTASUIlg!N^mUI@0pv(Ccf)Fy5 zfjk=?EDk>aL$`I8VxeZhsi=`9@2DNH)m%fcY&DrpQ&tjKt66+fCPT7u5q5Q@R#DKt zrL>4s?YS!2Ta`zvfe^@>RG7-F*$f>ynU-sv>@5rUWpTlg)XYs3+6@9p`x7gfa(&h4 zAo3cKL&c@liqC>2dpQ;eSLC$(ulQUjUA)Y}0C9_iRRXT-ix}r-+i2(0qob3N=%%BC zbcfr;Z^-Em8*TVvbnrtu8-mH2=LBYX@xAeQbK_gwWm&9PADM?94IzB%O;85Xwr$q4 znApndV9h7;&k#|SWXo>C(k7oycKnu=0p& zag9oVcEsfytuph%LZvp6MmQVnC$UJ}=tw7x2+XJ5rfR*_3gywxDja{x&!CKyYZHzw zb(dH+6b(NU{)+TkexuLh%nP$0c3-ZD9N_ z#i)+-(JafFv=5`6b0{aBL<^B&1@j|zz#)+=5_y74z~VMhLoT0$w&jKv(!8$fa1!tj zxU^b?0cKDAWr^M)ECT6GO0#B(I}8JFvIUk<*Mg8Sop*s@OBV=8!u5%jhB$nJ%Fb&x zlY(5-vznBRr-Kv7Fv>@WL`Ee_*x>-V=?^8tdbqF#F%9%hqZE$tr>UPg0RM!(AyoGO zhX7LpXCo%qQ2#abyVEwp-P;oPellsTJPlwHSAgXa(@fC9@x5NdP=UvAF7Y;+?(Sw+ z!sKr%$Ox}U)g6a9XRP>FGrfv-F1kEq;r?{Loe^|rV4Ud=sQ{is1P-~0g`{oDfSZ$8=F*fY#vKF{f%OXE&B z&vXb*C%6b_XxpstTT6%=y7*>y``J!Ld(~y|mn?{K$r#FHIK@;h?8{ZNOG80P|5}l& zOo{s$+X4>2h)1uG+||ZczLp71aO^~skXptgmvcZm1m}i)5D~sboJ{KcOLKDth9GpS z=W9sqwVIx@8NY4lm%EviM8!~0Rr=f}3WX=_Uw>Mr7x%>MKBKu(0WvYE@vc0#lrM*El597)diClYs-(!7( zq{x4+kxF0hFwQ^b(Jue-{Gb1K|G^j6uJQlhER1$}glNqWi;`{FIZg*?% z$FC%4n#VpFupv$HvLwQQnL`lrISyhT7Ed>Kktua+ulu0)q__7Y!f)Boqu$=uW*?LQ zlIRw=(+33d>`8aG*m<_Qv)$hWV*5Zjk<>hUY$#43v^-pw#fz&(2vQo$n6oeCO%1Rdh0>kDM25F-R9Qbvf!p_VVbEKO_d>Mr(2riiDu ztRaB#<#hJqE9z8G@8AH!$#>CbiGU{JTW3o+_u5`BKD&cbgUO2%%xNF>AB_(Ya`Olw z=?F)E0I@fntQSwa#qGOy?%ck4=abuaif8?<4{Zk*7lIcg&KruSQX3k*ecLH-XE1y5 za)2Z3yQ71b)9FFcNAS%^cx9to{O;4+pMS;%8C(6!821nrFJHcFPeqs@mhP0}A|K1u z&9FmpQPGqk8)HelEu3U@q4wS6bs>k?QHtrdaq$0bgYzg2uNI_*xflTd+^a$q0Qpm+ z<>CF(;KE`Xu>yx^*G}xi@Fw%T7>&+QH6NTCHBuaWZFeDSo^4U!5&a2^kg@gPb3WPd zV8Hgh{n>p^@g8V^m_iq4Gz)|)q(xFTWc1f`qB9uoQ*S}}BtS!YENj$7u3FDPeLhOoII_7RJ8 zzG6@iEUBT`LOV$QK0tC^l>anA%$LQ3?I+lG=_0`;@GuXL&>HT{ zpkQIrMp!Q<0$|)s3A4niq3wPeypWZCzK@0ek z@i|i253^Qb1jLTTH(=>2G<1U<$@Fy!yIZ^RT1f*Q6I`=R!=+MyG}9^WHoO%|!uwD3 zy)@zbZ{&JHhlFhj4e&__JMzI)Vlom+-{37;6as~#1r&q~m=oQtC)sf71Qw8lee1rxp~i;? zCd65^`E;FlEe*f^% z7P5l_Uz_S1m9{pvA8s~R>35&*RO@{E;9+x>@4CCy8XGuU)m-Hc-=`Oj*~f8Jbv4+DVoQW)~Huwu%ERek-I3*V$jRa^Fq{2#R(iPRuQkD^G1M*hR z)Np0sfj#tj0;L^6*b^uk{8*MD1MrPL#BL7=@+=uu!X} z-m6r>z<8_O5=QX`?;o3841rUkh*U&r;#?ZOzt*^2GBUDMh#=v5ov)g*Q0s~-5=3;j zcvvttA@$+GVC-+ESFnB0Zq(X<9DyEyh;1kou4!O0679hoS83wVw|s$6Xc4uIR@rpw zt>9wc=EDyEQF7&^#`O?QzkV9-&h8%peyiY!G?3eJ)`LWcmnZBmj}CQlE42k*vNEWNBPhvdb##(o|EO zYo{QB!|h9QxKjH7-r;%#y@r3_|ZkWv!ZBS$s0{}CYsxR zy1ljC-$5^nn#XO)Q_7@$w_T#pze<$gjXcS?dp z5<(5H*(M2r;{_)Lryq*jBUwK|_uO@K!&@%=5cL#N342_ z=ymm{1VQ2}h17w5ggHuS;`%Ceu&4j=s=gz0>QKU(Osp+Qy?zDB*A@A!tFKVs5xkOo;w zFHZMIGgvLBgLqYAF*(dKq-mY_FXs!rSGQ1BD94&-%~}v)SAViF^pOaN`kqvQzqBu~ z1Qq>Kf|1aT{kXI@vCuB>42uH}*}^+RrC1$fb~iaQ;b5fz4~iY0Nre=e1d__)4ljuu zvY*S;*U782C9a9lZYINM$UM+VZv>8h){};}QR3~z^X0Oyaa?TGRs_!H`Sc0ye3@-P zyrhwB-go+aH8|p;o3>FE2z(pZvm@NOW>#BTk-z0-;BNWL<;Hqwq6V4OPDRe;<7t{j zRTlCH0ytH-dRyOoDN2E)u7QF`Pb#mZqgY4cDi@5%EvA_ydCp~WgGW+@b}$+^i4y-1 zPQ>WE&@aanWpd{&eMWMyOE1EMwgyvCoJG1ohzl4C%RUZ#NgAk&$;Dg_f0;9!aM=0+ zF6+>wQ8UWBDBH+CQF;1VPCUngu~$xv3X01+Q%x$i zLQpH+X`yO|fj^|jg({&4St@5X(%#=~K8N%Bn_6wC0suS><=zQsB3@*HNZJNdmg)6QAJnJkA^8=L44mB9GY~u=WB8jXlg(;}f%1h4sml3Uuu`IOO zNgce}&N2{>iX-frOiUM512v&=cRe9ymw6FTY=+$fb$QQa$Ig6H+DZ^=PF4PGrfqny z#;J?IbyvsD*+mJGdw(G?g%wKeiRjxi=NEEzYY)R0xDEjFiJhnqE13*7a;3SL zlb0`@jV3m^;$(!*-f}uBg6Gl+xgT*Qez$-46GD~a&ov+3*QL`T^IyXrr3Gu@bX;d| zZ;k(!>e3{*=tWhgfXZ3o6??9338jGX+_k26;1+uS=<4`0%}?6hrBg)Cug*|aGgv%F zI=(;WERiZqqNxT1&wcaavg_&HT=%opUU%2K+*)5R_Qt0O|JuUl*Y5OmF!6nixTLs# zh(_Qk;dZSBM##=>aM5bpCi`?3q_4%3MYFopYPGOFmPB$og6j5+2E15&6c#X_Ef>K4 z{dF>gE4QLUdBpXY1HpHlEkRaWW)Q=u9IG{v?^~JCP_h%kGQUS`n|5bfoaa4)dj#tL zA;KP*jfj4C-o~L$nG+mCK7f;bbl!%|g&m^F!3he9DrGjSs8&fVOz3h8*FUM=m>B~K zJRS9Ee2isoLf6=VQmt@)0WM(@9%4wqk*jdL{V+wUxC9G8^vZZENQ$;lCe%%)H!UbV zE`widDBrr{Y$s~FOgvrRq5G8YsnWEfwXPyHfrYi_KZUA4+wL8jz-~)Ku`e+m5(K32 z&T4rqqoI}-XOj+GZky;U&6;Ht1n(M{6}zcy0BSQfSm0xm=Agj@K=QllFEhi)oMKan zDW+KCv*fdA%-mpi7Hv^=N5~)W(pD1g$K6PdM^$a^?jb~sn%kO`js7)_9CPWHfFM8j zLGmw@A=6i>MfewlUv1L29{~;1TJUe(>K*cwa&SYyn@U}P>OBsmjd8WKn0KU_vSEQD zi26NZf)k1k))aMDDrn`}KFJixwD;*EGzCPbjE+Ke=KXDa@O1NG@7dEY;{$OeR%eW} zm$c6E86&+LQNgDY1u`Lj8+uZUzZN%FnUA3F2kys=$ip}zGC?|p3udG=rs`~{+jh}x z$e8{y%|`T{$6vNCBoSpTgWg#IKwYF^6k1J{x9q;RCyu zR8f>rzCjmwEDbm5eq64+L>LZbSK?ntV0}40z!q8N6*k>k)^9MrV8C->)DsYD$iS7_ ztUmh;*hv-Nx9c*ZK->SGfO}LE9;GvG>_*7jX=xU_1Si{aG8NN@V;y!!leVTdhN(Ct z1<_$lX=P89w2lVFySEsJPQ70OjcUvn4mP}BJW5s8M49oaPw2B^aH*=Z^Q7BDaA?$f zsOIZmszt=Vsg)JKW-l||HbU-OEY}--33@S<31rI*L1>d|MH>oSh=-He06~IyU&@J- z7%|rmDgZ{p-@5t>=wTZ%2rsso1T2-Bq*O#eJC1yaVgre+F~Z@Pj6jFo=g?jq=Z7KG zVhBU4V{~?SCHzp9pN(H32T%>BU_0S*#xdetc$N!TnhP;8P8Tkp<`SCNeYraT5L|iKe%5|z*OwAut>A$~3 z`|1y4xClIZ2y(WQ*4(E*hOeLQK7_hK|c35rM3{;1Yi|9+F z3s{fKc`dHWIHZaru?zx99pPBRp>&TrK8xJe}X*G4fLY zg=3jG*qbRX+3}seZW=t?eAIpRWbb+Z*@LG&9KJ&GA)L`!=}RLk_2+XMI_9zeEBCv* z+24%aZs4%-%zF*lE8#psDt0?M6rOtgXn5cVk?Wxwi`&U08-uXc=s?-f>%`MZREqKn z&n9sEGsWeiDiNgd1PSCh=Yx1&&o5uE4nXHjq=CZ{n)1>H&WLwVZNI3Tr%E7}A|TY7 zQbHCa<`5{X>4#P8Hqy|9BiWe>UXqJb>guo(e-bzh32|{v+44rmr1v~9S{#WF z&M};pK2O56q_nl)$!3#n(Q;`>KjR@fxiLdi7ik4v?BJZt+`6YxL&}0g<((YJ6ow~H ztPtQDkLKEmMx$F^n*>IOq!n7md8o9>_LJV$w>T`i`=Iym;pUbcZc1DRtj|x18E%6p z)#^L9b@*2jdMs7O^GMG)UZr#6<7XI>KB+kcK~lhBfkrRP29{1H0pSWmSqZtuMH%}` z^XZUzR4k^OUMjcb!o~uN87rKG8c*O=2%i+OVUvBWlO9XtbCCKxU5V?eIjx_ zqXz&$f)ZWvm@S1LoaHtnk>sBNoUJM#a2bSdFYR(*_Q?HL0&Yspq_dVhO>?oz0}t+6 zAs$PUsx<6;C!dJDBzpfsZma-9?k` zm1r$wYl(@r)p*&N4yf0OW)@JH=TbBBT*C`w2Z^Ub<8C7^nVi{SGVT!Lq*rinyP$H< zwTvn4L6@LqNh#GD-ajqr+Tn9xf|EmscT2Sw0Y4>^(u#xSF+acZPLvmO`Y#|oohi_s zlU#zMtI-?>n$aAG5=f3LD%6sAzPkt1WZ~qZ)`5^z+}1@El#3hJt91r*T9m=Xgf?*=D0dcZDR+qH3Mj%Dq)RpK*mOVt3`;{mFAoDG+S80NZV`<7Ao znxA%?5;O@medp^C0~(5lW&sFj>C{NlCA&(2gC}yaq?qc;4e<$F{89=Xu!N!%VoL9O zX6cIwv5(^ld{6p8fB+KbNunP3*ryChk&qMo)aAjK4$>w*DcpJnO^2L5&sajGA8K;c zfZ11vTOeiW1)&g5u}aZ)IU} zo$lg%3c6XO2X#>d0u5PW&PT2VsgkzNNlKt30tqSdsj$&7?*T_Fz)zB1SVzi~$OP4^ zmKu#{a(6FViBhDr1i>687tqK=IQZa}P=2Y5^!rGxoT3}VkN(ZO#!&}1)?dyn0K69s zrk3LyXV7FTGaNj=O6f5xC3{!5FOS-NLPukv60+f}i zv@L2uj$U^urs_dhnWJ;-FRmq&CXMUZ9;nB`Z`2Tm`&qeCGqPSv0sUnG0S`%gORC6QBnWUGu zTx%7js2@C35R`}`LFzsvjdmYba^*t4ys_6%zV;Hk@K!?4yg_$^5psUYOT9vnqALLE z4YuV@$NhDcJyvunu1S34f31u&Q^qNc6k66rEjvHclf73;_5~60piVt3C#Ga|<(4OV_I4#=x(&%7=Df zcc4lWt66jKHPUjZ6#!C~A`y43Bn2|L00InhK_ICLhTY`22NJCyjS8K~q8H;tfM?(g zF6h8G=1t>5yhJrsJpdbn;*hQ75slS(7HDD(st9Dzj3c^6@uEAH?nNFtB?PvwWqu`C zdv-%}Fw6JogA{`vh9#^%F#vUth~^EBOn8~on}#$9p1L%)prDMgE3vTLurzF>ij{0N zxj;~Wz6C*;QKb){bCnlW^Lf{<9cCg%QVPFZJ08tuQ>5-0;My=+lD(Lh;QV4{o={QF zv6Tm;&ERw5SOg2=>4GbT2C#w$&u!?z;J%ohbQHv|45wfZdneAlc@3YYQ+fY(I$|=H zRa?OZ8UOSTU}_~hrNyYD&43L+FJFz8yurd?L#>WY#^QSp*?p=6Td!3HbU4{EX@SS5 z=ScT7M9y68w8XJq!5|Wqs#6{{3#n+MuPd?AwH9!PX;nv0hAnSgTWx^H5g!8K0^wzK15rmp{ImJBHyQH6- zP6!D<6?(bb(F-Q#Z6}$#OVW%sSeURc_Tg{!>#0X~+Y|TsGbIS1x`6#8l5oaNTNl7x!Z+KKk& zaCK{XnbacUG}dAJo%F`rWO+@8XT?P*KAj(xBvV?Fla&edcK_K9bLl*^Bhwr(Hkf3uGU>3^=J4okd8Km^^QbPxZAj zt=?0%6g@hZlZx=Wc1d+u{F^YnEora~smso;zyr8FfFLRha5_1)d}0Tqm*IdiWvjpP zs>J=aBYY7jTV)70!zN5fkJLOM<7$NlrY{;?|qEei>-ZbKswij<`7p2w1 zS=x_!n@=7}oLuv0g^_jH-H-#qNV3l3>>q_Kr1nm?-~WDlR}=e|{DI}cH38vmGy_sq zTfA-23>r|=7G0z-b{Q-i->1UO^e}2dYc(}Pz%-d(qVeALQmwUW|oNP7NG_Awe} z?Fv|zJ{F;!Th$l>W#3KP@Zoix+&-QZekmgkMemPJFhV|*fC8xP;<2HRw|Z420bDeF zPmwNp9Pq7bV`UCcS%_D5Tr!Imbm5C)+@_FX=y3_NxbUdk_6Tt zNycEni6|w#i2#CWHYh%-G_F-U)&iVKa|vu};kq?@c7kNxI10LY^G<1YqclrE0;gfO zPh3^%nX))=Z4H58yzB!o)0YKfUqja?HziQ8WdR>~1i6Nlkay1zB?vtldbNOt2!>gb zBAkfOF27BZoM!`$xT+8AApQ*@Wp7U$EDN!r>xQ4vzr-oId5iIaHFD6J)32)GpEsKq zZg47uF+$?O>$9*FBy2Ki$u!9T%(BT9kcYT;k+)tjuR4~Sq2yQR4p{o4CF`()i|~dd zUNz~?5!JFVUsre-+H&2VrIvLa`V0U@lx)&phb7OOEA^CPQWXo-+QG?=mbH@9(9(vG zBs?JXQk#d`B8%KXEsC@}Q@3<*%Bugwe9j0vvmH?tUA!oapL9=G8p-_WEJ694J5%#b zc=wPk=^%57O{1~1)E&STJ!B8EgJ*6qKaeQz>`YRno#+8|22XE3NLs79q&4d!*1)Bz zo0TgwG;z&OPB;2&QB0FImynWIS)>ajYCtBCyl&Kv0$$>y)vMvg`%g};X{BmEyvv~W@^)6M&Sd^15q~TW zMl0$$trQ1g`ps3gGIZ}TcSm35jTVu-oEsXb*B)BfETr?RjvO;WTYBu30FFQ7=-*=S zvVXSh=&Rzs3tGlm6MKWO-!yZ$`n4u480pyvP*+*0=%zOR&X{L!E@V z#smw3O}Pq=OS2qQ!0tGc+R0Ih@^sc-7fAVFOSN{h#X#f@J7|LS5O>_n;hxfiCvRfN z04q`>quW)Y_4y;>hOce?!#e&I{(`=|7ggc&!3&0k`}JY@sS3{}BKsVAEkX}=9HOdq zYn|#e20sw`I32&j?O}331JPiEw{SHW^SpL3J+5P^h|n4+ANg0#iyLAK-Kh5}a3BIa z#%HnDIdVn0-zQz?~`126Hl*+6*=Siewm0_0lz*5@sCqYRc)> zF~)~9J9^NmMo7wGGxWqATt+59SvjX52`cE~X+L$1 zTO3f$^y_HQKK{!Sy8NG8Yyahc@i*75@&6kO?~L!A!iIY~I15Q#ScM<|{*ct=LsA!b zt*`*WJEThik}7<-H~vFXm%q|`;~z+BjrWrSCCiucWITszo1{X4-iUwObrC9=2B49FrQPu?R4Ra(IzeB3!qp zOR<0=|D?JE^nK{SOQ~2?mu$rKo+558z3M$B5K*ie1Daml1V+01 z^XUmzDqv>4c%420HfpyJ*cd;ik1;7laGU1Cq}!BT)@Y^LghIs@9ItPL7W{4b+lj1= z8~28z`J4pjyYXygK}WeBn>JjIjZWWHYvoV!zYZ|1 z8CUoZ`3nE~@)i1KW6&%s8YoLhSaNfbcg*Xj!8Y*HU8(SyONaqBUMPQ}|RdMM}PMWicYTH!Dq%p_9_9A{?;(16Q0Tx@wGiDlPe-f-A#?2_hX zqu*zwtR$T#D9ftgaS?RoI@yk=YaGsP4C(+;Z}8p1_eu*N?%@pYShJy61~;y`?tR0= z(hd%f2eY4kj_q`cH#Y`1)^Bw2{{;VU;s00o{|EekivOS9_@jAhOAukEhsSg~J7{bf zDm3s8^<1W9G{7C_2C-^b^)LbI2vQ8yMDo2_z3j~+p|e=9z4zk|Zs*!u4F1En(Z9MjP3-U4U0-M9UTY<(C!wzxX0GQE)j6}=fk#Xo;a=u*POe_o_ z009}!bwLuXK?LhVhZr~*PvDvNJVhpl3{fRy@ThMu;>I@>Qf#E=H|?+VU42xY4K~k! z7;UL@WbDeV&@xckMaORdN&!rJFIj65xVDx`sL8@zJDtiAR~n~wB?d?RHp zk{CaHdtJavgC$EWqeZ!CJDa}5fwGrH56A6~1}ELwk%V&wVr(U+Y!o5Z*X>o<7>s>km?Q7O6zrh0uTuF02%mj_gp)5Lpm@EcS5CswazdyPN=3d zV}B-*W3A!+&W+nZ5}kp=dz~Af6MXWzuYjw|OI#XDhagS|v7NZGwa^kuag) zCxOChBr+LwtAJ^}qG-70kFRr~T>nHV!q?9ZaL@$iJCVb)3CyeM(FC!L!Com=)`q2( zsUF5hCDpz-9Lkbce%^{$v|H_Jnpe(Fu$v}gI;;bTC^~hW?0Tn%R7%K+-+tQt;rVyn zC(kyU5XO3kLpZs?37t+E*!ITuv#q`7n?H0n_MZIse0!_09U>+4zqVFS3W+edw9l>W z=TCY_Dc=Nm)?szL3juhOi72+@pE!h$L)g$#rHLvbzc1VdHM|b5rWp7D_^p%4i0KT- z2w^D-0;*V&v)FmToGH+kPHK{NWNBRDeR)JsjK~K+Tap(d|Gw z5yumBqy!KPb3;rRjemlru8C7@o1&VZ8wd@D1UIGih@(kX?|9G0__*NHG`g*Qmnm}nwg zX>k1#Cr-V!&}(;v^{Rw8}3R@7w_v)Aa6qHNMxm^Z8ffk2`nM z0XmbAF%vo5<}p+pt{pdJf@i%lVt(z6BWAqe$YOjF|4Nwjs)G7_z=++agI9fq+z0uT zEE=W8%YfEMb@4ix=K}bN`Gp9zb{Hw3g$FPWk_W55Isvu4k%)>oXpR)z;S_EJE-YA{ z6t*WXn4+W*`qXm1FHgYuk(q0ihlsf=lZv{*)N{5fh9b4j2acI{G92i<9LbsboT{Gn|l@*E=5|6HMM%LU}ADle6^P z5X0B&E%>W76g*r_%@H;ovsk!KA=z6i-3J?2*5xaW4EBe$jbtcqw4<&z%-|SQa(t+E&_0zSW!k=acF7U2AfID|T zS%OruNezEQt~SLX6^l~JI5BY#!DB#5P-RY)h^W}aGYV026M?H;G6IVqL}97l=N!rj zbdez2sO7wz&R#&NDV3z!v^TZRr4pa8ypg7r&z(IY{3^7Yba&|C^jZ6}swm!C-1`CsvQN#N=f`lxIwtEB&(ri>@) z!wVagXq{SWn3%9ryjJ4{f6sOAY>}xGl=l+BqpFZOzQx9w7Mfit6myovIX})G!LhP1 zOT@G92gk%U_i{WBx63M%`1zA8Yg1plLrdx8i#W!!;M%+&6~^M%Uva`dd3P_^l@;~G zVAk}OVcz1rkOP>3BD~6vJQKa?o+Pq0o{S_gH03{G0s_>01mC={EY#q9MOQ^@=^T}h zN`SqCwLy~Q2qN{oyAwq)qSL$qUvq0n50Mk6SSgj6A{hRupEZBW?>K|$Q@Fq5OlB`I zzVW@3W>R8HOY--yvtXXQ@IryYLRWJY7Pzx{)Sz3FNJ%wFew&i2L&EQu#|%hnRR$>@ zYOQ)NnE`REES!ROoI%1Q)`nlRgZ6Or5s)C4!)R^}eMWeg=(<3LEe0_W3?8Q&ew zJYtzCLo^>9k@qS2Y^(DG`()ad`C=dmUmoMiOWf-)#UL+(=WsAa9w{6cQEDl$5r?CR zI5voDQAEHB#&Bp6(MM2VU|kK4up@?rh|*Uu5iz!~vjx;hJk|3P-!$?RUm8_5v7OYv z66;B$%dj5{Udnp<*eje3;26C% zY48h(p4TM>dPSRi$2c@B9!wIuUMxyZosUG+2OK%!ac&ziZeG+HXB}r1CbzjpJHcS5!&v>8dlXrz)=$7dVo6Mf)%NY` znqUmpA+S~w26Lw~ERU9j_^BPWzA7)+wW8YUC$>+O^(FRZat^(N`!)k|_w45340%Wn zpqxPsrYQ&?#1O|?b?3`N&71@M+qZ&{;DC`tZ{MPEpdP&MyD_RivMg2h4nSscGWPgz zs`0uHUT1H~w>aZ>zQ=r~X$XQ<<2(IXsit`@=Nq!aoS2Ltf`7=nN$+#*VOx&9>kFb6 z@^XNs^%mPfHVIwZEz}?@XZ21E{|OJiaQK&5WD12 z*-NLf9j?84Kbt(H5$B3oi9&q0*>I9zT1*@!kYY%oS0<3M?Qb!Vr~nHG4dNkUH4ep8 z6IEV~FxmCRPgqNq-N-^R1Y(rusAOLqk(ZQn$cr>Dws+C)`4rj^d>>ig0u4d7JBJb3 zp;tkPJ?cQgEn+8VkoAZLfJClnU0_Q<(5^L5EA6}0hY^UB$kUe|xb9>Bdby-om1%er z$vA8@k$*lG+m^?CW)gFQBLgSnIS$Z_&JlH*;4iu5$n$e4|H0H8;&34D{v$0Y9)r@0 z!`oP06nGS`=^Ce=-fP!Emq*uk7k90*_O@d*a|GRd+T4vQ(&%D1oX-5ZZ6UW1HDQV| zVmF{|>lNF&ga@o$j&IfS0m>K6ptujC%otaiSQv1e($5!k6Idv6w5rj%p981J=>@!b zaC(ph$dtkgOinDU2)-h7FE{#1jAM)@>}_fESmN6^ zsJ)}Id8+mVmLLETcDxz_+og?;(xp#&oKJ#bYF%xk^}+IKn@K!xZL@FU(AgP2)l)wD z+=ESf7HF<_@{CWn>tHeR#l+|5c)Pe)ZI z#t0VS+Y2Dc#+fUITxrGb>g3#%XjvsDy1G*UVk#0{gyrMpXYuw9f~M9ZF$N4Gx#!tnf?$ ziL%6dan^wmMN`@Q?(0lVXZiz1)ymq{P%xbl6#Of2GEDxKvRDLXVcN?VEXRZUO&Z~ps#z4A~0(`(oG|8Ewiabm`)kiUt=`SI@$ z`I|oEZ^DxMAvNiT{7ujLT{!TdntxpE;6_kHok4X!homgFAumsGzxQXiZ`x4x${8yXUZY zJ-tAr65NMOkDqE9)4r;QvX&rGQa6A&oTYqyl7`{Lz0>D^G07`Wj ztBvLTti1m7r6yfA{8DqAq-4AuLUG_j!QA2HXwGmqAsiaJgq6{0aCC@U8L@~w zc073jc$oF$d^SC}7=i*AH`j*a!U{__D8Z&QyxJq|#IZDzHVBtSH%gCe8$G#eQ0i(X z0INH17u$57v9$GrE)H><)LeXuEd&UK+wSBs(1zi${2Up{4RDV|l3NT$2dkvU;`?Lt zT+{IA08x9GmJCAp%6Ss=5qoaQZy|hb~TUXrDw%Df9eYlqG8kD zQAmsq@)ufRGi4OYfEBpOMTA*m!*qqhNTtg6Bmd?Ju^vfT@ZqLQjJu4=lK zK&NxYr|yB8I9?=XuqAcjz4uY(23pz#z{W(+G>_ zimi3{k5U8)P@W5p%2|o!O$3S82|_9n&{FLLMrk~wOZK6-#ScKZ2O&9{ZB8gZ4qD}_ zeikM>&YGe%6d|h54(k#_qK(R3v9;I$Qz>jX6Q&uKSuFAHv0K3wuCv7%7GW2#S{N+tnK$|Qi$ z1hb?NihQgY5o5$tT8G!6^nGop7Oyo>m+nXyZBgrjVOpD|>C@#O{m4L|0G!~Iu&j&z z2y)WW?$|Q5&V60c?nojbCj#=E`FbeOgoUtZ>E`t5XfT-V^QU)Bb&;eFz`G$4FvM`WHTH80s^(;%-Mu3ARZYl4D<> zP|8(&D@ug6h2%xG0D394bj6|y)B>eKWB&6Xpi1Qnu&@jZsUsw^Nc1PMc2q9v#U$0I zQl|A-B|W576X*R^%I#zUetZ>F^mZgMKG%)KnHpFVS5cA~nkJn^{9^?(Vv@P82n*KG z(%9YO7GgP8ETSv^Qpt&$2&nHPu}HyOs4xxG?uX7kzd&3FY=hIm>}Wi>bw-N}Q7eqi zr&y(RVVbZCE42)v?_*c=&=g~;P2@){c$)UPM-hPk_D9131R$AS@)PoE0(QtlHau;M z2o=eW!e*!?Q^X*~bj$+_uuyQ97PMXaU?`$>ds`+g^wf|+X)*;p!(_QY+_&rcV%QS= zRh}jimA>4c>4O-0=rU4ou9B9?22JgVet~V829Ebpq(x`AY7AKrAzRWp)mfxa7B~_a z(PLbUBGxWg!&qWmjVQt|-7paefx<>rxDyv*)6ir&Y2dMho*mX>;2ae3a&&T{2(VRC zvpDz&b3|lOxDi`qmwKH-0mvKa#1jd`QW!t~NJig1fDJK^;SW{aF=D>4 z5tI*oOF=@X+w!9EOG8vA4m{jTcN6uduT-(hB?FsD2_Y9&^}`SS&n2-&%pJJd)n$$G

      nASXC;);Xyny^msT_LHITjfjcS;;Uw-J5oWJzKGQf(Dk10>$Y7A|t=|?tgspzyJN;|GU?&@&Cp5-qC^B z!_CTJbBR^>@$V0tOCL6uOvwz_2zubLfdMRw!gJF> zuHe{1=@43qRjL*)m~HC07Z0A~*bxmM!T0CzpzjNY8vKJ&@!9MI+e%Oh++vk5KtLRt zr9EnPLv5>zhtlJ|f;-5)M~>!?rB(HRdHS#ZuYaewc8&l4c44>%Oh=rx3~MSY@Z;Yf z*3=Jc>W4M;!-ZS7?=ZfCyT4o-{#pYzULmyE5^*%#ro|FJJbj{4GnA3oi}AGG+YVv( z)pxu{1oqZwaJoA}&Sjh=w4f2M?T>vu=TgVTRXg)LVdEVxaA$EfnG`>;)Xk?m#hvzT z90?rC4F?Q(fM2P2xc$_VOSf!n8b$DIf?a~M>5RKy*l(uSQX)9aP3!JBeq(b?uc4)j z_5fSgXQ&e#GBciKbQgpK2oQ3C4qM@9_k^(yxC2H&r>6`KVH*@3=+sVT49B6Lm^a$N zMLfbuhJyq2!e<^*ArSHbH`A^A8=^zpi2h}#(MI*f)C1L!68x%?G%v#Ry86O0rHyBa z0r2^W??m6i5>JN~2CieQ=o&$V0VYPLXXgkKA^MTu7XL~Ulfn4~Vq6eDBI%oARFZh$ zu<61XRNZLLe6rl>qtk38+rw$Qc*tZnCsXmhaW3eS;`KN;Y2-s$L}V3qaoUK9`RL^Q ztNqzWN9SLm5bi!6NK8U_dh089y-CJ!i&p>s=u1cH1^6`VWlo$tPr$p?)c1uj zAEeYY9qCm4Ul{fDC1^%ZuFg-V*ys~lVllW)&Ous{#F0%L9qKTEt&|Zm-Oz7ZG7l8k z5X~Xc#^%$Vy&s?Nb-(H31l^mJeZ6Bt#$JYafwm_yXbkUxx@&!;|6k1pgjl zlaKF@Srf4y{FjW*Z?FZFYy1K_2B#~2AylFbClMW*iQIEL6M2y|^P%WIa(tV)!QqI6 zt6CTqJ0tM1gS~J&)467$N34o$vhehnV3MsAcOf=Mp3(T?lg~d*3c-iflQ|!Ke~kE>Iil)D^9Q5zm!r{S57e*m zN$Pa0I+u3_W2SHiW5vP8xEemI*Qn zZxWh#y2vh=!TAUfV!{v@caFouz%I_$>b{i-sUWdTS~-LI_t!!N*5sw4Lpt;vM#+`{ zFqjSWvYWH%XjIRoJ3txiP9(NvaQ3w97p+|T(Laaf7#6qIil8!?1`+e%k%QNQV8|i~ zc*5e8ftyC9N9SM!Ck>?0_kzBJWnyeckkjq*?4)9_ZW)0Eg>VfKT0x$brpfYa>Q0TN z;6pc@dwW%?00eMSi2_*IaL@XEWuzm38j1^Q=S89_P^DrMZE1s8gR;OC zbTpB}3*1<-c5Le-&vstIgD>|EF{5V%I^2N{^2W_bIT+DJEmV_DT)U6sH`}{=&$0aK zE{J-8Po{%|@Teu!=t_p+X_anuuuks)f~wOIdaxpG2;S%Yy&s=!^3(-4QND*h10>^~ zC0m-Pljs`Ay&`PQN*vp*A$U|)G4miGzz(%R+A9p~;_DSZ6KY@(imvZLKX?sj9Ek4T z-tKcA!a~BQG9O@QR*X_`Z;Dj{k9O2%MvFZxlJI`>gq$EBFZ-IEu{EBrbH`y_@FYJI zLCCdR5h%@Wo{p4GQNJZmN@c523Q7lPMngTyQ*Wcj#_Qags>;(kR?>R`w?;30*x)5Q zD`LFtFMO$T!uD^Ia}&m}x|p*%@S*T=DCrGD5Wf_CgQ#@9fhASaTWzaWrhJE|47s~W z*iJgFBx|oTLejl(kDfhjNrkxaWk9lM)55e6k$WIW?{8UT1`J_ZApuC!HMr#CP;wzI zlQA!g#RP1}B>TG(CRt%!LXO`Zox0x^^$=OIq3J*haCEr>V}lIHQ8ZG=Q6)yjdQgsJ z{kI*pP{$A&j<+WwJ!Wq~6YD&5Kp{WH-nV4jh`LlrU50xypvHbA1`OhUOpi?qLcpIK zQ1C%l$4>e5d!~z^AyLK&Q|rrxs8zMdv-oPnfs<@(qe21Vd02; zT*nDt?4ri$3}?@q?$;~EgN*$s`K)7=T-9O3PScKLVyZ$+6cM}M6t3^doGxz0{)ke^ zb+tquVNSq|oVJ(+g#7}m2O(W}(L-3EZ$B}dlj-!u#aWr=DYgR)E|0a6P&;}9 z1OpXqeB#aOHj`{)h3uVmj z1}BzSalP1h+}(Y?xwY4WmD%6h?QMP2PiUI0*eGi9Rq?H}3i?_DDa66^T~wgsFJmo~ z*Rp@aeoZx&YlE3>nIc;9C@Fnv%quYgWs2%Na;ds=f<7R*(ig8mbTzulALDi+!fQ<0P=5EDzGz!AP-RE^Elo7 zE6a=>Ul}Dx8%7HiPgGYIkqPo_Lh*7b$|EhvJ7pVn+79W0=?Wm7$RMI_h6+;=J*MOY z8Teo@N6uq9vG}igc|cdz3x46O8M%>!VFk2V>iq0qs?@g~h)7rV@m%kW&XA~T6pwn-zf4`z*; z`I|Rik0&^#Ha>qi9sbeg)XxzF0juJMGPduIT$t(NUn7xcej$TqCH0V5K8fm@8ueKs z&gXSJ58ZIiJT<(GW>&nIz!8 zfXa2RmaC3QOGltFUI1zhZh5u^a&21L5l(7L!UW?=3xvY z%Ohe4c&PJa`~o4bAaeY56B3#cnY52J-6hN3-9FSswFEgW7< zBqS7}&hWEC=pYgkCx_+UO@bLbhVBR|)1)F>)+g4cgML)>H+FkFdqldb#X3UXG?NRE zz^cBc7fSbFuqEv$@#7ME#*nYTo z^0?NR!EW%v!!;pp3993gffpva>+eiG443$Ts)wrR(j4!t!vP)%5^3Ckk2~)@McDHB9O*Yq*jwHi?InMUFOn@uiOUh?G{Y3oYz9?1waDNS90eS+( z85Phtt)wN8y1|((!P_O-WF_~ZXgjq zZr2(qJ^2xOY#qVjFu-{~0fN0jwZphI)YI%E3mb_>*E1#zNIQ2MD}dW*V5Lq=OuzFV z*1(|T6Wb6EdL|ufBM1~F!H3*ej0J+g~8sCbmu) z!0XT~m;(B7fpdY#LZO}j$-koV03EC6^L%QEz`1K=Xo26Fk*x$ey1~V4*uaTCGhr$! zwi@rW2DB=-f%Gp;Q0~LAEhTUxInt6$t`~4aD$zi1(2Y&|M$46T1SkHItV1duRj!A z2!QDnxsl+BGZ0g9OWHg=lhaMXJxFhpBGTc4-zJn#8zGMlQN0!4O2yC=3vh3BZ~NhP zaZ~xC;NT$`v5QX8cT-N@ixhx2^=x`XtCgAQUn0_nZXVj0LeGZNi#g~IB8)lYm7cka zq8gyuim){410r3$9MkP2hu~nr%ErApp+aRWS3^he9N_Fdc=$H}Ir%sq$MeTRDIGQF zqbOO07e!bIr{daPN^uAgk~c=|dJ*C>f6HEhQ69w=39%xbXtxZ1$V>Y{tCI^^&{&-N=uNZ{J@PZnE;~ct&K9RN z&Z`1M=3z^H#-rxRC5TDFgD~gfvZ(!rH>@m5c?oHBnsU!st z;ZsS0ze?{-z{Dc@Ae1uvr0;#8R;DU5yg(6WZX;-Vmy3^-&q+G5ZZV9%7qbHQVPcnp zq-04YC!|gJ8A}R`4Tvo$1>7$bF|9H~mK5A;FhYjUvjLPg)jn4g2S&4ot1{J=0mZE%D$5A@gHatp4lcd+Y=64`SdcUjn zfWt)kvNm_apj`!$mm5_WD;;qNt0^+ zuJ{X`()v-IlIi~ZHre8a+9)?n3v=!2#_R&ha1vwfi}ekWhBxR44c=#yW_}HU7*sk7 zqV=Z+mMEuO`NO_a25@ruiZyB?GS8$`!h_6l(rY@ErMd2O(*E2uN-J>gleW|XEgd>9 zl_|BkyZwDXncg}=sCH1=bc_N`MPhaGG3a0>8{L71@F^b*`^~NY`rrDWi)+{T|LWz= zTTzLE2bY!j@$U~F+z%ey4<6hPhr|B=aX9Q^3_q(mWSX6`nnbnz5dITHK245B$W4la zG?32Cbz~J)udfK)=8_kP(`#>H`}6$a80sL5rlj3vGXOsx%#WqZ&`+#cmmOF%4grh~ zk%2lV^>6n}i6<*sjMlO9pNGFVIoS~K+j1LcC0?;iW_uQ+^e@d?+w^+aQ zJixHznW|S}2_}dVF&_?M8xXiv^%v;X&-5`M9Uc6$sA}2OIE&hb-g~0P1hWLviCFELbDYaQZ0{0hONqV9YJO6~-E-xf@l;ZeMkSm0O&JURZA>HlZ zXf3-Z^wcZuP8i+0nrz!9^3--JEDtfKx+brdy;TQgT><+2P6w|xgt%2xv^qAMoFg?^ z^|_m?R*E-XLM~x4v5$(f+C<=S4BZXixiu5sc}spet|VB%r!HfxW~qSJr%%R0UqH`i zWDACm?+uQ!@z~A>%p*(U%AsSBW;QWJL#My_%~QlnKHqz={qRSvZH`eKwSdKhrgx_E zaAPvx?N1M0<0TDleQ9BmZV_UGVvp{(b^dsS^Mq!ER`y9k-;X!D4>4kEr@0(qL^->v zx4GP-?d?63^P3No4VP}7RxXe!11^o37IL{WzL38eNhJeJI1+L+@__JG$Tt@ZHFJ$> zhFe%l;7&?oz@fyeyzMb7a&~9$F?iC#k-&wsBm%~pjpSGKV_MZnl409N;B1L=g!U+6 zljt9UDDZ6qHU2_kJP4ZTv=-Px=4W@#u2Xt$1o}@{A+_?|ob=apKk_XGcz`wuTVl}gGS1Tvb3(s~%LpZI$dKxFASA@ep4sSs_H!w_@5pC#S=nTsNd&pNoCsF^l4Ia!}aJYp;%P@8k7UF(5_%`4@ zQvy-KBLQ(O;kr_4Ps)nMVTlH@UWEEqHlZr?)Me|)YX;hK@sR?xPI)6Oq!UF5%1K}Y z66ROU0$ZlpA@*i6GF~0ECy=fta9sv-YWXp04hTyD)e<0qVV!eR#}&znrE7N-_(Gd- zZ=#@0c{iaSX+Y7;rsP+Zns!In1xFHQuHuml!_J=NV#dtrx_^t*v`UywMVsZz1Sn3@kQm&RTCpK*Lkc86_pWQ#z02UDx=>bE3@wk0fTCvtXb~<8sc%wfO}D)tPz^1HEY~ zzM=tYp;;1F7%5??jFe~I$)XFfT;}1}3c+c@Y_y+P%GQ(Wvf?z)MWx1(VB}UMT9kE? zEz@XOn$)YIoMdaA24Q{1YJ#2?;=XNe1hWJ`QJC?sq)sZX%aGN|*o6qie5JHdW{CQ! z0@f`C5n(h8G*X{}`d#KAhuN57q#uGqQ3=556O^oe!(R=D&Gp9?U#UKqlsDcEm=5FdbEkdi2I zg4G0bUJ&MFEHzz+aYM3B3P$%DZ$ui!Edz108TKW}r5QC*n| zuOi6qK}oltxlBvjNQ7DN8!d`zS;0`NtiBjk7ocUocV zh?7KKPxB5Wy*N&1k#>>Cm_kt5<&Qjr{Jt2*`GrdgRw?|)i|--&5m?siZx@!{t^fLTe+ni_ z&t!_3iS>*NR z@BEmrW+NuiJ{=5M_dxzQJGq#jvP~?lclGNNd<}+39kH?=;X54-EVV>`HodJ)Z)?-q+SDd`UZCd%dRCyP1vd8{qlYc;dE3ix zd--iEza5Hb#q%*jCsB19SrX^RDRj@gjc4A*Gi&3SR{hbR?>*k$-9j7lKga-A23~XE zB?eX#>!+e-piK-6HG`4X#9ujtAkkAgW zK_%0kr(S;Q<#FG)%o`5=TM?~zF#ZKwU#L4Z+^k%9-3zaKVRbL0N(An;7dS_t3hDGU z3vfY{GS1=98aMo?B6j7VsU=J+2m0wNI%QNZBOs|RN*X367**xcSI0zDK*xs8TTS2w z*}zk=r4*rhl0OE{X#PjafUq2k-%F3}p^e$Y5fsc(OaSk~g;A9Jgxi@2?k08N*CpLJ z&8}Lsu$v3@+*3Vqz@8N~v}cZ;t__-_@MPN9jseC92@Y0;%l4-}BIpDG^t5r8^N<^HxzYrD4X?faiABc##(=JQjyMTx| ziSLz)I5lM=Y8FNBMn62N58Du-CdhECQSh{1;XT*XsY&b1q1&S2j2ykJ`d{XILy$?j(m%Wa7M(j~nx00ONi z6QHDnVfddJI zz<7y3sHEeB64q<@qlqihxPj1$TY-sC+htsS|iV*{s}cn5fUb9Z-p z7kOECH#fGw+3Nk>=EKzF)!RDc$`1Lb00=Y0$l>PpKV;(m^_PnwaHM>c!nwBc)rw>; z>tc>Mt5Z29LvtSsja7kBprNa(?Q8xoedog7kRblziwTX=6WmM6e7g|(@>CB0W60PX z7LF8C0@0W_s&)#uf?UIbOCEqV7> z$fBM0PGTbUE9li!sg-t`a(LU+R?3UJ5|tvWu*)bQ<1d1NQ7zyL1U2`;2g=U?OLszxWXZ&kp#@O1q>daM&>kAFWR;p5X9tF>7LuBaRv~g6T_F?JM8nk5@M+fIC&Qpi2YnTYN>S*? zakJrDr)fB)wpcZIH*x*d0c;0qyD^wWg(Su23U+?zjJ(NvvUnxi3Oxh7hS?wFjuUx` z_He{?G{ZeB>rj>FgF_s+g%EW`o|uz`$1}<)^ugbO?!^L$U?46?TlP!3imz>u-J%Sk zAKbIrE$KdX3D8cl0jMM9g$35R?Eu#4&DwQePS3g{0dX0$?Jz?2rtMUjrR&n8b6E}bZK zj_*F&z!t+7pBoFB%Uol(?1G(anw(_u-D(Z*cWw-BXe|BkUgyRiZXmv#;Y#wRo4olu zeN%x`OWsaO{;sLyu+zD569w5mf47t0&y(N(3Js_$(P4d4>DGpXsafj`<7&VPX;?kR zcl*^B2*F|uJqCFD)ge9}L;q~=QD7M;T73w&gFR|M(LG~x4kB7&0(4NkYZt<^M zD1Y;d3MkYC+WZt=TH$cmc;fzQtr3)e*P_v_3hHW$lu?%e$%tpf+<=bw})*a1jq zW#zXkYbIdZ=hMfdSC}ivstlf0ym^Kk{WHnOzPi>_Cqh%IQN^+A17x62mctpR1tAkN zgkcJXuQK8YnbyjN_gh$_%cDGf;H-Svo2$|a^8$4kXD=DcRx0N`Q-JwzAYD4fgfPXgfNKG8 zp|)Xw)dpuwGdx3dU$R>&0DoEZ^nA26f-7Sgc+|peQZUoRKZz3#=#Cw^2S&B*A8qmM%;H@|7>849K!La?5KG&*RPdOaA+MUFZo*gmf7dxOL%jSrrCM{OITs`j?Y z$c{2o+4uqDTGyWtR@Poh|NkF*@A4aGw&aOv+yl?t0xo9OHpcjh{kX{zm6TM^s}ie= zqNoz5DUnT5C8@6)LXu39*-A1wnWQMTrZ!%B;gvBk;H5DeuMBu>*c)$WVHogcHeUD- zuoq)5y!Y=HkMsB*`JkjKb+r;zV&?aqN1QkjapJ^@h+|mFsjr3XL=OulL8NXV9 z_B9|f-kRxz5=5L*DA=`RS9rIARC_U~ew5t%q)-PFNMbhrV3P*O90i~vFEB=lB*2A% zYopnBU|iO-NE1n6NWUVfoy?_TE%4Smkl~V8CY_VnC|eIKvid;^@9X2VnhCL zXq@~mtRyu3er5gNH?9iA|4S|`3F*Bbmb7JNEO&z5Tab?R7Ixou>EV+}N8fhU*ha~$ z)?oF_$*MPZ6SxSBsU6&F5QdKRn#w+qD&h>EPYY!?o?=!P@$2!GtcWThf4dh4cJ_ zn}!2ifC3&<_@-I<65ix|LUA;?>sdWrSWK_jjI35rXIBAQS2a9`mc#MQe zy0HK7_(|~t)6>FE`_7{_GsNKphY5CgJ3CBYI92(qfYd}FnB2)Nm$@=F>s%8g*d}dm z1)j>xLU}ZYd(4>Ko;x&@Gusr7T0SdwFN+PF)xa&(RNHl6^zrs8tk8HS9`n5A9otbj z$}%M_FiDIGevux`T<;yp5tkqDB}|b>MAhPPUJ%LG&q0tDB`^7g;6Tys;e-vAmpyp? zPfv7g>^4&EQL(h!$1rIZgW=0>Rg0#b689sEs>*fX0XbvaIHP#Lm;{O6f)Dv;#oEbU zd!hL97D{zaUiLvH+o=DbcL0~g2XKami;Igksfj`ZdOyA&FA{9>E8#im5+(b{JOXM42k#gw$&ZsCb7Nl&JnUW(8p!@6si3iA< z;O6K>vOKyx*~699;>@!J>q~cZ_7K9T-yOor%Ms|wC3bMuf0WB1j`OqNSx%7+pd^t3 z=NKZ67kiuJ^0dHeOzC(QrBFL0l@uM2pkIOzkn(a{nhARpQ{4u8YnTPNUpoBqbD+{_ z*o9GVMCTjZ=*WddfUVkKc0{WgO2RGSm+7_PfO{e93j<=Gu*_646WsYH*IxcVSg-j1 z@0u66V^GJV&M6aVgi9M(g&+T0zs%i47}@Qcw-EhilJw&;w~HvOBjt&40;UZI4PAUb z%mt3}CetB4E^lJdsOShpRP*x2x4+WWjYBIfZc5QuGH>2=>fS^g^hF1E#&31^F9w7C zVjICuydo1(P0Pjazqt9;m&KFqWm<+_^`Ptf zn2GBbh+{T#5~v&EKVy_|j8afCSxax)PXMr-;^&Y4?}z`<|JJ^CjsLeA7t%+#3%0j1K*a66!RxS+vJOA~ z_v1?X&Nqx7SJHwhOk{zgUe4_*w))t$AgmIi=h5mGl6ySfS-!WnzP9rm!j_`v!P?H_ z)oqv#U_)3gHkY?xQFyYxyj5&I+1lLLUWJN6S1xKX&D(u8ge)y1?m=#g%f~UpIrh7V zz2q6H?clHrv#_YJIsUkka^d3^jX3-jucR&!!x~yyYf(b)S!phEAD4>sJD1G`ei(L6 zk9vDp4sE5b^un}%&2O1Jp&b@AT#kYypIb=vhrGsP?qDj{k{qoQIw2f0w9evrvoVp9 zW~7V?$TBl%%km=zhvA?P_Qf6G64)^+j=4Z#+YYzHKGs;ViNT@DQV)%ajm;go=N*xj zySP+I>@#rkH)EI>z`}*!mO)alVhX+P;>KkQK$1I}2t0hs!24Z|!2l$e>N5k!F^P)| zK!rx&Nd{}s1*`~gK!8|dBW7% z_jd-{!Y$qX)~8-W1sT zwfDG{*2=e4+xIS$TM$fgg?(v)&bww_m z$)&S6rRW|9ln- z{;R9_1eaoP4eRbtTQy=WA614U!bD8UjrE~ii^3v-0{Gi2KE>^7@M)QUlaXJ|;H9lp z^e7}Yca~Hd{RT0U&I0K%uzDiwh-i67c@bDF1BFHGU{nMGkgFJrLXJfuUJ~Ez1RTy? zYreh<1O8Rb-5zY3pI2!r{YtY5Qd!uKmm`D`I(tW)>uVrT#)}Ar4QxSr;&#W$`yDhL zWb_%(0K>Z%qdU4|vZMf&*W)WC*LQ=4;LC#Vdca*eo3ca^AyP=*#-VaL`6%VgdJ)rV zJrYwxqN2_NwUO0@k(%U9Mt+Hp&lEZE-T33AD#I8%Rxor{xHM)Z%(KBEY;0amkYI#i zOfoH$Lny1132I$JBuIBz)Lc!Cp3cNLzOn(~5JyF*116&_QEcr1P%|l3>kpxnP=PQ~ zgN=Mf1n5DTOw-Hmwok_;^#$*?2pGyt8pkCQdk79fay5bqD6RLdca$lz=xVvtd2 zhoOA26r25F`O)f&2Wwlaj7`g=p{vA40K$^b$SGX9E)wF!MUbqXK901&r$@Z$To^ ziIC@S?XNaqYg{kGuB|3AK$!LZ#?!~KCyr5jDwlh*nU|9On`OZI>Vq9d$c_;c;z(5n zk^q#cQxe~m*ff$_ErSxe-e_xQy;TuJHbfw}JVe5r57Np4@#V4td|tQ~kmlZMT4?UB z3R*+}YfYF9PV$7=c(VBprXuHtk?Ff@u;RT20(GrUbx^)Y1#op3N{nUDST1Y*yUHDM zj+M|UwFhh=vuX&anXK)xC4MTME-j(@8*Zx~NXirHR$|zp-AwnILAGcU@n6-Za{}_W z`PBMT9SC^iKGZ7Fs#+l)$jkWOe2_Qly9o_$r}LB}sKj+_KZh>@b*-Y<(^aA|*u4gk$fojU& zLtlyURTSAsRiW=lnm3JdeC1z+&lTKN-TSP%!&}x7K+A=_oJpi)^Qfz_W+@!AdED4~ zvS~(hh5Ix6(_qpi!Yrm$-34Sn7mR(uwws(sJmN+llo{}1dvBi{$hZ1??znjGJIh9# zxen)}ifR(k4>`1vQH^f0%@uAJC4F8J^|LYb&&ri ziiw#Xmw+-fv z>nzE$cQiV)qXr;m8dh!P&{XqyvX$aJOW1pZl_4uGA_s0PACzgZR$qY*Vn-e_LCxw1X)i#!v{b7#5t}88Py~WRof83) zHKO}%Ibx(00$&D0YA9g=)y5F2k0=88Y~y@JpP)d&qlPdU?Abp}3Q|-!STg@L6K9nL z1~jXDWHZSP6&TaC5yqPkh)_le>n1R%R+fp6BW;r9#0%e#Y@Xo9XIFJgOXa3moS#rU zyDBj?25LF|w^4v*O~KN-s$S}i?F3}7Vw}zdHNH~zMm|4&NqHS+Ob(RIRbg}`WF+Fn zx>Ohvi{~Z%UdnOp`J+|e)mZ>kWs&1rsTn~{XvYO^u*H`LSnf|+_0cc+ zm)f>X2MecET<|%Xbd2Gp=w{-p5bidW_*T8QRzyuaU5}Jr0xvXI>>Zyj1tq1q*FNA` z(DW(n2}%t91U^cLAIv8*h4^g85=>!EAf%HaB5sqCGpdCyDX?!ydsYfG^V!Z z4otS<@Q$<#@VG!&ExnEE^#lEhIi3F1zqM6=R1uZ12DZ5;u&JxSwW`v_05B zjx@)CWa&I+`UGV8mmm(fOYPyr8=1#nO3DS?vqKf!ouenXC`Z}urfQ2r<1lm=V-KWN z(-&f`R#MzUz;p|c7%^p!#0HmQt6ZXkN*iLscs91i>{*60CZYA>pCogyhy zfu&0+TI#b_*-c8@FkOSt71mZz8!I%5ABp13#lm#Rq`Fly<(f+t-f4sjwCP4X>EZR*0 zWnqKa9PnlCj?D!m8oT-RIs>tqUrUhseO%9a!nHe;3#nW-!qrICcQL2QxOZDffRY5j z#n7`=+&G2wPu$Ao^~=HWhP_y`9JE%m#%OpF(&I354D!Jsx1{Sxdw7P3G-^c0ofC%B zYcVe1IJw`)?N9vyYDuWQrYc@RkSlXKS&<7ymmouQ7pFuPF-D6P(n=j_VuGj85^(i6 z#R>i}4N5E{Kv08BMHi1SlxSCwaLUwTpAEj; z8;#@*4>+j8E{||qD*Q`9PEh4Ry>!%uQkxPs0{Q^R<%pTL$sA`#=OZaVZlH52gZ?y^ zwT#XWB2Z}vk9nKogwPNdIYOk;9#YeB{~(iV^n+kben8Qh1xZLj@+IXYLOs~n7h((} zKvNoD=-w|iG~deGkhW8+s3_O+bSWW0(~cAPx4Q6#D5*FoSO^Toie6M8nK@i~ z`1r7Q5d3Tz;d1}b>9aEKZWRf^O#}uh_6XfFbq@~Y@LA*A#3!DT1v3aq8uE5~4~9XL zVULA{<&Fkn=h;Ed@`3y5)1yF^a^X(wEX8Z2-KAJS3AT#d<$cR;qVffZEYnD7fW6~G zS<8eiLQou#Ki(U>fF z8%eU2>L@gn_K936*umoIm)L@&_88L*KMpV&)@ul$5ja}Dd^Lyr(Kb&X`17nJ*W( zc544Ay^{^HHKo1%WOH+4Yv%<9mKG$>ylZ}Do8x#|#^Hix!GKq(%c}g;aJIfEm<*DF zA!{T#sqtbWqHJRRtTLV3tLv*PJFE8*Ar1nR4Y?i6Jm;xTZ0x)UXRvAvR>H{$?7^9F+D#w zNED>-2DW^*sX{Xv^qF%NqLNkQ=1J^{BzLHbt(~w^L+4>8e-I#>N|t}5IDib~J5_j) z-5pOf%uw|T*+W^95N8cEf^zJ4#Lblz6o7ZndrYN<^csBa={qAt)N7edw0m%lRR}U) zd0oY>FU6b7J1Y-A%3$iD%`#ZeH{EKh2C=lSO9i?v6~KOi4s5rCDX8t$=5s;&U(z|p@O`f$i(7<{;K7^N)iS-s#I9ZRY zg1aOt7seFLWa_wrsjy3c47Z;L6%ndcdF|}JZetgF0$&VBjUD80#F0kCv~41Of`Tf9 zR@StT{X+(N)WuC&sYIz~TkMf5n!hvv0%r@6%xm<2S9SIg!mLsS`GGZOFT_yPy{I$B zhLA9bsnragF&Yc1`9YR~>6(h%#07OJ#oYVR(z}N=aK$jmY^-*iSYx`Evqk16XjzqfVMM zDHe@%nLbNi!iyY(5i5)nadj8GhMf7>Ct0oja9-Q?Kdd3Oblc;apyj$~B3<;y8>fP-kvzwGtBRxozIibY1 z00TGQa9_zfu7D_$3E)P-pUKWyd+TMhu-k&X!vFlX*ougcnW-&k%g>4VIu|e`j0?#YEdM1UExuP_ky;XXAn_IC?^}rK`3L z>oVKqM}Y@aJ{{@$tVIeUb(F5*-b-nOaXpLQSam6;lVXcuY&xMrhuL{gEHIhbbq@o* zW)q?oJbZROQacpbl9n-8)0TIhY`<99c(l2`N&`$(om^S2sLCKh6$U{ z%d#fw()*R^w1Hbhk8+YrriApN@MHmM;HuON&r*i|lq}1nt6+)>m#ST?y|{SRJ{&-t z@rQmE7rDpPvA52U+>11j%FamCRT=5fm=u^+P)@|wSW#(12$K{643DZ`T+gvNL{5z+ zWy7v`!M!u2{t~F7o>AlNo$xA-eBmTFfF;9?EW+rCHo>J7hA5<9lJiuqyCv(D@`$sX zn!&oqr)QTspwA*_>EWn>v9HsorhZ5OUB!8n==JO4w#W4Z8i2~TYL|!7>r)y zxiRBH*;gofA1HSAOG}1h&A<(T`_^5$oQ4TRI>daC?YQ}B-1iCX-?$;?+qfIzT=RY= zyMT)h?m2?00|jP5UAKXG;)@RtkX_t&;@}Yzm*f_%o8!#=%pK-?8U`SzBVzsV&d%Pq z2i!efNJ3Yv@4QA@@~g{D(*Xsnsq&uhFQMW9?36=e0qKB;QaE)_OGFlNj?Lsu3B{Cv zp?8is6_wR&G$j^k(iDCk**Cj*s|&hUGIlZwxG0fAQmQ80oQTt<-ZoM-W#Y_TZ7FB{ zM%_sy`IdSYtW`DyQZ*Tw{+0)c^$b2{d!3=3$Mdo&tlg>*h_K`Bc{mxRpftkrb(Xt7 zJ-v+r@F4`C2UozE^Y9Sb0L}#T);}28kwHbyd+8j-CdIV@Mt3UqauDFsk}tg3noYY% zA{+t|^1tM+H`_|3>uhPe5YX}7RyykSIlqkG7M!&eCDSl-X)v5nerk``#_pEV8p#3J z)OGxns%Hr9cZ#{|vCj25j5Usog~tf9 zv=tg2Zb(}o7c<53L>eMqvs8ev*8!y zx?mIwopWS>9u^x=X^Qo3?+nSmG8v$Gw{kfTJsWx%Z6zaNclsDD6xGWnNuZe_N$e(Z z)Mm<3N2K_88w)CQS7*og!cSN7!%p)gHq5cl99kiKTg&BpY|wYxVXcm@GEW%QS>sDl zL1>?ej~q6+*D`W)vH=gO2tmZPZn@uR4zq}I%%9*ujMb6rZSJ%c+YA8|!L4kY1fSfV z#REERCmzv_a~mu*tY^g1@C>elStELAJCrs`a|gbVt6dG$0SFbd4OIUi$;M%JiVkM>WI~d!KEIKF8g7iWON+ZjAW661C+E=B18u?|y|JP80T$7LFKvX|t@zl7hJx_yaKdR%-S!6p@jo~G3 zj}q%Q&tfs}+@-7L!86gL?%qpm$&YZM1$dej!y_J%i3_vR8(hZG#yne-79o?QRWR?Z<+t%A^g5igSj1 zX9u{}%0G!$y3j5S+$FkYQBIdHs>%H{<1PrVX(baa`{u_oNON< z|F&A=Ahm(jxUfmBmO-js2c?4tw%)k!;!6uOO&7!0B&Jb2kCOl1d1d^+r_+Mnos$Pe>a@P15+T7I43br=5U4Dxp zK`mU(PRAa*j-6=W=iOm1?JEa9b9D?blz5}+cS-QbbGl_Rd;=6nxksOegbJwdiBCNrlamTgmvTvy)Au>~VQfJimm%L#rSWSZ6 zhHhSfHi}g*ZhtwIf)-csOOXz&kFY_xOdHFATx}=|42gj5+Eg~Fc|dV+&k($U7ug~F zxp5ETL1ze?4ptDT`t4+$DZ#;?Xvz*zvGp0@x*}Ll@C^5X!-!lGQ>270UT${}x%n24 z-h{r%T)5c}&U*{sFd?Ufh@CJ8HO!g9rBKk%aQV#A6twIagl2g582;x5z*!g8?^Ya0 z8(&{+!hsm7$vpCj%?^XI0+g4X!78qAq_ZH}G%&`%U!@)&nXb9A(P``VaIi;ZVqwf( zb8JHGGxe+4*!6~$v42|VNj)5!9IA*+rJt3(@FKf*r7h`b~;Xod>VTyvj9=RCKA2KUo_~gsS!lrO>l#!L1$>D1sQ%oyqjH zUbTB`3+)*V-zi?w?{Txm^sm#p&801*-^++Wn-g%t+Ev<0+iZSY|K_KL9w%`{gILWw z2|*KUF%L)48)R3oIq+AObsva)({m#Xj?3{QBoKqxlZ2o?K>wSgh)<#GOco83CZtJB z<=rJhGWl9E_bp4nIl@uY5r<)Ae)eD<;Yzuq0ymQHxfBpV??G(BcH(&l4WswBvL!|u zvMwEaIz#gm;@BH(-eS9x7Nckh_C0NU2a-p>QIn(7i3lSHBdHfnCs}ww%6=l9xSlU$ zEMAt=eyp&27>}Hnu(8CFr-%6MhGS_n%a2;*@%e9aeIvH&={uU+^b#?rytWvJ3#7&d z?UcK@JwFC70hl$HB8n(t?(2mV1^D4`;j1;72$sLQq=u0SDen1(f-WOtiOr3CDSl)> zL2Zt!r4nd7vC(jL+8=qaVIlN9>tNy7uRHZ&cLJ*w)-zu7+2Hvmj1>X#xp~K6%m#!} z#XE-K6ygQBBgf$(a=#efQetl4`rz}I&SCP<@tHhwnlBj~A|tw22&cwBT=LQ`%F>4A zK!CEp3sb&rd7iP2yJvX;z>^8HdF#7}CHpsDa4SGtRnZThEf1CdBe7F%ZqG+XK5 zm?b~w(QLkk$V$k){SLx6T66Hup+c|DO(ID;ec5i~%z|k#>GgLy7{W{{p{Dx-xd#T@ zHwYd`9opP|UB6(S^Ti{{a6bP@wlJUvrV2x^Je1B2FA1Ny~>((&-oi z@2q3~O@<+!3rM{s9U+t}%&4X=d)k`65uW-4vjFT1fIh0{n*V&tvYL!M$1b5z4Ag+} zaB46lHTiT9TYmDy%YXw=b|?_^T#5M0yE!b)L=8_h=Nq2Rv-cGdgPeNEP8!9=BQ&)5|5%_+8)V`Q+61*k-elJg%<)a z2qg(#mGd;uN@;jf;L7IllCTf$twABDwFGF*ra^bR2ualzcV296ZEUV??L0?jh#y|u+t|9lx-}oHlSXQCDvP|>(hTk6 z$iIkeNRS_}gdcZ1a*FDj?GbWMLYKv%D^6G~S6ns(f*C-J`zWUlDmGHNCHHo49ZQxm zYgfIB010-f@b4B%SH&97Ea6|)X`?NdqFo#1%q_KAYY1Y8*?T^KcvURUBgD}YTUR+A zOpJ(OdPCum;oPZ1p|HEdDO*Mtmflc&np+K57E#hiL#v;J$1qzJgKQ8eGahlI!MtFAJY z>pTA6fAqinXaC86aP1oZpKDABZYhDXX)Px9{p4oc)Wv| zkW@nYX2q=Jn7}*5KZir$?JpLJ+c$6B)Yr@Eyh;4u$y_*p`^k+P-~INJyPw|QSYbjJ z(YlJwC->IZR*JbBi;GV`Us+tdzjI$-e9=ZSVq_vgdR!)|?erHHS0B%@0YZ>fApRXTP!$xXxQS5I3C3c`URUC? zxxr=Ly*;GqI6tK-Djqh%$WObw_mG`WVl8~%t!QBv{D=)Y+aHtA1-iOT*6%K+gU>J#U)^0ajNM%{ zgy%`<|ILs8`d|MKy=&L_|7Ud+*Y8{+L}0XdPnc?5euV_|ti_N2{g{CMV*+~HRfRNW zA8(Dp0?Xvn9XNs=pLR~L?}3!TN{d`O-Fckh!vy_V@qBRZ+W|=v0jbqRyf;;uy^puX zeD!7VWP6#1fvTqp^vFjKuW1w1vMF6Y9K-(<&PypI;s-Of?94| z{sm(eupo_y|HV&y#Xw_da39G{kGr?p=e@RxKPbU(k%N9kQ+gy>+$;Uq!D~q5UMV1n z=09tGkCTvtwy3b7OicLB3<{4rybMoHT0Y~tx$G*k4iOqLQdct?j07jw#qz4&&Jb%i zgT6{^Kyis!VX#i!CytfwI6v*F=qjGHP?3=1WWm|4>&@<(0F+xsZ)6HW^4GV?lZW z3Py=Sj3AOjENCEeOXS>nh0tuC&Knjm?jfQW&PHwNK!#uZ8M5+zt2l@QlO&FW6cIa6 zn=C)S?dx&D7h&vRcTX=k^hP;`eLHhqS#C(2)b-6E5TMXriDv7RxQ3o1nid_F*{UBm zFi8+RkqRW!9~DP~3;txmOD4h~RSm%HURXx5DD#MP#0>5LA;=jA&i52j+b6c~?hXTn zb%u2o1TlaZV5j2%-Gr#fFc6q;kWh~Viila{=as}oG)M(hu~+VaIAjtfQxib`z-yww zI4;eD8wLv-7$$EtK(b9qh)gH13-M#o_AqR0%rJK25jGwsUqRN}sL(nhQAFm^J_fg6 zG9fD-_x1s(Q%-3h?c#x)@c>HnOu@(=SnVz);CI*ut_XA9>*8f^Fuc1c&&~Uoa%VR(6HGd@j~LI zeen6$-LJlB|IKI)do68B1raPhd7E5meMLk&(k==u?t?Y^G|1dIJcsnfHiMgPn7Apo z+NURnbC6nROLIC(93t@fT(QV*WFRW?M8pc0%CrP(k3<9FgxeDH%PAA>_mJKnyC){n zrB~x9#mn7U(Q@nNH=WL{n_qtZ%~#$1ulGLx;$~<6y`klXt#%FADU{y~Ng}(b(#F=#deK6PfFoG}`rQNM3&LuBPSO$AQrcTUYNKMex8H*W=16#4WHHw| zk;IlsoN}GPmqxWFh$Xi=j*8KW^bJ}RD_4s1;_ka4nj08S6XD1J7Ez#t98%JAXnv#+ z`al#1=g>B=W*DaKBB4DNvdAKJgnk2o2&wH zjj`g28eIH&8E(U&`ln*wR0FVcY1L8dp2a5Em?6(W;?Rwlxs&ElU7=sxTYb3v;~Lz~ zw^x?eS1~RmK=>I3M4uv{kt<4s0A!O7(&`P%1@HkcBot6#UFMcGFgt3WVK% zn4>>O_yBHQp!^O??OP1>#qz!FjrAuxoN&MQD5KzD(A#H5b*K!dxZsJsn`WS@cbSHE zHg=ZRK~n1*PkruoY9>k4z>w=4l+Ro)SX7WJ6M6__CTDhp1rNXQ1~KjfZZNTAQw<~K zXdd;!scJzekH9c-Nd}1CGei9@C9jL#RpZaU-|vRe-H%`2a-iyfGA*+OL;+Kng3qfw z_rc-qiUaiVkt<~eT&S*uogVGN*dv@h<|bA}YIC7&ZgD3S(lvfksi)Y0Oe(XAt+Y*! z!({vXyW7|doxo2{|9(fUU>_^QX?OcVtNUfm)0kKeTrHPPvu@W~xb%kH6{HP~X#9*3t%?cV`-7_I zWJ2c@#R(=z+G44w>vnf=25!G%&$>-T&q5{jJu6b`x{f=!IOu7|99EDy(=TgBO_NMr z&!Sac4cVezV#Flo`T=x|*>ie)4x11mRS|;p@buN(^|jc9|^2Y>prAQC^MfP=xTT z9VW}Vb{9L8SK~UQFq*YLUDv&t~UzYS$m6`hWF^$Nz z>LgSaaG^tCgA^s!o8o-;e)sB(M45lziGyG-4hkb6^W&I?nw zMrv+q%qV^8wn(c@Z5bVx+LG0zI@MdrRT@Ml#41+FNS?mn`QPtFtjpYrn2mKVj*uQI zsY%laP91Sd5%UeJ_jN^|7AA3$42=g3b6Ri3P-xE zQsZ=Ll?qeL_!+ck#>@LR7&C?-ij*zo0Afh)_iXSYjF!X z0s>2@6Mhb_8qcfXK2`Vd4BBm2eQIHC?y>AAEQl4%NC!Z0M22;l!>6wmd0A=4XQCXs zDR_9+k3|g)Nvl|OP$H#?-w=)0mm(-(q_JA9qS{q`1SCQZOFe-D(&eZh;GhhdroPOG zh7&C$3}0XBgf(1a* z$+x9=Lr~&EA>_0mWC`bYnP{D;giYAU9s^~biyh-SencMR*GH&_n-^-it<(;g^g3d4 zqzNYps86#rIYV*d!32mX&4^i@$Eh$YMc*H0O%B~qOa#o>Z};>bgY4>1Id9(VFN^Z9 zIz?i|*;n6mCNgD2Y+l4vp$l+gA~-m8Ws#6HsHHi4etyF@)=u74A|j+k2WcvL@cts? z?97>M9Rg~L=bT8?q62mI5~+zpC|ODHa8S-*AguPxPDyS4qjYaz6ksD=I8=-$WKY<1 z>A2yf;B8LNeCw+ZcIIc`z6umM^M!et8sD77Y4FW*v*KG;=0;qU@GF=op;sIDV6bb; z%2c@3vN>kC@?T&@F{)9`WqNU>v@(79vf@F4B?w$UU5JT_H+_>-_Mi_na7<;js_1JD z!fSvqJ9SjCd5Lyp{hJ!3TwNtRBiQNoj#@flei%_!30P1(F3LxW_S?@Z?<6Kl*747M zkHaeV0kYt4)1B)Wq>}0F#`&Z@~LrfYy<+)cSYr<+O!zIlPXxYxv?ni%5}+CDNyxo)Ym80 z;6?@q3p4`%f^ysZ%`&2SrW##C(Sw$%sSSc6Z9a4>H8|6*r_{I2x&Q+!j@GO%)iBJ1 z@yb~Wm-ZnF+H^qKK%j_DS*a05nMKD!akn^{g5aN52)-hVM0A0a(Og2pp&vfGJ{GA& z57-d|`n>qAxEu!+i&8YPZ2b(eL_G%hh7vkMLwzIl4MrZzQS(+Zzyxg|hzW#uNf3`x5JSzeF#dv58=N{eo;J-dF_;MZDit|(PL_fc<`b8o z`VPoCS=Cx*F6A#GWI2uhWXHXHgO6+il#VV+dZxUx`8%q6_pJ50?(y^1W%5{iuNv?+ z-7%X-aNI5}ayKQ0ShXy_>L9Hie2p#E-49L8Q$kKntDB&>se{cyR;OrF(g(gDl9$*M zC8`M@y{+!VHhw`>5~4WzJEmg`bDhslcpT?B(uW6T$0sb#5uS30xxR)}8#&zq6clR^ z7%6R?mWe9>1z55Cw6L>_KKo=HI45a8SoDWltHDT{QgEhl?yTF;1cv!L-SHwh_u>uA#HW~pCrQ^oEl?`CwU z?J4Zh6RCQP1k0sVEyWPrQ=+RflU0(w07=*GHWD&9EsN4XcL0VIeL;#wD_9g~qUicz zrmdHo3!G7+XJdd8LF>~pMT50L(Qqz7s7~+TvRFe}0$>b>)eLDlgG)Wmm>GG1#5CBo zNtY(@o$QmHUhf!)h7O3d@CfG~!CkzCd?8EVWv0pm@R8Oc|sKxsx-?)#D+^#5noIJrcK67b!MNAvG$*AHUgsu15g;9azc1M#o&AnW~rl75P01< zGiCLvbTSgMm4o~mdJNDjn}p|6KyOnsOBI`$L=`9ZBC zEOp+^M1&p#^g0pY`4rIGM9flU>_lXEHrk0RfNCrhKM81!?k0}e*=kkfjDchnY%nGC zJX`aIu-PhAQD)9SfJT+^l4j|?9lg=IhjL)8d=nHOOCKR847EA@ql#}meY%e=$)<(3 z_^!5Uz}TwwhqJ)+Lu4~JNnG3%oRSSADwLS!@MHOG?GW7Fjl;1BjlJNwmW~hG?D(Q+ z&^EF{?guNrW))Xv$~8lTyIwwyAwGP|PgHdHtG0P@LYt=f?HC-y#`u|{dAg@f)A}lO z**L{hHcmISX&Qf8IVYY1ay=ZIruh}|*lB`3c4hNb@t5=6SD-C!S;CJs#55-^kSBvc zaULFpv;fRfC~0C!G?&FqIoZ+OIOD^#5>aoIOeZ_L`V+bQk^n5qyH?t1K6cRA$oncc z&E^dc=^(4zG)mS*R*Gnh-yES4B?`#2Qov$jWvxKYLu6UQHrHf82)Fs(dZ7Vy&%IM& z>M?Iw_fpM8hq|?fIpl;2|70?+1`jgX&d^fB^1K)}W*nJnitl}B$^bKsO{>6uCfRDP zHabzZ-uvK0tj;txsj;A;dRH46_q*?XU=+DCjf)jD-_X@Y#ZBaU9~EW&Orv52&7agb zs)^Pu6PRZM{ZiMzR^ zvcn<=H)K1C!c%WzI0-=`h1@I|2I#HZ4G*3E1v7i$Vk}91DV6JUTEzj(w~Gx;U6tfm zTBI_vNTp#>#f}fhBNf9qvw zFTD_`z@Id-;Z~x`hj!os1q7sXPGG}M;2jqRU^E-WoQMENe|>UHj-KK^VE0EkzjOH)~xS z8=4lfHRMxa)?!9@XIbDZN9f7#&I;Vrb5VdoJ#8o?yd@y%zD8y^MP4A?vdVIa4oTz0n4a?)#n7ZO!M73qt1K=SY<}}T>%>dqD%S)OGz7_is`)p% z$hsCy8>6D7I&;*P)kauHY0-?>)d!ub6{pd<|w>lz=t-K$Am1trwLNMviRI=3) zO9HH?Y%#Hjri_3-&bg(ORCBUFXSmI&DM50LB{)*lpdB>QlthCXE zY}8m`(I1k8cW%-5!1qjp2o#)3kwkh#CI}@{sfqw4-s%+OwH3+;#!>-B3@N`R23&nm zgR)Sk4K(x-d%t!fcNM2fDdT~)frTt{OFLWFs>{&Ni(g3##Lc*+n=SshUIqFIxD4AK zSUGUnj;mk3CD+0JEOWFX()^vxRQ-^DRr41z9e!97>3ZdRp2{%#4|Gn&JRSs@iaa%$ zlQs2QS(X*)HcEx>tO8FOPEaqu-$L9;{gSlPGf`hqWQ;%KVj|~7CB*6(5)rH4-UDK# z;RLbr`z;VF^-G9VP4AaNERQ`(c$Je7qE)`U2duK)1gZS_7C2?~5=!L+JYe+ard6J~ zlu#LrxQxxb_Ir%&<=q5hA5_ox5%tHo>A`2X+5UkLSD zPh-MuP^`j_|NVFy)W_SPKHdh^EpRj5>f`NIBsj-q9Nd>NBmBqPps)qSHNG2ii_=2! z<;|P+z1ZvwU*gPiq1fu~Ukq@RyL|*tF}XrxWx4qM7dL(9-K*p1oLpwzh3| zz|8Z=dk<-Ak5Byl^ZdP&_)zk~!!o-&c%3?0wXy$x&6Ic@z13sHyC;xO9mg4`2(jty zoypxTeMuLq5aK$dbO{1|E$5utXK&=!-LSKnZyNdi?+?E0e)0LuuWs#r zvG>&%w?5y$_0_w*Y2>xtzH;L-yGG-+-yHFLPOo1PWQ8lIXb{Kk8FF6;j*xJ34R~z? zLyedr^x`eKlgSX$Z6CHVPsKC6q{(Ke-@`3XH1p;+gUosz%a{ANe}D6vFK>N)`-@w* zZhy7=`scjM4LjvCyRALP%aNo2 zWN$eLrM|(_y}zY>5;rO&_jZ9ycl{nId{6Gv0$8+r;_?x5`3W)%u;T_QWJ^|=acTE! zp_pC-$ewuvnGQ^5Jim}_ExVwL#T{=E7M(TY20%vNf)Q?wz~$8DO2NZY+}I=cY?0L@ zo)B%NllkKD#)}`eHl7+`5f%vzKRJV!O>)uJTU@mh#KY?wCxaUtNCOApUg+Wnyw1eM z(HGx6z{Rz;bi4v_24-mM+OVj9;z&?MU=Lix3p4Qlzc}w9-Fc@tKzO9z=ENIUcDrX6 zxM#!7p0T^1WL>Cd!FKVKxAbB5_Xph(&c)d!C>E5+Q!Ly%#p}&@gARYA+g&71kMi@JA%y{M1+oULmIAv0$Zdc!S8;(&p@7!pGj^Wu^# z8cDYLMRIz}{h=v+^am%<7Q6){(Fc>?sYniLlTn)Jd{~`~c0!q!k192c$RV=;gA7Sw z#OinB<90~6qX4G?^OVtVzUK{h;@=m$2;bTY(7bu@fZOa;OK*^Pt_ZL;LM<Bg2L@uC}K!$@{h&6tc67Yqjq^c6quuCb%XXrZTk!r|e5Z;93xXf-4pPpUz zk;#o!8{^kB5^d&c685HeA>f2pRVi?L1V8}}VQeXE_p&t0vC1?tcNVEOGtdl+%VB1w zjIn*&%PA6N00YcmGq$z*yg}KlpPV0W93;{zZE?jzRaU6grtZC=2|wUR?z{+0O}^zy zZdFNfl>qN~r6azgvmj@?chWn1hAv(wIa?vNLW2|io4zST zAZ{{wX(dS}mUrJky7ibkK=z>TWNHjs@Xh@+40u~^+@&eyIntZFscnML0Eq;^=X4Ax=%xw&B;Ykgp?|kQ;E$o=2E;^pZY#(&30F^C zY&tTdchvk8eUlhX3=^OdJ9!gUP&4J^(;p_UK7sxC2J5pyu~#89b_>1;%f$5(<#eCJbEL7T1FwfqJGe{C$Q<8I*CXOlRVU^j7Wom;Nc9{&mu!pu)+ zUfVSeU$|KYFov1g6==>7ti!#5q*)WWQUz^2DX`HiFr}^#gr$Zb)ek<3 zl&GG|wK|g}mJw{emJTiWB{&|H|_3hPeBl2#~4OuyWTX2dr2?C)zz?vlV@) z#`+Ny5{fBZM=~9Pk9FZw-6AVr+GC=GsjBEXY#}TAp&m4yfuF35_qb>n)%cGK*= z1%IM2O^dht?a zTD%b2&G|gbPy@19^sQKCzo#UCuv>;*tIoEao;s8PnkdM}CBaCfl-bEkrVv93vSj!P z-!n^+K_ZHTRW0|tF`33hh}{4>CU)HVtBD_Xsmpk3gP9@YDGCXC8I3!bB=m=iOZpMQx&^t@6Q zBlWJP=h@$z>3R0fr^h5h-Si{^@v4mT452QXYG81h=J)#5^U<@%13JOHr|EJp83sQ= zLYOA-(6h@>!D~|NGG^|D#v_ zN3Z;kUimj~6;HO8=}JZqvdunXujtzajpL(NKJzP4Q_DT-#VbG9TW~sL9`(zbX%2e_ zdem~O5tY1R7iir_UXqX@Cgf=wEz-+N!WzWs556QtXTNjGAo*D9Rj1b%SNPFs2VSn` zQfeC&aRlVbZu=IS%qDlh;`=1)4Asr^kvS&Pcgh>Vx6#=Uj$6<~_j@C_^$t-A3H1_R z<%=HtAmQPt0Mp@)%?;%k@6_%*lHpaI5X%cyvoE4s&VsE$Qj8g7kl0h)x1dAUaT>UdQ1=w>rGnvZAD*YL5PT@k-E?5HCM9Va=0Oviv9PPu zoe@09akCCxR=ERVJ3;;TLjKowEz*4HnRa9kvu$w&A7RGy{vNHF91~_plD?Yoq*e9p z2Z}54-qZBckQDnR%w*SoB0GP2VjmPml9bFvqT^58u}|wHr<05xV0chUyNkPP zYHbd2;-Zy-(|9((ndZW1UVch)Pra~WL7HV_!G~&}N-S$(EI*qeny}H^&Frr@ z$HxNeqgpJHJLi!V=+I^r;HncUJS>c+BA!`;C1Fs=Z+%K$RNX)V8j@0qRqHi16DR0P ziW_drxds zP$oJ%AD&pBO(K6HQMgsIE*)4R!K^bZvfa>CdGq~W{$Kyqe|xcY?Hd1YjoW<3P?fOl zW*vU~@8V~_rJlVqIK5OgskJv>+`f79n+5!P3wMKQAS@$37P06vo}_bth~XZyKq8z3 z`j*ri0Y4H6x!;xs?{6Se_D-?9zO%YjY-|-R{pf+-wufQRC7Fzhl1$HCbJ)X{Gxe1;)Q49SE-(nBDFMp`M9#{TrK=92m(;v%^A09s`e(1sp8=N+A>n#mQu*2wxdhn$*@qkcm8&t&u zxa96j08YDbv@z!Dkk$|CNxhLagGjXA-gzHkITCse1$K14`!`gEOktf{>32p@tj~_- zpoUV-LI!&(x~IdzE4bzEOFIC&sik=98_>jqO#S zcN>UjtId-rEg_O<8?C@hunbMBDxiJZbm&4LAt(79?IRGfvf(JxPM;T92CQq2hnD3iC zoSqzz#+}E_md5iv7(h5OjMiiBqqRW#0^MljJ(HPs4j9PTv0%br7C`rvc(E7>iA;NY zM#u8%Pk#LwGW>EB{^x8qtJp03rQnJ?r1}a625-k|_u4tGwp8MAAFZMdS z-|XMqyS3l>=JwZLesypwkLT8QuY4$XfS6PZdr!{fwz?y@@^RS7tTD!m2XxY-c5B1h zmH=Wl<#X9%B&i6LkYG=7Z-y4&?+D8Tju_8R_Kw(58jx%!ah8hFj0{{xxkmL4kl9(n zNd*S1tmm-nke(z6ZOGG2Jfz663^0*{gm+(QgI`KI6XBVH;=oDrx;oO`|J z;KUPJ$P{&kVxgnijXW%QFJ&=8EOMND>6S_aIygCiT}8QF*h9QYX&veh4tsmTEeEp7 zfoTW(Ty!r1#}183sDE)p^#xyyYHZaSoL~%o9|H$HG^Hv$;sx^<1v=YuM?J+Be%(nEuzO#jH zPY%zq1Yp3c%n8BX4hFP^inWbEXetpJHsJxlrGRvOG(4BG!T6|A(b&!|vyP`$__NOO zDTFn2=I|bSwOBxv*C?7!zY{1J@J&{eqCON&gBi=d3vqKp8%?B6IvLu%7O4mwYA_WT zMZ15;AWEBKA(Rr+0jPr!%HdQW_x8zzDOJ5==(WQe+R@liXpzb=b|hY%!#;N>S& zWw0HA1lhH_NlZ$!FbvqE9zv#EC&YfMSl(Rw-KZS~D0KP#2+DErUP1PB72}E5$up+9 z!1@3YfXxdObSxNMNlmbKG(adn_yDAu$Q~tXx8Fa;8ozzi+3m4A>Rfs+)}DxAQro(w z$0(S*f2K5k{X!8n<@t{5}^DqE#KnPlglG*Nl+sYDtaPfV2604 zWq$HOU#(lxyQW4?5v9rI9f*RsLe8qSA0F;7pj{K#`dk0&Zb4}~Y(4!A?4EbM0;auw zY^7-nLuF|$I_f zv>T2bglQ*1k2|#A*(W5-TwpK#lFk>)q_dTo!|K7E*644w(E&;8t;4nR=5k{&&5kO& z%rcn=jCeqF{W3v-rEP~{VG+!-GBP8ee^ zRoJ|Rj#nJKqc=L*9#>FFu+$kLfugHaueNkVvQ{yF11XFIq+nDpS?TlPTC-+}x8a5w zazK;Lp$z+=g}6anuM^MC3_l!{=db{Sq)|39`1#^r{>!3Oysnz~d0F;dBbxal6M*cJ zpT))EDb${hWQ&8jVGpU4`m%J|ZgGFuk^KWyCS=UPK8?m_i0_fFh}w?)n+6Lez>l4} z(uDk`hR3~!-xyk-wZf@~@BT!1BL|c-0Ln�xs6PGYz--uLwkems4nVIn! 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

      >blzt&<%h&$4=13r#9DXaRDlZ6kQUxMxt&J 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%0DGT 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

      Wpn$|9-1rJGn9m%~AfTu#<=o#{$P1Sg3$V^{ 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

      P2lNSIe48qx!{!;S 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

    2. 69Qo*@`!C@N*l% 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
        Cf-X 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≷}R7?<9A&@e0JCZ{}+pJYGB) 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 - - org.netbeans.modules.java.j2seproject - - - BouncyCastleCN1Lib - - - - - - - - - diff --git a/src/com/codename1/crypto/EncryptedStorage.java b/src/com/codename1/crypto/EncryptedStorage.java deleted file mode 100644 index caf4af4..0000000 --- a/src/com/codename1/crypto/EncryptedStorage.java +++ /dev/null @@ -1,154 +0,0 @@ -/* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - *

        - * The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. - *

        - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.codename1.crypto; - -import com.codename1.io.Log; -import com.codename1.io.Storage; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.engines.AESEngine; -import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * A Storage implementation that seamlessly encrypts it's contents based on a key. To setup this - * encryption use the Storage.install() method, notice that this only applies to storage and doesn't - * apply to the database or FileSystemStorage! - * - * @author Shai Almog - */ -public class EncryptedStorage extends Storage{ - private PaddedBufferedBlockCipher encryptCipher; - private PaddedBufferedBlockCipher decryptCipher; - - private byte[] key; - - @Override - public InputStream createInputStream(String name) throws IOException { - try { - byte[] buf = new byte[16]; - byte[] obuf = new byte[512]; - InputStream in = super.createInputStream(name); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - int noBytesRead = 0; - int noBytesProcessed = 0; - - while ((noBytesRead = in.read(buf)) >= 0) { - noBytesProcessed = decryptCipher.processBytes(buf, 0, noBytesRead, obuf, 0); - out.write(obuf, 0, noBytesProcessed); - } - noBytesProcessed = decryptCipher.doFinal(obuf, 0); - out.write(obuf, 0, noBytesProcessed); - - out.close(); - - return new ByteArrayInputStream(out.toByteArray()); - } catch(InvalidCipherTextException err) { - throw new IOException(err.toString()); - } - } - - @Override - public OutputStream createOutputStream(String name) throws IOException { - return new EncryptedOutputStream(super.createOutputStream(name)); - } - - /** - * Use this method - */ - public static void install(String keyStr) { - try { - byte[] bytes = keyStr.getBytes("UTF-8"); - byte[] key = new byte[24]; - for(int iter = 0 ;iter < key.length ; iter++) { - key[iter] = bytes[iter % bytes.length]; - } - EncryptedStorage i = new EncryptedStorage(); - i.key = key; - i.InitCiphers(); - Storage.setStorageInstance(i); - } catch (UnsupportedEncodingException ex) { - // moronic exception - Log.e(ex); - } - } - - private void InitCiphers(){ - encryptCipher = new PaddedBufferedBlockCipher(new AESEngine()); - encryptCipher.init(true, new KeyParameter(key)); - decryptCipher = new PaddedBufferedBlockCipher(new AESEngine()); - decryptCipher.init(false, new KeyParameter(key)); - } - - class EncryptedOutputStream extends OutputStream { - private final OutputStream underlying; - private byte[] obuf = new byte[16536]; - - public EncryptedOutputStream(OutputStream underlying) { - this.underlying = underlying; - } - - @Override - public void close() throws IOException { - flush(); - underlying.close(); - } - - @Override - public void flush() throws IOException { - try { - int size = encryptCipher.doFinal(obuf, 0); - - if(size > 0) { - underlying.write(obuf, 0, size); - } - } catch(InvalidCipherTextException err) { - throw new IOException(err.toString()); - } - underlying.flush(); - } - - @Override - public void write(byte[] b) throws IOException { - write(b, 0, b.length); - } - - @Override - public void write(int b) throws IOException { - write(new byte[] { (byte)b }); - } - - @Override - public void write(byte[] b, int off, int len) throws IOException { - int encLen = (len / 16 + 1) * 16; - if(obuf.length < encLen) { - obuf = new byte[encLen + 16]; - } - int size = encryptCipher.processBytes(b, off, len, obuf, 0); - underlying.write(obuf, 0, size); - } - } -} diff --git a/src/com/codename1/crypto/package.html b/src/com/codename1/crypto/package.html deleted file mode 100644 index 3e5f941..0000000 --- a/src/com/codename1/crypto/package.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Crypto package - - -

        Provides common cryptographic use cases such as encrypted filesystem as a simplified API facade

        - - diff --git a/src/javabc/BigInteger.java b/src/javabc/BigInteger.java deleted file mode 100644 index 83f3c16..0000000 --- a/src/javabc/BigInteger.java +++ /dev/null @@ -1,2775 +0,0 @@ -package javabc; - -import java.util.Random; -import java.util.Stack; - -public class BigInteger -{ - // The primes b/w 2 and ~2^10 - /* - 3 5 7 11 13 17 19 23 29 - 31 37 41 43 47 53 59 61 67 71 - 73 79 83 89 97 101 103 107 109 113 - 127 131 137 139 149 151 157 163 167 173 - 179 181 191 193 197 199 211 223 227 229 - 233 239 241 251 257 263 269 271 277 281 - 283 293 307 311 313 317 331 337 347 349 - 353 359 367 373 379 383 389 397 401 409 - 419 421 431 433 439 443 449 457 461 463 - 467 479 487 491 499 503 509 521 523 541 - 547 557 563 569 571 577 587 593 599 601 - 607 613 617 619 631 641 643 647 653 659 - 661 673 677 683 691 701 709 719 727 733 - 739 743 751 757 761 769 773 787 797 809 - 811 821 823 827 829 839 853 857 859 863 - 877 881 883 887 907 911 919 929 937 941 - 947 953 967 971 977 983 991 997 - 1009 1013 1019 1021 1031 - */ - - // Each list has a product < 2^31 - private static final int[][] primeLists = new int[][] - { - new int[]{ 3, 5, 7, 11, 13, 17, 19, 23 }, - new int[]{ 29, 31, 37, 41, 43 }, - new int[]{ 47, 53, 59, 61, 67 }, - new int[]{ 71, 73, 79, 83 }, - new int[]{ 89, 97, 101, 103 }, - - new int[]{ 107, 109, 113, 127 }, - new int[]{ 131, 137, 139, 149 }, - new int[]{ 151, 157, 163, 167 }, - new int[]{ 173, 179, 181, 191 }, - new int[]{ 193, 197, 199, 211 }, - - new int[]{ 223, 227, 229 }, - new int[]{ 233, 239, 241 }, - new int[]{ 251, 257, 263 }, - new int[]{ 269, 271, 277 }, - new int[]{ 281, 283, 293 }, - - new int[]{ 307, 311, 313 }, - new int[]{ 317, 331, 337 }, - new int[]{ 347, 349, 353 }, - new int[]{ 359, 367, 373 }, - new int[]{ 379, 383, 389 }, - - new int[]{ 397, 401, 409 }, - new int[]{ 419, 421, 431 }, - new int[]{ 433, 439, 443 }, - new int[]{ 449, 457, 461 }, - new int[]{ 463, 467, 479 }, - - new int[]{ 487, 491, 499 }, - new int[]{ 503, 509, 521 }, - new int[]{ 523, 541, 547 }, - new int[]{ 557, 563, 569 }, - new int[]{ 571, 577, 587 }, - - new int[]{ 593, 599, 601 }, - new int[]{ 607, 613, 617 }, - new int[]{ 619, 631, 641 }, - new int[]{ 643, 647, 653 }, - new int[]{ 659, 661, 673 }, - - new int[]{ 677, 683, 691 }, - new int[]{ 701, 709, 719 }, - new int[]{ 727, 733, 739 }, - new int[]{ 743, 751, 757 }, - new int[]{ 761, 769, 773 }, - - new int[]{ 787, 797, 809 }, - new int[]{ 811, 821, 823 }, - new int[]{ 827, 829, 839 }, - new int[]{ 853, 857, 859 }, - new int[]{ 863, 877, 881 }, - - new int[]{ 883, 887, 907 }, - new int[]{ 911, 919, 929 }, - new int[]{ 937, 941, 947 }, - new int[]{ 953, 967, 971 }, - new int[]{ 977, 983, 991 }, - - new int[]{ 997, 1009, 1013 }, - new int[]{ 1019, 1021, 1031 }, - }; - - private static int[] primeProducts; - - private static final long IMASK = 0xffffffffL; - - private static final int[] ZERO_MAGNITUDE = new int[0]; - - public static final BigInteger ZERO = new BigInteger(0, ZERO_MAGNITUDE); - public static final BigInteger ONE = valueOf(1); - private static final BigInteger TWO = valueOf(2); - private static final BigInteger THREE = valueOf(3); - - static - { - ZERO.nBits = 0; ZERO.nBitLength = 0; - ONE.nBits = 1; ONE.nBitLength = 1; - TWO.nBits = 1; TWO.nBitLength = 2; - - primeProducts = new int[primeLists.length]; - - for (int i = 0; i < primeLists.length; ++i) - { - int[] primeList = primeLists[i]; - int product = 1; - for (int j = 0; j < primeList.length; ++j) - { - product *= primeList[j]; - } - primeProducts[i] = product; - } - } - - private int sign; // -1 means -ve; +1 means +ve; 0 means 0; - private int[] magnitude; // array of ints with [0] being the most significant - private int nBits = -1; // cache bitCount() value - private int nBitLength = -1; // cache bitLength() value - private long mQuote = -1L; // -m^(-1) mod b, b = 2^32 (see Montgomery mult.) - - private BigInteger() - { - } - - private BigInteger(int signum, int[] mag) - { - if (mag.length > 0) - { - sign = signum; - - int i = 0; - while (i < mag.length && mag[i] == 0) - { - i++; - } - if (i == 0) - { - magnitude = mag; - } - else - { - // strip leading 0 bytes - int[] newMag = new int[mag.length - i]; - System.arraycopy(mag, i, newMag, 0, newMag.length); - magnitude = newMag; - if (newMag.length == 0) - sign = 0; - } - } - else - { - magnitude = mag; - sign = 0; - } - } - - public BigInteger(String sval) throws NumberFormatException - { - this(sval, 10); - } - - public BigInteger(String sval, int rdx) throws NumberFormatException - { - if (sval.length() == 0) - { - throw new NumberFormatException("Zero length BigInteger"); - } - - if (rdx < Character.MIN_RADIX || rdx > Character.MAX_RADIX) - { - throw new NumberFormatException("Radix out of range"); - } - - int index = 0; - sign = 1; - - if (sval.charAt(0) == '-') - { - if (sval.length() == 1) - { - throw new NumberFormatException("Zero length BigInteger"); - } - - sign = -1; - index = 1; - } - - // strip leading zeros from the string value - while (index < sval.length() && Character.digit(sval.charAt(index), rdx) == 0) - { - index++; - } - - if (index >= sval.length()) - { - // zero value - we're done - sign = 0; - magnitude = new int[0]; - return; - } - - ////// - // could we work out the max number of ints required to store - // sval.length digits in the given base, then allocate that - // storage in one hit?, then generate the magnitude in one hit too? - ////// - - BigInteger b = ZERO; - BigInteger r = valueOf(rdx); - while (index < sval.length()) - { - // (optimise this by taking chunks of digits instead?) - b = b.multiply(r).add(valueOf(Character.digit(sval.charAt(index), rdx))); - index++; - } - - magnitude = b.magnitude; - return; - } - - public BigInteger(byte[] bval) throws NumberFormatException - { - if (bval.length == 0) - { - throw new NumberFormatException("Zero length BigInteger"); - } - - sign = 1; - if (bval[0] < 0) - { - sign = -1; - } - magnitude = makeMagnitude(bval, sign); - if (magnitude.length == 0) { - sign = 0; - } - } - - /** - * If sign >= 0, packs bytes into an array of ints, most significant first - * If sign < 0, packs 2's complement of bytes into - * an array of ints, most significant first, - * adding an extra most significant byte in case bval = {0x80, 0x00, ..., 0x00} - * - * @param bval - * @param sign - * @return - */ - private int[] makeMagnitude(byte[] bval, int sign) - { - if (sign >= 0) { - int i; - int[] mag; - int firstSignificant; - - // strip leading zeros - for (firstSignificant = 0; firstSignificant < bval.length - && bval[firstSignificant] == 0; firstSignificant++); - - if (firstSignificant >= bval.length) - { - return new int[0]; - } - - int nInts = (bval.length - firstSignificant + 3) / 4; - int bCount = (bval.length - firstSignificant) % 4; - if (bCount == 0) - bCount = 4; - // n = k * (n / k) + n % k - // bval.length - firstSignificant + 3 = 4 * nInts + bCount - 1 - // bval.length - firstSignificant + 4 - bCount = 4 * nInts - - mag = new int[nInts]; - int v = 0; - int magnitudeIndex = 0; - for (i = firstSignificant; i < bval.length; i++) - { - // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts - // 1 <= bCount <= 4 - v <<= 8; - v |= bval[i] & 0xff; - bCount--; - if (bCount <= 0) - { - mag[magnitudeIndex] = v; - magnitudeIndex++; - bCount = 4; - v = 0; - } - } - // 4 - bCount + 4 * magnitudeIndex = 4 * nInts - // bCount = 4 * (1 + magnitudeIndex - nInts) - // 1 <= bCount <= 4 - // So bCount = 4 and magnitudeIndex = nInts = mag.length - -// if (magnitudeIndex < mag.length) -// { -// mag[magnitudeIndex] = v; -// } - return mag; - } - else { - int i; - int[] mag; - int firstSignificant; - - - // strip leading -1's - for (firstSignificant = 0; firstSignificant < bval.length - 1 - && bval[firstSignificant] == 0xff; firstSignificant++); - - int nBytes = bval.length; - boolean leadingByte = false; - - // check for -2^(n-1) - if (bval[firstSignificant] == 0x80) { - for (i = firstSignificant + 1; i < bval.length; i++) { - if (bval[i] != 0) { - break; - } - } - if (i == bval.length) { - nBytes++; - leadingByte = true; - } - } - - int nInts = (nBytes - firstSignificant + 3) / 4; - int bCount = (nBytes - firstSignificant) % 4; - if (bCount == 0) - bCount = 4; - - // n = k * (n / k) + n % k - // nBytes - firstSignificant + 3 = 4 * nInts + bCount - 1 - // nBytes - firstSignificant + 4 - bCount = 4 * nInts - // 1 <= bCount <= 4 - - mag = new int[nInts]; - int v = 0; - int magnitudeIndex = 0; - // nBytes + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts - // 1 <= bCount <= 4 - if (leadingByte) { - // bval.length + 1 + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts - bCount--; - // bval.length + 1 + 4 - (bCount + 1) - i + 4 * magnitudeIndex = 4 * nInts - // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts - if (bCount <= 0) - { - magnitudeIndex++; - bCount = 4; - } - // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts - // 1 <= bCount <= 4 - } - for (i = firstSignificant; i < bval.length; i++) - { - // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts - // 1 <= bCount <= 4 - v <<= 8; - v |= ~bval[i] & 0xff; - bCount--; - if (bCount <= 0) - { - mag[magnitudeIndex] = v; - magnitudeIndex++; - bCount = 4; - v = 0; - } - } - // 4 - bCount + 4 * magnitudeIndex = 4 * nInts - // 1 <= bCount <= 4 - // bCount = 4 * (1 + magnitudeIndex - nInts) - // 1 <= bCount <= 4 - // So bCount = 4 and magnitudeIndex = nInts = mag.length - -// if (magnitudeIndex < mag.length) -// { -// mag[magnitudeIndex] = v; -// } - mag = inc(mag); - - // TODO Fix above so that this is not necessary? - if (mag[0] == 0) - { - int[] tmp = new int[mag.length - 1]; - System.arraycopy(mag, 1, tmp, 0, tmp.length); - mag = tmp; - } - - return mag; - } - } - - - - public BigInteger(int sign, byte[] mag) throws NumberFormatException - { - if (sign < -1 || sign > 1) - { - throw new NumberFormatException("Invalid sign value"); - } - - if (sign == 0) - { - this.sign = 0; - this.magnitude = new int[0]; - return; - } - - // copy bytes - this.magnitude = makeMagnitude(mag, 1); - this.sign = sign; - } - - public BigInteger(int numBits, Random rnd) throws IllegalArgumentException - { - if (numBits < 0) - { - throw new IllegalArgumentException("numBits must be non-negative"); - } - - this.nBits = -1; - this.nBitLength = -1; - - if (numBits == 0) - { -// this.sign = 0; - this.magnitude = ZERO_MAGNITUDE; - return; - } - - int nBytes = (numBits + 7) / 8; - - byte[] b = new byte[nBytes]; - nextRndBytes(rnd, b); - - // strip off any excess bits in the MSB - b[0] &= rndMask[8 * nBytes - numBits]; - - this.magnitude = makeMagnitude(b, 1); - this.sign = this.magnitude.length < 1 ? 0 : 1; - } - - private static final int BITS_PER_BYTE = 8; - private static final int BYTES_PER_INT = 4; - - /** - * strictly speaking this is a little dodgey from a compliance - * point of view as it forces people to be using SecureRandom as - * well, that being said - this implementation is for a crypto - * library and you do have the source! - */ - private void nextRndBytes(Random rnd, byte[] bytes) - { - int numRequested = bytes.length; - int numGot = 0, - r = 0; - - if (rnd instanceof javabc.SecureRandom) - { - ((javabc.SecureRandom)rnd).nextBytes(bytes); - } - else - { - for (; ; ) - { - for (int i = 0; i < BYTES_PER_INT; i++) - { - if (numGot == numRequested) - { - return; - } - - r = (i == 0 ? rnd.nextInt() : r >> BITS_PER_BYTE); - bytes[numGot++] = (byte)r; - } - } - } - } - - private static final byte[] rndMask = {(byte)255, 127, 63, 31, 15, 7, 3, 1}; - - public BigInteger(int bitLength, int certainty, Random rnd) throws ArithmeticException - { - if (bitLength < 2) - { - throw new ArithmeticException("bitLength < 2"); - } - - this.sign = 1; - this.nBitLength = bitLength; - - if (bitLength == 2) - { - this.magnitude = rnd.nextInt() < 0 - ? TWO.magnitude - : THREE.magnitude; - return; - } - - int nBytes = (bitLength + 7) / BITS_PER_BYTE; - int xBits = BITS_PER_BYTE * nBytes - bitLength; - byte mask = rndMask[xBits]; - - byte[] b = new byte[nBytes]; - - for (;;) - { - nextRndBytes(rnd, b); - - // strip off any excess bits in the MSB - b[0] &= mask; - - // ensure the leading bit is 1 (to meet the strength requirement) - b[0] |= (byte)(1 << (7 - xBits)); - - // ensure the trailing bit is 1 (i.e. must be odd) - b[nBytes - 1] |= (byte)1; - - this.magnitude = makeMagnitude(b, 1); - this.nBits = -1; - this.mQuote = -1L; - - if (certainty < 1) - break; - - if (this.isProbablePrime(certainty)) - break; - - if (bitLength > 32) - { - for (int rep = 0; rep < 10000; ++rep) - { - int n = 33 + (rnd.nextInt() >>> 1) % (bitLength - 2); - this.magnitude[this.magnitude.length - (n >>> 5)] ^= (1 << (n & 31)); - this.magnitude[this.magnitude.length - 1] ^= (rnd.nextInt() << 1); - this.mQuote = -1L; - - if (this.isProbablePrime(certainty)) - return; - } - } - } - } - - public BigInteger abs() - { - return (sign >= 0) ? this : this.negate(); - } - - /** - * return a = a + b - b preserved. - */ - private int[] add(int[] a, int[] b) - { - int tI = a.length - 1; - int vI = b.length - 1; - long m = 0; - - while (vI >= 0) - { - m += (((long)a[tI]) & IMASK) + (((long)b[vI--]) & IMASK); - a[tI--] = (int)m; - m >>>= 32; - } - - while (tI >= 0 && m != 0) - { - m += (((long)a[tI]) & IMASK); - a[tI--] = (int)m; - m >>>= 32; - } - - return a; - } - - /** - * return a = a + 1. - */ - private int[] inc(int[] a) - { - int tI = a.length - 1; - long m = 0; - - m = (((long)a[tI]) & IMASK) + 1L; - a[tI--] = (int)m; - m >>>= 32; - - while (tI >= 0 && m != 0) - { - m += (((long)a[tI]) & IMASK); - a[tI--] = (int)m; - m >>>= 32; - } - - return a; - } - - public BigInteger add(BigInteger val) throws ArithmeticException - { - if (val.sign == 0 || val.magnitude.length == 0) - return this; - if (this.sign == 0 || this.magnitude.length == 0) - return val; - - if (val.sign < 0) - { - if (this.sign > 0) - return this.subtract(val.negate()); - } - else - { - if (this.sign < 0) - return val.subtract(this.negate()); - } - - return addToMagnitude(val.magnitude); - } - - private BigInteger addToMagnitude( - int[] magToAdd) - { - int[] big, small; - if (this.magnitude.length < magToAdd.length) - { - big = magToAdd; - small = this.magnitude; - } - else - { - big = this.magnitude; - small = magToAdd; - } - - // Conservatively avoid over-allocation when no overflow possible - int limit = Integer.MAX_VALUE; - if (big.length == small.length) - limit -= small[0]; - - boolean possibleOverflow = (big[0] ^ (1 << 31)) >= limit; - int extra = possibleOverflow ? 1 : 0; - - int[] bigCopy = new int[big.length + extra]; - System.arraycopy(big, 0, bigCopy, extra, big.length); - - bigCopy = add(bigCopy, small); - - return new BigInteger(this.sign, bigCopy); - } - - public BigInteger and( - BigInteger value) - { - if (this.sign == 0 || value.sign == 0) - { - return ZERO; - } - - int[] aMag = this.sign > 0 - ? this.magnitude - : add(ONE).magnitude; - - int[] bMag = value.sign > 0 - ? value.magnitude - : value.add(ONE).magnitude; - - boolean resultNeg = sign < 0 && value.sign < 0; - int resultLength = Math.max(aMag.length, bMag.length); - int[] resultMag = new int[resultLength]; - - int aStart = resultMag.length - aMag.length; - int bStart = resultMag.length - bMag.length; - - for (int i = 0; i < resultMag.length; ++i) - { - int aWord = i >= aStart ? aMag[i - aStart] : 0; - int bWord = i >= bStart ? bMag[i - bStart] : 0; - - if (this.sign < 0) - { - aWord = ~aWord; - } - - if (value.sign < 0) - { - bWord = ~bWord; - } - - resultMag[i] = aWord & bWord; - - if (resultNeg) - { - resultMag[i] = ~resultMag[i]; - } - } - - BigInteger result = new BigInteger(1, resultMag); - - // TODO Optimise this case - if (resultNeg) - { - result = result.not(); - } - - return result; - } - - public BigInteger andNot( - BigInteger value) - { - return and(value.not()); - } - - public int bitCount() - { - if (nBits == -1) - { - if (sign < 0) - { - // TODO Optimise this case - nBits = not().bitCount(); - } - else - { - int sum = 0; - for (int i = 0; i < magnitude.length; i++) - { - sum += bitCounts[magnitude[i] & 0xff]; - sum += bitCounts[(magnitude[i] >> 8) & 0xff]; - sum += bitCounts[(magnitude[i] >> 16) & 0xff]; - sum += bitCounts[(magnitude[i] >> 24) & 0xff]; - } - nBits = sum; - } - } - - return nBits; - } - - private final static byte[] bitCounts = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, - 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, - 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, - 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, - 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, - 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, - 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, - 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, - 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, - 6, 6, 7, 6, 7, 7, 8}; - - private int bitLength(int indx, int[] mag) - { - int bitLength; - - if (mag.length == 0) - { - return 0; - } - else - { - while (indx != mag.length && mag[indx] == 0) - { - indx++; - } - - if (indx == mag.length) - { - return 0; - } - - // bit length for everything after the first int - bitLength = 32 * ((mag.length - indx) - 1); - - // and determine bitlength of first int - bitLength += bitLen(mag[indx]); - - if (sign < 0) - { - // Check if magnitude is a power of two - boolean pow2 = ((bitCounts[mag[indx] & 0xff]) - + (bitCounts[(mag[indx] >> 8) & 0xff]) - + (bitCounts[(mag[indx] >> 16) & 0xff]) - + (bitCounts[(mag[indx] >> 24) & 0xff])) == 1; - - for (int i = indx + 1; i < mag.length && pow2; i++) - { - pow2 = (mag[i] == 0); - } - - bitLength -= (pow2 ? 1 : 0); - } - } - - return bitLength; - } - - public int bitLength() - { - if (nBitLength == -1) - { - if (sign == 0) - { - nBitLength = 0; - } - else - { - nBitLength = bitLength(0, magnitude); - } - } - - return nBitLength; - } - - // - // bitLen(val) is the number of bits in val. - // - static int bitLen(int w) - { - // Binary search - decision tree (5 tests, rarely 6) - return (w < 1 << 15 ? (w < 1 << 7 - ? (w < 1 << 3 ? (w < 1 << 1 - ? (w < 1 << 0 ? (w < 0 ? 32 : 0) : 1) - : (w < 1 << 2 ? 2 : 3)) : (w < 1 << 5 - ? (w < 1 << 4 ? 4 : 5) - : (w < 1 << 6 ? 6 : 7))) - : (w < 1 << 11 - ? (w < 1 << 9 ? (w < 1 << 8 ? 8 : 9) : (w < 1 << 10 ? 10 : 11)) - : (w < 1 << 13 ? (w < 1 << 12 ? 12 : 13) : (w < 1 << 14 ? 14 : 15)))) : (w < 1 << 23 ? (w < 1 << 19 - ? (w < 1 << 17 ? (w < 1 << 16 ? 16 : 17) : (w < 1 << 18 ? 18 : 19)) - : (w < 1 << 21 ? (w < 1 << 20 ? 20 : 21) : (w < 1 << 22 ? 22 : 23))) : (w < 1 << 27 - ? (w < 1 << 25 ? (w < 1 << 24 ? 24 : 25) : (w < 1 << 26 ? 26 : 27)) - : (w < 1 << 29 ? (w < 1 << 28 ? 28 : 29) : (w < 1 << 30 ? 30 : 31))))); - } - - private boolean quickPow2Check() - { - return sign > 0 && nBits == 1; - } - - public int compareTo(Object o) - { - return compareTo((BigInteger)o); - } - - /** - * unsigned comparison on two arrays - note the arrays may - * start with leading zeros. - */ - private int compareTo(int xIndx, int[] x, int yIndx, int[] y) - { - while (xIndx != x.length && x[xIndx] == 0) - { - xIndx++; - } - - while (yIndx != y.length && y[yIndx] == 0) - { - yIndx++; - } - - return compareNoLeadingZeroes(xIndx, x, yIndx, y); - } - - private int compareNoLeadingZeroes(int xIndx, int[] x, int yIndx, int[] y) - { - int diff = (x.length - y.length) - (xIndx - yIndx); - - if (diff != 0) - { - return diff < 0 ? -1 : 1; - } - - // lengths of magnitudes the same, test the magnitude values - - while (xIndx < x.length) - { - int v1 = x[xIndx++]; - int v2 = y[yIndx++]; - - if (v1 != v2) - { - return (v1 ^ Integer.MIN_VALUE) < (v2 ^ Integer.MIN_VALUE) ? -1 : 1; - } - } - - return 0; - } - - public int compareTo(BigInteger val) - { - if (sign < val.sign) - return -1; - if (sign > val.sign) - return 1; - if (sign == 0) - return 0; - - return sign * compareTo(0, magnitude, 0, val.magnitude); - } - - /** - * return z = x / y - done in place (z value preserved, x contains the - * remainder) - */ - private int[] divide(int[] x, int[] y) - { - int xyCmp = compareTo(0, x, 0, y); - int[] count; - - if (xyCmp > 0) - { - int[] c; - - int shift = bitLength(0, x) - bitLength(0, y); - - if (shift > 1) - { - c = shiftLeft(y, shift - 1); - count = shiftLeft(ONE.magnitude, shift - 1); - if (shift % 32 == 0) - { - // Special case where the shift is the size of an int. - int countSpecial[] = new int[shift / 32 + 1]; - System.arraycopy(count, 0, countSpecial, 1, countSpecial.length - 1); - countSpecial[0] = 0; - count = countSpecial; - } - } - else - { - c = new int[x.length]; - count = new int[1]; - - System.arraycopy(y, 0, c, c.length - y.length, y.length); - count[0] = 1; - } - - int[] iCount = new int[count.length]; - - subtract(0, x, 0, c); - System.arraycopy(count, 0, iCount, 0, count.length); - - int xStart = 0; - int cStart = 0; - int iCountStart = 0; - - for (; ; ) - { - int cmp = compareTo(xStart, x, cStart, c); - - while (cmp >= 0) - { - subtract(xStart, x, cStart, c); - add(count, iCount); - cmp = compareTo(xStart, x, cStart, c); - } - - xyCmp = compareTo(xStart, x, 0, y); - - if (xyCmp > 0) - { - if (x[xStart] == 0) - { - xStart++; - } - - shift = bitLength(cStart, c) - bitLength(xStart, x); - - if (shift == 0) - { - shiftRightOneInPlace(cStart, c); - shiftRightOneInPlace(iCountStart, iCount); - } - else - { - shiftRightInPlace(cStart, c, shift); - shiftRightInPlace(iCountStart, iCount, shift); - } - - if (c[cStart] == 0) - { - cStart++; - } - - if (iCount[iCountStart] == 0) - { - iCountStart++; - } - } - else if (xyCmp == 0) - { - add(count, ONE.magnitude); - for (int i = xStart; i != x.length; i++) - { - x[i] = 0; - } - break; - } - else - { - break; - } - } - } - else if (xyCmp == 0) - { - count = new int[1]; - - count[0] = 1; - } - else - { - count = new int[1]; - - count[0] = 0; - } - - return count; - } - - public BigInteger divide(BigInteger val) throws ArithmeticException - { - if (val.sign == 0) - { - throw new ArithmeticException("Divide by zero"); - } - - if (sign == 0) - { - return BigInteger.ZERO; - } - - if (val.compareTo(BigInteger.ONE) == 0) - { - return this; - } - - int[] mag = new int[this.magnitude.length]; - System.arraycopy(this.magnitude, 0, mag, 0, mag.length); - - return new BigInteger(this.sign * val.sign, divide(mag, val.magnitude)); - } - - public BigInteger[] divideAndRemainder(BigInteger val) throws ArithmeticException - { - if (val.sign == 0) - { - throw new ArithmeticException("Divide by zero"); - } - - BigInteger biggies[] = new BigInteger[2]; - - if (sign == 0) - { - biggies[0] = biggies[1] = BigInteger.ZERO; - - return biggies; - } - - if (val.compareTo(BigInteger.ONE) == 0) - { - biggies[0] = this; - biggies[1] = BigInteger.ZERO; - - return biggies; - } - - int[] remainder = new int[this.magnitude.length]; - System.arraycopy(this.magnitude, 0, remainder, 0, remainder.length); - - int[] quotient = divide(remainder, val.magnitude); - - biggies[0] = new BigInteger(this.sign * val.sign, quotient); - biggies[1] = new BigInteger(this.sign, remainder); - - return biggies; - } - - public boolean equals(Object val) - { - if (val == this) - return true; - - if (!(val instanceof BigInteger)) - return false; - BigInteger biggie = (BigInteger)val; - - if (biggie.sign != sign || biggie.magnitude.length != magnitude.length) - return false; - - for (int i = 0; i < magnitude.length; i++) - { - if (biggie.magnitude[i] != magnitude[i]) - return false; - } - - return true; - } - - public BigInteger gcd(BigInteger val) - { - if (val.sign == 0) - return this.abs(); - else if (sign == 0) - return val.abs(); - - BigInteger r; - BigInteger u = this; - BigInteger v = val; - - while (v.sign != 0) - { - r = u.mod(v); - u = v; - v = r; - } - - return u; - } - - public int hashCode() - { - int hc = magnitude.length; - - if (magnitude.length > 0) - { - hc ^= magnitude[0]; - - if (magnitude.length > 1) - { - hc ^= magnitude[magnitude.length - 1]; - } - } - - return sign < 0 ? ~hc : hc; - } - - public int intValue() - { - if (magnitude.length == 0) - { - return 0; - } - - if (sign < 0) - { - return -magnitude[magnitude.length - 1]; - } - else - { - return magnitude[magnitude.length - 1]; - } - } - - public byte byteValue() - { - return (byte)intValue(); - } - - /** - * return whether or not a BigInteger is probably prime with a - * probability of 1 - (1/2)**certainty. - *

        - * From Knuth Vol 2, pg 395. - */ - public boolean isProbablePrime(int certainty) - { - if (certainty <= 0) - return true; - - if (sign == 0) - return false; - - BigInteger n = this.abs(); - - if (!n.testBit(0)) - return n.equals(TWO); - - if (n.equals(ONE)) - return false; - - // Try to reduce the penalty for really small numbers - int numLists = Math.min(n.bitLength() - 1, primeLists.length); - - for (int i = 0; i < numLists; ++i) - { - int test = n.remainder(primeProducts[i]); - - int[] primeList = primeLists[i]; - for (int j = 0; j < primeList.length; ++j) - { - int prime = primeList[j]; - int qRem = test % prime; - if (qRem == 0) - { - // We may find small numbers in the list - return n.bitLength() < 16 && n.intValue() == prime; - } - } - } - - // - // let n = 1 + 2^kq - // - BigInteger nMinusOne = n.subtract(ONE); - int s = nMinusOne.getLowestSetBit(); - BigInteger r = nMinusOne.shiftRight(s); - - Random random = new Random(); - do - { - BigInteger a; - - do - { - a = new BigInteger(n.bitLength(), random); - } - while (a.compareTo(ONE) <= 0 || a.compareTo(nMinusOne) >= 0); - - BigInteger y = a.modPow(r, n); - - if (!y.equals(ONE)) - { - int j = 0; - while (!y.equals(nMinusOne)) - { - if (++j == s) - { - return false; - } - - y = y.modPow(TWO, n); - - if (y.equals(ONE)) - { - return false; - } - } - } - - certainty -= 2; // composites pass for only 1/4 possible 'a' - } - while (certainty > 0); - - return true; - } - - public long longValue() - { - long val = 0; - - if (magnitude.length == 0) - { - return 0; - } - - if (magnitude.length > 1) - { - val = ((long)magnitude[magnitude.length - 2] << 32) - | (magnitude[magnitude.length - 1] & IMASK); - } - else - { - val = (magnitude[magnitude.length - 1] & IMASK); - } - - if (sign < 0) - { - return -val; - } - else - { - return val; - } - } - - public BigInteger max(BigInteger val) - { - return (compareTo(val) > 0) ? this : val; - } - - public BigInteger min(BigInteger val) - { - return (compareTo(val) < 0) ? this : val; - } - - public BigInteger mod(BigInteger m) throws ArithmeticException - { - if (m.sign <= 0) - { - throw new ArithmeticException("BigInteger: modulus is not positive"); - } - - BigInteger biggie = this.remainder(m); - - return (biggie.sign >= 0 ? biggie : biggie.add(m)); - } - - public BigInteger modInverse(BigInteger m) throws ArithmeticException - { - if (m.sign != 1) - { - throw new ArithmeticException("Modulus must be positive"); - } - - BigInteger x = new BigInteger(); - BigInteger gcd = BigInteger.extEuclid(this, m, x, null); - - if (!gcd.equals(BigInteger.ONE)) - { - throw new ArithmeticException("Numbers not relatively prime."); - } - - if (x.compareTo(BigInteger.ZERO) < 0) - { - x = x.add(m); - } - - return x; - } - - /** - * Calculate the numbers u1, u2, and u3 such that: - * - * u1 * a + u2 * b = u3 - * - * where u3 is the greatest common divider of a and b. - * a and b using the extended Euclid algorithm (refer p. 323 - * of The Art of Computer Programming vol 2, 2nd ed). - * This also seems to have the side effect of calculating - * some form of multiplicative inverse. - * - * @param a First number to calculate gcd for - * @param b Second number to calculate gcd for - * @param u1Out the return object for the u1 value - * @param u2Out the return object for the u2 value - * @return The greatest common divisor of a and b - */ - private static BigInteger extEuclid(BigInteger a, BigInteger b, BigInteger u1Out, - BigInteger u2Out) - { - BigInteger u1 = BigInteger.ONE; - BigInteger u3 = a; - BigInteger v1 = BigInteger.ZERO; - BigInteger v3 = b; - - while (v3.sign > 0) - { - BigInteger[] q = u3.divideAndRemainder(v3); - - BigInteger tn = u1.subtract(v1.multiply(q[0])); - u1 = v1; - v1 = tn; - - u3 = v3; - v3 = q[1]; - } - - if (u1Out != null) - { - u1Out.sign = u1.sign; - u1Out.magnitude = u1.magnitude; - } - - if (u2Out != null) - { - BigInteger res = u3.subtract(u1.multiply(a)).divide(b); - u2Out.sign = res.sign; - u2Out.magnitude = res.magnitude; - } - - return u3; - } - - /** - * zero out the array x - */ - private void zero(int[] x) - { - for (int i = 0; i != x.length; i++) - { - x[i] = 0; - } - } - - public BigInteger modPow(BigInteger exponent, BigInteger m) throws ArithmeticException - { - if (m.sign < 1) - { - throw new ArithmeticException("Modulus must be positive"); - } - - if (m.equals(ONE)) - { - return ZERO; - } - - // Zero exponent check - if (exponent.sign == 0) - { - return ONE; - } - - if (sign == 0) - return ZERO; - - int[] zVal = null; - int[] yAccum = null; - int[] yVal; - - // Montgomery exponentiation is only possible if the modulus is odd, - // but AFAIK, this is always the case for crypto algo's - boolean useMonty = ((m.magnitude[m.magnitude.length - 1] & 1) == 1); - long mQ = 0; - if (useMonty) - { - mQ = m.getMQuote(); - - // tmp = this * R mod m - BigInteger tmp = this.shiftLeft(32 * m.magnitude.length).mod(m); - zVal = tmp.magnitude; - - useMonty = (zVal.length <= m.magnitude.length); - - if (useMonty) - { - yAccum = new int[m.magnitude.length + 1]; - if (zVal.length < m.magnitude.length) - { - int[] longZ = new int[m.magnitude.length]; - System.arraycopy(zVal, 0, longZ, longZ.length - zVal.length, zVal.length); - zVal = longZ; - } - } - } - - if (!useMonty) - { - if (magnitude.length <= m.magnitude.length) - { - //zAccum = new int[m.magnitude.length * 2]; - zVal = new int[m.magnitude.length]; - - System.arraycopy(magnitude, 0, zVal, zVal.length - magnitude.length, - magnitude.length); - } - else - { - // - // in normal practice we'll never see this... - // - BigInteger tmp = this.remainder(m); - - //zAccum = new int[m.magnitude.length * 2]; - zVal = new int[m.magnitude.length]; - - System.arraycopy(tmp.magnitude, 0, zVal, zVal.length - tmp.magnitude.length, - tmp.magnitude.length); - } - - yAccum = new int[m.magnitude.length * 2]; - } - - yVal = new int[m.magnitude.length]; - - // - // from LSW to MSW - // - for (int i = 0; i < exponent.magnitude.length; i++) - { - int v = exponent.magnitude[i]; - int bits = 0; - - if (i == 0) - { - while (v > 0) - { - v <<= 1; - bits++; - } - - // - // first time in initialise y - // - System.arraycopy(zVal, 0, yVal, 0, zVal.length); - - v <<= 1; - bits++; - } - - while (v != 0) - { - if (useMonty) - { - // Montgomery square algo doesn't exist, and a normal - // square followed by a Montgomery reduction proved to - // be almost as heavy as a Montgomery mulitply. - multiplyMonty(yAccum, yVal, yVal, m.magnitude, mQ); - } - else - { - square(yAccum, yVal); - remainder(yAccum, m.magnitude); - System.arraycopy(yAccum, yAccum.length - yVal.length, yVal, 0, yVal.length); - zero(yAccum); - } - bits++; - - if (v < 0) - { - if (useMonty) - { - multiplyMonty(yAccum, yVal, zVal, m.magnitude, mQ); - } - else - { - multiply(yAccum, yVal, zVal); - remainder(yAccum, m.magnitude); - System.arraycopy(yAccum, yAccum.length - yVal.length, yVal, 0, - yVal.length); - zero(yAccum); - } - } - - v <<= 1; - } - - while (bits < 32) - { - if (useMonty) - { - multiplyMonty(yAccum, yVal, yVal, m.magnitude, mQ); - } - else - { - square(yAccum, yVal); - remainder(yAccum, m.magnitude); - System.arraycopy(yAccum, yAccum.length - yVal.length, yVal, 0, yVal.length); - zero(yAccum); - } - bits++; - } - } - - if (useMonty) - { - // Return y * R^(-1) mod m by doing y * 1 * R^(-1) mod m - zero(zVal); - zVal[zVal.length - 1] = 1; - multiplyMonty(yAccum, yVal, zVal, m.magnitude, mQ); - } - - BigInteger result = new BigInteger(1, yVal); - - return exponent.sign > 0 - ? result - : result.modInverse(m); - } - - /** - * return w with w = x * x - w is assumed to have enough space. - */ - private int[] square(int[] w, int[] x) - { - // Note: this method allows w to be only (2 * x.Length - 1) words if result will fit -// if (w.length != 2 * x.length) -// { -// throw new IllegalArgumentException("no I don't think so..."); -// } - - long u1, u2, c; - - int wBase = w.length - 1; - - for (int i = x.length - 1; i != 0; i--) - { - long v = (x[i] & IMASK); - - u1 = v * v; - u2 = u1 >>> 32; - u1 = u1 & IMASK; - - u1 += (w[wBase] & IMASK); - - w[wBase] = (int)u1; - c = u2 + (u1 >> 32); - - for (int j = i - 1; j >= 0; j--) - { - --wBase; - u1 = (x[j] & IMASK) * v; - u2 = u1 >>> 31; // multiply by 2! - u1 = (u1 & 0x7fffffff) << 1; // multiply by 2! - u1 += (w[wBase] & IMASK) + c; - - w[wBase] = (int)u1; - c = u2 + (u1 >>> 32); - } - c += w[--wBase] & IMASK; - w[wBase] = (int)c; - - if (--wBase >= 0) - { - w[wBase] = (int)(c >> 32); - } - wBase += i; - } - - u1 = (x[0] & IMASK); - u1 = u1 * u1; - u2 = u1 >>> 32; - u1 = u1 & IMASK; - - u1 += (w[wBase] & IMASK); - - w[wBase] = (int)u1; - if (--wBase >= 0) - { - w[wBase] = (int)(u2 + (u1 >> 32) + w[wBase]); - } - - return w; - } - - /** - * return x with x = y * z - x is assumed to have enough space. - */ - private int[] multiply(int[] x, int[] y, int[] z) - { - int i = z.length; - - if (i < 1) - { - return x; - } - - int xBase = x.length - y.length; - - for (;;) - { - long a = z[--i] & IMASK; - long val = 0; - - for (int j = y.length - 1; j >= 0; j--) - { - val += a * (y[j] & IMASK) + (x[xBase + j] & IMASK); - - x[xBase + j] = (int)val; - - val >>>= 32; - } - - --xBase; - - if (i < 1) - { - if (xBase >= 0) - { - x[xBase] = (int)val; - } - break; - } - - x[xBase] = (int)val; - } - - return x; - } - - private long _extEuclid(long a, long b, long[] uOut) - { - long res; - - long u1 = 1; - long u3 = a; - long v1 = 0; - long v3 = b; - - while (v3 > 0) - { - long q, tn; - - q = u3 / v3; - - tn = u1 - (v1 * q); - u1 = v1; - v1 = tn; - - tn = u3 - (v3 * q); - u3 = v3; - v3 = tn; - } - - uOut[0] = u1; - - res = (u3 - (u1 * a)) / b; - uOut[1] = res; - - return u3; - } - - private long _modInverse(long v, long m) - throws ArithmeticException - { - if (m < 0) - { - throw new ArithmeticException("Modulus must be positive"); - } - - long[] x = new long[2]; - - long gcd = _extEuclid(v, m, x); - - if (gcd != 1) - { - throw new ArithmeticException("Numbers not relatively prime."); - } - - if (x[0] < 0) - { - x[0] = x[0] + m; - } - - return x[0]; - } - - /** - * Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) - */ - private long getMQuote() - { - if (mQuote != -1L) - { // allready calculated - return mQuote; - } - if ((magnitude[magnitude.length - 1] & 1) == 0) - { - return -1L; // not for even numbers - } - -/* - byte[] bytes = {1, 0, 0, 0, 0}; - BigInteger b = new BigInteger(1, bytes); // 2^32 - mQuote = this.negate().mod(b).modInverse(b).longValue(); -*/ - long v = (((~this.magnitude[this.magnitude.length - 1]) | 1) & 0xffffffffL); - mQuote = _modInverse(v, 0x100000000L); - - return mQuote; - } - - /** - * Montgomery multiplication: a = x * y * R^(-1) mod m - *
        - * Based algorithm 14.36 of Handbook of Applied Cryptography. - *
        - *

      1. m, x, y should have length n
      2. - *
      3. a should have length (n + 1)
      4. - *
      5. b = 2^32, R = b^n
      6. - *
        - * The result is put in x - *
        - * NOTE: the indices of x, y, m, a different in HAC and in Java - */ - private void multiplyMonty(int[] a, int[] x, int[] y, int[] m, long mQuote) - // mQuote = -m^(-1) mod b - { - int n = m.length; - int nMinus1 = n - 1; - long y_0 = y[n - 1] & IMASK; - - // 1. a = 0 (Notation: a = (a_{n} a_{n-1} ... a_{0})_{b} ) - for (int i = 0; i <= n; i++) - { - a[i] = 0; - } - - // 2. for i from 0 to (n - 1) do the following: - for (int i = n; i > 0; i--) - { - - long x_i = x[i - 1] & IMASK; - - // 2.1 u = ((a[0] + (x[i] * y[0]) * mQuote) mod b - long u = ((((a[n] & IMASK) + ((x_i * y_0) & IMASK)) & IMASK) * mQuote) & IMASK; - - // 2.2 a = (a + x_i * y + u * m) / b - long prod1 = x_i * y_0; - long prod2 = u * (m[n - 1] & IMASK); - long tmp = (a[n] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK); - long carry = (prod1 >>> 32) + (prod2 >>> 32) + (tmp >>> 32); - for (int j = nMinus1; j > 0; j--) - { - prod1 = x_i * (y[j - 1] & IMASK); - prod2 = u * (m[j - 1] & IMASK); - tmp = (a[j] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK) + (carry & IMASK); - carry = (carry >>> 32) + (prod1 >>> 32) + (prod2 >>> 32) + (tmp >>> 32); - a[j + 1] = (int)tmp; // division by b - } - carry += (a[0] & IMASK); - a[1] = (int)carry; - a[0] = (int)(carry >>> 32); - } - - // 3. if x >= m the x = x - m - if (compareTo(0, a, 0, m) >= 0) - { - subtract(0, a, 0, m); - } - - // put the result in x - System.arraycopy(a, 1, x, 0, n); - } - - public BigInteger multiply(BigInteger val) - { - if (sign == 0 || val.sign == 0) - return BigInteger.ZERO; - - int resLength = (this.bitLength() + val.bitLength()) / 32 + 1; - int[] res = new int[resLength]; - - if (val == this) - { - square(res, this.magnitude); - } - else - { - multiply(res, this.magnitude, val.magnitude); - } - - return new BigInteger(sign * val.sign, res); - } - - public BigInteger negate() - { - if (sign == 0) - { - return this; - } - - return new BigInteger( -sign, magnitude); - } - - public BigInteger not() - { - return add(ONE).negate(); - } - - public BigInteger pow(int exp) throws ArithmeticException - { - if (exp < 0) - throw new ArithmeticException("Negative exponent"); - if (sign == 0) - return (exp == 0 ? BigInteger.ONE : this); - - BigInteger y, - z; - y = BigInteger.ONE; - z = this; - - while (exp != 0) - { - if ((exp & 0x1) == 1) - { - y = y.multiply(z); - } - exp >>= 1; - if (exp != 0) - { - z = z.multiply(z); - } - } - - return y; - } - - public static BigInteger probablePrime( - int bitLength, - Random random) - { - return new BigInteger(bitLength, 100, random); - } - - private int remainder(int m) - { - long acc = 0; - for (int pos = 0; pos < magnitude.length; ++pos) - { - acc = (acc << 32 | ((long)magnitude[pos] & 0xffffffffL)) % m; - } - - return (int) acc; - } - - /** - * return x = x % y - done in place (y value preserved) - */ - private int[] remainder(int[] x, int[] y) - { - int xStart = 0; - while (xStart < x.length && x[xStart] == 0) - { - ++xStart; - } - - int yStart = 0; - while (yStart < y.length && y[yStart] == 0) - { - ++yStart; - } - - int xyCmp = compareNoLeadingZeroes(xStart, x, yStart, y); - - if (xyCmp > 0) - { - int yBitLength = bitLength(yStart, y); - int xBitLength = bitLength(xStart, x); - int shift = xBitLength - yBitLength; - - int[] c; - int cStart = 0; - int cBitLength = yBitLength; - if (shift > 0) - { - c = shiftLeft(y, shift); - cBitLength += shift; - } - else - { - int len = y.length - yStart; - c = new int[len]; - System.arraycopy(y, yStart, c, 0, len); - } - - for (;;) - { - if (cBitLength < xBitLength - || compareNoLeadingZeroes(xStart, x, cStart, c) >= 0) - { - subtract(xStart, x, cStart, c); - - while (x[xStart] == 0) - { - if (++xStart == x.length) - { - return x; - } - } - - xyCmp = compareNoLeadingZeroes(xStart, x, yStart, y); - - if (xyCmp <= 0) - { - break; - } - - //xBitLength = bitLength(xStart, x); - xBitLength = 32 * (x.length - xStart - 1) + bitLen(x[xStart]); - } - - shift = cBitLength - xBitLength; - - if (shift < 2) - { - shiftRightOneInPlace(cStart, c); - --cBitLength; - } - else - { - shiftRightInPlace(cStart, c, shift); - cBitLength -= shift; - } - -// cStart = c.length - ((cBitLength + 31) / 32); - while (c[cStart] == 0) - { - ++cStart; - } - } - } - - if (xyCmp == 0) - { - for (int i = xStart; i < x.length; ++i) - { - x[i] = 0; - } - } - - return x; - } - - public BigInteger remainder(BigInteger n) throws ArithmeticException - { - if (n.sign == 0) - { - throw new ArithmeticException("BigInteger: Divide by zero"); - } - - if (sign == 0) - { - return BigInteger.ZERO; - } - - // For small values, use fast remainder method - if (n.magnitude.length == 1) - { - int val = n.magnitude[0]; - - if (val > 0) - { - if (val == 1) - return ZERO; - - int rem = remainder(val); - - return rem == 0 - ? ZERO - : new BigInteger(sign, new int[]{ rem }); - } - } - - if (compareTo(0, magnitude, 0, n.magnitude) < 0) - return this; - - int[] res; - if (n.quickPow2Check()) // n is power of two - { - // TODO Move before small values branch above? - res = lastNBits(n.abs().bitLength() - 1); - } - else - { - res = new int[this.magnitude.length]; - System.arraycopy(this.magnitude, 0, res, 0, res.length); - res = remainder(res, n.magnitude); - } - - return new BigInteger(sign, res); - } - - private int[] lastNBits( - int n) - { - if (n < 1) - { - return ZERO_MAGNITUDE; - } - - int numWords = (n + 31) / 32; - numWords = Math.min(numWords, this.magnitude.length); - int[] result = new int[numWords]; - - System.arraycopy(this.magnitude, this.magnitude.length - numWords, result, 0, numWords); - - int hiBits = n % 32; - if (hiBits != 0) - { - result[0] &= ~(-1 << hiBits); - } - - return result; - } - - /** - * do a left shift - this returns a new array. - */ - private int[] shiftLeft(int[] mag, int n) - { - int nInts = n >>> 5; - int nBits = n & 0x1f; - int magLen = mag.length; - int newMag[] = null; - - if (nBits == 0) - { - newMag = new int[magLen + nInts]; - System.arraycopy(mag, 0, newMag, 0, magLen); - } - else - { - int i = 0; - int nBits2 = 32 - nBits; - int highBits = mag[0] >>> nBits2; - - if (highBits != 0) - { - newMag = new int[magLen + nInts + 1]; - newMag[i++] = highBits; - } - else - { - newMag = new int[magLen + nInts]; - } - - int m = mag[0]; - for (int j = 0; j < magLen - 1; j++) - { - int next = mag[j + 1]; - - newMag[i++] = (m << nBits) | (next >>> nBits2); - m = next; - } - - newMag[i] = mag[magLen - 1] << nBits; - } - - return newMag; - } - - public BigInteger shiftLeft(int n) - { - if (sign == 0 || magnitude.length == 0) - { - return ZERO; - } - - if (n == 0) - { - return this; - } - - if (n < 0) - { - return shiftRight( -n); - } - - BigInteger result = new BigInteger(sign, shiftLeft(magnitude, n)); - - if (this.nBits != -1) - { - result.nBits = sign > 0 - ? this.nBits - : this.nBits + n; - } - - if (this.nBitLength != -1) - { - result.nBitLength = this.nBitLength + n; - } - - return result; - } - - /** - * do a right shift - this does it in place. - */ - private static void shiftRightInPlace(int start, int[] mag, int n) - { - int nInts = (n >>> 5) + start; - int nBits = n & 0x1f; - int magEnd = mag.length - 1; - - if (nInts != start) - { - int delta = (nInts - start); - - for (int i = magEnd; i >= nInts; i--) - { - mag[i] = mag[i - delta]; - } - for (int i = nInts - 1; i >= start; i--) - { - mag[i] = 0; - } - } - - if (nBits != 0) - { - int nBits2 = 32 - nBits; - int m = mag[magEnd]; - - for (int i = magEnd; i >= nInts + 1; i--) - { - int next = mag[i - 1]; - - mag[i] = (m >>> nBits) | (next << nBits2); - m = next; - } - - mag[nInts] >>>= nBits; - } - } - - /** - * do a right shift by one - this does it in place. - */ - private static void shiftRightOneInPlace(int start, int[] mag) - { - int magEnd = mag.length - 1; - - int m = mag[magEnd]; - - for (int i = magEnd; i > start; i--) - { - int next = mag[i - 1]; - - mag[i] = (m >>> 1) | (next << 31); - m = next; - } - - mag[start] >>>= 1; - } - - public BigInteger shiftRight(int n) - { - if (n == 0) - { - return this; - } - - if (n < 0) - { - return shiftLeft( -n); - } - - if (n >= bitLength()) - { - return (this.sign < 0 ? valueOf( -1) : BigInteger.ZERO); - } - - int[] res = new int[this.magnitude.length]; - System.arraycopy(this.magnitude, 0, res, 0, res.length); - shiftRightInPlace(0, res, n); - - return new BigInteger(this.sign, res); - - // TODO Port C# version's optimisations... - } - - public int signum() - { - return sign; - } - - /** - * returns x = x - y - we assume x is >= y - */ - private int[] subtract(int xStart, int[] x, int yStart, int[] y) - { - int iT = x.length; - int iV = y.length; - long m; - int borrow = 0; - - do - { - m = ((long)x[--iT] & IMASK) - ((long)y[--iV] & IMASK) + borrow; - x[iT] = (int)m; - -// borrow = (m < 0) ? -1 : 0; - borrow = (int)(m >> 63); - } - while (iV > yStart); - - if (borrow != 0) - { - while (--x[--iT] == -1) - { - } - } - - return x; - } - - public BigInteger subtract(BigInteger val) - { - if (val.sign == 0 || val.magnitude.length == 0) - { - return this; - } - if (sign == 0 || magnitude.length == 0) - { - return val.negate(); - } - if (this.sign != val.sign) - { - return this.add(val.negate()); - } - - int compare = compareTo(0, magnitude, 0, val.magnitude); - if (compare == 0) - { - return ZERO; - } - - BigInteger bigun, littlun; - if (compare < 0) - { - bigun = val; - littlun = this; - } - else - { - bigun = this; - littlun = val; - } - - int res[] = new int[bigun.magnitude.length]; - - System.arraycopy(bigun.magnitude, 0, res, 0, res.length); - - return new BigInteger(this.sign * compare, subtract(0, res, 0, littlun.magnitude)); - } - - public byte[] toByteArray() - { - if (sign == 0) - { - return new byte[1]; - } - - int bitLength = bitLength(); - byte[] bytes = new byte[bitLength / 8 + 1]; - - int magIndex = magnitude.length; - int bytesIndex = bytes.length; - - if (sign > 0) - { - while (magIndex > 1) - { - int mag = magnitude[--magIndex]; - bytes[--bytesIndex] = (byte) mag; - bytes[--bytesIndex] = (byte)(mag >>> 8); - bytes[--bytesIndex] = (byte)(mag >>> 16); - bytes[--bytesIndex] = (byte)(mag >>> 24); - } - - int lastMag = magnitude[0]; - while ((lastMag & 0xFFFFFF00) != 0) - { - bytes[--bytesIndex] = (byte) lastMag; - lastMag >>>= 8; - } - - bytes[--bytesIndex] = (byte) lastMag; - } - else - { - boolean carry = true; - - while (magIndex > 1) - { - int mag = ~magnitude[--magIndex]; - - if (carry) - { - carry = (++mag == 0); - } - - bytes[--bytesIndex] = (byte) mag; - bytes[--bytesIndex] = (byte)(mag >>> 8); - bytes[--bytesIndex] = (byte)(mag >>> 16); - bytes[--bytesIndex] = (byte)(mag >>> 24); - } - - int lastMag = magnitude[0]; - - if (carry) - { - // Never wraps because magnitude[0] != 0 - --lastMag; - } - - while ((lastMag & 0xFFFFFF00) != 0) - { - bytes[--bytesIndex] = (byte) ~lastMag; - lastMag >>>= 8; - } - - bytes[--bytesIndex] = (byte) ~lastMag; - - if (bytesIndex > 0) - { - bytes[--bytesIndex] = (byte)0xFF; - } - } - - return bytes; - } - - public BigInteger xor(BigInteger val) - { - if (this.sign == 0) - { - return val; - } - - if (val.sign == 0) - { - return this; - } - - int[] aMag = this.sign > 0 - ? this.magnitude - : this.add(ONE).magnitude; - - int[] bMag = val.sign > 0 - ? val.magnitude - : val.add(ONE).magnitude; - - boolean resultNeg = (sign < 0 && val.sign >= 0) || (sign >= 0 && val.sign < 0); - int resultLength = Math.max(aMag.length, bMag.length); - int[] resultMag = new int[resultLength]; - - int aStart = resultMag.length - aMag.length; - int bStart = resultMag.length - bMag.length; - - for (int i = 0; i < resultMag.length; ++i) - { - int aWord = i >= aStart ? aMag[i - aStart] : 0; - int bWord = i >= bStart ? bMag[i - bStart] : 0; - - if (this.sign < 0) - { - aWord = ~aWord; - } - - if (val.sign < 0) - { - bWord = ~bWord; - } - - resultMag[i] = aWord ^ bWord; - - if (resultNeg) - { - resultMag[i] = ~resultMag[i]; - } - } - - BigInteger result = new BigInteger(1, resultMag); - - if (resultNeg) - { - result = result.not(); - } - - return result; - } - - public BigInteger or( - BigInteger value) - { - if (this.sign == 0) - { - return value; - } - - if (value.sign == 0) - { - return this; - } - - int[] aMag = this.sign > 0 - ? this.magnitude - : this.add(ONE).magnitude; - - int[] bMag = value.sign > 0 - ? value.magnitude - : value.add(ONE).magnitude; - - boolean resultNeg = sign < 0 || value.sign < 0; - int resultLength = Math.max(aMag.length, bMag.length); - int[] resultMag = new int[resultLength]; - - int aStart = resultMag.length - aMag.length; - int bStart = resultMag.length - bMag.length; - - for (int i = 0; i < resultMag.length; ++i) - { - int aWord = i >= aStart ? aMag[i - aStart] : 0; - int bWord = i >= bStart ? bMag[i - bStart] : 0; - - if (this.sign < 0) - { - aWord = ~aWord; - } - - if (value.sign < 0) - { - bWord = ~bWord; - } - - resultMag[i] = aWord | bWord; - - if (resultNeg) - { - resultMag[i] = ~resultMag[i]; - } - } - - BigInteger result = new BigInteger(1, resultMag); - - if (resultNeg) - { - result = result.not(); - } - - return result; - } - - public BigInteger setBit(int n) - throws ArithmeticException - { - if (n < 0) - { - throw new ArithmeticException("Bit address less than zero"); - } - - if (testBit(n)) - { - return this; - } - - // TODO Handle negative values and zero - if (sign > 0 && n < (bitLength() - 1)) - { - return flipExistingBit(n); - } - - return or(ONE.shiftLeft(n)); - } - - public BigInteger clearBit(int n) - throws ArithmeticException - { - if (n < 0) - { - throw new ArithmeticException("Bit address less than zero"); - } - - if (!testBit(n)) - { - return this; - } - - // TODO Handle negative values - if (sign > 0 && n < (bitLength() - 1)) - { - return flipExistingBit(n); - } - - return andNot(ONE.shiftLeft(n)); - } - - public BigInteger flipBit(int n) - throws ArithmeticException - { - if (n < 0) - { - throw new ArithmeticException("Bit address less than zero"); - } - - // TODO Handle negative values and zero - if (sign > 0 && n < (bitLength() - 1)) - { - return flipExistingBit(n); - } - - return xor(ONE.shiftLeft(n)); - } - - private BigInteger flipExistingBit(int n) - { - int[] mag = new int[this.magnitude.length]; - System.arraycopy(this.magnitude, 0, mag, 0, mag.length); - mag[mag.length - 1 - (n >>> 5)] ^= (1 << (n & 31)); // Flip 0 bit to 1 - //mag[mag.Length - 1 - (n / 32)] |= (1 << (n % 32)); - return new BigInteger(this.sign, mag); - } - - private int[] createResult(int wordNum) - { - int[] result; - if (magnitude.length < wordNum + 1) - { - result = new int[wordNum + 1]; - } - else - { - result = new int[magnitude.length]; - } - - System.arraycopy(magnitude, 0, result, result.length - magnitude.length, magnitude.length); - return result; - } - - public String toString() - { - return toString(10); - } - - public String toString(int rdx) - { - if (magnitude == null) - { - return "null"; - } - else if (sign == 0) - { - return "0"; - } - - StringBuffer sb = new StringBuffer(); - String h; - - if (rdx == 16) - { - for (int i = 0; i < magnitude.length; i++) - { - h = new StringBuffer("0000000").append(Integer.toHexString(magnitude[i])).toString(); - h = h.substring(h.length() - 8); - sb.append(h); - } - } - else if (rdx == 2) - { - sb.append('1'); - - for (int i = bitLength() - 2; i >= 0; --i) - { - sb.append(testBit(i) ? '1' : '0'); - } - } - else - { - // This is algorithm 1a from chapter 4.4 in Seminumerical Algorithms, slow but it works - Stack S = new Stack(); - BigInteger base = new BigInteger(Integer.toString(rdx, rdx), rdx); - // The sign is handled separatly. - // Notice however that for this to work, radix 16 _MUST_ be a special case, - // unless we want to enter a recursion well. In their infinite wisdom, why did not - // the Sun engineers made a c'tor for BigIntegers taking a BigInteger as parameter? - // (Answer: Becuase Sun's BigIntger is clonable, something bouncycastle's isn't.) -// BigInteger u = new BigInteger(this.abs().toString(16), 16); - BigInteger u = this.abs(); - BigInteger b; - - // For speed, maye these test should look directly a u.magnitude.length? - while (!u.equals(BigInteger.ZERO)) - { - b = u.mod(base); - if (b.equals(BigInteger.ZERO)) - S.push("0"); - else - S.push(Integer.toString(b.magnitude[0], rdx)); - u = u.divide(base); - } - // Then pop the stack - while (!S.empty()) - { - sb.append((String) S.pop()); - } - } - - String s = sb.toString(); - - // Strip leading zeros. - while (s.length() > 1 && s.charAt(0) == '0') - s = s.substring(1); - - if (s.length() == 0) - s = "0"; - else if (sign == -1) - s = new StringBuffer("-").append(s).toString(); - - return s; - } - - public static BigInteger valueOf(long val) - { - if (val == 0) - { - return BigInteger.ZERO; - } - - if (val < 0) - { - if (val == Long.MIN_VALUE) - { - return valueOf(~val).not(); - } - - return valueOf(-val).negate(); - } - - // store val into a byte array - byte[] b = new byte[8]; - for (int i = 0; i < 8; i++) - { - b[7 - i] = (byte)val; - val >>= 8; - } - - return new BigInteger(b); - } - - public int getLowestSetBit() - { - if (this.sign == 0) - { - return -1; - } - - int w = magnitude.length; - - while (--w > 0) - { - if (magnitude[w] != 0) - { - break; - } - } - - int word = magnitude[w]; - - int b = (word & 0x0000FFFF) == 0 - ? (word & 0x00FF0000) == 0 - ? 7 - : 15 - : (word & 0x000000FF) == 0 - ? 23 - : 31; - - while (b > 0) - { - if ((word << b) == 0x80000000) - { - break; - } - - b--; - } - - return ((magnitude.length - w) * 32 - (b + 1)); - } - - public boolean testBit(int n) - throws ArithmeticException - { - if (n < 0) - { - throw new ArithmeticException("Bit position must not be negative"); - } - - if (sign < 0) - { - return !not().testBit(n); - } - - int wordNum = n / 32; - if (wordNum >= magnitude.length) - return false; - - int word = magnitude[magnitude.length - 1 - wordNum]; - return ((word >> (n % 32)) & 1) > 0; - } -} diff --git a/src/javabc/FilterInputStream.java b/src/javabc/FilterInputStream.java deleted file mode 100644 index f8f6da3..0000000 --- a/src/javabc/FilterInputStream.java +++ /dev/null @@ -1,61 +0,0 @@ -package javabc; - -import java.io.IOException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStream; - -public class FilterInputStream extends InputStream -{ - protected InputStream in; - - protected FilterInputStream(InputStream underlying) - { - in = underlying; - } - - public int read() throws IOException - { - return in.read(); - } - - public int read(byte[] b) throws IOException - { - return read(b, 0, b.length); - } - - public int read(byte[] b, int offset, int length) throws IOException - { - return in.read(b, offset, length); - } - - public long skip(long n) throws IOException - { - return in.skip(n); - } - - public int available() throws IOException - { - return in.available(); - } - - public void close() throws IOException - { - in.close(); - } - - public void mark(int readlimit) - { - in.mark(readlimit); - } - - public void reset() throws IOException - { - in.reset(); - } - - public boolean markSupported() - { - return in.markSupported(); - } -} diff --git a/src/javabc/FilterOutputStream.java b/src/javabc/FilterOutputStream.java deleted file mode 100644 index d002ae5..0000000 --- a/src/javabc/FilterOutputStream.java +++ /dev/null @@ -1,42 +0,0 @@ -package javabc; - -import java.io.IOException; -import java.io.OutputStream; - -public class FilterOutputStream extends OutputStream -{ - protected OutputStream out; - - protected FilterOutputStream(OutputStream underlying) - { - out = underlying; - } - - public void write(int b) throws IOException - { - out.write(b); - } - - public void write(byte[] b) throws IOException - { - write(b, 0, b.length); - } - - public void write(byte[] b, int offset, int length) throws IOException - { - for (int i = 0; i < length; i++) - { - write(b[offset + i]); - } - } - - public void flush() throws IOException - { - out.flush(); - } - - public void close() throws IOException - { - out.close(); - } -} diff --git a/src/javabc/SecureRandom.java b/src/javabc/SecureRandom.java deleted file mode 100644 index ab7ad0f..0000000 --- a/src/javabc/SecureRandom.java +++ /dev/null @@ -1,141 +0,0 @@ -package javabc; - -import java.util.Random; - -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.digests.SHA256Digest; -import org.bouncycastle.crypto.prng.RandomGenerator; -import org.bouncycastle.crypto.prng.DigestRandomGenerator; - -/** - * An implementation of SecureRandom specifically for the light-weight API, JDK - * 1.0, and the J2ME. Random generation is based on the traditional SHA1 with - * counter. Calling setSeed will always increase the entropy of the hash. - *

        - * Do not use this class without calling setSeed at least once! There - * are some example seed generators in the org.bouncycastle.prng package. - */ -public class SecureRandom extends java.util.Random -{ - // Note: all objects of this class should be deriving their random data from - // a single generator appropriate to the digest being used. - private static final RandomGenerator sha1Generator = new DigestRandomGenerator(new SHA1Digest()); - private static final RandomGenerator sha256Generator = new DigestRandomGenerator(new SHA256Digest()); - - protected RandomGenerator generator; - - // public constructors - public SecureRandom() - { - this(sha1Generator); - setSeed(System.currentTimeMillis()); - } - - public SecureRandom(byte[] inSeed) - { - this(sha1Generator); - setSeed(inSeed); - } - - protected SecureRandom( - RandomGenerator generator) - { - super(0); - this.generator = generator; - } - - // protected constructors - // protected SecureRandom(SecureRandomSpi srs, Provider provider); - - // public class methods - public static SecureRandom getInstance(String algorithm) - { - if (algorithm.equals("SHA1PRNG")) - { - return new SecureRandom(sha1Generator); - } - if (algorithm.equals("SHA256PRNG")) - { - return new SecureRandom(sha256Generator); - } - return new SecureRandom(); // follow old behaviour - } - - public static SecureRandom getInstance(String algorithm, String provider) - { - return getInstance(algorithm); - } - - public static byte[] getSeed(int numBytes) - { - byte[] rv = new byte[numBytes]; - - sha1Generator.addSeedMaterial(System.currentTimeMillis()); - sha1Generator.nextBytes(rv); - - return rv; - } - - // public instance methods - public byte[] generateSeed(int numBytes) - { - byte[] rv = new byte[numBytes]; - - nextBytes(rv); - - return rv; - } - - // public final Provider getProvider(); - public void setSeed(byte[] inSeed) - { - generator.addSeedMaterial(inSeed); - } - - // public methods overriding random - public void nextBytes(byte[] bytes) - { - generator.nextBytes(bytes); - } - - public void setSeed(long rSeed) - { - if (rSeed != 0) // to avoid problems with Random calling setSeed in construction - { - generator.addSeedMaterial(rSeed); - } - } - - public int nextInt() - { - byte[] intBytes = new byte[4]; - - nextBytes(intBytes); - - int result = 0; - - for (int i = 0; i < 4; i++) - { - result = (result << 8) + (intBytes[i] & 0xff); - } - - return result; - } - - protected final int next(int numBits) - { - int size = (numBits + 7) / 8; - byte[] bytes = new byte[size]; - - nextBytes(bytes); - - int result = 0; - - for (int i = 0; i < size; i++) - { - result = (result << 8) + (bytes[i] & 0xff); - } - - return result & ((1 << numBits) - 1); - } -} diff --git a/src/org/bouncycastle/LICENSE.java b/src/org/bouncycastle/LICENSE.java deleted file mode 100644 index 12637ce..0000000 --- a/src/org/bouncycastle/LICENSE.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bouncycastle; - -/** - * The Bouncy Castle License - * - * Copyright (c) 2000-2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) - *

        - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - *

        - * The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. - *

        - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -public class LICENSE -{ - public static String licenseText = - "Copyright (c) 2000-2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) " - + System.getProperty("line.separator") - + System.getProperty("line.separator") - + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software " - + System.getProperty("line.separator") - + "and associated documentation files (the \"Software\"), to deal in the Software without restriction, " - + System.getProperty("line.separator") - + "including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, " - + System.getProperty("line.separator") - + "and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so," - + System.getProperty("line.separator") - + "subject to the following conditions:" - + System.getProperty("line.separator") - + System.getProperty("line.separator") - + "The above copyright notice and this permission notice shall be included in all copies or substantial" - + System.getProperty("line.separator") - + "portions of the Software." - + System.getProperty("line.separator") - + System.getProperty("line.separator") - + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED," - + System.getProperty("line.separator") - + "INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR" - + System.getProperty("line.separator") - + "PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE" - + System.getProperty("line.separator") - + "LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR" - + System.getProperty("line.separator") - + "OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER" - + System.getProperty("line.separator") - + "DEALINGS IN THE SOFTWARE."; - - -} diff --git a/src/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java b/src/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java deleted file mode 100644 index d7216a6..0000000 --- a/src/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public interface ASN1ApplicationSpecificParser - extends ASN1Encodable, InMemoryRepresentable -{ - ASN1Encodable readObject() - throws IOException; -} diff --git a/src/org/bouncycastle/asn1/ASN1Boolean.java b/src/org/bouncycastle/asn1/ASN1Boolean.java deleted file mode 100644 index 1360e8b..0000000 --- a/src/org/bouncycastle/asn1/ASN1Boolean.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bouncycastle.asn1; - -public class ASN1Boolean - extends DERBoolean -{ - public ASN1Boolean(boolean value) - { - super(value); - } - - ASN1Boolean(byte[] value) - { - super(value); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Choice.java b/src/org/bouncycastle/asn1/ASN1Choice.java deleted file mode 100644 index 603131d..0000000 --- a/src/org/bouncycastle/asn1/ASN1Choice.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.bouncycastle.asn1; - -/** - * Marker interface for CHOICE objects - if you implement this in a role your - * own object any attempt to tag the object implicitly will convert the tag to - * an explicit one as the encoding rules require. - *

        - * If you use this interface your class should also implement the getInstance - * pattern which takes a tag object and the tagging mode used. - */ -public interface ASN1Choice -{ - // marker interface -} diff --git a/src/org/bouncycastle/asn1/ASN1Encodable.java b/src/org/bouncycastle/asn1/ASN1Encodable.java deleted file mode 100644 index f5738bf..0000000 --- a/src/org/bouncycastle/asn1/ASN1Encodable.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bouncycastle.asn1; - -public interface ASN1Encodable -{ - ASN1Primitive toASN1Primitive(); -} diff --git a/src/org/bouncycastle/asn1/ASN1EncodableVector.java b/src/org/bouncycastle/asn1/ASN1EncodableVector.java deleted file mode 100644 index 2aa68b3..0000000 --- a/src/org/bouncycastle/asn1/ASN1EncodableVector.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bouncycastle.asn1; - -import java.util.Vector; - -public class ASN1EncodableVector -{ - Vector v = new Vector(); - - public ASN1EncodableVector() - { - } - - public void add(ASN1Encodable obj) - { - v.addElement(obj); - } - - public ASN1Encodable get(int i) - { - return (ASN1Encodable)v.elementAt(i); - } - - public int size() - { - return v.size(); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Encoding.java b/src/org/bouncycastle/asn1/ASN1Encoding.java deleted file mode 100644 index 821d3b9..0000000 --- a/src/org/bouncycastle/asn1/ASN1Encoding.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bouncycastle.asn1; - -public interface ASN1Encoding -{ - static final String DER = "DER"; - static final String DL = "DL"; - static final String BER = "BER"; -} diff --git a/src/org/bouncycastle/asn1/ASN1Enumerated.java b/src/org/bouncycastle/asn1/ASN1Enumerated.java deleted file mode 100644 index 3832f0f..0000000 --- a/src/org/bouncycastle/asn1/ASN1Enumerated.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bouncycastle.asn1; - -import javabc.BigInteger; - -public class ASN1Enumerated - extends DEREnumerated -{ - ASN1Enumerated(byte[] bytes) - { - super(bytes); - } - - public ASN1Enumerated(BigInteger value) - { - super(value); - } - - public ASN1Enumerated(int value) - { - super(value); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Exception.java b/src/org/bouncycastle/asn1/ASN1Exception.java deleted file mode 100644 index dc0ee20..0000000 --- a/src/org/bouncycastle/asn1/ASN1Exception.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class ASN1Exception - extends IOException -{ - private Throwable cause; - - ASN1Exception(String message) - { - super(message); - } - - ASN1Exception(String message, Throwable cause) - { - super(message); - this.cause = cause; - } - - public Throwable getCause() - { - return cause; - } -} diff --git a/src/org/bouncycastle/asn1/ASN1GeneralizedTime.java b/src/org/bouncycastle/asn1/ASN1GeneralizedTime.java deleted file mode 100644 index ea2cb3f..0000000 --- a/src/org/bouncycastle/asn1/ASN1GeneralizedTime.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bouncycastle.asn1; - -import java.util.Date; - -public class ASN1GeneralizedTime - extends DERGeneralizedTime -{ - ASN1GeneralizedTime(byte[] bytes) - { - super(bytes); - } - - public ASN1GeneralizedTime(Date date) - { - super(date); - } - - public ASN1GeneralizedTime(Date date, boolean includeMillis) - { - super(date, includeMillis); - } - - public ASN1GeneralizedTime(String time) - { - super(time); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Generator.java b/src/org/bouncycastle/asn1/ASN1Generator.java deleted file mode 100644 index 50cb705..0000000 --- a/src/org/bouncycastle/asn1/ASN1Generator.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.OutputStream; - -public abstract class ASN1Generator -{ - protected OutputStream _out; - - public ASN1Generator(OutputStream out) - { - _out = out; - } - - public abstract OutputStream getRawOutputStream(); -} diff --git a/src/org/bouncycastle/asn1/ASN1InputStream.java b/src/org/bouncycastle/asn1/ASN1InputStream.java deleted file mode 100644 index fe4ef8c..0000000 --- a/src/org/bouncycastle/asn1/ASN1InputStream.java +++ /dev/null @@ -1,466 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayInputStream; -import java.io.EOFException; -import javabc.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.util.io.Streams; - -/** - * a general purpose ASN.1 decoder - note: this class differs from the - * others in that it returns null after it has read the last object in - * the stream. If an ASN.1 NULL is encountered a DER/BER Null object is - * returned. - */ -public class ASN1InputStream - extends FilterInputStream - implements BERTags -{ - private final int limit; - private final boolean lazyEvaluate; - - private final byte[][] tmpBuffers; - - public ASN1InputStream( - InputStream is) - { - this(is, StreamUtil.findLimit(is)); - } - - /** - * Create an ASN1InputStream based on the input byte array. The length of DER objects in - * the stream is automatically limited to the length of the input array. - * - * @param input array containing ASN.1 encoded data. - */ - public ASN1InputStream( - byte[] input) - { - this(new ByteArrayInputStream(input), input.length); - } - - /** - * Create an ASN1InputStream based on the input byte array. The length of DER objects in - * the stream is automatically limited to the length of the input array. - * - * @param input array containing ASN.1 encoded data. - * @param lazyEvaluate true if parsing inside constructed objects can be delayed. - */ - public ASN1InputStream( - byte[] input, - boolean lazyEvaluate) - { - this(new ByteArrayInputStream(input), input.length, lazyEvaluate); - } - - /** - * Create an ASN1InputStream where no DER object will be longer than limit. - * - * @param input stream containing ASN.1 encoded data. - * @param limit maximum size of a DER encoded object. - */ - public ASN1InputStream( - InputStream input, - int limit) - { - this(input, limit, false); - } - - /** - * Create an ASN1InputStream where no DER object will be longer than limit, and constructed - * objects such as sequences will be parsed lazily. - * - * @param input stream containing ASN.1 encoded data. - * @param lazyEvaluate true if parsing inside constructed objects can be delayed. - */ - public ASN1InputStream( - InputStream input, - boolean lazyEvaluate) - { - this(input, StreamUtil.findLimit(input), lazyEvaluate); - } - - /** - * Create an ASN1InputStream where no DER object will be longer than limit, and constructed - * objects such as sequences will be parsed lazily. - * - * @param input stream containing ASN.1 encoded data. - * @param limit maximum size of a DER encoded object. - * @param lazyEvaluate true if parsing inside constructed objects can be delayed. - */ - public ASN1InputStream( - InputStream input, - int limit, - boolean lazyEvaluate) - { - super(input); - this.limit = limit; - this.lazyEvaluate = lazyEvaluate; - this.tmpBuffers = new byte[11][]; - } - - int getLimit() - { - return limit; - } - - protected int readLength() - throws IOException - { - return readLength(this, limit); - } - - protected void readFully( - byte[] bytes) - throws IOException - { - if (Streams.readFully(this, bytes) != bytes.length) - { - throw new EOFException("EOF encountered in middle of object"); - } - } - - /** - * build an object given its tag and the number of bytes to construct it from. - */ - protected ASN1Primitive buildObject( - int tag, - int tagNo, - int length) - throws IOException - { - boolean isConstructed = (tag & CONSTRUCTED) != 0; - - DefiniteLengthInputStream defIn = new DefiniteLengthInputStream(this, length); - - if ((tag & APPLICATION) != 0) - { - return new DERApplicationSpecific(isConstructed, tagNo, defIn.toByteArray()); - } - - if ((tag & TAGGED) != 0) - { - return new ASN1StreamParser(defIn).readTaggedObject(isConstructed, tagNo); - } - - if (isConstructed) - { - // TODO There are other tags that may be constructed (e.g. BIT_STRING) - switch (tagNo) - { - case OCTET_STRING: - // - // yes, people actually do this... - // - ASN1EncodableVector v = buildDEREncodableVector(defIn); - ASN1OctetString[] strings = new ASN1OctetString[v.size()]; - - for (int i = 0; i != strings.length; i++) - { - strings[i] = (ASN1OctetString)v.get(i); - } - - return new BEROctetString(strings); - case SEQUENCE: - if (lazyEvaluate) - { - return new LazyEncodedSequence(defIn.toByteArray()); - } - else - { - return DERFactory.createSequence(buildDEREncodableVector(defIn)); - } - case SET: - return DERFactory.createSet(buildDEREncodableVector(defIn)); - case EXTERNAL: - return new DERExternal(buildDEREncodableVector(defIn)); - default: - throw new IOException("unknown tag " + tagNo + " encountered"); - } - } - - return createPrimitiveDERObject(tagNo, defIn, tmpBuffers); - } - - ASN1EncodableVector buildEncodableVector() - throws IOException - { - ASN1EncodableVector v = new ASN1EncodableVector(); - ASN1Primitive o; - - while ((o = readObject()) != null) - { - v.add(o); - } - - return v; - } - - ASN1EncodableVector buildDEREncodableVector( - DefiniteLengthInputStream dIn) throws IOException - { - return new ASN1InputStream(dIn).buildEncodableVector(); - } - - public ASN1Primitive readObject() - throws IOException - { - int tag = read(); - if (tag <= 0) - { - if (tag == 0) - { - throw new IOException("unexpected end-of-contents marker"); - } - - return null; - } - - // - // calculate tag number - // - int tagNo = readTagNumber(this, tag); - - boolean isConstructed = (tag & CONSTRUCTED) != 0; - - // - // calculate length - // - int length = readLength(); - - if (length < 0) // indefinite length method - { - if (!isConstructed) - { - throw new IOException("indefinite length primitive encoding encountered"); - } - - IndefiniteLengthInputStream indIn = new IndefiniteLengthInputStream(this, limit); - ASN1StreamParser sp = new ASN1StreamParser(indIn, limit); - - if ((tag & APPLICATION) != 0) - { - return new BERApplicationSpecificParser(tagNo, sp).getLoadedObject(); - } - - if ((tag & TAGGED) != 0) - { - return new BERTaggedObjectParser(true, tagNo, sp).getLoadedObject(); - } - - // TODO There are other tags that may be constructed (e.g. BIT_STRING) - switch (tagNo) - { - case OCTET_STRING: - return new BEROctetStringParser(sp).getLoadedObject(); - case SEQUENCE: - return new BERSequenceParser(sp).getLoadedObject(); - case SET: - return new BERSetParser(sp).getLoadedObject(); - case EXTERNAL: - return new DERExternalParser(sp).getLoadedObject(); - default: - throw new IOException("unknown BER object encountered"); - } - } - else - { - try - { - return buildObject(tag, tagNo, length); - } - catch (IllegalArgumentException e) - { - throw new ASN1Exception("corrupted stream detected", e); - } - } - } - - static int readTagNumber(InputStream s, int tag) - throws IOException - { - int tagNo = tag & 0x1f; - - // - // with tagged object tag number is bottom 5 bits, or stored at the start of the content - // - if (tagNo == 0x1f) - { - tagNo = 0; - - int b = s.read(); - - // X.690-0207 8.1.2.4.2 - // "c) bits 7 to 1 of the first subsequent octet shall not all be zero." - if ((b & 0x7f) == 0) // Note: -1 will pass - { - throw new IOException("corrupted stream - invalid high tag number found"); - } - - while ((b >= 0) && ((b & 0x80) != 0)) - { - tagNo |= (b & 0x7f); - tagNo <<= 7; - b = s.read(); - } - - if (b < 0) - { - throw new EOFException("EOF found inside tag value."); - } - - tagNo |= (b & 0x7f); - } - - return tagNo; - } - - static int readLength(InputStream s, int limit) - throws IOException - { - int length = s.read(); - if (length < 0) - { - throw new EOFException("EOF found when length expected"); - } - - if (length == 0x80) - { - return -1; // indefinite-length encoding - } - - if (length > 127) - { - int size = length & 0x7f; - - // Note: The invalid long form "0xff" (see X.690 8.1.3.5c) will be caught here - if (size > 4) - { - throw new IOException("DER length more than 4 bytes: " + size); - } - - length = 0; - for (int i = 0; i < size; i++) - { - int next = s.read(); - - if (next < 0) - { - throw new EOFException("EOF found reading length"); - } - - length = (length << 8) + next; - } - - if (length < 0) - { - throw new IOException("corrupted stream - negative length found"); - } - - if (length >= limit) // after all we must have read at least 1 byte - { - throw new IOException("corrupted stream - out of bounds length found"); - } - } - - return length; - } - - private static byte[] getBuffer(DefiniteLengthInputStream defIn, byte[][] tmpBuffers) - throws IOException - { - int len = defIn.getRemaining(); - if (defIn.getRemaining() < tmpBuffers.length) - { - byte[] buf = tmpBuffers[len]; - - if (buf == null) - { - buf = tmpBuffers[len] = new byte[len]; - } - - Streams.readFully(defIn, buf); - - return buf; - } - else - { - return defIn.toByteArray(); - } - } - - private static char[] getBMPCharBuffer(DefiniteLengthInputStream defIn) - throws IOException - { - int len = defIn.getRemaining() / 2; - char[] buf = new char[len]; - int totalRead = 0; - while (totalRead < len) - { - int ch1 = defIn.read(); - if (ch1 < 0) - { - break; - } - int ch2 = defIn.read(); - if (ch2 < 0) - { - break; - } - buf[totalRead++] = (char)((ch1 << 8) | (ch2 & 0xff)); - } - - return buf; - } - - static ASN1Primitive createPrimitiveDERObject( - int tagNo, - DefiniteLengthInputStream defIn, - byte[][] tmpBuffers) - throws IOException - { - switch (tagNo) - { - case BIT_STRING: - return DERBitString.fromInputStream(defIn.getRemaining(), defIn); - case BMP_STRING: - return new DERBMPString(getBMPCharBuffer(defIn)); - case BOOLEAN: - return ASN1Boolean.fromOctetString(getBuffer(defIn, tmpBuffers)); - case ENUMERATED: - return ASN1Enumerated.fromOctetString(getBuffer(defIn, tmpBuffers)); - case GENERALIZED_TIME: - return new ASN1GeneralizedTime(defIn.toByteArray()); - case GENERAL_STRING: - return new DERGeneralString(defIn.toByteArray()); - case IA5_STRING: - return new DERIA5String(defIn.toByteArray()); - case INTEGER: - return new ASN1Integer(defIn.toByteArray()); - case NULL: - return DERNull.INSTANCE; // actual content is ignored (enforce 0 length?) - case NUMERIC_STRING: - return new DERNumericString(defIn.toByteArray()); - case OBJECT_IDENTIFIER: - return ASN1ObjectIdentifier.fromOctetString(getBuffer(defIn, tmpBuffers)); - case OCTET_STRING: - return new DEROctetString(defIn.toByteArray()); - case PRINTABLE_STRING: - return new DERPrintableString(defIn.toByteArray()); - case T61_STRING: - return new DERT61String(defIn.toByteArray()); - case UNIVERSAL_STRING: - return new DERUniversalString(defIn.toByteArray()); - case UTC_TIME: - return new ASN1UTCTime(defIn.toByteArray()); - case UTF8_STRING: - return new DERUTF8String(defIn.toByteArray()); - case VISIBLE_STRING: - return new DERVisibleString(defIn.toByteArray()); - default: - throw new IOException("unknown tag " + tagNo + " encountered"); - } - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Integer.java b/src/org/bouncycastle/asn1/ASN1Integer.java deleted file mode 100644 index 292abb8..0000000 --- a/src/org/bouncycastle/asn1/ASN1Integer.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bouncycastle.asn1; - -import javabc.BigInteger; - -public class ASN1Integer - extends DERInteger -{ - ASN1Integer(byte[] bytes) - { - super(bytes); - } - - public ASN1Integer(BigInteger value) - { - super(value); - } - - public ASN1Integer(int value) - { - super(value); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Null.java b/src/org/bouncycastle/asn1/ASN1Null.java deleted file mode 100644 index 99582d9..0000000 --- a/src/org/bouncycastle/asn1/ASN1Null.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -/** - * A NULL object. - */ -public abstract class ASN1Null - extends ASN1Primitive -{ - public ASN1Null() - { - } - - public static ASN1Null getInstance(Object o) - { - if (o instanceof ASN1Null) - { - return (ASN1Null)o; - } - - if (o != null) - { - try - { - return ASN1Null.getInstance(ASN1Primitive.fromByteArray((byte[])o)); - } - catch (IOException e) - { - throw new IllegalArgumentException("failed to construct NULL from byte[]: " + e.getMessage()); - } - catch (ClassCastException e) - { - throw new IllegalArgumentException("unknown object in getInstance(): " + o.getClass().getName()); - } - } - - return null; - } - - public int hashCode() - { - return -1; - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof ASN1Null)) - { - return false; - } - - return true; - } - - abstract void encode(ASN1OutputStream out) - throws IOException; - - public String toString() - { - return "NULL"; - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Object.java b/src/org/bouncycastle/asn1/ASN1Object.java deleted file mode 100644 index 956fb7d..0000000 --- a/src/org/bouncycastle/asn1/ASN1Object.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -public abstract class ASN1Object - implements ASN1Encodable -{ - /** - * Return the default BER or DER encoding for this object. - * - * @return BER/DER byte encoded object. - * @throws java.io.IOException on encoding error. - */ - public byte[] getEncoded() - throws IOException - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - ASN1OutputStream aOut = new ASN1OutputStream(bOut); - - aOut.writeObject(this); - - return bOut.toByteArray(); - } - - /** - * Return either the default for "BER" or a DER encoding if "DER" is specified. - * - * @param encoding name of encoding to use. - * @return byte encoded object. - * @throws IOException on encoding error. - */ - public byte[] getEncoded( - String encoding) - throws IOException - { - if (encoding.equals(ASN1Encoding.DER)) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - DEROutputStream dOut = new DEROutputStream(bOut); - - dOut.writeObject(this); - - return bOut.toByteArray(); - } - else if (encoding.equals(ASN1Encoding.DL)) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - DLOutputStream dOut = new DLOutputStream(bOut); - - dOut.writeObject(this); - - return bOut.toByteArray(); - } - - return this.getEncoded(); - } - - public int hashCode() - { - return this.toASN1Primitive().hashCode(); - } - - public boolean equals( - Object o) - { - if (this == o) - { - return true; - } - - if (!(o instanceof ASN1Encodable)) - { - return false; - } - - ASN1Encodable other = (ASN1Encodable)o; - - return this.toASN1Primitive().equals(other.toASN1Primitive()); - } - - /** - * @deprecated use toASN1Primitive() - * @return the underlying primitive type. - */ - public ASN1Primitive toASN1Object() - { - return this.toASN1Primitive(); - } - - protected static boolean hasEncodedTagValue(Object obj, int tagValue) - { - return (obj instanceof byte[]) && ((byte[])obj)[0] == tagValue; - } - - public abstract ASN1Primitive toASN1Primitive(); -} diff --git a/src/org/bouncycastle/asn1/ASN1ObjectIdentifier.java b/src/org/bouncycastle/asn1/ASN1ObjectIdentifier.java deleted file mode 100644 index eb29838..0000000 --- a/src/org/bouncycastle/asn1/ASN1ObjectIdentifier.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bouncycastle.asn1; - -public class ASN1ObjectIdentifier - extends DERObjectIdentifier -{ - public ASN1ObjectIdentifier(String identifier) - { - super(identifier); - } - - ASN1ObjectIdentifier(byte[] bytes) - { - super(bytes); - } - - /** - * Return an OID that creates a branch under the current one. - * - * @param branchID node numbers for the new branch. - * @return the OID for the new created branch. - */ - public ASN1ObjectIdentifier branch(String branchID) - { - return new ASN1ObjectIdentifier(getId() + "." + branchID); - } - - /** - * Return true if this oid is an extension of the passed in branch, stem. - * @param stem the arc or branch that is a possible parent. - * @return true if the branch is on the passed in stem, false otherwise. - */ - public boolean on(ASN1ObjectIdentifier stem) - { - String id = getId(), stemId = stem.getId(); - return id.length() > stemId.length() && id.charAt(stemId.length()) == '.' && id.startsWith(stemId); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1OctetString.java b/src/org/bouncycastle/asn1/ASN1OctetString.java deleted file mode 100644 index 703b858..0000000 --- a/src/org/bouncycastle/asn1/ASN1OctetString.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.encoders.Hex; - -public abstract class ASN1OctetString - extends ASN1Primitive - implements ASN1OctetStringParser -{ - byte[] string; - - /** - * return an Octet String from a tagged object. - * - * @param obj the tagged object holding the object we want. - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static ASN1OctetString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof ASN1OctetString) - { - return getInstance(o); - } - else - { - return BEROctetString.fromSequence(ASN1Sequence.getInstance(o)); - } - } - - /** - * return an Octet String from the given object. - * - * @param obj the object we want converted. - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1OctetString getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1OctetString) - { - return (ASN1OctetString)obj; - } - else if (obj instanceof byte[]) - { - try - { - return ASN1OctetString.getInstance(ASN1Primitive.fromByteArray((byte[])obj)); - } - catch (IOException e) - { - throw new IllegalArgumentException("failed to construct OCTET STRING from byte[]: " + e.getMessage()); - } - } - else if (obj instanceof ASN1Encodable) - { - ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); - - if (primitive instanceof ASN1OctetString) - { - return (ASN1OctetString)primitive; - } - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * @param string the octets making up the octet string. - */ - public ASN1OctetString( - byte[] string) - { - if (string == null) - { - throw new NullPointerException("string cannot be null"); - } - this.string = string; - } - - public InputStream getOctetStream() - { - return new ByteArrayInputStream(string); - } - - public ASN1OctetStringParser parser() - { - return this; - } - - public byte[] getOctets() - { - return string; - } - - public int hashCode() - { - return Arrays.hashCode(this.getOctets()); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof ASN1OctetString)) - { - return false; - } - - ASN1OctetString other = (ASN1OctetString)o; - - return Arrays.areEqual(string, other.string); - } - - public ASN1Primitive getLoadedObject() - { - return this.toASN1Primitive(); - } - - ASN1Primitive toDERObject() - { - return new DEROctetString(string); - } - - ASN1Primitive toDLObject() - { - return new DEROctetString(string); - } - - abstract void encode(ASN1OutputStream out) - throws IOException; - - public String toString() - { - return "#"+new String(Hex.encode(string)); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1OctetStringParser.java b/src/org/bouncycastle/asn1/ASN1OctetStringParser.java deleted file mode 100644 index 0042317..0000000 --- a/src/org/bouncycastle/asn1/ASN1OctetStringParser.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.InputStream; - -public interface ASN1OctetStringParser - extends ASN1Encodable, InMemoryRepresentable -{ - public InputStream getOctetStream(); -} diff --git a/src/org/bouncycastle/asn1/ASN1OutputStream.java b/src/org/bouncycastle/asn1/ASN1OutputStream.java deleted file mode 100644 index 9a46a78..0000000 --- a/src/org/bouncycastle/asn1/ASN1OutputStream.java +++ /dev/null @@ -1,194 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * Stream that produces output based on the default encoding for the passed in objects. - */ -public class ASN1OutputStream -{ - private OutputStream os; - - public ASN1OutputStream( - OutputStream os) - { - this.os = os; - } - - void writeLength( - int length) - throws IOException - { - if (length > 127) - { - int size = 1; - int val = length; - - while ((val >>>= 8) != 0) - { - size++; - } - - write((byte)(size | 0x80)); - - for (int i = (size - 1) * 8; i >= 0; i -= 8) - { - write((byte)(length >> i)); - } - } - else - { - write((byte)length); - } - } - - void write(int b) - throws IOException - { - os.write(b); - } - - void write(byte[] bytes) - throws IOException - { - os.write(bytes); - } - - void write(byte[] bytes, int off, int len) - throws IOException - { - os.write(bytes, off, len); - } - - void writeEncoded( - int tag, - byte[] bytes) - throws IOException - { - write(tag); - writeLength(bytes.length); - write(bytes); - } - - void writeTag(int flags, int tagNo) - throws IOException - { - if (tagNo < 31) - { - write(flags | tagNo); - } - else - { - write(flags | 0x1f); - if (tagNo < 128) - { - write(tagNo); - } - else - { - byte[] stack = new byte[5]; - int pos = stack.length; - - stack[--pos] = (byte)(tagNo & 0x7F); - - do - { - tagNo >>= 7; - stack[--pos] = (byte)(tagNo & 0x7F | 0x80); - } - while (tagNo > 127); - - write(stack, pos, stack.length - pos); - } - } - } - - void writeEncoded(int flags, int tagNo, byte[] bytes) - throws IOException - { - writeTag(flags, tagNo); - writeLength(bytes.length); - write(bytes); - } - - protected void writeNull() - throws IOException - { - os.write(BERTags.NULL); - os.write(0x00); - } - - public void writeObject( - ASN1Encodable obj) - throws IOException - { - if (obj != null) - { - obj.toASN1Primitive().encode(this); - } - else - { - throw new IOException("null object detected"); - } - } - - void writeImplicitObject(ASN1Primitive obj) - throws IOException - { - if (obj != null) - { - obj.encode(new ImplicitOutputStream(os)); - } - else - { - throw new IOException("null object detected"); - } - } - - public void close() - throws IOException - { - os.close(); - } - - public void flush() - throws IOException - { - os.flush(); - } - - ASN1OutputStream getDERSubStream() - { - return new DEROutputStream(os); - } - - ASN1OutputStream getDLSubStream() - { - return new DLOutputStream(os); - } - - private class ImplicitOutputStream - extends ASN1OutputStream - { - private boolean first = true; - - public ImplicitOutputStream(OutputStream os) - { - super(os); - } - - public void write(int b) - throws IOException - { - if (first) - { - first = false; - } - else - { - super.write(b); - } - } - } -} diff --git a/src/org/bouncycastle/asn1/ASN1ParsingException.java b/src/org/bouncycastle/asn1/ASN1ParsingException.java deleted file mode 100644 index 995b5e9..0000000 --- a/src/org/bouncycastle/asn1/ASN1ParsingException.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.asn1; - -public class ASN1ParsingException - extends IllegalStateException -{ - private Throwable cause; - - public ASN1ParsingException(String message) - { - super(message); - } - - public ASN1ParsingException(String message, Throwable cause) - { - super(message); - this.cause = cause; - } - - public Throwable getCause() - { - return cause; - } -} diff --git a/src/org/bouncycastle/asn1/ASN1Primitive.java b/src/org/bouncycastle/asn1/ASN1Primitive.java deleted file mode 100644 index e6fe137..0000000 --- a/src/org/bouncycastle/asn1/ASN1Primitive.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public abstract class ASN1Primitive - extends ASN1Object -{ - ASN1Primitive() - { - - } - - /** - * Create a base ASN.1 object from a byte stream. - * - * @param data the byte stream to parse. - * @return the base ASN.1 object represented by the byte stream. - * @exception IOException if there is a problem parsing the data. - */ - public static ASN1Primitive fromByteArray(byte[] data) - throws IOException - { - ASN1InputStream aIn = new ASN1InputStream(data); - - try - { - return aIn.readObject(); - } - catch (ClassCastException e) - { - throw new IOException("cannot recognise object in stream"); - } - } - - public final boolean equals(Object o) - { - if (this == o) - { - return true; - } - - return (o instanceof ASN1Encodable) && asn1Equals(((ASN1Encodable)o).toASN1Primitive()); - } - - public ASN1Primitive toASN1Primitive() - { - return this; - } - - ASN1Primitive toDERObject() - { - return this; - } - - ASN1Primitive toDLObject() - { - return this; - } - - public abstract int hashCode(); - - abstract boolean isConstructed(); - - abstract int encodedLength() throws IOException; - - abstract void encode(ASN1OutputStream out) throws IOException; - - abstract boolean asn1Equals(ASN1Primitive o); -} \ No newline at end of file diff --git a/src/org/bouncycastle/asn1/ASN1Sequence.java b/src/org/bouncycastle/asn1/ASN1Sequence.java deleted file mode 100644 index 0507a2b..0000000 --- a/src/org/bouncycastle/asn1/ASN1Sequence.java +++ /dev/null @@ -1,323 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; -import java.util.Vector; - -public abstract class ASN1Sequence - extends ASN1Primitive -{ - protected Vector seq = new Vector(); - - /** - * return an ASN1Sequence from the given object. - * - * @param obj the object we want converted. - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1Sequence getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1Sequence) - { - return (ASN1Sequence)obj; - } - else if (obj instanceof ASN1SequenceParser) - { - return ASN1Sequence.getInstance(((ASN1SequenceParser)obj).toASN1Primitive()); - } - else if (obj instanceof byte[]) - { - try - { - return ASN1Sequence.getInstance(fromByteArray((byte[])obj)); - } - catch (IOException e) - { - throw new IllegalArgumentException("failed to construct sequence from byte[]: " + e.getMessage()); - } - } - else if (obj instanceof ASN1Encodable) - { - ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); - - if (primitive instanceof ASN1Sequence) - { - return (ASN1Sequence)primitive; - } - } - - throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); - } - - /** - * Return an ASN1 sequence from a tagged object. There is a special - * case here, if an object appears to have been explicitly tagged on - * reading but we were expecting it to be implicitly tagged in the - * normal course of events it indicates that we lost the surrounding - * sequence - so we need to add it back (this will happen if the tagged - * object is a sequence that contains other sequences). If you are - * dealing with implicitly tagged sequences you really should - * be using this method. - * - * @param obj the tagged object. - * @param explicit true if the object is meant to be explicitly tagged, - * false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static ASN1Sequence getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - if (explicit) - { - if (!obj.isExplicit()) - { - throw new IllegalArgumentException("object implicit - explicit expected."); - } - - return ASN1Sequence.getInstance(obj.getObject().toASN1Primitive()); - } - else - { - // - // constructed object which appears to be explicitly tagged - // when it should be implicit means we have to add the - // surrounding sequence. - // - if (obj.isExplicit()) - { - if (obj instanceof BERTaggedObject) - { - return new BERSequence(obj.getObject()); - } - else - { - return new DLSequence(obj.getObject()); - } - } - else - { - if (obj.getObject() instanceof ASN1Sequence) - { - return (ASN1Sequence)obj.getObject(); - } - } - } - - throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); - } - - /** - * create an empty sequence - */ - protected ASN1Sequence() - { - } - - /** - * create a sequence containing one object - */ - protected ASN1Sequence( - ASN1Encodable obj) - { - seq.addElement(obj); - } - - /** - * create a sequence containing a vector of objects. - */ - protected ASN1Sequence( - ASN1EncodableVector v) - { - for (int i = 0; i != v.size(); i++) - { - seq.addElement(v.get(i)); - } - } - - /** - * create a sequence containing a vector of objects. - */ - protected ASN1Sequence( - ASN1Encodable[] array) - { - for (int i = 0; i != array.length; i++) - { - seq.addElement(array[i]); - } - } - - public ASN1Encodable[] toArray() - { - ASN1Encodable[] values = new ASN1Encodable[this.size()]; - - for (int i = 0; i != this.size(); i++) - { - values[i] = this.getObjectAt(i); - } - - return values; - } - - public Enumeration getObjects() - { - return seq.elements(); - } - - public ASN1SequenceParser parser() - { - final ASN1Sequence outer = this; - - return new ASN1SequenceParser() - { - private final int max = size(); - - private int index; - - public ASN1Encodable readObject() throws IOException - { - if (index == max) - { - return null; - } - - ASN1Encodable obj = getObjectAt(index++); - if (obj instanceof ASN1Sequence) - { - return ((ASN1Sequence)obj).parser(); - } - if (obj instanceof ASN1Set) - { - return ((ASN1Set)obj).parser(); - } - - return obj; - } - - public ASN1Primitive getLoadedObject() - { - return outer; - } - - public ASN1Primitive toASN1Primitive() - { - return outer; - } - }; - } - - /** - * return the object at the sequence position indicated by index. - * - * @param index the sequence number (starting at zero) of the object - * @return the object at the sequence position indicated by index. - */ - public ASN1Encodable getObjectAt( - int index) - { - return (ASN1Encodable)seq.elementAt(index); - } - - /** - * return the number of objects in this sequence. - * - * @return the number of objects in this sequence. - */ - public int size() - { - return seq.size(); - } - - public int hashCode() - { - Enumeration e = this.getObjects(); - int hashCode = size(); - - while (e.hasMoreElements()) - { - Object o = getNext(e); - hashCode *= 17; - - hashCode ^= o.hashCode(); - } - - return hashCode; - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof ASN1Sequence)) - { - return false; - } - - ASN1Sequence other = (ASN1Sequence)o; - - if (this.size() != other.size()) - { - return false; - } - - Enumeration s1 = this.getObjects(); - Enumeration s2 = other.getObjects(); - - while (s1.hasMoreElements()) - { - ASN1Encodable obj1 = getNext(s1); - ASN1Encodable obj2 = getNext(s2); - - ASN1Primitive o1 = obj1.toASN1Primitive(); - ASN1Primitive o2 = obj2.toASN1Primitive(); - - if (o1 == o2 || o1.equals(o2)) - { - continue; - } - - return false; - } - - return true; - } - - private ASN1Encodable getNext(Enumeration e) - { - ASN1Encodable encObj = (ASN1Encodable)e.nextElement(); - - return encObj; - } - - ASN1Primitive toDERObject() - { - ASN1Sequence derSeq = new DERSequence(); - - derSeq.seq = this.seq; - - return derSeq; - } - - ASN1Primitive toDLObject() - { - ASN1Sequence dlSeq = new DLSequence(); - - dlSeq.seq = this.seq; - - return dlSeq; - } - - boolean isConstructed() - { - return true; - } - - abstract void encode(ASN1OutputStream out) - throws IOException; - - public String toString() - { - return seq.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1SequenceParser.java b/src/org/bouncycastle/asn1/ASN1SequenceParser.java deleted file mode 100644 index 441f150..0000000 --- a/src/org/bouncycastle/asn1/ASN1SequenceParser.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public interface ASN1SequenceParser - extends ASN1Encodable, InMemoryRepresentable -{ - ASN1Encodable readObject() - throws IOException; -} diff --git a/src/org/bouncycastle/asn1/ASN1Set.java b/src/org/bouncycastle/asn1/ASN1Set.java deleted file mode 100644 index 8f785b8..0000000 --- a/src/org/bouncycastle/asn1/ASN1Set.java +++ /dev/null @@ -1,464 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Enumeration; -import java.util.Vector; - -abstract public class ASN1Set - extends ASN1Primitive -{ - private Vector set = new Vector(); - private boolean isSorted = false; - - /** - * return an ASN1Set from the given object. - * - * @param obj the object we want converted. - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1Set getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1Set) - { - return (ASN1Set)obj; - } - else if (obj instanceof ASN1SetParser) - { - return ASN1Set.getInstance(((ASN1SetParser)obj).toASN1Primitive()); - } - else if (obj instanceof byte[]) - { - try - { - return ASN1Set.getInstance(ASN1Primitive.fromByteArray((byte[])obj)); - } - catch (IOException e) - { - throw new IllegalArgumentException("failed to construct set from byte[]: " + e.getMessage()); - } - } - else if (obj instanceof ASN1Encodable) - { - ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); - - if (primitive instanceof ASN1Set) - { - return (ASN1Set)primitive; - } - } - - throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); - } - - /** - * Return an ASN1 set from a tagged object. There is a special - * case here, if an object appears to have been explicitly tagged on - * reading but we were expecting it to be implicitly tagged in the - * normal course of events it indicates that we lost the surrounding - * set - so we need to add it back (this will happen if the tagged - * object is a sequence that contains other sequences). If you are - * dealing with implicitly tagged sets you really should - * be using this method. - * - * @param obj the tagged object. - * @param explicit true if the object is meant to be explicitly tagged - * false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static ASN1Set getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - if (explicit) - { - if (!obj.isExplicit()) - { - throw new IllegalArgumentException("object implicit - explicit expected."); - } - - return (ASN1Set)obj.getObject(); - } - else - { - // - // constructed object which appears to be explicitly tagged - // and it's really implicit means we have to add the - // surrounding set. - // - if (obj.isExplicit()) - { - if (obj instanceof BERTaggedObject) - { - return new BERSet(obj.getObject()); - } - else - { - return new DLSet(obj.getObject()); - } - } - else - { - if (obj.getObject() instanceof ASN1Set) - { - return (ASN1Set)obj.getObject(); - } - - // - // in this case the parser returns a sequence, convert it - // into a set. - // - - - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (obj.getObject() instanceof ASN1Sequence) - { - ASN1Sequence s = (ASN1Sequence)obj.getObject(); - - if (obj instanceof BERTaggedObject) - { - return new BERSet(s.toArray()); - } - else - { - return new DLSet(s.toArray()); - } - } - } - } - - throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); - } - - protected ASN1Set() - { - } - - /** - * create a sequence containing one object - */ - protected ASN1Set( - ASN1Encodable obj) - { - set.addElement(obj); - } - - /** - * create a sequence containing a vector of objects. - */ - protected ASN1Set( - ASN1EncodableVector v, - boolean doSort) - { - for (int i = 0; i != v.size(); i++) - { - set.addElement(v.get(i)); - } - - if (doSort) - { - this.sort(); - } - } - - /** - * create a sequence containing a vector of objects. - */ - protected ASN1Set( - ASN1Encodable[] array, - boolean doSort) - { - for (int i = 0; i != array.length; i++) - { - set.addElement(array[i]); - } - - if (doSort) - { - this.sort(); - } - } - - public Enumeration getObjects() - { - return set.elements(); - } - - /** - * return the object at the set position indicated by index. - * - * @param index the set number (starting at zero) of the object - * @return the object at the set position indicated by index. - */ - public ASN1Encodable getObjectAt( - int index) - { - return (ASN1Encodable)set.elementAt(index); - } - - /** - * return the number of objects in this set. - * - * @return the number of objects in this set. - */ - public int size() - { - return set.size(); - } - - public ASN1Encodable[] toArray() - { - ASN1Encodable[] values = new ASN1Encodable[this.size()]; - - for (int i = 0; i != this.size(); i++) - { - values[i] = this.getObjectAt(i); - } - - return values; - } - - public ASN1SetParser parser() - { - final ASN1Set outer = this; - - return new ASN1SetParser() - { - private final int max = size(); - - private int index; - - public ASN1Encodable readObject() throws IOException - { - if (index == max) - { - return null; - } - - ASN1Encodable obj = getObjectAt(index++); - if (obj instanceof ASN1Sequence) - { - return ((ASN1Sequence)obj).parser(); - } - if (obj instanceof ASN1Set) - { - return ((ASN1Set)obj).parser(); - } - - return obj; - } - - public ASN1Primitive getLoadedObject() - { - return outer; - } - - public ASN1Primitive toASN1Primitive() - { - return outer; - } - }; - } - - public int hashCode() - { - Enumeration e = this.getObjects(); - int hashCode = size(); - - while (e.hasMoreElements()) - { - Object o = getNext(e); - hashCode *= 17; - - hashCode ^= o.hashCode(); - } - - return hashCode; - } - - ASN1Primitive toDERObject() - { - if (isSorted) - { - ASN1Set derSet = new DERSet(); - - derSet.set = this.set; - - return derSet; - } - else - { - Vector v = new Vector(); - - for (int i = 0; i != set.size(); i++) - { - v.addElement(set.elementAt(i)); - } - - ASN1Set derSet = new DERSet(); - - derSet.set = v; - - derSet.sort(); - - return derSet; - } - } - - ASN1Primitive toDLObject() - { - ASN1Set derSet = new DLSet(); - - derSet.set = this.set; - - return derSet; - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof ASN1Set)) - { - return false; - } - - ASN1Set other = (ASN1Set)o; - - if (this.size() != other.size()) - { - return false; - } - - Enumeration s1 = this.getObjects(); - Enumeration s2 = other.getObjects(); - - while (s1.hasMoreElements()) - { - ASN1Encodable obj1 = getNext(s1); - ASN1Encodable obj2 = getNext(s2); - - ASN1Primitive o1 = obj1.toASN1Primitive(); - ASN1Primitive o2 = obj2.toASN1Primitive(); - - if (o1 == o2 || o1.equals(o2)) - { - continue; - } - - return false; - } - - return true; - } - - private ASN1Encodable getNext(Enumeration e) - { - ASN1Encodable encObj = (ASN1Encodable)e.nextElement(); - - // unfortunately null was allowed as a substitute for DER null - if (encObj == null) - { - return DERNull.INSTANCE; - } - - return encObj; - } - - /** - * return true if a <= b (arrays are assumed padded with zeros). - */ - private boolean lessThanOrEqual( - byte[] a, - byte[] b) - { - int len = Math.min(a.length, b.length); - for (int i = 0; i != len; ++i) - { - if (a[i] != b[i]) - { - return (a[i] & 0xff) < (b[i] & 0xff); - } - } - return len == a.length; - } - - private byte[] getEncoded( - ASN1Encodable obj) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - ASN1OutputStream aOut = new ASN1OutputStream(bOut); - - try - { - aOut.writeObject(obj); - } - catch (IOException e) - { - throw new IllegalArgumentException("cannot encode object added to SET"); - } - - return bOut.toByteArray(); - } - - protected void sort() - { - if (!isSorted) - { - isSorted = true; - if (set.size() > 1) - { - boolean swapped = true; - int lastSwap = set.size() - 1; - - while (swapped) - { - int index = 0; - int swapIndex = 0; - byte[] a = getEncoded((ASN1Encodable)set.elementAt(0)); - - swapped = false; - - while (index != lastSwap) - { - byte[] b = getEncoded((ASN1Encodable)set.elementAt(index + 1)); - - if (lessThanOrEqual(a, b)) - { - a = b; - } - else - { - Object o = set.elementAt(index); - - set.setElementAt(set.elementAt(index + 1), index); - set.setElementAt(o, index + 1); - - swapped = true; - swapIndex = index; - } - - index++; - } - - lastSwap = swapIndex; - } - } - } - } - - boolean isConstructed() - { - return true; - } - - abstract void encode(ASN1OutputStream out) - throws IOException; - - public String toString() - { - return set.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/ASN1SetParser.java b/src/org/bouncycastle/asn1/ASN1SetParser.java deleted file mode 100644 index e025535..0000000 --- a/src/org/bouncycastle/asn1/ASN1SetParser.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public interface ASN1SetParser - extends ASN1Encodable, InMemoryRepresentable -{ - public ASN1Encodable readObject() - throws IOException; -} diff --git a/src/org/bouncycastle/asn1/ASN1StreamParser.java b/src/org/bouncycastle/asn1/ASN1StreamParser.java deleted file mode 100644 index 420fa34..0000000 --- a/src/org/bouncycastle/asn1/ASN1StreamParser.java +++ /dev/null @@ -1,247 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -public class ASN1StreamParser -{ - private final InputStream _in; - private final int _limit; - private final byte[][] tmpBuffers; - - public ASN1StreamParser( - InputStream in) - { - this(in, StreamUtil.findLimit(in)); - } - - public ASN1StreamParser( - InputStream in, - int limit) - { - this._in = in; - this._limit = limit; - - this.tmpBuffers = new byte[11][]; - } - - public ASN1StreamParser( - byte[] encoding) - { - this(new ByteArrayInputStream(encoding), encoding.length); - } - - ASN1Encodable readIndef(int tagValue) throws IOException - { - // Note: INDEF => CONSTRUCTED - - // TODO There are other tags that may be constructed (e.g. BIT_STRING) - switch (tagValue) - { - case BERTags.EXTERNAL: - return new DERExternalParser(this); - case BERTags.OCTET_STRING: - return new BEROctetStringParser(this); - case BERTags.SEQUENCE: - return new BERSequenceParser(this); - case BERTags.SET: - return new BERSetParser(this); - default: - throw new ASN1Exception("unknown BER object encountered: 0x" + Integer.toHexString(tagValue)); - } - } - - ASN1Encodable readImplicit(boolean constructed, int tag) throws IOException - { - if (_in instanceof IndefiniteLengthInputStream) - { - if (!constructed) - { - throw new IOException("indefinite length primitive encoding encountered"); - } - - return readIndef(tag); - } - - if (constructed) - { - switch (tag) - { - case BERTags.SET: - return new DERSetParser(this); - case BERTags.SEQUENCE: - return new DERSequenceParser(this); - case BERTags.OCTET_STRING: - return new BEROctetStringParser(this); - } - } - else - { - switch (tag) - { - case BERTags.SET: - throw new ASN1Exception("sequences must use constructed encoding (see X.690 8.9.1/8.10.1)"); - case BERTags.SEQUENCE: - throw new ASN1Exception("sets must use constructed encoding (see X.690 8.11.1/8.12.1)"); - case BERTags.OCTET_STRING: - return new DEROctetStringParser((DefiniteLengthInputStream)_in); - } - } - - // TODO ASN1Exception - throw new RuntimeException("implicit tagging not implemented"); - } - - ASN1Primitive readTaggedObject(boolean constructed, int tag) throws IOException - { - if (!constructed) - { - // Note: !CONSTRUCTED => IMPLICIT - DefiniteLengthInputStream defIn = (DefiniteLengthInputStream)_in; - return new DERTaggedObject(false, tag, new DEROctetString(defIn.toByteArray())); - } - - ASN1EncodableVector v = readVector(); - - if (_in instanceof IndefiniteLengthInputStream) - { - return v.size() == 1 - ? new BERTaggedObject(true, tag, v.get(0)) - : new BERTaggedObject(false, tag, BERFactory.createSequence(v)); - } - - return v.size() == 1 - ? new DERTaggedObject(true, tag, v.get(0)) - : new DERTaggedObject(false, tag, DERFactory.createSequence(v)); - } - - public ASN1Encodable readObject() - throws IOException - { - int tag = _in.read(); - if (tag == -1) - { - return null; - } - - // - // turn of looking for "00" while we resolve the tag - // - set00Check(false); - - // - // calculate tag number - // - int tagNo = ASN1InputStream.readTagNumber(_in, tag); - - boolean isConstructed = (tag & BERTags.CONSTRUCTED) != 0; - - // - // calculate length - // - int length = ASN1InputStream.readLength(_in, _limit); - - if (length < 0) // indefinite length method - { - if (!isConstructed) - { - throw new IOException("indefinite length primitive encoding encountered"); - } - - IndefiniteLengthInputStream indIn = new IndefiniteLengthInputStream(_in, _limit); - ASN1StreamParser sp = new ASN1StreamParser(indIn, _limit); - - if ((tag & BERTags.APPLICATION) != 0) - { - return new BERApplicationSpecificParser(tagNo, sp); - } - - if ((tag & BERTags.TAGGED) != 0) - { - return new BERTaggedObjectParser(true, tagNo, sp); - } - - return sp.readIndef(tagNo); - } - else - { - DefiniteLengthInputStream defIn = new DefiniteLengthInputStream(_in, length); - - if ((tag & BERTags.APPLICATION) != 0) - { - return new DERApplicationSpecific(isConstructed, tagNo, defIn.toByteArray()); - } - - if ((tag & BERTags.TAGGED) != 0) - { - return new BERTaggedObjectParser(isConstructed, tagNo, new ASN1StreamParser(defIn)); - } - - if (isConstructed) - { - // TODO There are other tags that may be constructed (e.g. BIT_STRING) - switch (tagNo) - { - case BERTags.OCTET_STRING: - // - // yes, people actually do this... - // - return new BEROctetStringParser(new ASN1StreamParser(defIn)); - case BERTags.SEQUENCE: - return new DERSequenceParser(new ASN1StreamParser(defIn)); - case BERTags.SET: - return new DERSetParser(new ASN1StreamParser(defIn)); - case BERTags.EXTERNAL: - return new DERExternalParser(new ASN1StreamParser(defIn)); - default: - throw new IOException("unknown tag " + tagNo + " encountered"); - } - } - - // Some primitive encodings can be handled by parsers too... - switch (tagNo) - { - case BERTags.OCTET_STRING: - return new DEROctetStringParser(defIn); - } - - try - { - return ASN1InputStream.createPrimitiveDERObject(tagNo, defIn, tmpBuffers); - } - catch (IllegalArgumentException e) - { - throw new ASN1Exception("corrupted stream detected", e); - } - } - } - - private void set00Check(boolean enabled) - { - if (_in instanceof IndefiniteLengthInputStream) - { - ((IndefiniteLengthInputStream)_in).setEofOn00(enabled); - } - } - - ASN1EncodableVector readVector() throws IOException - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - ASN1Encodable obj; - while ((obj = readObject()) != null) - { - if (obj instanceof InMemoryRepresentable) - { - v.add(((InMemoryRepresentable)obj).getLoadedObject()); - } - else - { - v.add(obj.toASN1Primitive()); - } - } - - return v; - } -} diff --git a/src/org/bouncycastle/asn1/ASN1String.java b/src/org/bouncycastle/asn1/ASN1String.java deleted file mode 100644 index fde4e23..0000000 --- a/src/org/bouncycastle/asn1/ASN1String.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bouncycastle.asn1; - -public interface ASN1String -{ - public String getString(); -} diff --git a/src/org/bouncycastle/asn1/ASN1TaggedObject.java b/src/org/bouncycastle/asn1/ASN1TaggedObject.java deleted file mode 100644 index fb1e244..0000000 --- a/src/org/bouncycastle/asn1/ASN1TaggedObject.java +++ /dev/null @@ -1,236 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -/** - * ASN.1 TaggedObject - in ASN.1 notation this is any object preceded by - * a [n] where n is some number - these are assumed to follow the construction - * rules (as with sequences). - */ -public abstract class ASN1TaggedObject - extends ASN1Primitive - implements ASN1TaggedObjectParser -{ - int tagNo; - boolean empty = false; - boolean explicit = true; - ASN1Encodable obj = null; - - static public ASN1TaggedObject getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - if (explicit) - { - return (ASN1TaggedObject)obj.getObject(); - } - - throw new IllegalArgumentException("implicitly tagged tagged object"); - } - - static public ASN1TaggedObject getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1TaggedObject) - { - return (ASN1TaggedObject)obj; - } - else if (obj instanceof byte[]) - { - try - { - return ASN1TaggedObject.getInstance(fromByteArray((byte[])obj)); - } - catch (IOException e) - { - throw new IllegalArgumentException("failed to construct tagged object from byte[]: " + e.getMessage()); - } - } - - throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); - } - - /** - * Create a tagged object with the style given by the value of explicit. - *

        - * If the object implements ASN1Choice the tag style will always be changed - * to explicit in accordance with the ASN.1 encoding rules. - *

        - * @param explicit true if the object is explicitly tagged. - * @param tagNo the tag number for this object. - * @param obj the tagged object. - */ - public ASN1TaggedObject( - boolean explicit, - int tagNo, - ASN1Encodable obj) - { - if (obj instanceof ASN1Choice) - { - this.explicit = true; - } - else - { - this.explicit = explicit; - } - - this.tagNo = tagNo; - - if (this.explicit) - { - this.obj = obj; - } - else - { - ASN1Primitive prim = obj.toASN1Primitive(); - - if (prim instanceof ASN1Set) - { - ASN1Set s = null; - } - - this.obj = obj; - } - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof ASN1TaggedObject)) - { - return false; - } - - ASN1TaggedObject other = (ASN1TaggedObject)o; - - if (tagNo != other.tagNo || empty != other.empty || explicit != other.explicit) - { - return false; - } - - if(obj == null) - { - if (other.obj != null) - { - return false; - } - } - else - { - if (!(obj.toASN1Primitive().equals(other.obj.toASN1Primitive()))) - { - return false; - } - } - - return true; - } - - public int hashCode() - { - int code = tagNo; - - // TODO: actually this is wrong - the problem is that a re-encoded - // object may end up with a different hashCode due to implicit - // tagging. As implicit tagging is ambiguous if a sequence is involved - // it seems the only correct method for both equals and hashCode is to - // compare the encodings... - if (obj != null) - { - code ^= obj.hashCode(); - } - - return code; - } - - public int getTagNo() - { - return tagNo; - } - - /** - * return whether or not the object may be explicitly tagged. - *

        - * Note: if the object has been read from an input stream, the only - * time you can be sure if isExplicit is returning the true state of - * affairs is if it returns false. An implicitly tagged object may appear - * to be explicitly tagged, so you need to understand the context under - * which the reading was done as well, see getObject below. - */ - public boolean isExplicit() - { - return explicit; - } - - public boolean isEmpty() - { - return empty; - } - - /** - * return whatever was following the tag. - *

        - * Note: tagged objects are generally context dependent if you're - * trying to extract a tagged object you should be going via the - * appropriate getInstance method. - */ - public ASN1Primitive getObject() - { - if (obj != null) - { - return obj.toASN1Primitive(); - } - - return null; - } - - /** - * Return the object held in this tagged object as a parser assuming it has - * the type of the passed in tag. If the object doesn't have a parser - * associated with it, the base object is returned. - */ - public ASN1Encodable getObjectParser( - int tag, - boolean isExplicit) - { - switch (tag) - { - case BERTags.SET: - return ASN1Set.getInstance(this, isExplicit).parser(); - case BERTags.SEQUENCE: - return ASN1Sequence.getInstance(this, isExplicit).parser(); - case BERTags.OCTET_STRING: - return ASN1OctetString.getInstance(this, isExplicit).parser(); - } - - if (isExplicit) - { - return getObject(); - } - - throw new RuntimeException("implicit tagging not implemented for tag: " + tag); - } - - public ASN1Primitive getLoadedObject() - { - return this.toASN1Primitive(); - } - - ASN1Primitive toDERObject() - { - return new DERTaggedObject(explicit, tagNo, obj); - } - - ASN1Primitive toDLObject() - { - return new DLTaggedObject(explicit, tagNo, obj); - } - - abstract void encode(ASN1OutputStream out) - throws IOException; - - public String toString() - { - return "[" + tagNo + "]" + obj; - } -} diff --git a/src/org/bouncycastle/asn1/ASN1TaggedObjectParser.java b/src/org/bouncycastle/asn1/ASN1TaggedObjectParser.java deleted file mode 100644 index a681dc9..0000000 --- a/src/org/bouncycastle/asn1/ASN1TaggedObjectParser.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public interface ASN1TaggedObjectParser - extends ASN1Encodable, InMemoryRepresentable -{ - public int getTagNo(); - - public ASN1Encodable getObjectParser(int tag, boolean isExplicit) - throws IOException; -} diff --git a/src/org/bouncycastle/asn1/ASN1UTCTime.java b/src/org/bouncycastle/asn1/ASN1UTCTime.java deleted file mode 100644 index aac76e1..0000000 --- a/src/org/bouncycastle/asn1/ASN1UTCTime.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bouncycastle.asn1; - -import java.util.Date; - -public class ASN1UTCTime - extends DERUTCTime -{ - ASN1UTCTime(byte[] bytes) - { - super(bytes); - } - - public ASN1UTCTime(Date date) - { - super(date); - } - - public ASN1UTCTime(String time) - { - super(time); - } -} diff --git a/src/org/bouncycastle/asn1/BERApplicationSpecific.java b/src/org/bouncycastle/asn1/BERApplicationSpecific.java deleted file mode 100644 index 8bc8a4e..0000000 --- a/src/org/bouncycastle/asn1/BERApplicationSpecific.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.asn1; - -public class BERApplicationSpecific - extends DERApplicationSpecific -{ - public BERApplicationSpecific(int tagNo, ASN1EncodableVector vec) - { - super(tagNo, vec); - } -} diff --git a/src/org/bouncycastle/asn1/BERApplicationSpecificParser.java b/src/org/bouncycastle/asn1/BERApplicationSpecificParser.java deleted file mode 100644 index 63bd9f3..0000000 --- a/src/org/bouncycastle/asn1/BERApplicationSpecificParser.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class BERApplicationSpecificParser - implements ASN1ApplicationSpecificParser -{ - private final int tag; - private final ASN1StreamParser parser; - - BERApplicationSpecificParser(int tag, ASN1StreamParser parser) - { - this.tag = tag; - this.parser = parser; - } - - public ASN1Encodable readObject() - throws IOException - { - return parser.readObject(); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return new BERApplicationSpecific(tag, parser.readVector()); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException e) - { - throw new ASN1ParsingException(e.getMessage(), e); - } - } - -} diff --git a/src/org/bouncycastle/asn1/BERConstructedOctetString.java b/src/org/bouncycastle/asn1/BERConstructedOctetString.java deleted file mode 100644 index cad6e42..0000000 --- a/src/org/bouncycastle/asn1/BERConstructedOctetString.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Enumeration; -import java.util.Vector; - -/** - * @deprecated use BEROctetString - */ -public class BERConstructedOctetString - extends BEROctetString -{ - private static final int MAX_LENGTH = 1000; - - /** - * convert a vector of octet strings into a single byte string - */ - static private byte[] toBytes( - Vector octs) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - for (int i = 0; i != octs.size(); i++) - { - try - { - DEROctetString o = (DEROctetString)octs.elementAt(i); - - bOut.write(o.getOctets()); - } - catch (ClassCastException e) - { - throw new IllegalArgumentException(octs.elementAt(i).getClass().getName() + " found in input should only contain DEROctetString"); - } - catch (IOException e) - { - throw new IllegalArgumentException("exception converting octets " + e.toString()); - } - } - - return bOut.toByteArray(); - } - - private Vector octs; - - /** - * @param string the octets making up the octet string. - */ - public BERConstructedOctetString( - byte[] string) - { - super(string); - } - - public BERConstructedOctetString( - Vector octs) - { - super(toBytes(octs)); - - this.octs = octs; - } - - public BERConstructedOctetString( - ASN1Primitive obj) - { - super(toByteArray(obj)); - } - - private static byte[] toByteArray(ASN1Primitive obj) - { - try - { - return obj.getEncoded(); - } - catch (IOException e) - { - throw new IllegalArgumentException("Unable to encode object"); - } - } - - public BERConstructedOctetString( - ASN1Encodable obj) - { - this(obj.toASN1Primitive()); - } - - public byte[] getOctets() - { - return string; - } - - /** - * return the DER octets that make up this string. - */ - public Enumeration getObjects() - { - if (octs == null) - { - return generateOcts().elements(); - } - - return octs.elements(); - } - - private Vector generateOcts() - { - Vector vec = new Vector(); - for (int i = 0; i < string.length; i += MAX_LENGTH) - { - int end; - - if (i + MAX_LENGTH > string.length) - { - end = string.length; - } - else - { - end = i + MAX_LENGTH; - } - - byte[] nStr = new byte[end - i]; - - System.arraycopy(string, i, nStr, 0, nStr.length); - - vec.addElement(new DEROctetString(nStr)); - } - - return vec; - } - - public static BEROctetString fromSequence(ASN1Sequence seq) - { - Vector v = new Vector(); - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - v.addElement(e.nextElement()); - } - - return new BERConstructedOctetString(v); - } -} diff --git a/src/org/bouncycastle/asn1/BERFactory.java b/src/org/bouncycastle/asn1/BERFactory.java deleted file mode 100644 index 023be0b..0000000 --- a/src/org/bouncycastle/asn1/BERFactory.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bouncycastle.asn1; - -class BERFactory -{ - static final BERSequence EMPTY_SEQUENCE = new BERSequence(); - static final BERSet EMPTY_SET = new BERSet(); - - static BERSequence createSequence(ASN1EncodableVector v) - { - return v.size() < 1 ? EMPTY_SEQUENCE : new BERSequence(v); - } - - static BERSet createSet(ASN1EncodableVector v) - { - return v.size() < 1 ? EMPTY_SET : new BERSet(v); - } -} diff --git a/src/org/bouncycastle/asn1/BERGenerator.java b/src/org/bouncycastle/asn1/BERGenerator.java deleted file mode 100644 index ef7f9a3..0000000 --- a/src/org/bouncycastle/asn1/BERGenerator.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public class BERGenerator - extends ASN1Generator -{ - private boolean _tagged = false; - private boolean _isExplicit; - private int _tagNo; - - protected BERGenerator( - OutputStream out) - { - super(out); - } - - public BERGenerator( - OutputStream out, - int tagNo, - boolean isExplicit) - { - super(out); - - _tagged = true; - _isExplicit = isExplicit; - _tagNo = tagNo; - } - - public OutputStream getRawOutputStream() - { - return _out; - } - - private void writeHdr( - int tag) - throws IOException - { - _out.write(tag); - _out.write(0x80); - } - - protected void writeBERHeader( - int tag) - throws IOException - { - if (_tagged) - { - int tagNum = _tagNo | BERTags.TAGGED; - - if (_isExplicit) - { - writeHdr(tagNum | BERTags.CONSTRUCTED); - writeHdr(tag); - } - else - { - if ((tag & BERTags.CONSTRUCTED) != 0) - { - writeHdr(tagNum | BERTags.CONSTRUCTED); - } - else - { - writeHdr(tagNum); - } - } - } - else - { - writeHdr(tag); - } - } - - protected void writeBERBody( - InputStream contentStream) - throws IOException - { - int ch; - - while ((ch = contentStream.read()) >= 0) - { - _out.write(ch); - } - } - - protected void writeBEREnd() - throws IOException - { - _out.write(0x00); - _out.write(0x00); - - if (_tagged && _isExplicit) // write extra end for tag header - { - _out.write(0x00); - _out.write(0x00); - } - } -} diff --git a/src/org/bouncycastle/asn1/BEROctetString.java b/src/org/bouncycastle/asn1/BEROctetString.java deleted file mode 100644 index bc1ed44..0000000 --- a/src/org/bouncycastle/asn1/BEROctetString.java +++ /dev/null @@ -1,168 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Enumeration; -import java.util.Vector; - -public class BEROctetString - extends ASN1OctetString -{ - private static final int MAX_LENGTH = 1000; - - private ASN1OctetString[] octs; - - /** - * convert a vector of octet strings into a single byte string - */ - static private byte[] toBytes( - ASN1OctetString[] octs) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - for (int i = 0; i != octs.length; i++) - { - try - { - DEROctetString o = (DEROctetString)octs[i]; - - bOut.write(o.getOctets()); - } - catch (ClassCastException e) - { - throw new IllegalArgumentException(octs[i].getClass().getName() + " found in input should only contain DEROctetString"); - } - catch (IOException e) - { - throw new IllegalArgumentException("exception converting octets " + e.toString()); - } - } - - return bOut.toByteArray(); - } - - /** - * @param string the octets making up the octet string. - */ - public BEROctetString( - byte[] string) - { - super(string); - } - - public BEROctetString( - ASN1OctetString[] octs) - { - super(toBytes(octs)); - - this.octs = octs; - } - - public byte[] getOctets() - { - return string; - } - - /** - * return the DER octets that make up this string. - */ - public Enumeration getObjects() - { - if (octs == null) - { - return generateOcts().elements(); - } - - return new Enumeration() - { - int counter = 0; - - public boolean hasMoreElements() - { - return counter < octs.length; - } - - public Object nextElement() - { - return octs[counter++]; - } - }; - } - - private Vector generateOcts() - { - Vector vec = new Vector(); - for (int i = 0; i < string.length; i += MAX_LENGTH) - { - int end; - - if (i + MAX_LENGTH > string.length) - { - end = string.length; - } - else - { - end = i + MAX_LENGTH; - } - - byte[] nStr = new byte[end - i]; - - System.arraycopy(string, i, nStr, 0, nStr.length); - - vec.addElement(new DEROctetString(nStr)); - } - - return vec; - } - - boolean isConstructed() - { - return true; - } - - int encodedLength() - throws IOException - { - int length = 0; - for (Enumeration e = getObjects(); e.hasMoreElements();) - { - length += ((ASN1Encodable)e.nextElement()).toASN1Primitive().encodedLength(); - } - - return 2 + length + 2; - } - - public void encode( - ASN1OutputStream out) - throws IOException - { - out.write(BERTags.CONSTRUCTED | BERTags.OCTET_STRING); - - out.write(0x80); - - // - // write out the octet array - // - for (Enumeration e = getObjects(); e.hasMoreElements();) - { - out.writeObject((ASN1Encodable)e.nextElement()); - } - - out.write(0x00); - out.write(0x00); - } - - static BEROctetString fromSequence(ASN1Sequence seq) - { - ASN1OctetString[] v = new ASN1OctetString[seq.size()]; - Enumeration e = seq.getObjects(); - int index = 0; - - while (e.hasMoreElements()) - { - v[index++] = (ASN1OctetString)e.nextElement(); - } - - return new BEROctetString(v); - } -} diff --git a/src/org/bouncycastle/asn1/BEROctetStringGenerator.java b/src/org/bouncycastle/asn1/BEROctetStringGenerator.java deleted file mode 100644 index b8df94a..0000000 --- a/src/org/bouncycastle/asn1/BEROctetStringGenerator.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.OutputStream; - -public class BEROctetStringGenerator - extends BERGenerator -{ - public BEROctetStringGenerator(OutputStream out) - throws IOException - { - super(out); - - writeBERHeader(BERTags.CONSTRUCTED | BERTags.OCTET_STRING); - } - - public BEROctetStringGenerator( - OutputStream out, - int tagNo, - boolean isExplicit) - throws IOException - { - super(out, tagNo, isExplicit); - - writeBERHeader(BERTags.CONSTRUCTED | BERTags.OCTET_STRING); - } - - public OutputStream getOctetOutputStream() - { - return getOctetOutputStream(new byte[1000]); // limit for CER encoding. - } - - public OutputStream getOctetOutputStream( - byte[] buf) - { - return new BufferedBEROctetStream(buf); - } - - private class BufferedBEROctetStream - extends OutputStream - { - private byte[] _buf; - private int _off; - private DEROutputStream _derOut; - - BufferedBEROctetStream( - byte[] buf) - { - _buf = buf; - _off = 0; - _derOut = new DEROutputStream(_out); - } - - public void write( - int b) - throws IOException - { - _buf[_off++] = (byte)b; - - if (_off == _buf.length) - { - DEROctetString.encode(_derOut, _buf); - _off = 0; - } - } - - public void write(byte[] b, int off, int len) throws IOException - { - while (len > 0) - { - int numToCopy = Math.min(len, _buf.length - _off); - System.arraycopy(b, off, _buf, _off, numToCopy); - - _off += numToCopy; - if (_off < _buf.length) - { - break; - } - - DEROctetString.encode(_derOut, _buf); - _off = 0; - - off += numToCopy; - len -= numToCopy; - } - } - - public void close() - throws IOException - { - if (_off != 0) - { - byte[] bytes = new byte[_off]; - System.arraycopy(_buf, 0, bytes, 0, _off); - - DEROctetString.encode(_derOut, bytes); - } - - writeBEREnd(); - } - } -} diff --git a/src/org/bouncycastle/asn1/BEROctetStringParser.java b/src/org/bouncycastle/asn1/BEROctetStringParser.java deleted file mode 100644 index 1c7132e..0000000 --- a/src/org/bouncycastle/asn1/BEROctetStringParser.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.util.io.Streams; - -public class BEROctetStringParser - implements ASN1OctetStringParser -{ - private ASN1StreamParser _parser; - - BEROctetStringParser( - ASN1StreamParser parser) - { - _parser = parser; - } - - public InputStream getOctetStream() - { - return new ConstructedOctetStream(_parser); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return new BEROctetString(Streams.readAll(getOctetStream())); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException e) - { - throw new ASN1ParsingException("IOException converting stream to byte array: " + e.getMessage(), e); - } - } -} diff --git a/src/org/bouncycastle/asn1/BEROutputStream.java b/src/org/bouncycastle/asn1/BEROutputStream.java deleted file mode 100644 index 7117d4f..0000000 --- a/src/org/bouncycastle/asn1/BEROutputStream.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.OutputStream; - -public class BEROutputStream - extends DEROutputStream -{ - public BEROutputStream( - OutputStream os) - { - super(os); - } - - public void writeObject( - Object obj) - throws IOException - { - if (obj == null) - { - writeNull(); - } - else if (obj instanceof ASN1Primitive) - { - ((ASN1Primitive)obj).encode(this); - } - else if (obj instanceof ASN1Encodable) - { - ((ASN1Encodable)obj).toASN1Primitive().encode(this); - } - else - { - throw new IOException("object not BEREncodable"); - } - } -} diff --git a/src/org/bouncycastle/asn1/BERSequence.java b/src/org/bouncycastle/asn1/BERSequence.java deleted file mode 100644 index aa44950..0000000 --- a/src/org/bouncycastle/asn1/BERSequence.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -public class BERSequence - extends ASN1Sequence -{ - /** - * create an empty sequence - */ - public BERSequence() - { - } - - /** - * create a sequence containing one object - */ - public BERSequence( - ASN1Encodable obj) - { - super(obj); - } - - /** - * create a sequence containing a vector of objects. - */ - public BERSequence( - ASN1EncodableVector v) - { - super(v); - } - - /** - * create a sequence containing an array of objects. - */ - public BERSequence( - ASN1Encodable[] array) - { - super(array); - } - - int encodedLength() - throws IOException - { - int length = 0; - for (Enumeration e = getObjects(); e.hasMoreElements();) - { - length += ((ASN1Encodable)e.nextElement()).toASN1Primitive().encodedLength(); - } - - return 2 + length + 2; - } - - /* - */ - void encode( - ASN1OutputStream out) - throws IOException - { - out.write(BERTags.SEQUENCE | BERTags.CONSTRUCTED); - out.write(0x80); - - Enumeration e = getObjects(); - while (e.hasMoreElements()) - { - out.writeObject((ASN1Encodable)e.nextElement()); - } - - out.write(0x00); - out.write(0x00); - } -} diff --git a/src/org/bouncycastle/asn1/BERSequenceGenerator.java b/src/org/bouncycastle/asn1/BERSequenceGenerator.java deleted file mode 100644 index 6e27565..0000000 --- a/src/org/bouncycastle/asn1/BERSequenceGenerator.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.OutputStream; - -public class BERSequenceGenerator - extends BERGenerator -{ - public BERSequenceGenerator( - OutputStream out) - throws IOException - { - super(out); - - writeBERHeader(BERTags.CONSTRUCTED | BERTags.SEQUENCE); - } - - public BERSequenceGenerator( - OutputStream out, - int tagNo, - boolean isExplicit) - throws IOException - { - super(out, tagNo, isExplicit); - - writeBERHeader(BERTags.CONSTRUCTED | BERTags.SEQUENCE); - } - - public void addObject( - ASN1Encodable object) - throws IOException - { - object.toASN1Primitive().encode(new BEROutputStream(_out)); - } - - public void close() - throws IOException - { - writeBEREnd(); - } -} diff --git a/src/org/bouncycastle/asn1/BERSequenceParser.java b/src/org/bouncycastle/asn1/BERSequenceParser.java deleted file mode 100644 index d5d4395..0000000 --- a/src/org/bouncycastle/asn1/BERSequenceParser.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class BERSequenceParser - implements ASN1SequenceParser -{ - private ASN1StreamParser _parser; - - BERSequenceParser(ASN1StreamParser parser) - { - this._parser = parser; - } - - public ASN1Encodable readObject() - throws IOException - { - return _parser.readObject(); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return new BERSequence(_parser.readVector()); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException e) - { - throw new IllegalStateException(e.getMessage()); - } - } -} diff --git a/src/org/bouncycastle/asn1/BERSet.java b/src/org/bouncycastle/asn1/BERSet.java deleted file mode 100644 index 064d778..0000000 --- a/src/org/bouncycastle/asn1/BERSet.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -public class BERSet - extends ASN1Set -{ - /** - * create an empty sequence - */ - public BERSet() - { - } - - /** - * @param obj - a single object that makes up the set. - */ - public BERSet( - ASN1Encodable obj) - { - super(obj); - } - - /** - * @param v - a vector of objects making up the set. - */ - public BERSet( - ASN1EncodableVector v) - { - super(v, false); - } - - /** - * create a set from an array of objects. - */ - public BERSet( - ASN1Encodable[] a) - { - super(a, false); - } - - int encodedLength() - throws IOException - { - int length = 0; - for (Enumeration e = getObjects(); e.hasMoreElements();) - { - length += ((ASN1Encodable)e.nextElement()).toASN1Primitive().encodedLength(); - } - - return 2 + length + 2; - } - - /* - */ - void encode( - ASN1OutputStream out) - throws IOException - { - out.write(BERTags.SET | BERTags.CONSTRUCTED); - out.write(0x80); - - Enumeration e = getObjects(); - while (e.hasMoreElements()) - { - out.writeObject((ASN1Encodable)e.nextElement()); - } - - out.write(0x00); - out.write(0x00); - } -} diff --git a/src/org/bouncycastle/asn1/BERSetParser.java b/src/org/bouncycastle/asn1/BERSetParser.java deleted file mode 100644 index 5a30f3c..0000000 --- a/src/org/bouncycastle/asn1/BERSetParser.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class BERSetParser - implements ASN1SetParser -{ - private ASN1StreamParser _parser; - - BERSetParser(ASN1StreamParser parser) - { - this._parser = parser; - } - - public ASN1Encodable readObject() - throws IOException - { - return _parser.readObject(); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return new BERSet(_parser.readVector()); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException e) - { - throw new ASN1ParsingException(e.getMessage(), e); - } - } -} diff --git a/src/org/bouncycastle/asn1/BERTaggedObject.java b/src/org/bouncycastle/asn1/BERTaggedObject.java deleted file mode 100644 index 1af0a43..0000000 --- a/src/org/bouncycastle/asn1/BERTaggedObject.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -/** - * BER TaggedObject - in ASN.1 notation this is any object preceded by - * a [n] where n is some number - these are assumed to follow the construction - * rules (as with sequences). - */ -public class BERTaggedObject - extends ASN1TaggedObject -{ - /** - * @param tagNo the tag number for this object. - * @param obj the tagged object. - */ - public BERTaggedObject( - int tagNo, - ASN1Encodable obj) - { - super(true, tagNo, obj); - } - - /** - * @param explicit true if an explicitly tagged object. - * @param tagNo the tag number for this object. - * @param obj the tagged object. - */ - public BERTaggedObject( - boolean explicit, - int tagNo, - ASN1Encodable obj) - { - super(explicit, tagNo, obj); - } - - /** - * create an implicitly tagged object that contains a zero - * length sequence. - */ - public BERTaggedObject( - int tagNo) - { - super(false, tagNo, new BERSequence()); - } - - boolean isConstructed() - { - if (!empty) - { - if (explicit) - { - return true; - } - else - { - ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); - - return primitive.isConstructed(); - } - } - else - { - return true; - } - } - - int encodedLength() - throws IOException - { - if (!empty) - { - ASN1Primitive primitive = obj.toASN1Primitive(); - int length = primitive.encodedLength(); - - if (explicit) - { - return StreamUtil.calculateTagLength(tagNo) + StreamUtil.calculateBodyLength(length) + length; - } - else - { - // header length already in calculation - length = length - 1; - - return StreamUtil.calculateTagLength(tagNo) + length; - } - } - else - { - return StreamUtil.calculateTagLength(tagNo) + 1; - } - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeTag(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo); - out.write(0x80); - - if (!empty) - { - if (!explicit) - { - Enumeration e; - if (obj instanceof ASN1OctetString) - { - if (obj instanceof BEROctetString) - { - e = ((BEROctetString)obj).getObjects(); - } - else - { - ASN1OctetString octs = (ASN1OctetString)obj; - BEROctetString berO = new BEROctetString(octs.getOctets()); - e = berO.getObjects(); - } - } - else if (obj instanceof ASN1Sequence) - { - e = ((ASN1Sequence)obj).getObjects(); - } - else if (obj instanceof ASN1Set) - { - e = ((ASN1Set)obj).getObjects(); - } - else - { - throw new RuntimeException("not implemented: " + obj.getClass().getName()); - } - - while (e.hasMoreElements()) - { - out.writeObject((ASN1Encodable)e.nextElement()); - } - } - else - { - out.writeObject(obj); - } - } - - out.write(0x00); - out.write(0x00); - } -} diff --git a/src/org/bouncycastle/asn1/BERTaggedObjectParser.java b/src/org/bouncycastle/asn1/BERTaggedObjectParser.java deleted file mode 100644 index 7cd334a..0000000 --- a/src/org/bouncycastle/asn1/BERTaggedObjectParser.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class BERTaggedObjectParser - implements ASN1TaggedObjectParser -{ - private boolean _constructed; - private int _tagNumber; - private ASN1StreamParser _parser; - - BERTaggedObjectParser( - boolean constructed, - int tagNumber, - ASN1StreamParser parser) - { - _constructed = constructed; - _tagNumber = tagNumber; - _parser = parser; - } - - public boolean isConstructed() - { - return _constructed; - } - - public int getTagNo() - { - return _tagNumber; - } - - public ASN1Encodable getObjectParser( - int tag, - boolean isExplicit) - throws IOException - { - if (isExplicit) - { - if (!_constructed) - { - throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)"); - } - return _parser.readObject(); - } - - return _parser.readImplicit(_constructed, tag); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return _parser.readTaggedObject(_constructed, _tagNumber); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return this.getLoadedObject(); - } - catch (IOException e) - { - throw new ASN1ParsingException(e.getMessage()); - } - } -} diff --git a/src/org/bouncycastle/asn1/BERTags.java b/src/org/bouncycastle/asn1/BERTags.java deleted file mode 100644 index 7281a6a..0000000 --- a/src/org/bouncycastle/asn1/BERTags.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bouncycastle.asn1; - -public interface BERTags -{ - public static final int BOOLEAN = 0x01; - public static final int INTEGER = 0x02; - public static final int BIT_STRING = 0x03; - public static final int OCTET_STRING = 0x04; - public static final int NULL = 0x05; - public static final int OBJECT_IDENTIFIER = 0x06; - public static final int EXTERNAL = 0x08; - public static final int ENUMERATED = 0x0a; - public static final int SEQUENCE = 0x10; - public static final int SEQUENCE_OF = 0x10; // for completeness - public static final int SET = 0x11; - public static final int SET_OF = 0x11; // for completeness - - - public static final int NUMERIC_STRING = 0x12; - public static final int PRINTABLE_STRING = 0x13; - public static final int T61_STRING = 0x14; - public static final int VIDEOTEX_STRING = 0x15; - public static final int IA5_STRING = 0x16; - public static final int UTC_TIME = 0x17; - public static final int GENERALIZED_TIME = 0x18; - public static final int GRAPHIC_STRING = 0x19; - public static final int VISIBLE_STRING = 0x1a; - public static final int GENERAL_STRING = 0x1b; - public static final int UNIVERSAL_STRING = 0x1c; - public static final int BMP_STRING = 0x1e; - public static final int UTF8_STRING = 0x0c; - - public static final int CONSTRUCTED = 0x20; - public static final int APPLICATION = 0x40; - public static final int TAGGED = 0x80; -} diff --git a/src/org/bouncycastle/asn1/ConstructedOctetStream.java b/src/org/bouncycastle/asn1/ConstructedOctetStream.java deleted file mode 100644 index f247b11..0000000 --- a/src/org/bouncycastle/asn1/ConstructedOctetStream.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.InputStream; - -class ConstructedOctetStream - extends InputStream -{ - private final ASN1StreamParser _parser; - - private boolean _first = true; - private InputStream _currentStream; - - ConstructedOctetStream( - ASN1StreamParser parser) - { - _parser = parser; - } - - public int read(byte[] b, int off, int len) throws IOException - { - if (_currentStream == null) - { - if (!_first) - { - return -1; - } - - ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); - - if (s == null) - { - return -1; - } - - _first = false; - _currentStream = s.getOctetStream(); - } - - int totalRead = 0; - - for (;;) - { - int numRead = _currentStream.read(b, off + totalRead, len - totalRead); - - if (numRead >= 0) - { - totalRead += numRead; - - if (totalRead == len) - { - return totalRead; - } - } - else - { - ASN1OctetStringParser aos = (ASN1OctetStringParser)_parser.readObject(); - - if (aos == null) - { - _currentStream = null; - return totalRead < 1 ? -1 : totalRead; - } - - _currentStream = aos.getOctetStream(); - } - } - } - - public int read() - throws IOException - { - if (_currentStream == null) - { - if (!_first) - { - return -1; - } - - ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); - - if (s == null) - { - return -1; - } - - _first = false; - _currentStream = s.getOctetStream(); - } - - for (;;) - { - int b = _currentStream.read(); - - if (b >= 0) - { - return b; - } - - ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); - - if (s == null) - { - _currentStream = null; - return -1; - } - - _currentStream = s.getOctetStream(); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERApplicationSpecific.java b/src/org/bouncycastle/asn1/DERApplicationSpecific.java deleted file mode 100644 index 5b59288..0000000 --- a/src/org/bouncycastle/asn1/DERApplicationSpecific.java +++ /dev/null @@ -1,276 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import org.bouncycastle.util.Arrays; - -/** - * Base class for an application specific object - */ -public class DERApplicationSpecific - extends ASN1Primitive -{ - private final boolean isConstructed; - private final int tag; - private final byte[] octets; - - DERApplicationSpecific( - boolean isConstructed, - int tag, - byte[] octets) - { - this.isConstructed = isConstructed; - this.tag = tag; - this.octets = octets; - } - - public DERApplicationSpecific( - int tag, - byte[] octets) - { - this(false, tag, octets); - } - - public DERApplicationSpecific( - int tag, - ASN1Encodable object) - throws IOException - { - this(true, tag, object); - } - - public DERApplicationSpecific( - boolean explicit, - int tag, - ASN1Encodable object) - throws IOException - { - ASN1Primitive primitive = object.toASN1Primitive(); - - byte[] data = primitive.getEncoded(ASN1Encoding.DER); - - this.isConstructed = explicit || (primitive instanceof ASN1Set || primitive instanceof ASN1Sequence); - this.tag = tag; - - if (explicit) - { - this.octets = data; - } - else - { - int lenBytes = getLengthOfHeader(data); - byte[] tmp = new byte[data.length - lenBytes]; - System.arraycopy(data, lenBytes, tmp, 0, tmp.length); - this.octets = tmp; - } - } - - public DERApplicationSpecific(int tagNo, ASN1EncodableVector vec) - { - this.tag = tagNo; - this.isConstructed = true; - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - for (int i = 0; i != vec.size(); i++) - { - try - { - bOut.write(((ASN1Object)vec.get(i)).getEncoded(ASN1Encoding.DER)); - } - catch (IOException e) - { - throw new ASN1ParsingException("malformed object: " + e, e); - } - } - this.octets = bOut.toByteArray(); - } - - public static DERApplicationSpecific getInstance(Object obj) - { - if (obj == null || obj instanceof DERApplicationSpecific) - { - return (DERApplicationSpecific)obj; - } - else if (obj instanceof byte[]) - { - try - { - return DERApplicationSpecific.getInstance(ASN1Primitive.fromByteArray((byte[])obj)); - } - catch (IOException e) - { - throw new IllegalArgumentException("failed to construct object from byte[]: " + e.getMessage()); - } - } - else if (obj instanceof ASN1Encodable) - { - ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); - - if (primitive instanceof ASN1Sequence) - { - return (DERApplicationSpecific)primitive; - } - } - - throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); - } - - private int getLengthOfHeader(byte[] data) - { - int length = data[1] & 0xff; // TODO: assumes 1 byte tag - - if (length == 0x80) - { - return 2; // indefinite-length encoding - } - - if (length > 127) - { - int size = length & 0x7f; - - // Note: The invalid long form "0xff" (see X.690 8.1.3.5c) will be caught here - if (size > 4) - { - throw new IllegalStateException("DER length more than 4 bytes: " + size); - } - - return size + 2; - } - - return 2; - } - - public boolean isConstructed() - { - return isConstructed; - } - - public byte[] getContents() - { - return octets; - } - - public int getApplicationTag() - { - return tag; - } - - /** - * Return the enclosed object assuming explicit tagging. - * - * @return the resulting object - * @throws IOException if reconstruction fails. - */ - public ASN1Primitive getObject() - throws IOException - { - return new ASN1InputStream(getContents()).readObject(); - } - - /** - * Return the enclosed object assuming implicit tagging. - * - * @param derTagNo the type tag that should be applied to the object's contents. - * @return the resulting object - * @throws IOException if reconstruction fails. - */ - public ASN1Primitive getObject(int derTagNo) - throws IOException - { - if (derTagNo >= 0x1f) - { - throw new IOException("unsupported tag number"); - } - - byte[] orig = this.getEncoded(); - byte[] tmp = replaceTagNumber(derTagNo, orig); - - if ((orig[0] & BERTags.CONSTRUCTED) != 0) - { - tmp[0] |= BERTags.CONSTRUCTED; - } - - return new ASN1InputStream(tmp).readObject(); - } - - int encodedLength() - throws IOException - { - return StreamUtil.calculateTagLength(tag) + StreamUtil.calculateBodyLength(octets.length) + octets.length; - } - - /* (non-Javadoc) - * @see org.bouncycastle.asn1.ASN1Primitive#encode(org.bouncycastle.asn1.DEROutputStream) - */ - void encode(ASN1OutputStream out) throws IOException - { - int classBits = BERTags.APPLICATION; - if (isConstructed) - { - classBits |= BERTags.CONSTRUCTED; - } - - out.writeEncoded(classBits, tag, octets); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERApplicationSpecific)) - { - return false; - } - - DERApplicationSpecific other = (DERApplicationSpecific)o; - - return isConstructed == other.isConstructed - && tag == other.tag - && Arrays.areEqual(octets, other.octets); - } - - public int hashCode() - { - return (isConstructed ? 1 : 0) ^ tag ^ Arrays.hashCode(octets); - } - - private byte[] replaceTagNumber(int newTag, byte[] input) - throws IOException - { - int tagNo = input[0] & 0x1f; - int index = 1; - // - // with tagged object tag number is bottom 5 bits, or stored at the start of the content - // - if (tagNo == 0x1f) - { - tagNo = 0; - - int b = input[index++] & 0xff; - - // X.690-0207 8.1.2.4.2 - // "c) bits 7 to 1 of the first subsequent octet shall not all be zero." - if ((b & 0x7f) == 0) // Note: -1 will pass - { - throw new ASN1ParsingException("corrupted stream - invalid high tag number found"); - } - - while ((b >= 0) && ((b & 0x80) != 0)) - { - tagNo |= (b & 0x7f); - tagNo <<= 7; - b = input[index++] & 0xff; - } - - tagNo |= (b & 0x7f); - } - - byte[] tmp = new byte[input.length - index + 1]; - - System.arraycopy(input, index, tmp, 1, tmp.length - 1); - - tmp[0] = (byte)newTag; - - return tmp; - } -} diff --git a/src/org/bouncycastle/asn1/DERBMPString.java b/src/org/bouncycastle/asn1/DERBMPString.java deleted file mode 100644 index 33a09f8..0000000 --- a/src/org/bouncycastle/asn1/DERBMPString.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; - -/** - * DER BMPString object. - */ -public class DERBMPString - extends ASN1Primitive - implements ASN1String -{ - private char[] string; - - /** - * return a BMP String from the given object. - * - * @param obj the object we want converted. - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERBMPString getInstance( - Object obj) - { - if (obj == null || obj instanceof DERBMPString) - { - return (DERBMPString)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return a BMP String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERBMPString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERBMPString) - { - return getInstance(o); - } - else - { - return new DERBMPString(ASN1OctetString.getInstance(o).getOctets()); - } - } - - /** - * basic constructor - byte encoded string. - */ - DERBMPString( - byte[] string) - { - char[] cs = new char[string.length / 2]; - - for (int i = 0; i != cs.length; i++) - { - cs[i] = (char)((string[2 * i] << 8) | (string[2 * i + 1] & 0xff)); - } - - this.string = cs; - } - - DERBMPString(char[] string) - { - this.string = string; - } - - /** - * basic constructor - */ - public DERBMPString( - String string) - { - this.string = string.toCharArray(); - } - - public String getString() - { - return new String(string); - } - - public String toString() - { - return getString(); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } - - protected boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERBMPString)) - { - return false; - } - - DERBMPString s = (DERBMPString)o; - - return Arrays.areEqual(string, s.string); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length * 2) + (string.length * 2); - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.write(BERTags.BMP_STRING); - out.writeLength(string.length * 2); - - for (int i = 0; i != string.length; i++) - { - char c = string[i]; - - out.write((byte)(c >> 8)); - out.write((byte)c); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERBitString.java b/src/org/bouncycastle/asn1/DERBitString.java deleted file mode 100644 index f7f2462..0000000 --- a/src/org/bouncycastle/asn1/DERBitString.java +++ /dev/null @@ -1,312 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.EOFException; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.io.Streams; - -public class DERBitString - extends ASN1Primitive - implements ASN1String -{ - private static final char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - - protected byte[] data; - protected int padBits; - - /** - * return the correct number of pad bits for a bit string defined in - * a 32 bit constant - */ - static protected int getPadBits( - int bitString) - { - int val = 0; - for (int i = 3; i >= 0; i--) - { - // - // this may look a little odd, but if it isn't done like this pre jdk1.2 - // JVM's break! - // - if (i != 0) - { - if ((bitString >> (i * 8)) != 0) - { - val = (bitString >> (i * 8)) & 0xFF; - break; - } - } - else - { - if (bitString != 0) - { - val = bitString & 0xFF; - break; - } - } - } - - if (val == 0) - { - return 7; - } - - - int bits = 1; - - while (((val <<= 1) & 0xFF) != 0) - { - bits++; - } - - return 8 - bits; - } - - /** - * return the correct number of bytes for a bit string defined in - * a 32 bit constant - */ - static protected byte[] getBytes(int bitString) - { - int bytes = 4; - for (int i = 3; i >= 1; i--) - { - if ((bitString & (0xFF << (i * 8))) != 0) - { - break; - } - bytes--; - } - - byte[] result = new byte[bytes]; - for (int i = 0; i < bytes; i++) - { - result[i] = (byte) ((bitString >> (i * 8)) & 0xFF); - } - - return result; - } - - /** - * return a Bit String from the passed in object - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERBitString getInstance( - Object obj) - { - if (obj == null || obj instanceof DERBitString) - { - return (DERBitString)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return a Bit String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERBitString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERBitString) - { - return getInstance(o); - } - else - { - return fromOctetString(((ASN1OctetString)o).getOctets()); - } - } - - protected DERBitString( - byte data, - int padBits) - { - this.data = new byte[1]; - this.data[0] = data; - this.padBits = padBits; - } - - /** - * @param data the octets making up the bit string. - * @param padBits the number of extra bits at the end of the string. - */ - public DERBitString( - byte[] data, - int padBits) - { - this.data = data; - this.padBits = padBits; - } - - public DERBitString( - byte[] data) - { - this(data, 0); - } - - public DERBitString( - ASN1Encodable obj) - { - try - { - this.data = obj.toASN1Primitive().getEncoded(ASN1Encoding.DER); - this.padBits = 0; - } - catch (IOException e) - { - throw new IllegalArgumentException("Error processing object : " + e.toString()); - } - } - - public byte[] getBytes() - { - return data; - } - - public int getPadBits() - { - return padBits; - } - - - /** - * @return the value of the bit string as an int (truncating if necessary) - */ - public int intValue() - { - int value = 0; - - for (int i = 0; i != data.length && i != 4; i++) - { - value |= (data[i] & 0xff) << (8 * i); - } - - return value; - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(data.length + 1) + data.length + 1; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - byte[] bytes = new byte[getBytes().length + 1]; - - bytes[0] = (byte)getPadBits(); - System.arraycopy(getBytes(), 0, bytes, 1, bytes.length - 1); - - out.writeEncoded(BERTags.BIT_STRING, bytes); - } - - public int hashCode() - { - return padBits ^ Arrays.hashCode(data); - } - - protected boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERBitString)) - { - return false; - } - - DERBitString other = (DERBitString)o; - - return this.padBits == other.padBits - && Arrays.areEqual(this.data, other.data); - } - - public String getString() - { - StringBuffer buf = new StringBuffer("#"); - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - ASN1OutputStream aOut = new ASN1OutputStream(bOut); - - try - { - aOut.writeObject(this); - } - catch (IOException e) - { - throw new RuntimeException("internal error encoding BitString"); - } - - byte[] string = bOut.toByteArray(); - - for (int i = 0; i != string.length; i++) - { - buf.append(table[(string[i] >>> 4) & 0xf]); - buf.append(table[string[i] & 0xf]); - } - - return buf.toString(); - } - - public String toString() - { - return getString(); - } - - static DERBitString fromOctetString(byte[] bytes) - { - if (bytes.length < 1) - { - throw new IllegalArgumentException("truncated BIT STRING detected"); - } - - int padBits = bytes[0]; - byte[] data = new byte[bytes.length - 1]; - - if (data.length != 0) - { - System.arraycopy(bytes, 1, data, 0, bytes.length - 1); - } - - return new DERBitString(data, padBits); - } - - static DERBitString fromInputStream(int length, InputStream stream) - throws IOException - { - if (length < 1) - { - throw new IllegalArgumentException("truncated BIT STRING detected"); - } - - int padBits = stream.read(); - byte[] data = new byte[length - 1]; - - if (data.length != 0) - { - if (Streams.readFully(stream, data) != data.length) - { - throw new EOFException("EOF encountered in middle of BIT STRING"); - } - } - - return new DERBitString(data, padBits); - } -} diff --git a/src/org/bouncycastle/asn1/DERBoolean.java b/src/org/bouncycastle/asn1/DERBoolean.java deleted file mode 100644 index da043eb..0000000 --- a/src/org/bouncycastle/asn1/DERBoolean.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; - -public class DERBoolean - extends ASN1Primitive -{ - private static final byte[] TRUE_VALUE = new byte[] { (byte)0xff }; - private static final byte[] FALSE_VALUE = new byte[] { 0 }; - - private byte[] value; - - public static final ASN1Boolean FALSE = new ASN1Boolean(false); - public static final ASN1Boolean TRUE = new ASN1Boolean(true); - - - /** - * return a boolean from the passed in object. - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1Boolean getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1Boolean) - { - return (ASN1Boolean)obj; - } - - if (obj instanceof DERBoolean) - { - return ((DERBoolean)obj).isTrue() ? DERBoolean.TRUE : DERBoolean.FALSE; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return a DERBoolean from the passed in boolean. - */ - public static ASN1Boolean getInstance( - boolean value) - { - return (value ? TRUE : FALSE); - } - - /** - * return a Boolean from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERBoolean getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERBoolean) - { - return getInstance(o); - } - else - { - return ASN1Boolean.fromOctetString(((ASN1OctetString)o).getOctets()); - } - } - - DERBoolean( - byte[] value) - { - if (value.length != 1) - { - throw new IllegalArgumentException("byte value should have 1 byte in it"); - } - - if (value[0] == 0) - { - this.value = FALSE_VALUE; - } - else if (value[0] == 0xff) - { - this.value = TRUE_VALUE; - } - else - { - this.value = Arrays.clone(value); - } - } - - public DERBoolean( - boolean value) - { - this.value = (value) ? TRUE_VALUE : FALSE_VALUE; - } - - public boolean isTrue() - { - return (value[0] != 0); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 3; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.BOOLEAN, value); - } - - protected boolean asn1Equals( - ASN1Primitive o) - { - if ((o == null) || !(o instanceof DERBoolean)) - { - return false; - } - - return (value[0] == ((DERBoolean)o).value[0]); - } - - public int hashCode() - { - return value[0]; - } - - - public String toString() - { - return (value[0] != 0) ? "TRUE" : "FALSE"; - } - - static ASN1Boolean fromOctetString(byte[] value) - { - if (value.length != 1) - { - throw new IllegalArgumentException("byte value should have 1 byte in it"); - } - - if (value[0] == 0) - { - return FALSE; - } - else if (value[0] == 0xff) - { - return TRUE; - } - else - { - return new ASN1Boolean(value); - } - } -} diff --git a/src/org/bouncycastle/asn1/DEREncodableVector.java b/src/org/bouncycastle/asn1/DEREncodableVector.java deleted file mode 100644 index 919ff72..0000000 --- a/src/org/bouncycastle/asn1/DEREncodableVector.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.asn1; - -/** - * a general class for building up a vector of DER encodable objects - - * this will eventually be superceded by ASN1EncodableVector so you should - * use that class in preference. - */ -public class DEREncodableVector - extends ASN1EncodableVector -{ - /** - * @deprecated use ASN1EncodableVector instead. - */ - public DEREncodableVector() - { - - } -} diff --git a/src/org/bouncycastle/asn1/DEREnumerated.java b/src/org/bouncycastle/asn1/DEREnumerated.java deleted file mode 100644 index 20e7f24..0000000 --- a/src/org/bouncycastle/asn1/DEREnumerated.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import javabc.BigInteger; - -import org.bouncycastle.util.Arrays; - -public class DEREnumerated - extends ASN1Primitive -{ - byte[] bytes; - - /** - * return an integer from the passed in object - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1Enumerated getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1Enumerated) - { - return (ASN1Enumerated)obj; - } - - if (obj instanceof DEREnumerated) - { - return new ASN1Enumerated(((DEREnumerated)obj).getValue()); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return an Enumerated from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DEREnumerated getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DEREnumerated) - { - return getInstance(o); - } - else - { - return fromOctetString(((ASN1OctetString)o).getOctets()); - } - } - - public DEREnumerated( - int value) - { - bytes = BigInteger.valueOf(value).toByteArray(); - } - - public DEREnumerated( - BigInteger value) - { - bytes = value.toByteArray(); - } - - public DEREnumerated( - byte[] bytes) - { - this.bytes = bytes; - } - - public BigInteger getValue() - { - return new BigInteger(bytes); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(bytes.length) + bytes.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.ENUMERATED, bytes); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DEREnumerated)) - { - return false; - } - - DEREnumerated other = (DEREnumerated)o; - - return Arrays.areEqual(this.bytes, other.bytes); - } - - public int hashCode() - { - return Arrays.hashCode(bytes); - } - - private static ASN1Enumerated[] cache = new ASN1Enumerated[12]; - - static ASN1Enumerated fromOctetString(byte[] enc) - { - if (enc.length > 1) - { - return new ASN1Enumerated(Arrays.clone(enc)); - } - - if (enc.length == 0) - { - throw new IllegalArgumentException("ENUMERATED has zero length"); - } - int value = enc[0] & 0xff; - - if (value >= cache.length) - { - return new ASN1Enumerated(Arrays.clone(enc)); - } - - ASN1Enumerated possibleMatch = cache[value]; - - if (possibleMatch == null) - { - possibleMatch = cache[value] = new ASN1Enumerated(Arrays.clone(enc)); - } - - return possibleMatch; - } -} diff --git a/src/org/bouncycastle/asn1/DERExternal.java b/src/org/bouncycastle/asn1/DERExternal.java deleted file mode 100644 index aed1d27..0000000 --- a/src/org/bouncycastle/asn1/DERExternal.java +++ /dev/null @@ -1,294 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -/** - * Class representing the DER-type External - */ -public class DERExternal - extends ASN1Primitive -{ - private ASN1ObjectIdentifier directReference; - private ASN1Integer indirectReference; - private ASN1Primitive dataValueDescriptor; - private int encoding; - private ASN1Primitive externalContent; - - public DERExternal(ASN1EncodableVector vector) - { - int offset = 0; - - ASN1Primitive enc = getObjFromVector(vector, offset); - if (enc instanceof ASN1ObjectIdentifier) - { - directReference = (ASN1ObjectIdentifier)enc; - offset++; - enc = getObjFromVector(vector, offset); - } - if (enc instanceof ASN1Integer) - { - indirectReference = (ASN1Integer) enc; - offset++; - enc = getObjFromVector(vector, offset); - } - if (!(enc instanceof DERTaggedObject)) - { - dataValueDescriptor = (ASN1Primitive) enc; - offset++; - enc = getObjFromVector(vector, offset); - } - - if (vector.size() != offset + 1) - { - throw new IllegalArgumentException("input vector too large"); - } - - if (!(enc instanceof DERTaggedObject)) - { - throw new IllegalArgumentException("No tagged object found in vector. Structure doesn't seem to be of type External"); - } - DERTaggedObject obj = (DERTaggedObject)enc; - setEncoding(obj.getTagNo()); - externalContent = obj.getObject(); - } - - private ASN1Primitive getObjFromVector(ASN1EncodableVector v, int index) - { - if (v.size() <= index) - { - throw new IllegalArgumentException("too few objects in input vector"); - } - - return v.get(index).toASN1Primitive(); - } - /** - * Creates a new instance of DERExternal - * See X.690 for more informations about the meaning of these parameters - * @param directReference The direct reference or null if not set. - * @param indirectReference The indirect reference or null if not set. - * @param dataValueDescriptor The data value descriptor or null if not set. - * @param externalData The external data in its encoded form. - */ - public DERExternal(ASN1ObjectIdentifier directReference, ASN1Integer indirectReference, ASN1Primitive dataValueDescriptor, DERTaggedObject externalData) - { - this(directReference, indirectReference, dataValueDescriptor, externalData.getTagNo(), externalData.toASN1Primitive()); - } - - /** - * Creates a new instance of DERExternal. - * See X.690 for more informations about the meaning of these parameters - * @param directReference The direct reference or null if not set. - * @param indirectReference The indirect reference or null if not set. - * @param dataValueDescriptor The data value descriptor or null if not set. - * @param encoding The encoding to be used for the external data - * @param externalData The external data - */ - public DERExternal(ASN1ObjectIdentifier directReference, ASN1Integer indirectReference, ASN1Primitive dataValueDescriptor, int encoding, ASN1Primitive externalData) - { - setDirectReference(directReference); - setIndirectReference(indirectReference); - setDataValueDescriptor(dataValueDescriptor); - setEncoding(encoding); - setExternalContent(externalData.toASN1Primitive()); - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() - { - int ret = 0; - if (directReference != null) - { - ret = directReference.hashCode(); - } - if (indirectReference != null) - { - ret ^= indirectReference.hashCode(); - } - if (dataValueDescriptor != null) - { - ret ^= dataValueDescriptor.hashCode(); - } - ret ^= externalContent.hashCode(); - return ret; - } - - boolean isConstructed() - { - return true; - } - - int encodedLength() - throws IOException - { - return this.getEncoded().length; - } - - /* (non-Javadoc) - * @see org.bouncycastle.asn1.ASN1Primitive#encode(org.bouncycastle.asn1.DEROutputStream) - */ - void encode(ASN1OutputStream out) - throws IOException - { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - if (directReference != null) - { - baos.write(directReference.getEncoded(ASN1Encoding.DER)); - } - if (indirectReference != null) - { - baos.write(indirectReference.getEncoded(ASN1Encoding.DER)); - } - if (dataValueDescriptor != null) - { - baos.write(dataValueDescriptor.getEncoded(ASN1Encoding.DER)); - } - DERTaggedObject obj = new DERTaggedObject(true, encoding, externalContent); - baos.write(obj.getEncoded(ASN1Encoding.DER)); - out.writeEncoded(BERTags.CONSTRUCTED, BERTags.EXTERNAL, baos.toByteArray()); - } - - /* (non-Javadoc) - * @see org.bouncycastle.asn1.ASN1Primitive#asn1Equals(org.bouncycastle.asn1.ASN1Primitive) - */ - boolean asn1Equals(ASN1Primitive o) - { - if (!(o instanceof DERExternal)) - { - return false; - } - if (this == o) - { - return true; - } - DERExternal other = (DERExternal)o; - if (directReference != null) - { - if (other.directReference == null || !other.directReference.equals(directReference)) - { - return false; - } - } - if (indirectReference != null) - { - if (other.indirectReference == null || !other.indirectReference.equals(indirectReference)) - { - return false; - } - } - if (dataValueDescriptor != null) - { - if (other.dataValueDescriptor == null || !other.dataValueDescriptor.equals(dataValueDescriptor)) - { - return false; - } - } - return externalContent.equals(other.externalContent); - } - - /** - * Returns the data value descriptor - * @return The descriptor - */ - public ASN1Primitive getDataValueDescriptor() - { - return dataValueDescriptor; - } - - /** - * Returns the direct reference of the external element - * @return The reference - */ - public ASN1ObjectIdentifier getDirectReference() - { - return directReference; - } - - /** - * Returns the encoding of the content. Valid values are - *

          - *
        • 0 single-ASN1-type
        • - *
        • 1 OCTET STRING
        • - *
        • 2 BIT STRING
        • - *
        - * @return The encoding - */ - public int getEncoding() - { - return encoding; - } - - /** - * Returns the content of this element - * @return The content - */ - public ASN1Primitive getExternalContent() - { - return externalContent; - } - - /** - * Returns the indirect reference of this element - * @return The reference - */ - public ASN1Integer getIndirectReference() - { - return indirectReference; - } - - /** - * Sets the data value descriptor - * @param dataValueDescriptor The descriptor - */ - private void setDataValueDescriptor(ASN1Primitive dataValueDescriptor) - { - this.dataValueDescriptor = dataValueDescriptor; - } - - /** - * Sets the direct reference of the external element - * @param directReferemce The reference - */ - private void setDirectReference(ASN1ObjectIdentifier directReferemce) - { - this.directReference = directReferemce; - } - - /** - * Sets the encoding of the content. Valid values are - *
          - *
        • 0 single-ASN1-type
        • - *
        • 1 OCTET STRING
        • - *
        • 2 BIT STRING
        • - *
        - * @param encoding The encoding - */ - private void setEncoding(int encoding) - { - if (encoding < 0 || encoding > 2) - { - throw new IllegalArgumentException("invalid encoding value: " + encoding); - } - this.encoding = encoding; - } - - /** - * Sets the content of this element - * @param externalContent The content - */ - private void setExternalContent(ASN1Primitive externalContent) - { - this.externalContent = externalContent; - } - - /** - * Sets the indirect reference of this element - * @param indirectReference The reference - */ - private void setIndirectReference(ASN1Integer indirectReference) - { - this.indirectReference = indirectReference; - } -} diff --git a/src/org/bouncycastle/asn1/DERExternalParser.java b/src/org/bouncycastle/asn1/DERExternalParser.java deleted file mode 100644 index b19c84d..0000000 --- a/src/org/bouncycastle/asn1/DERExternalParser.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class DERExternalParser - implements ASN1Encodable, InMemoryRepresentable -{ - private ASN1StreamParser _parser; - - /** - * - */ - public DERExternalParser(ASN1StreamParser parser) - { - this._parser = parser; - } - - public ASN1Encodable readObject() - throws IOException - { - return _parser.readObject(); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - try - { - return new DERExternal(_parser.readVector()); - } - catch (IllegalArgumentException e) - { - throw new ASN1Exception(e.getMessage(), e); - } - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException ioe) - { - throw new ASN1ParsingException("unable to get DER object", ioe); - } - catch (IllegalArgumentException ioe) - { - throw new ASN1ParsingException("unable to get DER object", ioe); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERFactory.java b/src/org/bouncycastle/asn1/DERFactory.java deleted file mode 100644 index 0dc0fc6..0000000 --- a/src/org/bouncycastle/asn1/DERFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bouncycastle.asn1; - -class DERFactory -{ - static final ASN1Sequence EMPTY_SEQUENCE = new DERSequence(); - static final ASN1Set EMPTY_SET = new DERSet(); - - static ASN1Sequence createSequence(ASN1EncodableVector v) - { - if (v.size() < 1) - { - return EMPTY_SEQUENCE; - } - else - { - return new DLSequence(v); - } - } - - static ASN1Set createSet(ASN1EncodableVector v) - { - if (v.size() < 1) - { - return EMPTY_SET; - } - else - { - return new DLSet(v); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERGeneralString.java b/src/org/bouncycastle/asn1/DERGeneralString.java deleted file mode 100644 index d7cd594..0000000 --- a/src/org/bouncycastle/asn1/DERGeneralString.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -public class DERGeneralString - extends ASN1Primitive - implements ASN1String -{ - private byte[] string; - - public static DERGeneralString getInstance( - Object obj) - { - if (obj == null || obj instanceof DERGeneralString) - { - return (DERGeneralString) obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " - + obj.getClass().getName()); - } - - public static DERGeneralString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERGeneralString) - { - return getInstance(o); - } - else - { - return new DERGeneralString(((ASN1OctetString)o).getOctets()); - } - } - - DERGeneralString(byte[] string) - { - this.string = string; - } - - public DERGeneralString(String string) - { - this.string = Strings.toByteArray(string); - } - - public String getString() - { - return Strings.fromByteArray(string); - } - - public String toString() - { - return getString(); - } - - public byte[] getOctets() - { - return Arrays.clone(string); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode(ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.GENERAL_STRING, string); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } - - boolean asn1Equals(ASN1Primitive o) - { - if (!(o instanceof DERGeneralString)) - { - return false; - } - DERGeneralString s = (DERGeneralString)o; - - return Arrays.areEqual(string, s.string); - } -} diff --git a/src/org/bouncycastle/asn1/DERGeneralizedTime.java b/src/org/bouncycastle/asn1/DERGeneralizedTime.java deleted file mode 100644 index 2cb95b6..0000000 --- a/src/org/bouncycastle/asn1/DERGeneralizedTime.java +++ /dev/null @@ -1,260 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Date; -import java.util.TimeZone; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * Generalized time object. - */ -public class DERGeneralizedTime - extends ASN1Primitive -{ - private byte[] time; - - /** - * return a generalized time from the passed in object - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1GeneralizedTime getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1GeneralizedTime) - { - return (ASN1GeneralizedTime)obj; - } - - if (obj instanceof DERGeneralizedTime) - { - return new ASN1GeneralizedTime(((DERGeneralizedTime)obj).time); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return a Generalized Time object from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static ASN1GeneralizedTime getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERGeneralizedTime) - { - return getInstance(o); - } - else - { - return new ASN1GeneralizedTime(((ASN1OctetString)o).getOctets()); - } - } - - /** - * The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z - * for local time, or Z|[+|-]HHMM on the end, for difference between local - * time and UTC time. The fractional second amount f must consist of at - * least one number with trailing zeroes removed. - * - * @param time the time string. - * @exception IllegalArgumentException if String is an illegal format. - */ - public DERGeneralizedTime( - String time) - { - char last = time.charAt(time.length() - 1); - if (last != 'Z' && !(last >= 0 && last <= '9')) - { - if (time.indexOf('-') < 0 && time.indexOf('+') < 0) - { - throw new IllegalArgumentException("time needs to be in format YYYYMMDDHHMMSS[.f]Z or YYYYMMDDHHMMSS[.f][+-]HHMM"); - } - } - - this.time = Strings.toByteArray(time); - } - - /** - * base constructer from a java.util.date object - */ - public DERGeneralizedTime( - Date time) - { - this.time = Strings.toByteArray(DateFormatter.getGeneralizedTimeDateString(time, false)); - } - - protected DERGeneralizedTime(Date date, boolean includeMillis) - { - this.time = Strings.toByteArray(DateFormatter.getGeneralizedTimeDateString(date, true)); - } - - DERGeneralizedTime( - byte[] bytes) - { - this.time = bytes; - } - - /** - * Return the time. - * @return The time string as it appeared in the encoded object. - */ - public String getTimeString() - { - return Strings.fromByteArray(time); - } - - /** - * return the time - always in the form of - * YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). - *

        - * Normally in a certificate we would expect "Z" rather than "GMT", - * however adding the "GMT" means we can just use: - *

        -     *     dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
        -     * 
        - * To read in the time and get a date which is compatible with our local - * time zone. - */ - public String getTime() - { - String stime = Strings.fromByteArray(time); - - // - // standardise the format. - // - if (stime.charAt(stime.length() - 1) == 'Z') - { - return stime.substring(0, stime.length() - 1) + "GMT+00:00"; - } - else - { - int signPos = stime.length() - 5; - char sign = stime.charAt(signPos); - if (sign == '-' || sign == '+') - { - return stime.substring(0, signPos) - + "GMT" - + stime.substring(signPos, signPos + 3) - + ":" - + stime.substring(signPos + 3); - } - else - { - signPos = stime.length() - 3; - sign = stime.charAt(signPos); - if (sign == '-' || sign == '+') - { - return stime.substring(0, signPos) - + "GMT" - + stime.substring(signPos) - + ":00"; - } - } - } - return stime + calculateGMTOffset(); - } - - private String calculateGMTOffset() - { - String sign = "+"; - TimeZone timeZone = TimeZone.getDefault(); - int offset = timeZone.getRawOffset(); - if (offset < 0) - { - sign = "-"; - offset = -offset; - } - int hours = offset / (60 * 60 * 1000); - int minutes = (offset - (hours * 60 * 60 * 1000)) / (60 * 1000); - -// try -// { -// if (timeZone.useDaylightTime() && timeZone.inDaylightTime(this.getDate())) -// { -// hours += sign.equals("+") ? 1 : -1; -// } -// } -// catch (ParseException e) -// { -// // we'll do our best and ignore daylight savings -// } - - return "GMT" + sign + convert(hours) + ":" + convert(minutes); - } - - private String convert(int time) - { - if (time < 10) - { - return "0" + time; - } - - return Integer.toString(time); - } - - public Date getDate() - { - return DateFormatter.fromGeneralizedTimeString(time); - } - - private boolean hasFractionalSeconds() - { - for (int i = 0; i != time.length; i++) - { - if (time[i] == '.') - { - if (i == 14) - { - return true; - } - } - } - return false; - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - int length = time.length; - - return 1 + StreamUtil.calculateBodyLength(length) + length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.GENERALIZED_TIME, time); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERGeneralizedTime)) - { - return false; - } - - return Arrays.areEqual(time, ((DERGeneralizedTime)o).time); - } - - public int hashCode() - { - return Arrays.hashCode(time); - } -} diff --git a/src/org/bouncycastle/asn1/DERGenerator.java b/src/org/bouncycastle/asn1/DERGenerator.java deleted file mode 100644 index 7451ad4..0000000 --- a/src/org/bouncycastle/asn1/DERGenerator.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.bouncycastle.util.io.Streams; - -public abstract class DERGenerator - extends ASN1Generator -{ - private boolean _tagged = false; - private boolean _isExplicit; - private int _tagNo; - - protected DERGenerator( - OutputStream out) - { - super(out); - } - - public DERGenerator( - OutputStream out, - int tagNo, - boolean isExplicit) - { - super(out); - - _tagged = true; - _isExplicit = isExplicit; - _tagNo = tagNo; - } - - private void writeLength( - OutputStream out, - int length) - throws IOException - { - if (length > 127) - { - int size = 1; - int val = length; - - while ((val >>>= 8) != 0) - { - size++; - } - - out.write((byte)(size | 0x80)); - - for (int i = (size - 1) * 8; i >= 0; i -= 8) - { - out.write((byte)(length >> i)); - } - } - else - { - out.write((byte)length); - } - } - - void writeDEREncoded( - OutputStream out, - int tag, - byte[] bytes) - throws IOException - { - out.write(tag); - writeLength(out, bytes.length); - out.write(bytes); - } - - void writeDEREncoded( - int tag, - byte[] bytes) - throws IOException - { - if (_tagged) - { - int tagNum = _tagNo | BERTags.TAGGED; - - if (_isExplicit) - { - int newTag = _tagNo | BERTags.CONSTRUCTED | BERTags.TAGGED; - - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - writeDEREncoded(bOut, tag, bytes); - - writeDEREncoded(_out, newTag, bOut.toByteArray()); - } - else - { - if ((tag & BERTags.CONSTRUCTED) != 0) - { - writeDEREncoded(_out, tagNum | BERTags.CONSTRUCTED, bytes); - } - else - { - writeDEREncoded(_out, tagNum, bytes); - } - } - } - else - { - writeDEREncoded(_out, tag, bytes); - } - } - - void writeDEREncoded( - OutputStream out, - int tag, - InputStream in) - throws IOException - { - writeDEREncoded(out, tag, Streams.readAll(in)); - } -} diff --git a/src/org/bouncycastle/asn1/DERIA5String.java b/src/org/bouncycastle/asn1/DERIA5String.java deleted file mode 100644 index abb2811..0000000 --- a/src/org/bouncycastle/asn1/DERIA5String.java +++ /dev/null @@ -1,171 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * DER IA5String object - this is an ascii string. - */ -public class DERIA5String - extends ASN1Primitive - implements ASN1String -{ - private byte[] string; - - /** - * return a IA5 string from the passed in object - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERIA5String getInstance( - Object obj) - { - if (obj == null || obj instanceof DERIA5String) - { - return (DERIA5String)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return an IA5 String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERIA5String getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERIA5String) - { - return getInstance(o); - } - else - { - return new DERIA5String(((ASN1OctetString)o).getOctets()); - } - } - - /** - * basic constructor - with bytes. - */ - DERIA5String( - byte[] string) - { - this.string = string; - } - - /** - * basic constructor - without validation. - */ - public DERIA5String( - String string) - { - this(string, false); - } - - /** - * Constructor with optional validation. - * - * @param string the base string to wrap. - * @param validate whether or not to check the string. - * @throws IllegalArgumentException if validate is true and the string - * contains characters that should not be in an IA5String. - */ - public DERIA5String( - String string, - boolean validate) - { - if (string == null) - { - throw new NullPointerException("string cannot be null"); - } - if (validate && !isIA5String(string)) - { - throw new IllegalArgumentException("string contains illegal characters"); - } - - this.string = Strings.toByteArray(string); - } - - public String getString() - { - return Strings.fromByteArray(string); - } - - public String toString() - { - return getString(); - } - - public byte[] getOctets() - { - return Arrays.clone(string); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.IA5_STRING, string); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERIA5String)) - { - return false; - } - - DERIA5String s = (DERIA5String)o; - - return Arrays.areEqual(string, s.string); - } - - /** - * return true if the passed in String can be represented without - * loss as an IA5String, false otherwise. - * - * @return true if in printable set, false otherwise. - */ - public static boolean isIA5String( - String str) - { - for (int i = str.length() - 1; i >= 0; i--) - { - char ch = str.charAt(i); - - if (ch > 0x007f) - { - return false; - } - } - - return true; - } -} diff --git a/src/org/bouncycastle/asn1/DERInteger.java b/src/org/bouncycastle/asn1/DERInteger.java deleted file mode 100644 index 5aeb4da..0000000 --- a/src/org/bouncycastle/asn1/DERInteger.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import javabc.BigInteger; - -import org.bouncycastle.util.Arrays; - -public class DERInteger - extends ASN1Primitive -{ - byte[] bytes; - - /** - * return an integer from the passed in object - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1Integer getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1Integer) - { - return (ASN1Integer)obj; - } - if (obj instanceof DERInteger) - { - return new ASN1Integer((((DERInteger)obj).getValue())); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return an Integer from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static ASN1Integer getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERInteger) - { - return getInstance(o); - } - else - { - return new ASN1Integer(ASN1OctetString.getInstance(obj.getObject()).getOctets()); - } - } - - public DERInteger( - int value) - { - bytes = BigInteger.valueOf(value).toByteArray(); - } - - public DERInteger( - BigInteger value) - { - bytes = value.toByteArray(); - } - - public DERInteger( - byte[] bytes) - { - this.bytes = bytes; - } - - public BigInteger getValue() - { - return new BigInteger(bytes); - } - - /** - * in some cases positive values get crammed into a space, - * that's not quite big enough... - */ - public BigInteger getPositiveValue() - { - return new BigInteger(1, bytes); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(bytes.length) + bytes.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.INTEGER, bytes); - } - - public int hashCode() - { - int value = 0; - - for (int i = 0; i != bytes.length; i++) - { - value ^= (bytes[i] & 0xff) << (i % 4); - } - - return value; - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERInteger)) - { - return false; - } - - DERInteger other = (DERInteger)o; - - return Arrays.areEqual(bytes, other.bytes); - } - - public String toString() - { - return getValue().toString(); - } -} diff --git a/src/org/bouncycastle/asn1/DERNull.java b/src/org/bouncycastle/asn1/DERNull.java deleted file mode 100644 index 9acd3bf..0000000 --- a/src/org/bouncycastle/asn1/DERNull.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -/** - * A NULL object. - */ -public class DERNull - extends ASN1Null -{ - public static final DERNull INSTANCE = new DERNull(); - - private static final byte[] zeroBytes = new byte[0]; - - public DERNull() - { - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 2; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.NULL, zeroBytes); - } -} diff --git a/src/org/bouncycastle/asn1/DERNumericString.java b/src/org/bouncycastle/asn1/DERNumericString.java deleted file mode 100644 index fae4063..0000000 --- a/src/org/bouncycastle/asn1/DERNumericString.java +++ /dev/null @@ -1,174 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * DER NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. - */ -public class DERNumericString - extends ASN1Primitive - implements ASN1String -{ - private byte[] string; - - /** - * return a Numeric string from the passed in object - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERNumericString getInstance( - Object obj) - { - if (obj == null || obj instanceof DERNumericString) - { - return (DERNumericString)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return an Numeric String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERNumericString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERNumericString) - { - return getInstance(o); - } - else - { - return new DERNumericString(ASN1OctetString.getInstance(o).getOctets()); - } - } - - /** - * basic constructor - with bytes. - */ - DERNumericString( - byte[] string) - { - this.string = string; - } - - /** - * basic constructor - without validation.. - */ - public DERNumericString( - String string) - { - this(string, false); - } - - /** - * Constructor with optional validation. - * - * @param string the base string to wrap. - * @param validate whether or not to check the string. - * @throws IllegalArgumentException if validate is true and the string - * contains characters that should not be in a NumericString. - */ - public DERNumericString( - String string, - boolean validate) - { - if (validate && !isNumericString(string)) - { - throw new IllegalArgumentException("string contains illegal characters"); - } - - this.string = Strings.toByteArray(string); - } - - public String getString() - { - return Strings.fromByteArray(string); - } - - public String toString() - { - return getString(); - } - - public byte[] getOctets() - { - return Arrays.clone(string); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.NUMERIC_STRING, string); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERNumericString)) - { - return false; - } - - DERNumericString s = (DERNumericString)o; - - return Arrays.areEqual(string, s.string); - } - - /** - * Return true if the string can be represented as a NumericString ('0'..'9', ' ') - * - * @param str string to validate. - * @return true if numeric, fale otherwise. - */ - public static boolean isNumericString( - String str) - { - for (int i = str.length() - 1; i >= 0; i--) - { - char ch = str.charAt(i); - - if (ch > 0x007f) - { - return false; - } - - if (('0' <= ch && ch <= '9') || ch == ' ') - { - continue; - } - - return false; - } - - return true; - } -} diff --git a/src/org/bouncycastle/asn1/DERObjectIdentifier.java b/src/org/bouncycastle/asn1/DERObjectIdentifier.java deleted file mode 100644 index 44c6378..0000000 --- a/src/org/bouncycastle/asn1/DERObjectIdentifier.java +++ /dev/null @@ -1,371 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import javabc.BigInteger; - -import org.bouncycastle.util.Arrays; - -public class DERObjectIdentifier - extends ASN1Primitive -{ - String identifier; - - private byte[] body; - - /** - * return an OID from the passed in object - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1ObjectIdentifier getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1ObjectIdentifier) - { - return (ASN1ObjectIdentifier)obj; - } - - if (obj instanceof DERObjectIdentifier) - { - return new ASN1ObjectIdentifier(((DERObjectIdentifier)obj).getId()); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return an Object Identifier from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static ASN1ObjectIdentifier getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERObjectIdentifier) - { - return getInstance(o); - } - else - { - return ASN1ObjectIdentifier.fromOctetString(ASN1OctetString.getInstance(obj.getObject()).getOctets()); - } - } - - DERObjectIdentifier( - byte[] bytes) - { - StringBuffer objId = new StringBuffer(); - long value = 0; - BigInteger bigValue = null; - boolean first = true; - - for (int i = 0; i != bytes.length; i++) - { - int b = bytes[i] & 0xff; - - if (value < 0x80000000000000L) - { - value = value * 128 + (b & 0x7f); - if ((b & 0x80) == 0) // end of number reached - { - if (first) - { - switch ((int)value / 40) - { - case 0: - objId.append('0'); - break; - case 1: - objId.append('1'); - value -= 40; - break; - default: - objId.append('2'); - value -= 80; - } - first = false; - } - - objId.append('.'); - objId.append(value); - value = 0; - } - } - else - { - if (bigValue == null) - { - bigValue = BigInteger.valueOf(value); - } - bigValue = bigValue.shiftLeft(7); - bigValue = bigValue.or(BigInteger.valueOf(b & 0x7f)); - if ((b & 0x80) == 0) - { - objId.append('.'); - objId.append(bigValue); - bigValue = null; - value = 0; - } - } - } - - this.identifier = objId.toString(); - } - - public DERObjectIdentifier( - String identifier) - { - if (!isValidIdentifier(identifier)) - { - throw new IllegalArgumentException("string " + identifier + " not an OID"); - } - - this.identifier = identifier; - } - - public String getId() - { - return identifier; - } - - private void writeField( - ByteArrayOutputStream out, - long fieldValue) - { - byte[] result = new byte[9]; - int pos = 8; - result[pos] = (byte)((int)fieldValue & 0x7f); - while (fieldValue >= (1L << 7)) - { - fieldValue >>= 7; - result[--pos] = (byte)((int)fieldValue & 0x7f | 0x80); - } - out.write(result, pos, 9 - pos); - } - - private void writeField( - ByteArrayOutputStream out, - BigInteger fieldValue) - { - int byteCount = (fieldValue.bitLength()+6)/7; - if (byteCount == 0) - { - out.write(0); - } - else - { - BigInteger tmpValue = fieldValue; - byte[] tmp = new byte[byteCount]; - for (int i = byteCount-1; i >= 0; i--) - { - tmp[i] = (byte) ((tmpValue.intValue() & 0x7f) | 0x80); - tmpValue = tmpValue.shiftRight(7); - } - tmp[byteCount-1] &= 0x7f; - out.write(tmp, 0, tmp.length); - } - } - - private void doOutput(ByteArrayOutputStream aOut) - { - OIDTokenizer tok = new OIDTokenizer(identifier); - - writeField(aOut, - Integer.parseInt(tok.nextToken()) * 40 - + Integer.parseInt(tok.nextToken())); - - while (tok.hasMoreTokens()) - { - String token = tok.nextToken(); - if (token.length() < 18) - { - writeField(aOut, Long.parseLong(token)); - } - else - { - writeField(aOut, new BigInteger(token)); - } - } - } - - protected byte[] getBody() - { - if (body == null) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - doOutput(bOut); - - body = bOut.toByteArray(); - } - - return body; - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - throws IOException - { - int length = getBody().length; - - return 1 + StreamUtil.calculateBodyLength(length) + length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - byte[] enc = getBody(); - - out.write(BERTags.OBJECT_IDENTIFIER); - out.writeLength(enc.length); - out.write(enc); - } - - public int hashCode() - { - return identifier.hashCode(); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERObjectIdentifier)) - { - return false; - } - - return identifier.equals(((DERObjectIdentifier)o).identifier); - } - - public String toString() - { - return getId(); - } - - private static boolean isValidIdentifier( - String identifier) - { - if (identifier.length() < 3 - || identifier.charAt(1) != '.') - { - return false; - } - - char first = identifier.charAt(0); - if (first < '0' || first > '2') - { - return false; - } - - boolean periodAllowed = false; - for (int i = identifier.length() - 1; i >= 2; i--) - { - char ch = identifier.charAt(i); - - if ('0' <= ch && ch <= '9') - { - periodAllowed = true; - continue; - } - - if (ch == '.') - { - if (!periodAllowed) - { - return false; - } - - periodAllowed = false; - continue; - } - - return false; - } - - return periodAllowed; - } - - private static ASN1ObjectIdentifier[][] cache = new ASN1ObjectIdentifier[255][]; - - static ASN1ObjectIdentifier fromOctetString(byte[] enc) - { - if (enc.length < 3) - { - return new ASN1ObjectIdentifier(enc); - } - - int idx1 = enc[enc.length - 2] & 0xff; - ASN1ObjectIdentifier[] first = cache[idx1]; - - if (first == null) - { - first = cache[idx1] = new ASN1ObjectIdentifier[255]; - } - - int idx2 = enc[enc.length - 1] & 0xff; - - ASN1ObjectIdentifier possibleMatch = first[idx2]; - - if (possibleMatch == null) - { - possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc); - return possibleMatch; - } - - if (Arrays.areEqual(enc, possibleMatch.getBody())) - { - return possibleMatch; - } - else - { - idx1 = (idx1 + 1) % 256; - first = cache[idx1]; - if (first == null) - { - first = cache[idx1] = new ASN1ObjectIdentifier[255]; - } - - possibleMatch = first[idx2]; - - if (possibleMatch == null) - { - possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc); - return possibleMatch; - } - - if (Arrays.areEqual(enc, possibleMatch.getBody())) - { - return possibleMatch; - } - - idx2 = (idx2 + 1) % 256; - possibleMatch = first[idx2]; - - if (possibleMatch == null) - { - possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc); - return possibleMatch; - } - - if (Arrays.areEqual(enc, possibleMatch.getBody())) - { - return possibleMatch; - } - } - - return new ASN1ObjectIdentifier(enc); - } -} diff --git a/src/org/bouncycastle/asn1/DEROctetString.java b/src/org/bouncycastle/asn1/DEROctetString.java deleted file mode 100644 index 988186f..0000000 --- a/src/org/bouncycastle/asn1/DEROctetString.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class DEROctetString - extends ASN1OctetString -{ - /** - * @param string the octets making up the octet string. - */ - public DEROctetString( - byte[] string) - { - super(string); - } - - public DEROctetString( - ASN1Encodable obj) - throws IOException - { - super(obj.toASN1Primitive().getEncoded(ASN1Encoding.DER)); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.OCTET_STRING, string); - } - - static void encode( - DEROutputStream derOut, - byte[] bytes) - throws IOException - { - derOut.writeEncoded(BERTags.OCTET_STRING, bytes); - } -} diff --git a/src/org/bouncycastle/asn1/DEROctetStringParser.java b/src/org/bouncycastle/asn1/DEROctetStringParser.java deleted file mode 100644 index e6e2068..0000000 --- a/src/org/bouncycastle/asn1/DEROctetStringParser.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.InputStream; - -public class DEROctetStringParser - implements ASN1OctetStringParser -{ - private DefiniteLengthInputStream stream; - - DEROctetStringParser( - DefiniteLengthInputStream stream) - { - this.stream = stream; - } - - public InputStream getOctetStream() - { - return stream; - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return new DEROctetString(stream.toByteArray()); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException e) - { - throw new ASN1ParsingException("IOException converting stream to byte array: " + e.getMessage(), e); - } - } -} diff --git a/src/org/bouncycastle/asn1/DEROutputStream.java b/src/org/bouncycastle/asn1/DEROutputStream.java deleted file mode 100644 index 8b18c3d..0000000 --- a/src/org/bouncycastle/asn1/DEROutputStream.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * Stream that outputs encoding based on distinguished encoding rules. - */ -public class DEROutputStream - extends ASN1OutputStream -{ - public DEROutputStream( - OutputStream os) - { - super(os); - } - - public void writeObject( - ASN1Encodable obj) - throws IOException - { - if (obj != null) - { - obj.toASN1Primitive().toDERObject().encode(this); - } - else - { - throw new IOException("null object detected"); - } - } - - ASN1OutputStream getDERSubStream() - { - return this; - } - - ASN1OutputStream getDLSubStream() - { - return this; - } -} diff --git a/src/org/bouncycastle/asn1/DERPrintableString.java b/src/org/bouncycastle/asn1/DERPrintableString.java deleted file mode 100644 index 7b1daae..0000000 --- a/src/org/bouncycastle/asn1/DERPrintableString.java +++ /dev/null @@ -1,201 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * DER PrintableString object. - */ -public class DERPrintableString - extends ASN1Primitive - implements ASN1String -{ - private byte[] string; - - /** - * return a printable string from the passed in object. - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERPrintableString getInstance( - Object obj) - { - if (obj == null || obj instanceof DERPrintableString) - { - return (DERPrintableString)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return a Printable String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERPrintableString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERPrintableString) - { - return getInstance(o); - } - else - { - return new DERPrintableString(ASN1OctetString.getInstance(o).getOctets()); - } - } - - /** - * basic constructor - byte encoded string. - */ - DERPrintableString( - byte[] string) - { - this.string = string; - } - - /** - * basic constructor - this does not validate the string - */ - public DERPrintableString( - String string) - { - this(string, false); - } - - /** - * Constructor with optional validation. - * - * @param string the base string to wrap. - * @param validate whether or not to check the string. - * @throws IllegalArgumentException if validate is true and the string - * contains characters that should not be in a PrintableString. - */ - public DERPrintableString( - String string, - boolean validate) - { - if (validate && !isPrintableString(string)) - { - throw new IllegalArgumentException("string contains illegal characters"); - } - - this.string = Strings.toByteArray(string); - } - - public String getString() - { - return Strings.fromByteArray(string); - } - - public byte[] getOctets() - { - return Arrays.clone(string); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.PRINTABLE_STRING, string); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERPrintableString)) - { - return false; - } - - DERPrintableString s = (DERPrintableString)o; - - return Arrays.areEqual(string, s.string); - } - - public String toString() - { - return getString(); - } - - /** - * return true if the passed in String can be represented without - * loss as a PrintableString, false otherwise. - * - * @return true if in printable set, false otherwise. - */ - public static boolean isPrintableString( - String str) - { - for (int i = str.length() - 1; i >= 0; i--) - { - char ch = str.charAt(i); - - if (ch > 0x007f) - { - return false; - } - - if ('a' <= ch && ch <= 'z') - { - continue; - } - - if ('A' <= ch && ch <= 'Z') - { - continue; - } - - if ('0' <= ch && ch <= '9') - { - continue; - } - - switch (ch) - { - case ' ': - case '\'': - case '(': - case ')': - case '+': - case '-': - case '.': - case ':': - case '=': - case '?': - case '/': - case ',': - continue; - } - - return false; - } - - return true; - } -} diff --git a/src/org/bouncycastle/asn1/DERSequence.java b/src/org/bouncycastle/asn1/DERSequence.java deleted file mode 100644 index ad48a83..0000000 --- a/src/org/bouncycastle/asn1/DERSequence.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -public class DERSequence - extends ASN1Sequence -{ - private int bodyLength = -1; - - /** - * create an empty sequence - */ - public DERSequence() - { - } - - /** - * create a sequence containing one object - */ - public DERSequence( - ASN1Encodable obj) - { - super(obj); - } - - /** - * create a sequence containing a vector of objects. - */ - public DERSequence( - ASN1EncodableVector v) - { - super(v); - } - - /** - * create a sequence containing an array of objects. - */ - public DERSequence( - ASN1Encodable[] array) - { - super(array); - } - - private int getBodyLength() - throws IOException - { - if (bodyLength < 0) - { - int length = 0; - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - length += ((ASN1Encodable)obj).toASN1Primitive().toDERObject().encodedLength(); - } - - bodyLength = length; - } - - return bodyLength; - } - - int encodedLength() - throws IOException - { - int length = getBodyLength(); - - return 1 + StreamUtil.calculateBodyLength(length) + length; - } - - /* - * A note on the implementation: - *

        - * As DER requires the constructed, definite-length model to - * be used for structured types, this varies slightly from the - * ASN.1 descriptions given. Rather than just outputting SEQUENCE, - * we also have to specify CONSTRUCTED, and the objects length. - */ - void encode( - ASN1OutputStream out) - throws IOException - { - ASN1OutputStream dOut = out.getDERSubStream(); - int length = getBodyLength(); - - out.write(BERTags.SEQUENCE | BERTags.CONSTRUCTED); - out.writeLength(length); - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - dOut.writeObject((ASN1Encodable)obj); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERSequenceGenerator.java b/src/org/bouncycastle/asn1/DERSequenceGenerator.java deleted file mode 100644 index 8cb5271..0000000 --- a/src/org/bouncycastle/asn1/DERSequenceGenerator.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -public class DERSequenceGenerator - extends DERGenerator -{ - private final ByteArrayOutputStream _bOut = new ByteArrayOutputStream(); - - public DERSequenceGenerator( - OutputStream out) - throws IOException - { - super(out); - } - - public DERSequenceGenerator( - OutputStream out, - int tagNo, - boolean isExplicit) - throws IOException - { - super(out, tagNo, isExplicit); - } - - public void addObject( - ASN1Encodable object) - throws IOException - { - object.toASN1Primitive().encode(new DEROutputStream(_bOut)); - } - - public OutputStream getRawOutputStream() - { - return _bOut; - } - - public void close() - throws IOException - { - writeDEREncoded(BERTags.CONSTRUCTED | BERTags.SEQUENCE, _bOut.toByteArray()); - } -} diff --git a/src/org/bouncycastle/asn1/DERSequenceParser.java b/src/org/bouncycastle/asn1/DERSequenceParser.java deleted file mode 100644 index 376c1fd..0000000 --- a/src/org/bouncycastle/asn1/DERSequenceParser.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class DERSequenceParser - implements ASN1SequenceParser -{ - private ASN1StreamParser _parser; - - DERSequenceParser(ASN1StreamParser parser) - { - this._parser = parser; - } - - public ASN1Encodable readObject() - throws IOException - { - return _parser.readObject(); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return new DERSequence(_parser.readVector()); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException e) - { - throw new IllegalStateException(e.getMessage()); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERSet.java b/src/org/bouncycastle/asn1/DERSet.java deleted file mode 100644 index c1faf84..0000000 --- a/src/org/bouncycastle/asn1/DERSet.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -/** - * A DER encoded set object - */ -public class DERSet - extends ASN1Set -{ - private int bodyLength = -1; - - /** - * create an empty set - */ - public DERSet() - { - } - - /** - * @param obj - a single object that makes up the set. - */ - public DERSet( - ASN1Encodable obj) - { - super(obj); - } - - /** - * @param v - a vector of objects making up the set. - */ - public DERSet( - ASN1EncodableVector v) - { - super(v, true); - } - - /** - * create a set from an array of objects. - */ - public DERSet( - ASN1Encodable[] a) - { - super(a, true); - } - - DERSet( - ASN1EncodableVector v, - boolean doSort) - { - super(v, doSort); - } - - private int getBodyLength() - throws IOException - { - if (bodyLength < 0) - { - int length = 0; - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - length += ((ASN1Encodable)obj).toASN1Primitive().toDERObject().encodedLength(); - } - - bodyLength = length; - } - - return bodyLength; - } - - int encodedLength() - throws IOException - { - int length = getBodyLength(); - - return 1 + StreamUtil.calculateBodyLength(length) + length; - } - - /* - * A note on the implementation: - *

        - * As DER requires the constructed, definite-length model to - * be used for structured types, this varies slightly from the - * ASN.1 descriptions given. Rather than just outputting SET, - * we also have to specify CONSTRUCTED, and the objects length. - */ - void encode( - ASN1OutputStream out) - throws IOException - { - ASN1OutputStream dOut = out.getDERSubStream(); - int length = getBodyLength(); - - out.write(BERTags.SET | BERTags.CONSTRUCTED); - out.writeLength(length); - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - dOut.writeObject((ASN1Encodable)obj); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERSetParser.java b/src/org/bouncycastle/asn1/DERSetParser.java deleted file mode 100644 index 17702fa..0000000 --- a/src/org/bouncycastle/asn1/DERSetParser.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public class DERSetParser - implements ASN1SetParser -{ - private ASN1StreamParser _parser; - - DERSetParser(ASN1StreamParser parser) - { - this._parser = parser; - } - - public ASN1Encodable readObject() - throws IOException - { - return _parser.readObject(); - } - - public ASN1Primitive getLoadedObject() - throws IOException - { - return new DERSet(_parser.readVector(), false); - } - - public ASN1Primitive toASN1Primitive() - { - try - { - return getLoadedObject(); - } - catch (IOException e) - { - throw new ASN1ParsingException(e.getMessage(), e); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERT61String.java b/src/org/bouncycastle/asn1/DERT61String.java deleted file mode 100644 index ee2979b..0000000 --- a/src/org/bouncycastle/asn1/DERT61String.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * DER T61String (also the teletex string) - */ -public class DERT61String - extends ASN1Primitive - implements ASN1String -{ - private byte[] string; - - /** - * return a T61 string from the passed in object. - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERT61String getInstance( - Object obj) - { - if (obj == null || obj instanceof DERT61String) - { - return (DERT61String)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return an T61 String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERT61String getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERT61String) - { - return getInstance(o); - } - else - { - return new DERT61String(ASN1OctetString.getInstance(o).getOctets()); - } - } - - /** - * basic constructor - with bytes. - */ - DERT61String( - byte[] string) - { - this.string = string; - } - - /** - * basic constructor - with string. - */ - public DERT61String( - String string) - { - this.string = Strings.toByteArray(string); - } - - public String getString() - { - return Strings.fromByteArray(string); - } - - public String toString() - { - return getString(); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.T61_STRING, string); - } - - public byte[] getOctets() - { - return Arrays.clone(string); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERT61String)) - { - return false; - } - - return Arrays.areEqual(string, ((DERT61String)o).string); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } -} diff --git a/src/org/bouncycastle/asn1/DERTaggedObject.java b/src/org/bouncycastle/asn1/DERTaggedObject.java deleted file mode 100644 index a87a0dc..0000000 --- a/src/org/bouncycastle/asn1/DERTaggedObject.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -/** - * DER TaggedObject - in ASN.1 notation this is any object preceded by - * a [n] where n is some number - these are assumed to follow the construction - * rules (as with sequences). - */ -public class DERTaggedObject - extends ASN1TaggedObject -{ - private static final byte[] ZERO_BYTES = new byte[0]; - - /** - * @param explicit true if an explicitly tagged object. - * @param tagNo the tag number for this object. - * @param obj the tagged object. - */ - public DERTaggedObject( - boolean explicit, - int tagNo, - ASN1Encodable obj) - { - super(explicit, tagNo, obj); - } - - public DERTaggedObject(int tagNo, ASN1Encodable encodable) - { - super(true, tagNo, encodable); - } - - boolean isConstructed() - { - if (!empty) - { - if (explicit) - { - return true; - } - else - { - ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); - - return primitive.isConstructed(); - } - } - else - { - return true; - } - } - - int encodedLength() - throws IOException - { - if (!empty) - { - ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); - int length = primitive.encodedLength(); - - if (explicit) - { - return StreamUtil.calculateTagLength(tagNo) + StreamUtil.calculateBodyLength(length) + length; - } - else - { - // header length already in calculation - length = length - 1; - - return StreamUtil.calculateTagLength(tagNo) + length; - } - } - else - { - return StreamUtil.calculateTagLength(tagNo) + 1; - } - } - - void encode( - ASN1OutputStream out) - throws IOException - { - if (!empty) - { - ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); - - if (explicit) - { - out.writeTag(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo); - out.writeLength(primitive.encodedLength()); - out.writeObject(primitive); - } - else - { - // - // need to mark constructed types... - // - int flags; - if (primitive.isConstructed()) - { - flags = BERTags.CONSTRUCTED | BERTags.TAGGED; - } - else - { - flags = BERTags.TAGGED; - } - - out.writeTag(flags, tagNo); - out.writeImplicitObject(primitive); - } - } - else - { - out.writeEncoded(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo, ZERO_BYTES); - } - } -} diff --git a/src/org/bouncycastle/asn1/DERTags.java b/src/org/bouncycastle/asn1/DERTags.java deleted file mode 100644 index 83fd7fd..0000000 --- a/src/org/bouncycastle/asn1/DERTags.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bouncycastle.asn1; - -/** - * @deprecated use BERTags - */ -public interface DERTags - extends BERTags -{ -} diff --git a/src/org/bouncycastle/asn1/DERUTCTime.java b/src/org/bouncycastle/asn1/DERUTCTime.java deleted file mode 100644 index 3e8010b..0000000 --- a/src/org/bouncycastle/asn1/DERUTCTime.java +++ /dev/null @@ -1,259 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Date; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * UTC time object. - */ -public class DERUTCTime - extends ASN1Primitive -{ - private byte[] time; - - /** - * return an UTC Time from the passed in object. - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static ASN1UTCTime getInstance( - Object obj) - { - if (obj == null || obj instanceof ASN1UTCTime) - { - return (ASN1UTCTime)obj; - } - - if (obj instanceof DERUTCTime) - { - return new ASN1UTCTime(((DERUTCTime)obj).time); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return an UTC Time from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static ASN1UTCTime getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Object o = obj.getObject(); - - if (explicit || o instanceof ASN1UTCTime) - { - return getInstance(o); - } - else - { - return new ASN1UTCTime(((ASN1OctetString)o).getOctets()); - } - } - - /** - * The correct format for this is YYMMDDHHMMSSZ (it used to be that seconds were - * never encoded. When you're creating one of these objects from scratch, that's - * what you want to use, otherwise we'll try to deal with whatever gets read from - * the input stream... (this is why the input format is different from the getTime() - * method output). - *

        - * - * @param time the time string. - */ - public DERUTCTime( - String time) - { - if (time.charAt(time.length() - 1) != 'Z') - { - // we accept this as a variation - if (time.indexOf('-') < 0 && time.indexOf('+') < 0) - { - throw new IllegalArgumentException("time needs to be in format YYMMDDHHMMSSZ"); - } - } - - this.time = Strings.toByteArray(time); - } - - /** - * base constructor from a java.util.date object - */ - public DERUTCTime( - Date time) - { - this.time = Strings.toByteArray(DateFormatter.toUTCDateString(time)); - } - - DERUTCTime( - byte[] time) - { - this.time = time; - } - - /** - * return the time as a date based on whatever a 2 digit year will return. For - * standardised processing use getAdjustedDate(). - * - * @return the resulting date - */ - public Date getDate() - { - return DateFormatter.adjustedFromUTCDateString(time); - } - - /** - * return the time as an adjusted date - * in the range of 1950 - 2049. - * - * @return a date in the range of 1950 to 2049. - */ - public Date getAdjustedDate() - { - return DateFormatter.adjustedFromUTCDateString(time); - } - - /** - * return the time - always in the form of - * YYMMDDhhmmssGMT(+hh:mm|-hh:mm). - *

        - * Normally in a certificate we would expect "Z" rather than "GMT", - * however adding the "GMT" means we can just use: - *

        -     *     dateF = new SimpleDateFormat("yyMMddHHmmssz");
        -     * 
        - * To read in the time and get a date which is compatible with our local - * time zone. - *

        - * Note: In some cases, due to the local date processing, this - * may lead to unexpected results. If you want to stick the normal - * convention of 1950 to 2049 use the getAdjustedTime() method. - */ - public String getTime() - { - String stime = Strings.fromByteArray(time); - - // - // standardise the format. - // - if (stime.indexOf('-') < 0 && stime.indexOf('+') < 0) - { - if (stime.length() == 11) - { - return stime.substring(0, 10) + "00GMT+00:00"; - } - else - { - return stime.substring(0, 12) + "GMT+00:00"; - } - } - else - { - int index = stime.indexOf('-'); - if (index < 0) - { - index = stime.indexOf('+'); - } - String d = stime; - - if (index == stime.length() - 3) - { - d += "00"; - } - - if (index == 10) - { - return d.substring(0, 10) + "00GMT" + d.substring(10, 13) + ":" + d.substring(13, 15); - } - else - { - return d.substring(0, 12) + "GMT" + d.substring(12, 15) + ":" + d.substring(15, 17); - } - } - } - - /** - * return a time string as an adjusted date with a 4 digit year. This goes - * in the range of 1950 - 2049. - */ - public String getAdjustedTime() - { - String d = this.getTime(); - - if (d.charAt(0) < '5') - { - return "20" + d; - } - else - { - return "19" + d; - } - } - - /** - * Return the time. - * @return The time string as it appeared in the encoded object. - */ - public String getTimeString() - { - return Strings.fromByteArray(time); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - int length = time.length; - - return 1 + StreamUtil.calculateBodyLength(length) + length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.write(BERTags.UTC_TIME); - - int length = time.length; - - out.writeLength(length); - - for (int i = 0; i != length; i++) - { - out.write((byte)time[i]); - } - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERUTCTime)) - { - return false; - } - - return Arrays.areEqual(time, ((DERUTCTime)o).time); - } - - public int hashCode() - { - return Arrays.hashCode(time); - } - - public String toString() - { - return Strings.fromByteArray(time); - } -} diff --git a/src/org/bouncycastle/asn1/DERUTF8String.java b/src/org/bouncycastle/asn1/DERUTF8String.java deleted file mode 100644 index f46f558..0000000 --- a/src/org/bouncycastle/asn1/DERUTF8String.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * DER UTF8String object. - */ -public class DERUTF8String - extends ASN1Primitive - implements ASN1String -{ - private byte[] string; - - /** - * return an UTF8 string from the passed in object. - * - * @exception IllegalArgumentException - * if the object cannot be converted. - */ - public static DERUTF8String getInstance(Object obj) - { - if (obj == null || obj instanceof DERUTF8String) - { - return (DERUTF8String)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " - + obj.getClass().getName()); - } - - /** - * return an UTF8 String from a tagged object. - * - * @param obj - * the tagged object holding the object we want - * @param explicit - * true if the object is meant to be explicitly tagged false - * otherwise. - * @exception IllegalArgumentException - * if the tagged object cannot be converted. - */ - public static DERUTF8String getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERUTF8String) - { - return getInstance(o); - } - else - { - return new DERUTF8String(ASN1OctetString.getInstance(o).getOctets()); - } - } - - /** - * basic constructor - byte encoded string. - */ - DERUTF8String(byte[] string) - { - this.string = string; - } - - /** - * basic constructor - */ - public DERUTF8String(String string) - { - this.string = Strings.toUTF8ByteArray(string); - } - - public String getString() - { - return Strings.fromUTF8ByteArray(string); - } - - public String toString() - { - return getString(); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } - - boolean asn1Equals(ASN1Primitive o) - { - if (!(o instanceof DERUTF8String)) - { - return false; - } - - DERUTF8String s = (DERUTF8String)o; - - return Arrays.areEqual(string, s.string); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - throws IOException - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode(ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.UTF8_STRING, string); - } -} diff --git a/src/org/bouncycastle/asn1/DERUniversalString.java b/src/org/bouncycastle/asn1/DERUniversalString.java deleted file mode 100644 index 4fe82f0..0000000 --- a/src/org/bouncycastle/asn1/DERUniversalString.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import org.bouncycastle.util.Arrays; - -/** - * DER UniversalString object. - */ -public class DERUniversalString - extends ASN1Primitive - implements ASN1String -{ - private static final char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - private byte[] string; - - /** - * return a Universal String from the passed in object. - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERUniversalString getInstance( - Object obj) - { - if (obj == null || obj instanceof DERUniversalString) - { - return (DERUniversalString)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return a Universal String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERUniversalString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERUniversalString) - { - return getInstance(o); - } - else - { - return new DERUniversalString(((ASN1OctetString)o).getOctets()); - } - } - - /** - * basic constructor - byte encoded string. - */ - public DERUniversalString( - byte[] string) - { - this.string = string; - } - - public String getString() - { - StringBuffer buf = new StringBuffer("#"); - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - ASN1OutputStream aOut = new ASN1OutputStream(bOut); - - try - { - aOut.writeObject(this); - } - catch (IOException e) - { - throw new RuntimeException("internal error encoding BitString"); - } - - byte[] string = bOut.toByteArray(); - - for (int i = 0; i != string.length; i++) - { - buf.append(table[(string[i] >>> 4) & 0xf]); - buf.append(table[string[i] & 0xf]); - } - - return buf.toString(); - } - - public String toString() - { - return getString(); - } - - public byte[] getOctets() - { - return string; - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.UNIVERSAL_STRING, this.getOctets()); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERUniversalString)) - { - return false; - } - - return Arrays.areEqual(string, ((DERUniversalString)o).string); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } -} diff --git a/src/org/bouncycastle/asn1/DERVisibleString.java b/src/org/bouncycastle/asn1/DERVisibleString.java deleted file mode 100644 index 1c385b7..0000000 --- a/src/org/bouncycastle/asn1/DERVisibleString.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; - -/** - * DER VisibleString object. - */ -public class DERVisibleString - extends ASN1Primitive - implements ASN1String -{ - private byte[] string; - - /** - * return a Visible String from the passed in object. - * - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static DERVisibleString getInstance( - Object obj) - { - if (obj == null || obj instanceof DERVisibleString) - { - return (DERVisibleString)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * return a Visible String from a tagged object. - * - * @param obj the tagged object holding the object we want - * @param explicit true if the object is meant to be explicitly - * tagged false otherwise. - * @exception IllegalArgumentException if the tagged object cannot - * be converted. - */ - public static DERVisibleString getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - ASN1Primitive o = obj.getObject(); - - if (explicit || o instanceof DERVisibleString) - { - return getInstance(o); - } - else - { - return new DERVisibleString(ASN1OctetString.getInstance(o).getOctets()); - } - } - - /** - * basic constructor - byte encoded string. - */ - DERVisibleString( - byte[] string) - { - this.string = string; - } - - /** - * basic constructor - */ - public DERVisibleString( - String string) - { - this.string = Strings.toByteArray(string); - } - - public String getString() - { - return Strings.fromByteArray(string); - } - - public String toString() - { - return getString(); - } - - public byte[] getOctets() - { - return Arrays.clone(string); - } - - boolean isConstructed() - { - return false; - } - - int encodedLength() - { - return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; - } - - void encode( - ASN1OutputStream out) - throws IOException - { - out.writeEncoded(BERTags.VISIBLE_STRING, this.string); - } - - boolean asn1Equals( - ASN1Primitive o) - { - if (!(o instanceof DERVisibleString)) - { - return false; - } - - return Arrays.areEqual(string, ((DERVisibleString)o).string); - } - - public int hashCode() - { - return Arrays.hashCode(string); - } -} diff --git a/src/org/bouncycastle/asn1/DLOutputStream.java b/src/org/bouncycastle/asn1/DLOutputStream.java deleted file mode 100644 index 68c0ed6..0000000 --- a/src/org/bouncycastle/asn1/DLOutputStream.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * Stream that outputs encoding based on definite length. - */ -public class DLOutputStream - extends ASN1OutputStream -{ - public DLOutputStream( - OutputStream os) - { - super(os); - } - - public void writeObject( - ASN1Encodable obj) - throws IOException - { - if (obj != null) - { - obj.toASN1Primitive().toDLObject().encode(this); - } - else - { - throw new IOException("null object detected"); - } - } -} diff --git a/src/org/bouncycastle/asn1/DLSequence.java b/src/org/bouncycastle/asn1/DLSequence.java deleted file mode 100644 index bb8ec4e..0000000 --- a/src/org/bouncycastle/asn1/DLSequence.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -public class DLSequence - extends ASN1Sequence -{ - private int bodyLength = -1; - - /** - * create an empty sequence - */ - public DLSequence() - { - } - - /** - * create a sequence containing one object - */ - public DLSequence( - ASN1Encodable obj) - { - super(obj); - } - - /** - * create a sequence containing a vector of objects. - */ - public DLSequence( - ASN1EncodableVector v) - { - super(v); - } - - /** - * create a sequence containing an array of objects. - */ - public DLSequence( - ASN1Encodable[] array) - { - super(array); - } - - private int getBodyLength() - throws IOException - { - if (bodyLength < 0) - { - int length = 0; - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - length += ((ASN1Encodable)obj).toASN1Primitive().toDLObject().encodedLength(); - } - - bodyLength = length; - } - - return bodyLength; - } - - int encodedLength() - throws IOException - { - int length = getBodyLength(); - - return 1 + StreamUtil.calculateBodyLength(length) + length; - } - - /* - * A note on the implementation: - *

        - * As DL requires the constructed, definite-length model to - * be used for structured types, this varies slightly from the - * ASN.1 descriptions given. Rather than just outputting SEQUENCE, - * we also have to specify CONSTRUCTED, and the objects length. - */ - void encode( - ASN1OutputStream out) - throws IOException - { - ASN1OutputStream dOut = out.getDLSubStream(); - int length = getBodyLength(); - - out.write(BERTags.SEQUENCE | BERTags.CONSTRUCTED); - out.writeLength(length); - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - dOut.writeObject((ASN1Encodable)obj); - } - } -} diff --git a/src/org/bouncycastle/asn1/DLSet.java b/src/org/bouncycastle/asn1/DLSet.java deleted file mode 100644 index 755754b..0000000 --- a/src/org/bouncycastle/asn1/DLSet.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -/** - * A DER encoded set object - */ -public class DLSet - extends ASN1Set -{ - private int bodyLength = -1; - - /** - * create an empty set - */ - public DLSet() - { - } - - /** - * @param obj - a single object that makes up the set. - */ - public DLSet( - ASN1Encodable obj) - { - super(obj); - } - - /** - * @param v - a vector of objects making up the set. - */ - public DLSet( - ASN1EncodableVector v) - { - super(v, false); - } - - /** - * create a set from an array of objects. - */ - public DLSet( - ASN1Encodable[] a) - { - super(a, false); - } - - private int getBodyLength() - throws IOException - { - if (bodyLength < 0) - { - int length = 0; - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - length += ((ASN1Encodable)obj).toASN1Primitive().toDLObject().encodedLength(); - } - - bodyLength = length; - } - - return bodyLength; - } - - int encodedLength() - throws IOException - { - int length = getBodyLength(); - - return 1 + StreamUtil.calculateBodyLength(length) + length; - } - - /* - * A note on the implementation: - *

        - * As DL requires the constructed, definite-length model to - * be used for structured types, this varies slightly from the - * ASN.1 descriptions given. Rather than just outputting SET, - * we also have to specify CONSTRUCTED, and the objects length. - */ - void encode( - ASN1OutputStream out) - throws IOException - { - ASN1OutputStream dOut = out.getDLSubStream(); - int length = getBodyLength(); - - out.write(BERTags.SET | BERTags.CONSTRUCTED); - out.writeLength(length); - - for (Enumeration e = this.getObjects(); e.hasMoreElements();) - { - Object obj = e.nextElement(); - - dOut.writeObject((ASN1Encodable)obj); - } - } -} diff --git a/src/org/bouncycastle/asn1/DLTaggedObject.java b/src/org/bouncycastle/asn1/DLTaggedObject.java deleted file mode 100644 index 4a245df..0000000 --- a/src/org/bouncycastle/asn1/DLTaggedObject.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -/** - * Definite Length TaggedObject - in ASN.1 notation this is any object preceded by - * a [n] where n is some number - these are assumed to follow the construction - * rules (as with sequences). - */ -public class DLTaggedObject - extends ASN1TaggedObject -{ - private static final byte[] ZERO_BYTES = new byte[0]; - - /** - * @param explicit true if an explicitly tagged object. - * @param tagNo the tag number for this object. - * @param obj the tagged object. - */ - public DLTaggedObject( - boolean explicit, - int tagNo, - ASN1Encodable obj) - { - super(explicit, tagNo, obj); - } - - boolean isConstructed() - { - if (!empty) - { - if (explicit) - { - return true; - } - else - { - ASN1Primitive primitive = obj.toASN1Primitive().toDLObject(); - - return primitive.isConstructed(); - } - } - else - { - return true; - } - } - - int encodedLength() - throws IOException - { - if (!empty) - { - int length = obj.toASN1Primitive().toDLObject().encodedLength(); - - if (explicit) - { - return StreamUtil.calculateTagLength(tagNo) + StreamUtil.calculateBodyLength(length) + length; - } - else - { - // header length already in calculation - length = length - 1; - - return StreamUtil.calculateTagLength(tagNo) + length; - } - } - else - { - return StreamUtil.calculateTagLength(tagNo) + 1; - } - } - - void encode( - ASN1OutputStream out) - throws IOException - { - if (!empty) - { - ASN1Primitive primitive = obj.toASN1Primitive().toDLObject(); - - if (explicit) - { - out.writeTag(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo); - out.writeLength(primitive.encodedLength()); - out.writeObject(primitive); - } - else - { - // - // need to mark constructed types... - // - int flags; - if (primitive.isConstructed()) - { - flags = BERTags.CONSTRUCTED | BERTags.TAGGED; - } - else - { - flags = BERTags.TAGGED; - } - - out.writeTag(flags, tagNo); - out.writeImplicitObject(primitive); - } - } - else - { - out.writeEncoded(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo, ZERO_BYTES); - } - } -} diff --git a/src/org/bouncycastle/asn1/DateFormatter.java b/src/org/bouncycastle/asn1/DateFormatter.java deleted file mode 100644 index cd70774..0000000 --- a/src/org/bouncycastle/asn1/DateFormatter.java +++ /dev/null @@ -1,272 +0,0 @@ -package org.bouncycastle.asn1; - -import java.util.Calendar; -import java.util.Date; -import java.util.TimeZone; - -class DateFormatter -{ - // YYMMDDHHMMSSZ - static String toUTCDateString(Date date) - { - Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - - calendar.setTime(date); - - return format2Year(calendar.get(Calendar.YEAR)) + format2(calendar.get(Calendar.MONTH) + 1) + format2(calendar.get(Calendar.DAY_OF_MONTH)) - + format2(calendar.get(Calendar.HOUR_OF_DAY)) + format2(calendar.get(Calendar.MINUTE)) + format2(calendar.get(Calendar.SECOND)) + "Z"; - } - - static Date adjustedFromUTCDateString(byte[] date) - { - Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - - int year = toInt2(date, 0); - - if (year < 50) - { - year += 2000; - } - else - { - year += 1900; - } - - calendar.setTimeZone(TimeZone.getTimeZone("GMT")); - - calendar.set(Calendar.YEAR, year); - calendar.set(Calendar.MONTH, toInt2(date, 2) - 1); - calendar.set(Calendar.DAY_OF_MONTH, toInt2(date, 4)); - calendar.set(Calendar.HOUR_OF_DAY, toInt2(date, 6)); - calendar.set(Calendar.MINUTE, toInt2(date, 8)); - - int tzChar = 10; - - if (isNumber(date, tzChar)) - { - calendar.set(Calendar.SECOND, toInt2(date, 10)); - tzChar = 12; - } - else - { - calendar.set(Calendar.SECOND, 0); - } - - calendar.set(Calendar.MILLISECOND, 0); - - if (date[tzChar] != 'Z') - { - int hoursOff = 0; - int minutesOff = 0; - - hoursOff = toInt2(date, tzChar + 1) * 60 * 60 * 1000; - - if (date.length > tzChar + 3) - { - minutesOff = toInt2(date, tzChar + 3) * 60 * 1000; - } - - if (date[tzChar] == '-') - { - return new Date(calendar.getTime().getTime() + hoursOff + minutesOff); - } - else - { - return new Date(calendar.getTime().getTime() - (hoursOff + minutesOff)); - } - } - - return calendar.getTime(); - } - - static String getGeneralizedTimeDateString(Date date, boolean includeMillis) - { - Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - - calendar.setTime(date); - - String time = format4Year(calendar.get(Calendar.YEAR)) + format2(calendar.get(Calendar.MONTH) + 1) + format2(calendar.get(Calendar.DAY_OF_MONTH)) - + format2(calendar.get(Calendar.HOUR_OF_DAY)) + format2(calendar.get(Calendar.MINUTE)) + format2(calendar.get(Calendar.SECOND)); - - if (includeMillis) - { - time += "." + format3(calendar.get(Calendar.MILLISECOND)); - } - - return time + "Z"; - } - - static Date fromGeneralizedTimeString(byte[] date) - { - Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - - int year = toInt4(date, 0); - - if (isLocalTime(date)) - { - calendar.setTimeZone(TimeZone.getTimeZone("GMT")); - } - - calendar.set(Calendar.YEAR, year); - calendar.set(Calendar.MONTH, toInt2(date, 4) - 1); - calendar.set(Calendar.DAY_OF_MONTH, toInt2(date, 6)); - calendar.set(Calendar.HOUR_OF_DAY, toInt2(date, 8)); - calendar.set(Calendar.MINUTE, toInt2(date, 10)); - - int tzChar = 12; - - if (isNumber(date, tzChar)) - { - calendar.set(Calendar.SECOND, toInt2(date, 12)); - tzChar = 14; - } - else - { - calendar.set(Calendar.SECOND, 0); - } - - if (tzChar != date.length && date[tzChar] == '.') - { - int millis = 0; - tzChar++; - if (isNumber(date, tzChar)) - { - millis = (date[tzChar] - '0') * 100; - tzChar++; - } - if (tzChar != date.length && isNumber(date, tzChar)) - { - millis += (date[tzChar] - '0') * 10; - tzChar++; - } - if (tzChar != date.length && isNumber(date, tzChar)) - { - millis += (date[tzChar] - '0'); - tzChar++; - } - calendar.set(Calendar.MILLISECOND, millis); - } - else - { - calendar.set(Calendar.MILLISECOND, 0); - } - - // skip nano-seconds - while (tzChar != date.length && isNumber(date, tzChar)) - { - tzChar++; - } - - if (tzChar != date.length && date[tzChar] != 'Z') - { - int hoursOff = 0; - int minutesOff = 0; - - hoursOff = toInt2(date, tzChar + 1) * 60 * 60 * 1000; - - if (date.length > tzChar + 3) - { - minutesOff = toInt2(date, tzChar + 3) * 60 * 1000; - } - - if (date[tzChar] == '-') - { - return new Date(calendar.getTime().getTime() + hoursOff + minutesOff); - } - else - { - return new Date(calendar.getTime().getTime() - (hoursOff + minutesOff)); - } - } - - return calendar.getTime(); - } - - private static String format2(int v) - { - if (v < 10) - { - return "0" + v; - } - - return Integer.toString(v); - } - - private static String format2Year(int v) - { - if (v > 2000) - { - v = v - 2000; - } - else - { - v = v - 1900; - } - - return format2(v); - } - - private static String format3(int v) - { - if (v < 10) - { - return "00" + v; - } - - if (v < 100) - { - return "0" + v; - } - - return Integer.toString(v); - } - - private static String format4Year(int v) - { - if (v < 10) - { - return "000" + v; - } - - if (v < 100) - { - return "00" + v; - } - - if (v < 1000) - { - return "0" + v; - } - - return Integer.toString(v); - } - - private static boolean isNumber(byte[] input, int off) - { - byte b = input[off]; - return (b >= '0') && (b <= '9'); - } - - private static boolean isLocalTime(byte[] date) - { - for (int i = date.length - 1; i > date.length - 6; i--) - { - if (date[i] == 'Z' || date[i] == '-' || date[i] == '+') - { - return false; - } - } - - return true; - } - - private static int toInt2(byte[] input, int off) - { - return (input[off] - '0') * 10 + (input[off + 1] - '0'); - } - - private static int toInt4(byte[] input, int off) - { - return toInt2(input, off) * 100 + toInt2(input, off + 2) ; - } -} diff --git a/src/org/bouncycastle/asn1/DefiniteLengthInputStream.java b/src/org/bouncycastle/asn1/DefiniteLengthInputStream.java deleted file mode 100644 index 3f6ce22..0000000 --- a/src/org/bouncycastle/asn1/DefiniteLengthInputStream.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.EOFException; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.util.io.Streams; - -class DefiniteLengthInputStream - extends LimitedInputStream -{ - private static final byte[] EMPTY_BYTES = new byte[0]; - - private final int _originalLength; - private int _remaining; - - DefiniteLengthInputStream( - InputStream in, - int length) - throws IOException - { - super(in, length); - - if (length < 0) - { - throw new IllegalArgumentException("negative lengths not allowed"); - } - - this._originalLength = length; - this._remaining = length; - - if (length == 0) - { - setParentEofDetect(true); - } - } - - int getRemaining() - { - return _remaining; - } - - public int read() - throws IOException - { - if (_remaining == 0) - { - return -1; - } - - int b = _in.read(); - - if (b < 0) - { - throw new EOFException("DEF length " + _originalLength + " object truncated by " + _remaining); - } - - if (--_remaining == 0) - { - setParentEofDetect(true); - } - - return b; - } - - public int read(byte[] buf, int off, int len) - throws IOException - { - if (_remaining == 0) - { - return -1; - } - - int toRead = Math.min(len, _remaining); - int numRead = _in.read(buf, off, toRead); - - if (numRead < 0) - { - throw new EOFException("DEF length " + _originalLength + " object truncated by " + _remaining); - } - - if ((_remaining -= numRead) == 0) - { - setParentEofDetect(true); - } - - return numRead; - } - - byte[] toByteArray() - throws IOException - { - if (_remaining == 0) - { - return EMPTY_BYTES; - } - - byte[] bytes = new byte[_remaining]; - if ((_remaining -= Streams.readFully(_in, bytes)) != 0) - { - throw new EOFException("DEF length " + _originalLength + " object truncated by " + _remaining); - } - setParentEofDetect(true); - return bytes; - } -} diff --git a/src/org/bouncycastle/asn1/InMemoryRepresentable.java b/src/org/bouncycastle/asn1/InMemoryRepresentable.java deleted file mode 100644 index a4b1492..0000000 --- a/src/org/bouncycastle/asn1/InMemoryRepresentable.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; - -public interface InMemoryRepresentable -{ - ASN1Primitive getLoadedObject() - throws IOException; -} diff --git a/src/org/bouncycastle/asn1/IndefiniteLengthInputStream.java b/src/org/bouncycastle/asn1/IndefiniteLengthInputStream.java deleted file mode 100644 index 353da3b..0000000 --- a/src/org/bouncycastle/asn1/IndefiniteLengthInputStream.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.EOFException; -import java.io.IOException; -import java.io.InputStream; - -class IndefiniteLengthInputStream - extends LimitedInputStream -{ - private int _b1; - private int _b2; - private boolean _eofReached = false; - private boolean _eofOn00 = true; - - IndefiniteLengthInputStream( - InputStream in, - int limit) - throws IOException - { - super(in, limit); - - _b1 = in.read(); - _b2 = in.read(); - - if (_b2 < 0) - { - // Corrupted stream - throw new EOFException(); - } - - checkForEof(); - } - - void setEofOn00( - boolean eofOn00) - { - _eofOn00 = eofOn00; - checkForEof(); - } - - private boolean checkForEof() - { - if (!_eofReached && _eofOn00 && (_b1 == 0x00 && _b2 == 0x00)) - { - _eofReached = true; - setParentEofDetect(true); - } - return _eofReached; - } - - public int read(byte[] b, int off, int len) - throws IOException - { - // Only use this optimisation if we aren't checking for 00 - if (_eofOn00 || len < 3) - { - return super.read(b, off, len); - } - - if (_eofReached) - { - return -1; - } - - int numRead = _in.read(b, off + 2, len - 2); - - if (numRead < 0) - { - // Corrupted stream - throw new EOFException(); - } - - b[off] = (byte)_b1; - b[off + 1] = (byte)_b2; - - _b1 = _in.read(); - _b2 = _in.read(); - - if (_b2 < 0) - { - // Corrupted stream - throw new EOFException(); - } - - return numRead + 2; - } - - public int read() - throws IOException - { - if (checkForEof()) - { - return -1; - } - - int b = _in.read(); - - if (b < 0) - { - // Corrupted stream - throw new EOFException(); - } - - int v = _b1; - - _b1 = _b2; - _b2 = b; - - return v; - } -} diff --git a/src/org/bouncycastle/asn1/LazyConstructionEnumeration.java b/src/org/bouncycastle/asn1/LazyConstructionEnumeration.java deleted file mode 100644 index 31d988d..0000000 --- a/src/org/bouncycastle/asn1/LazyConstructionEnumeration.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -class LazyConstructionEnumeration - implements Enumeration -{ - private ASN1InputStream aIn; - private Object nextObj; - - public LazyConstructionEnumeration(byte[] encoded) - { - aIn = new ASN1InputStream(encoded, true); - nextObj = readObject(); - } - - public boolean hasMoreElements() - { - return nextObj != null; - } - - public Object nextElement() - { - Object o = nextObj; - - nextObj = readObject(); - - return o; - } - - private Object readObject() - { - try - { - return aIn.readObject(); - } - catch (IOException e) - { - throw new ASN1ParsingException("malformed DER construction: " + e, e); - } - } -} diff --git a/src/org/bouncycastle/asn1/LazyEncodedSequence.java b/src/org/bouncycastle/asn1/LazyEncodedSequence.java deleted file mode 100644 index c7342ad..0000000 --- a/src/org/bouncycastle/asn1/LazyEncodedSequence.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.IOException; -import java.util.Enumeration; - -/** - * Note: this class is for processing DER/DL encoded sequences only. - */ -class LazyEncodedSequence - extends ASN1Sequence -{ - private byte[] encoded; - - LazyEncodedSequence( - byte[] encoded) - throws IOException - { - this.encoded = encoded; - } - - private void parse() - { - Enumeration en = new LazyConstructionEnumeration(encoded); - - while (en.hasMoreElements()) - { - seq.addElement(en.nextElement()); - } - - encoded = null; - } - - public synchronized ASN1Encodable getObjectAt(int index) - { - if (encoded != null) - { - parse(); - } - - return super.getObjectAt(index); - } - - public synchronized Enumeration getObjects() - { - if (encoded == null) - { - return super.getObjects(); - } - - return new LazyConstructionEnumeration(encoded); - } - - public synchronized int size() - { - if (encoded != null) - { - parse(); - } - - return super.size(); - } - - ASN1Primitive toDERObject() - { - if (encoded != null) - { - parse(); - } - - return super.toDERObject(); - } - - ASN1Primitive toDLObject() - { - if (encoded != null) - { - parse(); - } - - return super.toDLObject(); - } - - int encodedLength() - throws IOException - { - if (encoded != null) - { - return 1 + StreamUtil.calculateBodyLength(encoded.length) + encoded.length; - } - else - { - return super.toDLObject().encodedLength(); - } - } - - void encode( - ASN1OutputStream out) - throws IOException - { - if (encoded != null) - { - out.writeEncoded(BERTags.SEQUENCE | BERTags.CONSTRUCTED, encoded); - } - else - { - super.toDLObject().encode(out); - } - } -} diff --git a/src/org/bouncycastle/asn1/LimitedInputStream.java b/src/org/bouncycastle/asn1/LimitedInputStream.java deleted file mode 100644 index d94b0bd..0000000 --- a/src/org/bouncycastle/asn1/LimitedInputStream.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.InputStream; - -abstract class LimitedInputStream - extends InputStream -{ - protected final InputStream _in; - private int _limit; - - LimitedInputStream( - InputStream in, - int limit) - { - this._in = in; - this._limit = limit; - } - - int getRemaining() - { - // TODO: maybe one day this can become more accurate - return _limit; - } - - protected void setParentEofDetect(boolean on) - { - if (_in instanceof IndefiniteLengthInputStream) - { - ((IndefiniteLengthInputStream)_in).setEofOn00(on); - } - } -} diff --git a/src/org/bouncycastle/asn1/OIDTokenizer.java b/src/org/bouncycastle/asn1/OIDTokenizer.java deleted file mode 100644 index 5467944..0000000 --- a/src/org/bouncycastle/asn1/OIDTokenizer.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.asn1; - -/** - * class for breaking up an OID into it's component tokens, ala - * java.util.StringTokenizer. We need this class as some of the - * lightweight Java environment don't support classes like - * StringTokenizer. - */ -public class OIDTokenizer -{ - private String oid; - private int index; - - public OIDTokenizer( - String oid) - { - this.oid = oid; - this.index = 0; - } - - public boolean hasMoreTokens() - { - return (index != -1); - } - - public String nextToken() - { - if (index == -1) - { - return null; - } - - String token; - int end = oid.indexOf('.', index); - - if (end == -1) - { - token = oid.substring(index); - index = -1; - return token; - } - - token = oid.substring(index, end); - - index = end + 1; - return token; - } -} diff --git a/src/org/bouncycastle/asn1/StreamUtil.java b/src/org/bouncycastle/asn1/StreamUtil.java deleted file mode 100644 index 67e3c20..0000000 --- a/src/org/bouncycastle/asn1/StreamUtil.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.bouncycastle.asn1; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -class StreamUtil -{ - /** - * Find out possible longest length... - * - * @param in input stream of interest - * @return length calculation or MAX_VALUE. - */ - static int findLimit(InputStream in) - { - if (in instanceof LimitedInputStream) - { - return ((LimitedInputStream)in).getRemaining(); - } - else if (in instanceof ASN1InputStream) - { - return ((ASN1InputStream)in).getLimit(); - } - else if (in instanceof ByteArrayInputStream) - { - return ((ByteArrayInputStream)in).available(); - } - - return Integer.MAX_VALUE; - } - - static int calculateBodyLength( - int length) - { - int count = 1; - - if (length > 127) - { - int size = 1; - int val = length; - - while ((val >>>= 8) != 0) - { - size++; - } - - for (int i = (size - 1) * 8; i >= 0; i -= 8) - { - count++; - } - } - - return count; - } - - static int calculateTagLength(int tagNo) - throws IOException - { - int length = 1; - - if (tagNo >= 31) - { - if (tagNo < 128) - { - length++; - } - else - { - byte[] stack = new byte[5]; - int pos = stack.length; - - stack[--pos] = (byte)(tagNo & 0x7F); - - do - { - tagNo >>= 7; - stack[--pos] = (byte)(tagNo & 0x7F | 0x80); - } - while (tagNo > 127); - - length += stack.length - pos; - } - } - - return length; - } -} diff --git a/src/org/bouncycastle/asn1/package.html b/src/org/bouncycastle/asn1/package.html deleted file mode 100644 index 1ac16a5..0000000 --- a/src/org/bouncycastle/asn1/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -A library for parsing and writing ASN.1 objects. Support is provided for DER and BER encoding. - - diff --git a/src/org/bouncycastle/asn1/pkcs/Attribute.java b/src/org/bouncycastle/asn1/pkcs/Attribute.java deleted file mode 100644 index 6374c98..0000000 --- a/src/org/bouncycastle/asn1/pkcs/Attribute.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.DERSequence; - -public class Attribute - extends ASN1Object -{ - private ASN1ObjectIdentifier attrType; - private ASN1Set attrValues; - - /** - * return an Attribute object from the given object. - * - * @param o the object we want converted. - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static Attribute getInstance( - Object o) - { - if (o == null || o instanceof Attribute) - { - return (Attribute)o; - } - - if (o instanceof ASN1Sequence) - { - return new Attribute((ASN1Sequence)o); - } - - throw new IllegalArgumentException("unknown object in factory: " + o.getClass().getName()); - } - - public Attribute( - ASN1Sequence seq) - { - attrType = (ASN1ObjectIdentifier)seq.getObjectAt(0); - attrValues = (ASN1Set)seq.getObjectAt(1); - } - - public Attribute( - ASN1ObjectIdentifier attrType, - ASN1Set attrValues) - { - this.attrType = attrType; - this.attrValues = attrValues; - } - - public ASN1ObjectIdentifier getAttrType() - { - return attrType; - } - - public ASN1Set getAttrValues() - { - return attrValues; - } - - public ASN1Encodable[] getAttributeValues() - { - return attrValues.toArray(); - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *

        -     * Attribute ::= SEQUENCE {
        -     *     attrType OBJECT IDENTIFIER,
        -     *     attrValues SET OF AttributeValue
        -     * }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(attrType); - v.add(attrValues); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java b/src/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java deleted file mode 100644 index ea4779b..0000000 --- a/src/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.BERSequence; -import org.bouncycastle.asn1.DLSequence; - -public class AuthenticatedSafe - extends ASN1Object -{ - private ContentInfo[] info; - private boolean isBer = true; - - private AuthenticatedSafe( - ASN1Sequence seq) - { - info = new ContentInfo[seq.size()]; - - for (int i = 0; i != info.length; i++) - { - info[i] = ContentInfo.getInstance(seq.getObjectAt(i)); - } - - isBer = seq instanceof BERSequence; - } - - public static AuthenticatedSafe getInstance( - Object o) - { - if (o instanceof AuthenticatedSafe) - { - return (AuthenticatedSafe)o; - } - - if (o != null) - { - return new AuthenticatedSafe(ASN1Sequence.getInstance(o)); - } - - return null; - } - - public AuthenticatedSafe( - ContentInfo[] info) - { - this.info = info; - } - - public ContentInfo[] getContentInfo() - { - return info; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - for (int i = 0; i != info.length; i++) - { - v.add(info[i]); - } - - if (isBer) - { - return new BERSequence(v); - } - else - { - return new DLSequence(v); - } - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/CRLBag.java b/src/org/bouncycastle/asn1/pkcs/CRLBag.java deleted file mode 100644 index b91c1a5..0000000 --- a/src/org/bouncycastle/asn1/pkcs/CRLBag.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -public class CRLBag - extends ASN1Object -{ - private ASN1ObjectIdentifier crlId; - private ASN1Encodable crlValue; - - private CRLBag( - ASN1Sequence seq) - { - this.crlId = (ASN1ObjectIdentifier)seq.getObjectAt(0); - this.crlValue = ((DERTaggedObject)seq.getObjectAt(1)).getObject(); - } - - public static CRLBag getInstance(Object o) - { - if (o instanceof CRLBag) - { - return (CRLBag)o; - } - else if (o != null) - { - return new CRLBag(ASN1Sequence.getInstance(o)); - } - - return null; - } - - public CRLBag( - ASN1ObjectIdentifier crlId, - ASN1Encodable crlValue) - { - this.crlId = crlId; - this.crlValue = crlValue; - } - - public ASN1ObjectIdentifier getcrlId() - { - return crlId; - } - - public ASN1Encodable getCRLValue() - { - return crlValue; - } - - /** - *
        -     CRLBag ::= SEQUENCE {
        -     crlId  BAG-TYPE.&id ({CRLTypes}),
        -     crlValue  [0] EXPLICIT BAG-TYPE.&Type ({CRLTypes}{@crlId})
        -     }
        -
        -     x509CRL BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}
        -     -- DER-encoded X.509 CRL stored in OCTET STRING
        -
        -     CRLTypes BAG-TYPE ::= {
        -     x509CRL,
        -     ... -- For future extensions
        -     }
        -       
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(crlId); - v.add(new DERTaggedObject(0, crlValue)); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/CertBag.java b/src/org/bouncycastle/asn1/pkcs/CertBag.java deleted file mode 100644 index 4a73028..0000000 --- a/src/org/bouncycastle/asn1/pkcs/CertBag.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -public class CertBag - extends ASN1Object -{ - private ASN1ObjectIdentifier certId; - private ASN1Encodable certValue; - - private CertBag( - ASN1Sequence seq) - { - this.certId = (ASN1ObjectIdentifier)seq.getObjectAt(0); - this.certValue = ((DERTaggedObject)seq.getObjectAt(1)).getObject(); - } - - public static CertBag getInstance(Object o) - { - if (o instanceof CertBag) - { - return (CertBag)o; - } - else if (o != null) - { - return new CertBag(ASN1Sequence.getInstance(o)); - } - - return null; - } - - public CertBag( - ASN1ObjectIdentifier certId, - ASN1Encodable certValue) - { - this.certId = certId; - this.certValue = certValue; - } - - public ASN1ObjectIdentifier getCertId() - { - return certId; - } - - public ASN1Encodable getCertValue() - { - return certValue; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(certId); - v.add(new DERTaggedObject(0, certValue)); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/CertificationRequest.java b/src/org/bouncycastle/asn1/pkcs/CertificationRequest.java deleted file mode 100644 index 987d4eb..0000000 --- a/src/org/bouncycastle/asn1/pkcs/CertificationRequest.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -/** - * PKCS10 Certification request object. - *
        - * CertificationRequest ::= SEQUENCE {
        - *   certificationRequestInfo  CertificationRequestInfo,
        - *   signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
        - *   signature                 BIT STRING
        - * }
        - * 
        - */ -public class CertificationRequest - extends ASN1Object -{ - protected CertificationRequestInfo reqInfo = null; - protected AlgorithmIdentifier sigAlgId = null; - protected DERBitString sigBits = null; - - public static CertificationRequest getInstance(Object o) - { - if (o instanceof CertificationRequest) - { - return (CertificationRequest)o; - } - - if (o != null) - { - return new CertificationRequest(ASN1Sequence.getInstance(o)); - } - - return null; - } - - protected CertificationRequest() - { - } - - public CertificationRequest( - CertificationRequestInfo requestInfo, - AlgorithmIdentifier algorithm, - DERBitString signature) - { - this.reqInfo = requestInfo; - this.sigAlgId = algorithm; - this.sigBits = signature; - } - - public CertificationRequest( - ASN1Sequence seq) - { - reqInfo = CertificationRequestInfo.getInstance(seq.getObjectAt(0)); - sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); - sigBits = (DERBitString)seq.getObjectAt(2); - } - - public CertificationRequestInfo getCertificationRequestInfo() - { - return reqInfo; - } - - public AlgorithmIdentifier getSignatureAlgorithm() - { - return sigAlgId; - } - - public DERBitString getSignature() - { - return sigBits; - } - - public ASN1Primitive toASN1Primitive() - { - // Construct the CertificateRequest - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(reqInfo); - v.add(sigAlgId); - v.add(sigBits); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java b/src/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java deleted file mode 100644 index aac2bb7..0000000 --- a/src/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java +++ /dev/null @@ -1,148 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.asn1.x509.X509Name; - -/** - * PKCS10 CertificationRequestInfo object. - *
        - *  CertificationRequestInfo ::= SEQUENCE {
        - *   version             INTEGER { v1(0) } (v1,...),
        - *   subject             Name,
        - *   subjectPKInfo   SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
        - *   attributes          [0] Attributes{{ CRIAttributes }}
        - *  }
        - *
        - *  Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}
        - *
        - *  Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {
        - *    type    ATTRIBUTE.&id({IOSet}),
        - *    values  SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
        - *  }
        - * 
        - */ -public class CertificationRequestInfo - extends ASN1Object -{ - ASN1Integer version = new ASN1Integer(0); - X500Name subject; - SubjectPublicKeyInfo subjectPKInfo; - ASN1Set attributes = null; - - public static CertificationRequestInfo getInstance( - Object obj) - { - if (obj instanceof CertificationRequestInfo) - { - return (CertificationRequestInfo)obj; - } - else if (obj != null) - { - return new CertificationRequestInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public CertificationRequestInfo( - X500Name subject, - SubjectPublicKeyInfo pkInfo, - ASN1Set attributes) - { - this.subject = subject; - this.subjectPKInfo = pkInfo; - this.attributes = attributes; - - if ((subject == null) || (version == null) || (subjectPKInfo == null)) - { - throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); - } - } - - /** - * @deprecated use X500Name method. - */ - public CertificationRequestInfo( - X509Name subject, - SubjectPublicKeyInfo pkInfo, - ASN1Set attributes) - { - this.subject = X500Name.getInstance(subject.toASN1Primitive()); - this.subjectPKInfo = pkInfo; - this.attributes = attributes; - - if ((subject == null) || (version == null) || (subjectPKInfo == null)) - { - throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); - } - } - - public CertificationRequestInfo( - ASN1Sequence seq) - { - version = (ASN1Integer)seq.getObjectAt(0); - - subject = X500Name.getInstance(seq.getObjectAt(1)); - subjectPKInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(2)); - - // - // some CertificationRequestInfo objects seem to treat this field - // as optional. - // - if (seq.size() > 3) - { - DERTaggedObject tagobj = (DERTaggedObject)seq.getObjectAt(3); - attributes = ASN1Set.getInstance(tagobj, false); - } - - if ((subject == null) || (version == null) || (subjectPKInfo == null)) - { - throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); - } - } - - public ASN1Integer getVersion() - { - return version; - } - - public X500Name getSubject() - { - return subject; - } - - public SubjectPublicKeyInfo getSubjectPublicKeyInfo() - { - return subjectPKInfo; - } - - public ASN1Set getAttributes() - { - return attributes; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(version); - v.add(subject); - v.add(subjectPKInfo); - - if (attributes != null) - { - v.add(new DERTaggedObject(false, 0, attributes)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/ContentInfo.java b/src/org/bouncycastle/asn1/pkcs/ContentInfo.java deleted file mode 100644 index 997389d..0000000 --- a/src/org/bouncycastle/asn1/pkcs/ContentInfo.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.BERSequence; -import org.bouncycastle.asn1.BERTaggedObject; -import org.bouncycastle.asn1.DLSequence; - -public class ContentInfo - extends ASN1Object - //implements PKCSObjectIdentifiers -{ - private ASN1ObjectIdentifier contentType; - private ASN1Encodable content; - private boolean isBer = true; - - public static ContentInfo getInstance( - Object obj) - { - if (obj instanceof ContentInfo) - { - return (ContentInfo)obj; - } - - if (obj != null) - { - return new ContentInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private ContentInfo( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - contentType = (ASN1ObjectIdentifier)e.nextElement(); - - if (e.hasMoreElements()) - { - content = ((ASN1TaggedObject)e.nextElement()).getObject(); - } - - isBer = seq instanceof BERSequence; - } - - public ContentInfo( - ASN1ObjectIdentifier contentType, - ASN1Encodable content) - { - this.contentType = contentType; - this.content = content; - } - - public ASN1ObjectIdentifier getContentType() - { - return contentType; - } - - public ASN1Encodable getContent() - { - return content; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * ContentInfo ::= SEQUENCE {
        -     *          contentType ContentType,
        -     *          content
        -     *          [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(contentType); - - if (content != null) - { - v.add(new BERTaggedObject(true, 0, content)); - } - - if (isBer) - { - return new BERSequence(v); - } - else - { - return new DLSequence(v); - } - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/DHParameter.java b/src/org/bouncycastle/asn1/pkcs/DHParameter.java deleted file mode 100644 index 95897fd..0000000 --- a/src/org/bouncycastle/asn1/pkcs/DHParameter.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -public class DHParameter - extends ASN1Object -{ - ASN1Integer p, g, l; - - public DHParameter( - BigInteger p, - BigInteger g, - int l) - { - this.p = new ASN1Integer(p); - this.g = new ASN1Integer(g); - - if (l != 0) - { - this.l = new ASN1Integer(l); - } - else - { - this.l = null; - } - } - - public static DHParameter getInstance( - Object obj) - { - if (obj instanceof DHParameter) - { - return (DHParameter)obj; - } - - if (obj != null) - { - return new DHParameter(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private DHParameter( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - p = ASN1Integer.getInstance(e.nextElement()); - g = ASN1Integer.getInstance(e.nextElement()); - - if (e.hasMoreElements()) - { - l = (ASN1Integer)e.nextElement(); - } - else - { - l = null; - } - } - - public BigInteger getP() - { - return p.getPositiveValue(); - } - - public BigInteger getG() - { - return g.getPositiveValue(); - } - - public BigInteger getL() - { - if (l == null) - { - return null; - } - - return l.getPositiveValue(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(p); - v.add(g); - - if (this.getL() != null) - { - v.add(l); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/EncryptedData.java b/src/org/bouncycastle/asn1/pkcs/EncryptedData.java deleted file mode 100644 index e0f5efd..0000000 --- a/src/org/bouncycastle/asn1/pkcs/EncryptedData.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.BERSequence; -import org.bouncycastle.asn1.BERTaggedObject; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -/** - * The EncryptedData object. - *
        - *      EncryptedData ::= SEQUENCE {
        - *           version Version,
        - *           encryptedContentInfo EncryptedContentInfo
        - *      }
        - *
        - *
        - *      EncryptedContentInfo ::= SEQUENCE {
        - *          contentType ContentType,
        - *          contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
        - *          encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
        - *    }
        - *
        - *    EncryptedContent ::= OCTET STRING
        - * 
        - */ -public class EncryptedData - extends ASN1Object -{ - ASN1Sequence data; - ASN1ObjectIdentifier bagId; - ASN1Primitive bagValue; - - public static EncryptedData getInstance( - Object obj) - { - if (obj instanceof EncryptedData) - { - return (EncryptedData)obj; - } - - if (obj != null) - { - return new EncryptedData(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private EncryptedData( - ASN1Sequence seq) - { - int version = ((ASN1Integer)seq.getObjectAt(0)).getValue().intValue(); - - if (version != 0) - { - throw new IllegalArgumentException("sequence not version 0"); - } - - this.data = ASN1Sequence.getInstance(seq.getObjectAt(1)); - } - - public EncryptedData( - ASN1ObjectIdentifier contentType, - AlgorithmIdentifier encryptionAlgorithm, - ASN1Encodable content) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(contentType); - v.add(encryptionAlgorithm.toASN1Primitive()); - v.add(new BERTaggedObject(false, 0, content)); - - data = new BERSequence(v); - } - - public ASN1ObjectIdentifier getContentType() - { - return ASN1ObjectIdentifier.getInstance(data.getObjectAt(0)); - } - - public AlgorithmIdentifier getEncryptionAlgorithm() - { - return AlgorithmIdentifier.getInstance(data.getObjectAt(1)); - } - - public ASN1OctetString getContent() - { - if (data.size() == 3) - { - ASN1TaggedObject o = ASN1TaggedObject.getInstance(data.getObjectAt(2)); - - return ASN1OctetString.getInstance(o, false); - } - - return null; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(0)); - v.add(data); - - return new BERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java b/src/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java deleted file mode 100644 index 467cb57..0000000 --- a/src/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -public class EncryptedPrivateKeyInfo - extends ASN1Object -{ - private AlgorithmIdentifier algId; - private ASN1OctetString data; - - private EncryptedPrivateKeyInfo( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - algId = AlgorithmIdentifier.getInstance(e.nextElement()); - data = ASN1OctetString.getInstance(e.nextElement()); - } - - public EncryptedPrivateKeyInfo( - AlgorithmIdentifier algId, - byte[] encoding) - { - this.algId = algId; - this.data = new DEROctetString(encoding); - } - - public static EncryptedPrivateKeyInfo getInstance( - Object obj) - { - if (obj instanceof EncryptedData) - { - return (EncryptedPrivateKeyInfo)obj; - } - else if (obj != null) - { - return new EncryptedPrivateKeyInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public AlgorithmIdentifier getEncryptionAlgorithm() - { - return algId; - } - - public byte[] getEncryptedData() - { - return data.getOctets(); - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * EncryptedPrivateKeyInfo ::= SEQUENCE {
        -     *      encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
        -     *      encryptedData EncryptedData
        -     * }
        -     *
        -     * EncryptedData ::= OCTET STRING
        -     *
        -     * KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
        -     *          ... -- For local profiles
        -     * }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(algId); - v.add(data); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/EncryptionScheme.java b/src/org/bouncycastle/asn1/pkcs/EncryptionScheme.java deleted file mode 100644 index 613c3f4..0000000 --- a/src/org/bouncycastle/asn1/pkcs/EncryptionScheme.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -public class EncryptionScheme - extends AlgorithmIdentifier -{ - public EncryptionScheme( - ASN1ObjectIdentifier objectId, - ASN1Encodable parameters) - { - super(objectId, parameters); - } - - EncryptionScheme( - ASN1Sequence seq) - { - this((ASN1ObjectIdentifier)seq.getObjectAt(0), seq.getObjectAt(1)); - } - - public static final AlgorithmIdentifier getInstance(Object obj) - { - if (obj instanceof EncryptionScheme) - { - return (EncryptionScheme)obj; - } - else if (obj instanceof ASN1Sequence) - { - return new EncryptionScheme((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public ASN1Primitive getObject() - { - return (ASN1Primitive)getParameters(); - } - - public ASN1Primitive getASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(getObjectId()); - v.add(getParameters()); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java b/src/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java deleted file mode 100644 index 3914a24..0000000 --- a/src/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.asn1.x509.X509Name; - -public class IssuerAndSerialNumber - extends ASN1Object -{ - X500Name name; - ASN1Integer certSerialNumber; - - public static IssuerAndSerialNumber getInstance( - Object obj) - { - if (obj instanceof IssuerAndSerialNumber) - { - return (IssuerAndSerialNumber)obj; - } - else if (obj instanceof ASN1Sequence) - { - return new IssuerAndSerialNumber((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public IssuerAndSerialNumber( - ASN1Sequence seq) - { - this.name = X500Name.getInstance(seq.getObjectAt(0)); - this.certSerialNumber = (ASN1Integer)seq.getObjectAt(1); - } - - public IssuerAndSerialNumber( - X509Name name, - BigInteger certSerialNumber) - { - this.name = X500Name.getInstance(name.toASN1Primitive()); - this.certSerialNumber = new ASN1Integer(certSerialNumber); - } - - public IssuerAndSerialNumber( - X509Name name, - ASN1Integer certSerialNumber) - { - this.name = X500Name.getInstance(name.toASN1Primitive()); - this.certSerialNumber = certSerialNumber; - } - - public IssuerAndSerialNumber( - X500Name name, - BigInteger certSerialNumber) - { - this.name = name; - this.certSerialNumber = new ASN1Integer(certSerialNumber); - } - - public X500Name getName() - { - return name; - } - - public ASN1Integer getCertificateSerialNumber() - { - return certSerialNumber; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(name); - v.add(certSerialNumber); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java b/src/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java deleted file mode 100644 index fef4f07..0000000 --- a/src/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -public class KeyDerivationFunc - extends AlgorithmIdentifier -{ - KeyDerivationFunc( - ASN1Sequence seq) - { - super(seq); - } - - public KeyDerivationFunc( - ASN1ObjectIdentifier id, - ASN1Encodable params) - { - super(id, params); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/MacData.java b/src/org/bouncycastle/asn1/pkcs/MacData.java deleted file mode 100644 index 515db28..0000000 --- a/src/org/bouncycastle/asn1/pkcs/MacData.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x509.DigestInfo; - -public class MacData - extends ASN1Object -{ - private static final BigInteger ONE = BigInteger.valueOf(1); - - DigestInfo digInfo; - byte[] salt; - BigInteger iterationCount; - - public static MacData getInstance( - Object obj) - { - if (obj instanceof MacData) - { - return (MacData)obj; - } - else if (obj != null) - { - return new MacData(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private MacData( - ASN1Sequence seq) - { - this.digInfo = DigestInfo.getInstance(seq.getObjectAt(0)); - - this.salt = ((ASN1OctetString)seq.getObjectAt(1)).getOctets(); - - if (seq.size() == 3) - { - this.iterationCount = ((ASN1Integer)seq.getObjectAt(2)).getValue(); - } - else - { - this.iterationCount = ONE; - } - } - - public MacData( - DigestInfo digInfo, - byte[] salt, - int iterationCount) - { - this.digInfo = digInfo; - this.salt = salt; - this.iterationCount = BigInteger.valueOf(iterationCount); - } - - public DigestInfo getMac() - { - return digInfo; - } - - public byte[] getSalt() - { - return salt; - } - - public BigInteger getIterationCount() - { - return iterationCount; - } - - /** - *
        -     * MacData ::= SEQUENCE {
        -     *     mac      DigestInfo,
        -     *     macSalt  OCTET STRING,
        -     *     iterations INTEGER DEFAULT 1
        -     *     -- Note: The default is for historic reasons and its use is deprecated. A
        -     *     -- higher value, like 1024 is recommended.
        -     * 
        - * @return the basic ASN1Primitive construction. - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(digInfo); - v.add(new DEROctetString(salt)); - - if (!iterationCount.equals(ONE)) - { - v.add(new ASN1Integer(iterationCount)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/PBEParameter.java b/src/org/bouncycastle/asn1/pkcs/PBEParameter.java deleted file mode 100644 index 4e22d79..0000000 --- a/src/org/bouncycastle/asn1/pkcs/PBEParameter.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; - -public class PBEParameter - extends ASN1Object -{ - ASN1Integer iterations; - ASN1OctetString salt; - - public PBEParameter( - byte[] salt, - int iterations) - { - if (salt.length != 8) - { - throw new IllegalArgumentException("salt length must be 8"); - } - this.salt = new DEROctetString(salt); - this.iterations = new ASN1Integer(iterations); - } - - private PBEParameter( - ASN1Sequence seq) - { - salt = (ASN1OctetString)seq.getObjectAt(0); - iterations = (ASN1Integer)seq.getObjectAt(1); - } - - public static PBEParameter getInstance( - Object obj) - { - if (obj instanceof PBEParameter) - { - return (PBEParameter)obj; - } - else if (obj != null) - { - return new PBEParameter(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public BigInteger getIterationCount() - { - return iterations.getValue(); - } - - public byte[] getSalt() - { - return salt.getOctets(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(salt); - v.add(iterations); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java b/src/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java deleted file mode 100644 index 5e17b19..0000000 --- a/src/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -/** - * @deprecated - use AlgorithmIdentifier and PBES2Parameters - */ -public class PBES2Algorithms - extends AlgorithmIdentifier -{ - private ASN1ObjectIdentifier objectId; - private KeyDerivationFunc func; - private EncryptionScheme scheme; - - public PBES2Algorithms( - ASN1Sequence obj) - { - super(obj); - - Enumeration e = obj.getObjects(); - - objectId = (ASN1ObjectIdentifier)e.nextElement(); - - ASN1Sequence seq = (ASN1Sequence)e.nextElement(); - - e = seq.getObjects(); - - ASN1Sequence funcSeq = (ASN1Sequence)e.nextElement(); - - if (funcSeq.getObjectAt(0).equals(PKCSObjectIdentifiers.id_PBKDF2)) - { - func = new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, PBKDF2Params.getInstance(funcSeq.getObjectAt(1))); - } - else - { - func = new KeyDerivationFunc(funcSeq); - } - - scheme = new EncryptionScheme((ASN1Sequence)e.nextElement()); - } - - public ASN1ObjectIdentifier getObjectId() - { - return objectId; - } - - public KeyDerivationFunc getKeyDerivationFunc() - { - return func; - } - - public EncryptionScheme getEncryptionScheme() - { - return scheme; - } - - public ASN1Primitive getASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - ASN1EncodableVector subV = new ASN1EncodableVector(); - - v.add(objectId); - - subV.add(func); - subV.add(scheme); - v.add(new DERSequence(subV)); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/PBES2Parameters.java b/src/org/bouncycastle/asn1/pkcs/PBES2Parameters.java deleted file mode 100644 index b3b008f..0000000 --- a/src/org/bouncycastle/asn1/pkcs/PBES2Parameters.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -public class PBES2Parameters - extends ASN1Object -{ - private KeyDerivationFunc func; - private EncryptionScheme scheme; - - public static PBES2Parameters getInstance( - Object obj) - { - if (obj== null || obj instanceof PBES2Parameters) - { - return (PBES2Parameters)obj; - } - - if (obj instanceof ASN1Sequence) - { - return new PBES2Parameters((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public PBES2Parameters( - ASN1Sequence obj) - { - Enumeration e = obj.getObjects(); - ASN1Sequence funcSeq = ASN1Sequence.getInstance(((ASN1Encodable)e.nextElement()).toASN1Primitive()); - - if (funcSeq.getObjectAt(0).equals(PKCSObjectIdentifiers.id_PBKDF2)) - { - func = new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, PBKDF2Params.getInstance(funcSeq.getObjectAt(1))); - } - else - { - func = new KeyDerivationFunc(funcSeq); - } - - scheme = (EncryptionScheme)EncryptionScheme.getInstance(e.nextElement()); - } - - public KeyDerivationFunc getKeyDerivationFunc() - { - return func; - } - - public EncryptionScheme getEncryptionScheme() - { - return scheme; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(func); - v.add(scheme); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/PBKDF2Params.java b/src/org/bouncycastle/asn1/pkcs/PBKDF2Params.java deleted file mode 100644 index 01225e4..0000000 --- a/src/org/bouncycastle/asn1/pkcs/PBKDF2Params.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; - -public class PBKDF2Params - extends ASN1Object -{ - private ASN1OctetString octStr; - private ASN1Integer iterationCount; - private ASN1Integer keyLength; - - public static PBKDF2Params getInstance( - Object obj) - { - if (obj instanceof PBKDF2Params) - { - return (PBKDF2Params)obj; - } - - if (obj != null) - { - return new PBKDF2Params(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public PBKDF2Params( - byte[] salt, - int iterationCount) - { - this.octStr = new DEROctetString(salt); - this.iterationCount = new ASN1Integer(iterationCount); - } - - public PBKDF2Params( - byte[] salt, - int iterationCount, - int keyLength) - { - this(salt, iterationCount); - - this.keyLength = new ASN1Integer(keyLength); - } - - private PBKDF2Params( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - octStr = (ASN1OctetString)e.nextElement(); - iterationCount = (ASN1Integer)e.nextElement(); - - if (e.hasMoreElements()) - { - keyLength = (ASN1Integer)e.nextElement(); - } - else - { - keyLength = null; - } - } - - public byte[] getSalt() - { - return octStr.getOctets(); - } - - public BigInteger getIterationCount() - { - return iterationCount.getValue(); - } - - public BigInteger getKeyLength() - { - if (keyLength != null) - { - return keyLength.getValue(); - } - - return null; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(octStr); - v.add(iterationCount); - - if (keyLength != null) - { - v.add(keyLength); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java b/src/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java deleted file mode 100644 index fc1538d..0000000 --- a/src/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; - -public class PKCS12PBEParams - extends ASN1Object -{ - ASN1Integer iterations; - ASN1OctetString iv; - - public PKCS12PBEParams( - byte[] salt, - int iterations) - { - this.iv = new DEROctetString(salt); - this.iterations = new ASN1Integer(iterations); - } - - private PKCS12PBEParams( - ASN1Sequence seq) - { - iv = (ASN1OctetString)seq.getObjectAt(0); - iterations = ASN1Integer.getInstance(seq.getObjectAt(1)); - } - - public static PKCS12PBEParams getInstance( - Object obj) - { - if (obj instanceof PKCS12PBEParams) - { - return (PKCS12PBEParams)obj; - } - else if (obj != null) - { - return new PKCS12PBEParams(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public BigInteger getIterations() - { - return iterations.getValue(); - } - - public byte[] getIV() - { - return iv.getOctets(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(iv); - v.add(iterations); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java b/src/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java deleted file mode 100644 index 6f098f2..0000000 --- a/src/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java +++ /dev/null @@ -1,257 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -public class PKCSObjectIdentifiers -{ - // - // pkcs-1 OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } - // - static final ASN1ObjectIdentifier pkcs_1 = new ASN1ObjectIdentifier("1.2.840.113549.1.1"); - public static final ASN1ObjectIdentifier rsaEncryption = pkcs_1.branch("1"); - static final ASN1ObjectIdentifier md2WithRSAEncryption = pkcs_1.branch("2"); - static final ASN1ObjectIdentifier md4WithRSAEncryption = pkcs_1.branch("3"); - static final ASN1ObjectIdentifier md5WithRSAEncryption = pkcs_1.branch("4"); - static final ASN1ObjectIdentifier sha1WithRSAEncryption = pkcs_1.branch("5"); - static final ASN1ObjectIdentifier srsaOAEPEncryptionSET = pkcs_1.branch("6"); - static final ASN1ObjectIdentifier id_RSAES_OAEP = pkcs_1.branch("7"); - static final ASN1ObjectIdentifier id_mgf1 = pkcs_1.branch("8"); - static final ASN1ObjectIdentifier id_pSpecified = pkcs_1.branch("9"); - static final ASN1ObjectIdentifier id_RSASSA_PSS = pkcs_1.branch("10"); - static final ASN1ObjectIdentifier sha256WithRSAEncryption = pkcs_1.branch("11"); - static final ASN1ObjectIdentifier sha384WithRSAEncryption = pkcs_1.branch("12"); - static final ASN1ObjectIdentifier sha512WithRSAEncryption = pkcs_1.branch("13"); - static final ASN1ObjectIdentifier sha224WithRSAEncryption = pkcs_1.branch("14"); - - // - // pkcs-3 OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 3 } - // - static final ASN1ObjectIdentifier pkcs_3 = new ASN1ObjectIdentifier("1.2.840.113549.1.3"); - public static final ASN1ObjectIdentifier dhKeyAgreement = pkcs_3.branch("1"); - - // - // pkcs-5 OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 5 } - // - static final ASN1ObjectIdentifier pkcs_5 = new ASN1ObjectIdentifier("1.2.840.113549.1.5"); - - static final ASN1ObjectIdentifier pbeWithMD2AndDES_CBC = pkcs_5.branch("1"); - static final ASN1ObjectIdentifier pbeWithMD2AndRC2_CBC = pkcs_5.branch("4"); - static final ASN1ObjectIdentifier pbeWithMD5AndDES_CBC = pkcs_5.branch("3"); - static final ASN1ObjectIdentifier pbeWithMD5AndRC2_CBC = pkcs_5.branch("6"); - static final ASN1ObjectIdentifier pbeWithSHA1AndDES_CBC = pkcs_5.branch("10"); - static final ASN1ObjectIdentifier pbeWithSHA1AndRC2_CBC = pkcs_5.branch("11"); - - static final ASN1ObjectIdentifier id_PBES2 = pkcs_5.branch("13"); - - static final ASN1ObjectIdentifier id_PBKDF2 = pkcs_5.branch("12"); - - // - // encryptionAlgorithm OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) rsadsi(113549) 3 } - // - static final ASN1ObjectIdentifier encryptionAlgorithm = new ASN1ObjectIdentifier("1.2.840.113549.3"); - - public static final ASN1ObjectIdentifier des_EDE3_CBC = encryptionAlgorithm.branch("7"); - public static final ASN1ObjectIdentifier RC2_CBC = encryptionAlgorithm.branch("2"); - - // - // object identifiers for digests - // - static final ASN1ObjectIdentifier digestAlgorithm = new ASN1ObjectIdentifier("1.2.840.113549.2"); - // - // md2 OBJECT IDENTIFIER ::= - // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 2} - // - public static final ASN1ObjectIdentifier md2 = digestAlgorithm.branch("2"); - - // - // md4 OBJECT IDENTIFIER ::= - // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 4} - // - public static final ASN1ObjectIdentifier md4 = digestAlgorithm.branch("4"); - - // - // md5 OBJECT IDENTIFIER ::= - // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5} - // - public static final ASN1ObjectIdentifier md5 = digestAlgorithm.branch("5"); - - static final ASN1ObjectIdentifier id_hmacWithSHA1 = digestAlgorithm.branch("7"); - static final ASN1ObjectIdentifier id_hmacWithSHA224 = digestAlgorithm.branch("8"); - static final ASN1ObjectIdentifier id_hmacWithSHA256 = digestAlgorithm.branch("9"); - static final ASN1ObjectIdentifier id_hmacWithSHA384 = digestAlgorithm.branch("10"); - static final ASN1ObjectIdentifier id_hmacWithSHA512 = digestAlgorithm.branch("11"); - - // - // pkcs-7 OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 7 } - // - public static final String pkcs_7 = "1.2.840.113549.1.7"; - public static final ASN1ObjectIdentifier data = new ASN1ObjectIdentifier(pkcs_7 + ".1"); - public static final ASN1ObjectIdentifier signedData = new ASN1ObjectIdentifier(pkcs_7 + ".2"); - public static final ASN1ObjectIdentifier envelopedData = new ASN1ObjectIdentifier(pkcs_7 + ".3"); - public static final ASN1ObjectIdentifier signedAndEnvelopedData = new ASN1ObjectIdentifier(pkcs_7 + ".4"); - public static final ASN1ObjectIdentifier digestedData = new ASN1ObjectIdentifier(pkcs_7 + ".5"); - public static final ASN1ObjectIdentifier encryptedData = new ASN1ObjectIdentifier(pkcs_7 + ".6"); - - // - // pkcs-9 OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } - // - static final ASN1ObjectIdentifier pkcs_9 = new ASN1ObjectIdentifier("1.2.840.113549.1.9"); - - public static final ASN1ObjectIdentifier pkcs_9_at_emailAddress = pkcs_9.branch("1"); - public static final ASN1ObjectIdentifier pkcs_9_at_unstructuredName = pkcs_9.branch("2"); - public static final ASN1ObjectIdentifier pkcs_9_at_contentType = pkcs_9.branch("3"); - public static final ASN1ObjectIdentifier pkcs_9_at_messageDigest = pkcs_9.branch("4"); - public static final ASN1ObjectIdentifier pkcs_9_at_signingTime = pkcs_9.branch("5"); - public static final ASN1ObjectIdentifier pkcs_9_at_counterSignature = pkcs_9.branch("6"); - public static final ASN1ObjectIdentifier pkcs_9_at_challengePassword = pkcs_9.branch("7"); - public static final ASN1ObjectIdentifier pkcs_9_at_unstructuredAddress = pkcs_9.branch("8"); - public static final ASN1ObjectIdentifier pkcs_9_at_extendedCertificateAttributes = pkcs_9.branch("9"); - - static final ASN1ObjectIdentifier pkcs_9_at_signingDescription = pkcs_9.branch("13"); - static final ASN1ObjectIdentifier pkcs_9_at_extensionRequest = pkcs_9.branch("14"); - public static final ASN1ObjectIdentifier pkcs_9_at_smimeCapabilities = pkcs_9.branch("15"); - - static final ASN1ObjectIdentifier pkcs_9_at_friendlyName = pkcs_9.branch("20"); - static final ASN1ObjectIdentifier pkcs_9_at_localKeyId = pkcs_9.branch("21"); - - /** @deprecated use x509Certificate instead */ - static final ASN1ObjectIdentifier x509certType = pkcs_9.branch("22.1"); - - static final ASN1ObjectIdentifier certTypes = pkcs_9.branch("22"); - static final ASN1ObjectIdentifier x509Certificate = certTypes.branch("1"); - static final ASN1ObjectIdentifier sdsiCertificate = certTypes.branch("2"); - - static final ASN1ObjectIdentifier crlTypes = pkcs_9.branch("23"); - static final ASN1ObjectIdentifier x509Crl = crlTypes.branch("1"); - - static final ASN1ObjectIdentifier id_alg_PWRI_KEK = pkcs_9.branch("16.3.9"); - - // - // SMIME capability sub oids. - // - public static final ASN1ObjectIdentifier preferSignedData = pkcs_9.branch("15.1"); - public static final ASN1ObjectIdentifier canNotDecryptAny = pkcs_9.branch("15.2"); - public static final ASN1ObjectIdentifier sMIMECapabilitiesVersions = pkcs_9.branch("15.3"); - - // - // id-ct OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) - // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1)} - // - public static final ASN1ObjectIdentifier id_ct = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.1"); - - public static final ASN1ObjectIdentifier id_ct_authData = id_ct.branch("2"); - public static final ASN1ObjectIdentifier id_ct_TSTInfo = id_ct.branch("4"); - public static final ASN1ObjectIdentifier id_ct_compressedData = id_ct.branch("9"); - public static final ASN1ObjectIdentifier id_ct_authEnvelopedData = id_ct.branch("23"); - public static final ASN1ObjectIdentifier id_ct_timestampedData = id_ct.branch("31"); - - // - // id-cti OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) - // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) cti(6)} - // - static final ASN1ObjectIdentifier id_cti = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.6"); - - public static final ASN1ObjectIdentifier id_cti_ets_proofOfOrigin = id_cti.branch("1"); - public static final ASN1ObjectIdentifier id_cti_ets_proofOfReceipt = id_cti.branch("2"); - public static final ASN1ObjectIdentifier id_cti_ets_proofOfDelivery = id_cti.branch("3"); - public static final ASN1ObjectIdentifier id_cti_ets_proofOfSender = id_cti.branch("4"); - public static final ASN1ObjectIdentifier id_cti_ets_proofOfApproval = id_cti.branch("5"); - public static final ASN1ObjectIdentifier id_cti_ets_proofOfCreation = id_cti.branch("6"); - - // - // id-aa OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) - // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) attributes(2)} - // - public static final ASN1ObjectIdentifier id_aa = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.2"); - - - static final ASN1ObjectIdentifier id_aa_receiptRequest = id_aa.branch("1"); - - public static final ASN1ObjectIdentifier id_aa_contentHint = id_aa.branch("4"); // See RFC 2634 - static final ASN1ObjectIdentifier id_aa_msgSigDigest = id_aa.branch("5"); - static final ASN1ObjectIdentifier id_aa_contentReference = id_aa.branch("10"); - /* - * id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} - * - */ - public static final ASN1ObjectIdentifier id_aa_encrypKeyPref = id_aa.branch("11"); - static final ASN1ObjectIdentifier id_aa_signingCertificate = id_aa.branch("12"); - static final ASN1ObjectIdentifier id_aa_signingCertificateV2 = id_aa.branch("47"); - - static final ASN1ObjectIdentifier id_aa_contentIdentifier = id_aa.branch("7"); // See RFC 2634 - - /* - * RFC 3126 - */ - static final ASN1ObjectIdentifier id_aa_signatureTimeStampToken = id_aa.branch("14"); - - public static final ASN1ObjectIdentifier id_aa_ets_sigPolicyId = id_aa.branch("15"); - public static final ASN1ObjectIdentifier id_aa_ets_commitmentType = id_aa.branch("16"); - public static final ASN1ObjectIdentifier id_aa_ets_signerLocation = id_aa.branch("17"); - public static final ASN1ObjectIdentifier id_aa_ets_signerAttr = id_aa.branch("18"); - public static final ASN1ObjectIdentifier id_aa_ets_otherSigCert = id_aa.branch("19"); - public static final ASN1ObjectIdentifier id_aa_ets_contentTimestamp = id_aa.branch("20"); - public static final ASN1ObjectIdentifier id_aa_ets_certificateRefs = id_aa.branch("21"); - public static final ASN1ObjectIdentifier id_aa_ets_revocationRefs = id_aa.branch("22"); - public static final ASN1ObjectIdentifier id_aa_ets_certValues = id_aa.branch("23"); - public static final ASN1ObjectIdentifier id_aa_ets_revocationValues = id_aa.branch("24"); - public static final ASN1ObjectIdentifier id_aa_ets_escTimeStamp = id_aa.branch("25"); - public static final ASN1ObjectIdentifier id_aa_ets_certCRLTimestamp = id_aa.branch("26"); - public static final ASN1ObjectIdentifier id_aa_ets_archiveTimestamp = id_aa.branch("27"); - - /** @deprecated use id_aa_ets_sigPolicyId instead */ - static final ASN1ObjectIdentifier id_aa_sigPolicyId = id_aa_ets_sigPolicyId; - /** @deprecated use id_aa_ets_commitmentType instead */ - static final ASN1ObjectIdentifier id_aa_commitmentType = id_aa_ets_commitmentType; - /** @deprecated use id_aa_ets_signerLocation instead */ - static final ASN1ObjectIdentifier id_aa_signerLocation = id_aa_ets_signerLocation; - /** @deprecated use id_aa_ets_otherSigCert instead */ - static final ASN1ObjectIdentifier id_aa_otherSigCert = id_aa_ets_otherSigCert; - - // - // id-spq OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) - // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-spq(5)} - // - static final String id_spq = "1.2.840.113549.1.9.16.5"; - - static final ASN1ObjectIdentifier id_spq_ets_uri = new ASN1ObjectIdentifier(id_spq + ".1"); - static final ASN1ObjectIdentifier id_spq_ets_unotice = new ASN1ObjectIdentifier(id_spq + ".2"); - - // - // pkcs-12 OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 12 } - // - static final ASN1ObjectIdentifier pkcs_12 = new ASN1ObjectIdentifier("1.2.840.113549.1.12"); - static final ASN1ObjectIdentifier bagtypes = pkcs_12.branch("10.1"); - - static final ASN1ObjectIdentifier keyBag = bagtypes.branch("1"); - static final ASN1ObjectIdentifier pkcs8ShroudedKeyBag = bagtypes.branch("2"); - static final ASN1ObjectIdentifier certBag = bagtypes.branch("3"); - static final ASN1ObjectIdentifier crlBag = bagtypes.branch("4"); - static final ASN1ObjectIdentifier secretBag = bagtypes.branch("5"); - static final ASN1ObjectIdentifier safeContentsBag = bagtypes.branch("6"); - - static final ASN1ObjectIdentifier pkcs_12PbeIds = pkcs_12.branch("1"); - - static final ASN1ObjectIdentifier pbeWithSHAAnd128BitRC4 = pkcs_12PbeIds.branch("1"); - static final ASN1ObjectIdentifier pbeWithSHAAnd40BitRC4 = pkcs_12PbeIds.branch("2"); - static final ASN1ObjectIdentifier pbeWithSHAAnd3_KeyTripleDES_CBC = pkcs_12PbeIds.branch("3"); - static final ASN1ObjectIdentifier pbeWithSHAAnd2_KeyTripleDES_CBC = pkcs_12PbeIds.branch("4"); - static final ASN1ObjectIdentifier pbeWithSHAAnd128BitRC2_CBC = pkcs_12PbeIds.branch("5"); - static final ASN1ObjectIdentifier pbeWithSHAAnd40BitRC2_CBC = pkcs_12PbeIds.branch("6"); - - /** - * @deprecated use pbeWithSHAAnd40BitRC2_CBC - */ - static final ASN1ObjectIdentifier pbewithSHAAnd40BitRC2_CBC = pkcs_12PbeIds.branch("6"); - - static final ASN1ObjectIdentifier id_alg_CMS3DESwrap = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.3.6"); - static final ASN1ObjectIdentifier id_alg_CMSRC2wrap = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.3.7"); -} - diff --git a/src/org/bouncycastle/asn1/pkcs/Pfx.java b/src/org/bouncycastle/asn1/pkcs/Pfx.java deleted file mode 100644 index 0339fcc..0000000 --- a/src/org/bouncycastle/asn1/pkcs/Pfx.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.BERSequence; - -/** - * the infamous Pfx from PKCS12 - */ -public class Pfx - extends ASN1Object - //implements PKCSObjectIdentifiers -{ - private ContentInfo contentInfo; - private MacData macData = null; - - private Pfx( - ASN1Sequence seq) - { - BigInteger version = ((ASN1Integer)seq.getObjectAt(0)).getValue(); - if (version.intValue() != 3) - { - throw new IllegalArgumentException("wrong version for PFX PDU"); - } - - contentInfo = ContentInfo.getInstance(seq.getObjectAt(1)); - - if (seq.size() == 3) - { - macData = MacData.getInstance(seq.getObjectAt(2)); - } - } - - public static Pfx getInstance( - Object obj) - { - if (obj instanceof Pfx) - { - return (Pfx)obj; - } - - if (obj != null) - { - return new Pfx(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public Pfx( - ContentInfo contentInfo, - MacData macData) - { - this.contentInfo = contentInfo; - this.macData = macData; - } - - public ContentInfo getAuthSafe() - { - return contentInfo; - } - - public MacData getMacData() - { - return macData; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(3)); - v.add(contentInfo); - - if (macData != null) - { - v.add(macData); - } - - return new BERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java b/src/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java deleted file mode 100644 index a45a9b8..0000000 --- a/src/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import java.io.IOException; -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -public class PrivateKeyInfo - extends ASN1Object -{ - private ASN1OctetString privKey; - private AlgorithmIdentifier algId; - private ASN1Set attributes; - - public static PrivateKeyInfo getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static PrivateKeyInfo getInstance( - Object obj) - { - if (obj instanceof PrivateKeyInfo) - { - return (PrivateKeyInfo)obj; - } - else if (obj != null) - { - return new PrivateKeyInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public PrivateKeyInfo( - AlgorithmIdentifier algId, - ASN1Encodable privateKey) - throws IOException - { - this(algId, privateKey, null); - } - - public PrivateKeyInfo( - AlgorithmIdentifier algId, - ASN1Encodable privateKey, - ASN1Set attributes) - throws IOException - { - this.privKey = new DEROctetString(privateKey.toASN1Primitive().getEncoded(ASN1Encoding.DER)); - this.algId = algId; - this.attributes = attributes; - } - - public PrivateKeyInfo( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - BigInteger version = ((ASN1Integer)e.nextElement()).getValue(); - if (version.intValue() != 0) - { - throw new IllegalArgumentException("wrong version for private key info"); - } - - algId = AlgorithmIdentifier.getInstance(e.nextElement()); - privKey = ASN1OctetString.getInstance(e.nextElement()); - - if (e.hasMoreElements()) - { - attributes = ASN1Set.getInstance((ASN1TaggedObject)e.nextElement(), false); - } - } - - public AlgorithmIdentifier getPrivateKeyAlgorithm() - { - return algId; - } - /** - * @deprecated use getPrivateKeyAlgorithm() - */ - public AlgorithmIdentifier getAlgorithmId() - { - return algId; - } - - public ASN1Encodable parsePrivateKey() - throws IOException - { - return ASN1Primitive.fromByteArray(privKey.getOctets()); - } - - /** - * @deprecated use parsePrivateKey() - */ - public ASN1Primitive getPrivateKey() - { - try - { - return parsePrivateKey().toASN1Primitive(); - } - catch (IOException e) - { - throw new IllegalStateException("unable to parse private key"); - } - } - - public ASN1Set getAttributes() - { - return attributes; - } - - /** - * write out an RSA private key with its associated information - * as described in PKCS8. - *
        -     *      PrivateKeyInfo ::= SEQUENCE {
        -     *                              version Version,
        -     *                              privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
        -     *                              privateKey PrivateKey,
        -     *                              attributes [0] IMPLICIT Attributes OPTIONAL 
        -     *                          }
        -     *      Version ::= INTEGER {v1(0)} (v1,...)
        -     *
        -     *      PrivateKey ::= OCTET STRING
        -     *
        -     *      Attributes ::= SET OF Attribute
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(0)); - v.add(algId); - v.add(privKey); - - if (attributes != null) - { - v.add(new DERTaggedObject(false, 0, attributes)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java b/src/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java deleted file mode 100644 index 4886a4b..0000000 --- a/src/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; - -public class RC2CBCParameter - extends ASN1Object -{ - ASN1Integer version; - ASN1OctetString iv; - - public static RC2CBCParameter getInstance( - Object o) - { - if (o instanceof RC2CBCParameter) - { - return (RC2CBCParameter)o; - } - if (o != null) - { - return new RC2CBCParameter(ASN1Sequence.getInstance(o)); - } - - return null; - } - - public RC2CBCParameter( - byte[] iv) - { - this.version = null; - this.iv = new DEROctetString(iv); - } - - public RC2CBCParameter( - int parameterVersion, - byte[] iv) - { - this.version = new ASN1Integer(parameterVersion); - this.iv = new DEROctetString(iv); - } - - private RC2CBCParameter( - ASN1Sequence seq) - { - if (seq.size() == 1) - { - version = null; - iv = (ASN1OctetString)seq.getObjectAt(0); - } - else - { - version = (ASN1Integer)seq.getObjectAt(0); - iv = (ASN1OctetString)seq.getObjectAt(1); - } - } - - public BigInteger getRC2ParameterVersion() - { - if (version == null) - { - return null; - } - - return version.getValue(); - } - - public byte[] getIV() - { - return iv.getOctets(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (version != null) - { - v.add(version); - } - - v.add(iv); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java b/src/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java deleted file mode 100644 index 46115b9..0000000 --- a/src/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java +++ /dev/null @@ -1,151 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -public class RSAESOAEPparams - extends ASN1Object -{ - private AlgorithmIdentifier hashAlgorithm; - private AlgorithmIdentifier maskGenAlgorithm; - private AlgorithmIdentifier pSourceAlgorithm; - - public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); - public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM); - public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0])); - - public static RSAESOAEPparams getInstance( - Object obj) - { - if (obj instanceof RSAESOAEPparams) - { - return (RSAESOAEPparams)obj; - } - else if (obj != null) - { - return new RSAESOAEPparams(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * The default version - */ - public RSAESOAEPparams() - { - hashAlgorithm = DEFAULT_HASH_ALGORITHM; - maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; - pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM; - } - - public RSAESOAEPparams( - AlgorithmIdentifier hashAlgorithm, - AlgorithmIdentifier maskGenAlgorithm, - AlgorithmIdentifier pSourceAlgorithm) - { - this.hashAlgorithm = hashAlgorithm; - this.maskGenAlgorithm = maskGenAlgorithm; - this.pSourceAlgorithm = pSourceAlgorithm; - } - - public RSAESOAEPparams( - ASN1Sequence seq) - { - hashAlgorithm = DEFAULT_HASH_ALGORITHM; - maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; - pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM; - - for (int i = 0; i != seq.size(); i++) - { - ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(i); - - switch (o.getTagNo()) - { - case 0: - hashAlgorithm = AlgorithmIdentifier.getInstance(o, true); - break; - case 1: - maskGenAlgorithm = AlgorithmIdentifier.getInstance(o, true); - break; - case 2: - pSourceAlgorithm = AlgorithmIdentifier.getInstance(o, true); - break; - default: - throw new IllegalArgumentException("unknown tag"); - } - } - } - - public AlgorithmIdentifier getHashAlgorithm() - { - return hashAlgorithm; - } - - public AlgorithmIdentifier getMaskGenAlgorithm() - { - return maskGenAlgorithm; - } - - public AlgorithmIdentifier getPSourceAlgorithm() - { - return pSourceAlgorithm; - } - - /** - *
        -     *  RSAES-OAEP-params ::= SEQUENCE {
        -     *     hashAlgorithm      [0] OAEP-PSSDigestAlgorithms     DEFAULT sha1,
        -     *     maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
        -     *     pSourceAlgorithm   [2] PKCS1PSourceAlgorithms  DEFAULT pSpecifiedEmpty
        -     *   }
        -     *  
        -     *   OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
        -     *     { OID id-sha1 PARAMETERS NULL   }|
        -     *     { OID id-sha256 PARAMETERS NULL }|
        -     *     { OID id-sha384 PARAMETERS NULL }|
        -     *     { OID id-sha512 PARAMETERS NULL },
        -     *     ...  -- Allows for future expansion --
        -     *   }
        -     *   PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
        -     *     { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
        -     *    ...  -- Allows for future expansion --
        -     *   }
        -     *   PKCS1PSourceAlgorithms    ALGORITHM-IDENTIFIER ::= {
        -     *     { OID id-pSpecified PARAMETERS OCTET STRING },
        -     *     ...  -- Allows for future expansion --
        -     *  }
        -     * 
        - * @return the asn1 primitive representing the parameters. - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (!hashAlgorithm.equals(DEFAULT_HASH_ALGORITHM)) - { - v.add(new DERTaggedObject(true, 0, hashAlgorithm)); - } - - if (!maskGenAlgorithm.equals(DEFAULT_MASK_GEN_FUNCTION)) - { - v.add(new DERTaggedObject(true, 1, maskGenAlgorithm)); - } - - if (!pSourceAlgorithm.equals(DEFAULT_P_SOURCE_ALGORITHM)) - { - v.add(new DERTaggedObject(true, 2, pSourceAlgorithm)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java b/src/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java deleted file mode 100644 index 41c75d0..0000000 --- a/src/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java +++ /dev/null @@ -1,187 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class RSAPrivateKey - extends ASN1Object -{ - private BigInteger version; - private BigInteger modulus; - private BigInteger publicExponent; - private BigInteger privateExponent; - private BigInteger prime1; - private BigInteger prime2; - private BigInteger exponent1; - private BigInteger exponent2; - private BigInteger coefficient; - private ASN1Sequence otherPrimeInfos = null; - - public static RSAPrivateKey getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static RSAPrivateKey getInstance( - Object obj) - { - if (obj instanceof RSAPrivateKey) - { - return (RSAPrivateKey)obj; - } - - if (obj != null) - { - return new RSAPrivateKey(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public RSAPrivateKey( - BigInteger modulus, - BigInteger publicExponent, - BigInteger privateExponent, - BigInteger prime1, - BigInteger prime2, - BigInteger exponent1, - BigInteger exponent2, - BigInteger coefficient) - { - this.version = BigInteger.valueOf(0); - this.modulus = modulus; - this.publicExponent = publicExponent; - this.privateExponent = privateExponent; - this.prime1 = prime1; - this.prime2 = prime2; - this.exponent1 = exponent1; - this.exponent2 = exponent2; - this.coefficient = coefficient; - } - - private RSAPrivateKey( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - BigInteger v = ((ASN1Integer)e.nextElement()).getValue(); - if (v.intValue() != 0 && v.intValue() != 1) - { - throw new IllegalArgumentException("wrong version for RSA private key"); - } - - version = v; - modulus = ((ASN1Integer)e.nextElement()).getValue(); - publicExponent = ((ASN1Integer)e.nextElement()).getValue(); - privateExponent = ((ASN1Integer)e.nextElement()).getValue(); - prime1 = ((ASN1Integer)e.nextElement()).getValue(); - prime2 = ((ASN1Integer)e.nextElement()).getValue(); - exponent1 = ((ASN1Integer)e.nextElement()).getValue(); - exponent2 = ((ASN1Integer)e.nextElement()).getValue(); - coefficient = ((ASN1Integer)e.nextElement()).getValue(); - - if (e.hasMoreElements()) - { - otherPrimeInfos = (ASN1Sequence)e.nextElement(); - } - } - - public BigInteger getVersion() - { - return version; - } - - public BigInteger getModulus() - { - return modulus; - } - - public BigInteger getPublicExponent() - { - return publicExponent; - } - - public BigInteger getPrivateExponent() - { - return privateExponent; - } - - public BigInteger getPrime1() - { - return prime1; - } - - public BigInteger getPrime2() - { - return prime2; - } - - public BigInteger getExponent1() - { - return exponent1; - } - - public BigInteger getExponent2() - { - return exponent2; - } - - public BigInteger getCoefficient() - { - return coefficient; - } - - /** - * This outputs the key in PKCS1v2 format. - *
        -     *      RSAPrivateKey ::= SEQUENCE {
        -     *                          version Version,
        -     *                          modulus INTEGER, -- n
        -     *                          publicExponent INTEGER, -- e
        -     *                          privateExponent INTEGER, -- d
        -     *                          prime1 INTEGER, -- p
        -     *                          prime2 INTEGER, -- q
        -     *                          exponent1 INTEGER, -- d mod (p-1)
        -     *                          exponent2 INTEGER, -- d mod (q-1)
        -     *                          coefficient INTEGER, -- (inverse of q) mod p
        -     *                          otherPrimeInfos OtherPrimeInfos OPTIONAL
        -     *                      }
        -     *
        -     *      Version ::= INTEGER { two-prime(0), multi(1) }
        -     *        (CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})
        -     * 
        - *

        - * This routine is written to output PKCS1 version 2.1, private keys. - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(version)); // version - v.add(new ASN1Integer(getModulus())); - v.add(new ASN1Integer(getPublicExponent())); - v.add(new ASN1Integer(getPrivateExponent())); - v.add(new ASN1Integer(getPrime1())); - v.add(new ASN1Integer(getPrime2())); - v.add(new ASN1Integer(getExponent1())); - v.add(new ASN1Integer(getExponent2())); - v.add(new ASN1Integer(getCoefficient())); - - if (otherPrimeInfos != null) - { - v.add(otherPrimeInfos); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java b/src/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java deleted file mode 100644 index a29e9d3..0000000 --- a/src/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -/** - * @deprecated use RSAPrivateKey - */ -public class RSAPrivateKeyStructure - extends ASN1Object -{ - private int version; - private BigInteger modulus; - private BigInteger publicExponent; - private BigInteger privateExponent; - private BigInteger prime1; - private BigInteger prime2; - private BigInteger exponent1; - private BigInteger exponent2; - private BigInteger coefficient; - private ASN1Sequence otherPrimeInfos = null; - - public static RSAPrivateKeyStructure getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static RSAPrivateKeyStructure getInstance( - Object obj) - { - if (obj instanceof RSAPrivateKeyStructure) - { - return (RSAPrivateKeyStructure)obj; - } - else if (obj instanceof ASN1Sequence) - { - return new RSAPrivateKeyStructure((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public RSAPrivateKeyStructure( - BigInteger modulus, - BigInteger publicExponent, - BigInteger privateExponent, - BigInteger prime1, - BigInteger prime2, - BigInteger exponent1, - BigInteger exponent2, - BigInteger coefficient) - { - this.version = 0; - this.modulus = modulus; - this.publicExponent = publicExponent; - this.privateExponent = privateExponent; - this.prime1 = prime1; - this.prime2 = prime2; - this.exponent1 = exponent1; - this.exponent2 = exponent2; - this.coefficient = coefficient; - } - - public RSAPrivateKeyStructure( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - BigInteger v = ((ASN1Integer)e.nextElement()).getValue(); - if (v.intValue() != 0 && v.intValue() != 1) - { - throw new IllegalArgumentException("wrong version for RSA private key"); - } - - version = v.intValue(); - modulus = ((ASN1Integer)e.nextElement()).getValue(); - publicExponent = ((ASN1Integer)e.nextElement()).getValue(); - privateExponent = ((ASN1Integer)e.nextElement()).getValue(); - prime1 = ((ASN1Integer)e.nextElement()).getValue(); - prime2 = ((ASN1Integer)e.nextElement()).getValue(); - exponent1 = ((ASN1Integer)e.nextElement()).getValue(); - exponent2 = ((ASN1Integer)e.nextElement()).getValue(); - coefficient = ((ASN1Integer)e.nextElement()).getValue(); - - if (e.hasMoreElements()) - { - otherPrimeInfos = (ASN1Sequence)e.nextElement(); - } - } - - public int getVersion() - { - return version; - } - - public BigInteger getModulus() - { - return modulus; - } - - public BigInteger getPublicExponent() - { - return publicExponent; - } - - public BigInteger getPrivateExponent() - { - return privateExponent; - } - - public BigInteger getPrime1() - { - return prime1; - } - - public BigInteger getPrime2() - { - return prime2; - } - - public BigInteger getExponent1() - { - return exponent1; - } - - public BigInteger getExponent2() - { - return exponent2; - } - - public BigInteger getCoefficient() - { - return coefficient; - } - - /** - * This outputs the key in PKCS1v2 format. - *

        -     *      RSAPrivateKey ::= SEQUENCE {
        -     *                          version Version,
        -     *                          modulus INTEGER, -- n
        -     *                          publicExponent INTEGER, -- e
        -     *                          privateExponent INTEGER, -- d
        -     *                          prime1 INTEGER, -- p
        -     *                          prime2 INTEGER, -- q
        -     *                          exponent1 INTEGER, -- d mod (p-1)
        -     *                          exponent2 INTEGER, -- d mod (q-1)
        -     *                          coefficient INTEGER, -- (inverse of q) mod p
        -     *                          otherPrimeInfos OtherPrimeInfos OPTIONAL
        -     *                      }
        -     *
        -     *      Version ::= INTEGER { two-prime(0), multi(1) }
        -     *        (CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})
        -     * 
        - *

        - * This routine is written to output PKCS1 version 2.1, private keys. - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(version)); // version - v.add(new ASN1Integer(getModulus())); - v.add(new ASN1Integer(getPublicExponent())); - v.add(new ASN1Integer(getPrivateExponent())); - v.add(new ASN1Integer(getPrime1())); - v.add(new ASN1Integer(getPrime2())); - v.add(new ASN1Integer(getExponent1())); - v.add(new ASN1Integer(getExponent2())); - v.add(new ASN1Integer(getCoefficient())); - - if (otherPrimeInfos != null) - { - v.add(otherPrimeInfos); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/RSAPublicKey.java b/src/org/bouncycastle/asn1/pkcs/RSAPublicKey.java deleted file mode 100644 index d8472c6..0000000 --- a/src/org/bouncycastle/asn1/pkcs/RSAPublicKey.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class RSAPublicKey - extends ASN1Object -{ - private BigInteger modulus; - private BigInteger publicExponent; - - public static RSAPublicKey getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static RSAPublicKey getInstance( - Object obj) - { - if (obj instanceof RSAPublicKey) - { - return (RSAPublicKey)obj; - } - - if (obj != null) - { - return new RSAPublicKey(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public RSAPublicKey( - BigInteger modulus, - BigInteger publicExponent) - { - this.modulus = modulus; - this.publicExponent = publicExponent; - } - - private RSAPublicKey( - ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - Enumeration e = seq.getObjects(); - - modulus = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); - publicExponent = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); - } - - public BigInteger getModulus() - { - return modulus; - } - - public BigInteger getPublicExponent() - { - return publicExponent; - } - - /** - * This outputs the key in PKCS1v2 format. - *

        -     *      RSAPublicKey ::= SEQUENCE {
        -     *                          modulus INTEGER, -- n
        -     *                          publicExponent INTEGER, -- e
        -     *                      }
        -     * 
        - *

        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(getModulus())); - v.add(new ASN1Integer(getPublicExponent())); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java b/src/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java deleted file mode 100644 index 6712a07..0000000 --- a/src/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -public class RSASSAPSSparams - extends ASN1Object -{ - private AlgorithmIdentifier hashAlgorithm; - private AlgorithmIdentifier maskGenAlgorithm; - private ASN1Integer saltLength; - private ASN1Integer trailerField; - - public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); - public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM); - public final static ASN1Integer DEFAULT_SALT_LENGTH = new ASN1Integer(20); - public final static ASN1Integer DEFAULT_TRAILER_FIELD = new ASN1Integer(1); - - public static RSASSAPSSparams getInstance( - Object obj) - { - if (obj instanceof RSASSAPSSparams) - { - return (RSASSAPSSparams)obj; - } - else if (obj != null) - { - return new RSASSAPSSparams(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * The default version - */ - public RSASSAPSSparams() - { - hashAlgorithm = DEFAULT_HASH_ALGORITHM; - maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; - saltLength = DEFAULT_SALT_LENGTH; - trailerField = DEFAULT_TRAILER_FIELD; - } - - public RSASSAPSSparams( - AlgorithmIdentifier hashAlgorithm, - AlgorithmIdentifier maskGenAlgorithm, - ASN1Integer saltLength, - ASN1Integer trailerField) - { - this.hashAlgorithm = hashAlgorithm; - this.maskGenAlgorithm = maskGenAlgorithm; - this.saltLength = saltLength; - this.trailerField = trailerField; - } - - private RSASSAPSSparams( - ASN1Sequence seq) - { - hashAlgorithm = DEFAULT_HASH_ALGORITHM; - maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; - saltLength = DEFAULT_SALT_LENGTH; - trailerField = DEFAULT_TRAILER_FIELD; - - for (int i = 0; i != seq.size(); i++) - { - ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(i); - - switch (o.getTagNo()) - { - case 0: - hashAlgorithm = AlgorithmIdentifier.getInstance(o, true); - break; - case 1: - maskGenAlgorithm = AlgorithmIdentifier.getInstance(o, true); - break; - case 2: - saltLength = ASN1Integer.getInstance(o, true); - break; - case 3: - trailerField = ASN1Integer.getInstance(o, true); - break; - default: - throw new IllegalArgumentException("unknown tag"); - } - } - } - - public AlgorithmIdentifier getHashAlgorithm() - { - return hashAlgorithm; - } - - public AlgorithmIdentifier getMaskGenAlgorithm() - { - return maskGenAlgorithm; - } - - public BigInteger getSaltLength() - { - return saltLength.getValue(); - } - - public BigInteger getTrailerField() - { - return trailerField.getValue(); - } - - /** - *

        -     * RSASSA-PSS-params ::= SEQUENCE {
        -     *   hashAlgorithm      [0] OAEP-PSSDigestAlgorithms  DEFAULT sha1,
        -     *    maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
        -     *    saltLength         [2] INTEGER  DEFAULT 20,
        -     *    trailerField       [3] TrailerField  DEFAULT trailerFieldBC
        -     *  }
        -     *
        -     * OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
        -     *    { OID id-sha1 PARAMETERS NULL   }|
        -     *    { OID id-sha256 PARAMETERS NULL }|
        -     *    { OID id-sha384 PARAMETERS NULL }|
        -     *    { OID id-sha512 PARAMETERS NULL },
        -     *    ...  -- Allows for future expansion --
        -     * }
        -     *
        -     * PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
        -     *   { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
        -     *    ...  -- Allows for future expansion --
        -     * }
        -     * 
        -     * TrailerField ::= INTEGER { trailerFieldBC(1) }
        -     * 
        - * @return the asn1 primitive representing the parameters. - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (!hashAlgorithm.equals(DEFAULT_HASH_ALGORITHM)) - { - v.add(new DERTaggedObject(true, 0, hashAlgorithm)); - } - - if (!maskGenAlgorithm.equals(DEFAULT_MASK_GEN_FUNCTION)) - { - v.add(new DERTaggedObject(true, 1, maskGenAlgorithm)); - } - - if (!saltLength.equals(DEFAULT_SALT_LENGTH)) - { - v.add(new DERTaggedObject(true, 2, saltLength)); - } - - if (!trailerField.equals(DEFAULT_TRAILER_FIELD)) - { - v.add(new DERTaggedObject(true, 3, trailerField)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/SafeBag.java b/src/org/bouncycastle/asn1/pkcs/SafeBag.java deleted file mode 100644 index 00ca0a2..0000000 --- a/src/org/bouncycastle/asn1/pkcs/SafeBag.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DLSequence; -import org.bouncycastle.asn1.DLTaggedObject; - -public class SafeBag - extends ASN1Object -{ - private ASN1ObjectIdentifier bagId; - private ASN1Encodable bagValue; - private ASN1Set bagAttributes; - - public SafeBag( - ASN1ObjectIdentifier oid, - ASN1Encodable obj) - { - this.bagId = oid; - this.bagValue = obj; - this.bagAttributes = null; - } - - public SafeBag( - ASN1ObjectIdentifier oid, - ASN1Encodable obj, - ASN1Set bagAttributes) - { - this.bagId = oid; - this.bagValue = obj; - this.bagAttributes = bagAttributes; - } - - public static SafeBag getInstance( - Object obj) - { - if (obj instanceof SafeBag) - { - return (SafeBag)obj; - } - - if (obj != null) - { - return new SafeBag(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private SafeBag( - ASN1Sequence seq) - { - this.bagId = (ASN1ObjectIdentifier)seq.getObjectAt(0); - this.bagValue = ((ASN1TaggedObject)seq.getObjectAt(1)).getObject(); - if (seq.size() == 3) - { - this.bagAttributes = (ASN1Set)seq.getObjectAt(2); - } - } - - public ASN1ObjectIdentifier getBagId() - { - return bagId; - } - - public ASN1Encodable getBagValue() - { - return bagValue; - } - - public ASN1Set getBagAttributes() - { - return bagAttributes; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(bagId); - v.add(new DLTaggedObject(true, 0, bagValue)); - - if (bagAttributes != null) - { - v.add(bagAttributes); - } - - return new DLSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/SignedData.java b/src/org/bouncycastle/asn1/pkcs/SignedData.java deleted file mode 100644 index 2cc75ee..0000000 --- a/src/org/bouncycastle/asn1/pkcs/SignedData.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.BERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * a PKCS#7 signed data object. - */ -public class SignedData - extends ASN1Object - //implements PKCSObjectIdentifiers -{ - private ASN1Integer version; - private ASN1Set digestAlgorithms; - private ContentInfo contentInfo; - private ASN1Set certificates; - private ASN1Set crls; - private ASN1Set signerInfos; - - public static SignedData getInstance( - Object o) - { - if (o instanceof SignedData) - { - return (SignedData)o; - } - else if (o != null) - { - return new SignedData(ASN1Sequence.getInstance(o)); - } - - return null; - } - - public SignedData( - ASN1Integer _version, - ASN1Set _digestAlgorithms, - ContentInfo _contentInfo, - ASN1Set _certificates, - ASN1Set _crls, - ASN1Set _signerInfos) - { - version = _version; - digestAlgorithms = _digestAlgorithms; - contentInfo = _contentInfo; - certificates = _certificates; - crls = _crls; - signerInfos = _signerInfos; - } - - public SignedData( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - version = (ASN1Integer)e.nextElement(); - digestAlgorithms = ((ASN1Set)e.nextElement()); - contentInfo = ContentInfo.getInstance(e.nextElement()); - - while (e.hasMoreElements()) - { - ASN1Primitive o = (ASN1Primitive)e.nextElement(); - - // - // an interesting feature of SignedData is that there appear to be varying implementations... - // for the moment we ignore anything which doesn't fit. - // - if (o instanceof DERTaggedObject) - { - DERTaggedObject tagged = (DERTaggedObject)o; - - switch (tagged.getTagNo()) - { - case 0: - certificates = ASN1Set.getInstance(tagged, false); - break; - case 1: - crls = ASN1Set.getInstance(tagged, false); - break; - default: - throw new IllegalArgumentException("unknown tag value " + tagged.getTagNo()); - } - } - else - { - signerInfos = (ASN1Set)o; - } - } - } - - public ASN1Integer getVersion() - { - return version; - } - - public ASN1Set getDigestAlgorithms() - { - return digestAlgorithms; - } - - public ContentInfo getContentInfo() - { - return contentInfo; - } - - public ASN1Set getCertificates() - { - return certificates; - } - - public ASN1Set getCRLs() - { - return crls; - } - - public ASN1Set getSignerInfos() - { - return signerInfos; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  SignedData ::= SEQUENCE {
        -     *      version Version,
        -     *      digestAlgorithms DigestAlgorithmIdentifiers,
        -     *      contentInfo ContentInfo,
        -     *      certificates
        -     *          [0] IMPLICIT ExtendedCertificatesAndCertificates
        -     *                   OPTIONAL,
        -     *      crls
        -     *          [1] IMPLICIT CertificateRevocationLists OPTIONAL,
        -     *      signerInfos SignerInfos }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(version); - v.add(digestAlgorithms); - v.add(contentInfo); - - if (certificates != null) - { - v.add(new DERTaggedObject(false, 0, certificates)); - } - - if (crls != null) - { - v.add(new DERTaggedObject(false, 1, crls)); - } - - v.add(signerInfos); - - return new BERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/SignerInfo.java b/src/org/bouncycastle/asn1/pkcs/SignerInfo.java deleted file mode 100644 index ab5d78a..0000000 --- a/src/org/bouncycastle/asn1/pkcs/SignerInfo.java +++ /dev/null @@ -1,178 +0,0 @@ -package org.bouncycastle.asn1.pkcs; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; - -/** - * a PKCS#7 signer info object. - */ -public class SignerInfo - extends ASN1Object -{ - private ASN1Integer version; - private IssuerAndSerialNumber issuerAndSerialNumber; - private AlgorithmIdentifier digAlgorithm; - private ASN1Set authenticatedAttributes; - private AlgorithmIdentifier digEncryptionAlgorithm; - private ASN1OctetString encryptedDigest; - private ASN1Set unauthenticatedAttributes; - - public static SignerInfo getInstance( - Object o) - { - if (o instanceof SignerInfo) - { - return (SignerInfo)o; - } - else if (o instanceof ASN1Sequence) - { - return new SignerInfo((ASN1Sequence)o); - } - - throw new IllegalArgumentException("unknown object in factory: " + o.getClass().getName()); - } - - public SignerInfo( - ASN1Integer version, - IssuerAndSerialNumber issuerAndSerialNumber, - AlgorithmIdentifier digAlgorithm, - ASN1Set authenticatedAttributes, - AlgorithmIdentifier digEncryptionAlgorithm, - ASN1OctetString encryptedDigest, - ASN1Set unauthenticatedAttributes) - { - this.version = version; - this.issuerAndSerialNumber = issuerAndSerialNumber; - this.digAlgorithm = digAlgorithm; - this.authenticatedAttributes = authenticatedAttributes; - this.digEncryptionAlgorithm = digEncryptionAlgorithm; - this.encryptedDigest = encryptedDigest; - this.unauthenticatedAttributes = unauthenticatedAttributes; - } - - public SignerInfo( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - version = (ASN1Integer)e.nextElement(); - issuerAndSerialNumber = IssuerAndSerialNumber.getInstance(e.nextElement()); - digAlgorithm = AlgorithmIdentifier.getInstance(e.nextElement()); - - Object obj = e.nextElement(); - - if (obj instanceof ASN1TaggedObject) - { - authenticatedAttributes = ASN1Set.getInstance((ASN1TaggedObject)obj, false); - - digEncryptionAlgorithm = AlgorithmIdentifier.getInstance(e.nextElement()); - } - else - { - authenticatedAttributes = null; - digEncryptionAlgorithm = AlgorithmIdentifier.getInstance(obj); - } - - encryptedDigest = DEROctetString.getInstance(e.nextElement()); - - if (e.hasMoreElements()) - { - unauthenticatedAttributes = ASN1Set.getInstance((ASN1TaggedObject)e.nextElement(), false); - } - else - { - unauthenticatedAttributes = null; - } - } - - public ASN1Integer getVersion() - { - return version; - } - - public IssuerAndSerialNumber getIssuerAndSerialNumber() - { - return issuerAndSerialNumber; - } - - public ASN1Set getAuthenticatedAttributes() - { - return authenticatedAttributes; - } - - public AlgorithmIdentifier getDigestAlgorithm() - { - return digAlgorithm; - } - - public ASN1OctetString getEncryptedDigest() - { - return encryptedDigest; - } - - public AlgorithmIdentifier getDigestEncryptionAlgorithm() - { - return digEncryptionAlgorithm; - } - - public ASN1Set getUnauthenticatedAttributes() - { - return unauthenticatedAttributes; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  SignerInfo ::= SEQUENCE {
        -     *      version Version,
        -     *      issuerAndSerialNumber IssuerAndSerialNumber,
        -     *      digestAlgorithm DigestAlgorithmIdentifier,
        -     *      authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
        -     *      digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
        -     *      encryptedDigest EncryptedDigest,
        -     *      unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
        -     *  }
        -     *
        -     *  EncryptedDigest ::= OCTET STRING
        -     *
        -     *  DigestAlgorithmIdentifier ::= AlgorithmIdentifier
        -     *
        -     *  DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(version); - v.add(issuerAndSerialNumber); - v.add(digAlgorithm); - - if (authenticatedAttributes != null) - { - v.add(new DERTaggedObject(false, 0, authenticatedAttributes)); - } - - v.add(digEncryptionAlgorithm); - v.add(encryptedDigest); - - if (unauthenticatedAttributes != null) - { - v.add(new DERTaggedObject(false, 1, unauthenticatedAttributes)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/pkcs/package.html b/src/org/bouncycastle/asn1/pkcs/package.html deleted file mode 100644 index ab800f4..0000000 --- a/src/org/bouncycastle/asn1/pkcs/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Support classes useful for encoding and supporting the various RSA PKCS documents. - - diff --git a/src/org/bouncycastle/asn1/sec/ECPrivateKey.java b/src/org/bouncycastle/asn1/sec/ECPrivateKey.java deleted file mode 100644 index ee63f4f..0000000 --- a/src/org/bouncycastle/asn1/sec/ECPrivateKey.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.bouncycastle.asn1.sec; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.util.BigIntegers; - -/** - * the elliptic curve private key object from SEC 1 - */ -public class ECPrivateKey - extends ASN1Object -{ - private ASN1Sequence seq; - - private ECPrivateKey( - ASN1Sequence seq) - { - this.seq = seq; - } - - public static ECPrivateKey getInstance( - Object obj) - { - if (obj instanceof ECPrivateKey) - { - return (ECPrivateKey)obj; - } - - if (obj != null) - { - return new ECPrivateKey(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public ECPrivateKey( - BigInteger key) - { - byte[] bytes = BigIntegers.asUnsignedByteArray(key); - - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(1)); - v.add(new DEROctetString(bytes)); - - seq = new DERSequence(v); - } - - public ECPrivateKey( - BigInteger key, - ASN1Object parameters) - { - this(key, null, parameters); - } - - public ECPrivateKey( - BigInteger key, - DERBitString publicKey, - ASN1Object parameters) - { - byte[] bytes = BigIntegers.asUnsignedByteArray(key); - - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(1)); - v.add(new DEROctetString(bytes)); - - if (parameters != null) - { - v.add(new DERTaggedObject(true, 0, parameters)); - } - - if (publicKey != null) - { - v.add(new DERTaggedObject(true, 1, publicKey)); - } - - seq = new DERSequence(v); - } - - public BigInteger getKey() - { - ASN1OctetString octs = (ASN1OctetString)seq.getObjectAt(1); - - return new BigInteger(1, octs.getOctets()); - } - - public DERBitString getPublicKey() - { - return (DERBitString)getObjectInTag(1); - } - - public ASN1Primitive getParameters() - { - return getObjectInTag(0); - } - - private ASN1Primitive getObjectInTag(int tagNo) - { - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1Encodable obj = (ASN1Encodable)e.nextElement(); - - if (obj instanceof ASN1TaggedObject) - { - ASN1TaggedObject tag = (ASN1TaggedObject)obj; - if (tag.getTagNo() == tagNo) - { - return tag.getObject().toASN1Primitive(); - } - } - } - return null; - } - - /** - * ECPrivateKey ::= SEQUENCE { - * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), - * privateKey OCTET STRING, - * parameters [0] Parameters OPTIONAL, - * publicKey [1] BIT STRING OPTIONAL } - */ - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java b/src/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java deleted file mode 100644 index fc54d89..0000000 --- a/src/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.bouncycastle.asn1.sec; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.util.BigIntegers; - -/** - * the elliptic curve private key object from SEC 1 - * @deprecated use ECPrivateKey - */ -public class ECPrivateKeyStructure - extends ASN1Object -{ - private ASN1Sequence seq; - - public ECPrivateKeyStructure( - ASN1Sequence seq) - { - this.seq = seq; - } - - public ECPrivateKeyStructure( - BigInteger key) - { - byte[] bytes = BigIntegers.asUnsignedByteArray(key); - - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(1)); - v.add(new DEROctetString(bytes)); - - seq = new DERSequence(v); - } - - public ECPrivateKeyStructure( - BigInteger key, - ASN1Encodable parameters) - { - this(key, null, parameters); - } - - public ECPrivateKeyStructure( - BigInteger key, - DERBitString publicKey, - ASN1Encodable parameters) - { - byte[] bytes = BigIntegers.asUnsignedByteArray(key); - - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(1)); - v.add(new DEROctetString(bytes)); - - if (parameters != null) - { - v.add(new DERTaggedObject(true, 0, parameters)); - } - - if (publicKey != null) - { - v.add(new DERTaggedObject(true, 1, publicKey)); - } - - seq = new DERSequence(v); - } - - public BigInteger getKey() - { - ASN1OctetString octs = (ASN1OctetString)seq.getObjectAt(1); - - return new BigInteger(1, octs.getOctets()); - } - - public DERBitString getPublicKey() - { - return (DERBitString)getObjectInTag(1); - } - - public ASN1Primitive getParameters() - { - return getObjectInTag(0); - } - - private ASN1Primitive getObjectInTag(int tagNo) - { - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1Encodable obj = (ASN1Encodable)e.nextElement(); - - if (obj instanceof ASN1TaggedObject) - { - ASN1TaggedObject tag = (ASN1TaggedObject)obj; - if (tag.getTagNo() == tagNo) - { - return (ASN1Primitive)((ASN1Encodable)tag.getObject()).toASN1Primitive(); - } - } - } - return null; - } - - /** - * ECPrivateKey ::= SEQUENCE { - * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), - * privateKey OCTET STRING, - * parameters [0] Parameters OPTIONAL, - * publicKey [1] BIT STRING OPTIONAL } - */ - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/sec/SECNamedCurves.java b/src/org/bouncycastle/asn1/sec/SECNamedCurves.java deleted file mode 100644 index 4525433..0000000 --- a/src/org/bouncycastle/asn1/sec/SECNamedCurves.java +++ /dev/null @@ -1,1029 +0,0 @@ -package org.bouncycastle.asn1.sec; - -import javabc.BigInteger; -import java.util.Enumeration; -import java.util.Hashtable; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.x9.X9ECParameters; -import org.bouncycastle.asn1.x9.X9ECParametersHolder; -import org.bouncycastle.math.ec.ECConstants; -import org.bouncycastle.math.ec.ECCurve; -import org.bouncycastle.math.ec.ECPoint; -import org.bouncycastle.util.Strings; -import org.bouncycastle.util.encoders.Hex; - -public class SECNamedCurves -{ - private static BigInteger fromHex( - String hex) - { - return new BigInteger(1, Hex.decode(hex)); - } - - /* - * secp112r1 - */ - static X9ECParametersHolder secp112r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = (2^128 - 3) / 76439 - BigInteger p = fromHex("DB7C2ABF62E35E668076BEAD208B"); - BigInteger a = fromHex("DB7C2ABF62E35E668076BEAD2088"); - BigInteger b = fromHex("659EF8BA043916EEDE8911702B22"); - byte[] S = Hex.decode("00F50B028E4D696E676875615175290472783FB1"); - BigInteger n = fromHex("DB7C2ABF62E35E7628DFAC6561C5"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "09487239995A5EE76B55F9C2F098")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "09487239995A5EE76B55F9C2F098" - + "A89CE5AF8724C0A23E0E0FF77500")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp112r2 - */ - static X9ECParametersHolder secp112r2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = (2^128 - 3) / 76439 - BigInteger p = fromHex("DB7C2ABF62E35E668076BEAD208B"); - BigInteger a = fromHex("6127C24C05F38A0AAAF65C0EF02C"); - BigInteger b = fromHex("51DEF1815DB5ED74FCC34C85D709"); - byte[] S = Hex.decode("002757A1114D696E6768756151755316C05E0BD4"); - BigInteger n = fromHex("36DF0AAFD8B8D7597CA10520D04B"); - BigInteger h = BigInteger.valueOf(4); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "4BA30AB5E892B4E1649DD0928643")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "4BA30AB5E892B4E1649DD0928643" - + "ADCD46F5882E3747DEF36E956E97")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp128r1 - */ - static X9ECParametersHolder secp128r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^128 - 2^97 - 1 - BigInteger p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); - BigInteger a = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"); - BigInteger b = fromHex("E87579C11079F43DD824993C2CEE5ED3"); - byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679"); - BigInteger n = fromHex("FFFFFFFE0000000075A30D1B9038A115"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "161FF7528B899B2D0C28607CA52C5B86")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "161FF7528B899B2D0C28607CA52C5B86" - + "CF5AC8395BAFEB13C02DA292DDED7A83")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp128r2 - */ - static X9ECParametersHolder secp128r2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^128 - 2^97 - 1 - BigInteger p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); - BigInteger a = fromHex("D6031998D1B3BBFEBF59CC9BBFF9AEE1"); - BigInteger b = fromHex("5EEEFCA380D02919DC2C6558BB6D8A5D"); - byte[] S = Hex.decode("004D696E67687561517512D8F03431FCE63B88F4"); - BigInteger n = fromHex("3FFFFFFF7FFFFFFFBE0024720613B5A3"); - BigInteger h = BigInteger.valueOf(4); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "7B6AA5D85E572983E6FB32A7CDEBC140")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "7B6AA5D85E572983E6FB32A7CDEBC140" - + "27B6916A894D3AEE7106FE805FC34B44")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp160k1 - */ - static X9ECParametersHolder secp160k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(7); - byte[] S = null; - BigInteger n = fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); -// ECPoint G = curve.decodePoint(Hex.decode("02" -// + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB" - + "938CF935318FDCED6BC28286531733C3F03C4FEE")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp160r1 - */ - static X9ECParametersHolder secp160r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^160 - 2^31 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"); - BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"); - BigInteger b = fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"); - byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345"); - BigInteger n = fromHex("0100000000000000000001F4C8F927AED3CA752257"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "4A96B5688EF573284664698968C38BB913CBFC82")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "4A96B5688EF573284664698968C38BB913CBFC82" - + "23A628553168947D59DCC912042351377AC5FB32")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp160r2 - */ - static X9ECParametersHolder secp160r2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); - BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70"); - BigInteger b = fromHex("B4E134D3FB59EB8BAB57274904664D5AF50388BA"); - byte[] S = Hex.decode("B99B99B099B323E02709A4D696E6768756151751"); - BigInteger n = fromHex("0100000000000000000000351EE786A818F3A1A16B"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "52DCB034293A117E1F4FF11B30F7199D3144CE6D")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "52DCB034293A117E1F4FF11B30F7199D3144CE6D" - + "FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp192k1 - */ - static X9ECParametersHolder secp192k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"); - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(3); - byte[] S = null; - BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D" - + "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp192r1 - */ - static X9ECParametersHolder secp192r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^192 - 2^64 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"); - BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"); - BigInteger b = fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"); - byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5"); - BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012" - + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp224k1 - */ - static X9ECParametersHolder secp224k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^224 - 2^32 - 2^12 - 2^11 - 2^9 - 2^7 - 2^4 - 2 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D"); - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(5); - byte[] S = null; - BigInteger n = fromHex("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C" - + "7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp224r1 - */ - static X9ECParametersHolder secp224r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^224 - 2^96 + 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"); - BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"); - BigInteger b = fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"); - byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); - BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21" - + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp256k1 - */ - static X9ECParametersHolder secp256k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"); - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(7); - byte[] S = null; - BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798" - + "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp256r1 - */ - static X9ECParametersHolder secp256r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1 - BigInteger p = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"); - BigInteger a = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"); - BigInteger b = fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"); - byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90"); - BigInteger n = fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" - + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp384r1 - */ - static X9ECParametersHolder secp384r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^384 - 2^128 - 2^96 + 2^32 - 1 - BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF"); - BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC"); - BigInteger b = fromHex("B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF"); - byte[] S = Hex.decode("A335926AA319A27A1D00896A6773A4827ACDAC73"); - BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7" - + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * secp521r1 - */ - static X9ECParametersHolder secp521r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - // p = 2^521 - 1 - BigInteger p = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); - BigInteger a = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"); - BigInteger b = fromHex("0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"); - byte[] S = Hex.decode("D09E8800291CB85396CC6717393284AAA0DA64BA"); - BigInteger n = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"); - BigInteger h = BigInteger.valueOf(1); - - ECCurve curve = new ECCurve.Fp(p, a, b); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66" - + "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect113r1 - */ - static X9ECParametersHolder sect113r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 113; - int k = 9; - - BigInteger a = fromHex("003088250CA6E7C7FE649CE85820F7"); - BigInteger b = fromHex("00E8BEE4D3E2260744188BE0E9C723"); - byte[] S = Hex.decode("10E723AB14D696E6768756151756FEBF8FCB49A9"); - BigInteger n = fromHex("0100000000000000D9CCEC8A39E56F"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "009D73616F35F4AB1407D73562C10F")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "009D73616F35F4AB1407D73562C10F" - + "00A52830277958EE84D1315ED31886")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect113r2 - */ - static X9ECParametersHolder sect113r2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 113; - int k = 9; - - BigInteger a = fromHex("00689918DBEC7E5A0DD6DFC0AA55C7"); - BigInteger b = fromHex("0095E9A9EC9B297BD4BF36E059184F"); - byte[] S = Hex.decode("10C0FB15760860DEF1EEF4D696E676875615175D"); - BigInteger n = fromHex("010000000000000108789B2496AF93"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "01A57A6A7B26CA5EF52FCDB8164797")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "01A57A6A7B26CA5EF52FCDB8164797" - + "00B3ADC94ED1FE674C06E695BABA1D")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect131r1 - */ - static X9ECParametersHolder sect131r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 131; - int k1 = 2; - int k2 = 3; - int k3 = 8; - - BigInteger a = fromHex("07A11B09A76B562144418FF3FF8C2570B8"); - BigInteger b = fromHex("0217C05610884B63B9C6C7291678F9D341"); - byte[] S = Hex.decode("4D696E676875615175985BD3ADBADA21B43A97E2"); - BigInteger n = fromHex("0400000000000000023123953A9464B54D"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "0081BAF91FDF9833C40F9C181343638399")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "0081BAF91FDF9833C40F9C181343638399" - + "078C6E7EA38C001F73C8134B1B4EF9E150")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect131r2 - */ - static X9ECParametersHolder sect131r2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 131; - int k1 = 2; - int k2 = 3; - int k3 = 8; - - BigInteger a = fromHex("03E5A88919D7CAFCBF415F07C2176573B2"); - BigInteger b = fromHex("04B8266A46C55657AC734CE38F018F2192"); - byte[] S = Hex.decode("985BD3ADBAD4D696E676875615175A21B43A97E3"); - BigInteger n = fromHex("0400000000000000016954A233049BA98F"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "0356DCD8F2F95031AD652D23951BB366A8")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "0356DCD8F2F95031AD652D23951BB366A8" - + "0648F06D867940A5366D9E265DE9EB240F")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect163k1 - */ - static X9ECParametersHolder sect163k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 163; - int k1 = 3; - int k2 = 6; - int k3 = 7; - - BigInteger a = BigInteger.valueOf(1); - BigInteger b = BigInteger.valueOf(1); - byte[] S = null; - BigInteger n = fromHex("04000000000000000000020108A2E0CC0D99F8A5EF"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8" - + "0289070FB05D38FF58321F2E800536D538CCDAA3D9")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect163r1 - */ - static X9ECParametersHolder sect163r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 163; - int k1 = 3; - int k2 = 6; - int k3 = 7; - - BigInteger a = fromHex("07B6882CAAEFA84F9554FF8428BD88E246D2782AE2"); - BigInteger b = fromHex("0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9"); - byte[] S = Hex.decode("24B7B137C8A14D696E6768756151756FD0DA2E5C"); - BigInteger n = fromHex("03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "0369979697AB43897789566789567F787A7876A654")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "0369979697AB43897789566789567F787A7876A654" - + "00435EDB42EFAFB2989D51FEFCE3C80988F41FF883")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect163r2 - */ - static X9ECParametersHolder sect163r2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 163; - int k1 = 3; - int k2 = 6; - int k3 = 7; - - BigInteger a = BigInteger.valueOf(1); - BigInteger b = fromHex("020A601907B8C953CA1481EB10512F78744A3205FD"); - byte[] S = Hex.decode("85E25BFE5C86226CDB12016F7553F9D0E693A268"); - BigInteger n = fromHex("040000000000000000000292FE77E70C12A4234C33"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "03F0EBA16286A2D57EA0991168D4994637E8343E36")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "03F0EBA16286A2D57EA0991168D4994637E8343E36" - + "00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect193r1 - */ - static X9ECParametersHolder sect193r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 193; - int k = 15; - - BigInteger a = fromHex("0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01"); - BigInteger b = fromHex("00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814"); - byte[] S = Hex.decode("103FAEC74D696E676875615175777FC5B191EF30"); - BigInteger n = fromHex("01000000000000000000000000C7F34A778F443ACC920EBA49"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1" - + "0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect193r2 - */ - static X9ECParametersHolder sect193r2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 193; - int k = 15; - - BigInteger a = fromHex("0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B"); - BigInteger b = fromHex("00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE"); - byte[] S = Hex.decode("10B7B4D696E676875615175137C8A16FD0DA2211"); - BigInteger n = fromHex("010000000000000000000000015AAB561B005413CCD4EE99D5"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F" - + "01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect233k1 - */ - static X9ECParametersHolder sect233k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 233; - int k = 74; - - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(1); - byte[] S = null; - BigInteger n = fromHex("8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF"); - BigInteger h = BigInteger.valueOf(4); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126" - + "01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect233r1 - */ - static X9ECParametersHolder sect233r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 233; - int k = 74; - - BigInteger a = BigInteger.valueOf(1); - BigInteger b = fromHex("0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD"); - byte[] S = Hex.decode("74D59FF07F6B413D0EA14B344B20A2DB049B50C3"); - BigInteger n = fromHex("01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B" - + "01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect239k1 - */ - static X9ECParametersHolder sect239k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 239; - int k = 158; - - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(1); - byte[] S = null; - BigInteger n = fromHex("2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5"); - BigInteger h = BigInteger.valueOf(4); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC" - + "76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect283k1 - */ - static X9ECParametersHolder sect283k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 283; - int k1 = 5; - int k2 = 7; - int k3 = 12; - - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(1); - byte[] S = null; - BigInteger n = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61"); - BigInteger h = BigInteger.valueOf(4); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836" - + "01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect283r1 - */ - static X9ECParametersHolder sect283r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 283; - int k1 = 5; - int k2 = 7; - int k3 = 12; - - BigInteger a = BigInteger.valueOf(1); - BigInteger b = fromHex("027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5"); - byte[] S = Hex.decode("77E2B07370EB0F832A6DD5B62DFC88CD06BB84BE"); - BigInteger n = fromHex("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053" - + "03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect409k1 - */ - static X9ECParametersHolder sect409k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 409; - int k = 87; - - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(1); - byte[] S = null; - BigInteger n = fromHex("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF"); - BigInteger h = BigInteger.valueOf(4); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746" - + "01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect409r1 - */ - static X9ECParametersHolder sect409r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 409; - int k = 87; - - BigInteger a = BigInteger.valueOf(1); - BigInteger b = fromHex("0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F"); - byte[] S = Hex.decode("4099B5A457F9D69F79213D094C4BCD4D4262210B"); - BigInteger n = fromHex("010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7" - + "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect571k1 - */ - static X9ECParametersHolder sect571k1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 571; - int k1 = 2; - int k2 = 5; - int k3 = 10; - - BigInteger a = ECConstants.ZERO; - BigInteger b = BigInteger.valueOf(1); - byte[] S = null; - BigInteger n = fromHex("020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001"); - BigInteger h = BigInteger.valueOf(4); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("02" - //+ "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972" - + "0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - /* - * sect571r1 - */ - static X9ECParametersHolder sect571r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - int m = 571; - int k1 = 2; - int k2 = 5; - int k3 = 10; - - BigInteger a = BigInteger.valueOf(1); - BigInteger b = fromHex("02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A"); - byte[] S = Hex.decode("2AA058F73A0E33AB486B0F610410C53A7F132310"); - BigInteger n = fromHex("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47"); - BigInteger h = BigInteger.valueOf(2); - - ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); - //ECPoint G = curve.decodePoint(Hex.decode("03" - //+ "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19")); - ECPoint G = curve.decodePoint(Hex.decode("04" - + "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19" - + "037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B")); - - return new X9ECParameters(curve, G, n, h, S); - } - }; - - - static final Hashtable objIds = new Hashtable(); - static final Hashtable curves = new Hashtable(); - static final Hashtable names = new Hashtable(); - - static void defineCurve(String name, ASN1ObjectIdentifier oid, X9ECParametersHolder holder) - { - objIds.put(name, oid); - names.put(oid, name); - curves.put(oid, holder); - } - - static - { - defineCurve("secp112r1", SECObjectIdentifiers.secp112r1, secp112r1); - defineCurve("secp112r2", SECObjectIdentifiers.secp112r2, secp112r2); - defineCurve("secp128r1", SECObjectIdentifiers.secp128r1, secp128r1); - defineCurve("secp128r2", SECObjectIdentifiers.secp128r2, secp128r2); - defineCurve("secp160k1", SECObjectIdentifiers.secp160k1, secp160k1); - defineCurve("secp160r1", SECObjectIdentifiers.secp160r1, secp160r1); - defineCurve("secp160r2", SECObjectIdentifiers.secp160r2, secp160r2); - defineCurve("secp192k1", SECObjectIdentifiers.secp192k1, secp192k1); - defineCurve("secp192r1", SECObjectIdentifiers.secp192r1, secp192r1); - defineCurve("secp224k1", SECObjectIdentifiers.secp224k1, secp224k1); - defineCurve("secp224r1", SECObjectIdentifiers.secp224r1, secp224r1); - defineCurve("secp256k1", SECObjectIdentifiers.secp256k1, secp256k1); - defineCurve("secp256r1", SECObjectIdentifiers.secp256r1, secp256r1); - defineCurve("secp384r1", SECObjectIdentifiers.secp384r1, secp384r1); - defineCurve("secp521r1", SECObjectIdentifiers.secp521r1, secp521r1); - - defineCurve("sect113r1", SECObjectIdentifiers.sect113r1, sect113r1); - defineCurve("sect113r2", SECObjectIdentifiers.sect113r2, sect113r2); - defineCurve("sect131r1", SECObjectIdentifiers.sect131r1, sect131r1); - defineCurve("sect131r2", SECObjectIdentifiers.sect131r2, sect131r2); - defineCurve("sect163k1", SECObjectIdentifiers.sect163k1, sect163k1); - defineCurve("sect163r1", SECObjectIdentifiers.sect163r1, sect163r1); - defineCurve("sect163r2", SECObjectIdentifiers.sect163r2, sect163r2); - defineCurve("sect193r1", SECObjectIdentifiers.sect193r1, sect193r1); - defineCurve("sect193r2", SECObjectIdentifiers.sect193r2, sect193r2); - defineCurve("sect233k1", SECObjectIdentifiers.sect233k1, sect233k1); - defineCurve("sect233r1", SECObjectIdentifiers.sect233r1, sect233r1); - defineCurve("sect239k1", SECObjectIdentifiers.sect239k1, sect239k1); - defineCurve("sect283k1", SECObjectIdentifiers.sect283k1, sect283k1); - defineCurve("sect283r1", SECObjectIdentifiers.sect283r1, sect283r1); - defineCurve("sect409k1", SECObjectIdentifiers.sect409k1, sect409k1); - defineCurve("sect409r1", SECObjectIdentifiers.sect409r1, sect409r1); - defineCurve("sect571k1", SECObjectIdentifiers.sect571k1, sect571k1); - defineCurve("sect571r1", SECObjectIdentifiers.sect571r1, sect571r1); - } - - public static X9ECParameters getByName( - String name) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); - - if (oid != null) - { - return getByOID(oid); - } - - return null; - } - - /** - * return the X9ECParameters object for the named curve represented by - * the passed in object identifier. Null if the curve isn't present. - * - * @param oid an object identifier representing a named curve, if present. - */ - public static X9ECParameters getByOID( - ASN1ObjectIdentifier oid) - { - X9ECParametersHolder holder = (X9ECParametersHolder)curves.get(oid); - - if (holder != null) - { - return holder.getParameters(); - } - - return null; - } - - /** - * return the object identifier signified by the passed in name. Null - * if there is no object identifier associated with name. - * - * @return the object identifier associated with name, if present. - */ - public static ASN1ObjectIdentifier getOID( - String name) - { - return (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); - } - - /** - * return the named curve name represented by the given object identifier. - */ - public static String getName( - ASN1ObjectIdentifier oid) - { - return (String)names.get(oid); - } - - /** - * returns an enumeration containing the name strings for curves - * contained in this structure. - */ - public static Enumeration getNames() - { - return objIds.keys(); - } -} diff --git a/src/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java b/src/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java deleted file mode 100644 index 8b19cd6..0000000 --- a/src/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bouncycastle.asn1.sec; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; - -public interface SECObjectIdentifiers -{ - /** - * ellipticCurve OBJECT IDENTIFIER ::= { - * iso(1) identified-organization(3) certicom(132) curve(0) - * } - */ - static final ASN1ObjectIdentifier ellipticCurve = new ASN1ObjectIdentifier("1.3.132.0"); - - static final ASN1ObjectIdentifier sect163k1 = ellipticCurve.branch("1"); - static final ASN1ObjectIdentifier sect163r1 = ellipticCurve.branch("2"); - static final ASN1ObjectIdentifier sect239k1 = ellipticCurve.branch("3"); - static final ASN1ObjectIdentifier sect113r1 = ellipticCurve.branch("4"); - static final ASN1ObjectIdentifier sect113r2 = ellipticCurve.branch("5"); - static final ASN1ObjectIdentifier secp112r1 = ellipticCurve.branch("6"); - static final ASN1ObjectIdentifier secp112r2 = ellipticCurve.branch("7"); - static final ASN1ObjectIdentifier secp160r1 = ellipticCurve.branch("8"); - static final ASN1ObjectIdentifier secp160k1 = ellipticCurve.branch("9"); - static final ASN1ObjectIdentifier secp256k1 = ellipticCurve.branch("10"); - static final ASN1ObjectIdentifier sect163r2 = ellipticCurve.branch("15"); - static final ASN1ObjectIdentifier sect283k1 = ellipticCurve.branch("16"); - static final ASN1ObjectIdentifier sect283r1 = ellipticCurve.branch("17"); - static final ASN1ObjectIdentifier sect131r1 = ellipticCurve.branch("22"); - static final ASN1ObjectIdentifier sect131r2 = ellipticCurve.branch("23"); - static final ASN1ObjectIdentifier sect193r1 = ellipticCurve.branch("24"); - static final ASN1ObjectIdentifier sect193r2 = ellipticCurve.branch("25"); - static final ASN1ObjectIdentifier sect233k1 = ellipticCurve.branch("26"); - static final ASN1ObjectIdentifier sect233r1 = ellipticCurve.branch("27"); - static final ASN1ObjectIdentifier secp128r1 = ellipticCurve.branch("28"); - static final ASN1ObjectIdentifier secp128r2 = ellipticCurve.branch("29"); - static final ASN1ObjectIdentifier secp160r2 = ellipticCurve.branch("30"); - static final ASN1ObjectIdentifier secp192k1 = ellipticCurve.branch("31"); - static final ASN1ObjectIdentifier secp224k1 = ellipticCurve.branch("32"); - static final ASN1ObjectIdentifier secp224r1 = ellipticCurve.branch("33"); - static final ASN1ObjectIdentifier secp384r1 = ellipticCurve.branch("34"); - static final ASN1ObjectIdentifier secp521r1 = ellipticCurve.branch("35"); - static final ASN1ObjectIdentifier sect409k1 = ellipticCurve.branch("36"); - static final ASN1ObjectIdentifier sect409r1 = ellipticCurve.branch("37"); - static final ASN1ObjectIdentifier sect571k1 = ellipticCurve.branch("38"); - static final ASN1ObjectIdentifier sect571r1 = ellipticCurve.branch("39"); - - static final ASN1ObjectIdentifier secp192r1 = X9ObjectIdentifiers.prime192v1; - static final ASN1ObjectIdentifier secp256r1 = X9ObjectIdentifiers.prime256v1; - -} diff --git a/src/org/bouncycastle/asn1/sec/package.html b/src/org/bouncycastle/asn1/sec/package.html deleted file mode 100644 index 5e34dec..0000000 --- a/src/org/bouncycastle/asn1/sec/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Classes for support of the SEC standard for Elliptic Curve. - - diff --git a/src/org/bouncycastle/asn1/util/ASN1Dump.java b/src/org/bouncycastle/asn1/util/ASN1Dump.java deleted file mode 100644 index 0149778..0000000 --- a/src/org/bouncycastle/asn1/util/ASN1Dump.java +++ /dev/null @@ -1,427 +0,0 @@ -package org.bouncycastle.asn1.util; - -import java.io.IOException; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.BERApplicationSpecific; -import org.bouncycastle.asn1.BERConstructedOctetString; -import org.bouncycastle.asn1.BERSequence; -import org.bouncycastle.asn1.BERSet; -import org.bouncycastle.asn1.BERTaggedObject; -import org.bouncycastle.asn1.BERTags; -import org.bouncycastle.asn1.DERApplicationSpecific; -import org.bouncycastle.asn1.DERBMPString; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERBoolean; -import org.bouncycastle.asn1.DEREnumerated; -import org.bouncycastle.asn1.DERExternal; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERIA5String; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERPrintableString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERSet; -import org.bouncycastle.asn1.DERT61String; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTCTime; -import org.bouncycastle.asn1.DERUTF8String; -import org.bouncycastle.asn1.DERVisibleString; -import org.bouncycastle.util.encoders.Hex; - -public class ASN1Dump -{ - private static final String TAB = " "; - private static final int SAMPLE_SIZE = 32; - - /** - * dump a DER object as a formatted string with indentation - * - * @param obj the ASN1Primitive to be dumped out. - */ - static void _dumpAsString( - String indent, - boolean verbose, - ASN1Primitive obj, - StringBuffer buf) - { - String nl = System.getProperty("line.separator"); - if (obj instanceof ASN1Sequence) - { - Enumeration e = ((ASN1Sequence)obj).getObjects(); - String tab = indent + TAB; - - buf.append(indent); - if (obj instanceof BERSequence) - { - buf.append("BER Sequence"); - } - else if (obj instanceof DERSequence) - { - buf.append("DER Sequence"); - } - else - { - buf.append("Sequence"); - } - - buf.append(nl); - - while (e.hasMoreElements()) - { - Object o = e.nextElement(); - - if (o == null || o.equals(new DERNull())) - { - buf.append(tab); - buf.append("NULL"); - buf.append(nl); - } - else if (o instanceof ASN1Primitive) - { - _dumpAsString(tab, verbose, (ASN1Primitive)o, buf); - } - else - { - _dumpAsString(tab, verbose, ((ASN1Encodable)o).toASN1Primitive(), buf); - } - } - } - else if (obj instanceof DERTaggedObject) - { - String tab = indent + TAB; - - buf.append(indent); - if (obj instanceof BERTaggedObject) - { - buf.append("BER Tagged ["); - } - else - { - buf.append("Tagged ["); - } - - DERTaggedObject o = (DERTaggedObject)obj; - - buf.append(Integer.toString(o.getTagNo())); - buf.append(']'); - - if (!o.isExplicit()) - { - buf.append(" IMPLICIT "); - } - - buf.append(nl); - - if (o.isEmpty()) - { - buf.append(tab); - buf.append("EMPTY"); - buf.append(nl); - } - else - { - _dumpAsString(tab, verbose, o.getObject(), buf); - } - } - else if (obj instanceof BERSet) - { - Enumeration e = ((ASN1Set)obj).getObjects(); - String tab = indent + TAB; - - buf.append(indent); - buf.append("BER Set"); - buf.append(nl); - - while (e.hasMoreElements()) - { - Object o = e.nextElement(); - - if (o == null) - { - buf.append(tab); - buf.append("NULL"); - buf.append(nl); - } - else if (o instanceof ASN1Primitive) - { - _dumpAsString(tab, verbose, (ASN1Primitive)o, buf); - } - else - { - _dumpAsString(tab, verbose, ((ASN1Encodable)o).toASN1Primitive(), buf); - } - } - } - else if (obj instanceof DERSet) - { - Enumeration e = ((ASN1Set)obj).getObjects(); - String tab = indent + TAB; - - buf.append(indent); - buf.append("DER Set"); - buf.append(nl); - - while (e.hasMoreElements()) - { - Object o = e.nextElement(); - - if (o == null) - { - buf.append(tab); - buf.append("NULL"); - buf.append(nl); - } - else if (o instanceof ASN1Primitive) - { - _dumpAsString(tab, verbose, (ASN1Primitive)o, buf); - } - else - { - _dumpAsString(tab, verbose, ((ASN1Encodable)o).toASN1Primitive(), buf); - } - } - } - else if (obj instanceof ASN1ObjectIdentifier) - { - buf.append(indent + "ObjectIdentifier(" + ((ASN1ObjectIdentifier)obj).getId() + ")" + nl); - } - else if (obj instanceof DERBoolean) - { - buf.append(indent + "Boolean(" + ((DERBoolean)obj).isTrue() + ")" + nl); - } - else if (obj instanceof ASN1Integer) - { - buf.append(indent + "Integer(" + ((ASN1Integer)obj).getValue() + ")" + nl); - } - else if (obj instanceof BERConstructedOctetString) - { - ASN1OctetString oct = (ASN1OctetString)obj; - buf.append(indent + "BER Constructed Octet String" + "[" + oct.getOctets().length + "] "); - if (verbose) - { - buf.append(dumpBinaryDataAsString(indent, oct.getOctets())); - } - else{ - buf.append(nl); - } - } - else if (obj instanceof DEROctetString) - { - ASN1OctetString oct = (ASN1OctetString)obj; - buf.append(indent + "DER Octet String" + "[" + oct.getOctets().length + "] "); - if (verbose) - { - buf.append(dumpBinaryDataAsString(indent, oct.getOctets())); - } - else{ - buf.append(nl); - } - } - else if (obj instanceof DERBitString) - { - DERBitString bt = (DERBitString)obj; - buf.append(indent + "DER Bit String" + "[" + bt.getBytes().length + ", " + bt.getPadBits() + "] "); - if (verbose) - { - buf.append(dumpBinaryDataAsString(indent, bt.getBytes())); - } - else{ - buf.append(nl); - } - } - else if (obj instanceof DERIA5String) - { - buf.append(indent + "IA5String(" + ((DERIA5String)obj).getString() + ") " + nl); - } - else if (obj instanceof DERUTF8String) - { - buf.append(indent + "UTF8String(" + ((DERUTF8String)obj).getString() + ") " + nl); - } - else if (obj instanceof DERPrintableString) - { - buf.append(indent + "PrintableString(" + ((DERPrintableString)obj).getString() + ") " + nl); - } - else if (obj instanceof DERVisibleString) - { - buf.append(indent + "VisibleString(" + ((DERVisibleString)obj).getString() + ") " + nl); - } - else if (obj instanceof DERBMPString) - { - buf.append(indent + "BMPString(" + ((DERBMPString)obj).getString() + ") " + nl); - } - else if (obj instanceof DERT61String) - { - buf.append(indent + "T61String(" + ((DERT61String)obj).getString() + ") " + nl); - } - else if (obj instanceof DERUTCTime) - { - buf.append(indent + "UTCTime(" + ((DERUTCTime)obj).getTime() + ") " + nl); - } - else if (obj instanceof DERGeneralizedTime) - { - buf.append(indent + "GeneralizedTime(" + ((DERGeneralizedTime)obj).getTime() + ") " + nl); - } - else if (obj instanceof BERApplicationSpecific) - { - buf.append(outputApplicationSpecific("BER", indent, verbose, obj, nl)); - } - else if (obj instanceof DERApplicationSpecific) - { - buf.append(outputApplicationSpecific("DER", indent, verbose, obj, nl)); - } - else if (obj instanceof DEREnumerated) - { - DEREnumerated en = (DEREnumerated) obj; - buf.append(indent + "DER Enumerated(" + en.getValue() + ")" + nl); - } - else if (obj instanceof DERExternal) - { - DERExternal ext = (DERExternal) obj; - buf.append(indent + "External " + nl); - String tab = indent + TAB; - if (ext.getDirectReference() != null) - { - buf.append(tab + "Direct Reference: " + ext.getDirectReference().getId() + nl); - } - if (ext.getIndirectReference() != null) - { - buf.append(tab + "Indirect Reference: " + ext.getIndirectReference().toString() + nl); - } - if (ext.getDataValueDescriptor() != null) - { - _dumpAsString(tab, verbose, ext.getDataValueDescriptor(), buf); - } - buf.append(tab + "Encoding: " + ext.getEncoding() + nl); - _dumpAsString(tab, verbose, ext.getExternalContent(), buf); - } - else - { - buf.append(indent + obj.toString() + nl); - } - } - - private static String outputApplicationSpecific(String type, String indent, boolean verbose, ASN1Primitive obj, String nl) - { - DERApplicationSpecific app = (DERApplicationSpecific)obj; - StringBuffer buf = new StringBuffer(); - - if (app.isConstructed()) - { - try - { - ASN1Sequence s = ASN1Sequence.getInstance(app.getObject(BERTags.SEQUENCE)); - buf.append(indent + type + " ApplicationSpecific[" + app.getApplicationTag() + "]" + nl); - for (Enumeration e = s.getObjects(); e.hasMoreElements();) - { - _dumpAsString(indent + TAB, verbose, (ASN1Primitive)e.nextElement(), buf); - } - } - catch (IOException e) - { - buf.append(e); - } - return buf.toString(); - } - - return indent + type + " ApplicationSpecific[" + app.getApplicationTag() + "] (" + new String(Hex.encode(app.getContents())) + ")" + nl; - } - - /** - * dump out a DER object as a formatted string, in non-verbose mode. - * - * @param obj the ASN1Primitive to be dumped out. - * @return the resulting string. - */ - public static String dumpAsString( - Object obj) - { - return dumpAsString(obj, false); - } - - /** - * Dump out the object as a string. - * - * @param obj the object to be dumped - * @param verbose if true, dump out the contents of octet and bit strings. - * @return the resulting string. - */ - public static String dumpAsString( - Object obj, - boolean verbose) - { - StringBuffer buf = new StringBuffer(); - - if (obj instanceof ASN1Primitive) - { - _dumpAsString("", verbose, (ASN1Primitive)obj, buf); - } - else if (obj instanceof ASN1Encodable) - { - _dumpAsString("", verbose, ((ASN1Encodable)obj).toASN1Primitive(), buf); - } - else - { - return "unknown object type " + obj.toString(); - } - - return buf.toString(); - } - - private static String dumpBinaryDataAsString(String indent, byte[] bytes) - { - String nl = System.getProperty("line.separator"); - StringBuffer buf = new StringBuffer(); - - indent += TAB; - - buf.append(nl); - for (int i = 0; i < bytes.length; i += SAMPLE_SIZE) - { - if (bytes.length - i > SAMPLE_SIZE) - { - buf.append(indent); - buf.append(new String(Hex.encode(bytes, i, SAMPLE_SIZE))); - buf.append(TAB); - buf.append(calculateAscString(bytes, i, SAMPLE_SIZE)); - buf.append(nl); - } - else - { - buf.append(indent); - buf.append(new String(Hex.encode(bytes, i, bytes.length - i))); - for (int j = bytes.length - i; j != SAMPLE_SIZE; j++) - { - buf.append(" "); - } - buf.append(TAB); - buf.append(calculateAscString(bytes, i, bytes.length - i)); - buf.append(nl); - } - } - - return buf.toString(); - } - - private static String calculateAscString(byte[] bytes, int off, int len) - { - StringBuffer buf = new StringBuffer(); - - for (int i = off; i != off + len; i++) - { - if (bytes[i] >= ' ' && bytes[i] <= '~') - { - buf.append((char)bytes[i]); - } - } - - return buf.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/util/DERDump.java b/src/org/bouncycastle/asn1/util/DERDump.java deleted file mode 100644 index 78875ff..0000000 --- a/src/org/bouncycastle/asn1/util/DERDump.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.asn1.util; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Primitive; - -/** - * @deprecated use ASN1Dump. - */ -public class DERDump - extends ASN1Dump -{ - /** - * dump out a DER object as a formatted string - * - * @param obj the ASN1Primitive to be dumped out. - */ - public static String dumpAsString( - ASN1Primitive obj) - { - StringBuffer buf = new StringBuffer(); - - _dumpAsString("", false, obj, buf); - - return buf.toString(); - } - - /** - * dump out a DER object as a formatted string - * - * @param obj the ASN1Primitive to be dumped out. - */ - public static String dumpAsString( - ASN1Encodable obj) - { - StringBuffer buf = new StringBuffer(); - - _dumpAsString("", false, obj.toASN1Primitive(), buf); - - return buf.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/util/package.html b/src/org/bouncycastle/asn1/util/package.html deleted file mode 100644 index 1db893d..0000000 --- a/src/org/bouncycastle/asn1/util/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -An ASN.1 dump utility. - - diff --git a/src/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java b/src/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java deleted file mode 100644 index 7f283f9..0000000 --- a/src/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.bouncycastle.asn1.x500; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -public class AttributeTypeAndValue - extends ASN1Object -{ - private ASN1ObjectIdentifier type; - private ASN1Encodable value; - - private AttributeTypeAndValue(ASN1Sequence seq) - { - type = (ASN1ObjectIdentifier)seq.getObjectAt(0); - value = (ASN1Encodable)seq.getObjectAt(1); - } - - public static AttributeTypeAndValue getInstance(Object o) - { - if (o instanceof AttributeTypeAndValue) - { - return (AttributeTypeAndValue)o; - } - else if (o != null) - { - return new AttributeTypeAndValue(ASN1Sequence.getInstance(o)); - } - - throw new IllegalArgumentException("null value in getInstance()"); - } - - public AttributeTypeAndValue( - ASN1ObjectIdentifier type, - ASN1Encodable value) - { - this.type = type; - this.value = value; - } - - public ASN1ObjectIdentifier getType() - { - return type; - } - - public ASN1Encodable getValue() - { - return value; - } - - /** - *
        -     * AttributeTypeAndValue ::= SEQUENCE {
        -     *           type         OBJECT IDENTIFIER,
        -     *           value        ANY DEFINED BY type }
        -     * 
        - * @return a basic ASN.1 object representation. - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(type); - v.add(value); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x500/DirectoryString.java b/src/org/bouncycastle/asn1/x500/DirectoryString.java deleted file mode 100644 index cf7563e..0000000 --- a/src/org/bouncycastle/asn1/x500/DirectoryString.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.bouncycastle.asn1.x500; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1String; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBMPString; -import org.bouncycastle.asn1.DERPrintableString; -import org.bouncycastle.asn1.DERT61String; -import org.bouncycastle.asn1.DERUTF8String; -import org.bouncycastle.asn1.DERUniversalString; - -public class DirectoryString - extends ASN1Object - implements ASN1Choice, ASN1String -{ - private ASN1String string; - - public static DirectoryString getInstance(Object o) - { - if (o == null || o instanceof DirectoryString) - { - return (DirectoryString)o; - } - - if (o instanceof DERT61String) - { - return new DirectoryString((DERT61String)o); - } - - if (o instanceof DERPrintableString) - { - return new DirectoryString((DERPrintableString)o); - } - - if (o instanceof DERUniversalString) - { - return new DirectoryString((DERUniversalString)o); - } - - if (o instanceof DERUTF8String) - { - return new DirectoryString((DERUTF8String)o); - } - - if (o instanceof DERBMPString) - { - return new DirectoryString((DERBMPString)o); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + o.getClass().getName()); - } - - public static DirectoryString getInstance(ASN1TaggedObject o, boolean explicit) - { - if (!explicit) - { - throw new IllegalArgumentException("choice item must be explicitly tagged"); - } - - return getInstance(o.getObject()); - } - - private DirectoryString( - DERT61String string) - { - this.string = string; - } - - private DirectoryString( - DERPrintableString string) - { - this.string = string; - } - - private DirectoryString( - DERUniversalString string) - { - this.string = string; - } - - private DirectoryString( - DERUTF8String string) - { - this.string = string; - } - - private DirectoryString( - DERBMPString string) - { - this.string = string; - } - - public DirectoryString(String string) - { - this.string = new DERUTF8String(string); - } - - public String getString() - { - return string.getString(); - } - - public String toString() - { - return string.getString(); - } - - /** - *
        -     *  DirectoryString ::= CHOICE {
        -     *    teletexString               TeletexString (SIZE (1..MAX)),
        -     *    printableString             PrintableString (SIZE (1..MAX)),
        -     *    universalString             UniversalString (SIZE (1..MAX)),
        -     *    utf8String                  UTF8String (SIZE (1..MAX)),
        -     *    bmpString                   BMPString (SIZE (1..MAX))  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - return ((ASN1Encodable)string).toASN1Primitive(); - } -} diff --git a/src/org/bouncycastle/asn1/x500/RDN.java b/src/org/bouncycastle/asn1/x500/RDN.java deleted file mode 100644 index f51c261..0000000 --- a/src/org/bouncycastle/asn1/x500/RDN.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.bouncycastle.asn1.x500; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERSet; - -public class RDN - extends ASN1Object -{ - private ASN1Set values; - - private RDN(ASN1Set values) - { - this.values = values; - } - - public static RDN getInstance(Object obj) - { - if (obj instanceof RDN) - { - return (RDN)obj; - } - else if (obj != null) - { - return new RDN(ASN1Set.getInstance(obj)); - } - - return null; - } - - /** - * Create a single valued RDN. - * - * @param oid RDN type. - * @param value RDN value. - */ - public RDN(ASN1ObjectIdentifier oid, ASN1Encodable value) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(oid); - v.add(value); - - this.values = new DERSet(new DERSequence(v)); - } - - public RDN(AttributeTypeAndValue attrTAndV) - { - this.values = new DERSet(attrTAndV); - } - - /** - * Create a multi-valued RDN. - * - * @param aAndVs attribute type/value pairs making up the RDN - */ - public RDN(AttributeTypeAndValue[] aAndVs) - { - this.values = new DERSet(aAndVs); - } - - public boolean isMultiValued() - { - return this.values.size() > 1; - } - - /** - * Return the number of AttributeTypeAndValue objects in this RDN, - * - * @return size of RDN, greater than 1 if multi-valued. - */ - public int size() - { - return this.values.size(); - } - - public AttributeTypeAndValue getFirst() - { - if (this.values.size() == 0) - { - return null; - } - - return AttributeTypeAndValue.getInstance(this.values.getObjectAt(0)); - } - - public AttributeTypeAndValue[] getTypesAndValues() - { - AttributeTypeAndValue[] tmp = new AttributeTypeAndValue[values.size()]; - - for (int i = 0; i != tmp.length; i++) - { - tmp[i] = AttributeTypeAndValue.getInstance(values.getObjectAt(i)); - } - - return tmp; - } - - /** - *
        -     * RelativeDistinguishedName ::=
        -     *                     SET OF AttributeTypeAndValue
        -
        -     * AttributeTypeAndValue ::= SEQUENCE {
        -     *        type     AttributeType,
        -     *        value    AttributeValue }
        -     * 
        - * @return this object as an ASN1Primitive type - */ - public ASN1Primitive toASN1Primitive() - { - return values; - } -} diff --git a/src/org/bouncycastle/asn1/x500/X500Name.java b/src/org/bouncycastle/asn1/x500/X500Name.java deleted file mode 100644 index 50e57c5..0000000 --- a/src/org/bouncycastle/asn1/x500/X500Name.java +++ /dev/null @@ -1,326 +0,0 @@ -package org.bouncycastle.asn1.x500; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x500.style.BCStyle; - -/** - *
        - *     Name ::= CHOICE {
        - *                       RDNSequence }
        - *
        - *     RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
        - *
        - *     RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
        - *
        - *     AttributeTypeAndValue ::= SEQUENCE {
        - *                                   type  OBJECT IDENTIFIER,
        - *                                   value ANY }
        - * 
        - */ -public class X500Name - extends ASN1Object - implements ASN1Choice -{ - private static X500NameStyle defaultStyle = BCStyle.INSTANCE; - - private boolean isHashCodeCalculated; - private int hashCodeValue; - - private X500NameStyle style; - private RDN[] rdns; - - public X500Name(X500NameStyle style, X500Name name) - { - this.rdns = name.rdns; - this.style = style; - } - - /** - * Return a X500Name based on the passed in tagged object. - * - * @param obj tag object holding name. - * @param explicit true if explicitly tagged false otherwise. - * @return the X500Name - */ - public static X500Name getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - // must be true as choice item - return getInstance(ASN1Sequence.getInstance(obj, true)); - } - - public static X500Name getInstance( - Object obj) - { - if (obj instanceof X500Name) - { - return (X500Name)obj; - } - else if (obj != null) - { - return new X500Name(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public static X500Name getInstance( - X500NameStyle style, - Object obj) - { - if (obj instanceof X500Name) - { - return getInstance(style, ((X500Name)obj).toASN1Primitive()); - } - else if (obj != null) - { - return new X500Name(style, ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor from ASN1Sequence - * - * the principal will be a list of constructed sets, each containing an (OID, String) pair. - */ - private X500Name( - ASN1Sequence seq) - { - this(defaultStyle, seq); - } - - private X500Name( - X500NameStyle style, - ASN1Sequence seq) - { - this.style = style; - this.rdns = new RDN[seq.size()]; - - int index = 0; - - for (Enumeration e = seq.getObjects(); e.hasMoreElements();) - { - rdns[index++] = RDN.getInstance(e.nextElement()); - } - } - - public X500Name( - RDN[] rDNs) - { - this(defaultStyle, rDNs); - } - - public X500Name( - X500NameStyle style, - RDN[] rDNs) - { - this.rdns = rDNs; - this.style = style; - } - - public X500Name( - String dirName) - { - this(defaultStyle, dirName); - } - - public X500Name( - X500NameStyle style, - String dirName) - { - this(style.fromString(dirName)); - - this.style = style; - } - - /** - * return an array of RDNs in structure order. - * - * @return an array of RDN objects. - */ - public RDN[] getRDNs() - { - RDN[] tmp = new RDN[this.rdns.length]; - - System.arraycopy(rdns, 0, tmp, 0, tmp.length); - - return tmp; - } - - /** - * return an array of OIDs contained in the attribute type of each RDN in structure order. - * - * @return an array, possibly zero length, of ASN1ObjectIdentifiers objects. - */ - public ASN1ObjectIdentifier[] getAttributeTypes() - { - int count = 0; - - for (int i = 0; i != rdns.length; i++) - { - RDN rdn = rdns[i]; - - count += rdn.size(); - } - - ASN1ObjectIdentifier[] res = new ASN1ObjectIdentifier[count]; - - count = 0; - - for (int i = 0; i != rdns.length; i++) - { - RDN rdn = rdns[i]; - - if (rdn.isMultiValued()) - { - AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); - for (int j = 0; j != attr.length; j++) - { - res[count++] = attr[j].getType(); - } - } - else if (rdn.size() != 0) - { - res[count++] = rdn.getFirst().getType(); - } - } - - return res; - } - - /** - * return an array of RDNs containing the attribute type given by OID in structure order. - * - * @param attributeType the type OID we are looking for. - * @return an array, possibly zero length, of RDN objects. - */ - public RDN[] getRDNs(ASN1ObjectIdentifier attributeType) - { - RDN[] res = new RDN[rdns.length]; - int count = 0; - - for (int i = 0; i != rdns.length; i++) - { - RDN rdn = rdns[i]; - - if (rdn.isMultiValued()) - { - AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); - for (int j = 0; j != attr.length; j++) - { - if (attr[j].getType().equals(attributeType)) - { - res[count++] = rdn; - break; - } - } - } - else - { - if (rdn.getFirst().getType().equals(attributeType)) - { - res[count++] = rdn; - } - } - } - - RDN[] tmp = new RDN[count]; - - System.arraycopy(res, 0, tmp, 0, tmp.length); - - return tmp; - } - - public ASN1Primitive toASN1Primitive() - { - return new DERSequence(rdns); - } - - public int hashCode() - { - if (isHashCodeCalculated) - { - return hashCodeValue; - } - - isHashCodeCalculated = true; - - hashCodeValue = style.calculateHashCode(this); - - return hashCodeValue; - } - - /** - * test for equality - note: case is ignored. - */ - public boolean equals(Object obj) - { - if (obj == this) - { - return true; - } - - if (!(obj instanceof X500Name || obj instanceof ASN1Sequence)) - { - return false; - } - - ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); - - if (this.toASN1Primitive().equals(derO)) - { - return true; - } - - try - { - return style.areEqual(this, new X500Name(ASN1Sequence.getInstance(((ASN1Encodable)obj).toASN1Primitive()))); - } - catch (Exception e) - { - return false; - } - } - - public String toString() - { - return style.toString(this); - } - - /** - * Set the default style for X500Name construction. - * - * @param style an X500NameStyle - */ - public static void setDefaultStyle(X500NameStyle style) - { - if (style == null) - { - throw new NullPointerException("cannot set style to null"); - } - - defaultStyle = style; - } - - /** - * Return the current default style. - * - * @return default style for X500Name construction. - */ - public static X500NameStyle getDefaultStyle() - { - return defaultStyle; - } -} diff --git a/src/org/bouncycastle/asn1/x500/X500NameBuilder.java b/src/org/bouncycastle/asn1/x500/X500NameBuilder.java deleted file mode 100644 index 30e871c..0000000 --- a/src/org/bouncycastle/asn1/x500/X500NameBuilder.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.bouncycastle.asn1.x500; - -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -public class X500NameBuilder -{ - private X500NameStyle template; - private Vector rdns = new Vector(); - - public X500NameBuilder(X500NameStyle template) - { - this.template = template; - } - - public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, String value) - { - this.addRDN(oid, template.stringToValue(oid, value)); - - return this; - } - - public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, ASN1Encodable value) - { - rdns.addElement(new RDN(oid, value)); - - return this; - } - - public X500NameBuilder addRDN(AttributeTypeAndValue attrTAndV) - { - rdns.addElement(new RDN(attrTAndV)); - - return this; - } - - public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, String[] values) - { - ASN1Encodable[] vals = new ASN1Encodable[values.length]; - - for (int i = 0; i != vals.length; i++) - { - vals[i] = template.stringToValue(oids[i], values[i]); - } - - return addMultiValuedRDN(oids, vals); - } - - public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, ASN1Encodable[] values) - { - AttributeTypeAndValue[] avs = new AttributeTypeAndValue[oids.length]; - - for (int i = 0; i != oids.length; i++) - { - avs[i] = new AttributeTypeAndValue(oids[i], values[i]); - } - - return addMultiValuedRDN(avs); - } - - public X500NameBuilder addMultiValuedRDN(AttributeTypeAndValue[] attrTAndVs) - { - rdns.addElement(new RDN(attrTAndVs)); - - return this; - } - - public X500Name build() - { - RDN[] vals = new RDN[rdns.size()]; - - for (int i = 0; i != vals.length; i++) - { - vals[i] = (RDN)rdns.elementAt(i); - } - - return new X500Name(template, vals); - } -} diff --git a/src/org/bouncycastle/asn1/x500/X500NameStyle.java b/src/org/bouncycastle/asn1/x500/X500NameStyle.java deleted file mode 100644 index 7a7c837..0000000 --- a/src/org/bouncycastle/asn1/x500/X500NameStyle.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bouncycastle.asn1.x500; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -/** - * It turns out that the number of standard ways the fields in a DN should be - * encoded into their ASN.1 counterparts is rapidly approaching the - * number of machines on the internet. By default the X500Name class - * will produce UTF8Strings in line with the current recommendations (RFC 3280). - *

        - */ -public interface X500NameStyle -{ - /** - * Convert the passed in String value into the appropriate ASN.1 - * encoded object. - * - * @param oid the oid associated with the value in the DN. - * @param value the value of the particular DN component. - * @return the ASN.1 equivalent for the value. - */ - ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value); - - ASN1ObjectIdentifier attrNameToOID(String attrName); - - boolean areEqual(X500Name name1, X500Name name2); - - RDN[] fromString(String dirName); - - int calculateHashCode(X500Name name); - - String toString(X500Name name); -} diff --git a/src/org/bouncycastle/asn1/x500/style/BCStrictStyle.java b/src/org/bouncycastle/asn1/x500/style/BCStrictStyle.java deleted file mode 100644 index af10fef..0000000 --- a/src/org/bouncycastle/asn1/x500/style/BCStrictStyle.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.bouncycastle.asn1.x500.style; - -import org.bouncycastle.asn1.x500.RDN; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * Variation of BCStyle that insists on strict ordering for equality - * and hashCode comparisons - */ -public class BCStrictStyle - extends BCStyle -{ - public boolean areEqual(X500Name name1, X500Name name2) - { - RDN[] rdns1 = name1.getRDNs(); - RDN[] rdns2 = name2.getRDNs(); - - if (rdns1.length != rdns2.length) - { - return false; - } - - for (int i = 0; i != rdns1.length; i++) - { - if (rdnAreEqual(rdns1[i], rdns2[i])) - { - return false; - } - } - - return true; - } -} diff --git a/src/org/bouncycastle/asn1/x500/style/BCStyle.java b/src/org/bouncycastle/asn1/x500/style/BCStyle.java deleted file mode 100644 index 32f93ff..0000000 --- a/src/org/bouncycastle/asn1/x500/style/BCStyle.java +++ /dev/null @@ -1,544 +0,0 @@ -package org.bouncycastle.asn1.x500.style; - -import java.io.IOException; -import java.util.Hashtable; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERIA5String; -import org.bouncycastle.asn1.DERPrintableString; -import org.bouncycastle.asn1.DERUTF8String; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.x500.AttributeTypeAndValue; -import org.bouncycastle.asn1.x500.RDN; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.asn1.x500.X500NameStyle; -import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; - -public class BCStyle - implements X500NameStyle -{ - public static final X500NameStyle INSTANCE = new BCStyle(); - - /** - * country code - StringType(SIZE(2)) - */ - public static final ASN1ObjectIdentifier C = new ASN1ObjectIdentifier("2.5.4.6"); - - /** - * organization - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier O = new ASN1ObjectIdentifier("2.5.4.10"); - - /** - * organizational unit name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier OU = new ASN1ObjectIdentifier("2.5.4.11"); - - /** - * Title - */ - public static final ASN1ObjectIdentifier T = new ASN1ObjectIdentifier("2.5.4.12"); - - /** - * common name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier CN = new ASN1ObjectIdentifier("2.5.4.3"); - - /** - * device serial number name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier SN = new ASN1ObjectIdentifier("2.5.4.5"); - - /** - * street - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier STREET = new ASN1ObjectIdentifier("2.5.4.9"); - - /** - * device serial number name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier SERIALNUMBER = SN; - - /** - * locality name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier L = new ASN1ObjectIdentifier("2.5.4.7"); - - /** - * state, or province name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier ST = new ASN1ObjectIdentifier("2.5.4.8"); - - /** - * Naming attributes of type X520name - */ - public static final ASN1ObjectIdentifier SURNAME = new ASN1ObjectIdentifier("2.5.4.4"); - public static final ASN1ObjectIdentifier GIVENNAME = new ASN1ObjectIdentifier("2.5.4.42"); - public static final ASN1ObjectIdentifier INITIALS = new ASN1ObjectIdentifier("2.5.4.43"); - public static final ASN1ObjectIdentifier GENERATION = new ASN1ObjectIdentifier("2.5.4.44"); - public static final ASN1ObjectIdentifier UNIQUE_IDENTIFIER = new ASN1ObjectIdentifier("2.5.4.45"); - - /** - * businessCategory - DirectoryString(SIZE(1..128) - */ - public static final ASN1ObjectIdentifier BUSINESS_CATEGORY = new ASN1ObjectIdentifier( - "2.5.4.15"); - - /** - * postalCode - DirectoryString(SIZE(1..40) - */ - public static final ASN1ObjectIdentifier POSTAL_CODE = new ASN1ObjectIdentifier( - "2.5.4.17"); - - /** - * dnQualifier - DirectoryString(SIZE(1..64) - */ - public static final ASN1ObjectIdentifier DN_QUALIFIER = new ASN1ObjectIdentifier( - "2.5.4.46"); - - /** - * RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) - */ - public static final ASN1ObjectIdentifier PSEUDONYM = new ASN1ObjectIdentifier( - "2.5.4.65"); - - - /** - * RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z - */ - public static final ASN1ObjectIdentifier DATE_OF_BIRTH = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.1"); - - /** - * RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) - */ - public static final ASN1ObjectIdentifier PLACE_OF_BIRTH = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.2"); - - /** - * RFC 3039 Gender - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" - */ - public static final ASN1ObjectIdentifier GENDER = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.3"); - - /** - * RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 - * codes only - */ - public static final ASN1ObjectIdentifier COUNTRY_OF_CITIZENSHIP = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.4"); - - /** - * RFC 3039 CountryOfResidence - PrintableString (SIZE (2)) -- ISO 3166 - * codes only - */ - public static final ASN1ObjectIdentifier COUNTRY_OF_RESIDENCE = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.5"); - - - /** - * ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) - */ - public static final ASN1ObjectIdentifier NAME_AT_BIRTH = new ASN1ObjectIdentifier("1.3.36.8.3.14"); - - /** - * RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF - * DirectoryString(SIZE(1..30)) - */ - public static final ASN1ObjectIdentifier POSTAL_ADDRESS = new ASN1ObjectIdentifier("2.5.4.16"); - - /** - * RFC 2256 dmdName - */ - public static final ASN1ObjectIdentifier DMD_NAME = new ASN1ObjectIdentifier("2.5.4.54"); - - /** - * id-at-telephoneNumber - */ - public static final ASN1ObjectIdentifier TELEPHONE_NUMBER = X509ObjectIdentifiers.id_at_telephoneNumber; - - /** - * id-at-name - */ - public static final ASN1ObjectIdentifier NAME = X509ObjectIdentifiers.id_at_name; - - /** - * Email address (RSA PKCS#9 extension) - IA5String. - *

        Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here. - */ - public static final ASN1ObjectIdentifier EmailAddress = PKCSObjectIdentifiers.pkcs_9_at_emailAddress; - - /** - * more from PKCS#9 - */ - public static final ASN1ObjectIdentifier UnstructuredName = PKCSObjectIdentifiers.pkcs_9_at_unstructuredName; - public static final ASN1ObjectIdentifier UnstructuredAddress = PKCSObjectIdentifiers.pkcs_9_at_unstructuredAddress; - - /** - * email address in Verisign certificates - */ - public static final ASN1ObjectIdentifier E = EmailAddress; - - /* - * others... - */ - public static final ASN1ObjectIdentifier DC = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25"); - - /** - * LDAP User id. - */ - public static final ASN1ObjectIdentifier UID = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1"); - - /** - * default look up table translating OID values into their common symbols following - * the convention in RFC 2253 with a few extras - */ - private static final Hashtable DefaultSymbols = new Hashtable(); - - /** - * look up table translating common symbols into their OIDS. - */ - private static final Hashtable DefaultLookUp = new Hashtable(); - - static - { - DefaultSymbols.put(C, "C"); - DefaultSymbols.put(O, "O"); - DefaultSymbols.put(T, "T"); - DefaultSymbols.put(OU, "OU"); - DefaultSymbols.put(CN, "CN"); - DefaultSymbols.put(L, "L"); - DefaultSymbols.put(ST, "ST"); - DefaultSymbols.put(SN, "SERIALNUMBER"); - DefaultSymbols.put(EmailAddress, "E"); - DefaultSymbols.put(DC, "DC"); - DefaultSymbols.put(UID, "UID"); - DefaultSymbols.put(STREET, "STREET"); - DefaultSymbols.put(SURNAME, "SURNAME"); - DefaultSymbols.put(GIVENNAME, "GIVENNAME"); - DefaultSymbols.put(INITIALS, "INITIALS"); - DefaultSymbols.put(GENERATION, "GENERATION"); - DefaultSymbols.put(UnstructuredAddress, "unstructuredAddress"); - DefaultSymbols.put(UnstructuredName, "unstructuredName"); - DefaultSymbols.put(UNIQUE_IDENTIFIER, "UniqueIdentifier"); - DefaultSymbols.put(DN_QUALIFIER, "DN"); - DefaultSymbols.put(PSEUDONYM, "Pseudonym"); - DefaultSymbols.put(POSTAL_ADDRESS, "PostalAddress"); - DefaultSymbols.put(NAME_AT_BIRTH, "NameAtBirth"); - DefaultSymbols.put(COUNTRY_OF_CITIZENSHIP, "CountryOfCitizenship"); - DefaultSymbols.put(COUNTRY_OF_RESIDENCE, "CountryOfResidence"); - DefaultSymbols.put(GENDER, "Gender"); - DefaultSymbols.put(PLACE_OF_BIRTH, "PlaceOfBirth"); - DefaultSymbols.put(DATE_OF_BIRTH, "DateOfBirth"); - DefaultSymbols.put(POSTAL_CODE, "PostalCode"); - DefaultSymbols.put(BUSINESS_CATEGORY, "BusinessCategory"); - DefaultSymbols.put(TELEPHONE_NUMBER, "TelephoneNumber"); - DefaultSymbols.put(NAME, "Name"); - - DefaultLookUp.put("c", C); - DefaultLookUp.put("o", O); - DefaultLookUp.put("t", T); - DefaultLookUp.put("ou", OU); - DefaultLookUp.put("cn", CN); - DefaultLookUp.put("l", L); - DefaultLookUp.put("st", ST); - DefaultLookUp.put("sn", SN); - DefaultLookUp.put("serialnumber", SN); - DefaultLookUp.put("street", STREET); - DefaultLookUp.put("emailaddress", E); - DefaultLookUp.put("dc", DC); - DefaultLookUp.put("e", E); - DefaultLookUp.put("uid", UID); - DefaultLookUp.put("surname", SURNAME); - DefaultLookUp.put("givenname", GIVENNAME); - DefaultLookUp.put("initials", INITIALS); - DefaultLookUp.put("generation", GENERATION); - DefaultLookUp.put("unstructuredaddress", UnstructuredAddress); - DefaultLookUp.put("unstructuredname", UnstructuredName); - DefaultLookUp.put("uniqueidentifier", UNIQUE_IDENTIFIER); - DefaultLookUp.put("dn", DN_QUALIFIER); - DefaultLookUp.put("pseudonym", PSEUDONYM); - DefaultLookUp.put("postaladdress", POSTAL_ADDRESS); - DefaultLookUp.put("nameofbirth", NAME_AT_BIRTH); - DefaultLookUp.put("countryofcitizenship", COUNTRY_OF_CITIZENSHIP); - DefaultLookUp.put("countryofresidence", COUNTRY_OF_RESIDENCE); - DefaultLookUp.put("gender", GENDER); - DefaultLookUp.put("placeofbirth", PLACE_OF_BIRTH); - DefaultLookUp.put("dateofbirth", DATE_OF_BIRTH); - DefaultLookUp.put("postalcode", POSTAL_CODE); - DefaultLookUp.put("businesscategory", BUSINESS_CATEGORY); - DefaultLookUp.put("telephonenumber", TELEPHONE_NUMBER); - DefaultLookUp.put("name", NAME); - } - - protected BCStyle() - { - - } - - public ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value) - { - if (value.length() != 0 && value.charAt(0) == '#') - { - try - { - return IETFUtils.valueFromHexString(value, 1); - } - catch (IOException e) - { - throw new RuntimeException("can't recode value for oid " + oid.getId()); - } - } - else - { - if (value.length() != 0 && value.charAt(0) == '\\') - { - value = value.substring(1); - } - if (oid.equals(EmailAddress) || oid.equals(DC)) - { - return new DERIA5String(value); - } - else if (oid.equals(DATE_OF_BIRTH)) // accept time string as well as # (for compatibility) - { - return new DERGeneralizedTime(value); - } - else if (oid.equals(C) || oid.equals(SN) || oid.equals(DN_QUALIFIER) - || oid.equals(TELEPHONE_NUMBER)) - { - return new DERPrintableString(value); - } - } - - return new DERUTF8String(value); - } - - public ASN1ObjectIdentifier attrNameToOID(String attrName) - { - return IETFUtils.decodeAttrName(attrName, DefaultLookUp); - } - - public boolean areEqual(X500Name name1, X500Name name2) - { - RDN[] rdns1 = name1.getRDNs(); - RDN[] rdns2 = name2.getRDNs(); - - if (rdns1.length != rdns2.length) - { - return false; - } - - boolean reverse = false; - - if (rdns1[0].getFirst() != null && rdns2[0].getFirst() != null) - { - reverse = !rdns1[0].getFirst().getType().equals(rdns2[0].getFirst().getType()); // guess forward - } - - for (int i = 0; i != rdns1.length; i++) - { - if (!foundMatch(reverse, rdns1[i], rdns2)) - { - return false; - } - } - - return true; - } - - private boolean foundMatch(boolean reverse, RDN rdn, RDN[] possRDNs) - { - if (reverse) - { - for (int i = possRDNs.length - 1; i >= 0; i--) - { - if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) - { - possRDNs[i] = null; - return true; - } - } - } - else - { - for (int i = 0; i != possRDNs.length; i++) - { - if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) - { - possRDNs[i] = null; - return true; - } - } - } - - return false; - } - - protected boolean rdnAreEqual(RDN rdn1, RDN rdn2) - { - if (rdn1.isMultiValued()) - { - if (rdn2.isMultiValued()) - { - AttributeTypeAndValue[] atvs1 = rdn1.getTypesAndValues(); - AttributeTypeAndValue[] atvs2 = rdn2.getTypesAndValues(); - - if (atvs1.length != atvs2.length) - { - return false; - } - - for (int i = 0; i != atvs1.length; i++) - { - if (!atvAreEqual(atvs1[i], atvs2[i])) - { - return false; - } - } - } - else - { - return false; - } - } - else - { - if (!rdn2.isMultiValued()) - { - return atvAreEqual(rdn1.getFirst(), rdn2.getFirst()); - } - else - { - return false; - } - } - - return true; - } - - private boolean atvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2) - { - if (atv1 == atv2) - { - return true; - } - - if (atv1 == null) - { - return false; - } - - if (atv2 == null) - { - return false; - } - - ASN1ObjectIdentifier o1 = atv1.getType(); - ASN1ObjectIdentifier o2 = atv2.getType(); - - if (!o1.equals(o2)) - { - return false; - } - - String v1 = IETFUtils.canonicalize(IETFUtils.valueToString(atv1.getValue())); - String v2 = IETFUtils.canonicalize(IETFUtils.valueToString(atv2.getValue())); - - if (!v1.equals(v2)) - { - return false; - } - - return true; - } - - public RDN[] fromString(String dirName) - { - return IETFUtils.rDNsFromString(dirName, this); - } - - public int calculateHashCode(X500Name name) - { - int hashCodeValue = 0; - RDN[] rdns = name.getRDNs(); - - // this needs to be order independent, like equals - for (int i = 0; i != rdns.length; i++) - { - if (rdns[i].isMultiValued()) - { - AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); - - for (int j = 0; j != atv.length; j++) - { - hashCodeValue ^= atv[j].getType().hashCode(); - hashCodeValue ^= calcHashCode(atv[j].getValue()); - } - } - else - { - hashCodeValue ^= rdns[i].getFirst().getType().hashCode(); - hashCodeValue ^= calcHashCode(rdns[i].getFirst().getValue()); - } - } - - return hashCodeValue; - } - - private int calcHashCode(ASN1Encodable enc) - { - String value = IETFUtils.valueToString(enc); - - value = IETFUtils.canonicalize(value); - - return value.hashCode(); - } - - public String toString(X500Name name) - { - StringBuffer buf = new StringBuffer(); - boolean first = true; - - RDN[] rdns = name.getRDNs(); - - for (int i = 0; i < rdns.length; i++) - { - if (first) - { - first = false; - } - else - { - buf.append(','); - } - - if (rdns[i].isMultiValued()) - { - AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); - boolean firstAtv = true; - - for (int j = 0; j != atv.length; j++) - { - if (firstAtv) - { - firstAtv = false; - } - else - { - buf.append('+'); - } - - IETFUtils.appendTypeAndValue(buf, atv[j], DefaultSymbols); - } - } - else - { - IETFUtils.appendTypeAndValue(buf, rdns[i].getFirst(), DefaultSymbols); - } - } - - return buf.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/x500/style/IETFUtils.java b/src/org/bouncycastle/asn1/x500/style/IETFUtils.java deleted file mode 100644 index 5c60c89..0000000 --- a/src/org/bouncycastle/asn1/x500/style/IETFUtils.java +++ /dev/null @@ -1,301 +0,0 @@ -package org.bouncycastle.asn1.x500.style; - -import java.io.IOException; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1String; -import org.bouncycastle.asn1.DERUniversalString; -import org.bouncycastle.asn1.x500.AttributeTypeAndValue; -import org.bouncycastle.asn1.x500.RDN; -import org.bouncycastle.asn1.x500.X500NameBuilder; -import org.bouncycastle.asn1.x500.X500NameStyle; -import org.bouncycastle.util.Strings; -import org.bouncycastle.util.encoders.Hex; - -public class IETFUtils -{ - public static RDN[] rDNsFromString(String name, X500NameStyle x500Style) - { - X500NameTokenizer nTok = new X500NameTokenizer(name); - X500NameBuilder builder = new X500NameBuilder(x500Style); - - while (nTok.hasMoreTokens()) - { - String token = nTok.nextToken(); - int index = token.indexOf('='); - - if (index == -1) - { - throw new IllegalArgumentException("badly formated directory string"); - } - - String attr = token.substring(0, index); - String value = token.substring(index + 1); - ASN1ObjectIdentifier oid = x500Style.attrNameToOID(attr); - - if (value.indexOf('+') > 0) - { - X500NameTokenizer vTok = new X500NameTokenizer(value, '+'); - String v = vTok.nextToken(); - - Vector oids = new Vector(); - Vector values = new Vector(); - - oids.addElement(oid); - values.addElement(v); - - while (vTok.hasMoreTokens()) - { - String sv = vTok.nextToken(); - int ndx = sv.indexOf('='); - - String nm = sv.substring(0, ndx); - String vl = sv.substring(ndx + 1); - - oids.addElement(x500Style.attrNameToOID(nm)); - values.addElement(vl); - } - - builder.addMultiValuedRDN(toOIDArray(oids), toValueArray(values)); - } - else - { - builder.addRDN(oid, value); - } - } - - return builder.build().getRDNs(); - } - - private static String[] toValueArray(Vector values) - { - String[] tmp = new String[values.size()]; - - for (int i = 0; i != tmp.length; i++) - { - tmp[i] = (String)values.elementAt(i); - } - - return tmp; - } - - private static ASN1ObjectIdentifier[] toOIDArray(Vector oids) - { - ASN1ObjectIdentifier[] tmp = new ASN1ObjectIdentifier[oids.size()]; - - for (int i = 0; i != tmp.length; i++) - { - tmp[i] = (ASN1ObjectIdentifier)oids.elementAt(i); - } - - return tmp; - } - - public static ASN1ObjectIdentifier decodeAttrName( - String name, - Hashtable lookUp) - { - if (Strings.toUpperCase(name).startsWith("OID.")) - { - return new ASN1ObjectIdentifier(name.substring(4)); - } - else if (name.charAt(0) >= '0' && name.charAt(0) <= '9') - { - return new ASN1ObjectIdentifier(name); - } - - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)lookUp.get(Strings.toLowerCase(name)); - if (oid == null) - { - throw new IllegalArgumentException("Unknown object id - " + name + " - passed to distinguished name"); - } - - return oid; - } - - public static ASN1Encodable valueFromHexString( - String str, - int off) - throws IOException - { - str = Strings.toLowerCase(str); - byte[] data = new byte[(str.length() - off) / 2]; - for (int index = 0; index != data.length; index++) - { - char left = str.charAt((index * 2) + off); - char right = str.charAt((index * 2) + off + 1); - - if (left < 'a') - { - data[index] = (byte)((left - '0') << 4); - } - else - { - data[index] = (byte)((left - 'a' + 10) << 4); - } - if (right < 'a') - { - data[index] |= (byte)(right - '0'); - } - else - { - data[index] |= (byte)(right - 'a' + 10); - } - } - - return ASN1Primitive.fromByteArray(data); - } - - public static void appendTypeAndValue( - StringBuffer buf, - AttributeTypeAndValue typeAndValue, - Hashtable oidSymbols) - { - String sym = (String)oidSymbols.get(typeAndValue.getType()); - - if (sym != null) - { - buf.append(sym); - } - else - { - buf.append(typeAndValue.getType().getId()); - } - - buf.append('='); - - buf.append(valueToString(typeAndValue.getValue())); - } - - public static String valueToString(ASN1Encodable value) - { - StringBuffer vBuf = new StringBuffer(); - - if (value instanceof ASN1String && !(value instanceof DERUniversalString)) - { - String v = ((ASN1String)value).getString(); - if (v.length() > 0 && v.charAt(0) == '#') - { - vBuf.append("\\" + v); - } - else - { - vBuf.append(v); - } - } - else - { - try - { - vBuf.append("#" + bytesToString(Hex.encode(value.toASN1Primitive().getEncoded(ASN1Encoding.DER)))); - } - catch (IOException e) - { - throw new IllegalArgumentException("Other value has no encoded form"); - } - } - - int end = vBuf.length(); - int index = 0; - - if (vBuf.length() >= 2 && vBuf.charAt(0) == '\\' && vBuf.charAt(1) == '#') - { - index += 2; - } - - while (index != end) - { - if ((vBuf.charAt(index) == ',') - || (vBuf.charAt(index) == '"') - || (vBuf.charAt(index) == '\\') - || (vBuf.charAt(index) == '+') - || (vBuf.charAt(index) == '=') - || (vBuf.charAt(index) == '<') - || (vBuf.charAt(index) == '>') - || (vBuf.charAt(index) == ';')) - { - vBuf.insert(index, "\\"); - index++; - end++; - } - - index++; - } - - return vBuf.toString(); - } - - private static String bytesToString( - byte[] data) - { - char[] cs = new char[data.length]; - - for (int i = 0; i != cs.length; i++) - { - cs[i] = (char)(data[i] & 0xff); - } - - return new String(cs); - } - - public static String canonicalize(String s) - { - String value = Strings.toLowerCase(s.trim()); - - if (value.length() > 0 && value.charAt(0) == '#') - { - ASN1Primitive obj = decodeObject(value); - - if (obj instanceof ASN1String) - { - value = Strings.toLowerCase(((ASN1String)obj).getString().trim()); - } - } - - value = stripInternalSpaces(value); - - return value; - } - - private static ASN1Primitive decodeObject(String oValue) - { - try - { - return ASN1Primitive.fromByteArray(Hex.decode(oValue.substring(1))); - } - catch (IOException e) - { - throw new IllegalStateException("unknown encoding in name: " + e); - } - } - - public static String stripInternalSpaces( - String str) - { - StringBuffer res = new StringBuffer(); - - if (str.length() != 0) - { - char c1 = str.charAt(0); - - res.append(c1); - - for (int k = 1; k < str.length(); k++) - { - char c2 = str.charAt(k); - if (!(c1 == ' ' && c2 == ' ')) - { - res.append(c2); - } - c1 = c2; - } - } - - return res.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/x500/style/RFC4519Style.java b/src/org/bouncycastle/asn1/x500/style/RFC4519Style.java deleted file mode 100644 index 63f1a25..0000000 --- a/src/org/bouncycastle/asn1/x500/style/RFC4519Style.java +++ /dev/null @@ -1,443 +0,0 @@ -package org.bouncycastle.asn1.x500.style; - -import java.io.IOException; -import java.util.Hashtable; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.DERIA5String; -import org.bouncycastle.asn1.DERPrintableString; -import org.bouncycastle.asn1.DERUTF8String; -import org.bouncycastle.asn1.x500.AttributeTypeAndValue; -import org.bouncycastle.asn1.x500.RDN; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.asn1.x500.X500NameStyle; - -public class RFC4519Style - implements X500NameStyle -{ - public static final X500NameStyle INSTANCE = new RFC4519Style(); - - public static final ASN1ObjectIdentifier businessCategory = new ASN1ObjectIdentifier("2.5.4.15"); - public static final ASN1ObjectIdentifier c = new ASN1ObjectIdentifier("2.5.4.6"); - public static final ASN1ObjectIdentifier cn = new ASN1ObjectIdentifier("2.5.4.3"); - public static final ASN1ObjectIdentifier dc = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25"); - public static final ASN1ObjectIdentifier description = new ASN1ObjectIdentifier("2.5.4.13"); - public static final ASN1ObjectIdentifier destinationIndicator = new ASN1ObjectIdentifier("2.5.4.27"); - public static final ASN1ObjectIdentifier distinguishedName = new ASN1ObjectIdentifier("2.5.4.49"); - public static final ASN1ObjectIdentifier dnQualifier = new ASN1ObjectIdentifier("2.5.4.46"); - public static final ASN1ObjectIdentifier enhancedSearchGuide = new ASN1ObjectIdentifier("2.5.4.47"); - public static final ASN1ObjectIdentifier facsimileTelephoneNumber = new ASN1ObjectIdentifier("2.5.4.23"); - public static final ASN1ObjectIdentifier generationQualifier = new ASN1ObjectIdentifier("2.5.4.44"); - public static final ASN1ObjectIdentifier givenName = new ASN1ObjectIdentifier("2.5.4.42"); - public static final ASN1ObjectIdentifier houseIdentifier = new ASN1ObjectIdentifier("2.5.4.51"); - public static final ASN1ObjectIdentifier initials = new ASN1ObjectIdentifier("2.5.4.43"); - public static final ASN1ObjectIdentifier internationalISDNNumber = new ASN1ObjectIdentifier("2.5.4.25"); - public static final ASN1ObjectIdentifier l = new ASN1ObjectIdentifier("2.5.4.7"); - public static final ASN1ObjectIdentifier member = new ASN1ObjectIdentifier("2.5.4.31"); - public static final ASN1ObjectIdentifier name = new ASN1ObjectIdentifier("2.5.4.41"); - public static final ASN1ObjectIdentifier o = new ASN1ObjectIdentifier("2.5.4.10"); - public static final ASN1ObjectIdentifier ou = new ASN1ObjectIdentifier("2.5.4.11"); - public static final ASN1ObjectIdentifier owner = new ASN1ObjectIdentifier("2.5.4.32"); - public static final ASN1ObjectIdentifier physicalDeliveryOfficeName = new ASN1ObjectIdentifier("2.5.4.19"); - public static final ASN1ObjectIdentifier postalAddress = new ASN1ObjectIdentifier("2.5.4.16"); - public static final ASN1ObjectIdentifier postalCode = new ASN1ObjectIdentifier("2.5.4.17"); - public static final ASN1ObjectIdentifier postOfficeBox = new ASN1ObjectIdentifier("2.5.4.18"); - public static final ASN1ObjectIdentifier preferredDeliveryMethod = new ASN1ObjectIdentifier("2.5.4.28"); - public static final ASN1ObjectIdentifier registeredAddress = new ASN1ObjectIdentifier("2.5.4.26"); - public static final ASN1ObjectIdentifier roleOccupant = new ASN1ObjectIdentifier("2.5.4.33"); - public static final ASN1ObjectIdentifier searchGuide = new ASN1ObjectIdentifier("2.5.4.14"); - public static final ASN1ObjectIdentifier seeAlso = new ASN1ObjectIdentifier("2.5.4.34"); - public static final ASN1ObjectIdentifier serialNumber = new ASN1ObjectIdentifier("2.5.4.5"); - public static final ASN1ObjectIdentifier sn = new ASN1ObjectIdentifier("2.5.4.4"); - public static final ASN1ObjectIdentifier st = new ASN1ObjectIdentifier("2.5.4.8"); - public static final ASN1ObjectIdentifier street = new ASN1ObjectIdentifier("2.5.4.9"); - public static final ASN1ObjectIdentifier telephoneNumber = new ASN1ObjectIdentifier("2.5.4.20"); - public static final ASN1ObjectIdentifier teletexTerminalIdentifier = new ASN1ObjectIdentifier("2.5.4.22"); - public static final ASN1ObjectIdentifier telexNumber = new ASN1ObjectIdentifier("2.5.4.21"); - public static final ASN1ObjectIdentifier title = new ASN1ObjectIdentifier("2.5.4.12"); - public static final ASN1ObjectIdentifier uid = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1"); - public static final ASN1ObjectIdentifier uniqueMember = new ASN1ObjectIdentifier("2.5.4.50"); - public static final ASN1ObjectIdentifier userPassword = new ASN1ObjectIdentifier("2.5.4.35"); - public static final ASN1ObjectIdentifier x121Address = new ASN1ObjectIdentifier("2.5.4.24"); - public static final ASN1ObjectIdentifier x500UniqueIdentifier = new ASN1ObjectIdentifier("2.5.4.45"); - - /** - * default look up table translating OID values into their common symbols following - * the convention in RFC 2253 with a few extras - */ - private static final Hashtable DefaultSymbols = new Hashtable(); - - /** - * look up table translating common symbols into their OIDS. - */ - private static final Hashtable DefaultLookUp = new Hashtable(); - - static - { - DefaultSymbols.put(businessCategory, "businessCategory"); - DefaultSymbols.put(c, "c"); - DefaultSymbols.put(cn, "cn"); - DefaultSymbols.put(dc, "dc"); - DefaultSymbols.put(description, "description"); - DefaultSymbols.put(destinationIndicator, "destinationIndicator"); - DefaultSymbols.put(distinguishedName, "distinguishedName"); - DefaultSymbols.put(dnQualifier, "dnQualifier"); - DefaultSymbols.put(enhancedSearchGuide, "enhancedSearchGuide"); - DefaultSymbols.put(facsimileTelephoneNumber, "facsimileTelephoneNumber"); - DefaultSymbols.put(generationQualifier, "generationQualifier"); - DefaultSymbols.put(givenName, "givenName"); - DefaultSymbols.put(houseIdentifier, "houseIdentifier"); - DefaultSymbols.put(initials, "initials"); - DefaultSymbols.put(internationalISDNNumber, "internationalISDNNumber"); - DefaultSymbols.put(l, "l"); - DefaultSymbols.put(member, "member"); - DefaultSymbols.put(name, "name"); - DefaultSymbols.put(o, "o"); - DefaultSymbols.put(ou, "ou"); - DefaultSymbols.put(owner, "owner"); - DefaultSymbols.put(physicalDeliveryOfficeName, "physicalDeliveryOfficeName"); - DefaultSymbols.put(postalAddress, "postalAddress"); - DefaultSymbols.put(postalCode, "postalCode"); - DefaultSymbols.put(postOfficeBox, "postOfficeBox"); - DefaultSymbols.put(preferredDeliveryMethod, "preferredDeliveryMethod"); - DefaultSymbols.put(registeredAddress, "registeredAddress"); - DefaultSymbols.put(roleOccupant, "roleOccupant"); - DefaultSymbols.put(searchGuide, "searchGuide"); - DefaultSymbols.put(seeAlso, "seeAlso"); - DefaultSymbols.put(serialNumber, "serialNumber"); - DefaultSymbols.put(sn, "sn"); - DefaultSymbols.put(st, "st"); - DefaultSymbols.put(street, "street"); - DefaultSymbols.put(telephoneNumber, "telephoneNumber"); - DefaultSymbols.put(teletexTerminalIdentifier, "teletexTerminalIdentifier"); - DefaultSymbols.put(telexNumber, "telexNumber"); - DefaultSymbols.put(title, "title"); - DefaultSymbols.put(uid, "uid"); - DefaultSymbols.put(uniqueMember, "uniqueMember"); - DefaultSymbols.put(userPassword, "userPassword"); - DefaultSymbols.put(x121Address, "x121Address"); - DefaultSymbols.put(x500UniqueIdentifier, "x500UniqueIdentifier"); - - DefaultLookUp.put("businesscategory", businessCategory); - DefaultLookUp.put("c", c); - DefaultLookUp.put("cn", cn); - DefaultLookUp.put("dc", dc); - DefaultLookUp.put("description", description); - DefaultLookUp.put("destinationindicator", destinationIndicator); - DefaultLookUp.put("distinguishedname", distinguishedName); - DefaultLookUp.put("dnqualifier", dnQualifier); - DefaultLookUp.put("enhancedsearchguide", enhancedSearchGuide); - DefaultLookUp.put("facsimiletelephonenumber", facsimileTelephoneNumber); - DefaultLookUp.put("generationqualifier", generationQualifier); - DefaultLookUp.put("givenname", givenName); - DefaultLookUp.put("houseidentifier", houseIdentifier); - DefaultLookUp.put("initials", initials); - DefaultLookUp.put("internationalisdnnumber", internationalISDNNumber); - DefaultLookUp.put("l", l); - DefaultLookUp.put("member", member); - DefaultLookUp.put("name", name); - DefaultLookUp.put("o", o); - DefaultLookUp.put("ou", ou); - DefaultLookUp.put("owner", owner); - DefaultLookUp.put("physicaldeliveryofficename", physicalDeliveryOfficeName); - DefaultLookUp.put("postaladdress", postalAddress); - DefaultLookUp.put("postalcode", postalCode); - DefaultLookUp.put("postofficebox", postOfficeBox); - DefaultLookUp.put("preferreddeliverymethod", preferredDeliveryMethod); - DefaultLookUp.put("registeredaddress", registeredAddress); - DefaultLookUp.put("roleoccupant", roleOccupant); - DefaultLookUp.put("searchguide", searchGuide); - DefaultLookUp.put("seealso", seeAlso); - DefaultLookUp.put("serialnumber", serialNumber); - DefaultLookUp.put("sn", sn); - DefaultLookUp.put("st", st); - DefaultLookUp.put("street", street); - DefaultLookUp.put("telephonenumber", telephoneNumber); - DefaultLookUp.put("teletexterminalidentifier", teletexTerminalIdentifier); - DefaultLookUp.put("telexnumber", telexNumber); - DefaultLookUp.put("title", title); - DefaultLookUp.put("uid", uid); - DefaultLookUp.put("uniquemember", uniqueMember); - DefaultLookUp.put("userpassword", userPassword); - DefaultLookUp.put("x121address", x121Address); - DefaultLookUp.put("x500uniqueidentifier", x500UniqueIdentifier); - - // TODO: need to add correct matching for equality comparisons. - } - - protected RFC4519Style() - { - - } - - public ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value) - { - if (value.length() != 0 && value.charAt(0) == '#') - { - try - { - return IETFUtils.valueFromHexString(value, 1); - } - catch (IOException e) - { - throw new RuntimeException("can't recode value for oid " + oid.getId()); - } - } - else - { - if (value.length() != 0 && value.charAt(0) == '\\') - { - value = value.substring(1); - } - if (oid.equals(dc)) - { - return new DERIA5String(value); - } - else if (oid.equals(c) || oid.equals(serialNumber) || oid.equals(dnQualifier) - || oid.equals(telephoneNumber)) - { - return new DERPrintableString(value); - } - } - - return new DERUTF8String(value); - } - - public ASN1ObjectIdentifier attrNameToOID(String attrName) - { - return IETFUtils.decodeAttrName(attrName, DefaultLookUp); - } - - public boolean areEqual(X500Name name1, X500Name name2) - { - RDN[] rdns1 = name1.getRDNs(); - RDN[] rdns2 = name2.getRDNs(); - - if (rdns1.length != rdns2.length) - { - return false; - } - - boolean reverse = false; - - if (rdns1[0].getFirst() != null && rdns2[0].getFirst() != null) - { - reverse = !rdns1[0].getFirst().getType().equals(rdns2[0].getFirst().getType()); // guess forward - } - - for (int i = 0; i != rdns1.length; i++) - { - if (!foundMatch(reverse, rdns1[i], rdns2)) - { - return false; - } - } - - return true; - } - - private boolean foundMatch(boolean reverse, RDN rdn, RDN[] possRDNs) - { - if (reverse) - { - for (int i = possRDNs.length - 1; i >= 0; i--) - { - if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) - { - possRDNs[i] = null; - return true; - } - } - } - else - { - for (int i = 0; i != possRDNs.length; i++) - { - if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) - { - possRDNs[i] = null; - return true; - } - } - } - - return false; - } - - protected boolean rdnAreEqual(RDN rdn1, RDN rdn2) - { - if (rdn1.isMultiValued()) - { - if (rdn2.isMultiValued()) - { - AttributeTypeAndValue[] atvs1 = rdn1.getTypesAndValues(); - AttributeTypeAndValue[] atvs2 = rdn2.getTypesAndValues(); - - if (atvs1.length != atvs2.length) - { - return false; - } - - for (int i = 0; i != atvs1.length; i++) - { - if (!atvAreEqual(atvs1[i], atvs2[i])) - { - return false; - } - } - } - else - { - return false; - } - } - else - { - if (!rdn2.isMultiValued()) - { - return atvAreEqual(rdn1.getFirst(), rdn2.getFirst()); - } - else - { - return false; - } - } - - return true; - } - - private boolean atvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2) - { - if (atv1 == atv2) - { - return true; - } - - if (atv1 == null) - { - return false; - } - - if (atv2 == null) - { - return false; - } - - ASN1ObjectIdentifier o1 = atv1.getType(); - ASN1ObjectIdentifier o2 = atv2.getType(); - - if (!o1.equals(o2)) - { - return false; - } - - String v1 = IETFUtils.canonicalize(IETFUtils.valueToString(atv1.getValue())); - String v2 = IETFUtils.canonicalize(IETFUtils.valueToString(atv2.getValue())); - - if (!v1.equals(v2)) - { - return false; - } - - return true; - } - - // parse backwards - public RDN[] fromString(String dirName) - { - RDN[] tmp = IETFUtils.rDNsFromString(dirName, this); - RDN[] res = new RDN[tmp.length]; - - for (int i = 0; i != tmp.length; i++) - { - res[res.length - i - 1] = tmp[i]; - } - - return res; - } - - public int calculateHashCode(X500Name name) - { - int hashCodeValue = 0; - RDN[] rdns = name.getRDNs(); - - // this needs to be order independent, like equals - for (int i = 0; i != rdns.length; i++) - { - if (rdns[i].isMultiValued()) - { - AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); - - for (int j = 0; j != atv.length; j++) - { - hashCodeValue ^= atv[j].getType().hashCode(); - hashCodeValue ^= calcHashCode(atv[j].getValue()); - } - } - else - { - hashCodeValue ^= rdns[i].getFirst().getType().hashCode(); - hashCodeValue ^= calcHashCode(rdns[i].getFirst().getValue()); - } - } - - return hashCodeValue; - } - - private int calcHashCode(ASN1Encodable enc) - { - String value = IETFUtils.valueToString(enc); - - value = IETFUtils.canonicalize(value); - - return value.hashCode(); - } - - // convert in reverse - public String toString(X500Name name) - { - StringBuffer buf = new StringBuffer(); - boolean first = true; - - RDN[] rdns = name.getRDNs(); - - for (int i = rdns.length - 1; i >= 0; i--) - { - if (first) - { - first = false; - } - else - { - buf.append(','); - } - - if (rdns[i].isMultiValued()) - { - AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); - boolean firstAtv = true; - - for (int j = 0; j != atv.length; j++) - { - if (firstAtv) - { - firstAtv = false; - } - else - { - buf.append('+'); - } - - IETFUtils.appendTypeAndValue(buf, atv[j], DefaultSymbols); - } - } - else - { - IETFUtils.appendTypeAndValue(buf, rdns[i].getFirst(), DefaultSymbols); - } - } - - return buf.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java b/src/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java deleted file mode 100644 index 7549a72..0000000 --- a/src/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.bouncycastle.asn1.x500.style; - -/** - * class for breaking up an X500 Name into it's component tokens, ala - * java.util.StringTokenizer. We need this class as some of the - * lightweight Java environment don't support classes like - * StringTokenizer. - */ -class X500NameTokenizer -{ - private String value; - private int index; - private char seperator; - private StringBuffer buf = new StringBuffer(); - - public X500NameTokenizer( - String oid) - { - this(oid, ','); - } - - public X500NameTokenizer( - String oid, - char seperator) - { - this.value = oid; - this.index = -1; - this.seperator = seperator; - } - - public boolean hasMoreTokens() - { - return (index != value.length()); - } - - public String nextToken() - { - if (index == value.length()) - { - return null; - } - - int end = index + 1; - boolean quoted = false; - boolean escaped = false; - - buf.setLength(0); - - while (end != value.length()) - { - char c = value.charAt(end); - - if (c == '"') - { - if (!escaped) - { - quoted = !quoted; - } - else - { - buf.append(c); - } - escaped = false; - } - else - { - if (escaped || quoted) - { - if (c == '#' && buf.charAt(buf.length() - 1) == '=') - { - buf.append('\\'); - } - else if (c == '+' && seperator != '+') - { - buf.append('\\'); - } - buf.append(c); - escaped = false; - } - else if (c == '\\') - { - escaped = true; - } - else if (c == seperator) - { - break; - } - else - { - buf.append(c); - } - } - end++; - } - - index = end; - return buf.toString().trim(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/AccessDescription.java b/src/org/bouncycastle/asn1/x509/AccessDescription.java deleted file mode 100644 index a1aaca4..0000000 --- a/src/org/bouncycastle/asn1/x509/AccessDescription.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * The AccessDescription object. - *

        - * AccessDescription  ::=  SEQUENCE {
        - *       accessMethod          OBJECT IDENTIFIER,
        - *       accessLocation        GeneralName  }
        - * 
        - */ -public class AccessDescription - extends ASN1Object -{ - public final static ASN1ObjectIdentifier id_ad_caIssuers = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.48.2"); - - public final static ASN1ObjectIdentifier id_ad_ocsp = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.48.1"); - - ASN1ObjectIdentifier accessMethod = null; - GeneralName accessLocation = null; - - public static AccessDescription getInstance( - Object obj) - { - if (obj instanceof AccessDescription) - { - return (AccessDescription)obj; - } - else if (obj != null) - { - return new AccessDescription(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private AccessDescription( - ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("wrong number of elements in sequence"); - } - - accessMethod = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); - accessLocation = GeneralName.getInstance(seq.getObjectAt(1)); - } - - /** - * create an AccessDescription with the oid and location provided. - */ - public AccessDescription( - ASN1ObjectIdentifier oid, - GeneralName location) - { - accessMethod = oid; - accessLocation = location; - } - - /** - * - * @return the access method. - */ - public ASN1ObjectIdentifier getAccessMethod() - { - return accessMethod; - } - - /** - * - * @return the access location - */ - public GeneralName getAccessLocation() - { - return accessLocation; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector accessDescription = new ASN1EncodableVector(); - - accessDescription.add(accessMethod); - accessDescription.add(accessLocation); - - return new DERSequence(accessDescription); - } - - public String toString() - { - return ("AccessDescription: Oid(" + this.accessMethod.getId() + ")"); - } -} diff --git a/src/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java b/src/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java deleted file mode 100644 index 6f7c3be..0000000 --- a/src/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java +++ /dev/null @@ -1,173 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1SequenceParser; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.DERObjectIdentifier; -import org.bouncycastle.asn1.DERSequence; - -public class AlgorithmIdentifier - extends ASN1Object -{ - private ASN1ObjectIdentifier objectId; - private ASN1Encodable parameters; - private boolean parametersDefined = false; - - public static AlgorithmIdentifier getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static AlgorithmIdentifier getInstance( - Object obj) - { - if (obj== null || obj instanceof AlgorithmIdentifier) - { - return (AlgorithmIdentifier)obj; - } - - if (obj instanceof ASN1ObjectIdentifier) - { - return new AlgorithmIdentifier((ASN1ObjectIdentifier)obj); - } - - if (obj instanceof String) - { - return new AlgorithmIdentifier((String)obj); - } - - if (obj instanceof ASN1Sequence || obj instanceof ASN1SequenceParser) - { - return new AlgorithmIdentifier(ASN1Sequence.getInstance(obj)); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public AlgorithmIdentifier( - ASN1ObjectIdentifier objectId) - { - this.objectId = objectId; - } - - /** - * @deprecated use ASN1ObjectIdentifier - * @param objectId - */ - public AlgorithmIdentifier( - String objectId) - { - this.objectId = new ASN1ObjectIdentifier(objectId); - } - - /** - * @deprecated use ASN1ObjectIdentifier - * @param objectId - */ - public AlgorithmIdentifier( - DERObjectIdentifier objectId) - { - this.objectId = new ASN1ObjectIdentifier(objectId.getId()); - } - - /** - * @deprecated use ASN1ObjectIdentifier - * @param objectId - * @param parameters - */ - public AlgorithmIdentifier( - DERObjectIdentifier objectId, - ASN1Encodable parameters) - { - parametersDefined = true; - this.objectId = new ASN1ObjectIdentifier(objectId.getId()); - this.parameters = parameters; - } - - public AlgorithmIdentifier( - ASN1ObjectIdentifier objectId, - ASN1Encodable parameters) - { - parametersDefined = true; - this.objectId = objectId; - this.parameters = parameters; - } - - public AlgorithmIdentifier( - ASN1Sequence seq) - { - if (seq.size() < 1 || seq.size() > 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - objectId = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); - - if (seq.size() == 2) - { - parametersDefined = true; - parameters = seq.getObjectAt(1); - } - else - { - parameters = null; - } - } - - public ASN1ObjectIdentifier getAlgorithm() - { - return new ASN1ObjectIdentifier(objectId.getId()); - } - - /** - * @deprecated use getAlgorithm - * @return - */ - public ASN1ObjectIdentifier getObjectId() - { - return objectId; - } - - public ASN1Encodable getParameters() - { - return parameters; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *      AlgorithmIdentifier ::= SEQUENCE {
        -     *                            algorithm OBJECT IDENTIFIER,
        -     *                            parameters ANY DEFINED BY algorithm OPTIONAL }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(objectId); - - if (parametersDefined) - { - if (parameters != null) - { - v.add(parameters); - } - else - { - v.add(DERNull.INSTANCE); - } - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/AttCertIssuer.java b/src/org/bouncycastle/asn1/x509/AttCertIssuer.java deleted file mode 100644 index 3064b04..0000000 --- a/src/org/bouncycastle/asn1/x509/AttCertIssuer.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERTaggedObject; - -public class AttCertIssuer - extends ASN1Object - implements ASN1Choice -{ - ASN1Encodable obj; - ASN1Primitive choiceObj; - - public static AttCertIssuer getInstance( - Object obj) - { - if (obj == null || obj instanceof AttCertIssuer) - { - return (AttCertIssuer)obj; - } - else if (obj instanceof V2Form) - { - return new AttCertIssuer(V2Form.getInstance(obj)); - } - else if (obj instanceof GeneralNames) - { - return new AttCertIssuer((GeneralNames)obj); - } - else if (obj instanceof ASN1TaggedObject) - { - return new AttCertIssuer(V2Form.getInstance((ASN1TaggedObject)obj, false)); - } - else if (obj instanceof ASN1Sequence) - { - return new AttCertIssuer(GeneralNames.getInstance(obj)); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public static AttCertIssuer getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(obj.getObject()); // must be explictly tagged - } - - /** - * Don't use this one if you are trying to be RFC 3281 compliant. - * Use it for v1 attribute certificates only. - * - * @param names our GeneralNames structure - */ - public AttCertIssuer( - GeneralNames names) - { - obj = names; - choiceObj = obj.toASN1Primitive(); - } - - public AttCertIssuer( - V2Form v2Form) - { - obj = v2Form; - choiceObj = new DERTaggedObject(false, 0, obj); - } - - public ASN1Encodable getIssuer() - { - return obj; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  AttCertIssuer ::= CHOICE {
        -     *       v1Form   GeneralNames,  -- MUST NOT be used in this
        -     *                               -- profile
        -     *       v2Form   [0] V2Form     -- v2 only
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - return choiceObj; - } -} diff --git a/src/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java b/src/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java deleted file mode 100644 index e157b66..0000000 --- a/src/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERSequence; - -public class AttCertValidityPeriod - extends ASN1Object -{ - DERGeneralizedTime notBeforeTime; - DERGeneralizedTime notAfterTime; - - public static AttCertValidityPeriod getInstance( - Object obj) - { - if (obj instanceof AttCertValidityPeriod) - { - return (AttCertValidityPeriod)obj; - } - else if (obj != null) - { - return new AttCertValidityPeriod(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private AttCertValidityPeriod( - ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - notBeforeTime = DERGeneralizedTime.getInstance(seq.getObjectAt(0)); - notAfterTime = DERGeneralizedTime.getInstance(seq.getObjectAt(1)); - } - - /** - * @param notBeforeTime - * @param notAfterTime - */ - public AttCertValidityPeriod( - DERGeneralizedTime notBeforeTime, - DERGeneralizedTime notAfterTime) - { - this.notBeforeTime = notBeforeTime; - this.notAfterTime = notAfterTime; - } - - public DERGeneralizedTime getNotBeforeTime() - { - return notBeforeTime; - } - - public DERGeneralizedTime getNotAfterTime() - { - return notAfterTime; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  AttCertValidityPeriod  ::= SEQUENCE {
        -     *       notBeforeTime  GeneralizedTime,
        -     *       notAfterTime   GeneralizedTime
        -     *  } 
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(notBeforeTime); - v.add(notAfterTime); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/Attribute.java b/src/org/bouncycastle/asn1/x509/Attribute.java deleted file mode 100644 index b8d4bde..0000000 --- a/src/org/bouncycastle/asn1/x509/Attribute.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.DERSequence; - -public class Attribute - extends ASN1Object -{ - private ASN1ObjectIdentifier attrType; - private ASN1Set attrValues; - - /** - * return an Attribute object from the given object. - * - * @param o the object we want converted. - * @exception IllegalArgumentException if the object cannot be converted. - */ - public static Attribute getInstance( - Object o) - { - if (o instanceof Attribute) - { - return (Attribute)o; - } - - if (o != null) - { - return new Attribute(ASN1Sequence.getInstance(o)); - } - - return null; - } - - private Attribute( - ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - attrType = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); - attrValues = ASN1Set.getInstance(seq.getObjectAt(1)); - } - - public Attribute( - ASN1ObjectIdentifier attrType, - ASN1Set attrValues) - { - this.attrType = attrType; - this.attrValues = attrValues; - } - - public ASN1ObjectIdentifier getAttrType() - { - return new ASN1ObjectIdentifier(attrType.getId()); - } - - public ASN1Encodable[] getAttributeValues() - { - return attrValues.toArray(); - } - - public ASN1Set getAttrValues() - { - return attrValues; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * Attribute ::= SEQUENCE {
        -     *     attrType OBJECT IDENTIFIER,
        -     *     attrValues SET OF AttributeValue
        -     * }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(attrType); - v.add(attrValues); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/AttributeCertificate.java b/src/org/bouncycastle/asn1/x509/AttributeCertificate.java deleted file mode 100644 index 92aa0f7..0000000 --- a/src/org/bouncycastle/asn1/x509/AttributeCertificate.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; - -public class AttributeCertificate - extends ASN1Object -{ - AttributeCertificateInfo acinfo; - AlgorithmIdentifier signatureAlgorithm; - DERBitString signatureValue; - - /** - * @param obj - * @return an AttributeCertificate object - */ - public static AttributeCertificate getInstance(Object obj) - { - if (obj instanceof AttributeCertificate) - { - return (AttributeCertificate)obj; - } - else if (obj != null) - { - return new AttributeCertificate(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public AttributeCertificate( - AttributeCertificateInfo acinfo, - AlgorithmIdentifier signatureAlgorithm, - DERBitString signatureValue) - { - this.acinfo = acinfo; - this.signatureAlgorithm = signatureAlgorithm; - this.signatureValue = signatureValue; - } - - public AttributeCertificate( - ASN1Sequence seq) - { - if (seq.size() != 3) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - this.acinfo = AttributeCertificateInfo.getInstance(seq.getObjectAt(0)); - this.signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); - this.signatureValue = DERBitString.getInstance(seq.getObjectAt(2)); - } - - public AttributeCertificateInfo getAcinfo() - { - return acinfo; - } - - public AlgorithmIdentifier getSignatureAlgorithm() - { - return signatureAlgorithm; - } - - public DERBitString getSignatureValue() - { - return signatureValue; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  AttributeCertificate ::= SEQUENCE {
        -     *       acinfo               AttributeCertificateInfo,
        -     *       signatureAlgorithm   AlgorithmIdentifier,
        -     *       signatureValue       BIT STRING
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(acinfo); - v.add(signatureAlgorithm); - v.add(signatureValue); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java b/src/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java deleted file mode 100644 index 7b9d450..0000000 --- a/src/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; - -public class AttributeCertificateInfo - extends ASN1Object -{ - private ASN1Integer version; - private Holder holder; - private AttCertIssuer issuer; - private AlgorithmIdentifier signature; - private ASN1Integer serialNumber; - private AttCertValidityPeriod attrCertValidityPeriod; - private ASN1Sequence attributes; - private DERBitString issuerUniqueID; - private Extensions extensions; - - public static AttributeCertificateInfo getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static AttributeCertificateInfo getInstance( - Object obj) - { - if (obj instanceof AttributeCertificateInfo) - { - return (AttributeCertificateInfo)obj; - } - else if (obj != null) - { - return new AttributeCertificateInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private AttributeCertificateInfo( - ASN1Sequence seq) - { - if (seq.size() < 7 || seq.size() > 9) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - this.version = ASN1Integer.getInstance(seq.getObjectAt(0)); - this.holder = Holder.getInstance(seq.getObjectAt(1)); - this.issuer = AttCertIssuer.getInstance(seq.getObjectAt(2)); - this.signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(3)); - this.serialNumber = ASN1Integer.getInstance(seq.getObjectAt(4)); - this.attrCertValidityPeriod = AttCertValidityPeriod.getInstance(seq.getObjectAt(5)); - this.attributes = ASN1Sequence.getInstance(seq.getObjectAt(6)); - - for (int i = 7; i < seq.size(); i++) - { - ASN1Encodable obj = (ASN1Encodable)seq.getObjectAt(i); - - if (obj instanceof DERBitString) - { - this.issuerUniqueID = DERBitString.getInstance(seq.getObjectAt(i)); - } - else if (obj instanceof ASN1Sequence || obj instanceof Extensions) - { - this.extensions = Extensions.getInstance(seq.getObjectAt(i)); - } - } - } - - public ASN1Integer getVersion() - { - return version; - } - - public Holder getHolder() - { - return holder; - } - - public AttCertIssuer getIssuer() - { - return issuer; - } - - public AlgorithmIdentifier getSignature() - { - return signature; - } - - public ASN1Integer getSerialNumber() - { - return serialNumber; - } - - public AttCertValidityPeriod getAttrCertValidityPeriod() - { - return attrCertValidityPeriod; - } - - public ASN1Sequence getAttributes() - { - return attributes; - } - - public DERBitString getIssuerUniqueID() - { - return issuerUniqueID; - } - - public Extensions getExtensions() - { - return extensions; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  AttributeCertificateInfo ::= SEQUENCE {
        -     *       version              AttCertVersion -- version is v2,
        -     *       holder               Holder,
        -     *       issuer               AttCertIssuer,
        -     *       signature            AlgorithmIdentifier,
        -     *       serialNumber         CertificateSerialNumber,
        -     *       attrCertValidityPeriod   AttCertValidityPeriod,
        -     *       attributes           SEQUENCE OF Attribute,
        -     *       issuerUniqueID       UniqueIdentifier OPTIONAL,
        -     *       extensions           Extensions OPTIONAL
        -     *  }
        -     *
        -     *  AttCertVersion ::= INTEGER { v2(1) }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(version); - v.add(holder); - v.add(issuer); - v.add(signature); - v.add(serialNumber); - v.add(attrCertValidityPeriod); - v.add(attributes); - - if (issuerUniqueID != null) - { - v.add(issuerUniqueID); - } - - if (extensions != null) - { - v.add(extensions); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java b/src/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java deleted file mode 100644 index 3a239ab..0000000 --- a/src/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * The AuthorityInformationAccess object. - *
        - * id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
        - *
        - * AuthorityInfoAccessSyntax  ::=
        - *      SEQUENCE SIZE (1..MAX) OF AccessDescription
        - * AccessDescription  ::=  SEQUENCE {
        - *       accessMethod          OBJECT IDENTIFIER,
        - *       accessLocation        GeneralName  }
        - *
        - * id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
        - * id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
        - * id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
        - * 
        - */ -public class AuthorityInformationAccess - extends ASN1Object -{ - private AccessDescription[] descriptions; - - public static AuthorityInformationAccess getInstance( - Object obj) - { - if (obj instanceof AuthorityInformationAccess) - { - return (AuthorityInformationAccess)obj; - } - - if (obj != null) - { - return new AuthorityInformationAccess(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private AuthorityInformationAccess( - ASN1Sequence seq) - { - if (seq.size() < 1) - { - throw new IllegalArgumentException("sequence may not be empty"); - } - - descriptions = new AccessDescription[seq.size()]; - - for (int i = 0; i != seq.size(); i++) - { - descriptions[i] = AccessDescription.getInstance(seq.getObjectAt(i)); - } - } - - /** - * create an AuthorityInformationAccess with the oid and location provided. - */ - public AuthorityInformationAccess( - ASN1ObjectIdentifier oid, - GeneralName location) - { - descriptions = new AccessDescription[1]; - - descriptions[0] = new AccessDescription(oid, location); - } - - - /** - * - * @return the access descriptions contained in this object. - */ - public AccessDescription[] getAccessDescriptions() - { - return descriptions; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - - for (int i = 0; i != descriptions.length; i++) - { - vec.add(descriptions[i]); - } - - return new DERSequence(vec); - } - - public String toString() - { - return ("AuthorityInformationAccess: Oid(" + this.descriptions[0].getAccessMethod().getId() + ")"); - } -} diff --git a/src/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java b/src/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java deleted file mode 100644 index 6ee93b1..0000000 --- a/src/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java +++ /dev/null @@ -1,227 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.digests.SHA1Digest; - -/** - * The AuthorityKeyIdentifier object. - *
        - * id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
        - *
        - *   AuthorityKeyIdentifier ::= SEQUENCE {
        - *      keyIdentifier             [0] IMPLICIT KeyIdentifier           OPTIONAL,
        - *      authorityCertIssuer       [1] IMPLICIT GeneralNames            OPTIONAL,
        - *      authorityCertSerialNumber [2] IMPLICIT CertificateSerialNumber OPTIONAL  }
        - *
        - *   KeyIdentifier ::= OCTET STRING
        - * 
        - * - */ -public class AuthorityKeyIdentifier - extends ASN1Object -{ - ASN1OctetString keyidentifier=null; - GeneralNames certissuer=null; - ASN1Integer certserno=null; - - public static AuthorityKeyIdentifier getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static AuthorityKeyIdentifier getInstance( - Object obj) - { - if (obj instanceof AuthorityKeyIdentifier) - { - return (AuthorityKeyIdentifier)obj; - } - if (obj != null) - { - return new AuthorityKeyIdentifier(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - protected AuthorityKeyIdentifier( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1TaggedObject o = DERTaggedObject.getInstance(e.nextElement()); - - switch (o.getTagNo()) - { - case 0: - this.keyidentifier = ASN1OctetString.getInstance(o, false); - break; - case 1: - this.certissuer = GeneralNames.getInstance(o, false); - break; - case 2: - this.certserno = ASN1Integer.getInstance(o, false); - break; - default: - throw new IllegalArgumentException("illegal tag"); - } - } - } - - /** - * - * Calulates the keyidentifier using a SHA1 hash over the BIT STRING - * from SubjectPublicKeyInfo as defined in RFC2459. - * - * Example of making a AuthorityKeyIdentifier: - *
        -     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
        -     *       publicKey.getEncoded()).readObject());
        -     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
        -     * 
        - * - **/ - public AuthorityKeyIdentifier( - SubjectPublicKeyInfo spki) - { - Digest digest = new SHA1Digest(); - byte[] resBuf = new byte[digest.getDigestSize()]; - - byte[] bytes = spki.getPublicKeyData().getBytes(); - digest.update(bytes, 0, bytes.length); - digest.doFinal(resBuf, 0); - this.keyidentifier = new DEROctetString(resBuf); - } - - /** - * create an AuthorityKeyIdentifier with the GeneralNames tag and - * the serial number provided as well. - */ - public AuthorityKeyIdentifier( - SubjectPublicKeyInfo spki, - GeneralNames name, - BigInteger serialNumber) - { - Digest digest = new SHA1Digest(); - byte[] resBuf = new byte[digest.getDigestSize()]; - - byte[] bytes = spki.getPublicKeyData().getBytes(); - digest.update(bytes, 0, bytes.length); - digest.doFinal(resBuf, 0); - - this.keyidentifier = new DEROctetString(resBuf); - this.certissuer = GeneralNames.getInstance(name.toASN1Primitive()); - this.certserno = new ASN1Integer(serialNumber); - } - - /** - * create an AuthorityKeyIdentifier with the GeneralNames tag and - * the serial number provided. - */ - public AuthorityKeyIdentifier( - GeneralNames name, - BigInteger serialNumber) - { - this.keyidentifier = null; - this.certissuer = GeneralNames.getInstance(name.toASN1Primitive()); - this.certserno = new ASN1Integer(serialNumber); - } - - /** - * create an AuthorityKeyIdentifier with a precomupted key identifier - */ - public AuthorityKeyIdentifier( - byte[] keyIdentifier) - { - this.keyidentifier = new DEROctetString(keyIdentifier); - this.certissuer = null; - this.certserno = null; - } - - /** - * create an AuthorityKeyIdentifier with a precomupted key identifier - * and the GeneralNames tag and the serial number provided as well. - */ - public AuthorityKeyIdentifier( - byte[] keyIdentifier, - GeneralNames name, - BigInteger serialNumber) - { - this.keyidentifier = new DEROctetString(keyIdentifier); - this.certissuer = GeneralNames.getInstance(name.toASN1Primitive()); - this.certserno = new ASN1Integer(serialNumber); - } - - public byte[] getKeyIdentifier() - { - if (keyidentifier != null) - { - return keyidentifier.getOctets(); - } - - return null; - } - - public GeneralNames getAuthorityCertIssuer() - { - return certissuer; - } - - public BigInteger getAuthorityCertSerialNumber() - { - if (certserno != null) - { - return certserno.getValue(); - } - - return null; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (keyidentifier != null) - { - v.add(new DERTaggedObject(false, 0, keyidentifier)); - } - - if (certissuer != null) - { - v.add(new DERTaggedObject(false, 1, certissuer)); - } - - if (certserno != null) - { - v.add(new DERTaggedObject(false, 2, certserno)); - } - - - return new DERSequence(v); - } - - public String toString() - { - return ("AuthorityKeyIdentifier: KeyID(" + this.keyidentifier.getOctets() + ")"); - } -} diff --git a/src/org/bouncycastle/asn1/x509/BasicConstraints.java b/src/org/bouncycastle/asn1/x509/BasicConstraints.java deleted file mode 100644 index 0212c0e..0000000 --- a/src/org/bouncycastle/asn1/x509/BasicConstraints.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBoolean; -import org.bouncycastle.asn1.DERSequence; - -public class BasicConstraints - extends ASN1Object -{ - DERBoolean cA = new DERBoolean(false); - ASN1Integer pathLenConstraint = null; - - public static BasicConstraints getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static BasicConstraints getInstance( - Object obj) - { - if (obj instanceof BasicConstraints) - { - return (BasicConstraints)obj; - } - if (obj instanceof X509Extension) - { - return getInstance(X509Extension.convertValueToObject((X509Extension)obj)); - } - if (obj != null) - { - return new BasicConstraints(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private BasicConstraints( - ASN1Sequence seq) - { - if (seq.size() == 0) - { - this.cA = null; - this.pathLenConstraint = null; - } - else - { - if (seq.getObjectAt(0) instanceof DERBoolean) - { - this.cA = DERBoolean.getInstance(seq.getObjectAt(0)); - } - else - { - this.cA = null; - this.pathLenConstraint = ASN1Integer.getInstance(seq.getObjectAt(0)); - } - if (seq.size() > 1) - { - if (this.cA != null) - { - this.pathLenConstraint = ASN1Integer.getInstance(seq.getObjectAt(1)); - } - else - { - throw new IllegalArgumentException("wrong sequence in constructor"); - } - } - } - } - - public BasicConstraints( - boolean cA) - { - if (cA) - { - this.cA = new DERBoolean(true); - } - else - { - this.cA = null; - } - this.pathLenConstraint = null; - } - - /** - * create a cA=true object for the given path length constraint. - * - * @param pathLenConstraint - */ - public BasicConstraints( - int pathLenConstraint) - { - this.cA = new DERBoolean(true); - this.pathLenConstraint = new ASN1Integer(pathLenConstraint); - } - - public boolean isCA() - { - return (cA != null) && cA.isTrue(); - } - - public BigInteger getPathLenConstraint() - { - if (pathLenConstraint != null) - { - return pathLenConstraint.getValue(); - } - - return null; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * BasicConstraints := SEQUENCE {
        -     *    cA                  BOOLEAN DEFAULT FALSE,
        -     *    pathLenConstraint   INTEGER (0..MAX) OPTIONAL
        -     * }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (cA != null) - { - v.add(cA); - } - - if (pathLenConstraint != null) // yes some people actually do this when cA is false... - { - v.add(pathLenConstraint); - } - - return new DERSequence(v); - } - - public String toString() - { - if (pathLenConstraint == null) - { - if (cA == null) - { - return "BasicConstraints: isCa(false)"; - } - return "BasicConstraints: isCa(" + this.isCA() + ")"; - } - return "BasicConstraints: isCa(" + this.isCA() + "), pathLenConstraint = " + pathLenConstraint.getValue(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/CRLDistPoint.java b/src/org/bouncycastle/asn1/x509/CRLDistPoint.java deleted file mode 100644 index 1ee6aa5..0000000 --- a/src/org/bouncycastle/asn1/x509/CRLDistPoint.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class CRLDistPoint - extends ASN1Object -{ - ASN1Sequence seq = null; - - public static CRLDistPoint getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static CRLDistPoint getInstance( - Object obj) - { - if (obj instanceof CRLDistPoint) - { - return (CRLDistPoint)obj; - } - else if (obj != null) - { - return new CRLDistPoint(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private CRLDistPoint( - ASN1Sequence seq) - { - this.seq = seq; - } - - public CRLDistPoint( - DistributionPoint[] points) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - for (int i = 0; i != points.length; i++) - { - v.add(points[i]); - } - - seq = new DERSequence(v); - } - - /** - * Return the distribution points making up the sequence. - * - * @return DistributionPoint[] - */ - public DistributionPoint[] getDistributionPoints() - { - DistributionPoint[] dp = new DistributionPoint[seq.size()]; - - for (int i = 0; i != seq.size(); i++) - { - dp[i] = DistributionPoint.getInstance(seq.getObjectAt(i)); - } - - return dp; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * CRLDistPoint ::= SEQUENCE SIZE {1..MAX} OF DistributionPoint
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - return seq; - } - - public String toString() - { - StringBuffer buf = new StringBuffer(); - String sep = System.getProperty("line.separator"); - - buf.append("CRLDistPoint:"); - buf.append(sep); - DistributionPoint dp[] = getDistributionPoints(); - for (int i = 0; i != dp.length; i++) - { - buf.append(" "); - buf.append(dp[i]); - buf.append(sep); - } - return buf.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/CRLNumber.java b/src/org/bouncycastle/asn1/x509/CRLNumber.java deleted file mode 100644 index bd285fe..0000000 --- a/src/org/bouncycastle/asn1/x509/CRLNumber.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; - -/** - * The CRLNumber object. - *
        - * CRLNumber::= INTEGER(0..MAX)
        - * 
        - */ -public class CRLNumber - extends ASN1Object -{ - private BigInteger number; - - public CRLNumber( - BigInteger number) - { - this.number = number; - } - - public BigInteger getCRLNumber() - { - return number; - } - - public String toString() - { - return "CRLNumber: " + getCRLNumber(); - } - - public ASN1Primitive toASN1Primitive() - { - return new ASN1Integer(number); - } - - public static CRLNumber getInstance(Object o) - { - if (o instanceof CRLNumber) - { - return (CRLNumber)o; - } - else if (o != null) - { - return new CRLNumber(ASN1Integer.getInstance(o).getValue()); - } - - return null; - } -} diff --git a/src/org/bouncycastle/asn1/x509/CRLReason.java b/src/org/bouncycastle/asn1/x509/CRLReason.java deleted file mode 100644 index d0a8f2d..0000000 --- a/src/org/bouncycastle/asn1/x509/CRLReason.java +++ /dev/null @@ -1,150 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; -import java.util.Hashtable; - -import org.bouncycastle.asn1.ASN1Enumerated; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; - -/** - * The CRLReason enumeration. - *
        - * CRLReason ::= ENUMERATED {
        - *  unspecified             (0),
        - *  keyCompromise           (1),
        - *  cACompromise            (2),
        - *  affiliationChanged      (3),
        - *  superseded              (4),
        - *  cessationOfOperation    (5),
        - *  certificateHold         (6),
        - *  removeFromCRL           (8),
        - *  privilegeWithdrawn      (9),
        - *  aACompromise           (10)
        - * }
        - * 
        - */ -public class CRLReason - extends ASN1Object -{ - /** - * @deprecated use lower case version - */ - public static final int UNSPECIFIED = 0; - /** - * @deprecated use lower case version - */ - public static final int KEY_COMPROMISE = 1; - /** - * @deprecated use lower case version - */ - public static final int CA_COMPROMISE = 2; - /** - * @deprecated use lower case version - */ - public static final int AFFILIATION_CHANGED = 3; - /** - * @deprecated use lower case version - */ - public static final int SUPERSEDED = 4; - /** - * @deprecated use lower case version - */ - public static final int CESSATION_OF_OPERATION = 5; - /** - * @deprecated use lower case version - */ - public static final int CERTIFICATE_HOLD = 6; - /** - * @deprecated use lower case version - */ - public static final int REMOVE_FROM_CRL = 8; - /** - * @deprecated use lower case version - */ - public static final int PRIVILEGE_WITHDRAWN = 9; - /** - * @deprecated use lower case version - */ - public static final int AA_COMPROMISE = 10; - - public static final int unspecified = 0; - public static final int keyCompromise = 1; - public static final int cACompromise = 2; - public static final int affiliationChanged = 3; - public static final int superseded = 4; - public static final int cessationOfOperation = 5; - public static final int certificateHold = 6; - // 7 -> unknown - public static final int removeFromCRL = 8; - public static final int privilegeWithdrawn = 9; - public static final int aACompromise = 10; - - private static final String[] reasonString = - { - "unspecified", "keyCompromise", "cACompromise", "affiliationChanged", - "superseded", "cessationOfOperation", "certificateHold", "unknown", - "removeFromCRL", "privilegeWithdrawn", "aACompromise" - }; - - private static final Hashtable table = new Hashtable(); - - private ASN1Enumerated value; - - public static CRLReason getInstance(Object o) - { - if (o instanceof CRLReason) - { - return (CRLReason)o; - } - else if (o != null) - { - return lookup(ASN1Enumerated.getInstance(o).getValue().intValue()); - } - - return null; - } - - private CRLReason( - int reason) - { - value = new ASN1Enumerated(reason); - } - - public String toString() - { - String str; - int reason = getValue().intValue(); - if (reason < 0 || reason > 10) - { - str = "invalid"; - } - else - { - str = reasonString[reason]; - } - return "CRLReason: " + str; - } - - public BigInteger getValue() - { - return value.getValue(); - } - - public ASN1Primitive toASN1Primitive() - { - return value; - } - - public static CRLReason lookup(int value) - { - Integer idx = new Integer(value); - - if (!table.containsKey(idx)) - { - table.put(idx, new CRLReason(value)); - } - - return (CRLReason)table.get(idx); - } -} diff --git a/src/org/bouncycastle/asn1/x509/CertPolicyId.java b/src/org/bouncycastle/asn1/x509/CertPolicyId.java deleted file mode 100644 index b5e5436..0000000 --- a/src/org/bouncycastle/asn1/x509/CertPolicyId.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - - -/** - * CertPolicyId, used in the CertificatePolicies and PolicyMappings - * X509V3 Extensions. - * - *
        - *     CertPolicyId ::= OBJECT IDENTIFIER
        - * 
        - */ -public class CertPolicyId extends ASN1ObjectIdentifier -{ - public CertPolicyId (String id) - { - super(id); - } -} diff --git a/src/org/bouncycastle/asn1/x509/Certificate.java b/src/org/bouncycastle/asn1/x509/Certificate.java deleted file mode 100644 index 4ca14d4..0000000 --- a/src/org/bouncycastle/asn1/x509/Certificate.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * an X509Certificate structure. - *
        - *  Certificate ::= SEQUENCE {
        - *      tbsCertificate          TBSCertificate,
        - *      signatureAlgorithm      AlgorithmIdentifier,
        - *      signature               BIT STRING
        - *  }
        - * 
        - */ -public class Certificate - extends ASN1Object -{ - ASN1Sequence seq; - TBSCertificate tbsCert; - AlgorithmIdentifier sigAlgId; - DERBitString sig; - - public static Certificate getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static Certificate getInstance( - Object obj) - { - if (obj instanceof Certificate) - { - return (Certificate)obj; - } - else if (obj != null) - { - return new Certificate(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private Certificate( - ASN1Sequence seq) - { - this.seq = seq; - - // - // correct x509 certficate - // - if (seq.size() == 3) - { - tbsCert = TBSCertificate.getInstance(seq.getObjectAt(0)); - sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); - - sig = DERBitString.getInstance(seq.getObjectAt(2)); - } - else - { - throw new IllegalArgumentException("sequence wrong size for a certificate"); - } - } - - public TBSCertificate getTBSCertificate() - { - return tbsCert; - } - - public ASN1Integer getVersion() - { - return tbsCert.getVersion(); - } - - public int getVersionNumber() - { - return tbsCert.getVersionNumber(); - } - - public ASN1Integer getSerialNumber() - { - return tbsCert.getSerialNumber(); - } - - public X500Name getIssuer() - { - return tbsCert.getIssuer(); - } - - public Time getStartDate() - { - return tbsCert.getStartDate(); - } - - public Time getEndDate() - { - return tbsCert.getEndDate(); - } - - public X500Name getSubject() - { - return tbsCert.getSubject(); - } - - public SubjectPublicKeyInfo getSubjectPublicKeyInfo() - { - return tbsCert.getSubjectPublicKeyInfo(); - } - - public AlgorithmIdentifier getSignatureAlgorithm() - { - return sigAlgId; - } - - public DERBitString getSignature() - { - return sig; - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/x509/CertificateList.java b/src/org/bouncycastle/asn1/x509/CertificateList.java deleted file mode 100644 index 91a37ad..0000000 --- a/src/org/bouncycastle/asn1/x509/CertificateList.java +++ /dev/null @@ -1,127 +0,0 @@ - -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * PKIX RFC-2459 - * - * The X.509 v2 CRL syntax is as follows. For signature calculation, - * the data that is to be signed is ASN.1 DER encoded. - * - *
        - * CertificateList  ::=  SEQUENCE  {
        - *      tbsCertList          TBSCertList,
        - *      signatureAlgorithm   AlgorithmIdentifier,
        - *      signatureValue       BIT STRING  }
        - * 
        - */ -public class CertificateList - extends ASN1Object -{ - TBSCertList tbsCertList; - AlgorithmIdentifier sigAlgId; - DERBitString sig; - - public static CertificateList getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static CertificateList getInstance( - Object obj) - { - if (obj instanceof CertificateList) - { - return (CertificateList)obj; - } - else if (obj != null) - { - return new CertificateList(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public CertificateList( - ASN1Sequence seq) - { - if (seq.size() == 3) - { - tbsCertList = TBSCertList.getInstance(seq.getObjectAt(0)); - sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); - sig = DERBitString.getInstance(seq.getObjectAt(2)); - } - else - { - throw new IllegalArgumentException("sequence wrong size for CertificateList"); - } - } - - public TBSCertList getTBSCertList() - { - return tbsCertList; - } - - public TBSCertList.CRLEntry[] getRevokedCertificates() - { - return tbsCertList.getRevokedCertificates(); - } - - public Enumeration getRevokedCertificateEnumeration() - { - return tbsCertList.getRevokedCertificateEnumeration(); - } - - public AlgorithmIdentifier getSignatureAlgorithm() - { - return sigAlgId; - } - - public DERBitString getSignature() - { - return sig; - } - - public int getVersionNumber() - { - return tbsCertList.getVersionNumber(); - } - - public X500Name getIssuer() - { - return tbsCertList.getIssuer(); - } - - public Time getThisUpdate() - { - return tbsCertList.getThisUpdate(); - } - - public Time getNextUpdate() - { - return tbsCertList.getNextUpdate(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(tbsCertList); - v.add(sigAlgId); - v.add(sig); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/CertificatePair.java b/src/org/bouncycastle/asn1/x509/CertificatePair.java deleted file mode 100644 index c0622d9..0000000 --- a/src/org/bouncycastle/asn1/x509/CertificatePair.java +++ /dev/null @@ -1,169 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * This class helps to support crossCerfificatePairs in a LDAP directory - * according RFC 2587 - * - *
        - *     crossCertificatePairATTRIBUTE::={
        - *       WITH SYNTAX   CertificatePair
        - *       EQUALITY MATCHING RULE certificatePairExactMatch
        - *       ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
        - * 
        - * - *
        The forward elements of the crossCertificatePair attribute of a - * CA's directory entry shall be used to store all, except self-issued - * certificates issued to this CA. Optionally, the reverse elements of the - * crossCertificatePair attribute, of a CA's directory entry may contain a - * subset of certificates issued by this CA to other CAs. When both the forward - * and the reverse elements are present in a single attribute value, issuer name - * in one certificate shall match the subject name in the other and vice versa, - * and the subject public key in one certificate shall be capable of verifying - * the digital signature on the other certificate and vice versa. - * - * When a reverse element is present, the forward element value and the reverse - * element value need not be stored in the same attribute value; in other words, - * they can be stored in either a single attribute value or two attribute - * values.
        - * - *
        - *       CertificatePair ::= SEQUENCE {
        - *         forward        [0]    Certificate OPTIONAL,
        - *         reverse        [1]    Certificate OPTIONAL,
        - *         -- at least one of the pair shall be present -- } 
        - * 
        - */ -public class CertificatePair - extends ASN1Object -{ - private X509CertificateStructure forward; - - private X509CertificateStructure reverse; - - public static CertificatePair getInstance(Object obj) - { - if (obj == null || obj instanceof CertificatePair) - { - return (CertificatePair)obj; - } - - if (obj instanceof ASN1Sequence) - { - return new CertificatePair((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("illegal object in getInstance: " - + obj.getClass().getName()); - } - - /** - * Constructor from ASN1Sequence. - *

        - * The sequence is of type CertificatePair: - *

        - *

        -     *       CertificatePair ::= SEQUENCE {
        -     *         forward        [0]    Certificate OPTIONAL,
        -     *         reverse        [1]    Certificate OPTIONAL,
        -     *         -- at least one of the pair shall be present -- }
        -     * 
        - * - * @param seq The ASN.1 sequence. - */ - private CertificatePair(ASN1Sequence seq) - { - if (seq.size() != 1 && seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement()); - if (o.getTagNo() == 0) - { - forward = X509CertificateStructure.getInstance(o, true); - } - else if (o.getTagNo() == 1) - { - reverse = X509CertificateStructure.getInstance(o, true); - } - else - { - throw new IllegalArgumentException("Bad tag number: " - + o.getTagNo()); - } - } - } - - /** - * Constructor from a given details. - * - * @param forward Certificates issued to this CA. - * @param reverse Certificates issued by this CA to other CAs. - */ - public CertificatePair(X509CertificateStructure forward, X509CertificateStructure reverse) - { - this.forward = forward; - this.reverse = reverse; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *

        - * Returns: - *

        - *

        -     *       CertificatePair ::= SEQUENCE {
        -     *         forward        [0]    Certificate OPTIONAL,
        -     *         reverse        [1]    Certificate OPTIONAL,
        -     *         -- at least one of the pair shall be present -- }
        -     * 
        - * - * @return a ASN1Primitive - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - - if (forward != null) - { - vec.add(new DERTaggedObject(0, forward)); - } - if (reverse != null) - { - vec.add(new DERTaggedObject(1, reverse)); - } - - return new DERSequence(vec); - } - - /** - * @return Returns the forward. - */ - public X509CertificateStructure getForward() - { - return forward; - } - - /** - * @return Returns the reverse. - */ - public X509CertificateStructure getReverse() - { - return reverse; - } -} diff --git a/src/org/bouncycastle/asn1/x509/CertificatePolicies.java b/src/org/bouncycastle/asn1/x509/CertificatePolicies.java deleted file mode 100644 index e42cefa..0000000 --- a/src/org/bouncycastle/asn1/x509/CertificatePolicies.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class CertificatePolicies - extends ASN1Object -{ - private final PolicyInformation[] policyInformation; - - public static CertificatePolicies getInstance( - Object obj) - { - if (obj instanceof CertificatePolicies) - { - return (CertificatePolicies)obj; - } - - if (obj != null) - { - return new CertificatePolicies(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public static CertificatePolicies getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - /** - * Construct a CertificatePolicies object containing one PolicyInformation. - * - * @param name the name to be contained. - */ - public CertificatePolicies( - PolicyInformation name) - { - this.policyInformation = new PolicyInformation[] { name }; - } - - public CertificatePolicies( - PolicyInformation[] policyInformation) - { - this.policyInformation = policyInformation; - } - - private CertificatePolicies( - ASN1Sequence seq) - { - this.policyInformation = new PolicyInformation[seq.size()]; - - for (int i = 0; i != seq.size(); i++) - { - policyInformation[i] = PolicyInformation.getInstance(seq.getObjectAt(i)); - } - } - - public PolicyInformation[] getPolicyInformation() - { - PolicyInformation[] tmp = new PolicyInformation[policyInformation.length]; - - System.arraycopy(policyInformation, 0, tmp, 0, policyInformation.length); - - return tmp; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - return new DERSequence(policyInformation); - } - - public String toString() - { - String p = null; - for (int i = 0; i < policyInformation.length; i++) - { - if (p != null) - { - p += ", "; - } - p += policyInformation[i]; - } - - return "CertificatePolicies: " + p; - } -} diff --git a/src/org/bouncycastle/asn1/x509/DSAParameter.java b/src/org/bouncycastle/asn1/x509/DSAParameter.java deleted file mode 100644 index 1773a5d..0000000 --- a/src/org/bouncycastle/asn1/x509/DSAParameter.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class DSAParameter - extends ASN1Object -{ - ASN1Integer p, q, g; - - public static DSAParameter getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static DSAParameter getInstance( - Object obj) - { - if(obj == null || obj instanceof DSAParameter) - { - return (DSAParameter)obj; - } - - if(obj instanceof ASN1Sequence) - { - return new DSAParameter((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("Invalid DSAParameter: " + obj.getClass().getName()); - } - - public DSAParameter( - BigInteger p, - BigInteger q, - BigInteger g) - { - this.p = new ASN1Integer(p); - this.q = new ASN1Integer(q); - this.g = new ASN1Integer(g); - } - - public DSAParameter( - ASN1Sequence seq) - { - if (seq.size() != 3) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - Enumeration e = seq.getObjects(); - - p = ASN1Integer.getInstance(e.nextElement()); - q = ASN1Integer.getInstance(e.nextElement()); - g = ASN1Integer.getInstance(e.nextElement()); - } - - public BigInteger getP() - { - return p.getPositiveValue(); - } - - public BigInteger getQ() - { - return q.getPositiveValue(); - } - - public BigInteger getG() - { - return g.getPositiveValue(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(p); - v.add(q); - v.add(g); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/DigestInfo.java b/src/org/bouncycastle/asn1/x509/DigestInfo.java deleted file mode 100644 index fd17f1b..0000000 --- a/src/org/bouncycastle/asn1/x509/DigestInfo.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; - -/** - * The DigestInfo object. - *
        - * DigestInfo::=SEQUENCE{
        - *          digestAlgorithm  AlgorithmIdentifier,
        - *          digest OCTET STRING }
        - * 
        - */ -public class DigestInfo - extends ASN1Object -{ - private byte[] digest; - private AlgorithmIdentifier algId; - - public static DigestInfo getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static DigestInfo getInstance( - Object obj) - { - if (obj instanceof DigestInfo) - { - return (DigestInfo)obj; - } - else if (obj != null) - { - return new DigestInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public DigestInfo( - AlgorithmIdentifier algId, - byte[] digest) - { - this.digest = digest; - this.algId = algId; - } - - public DigestInfo( - ASN1Sequence obj) - { - Enumeration e = obj.getObjects(); - - algId = AlgorithmIdentifier.getInstance(e.nextElement()); - digest = ASN1OctetString.getInstance(e.nextElement()).getOctets(); - } - - public AlgorithmIdentifier getAlgorithmId() - { - return algId; - } - - public byte[] getDigest() - { - return digest; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(algId); - v.add(new DEROctetString(digest)); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/DisplayText.java b/src/org/bouncycastle/asn1/x509/DisplayText.java deleted file mode 100644 index acebcbe..0000000 --- a/src/org/bouncycastle/asn1/x509/DisplayText.java +++ /dev/null @@ -1,165 +0,0 @@ - -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1String; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBMPString; -import org.bouncycastle.asn1.DERIA5String; -import org.bouncycastle.asn1.DERUTF8String; -import org.bouncycastle.asn1.DERVisibleString; - -/** - * DisplayText class, used in - * CertificatePolicies X509 V3 extensions (in policy qualifiers). - * - *

        It stores a string in a chosen encoding. - *

        - * DisplayText ::= CHOICE {
        - *      ia5String        IA5String      (SIZE (1..200)),
        - *      visibleString    VisibleString  (SIZE (1..200)),
        - *      bmpString        BMPString      (SIZE (1..200)),
        - *      utf8String       UTF8String     (SIZE (1..200)) }
        - * 
        - * @see PolicyQualifierInfo - * @see PolicyInformation - */ -public class DisplayText - extends ASN1Object - implements ASN1Choice -{ - /** - * Constant corresponding to ia5String encoding. - * - */ - public static final int CONTENT_TYPE_IA5STRING = 0; - /** - * Constant corresponding to bmpString encoding. - * - */ - public static final int CONTENT_TYPE_BMPSTRING = 1; - /** - * Constant corresponding to utf8String encoding. - * - */ - public static final int CONTENT_TYPE_UTF8STRING = 2; - /** - * Constant corresponding to visibleString encoding. - * - */ - public static final int CONTENT_TYPE_VISIBLESTRING = 3; - - /** - * Describe constant DISPLAY_TEXT_MAXIMUM_SIZE here. - * - */ - public static final int DISPLAY_TEXT_MAXIMUM_SIZE = 200; - - int contentType; - ASN1String contents; - - /** - * Creates a new DisplayText instance. - * - * @param type the desired encoding type for the text. - * @param text the text to store. Strings longer than 200 - * characters are truncated. - */ - public DisplayText(int type, String text) - { - if (text.length() > DISPLAY_TEXT_MAXIMUM_SIZE) - { - // RFC3280 limits these strings to 200 chars - // truncate the string - text = text.substring (0, DISPLAY_TEXT_MAXIMUM_SIZE); - } - - contentType = type; - switch (type) - { - case CONTENT_TYPE_IA5STRING: - contents = new DERIA5String(text); - break; - case CONTENT_TYPE_UTF8STRING: - contents = new DERUTF8String(text); - break; - case CONTENT_TYPE_VISIBLESTRING: - contents = new DERVisibleString(text); - break; - case CONTENT_TYPE_BMPSTRING: - contents = new DERBMPString(text); - break; - default: - contents = new DERUTF8String(text); - break; - } - } - - /** - * Creates a new DisplayText instance. - * - * @param text the text to encapsulate. Strings longer than 200 - * characters are truncated. - */ - public DisplayText(String text) - { - // by default use UTF8String - if (text.length() > DISPLAY_TEXT_MAXIMUM_SIZE) - { - text = text.substring(0, DISPLAY_TEXT_MAXIMUM_SIZE); - } - - contentType = CONTENT_TYPE_UTF8STRING; - contents = new DERUTF8String(text); - } - - /** - * Creates a new DisplayText instance. - *

        Useful when reading back a DisplayText class - * from it's ASN1Encodable/DEREncodable form. - * - * @param de a DEREncodable instance. - */ - private DisplayText(ASN1String de) - { - contents = de; - } - - public static DisplayText getInstance(Object obj) - { - if (obj instanceof ASN1String) - { - return new DisplayText((ASN1String)obj); - } - else if (obj == null || obj instanceof DisplayText) - { - return (DisplayText)obj; - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - public static DisplayText getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(obj.getObject()); // must be explicitly tagged - } - - public ASN1Primitive toASN1Primitive() - { - return (ASN1Primitive)contents; - } - - /** - * Returns the stored String object. - * - * @return the stored text as a String. - */ - public String getString() - { - return contents.getString(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/DistributionPoint.java b/src/org/bouncycastle/asn1/x509/DistributionPoint.java deleted file mode 100644 index ab73dfb..0000000 --- a/src/org/bouncycastle/asn1/x509/DistributionPoint.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * The DistributionPoint object. - *

        - * DistributionPoint ::= SEQUENCE {
        - *      distributionPoint [0] DistributionPointName OPTIONAL,
        - *      reasons           [1] ReasonFlags OPTIONAL,
        - *      cRLIssuer         [2] GeneralNames OPTIONAL
        - * }
        - * 
        - */ -public class DistributionPoint - extends ASN1Object -{ - DistributionPointName distributionPoint; - ReasonFlags reasons; - GeneralNames cRLIssuer; - - public static DistributionPoint getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static DistributionPoint getInstance( - Object obj) - { - if(obj == null || obj instanceof DistributionPoint) - { - return (DistributionPoint)obj; - } - - if(obj instanceof ASN1Sequence) - { - return new DistributionPoint((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("Invalid DistributionPoint: " + obj.getClass().getName()); - } - - public DistributionPoint( - ASN1Sequence seq) - { - for (int i = 0; i != seq.size(); i++) - { - ASN1TaggedObject t = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); - switch (t.getTagNo()) - { - case 0: - distributionPoint = DistributionPointName.getInstance(t, true); - break; - case 1: - reasons = new ReasonFlags(DERBitString.getInstance(t, false)); - break; - case 2: - cRLIssuer = GeneralNames.getInstance(t, false); - } - } - } - - public DistributionPoint( - DistributionPointName distributionPoint, - ReasonFlags reasons, - GeneralNames cRLIssuer) - { - this.distributionPoint = distributionPoint; - this.reasons = reasons; - this.cRLIssuer = cRLIssuer; - } - - public DistributionPointName getDistributionPoint() - { - return distributionPoint; - } - - public ReasonFlags getReasons() - { - return reasons; - } - - public GeneralNames getCRLIssuer() - { - return cRLIssuer; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (distributionPoint != null) - { - // - // as this is a CHOICE it must be explicitly tagged - // - v.add(new DERTaggedObject(0, distributionPoint)); - } - - if (reasons != null) - { - v.add(new DERTaggedObject(false, 1, reasons)); - } - - if (cRLIssuer != null) - { - v.add(new DERTaggedObject(false, 2, cRLIssuer)); - } - - return new DERSequence(v); - } - - public String toString() - { - String sep = System.getProperty("line.separator"); - StringBuffer buf = new StringBuffer(); - buf.append("DistributionPoint: ["); - buf.append(sep); - if (distributionPoint != null) - { - appendObject(buf, sep, "distributionPoint", distributionPoint.toString()); - } - if (reasons != null) - { - appendObject(buf, sep, "reasons", reasons.toString()); - } - if (cRLIssuer != null) - { - appendObject(buf, sep, "cRLIssuer", cRLIssuer.toString()); - } - buf.append("]"); - buf.append(sep); - return buf.toString(); - } - - private void appendObject(StringBuffer buf, String sep, String name, String value) - { - String indent = " "; - - buf.append(indent); - buf.append(name); - buf.append(":"); - buf.append(sep); - buf.append(indent); - buf.append(indent); - buf.append(value); - buf.append(sep); - } -} diff --git a/src/org/bouncycastle/asn1/x509/DistributionPointName.java b/src/org/bouncycastle/asn1/x509/DistributionPointName.java deleted file mode 100644 index ee06efd..0000000 --- a/src/org/bouncycastle/asn1/x509/DistributionPointName.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * The DistributionPointName object. - *
        - * DistributionPointName ::= CHOICE {
        - *     fullName                 [0] GeneralNames,
        - *     nameRelativeToCRLIssuer  [1] RDN
        - * }
        - * 
        - */ -public class DistributionPointName - extends ASN1Object - implements ASN1Choice -{ - ASN1Encodable name; - int type; - - public static final int FULL_NAME = 0; - public static final int NAME_RELATIVE_TO_CRL_ISSUER = 1; - - public static DistributionPointName getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1TaggedObject.getInstance(obj, true)); - } - - public static DistributionPointName getInstance( - Object obj) - { - if (obj == null || obj instanceof DistributionPointName) - { - return (DistributionPointName)obj; - } - else if (obj instanceof ASN1TaggedObject) - { - return new DistributionPointName((ASN1TaggedObject)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public DistributionPointName( - int type, - ASN1Encodable name) - { - this.type = type; - this.name = name; - } - - public DistributionPointName( - GeneralNames name) - { - this(FULL_NAME, name); - } - - /** - * Return the tag number applying to the underlying choice. - * - * @return the tag number for this point name. - */ - public int getType() - { - return this.type; - } - - /** - * Return the tagged object inside the distribution point name. - * - * @return the underlying choice item. - */ - public ASN1Encodable getName() - { - return (ASN1Encodable)name; - } - - public DistributionPointName( - ASN1TaggedObject obj) - { - this.type = obj.getTagNo(); - - if (type == 0) - { - this.name = GeneralNames.getInstance(obj, false); - } - else - { - this.name = ASN1Set.getInstance(obj, false); - } - } - - public ASN1Primitive toASN1Primitive() - { - return new DERTaggedObject(false, type, name); - } - - public String toString() - { - String sep = System.getProperty("line.separator"); - StringBuffer buf = new StringBuffer(); - buf.append("DistributionPointName: ["); - buf.append(sep); - if (type == FULL_NAME) - { - appendObject(buf, sep, "fullName", name.toString()); - } - else - { - appendObject(buf, sep, "nameRelativeToCRLIssuer", name.toString()); - } - buf.append("]"); - buf.append(sep); - return buf.toString(); - } - - private void appendObject(StringBuffer buf, String sep, String name, String value) - { - String indent = " "; - - buf.append(indent); - buf.append(name); - buf.append(":"); - buf.append(sep); - buf.append(indent); - buf.append(indent); - buf.append(value); - buf.append(sep); - } -} diff --git a/src/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java b/src/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java deleted file mode 100644 index 97f1c54..0000000 --- a/src/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -/** - * The extendedKeyUsage object. - *
        - *      extendedKeyUsage ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
        - * 
        - */ -public class ExtendedKeyUsage - extends ASN1Object -{ - Hashtable usageTable = new Hashtable(); - ASN1Sequence seq; - - public static ExtendedKeyUsage getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static ExtendedKeyUsage getInstance( - Object obj) - { - if (obj instanceof ExtendedKeyUsage) - { - return (ExtendedKeyUsage)obj; - } - - if (obj != null) - { - return new ExtendedKeyUsage(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public ExtendedKeyUsage( - KeyPurposeId usage) - { - this.seq = new DERSequence(usage); - - this.usageTable.put(usage, usage); - } - - public ExtendedKeyUsage( - ASN1Sequence seq) - { - this.seq = seq; - - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - Object o = e.nextElement(); - if (!(o instanceof ASN1ObjectIdentifier)) - { - throw new IllegalArgumentException("Only ASN1ObjectIdentifiers allowed in ExtendedKeyUsage."); - } - this.usageTable.put(o, o); - } - } - - public ExtendedKeyUsage( - Vector usages) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - Enumeration e = usages.elements(); - - while (e.hasMoreElements()) - { - ASN1Primitive o = (ASN1Primitive)e.nextElement(); - - v.add(o); - this.usageTable.put(o, o); - } - - this.seq = new DERSequence(v); - } - - public boolean hasKeyPurposeId( - KeyPurposeId keyPurposeId) - { - return (usageTable.get(keyPurposeId) != null); - } - - /** - * Returns all extended key usages. - * The returned vector contains ASN1ObjectIdentifiers. - * @return A vector with all key purposes. - */ - public Vector getUsages() - { - Vector temp = new Vector(); - for (Enumeration it = usageTable.elements(); it.hasMoreElements();) - { - temp.addElement(it.nextElement()); - } - return temp; - } - - public int size() - { - return usageTable.size(); - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/x509/Extension.java b/src/org/bouncycastle/asn1/x509/Extension.java deleted file mode 100644 index e6a06d8..0000000 --- a/src/org/bouncycastle/asn1/x509/Extension.java +++ /dev/null @@ -1,266 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; - -import org.bouncycastle.asn1.ASN1Boolean; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DEROctetString; - -/** - * an object for the elements in the X.509 V3 extension block. - */ -public class Extension -{ - /** - * Subject Directory Attributes - */ - public static final ASN1ObjectIdentifier subjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9"); - - /** - * Subject Key Identifier - */ - public static final ASN1ObjectIdentifier subjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14"); - - /** - * Key Usage - */ - public static final ASN1ObjectIdentifier keyUsage = new ASN1ObjectIdentifier("2.5.29.15"); - - /** - * Private Key Usage Period - */ - public static final ASN1ObjectIdentifier privateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16"); - - /** - * Subject Alternative Name - */ - public static final ASN1ObjectIdentifier subjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17"); - - /** - * Issuer Alternative Name - */ - public static final ASN1ObjectIdentifier issuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18"); - - /** - * Basic Constraints - */ - public static final ASN1ObjectIdentifier basicConstraints = new ASN1ObjectIdentifier("2.5.29.19"); - - /** - * CRL Number - */ - public static final ASN1ObjectIdentifier cRLNumber = new ASN1ObjectIdentifier("2.5.29.20"); - - /** - * Reason code - */ - public static final ASN1ObjectIdentifier reasonCode = new ASN1ObjectIdentifier("2.5.29.21"); - - /** - * Hold Instruction Code - */ - public static final ASN1ObjectIdentifier instructionCode = new ASN1ObjectIdentifier("2.5.29.23"); - - /** - * Invalidity Date - */ - public static final ASN1ObjectIdentifier invalidityDate = new ASN1ObjectIdentifier("2.5.29.24"); - - /** - * Delta CRL indicator - */ - public static final ASN1ObjectIdentifier deltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27"); - - /** - * Issuing Distribution Point - */ - public static final ASN1ObjectIdentifier issuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28"); - - /** - * Certificate Issuer - */ - public static final ASN1ObjectIdentifier certificateIssuer = new ASN1ObjectIdentifier("2.5.29.29"); - - /** - * Name Constraints - */ - public static final ASN1ObjectIdentifier nameConstraints = new ASN1ObjectIdentifier("2.5.29.30"); - - /** - * CRL Distribution Points - */ - public static final ASN1ObjectIdentifier cRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31"); - - /** - * Certificate Policies - */ - public static final ASN1ObjectIdentifier certificatePolicies = new ASN1ObjectIdentifier("2.5.29.32"); - - /** - * Policy Mappings - */ - public static final ASN1ObjectIdentifier policyMappings = new ASN1ObjectIdentifier("2.5.29.33"); - - /** - * Authority Key Identifier - */ - public static final ASN1ObjectIdentifier authorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35"); - - /** - * Policy Constraints - */ - public static final ASN1ObjectIdentifier policyConstraints = new ASN1ObjectIdentifier("2.5.29.36"); - - /** - * Extended Key Usage - */ - public static final ASN1ObjectIdentifier extendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37"); - - /** - * Freshest CRL - */ - public static final ASN1ObjectIdentifier freshestCRL = new ASN1ObjectIdentifier("2.5.29.46"); - - /** - * Inhibit Any Policy - */ - public static final ASN1ObjectIdentifier inhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54"); - - /** - * Authority Info Access - */ - public static final ASN1ObjectIdentifier authorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1"); - - /** - * Subject Info Access - */ - public static final ASN1ObjectIdentifier subjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11"); - - /** - * Logo Type - */ - public static final ASN1ObjectIdentifier logoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12"); - - /** - * BiometricInfo - */ - public static final ASN1ObjectIdentifier biometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2"); - - /** - * QCStatements - */ - public static final ASN1ObjectIdentifier qCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3"); - - /** - * Audit identity extension in attribute certificates. - */ - public static final ASN1ObjectIdentifier auditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4"); - - /** - * NoRevAvail extension in attribute certificates. - */ - public static final ASN1ObjectIdentifier noRevAvail = new ASN1ObjectIdentifier("2.5.29.56"); - - /** - * TargetInformation extension in attribute certificates. - */ - public static final ASN1ObjectIdentifier targetInformation = new ASN1ObjectIdentifier("2.5.29.55"); - - private ASN1ObjectIdentifier extnId; - - boolean critical; - ASN1OctetString value; - - public Extension( - ASN1ObjectIdentifier extnId, - ASN1Boolean critical, - ASN1OctetString value) - { - this(extnId, critical.isTrue(), value); - } - - public Extension( - ASN1ObjectIdentifier extnId, - boolean critical, - byte[] value) - { - this(extnId, critical, new DEROctetString(value)); - } - - public Extension( - ASN1ObjectIdentifier extnId, - boolean critical, - ASN1OctetString value) - { - this.extnId = extnId; - this.critical = critical; - this.value = value; - } - - public ASN1ObjectIdentifier getExtnId() - { - return extnId; - } - - public boolean isCritical() - { - return critical; - } - - public ASN1OctetString getExtnValue() - { - return value; - } - - public ASN1Encodable getParsedValue() - { - return convertValueToObject(this); - } - - public int hashCode() - { - if (this.isCritical()) - { - return this.getExtnValue().hashCode(); - } - - return ~this.getExtnValue().hashCode(); - } - - public boolean equals( - Object o) - { - if (!(o instanceof Extension)) - { - return false; - } - - Extension other = (Extension)o; - - return other.getExtnValue().equals(this.getExtnValue()) - && (other.isCritical() == this.isCritical()); - } - - /** - * Convert the value of the passed in extension to an object - * @param ext the extension to parse - * @return the object the value string contains - * @exception IllegalArgumentException if conversion is not possible - */ - private static ASN1Primitive convertValueToObject( - Extension ext) - throws IllegalArgumentException - { - try - { - return ASN1Primitive.fromByteArray(ext.getExtnValue().getOctets()); - } - catch (IOException e) - { - throw new IllegalArgumentException("can't convert extension: " + e); - } - } -} diff --git a/src/org/bouncycastle/asn1/x509/Extensions.java b/src/org/bouncycastle/asn1/x509/Extensions.java deleted file mode 100644 index 1b93305..0000000 --- a/src/org/bouncycastle/asn1/x509/Extensions.java +++ /dev/null @@ -1,214 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Boolean; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class Extensions - extends ASN1Object -{ - private Hashtable extensions = new Hashtable(); - private Vector ordering = new Vector(); - - public static Extensions getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static Extensions getInstance( - Object obj) - { - if (obj instanceof Extensions) - { - return (Extensions)obj; - } - else if (obj != null) - { - return new Extensions(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor from ASN1Sequence. - * - * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString) - */ - private Extensions( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement()); - - if (s.size() == 3) - { - extensions.put(s.getObjectAt(0), new Extension(ASN1ObjectIdentifier.getInstance(s.getObjectAt(0)), ASN1Boolean.getInstance(s.getObjectAt(1)), ASN1OctetString.getInstance(s.getObjectAt(2)))); - } - else if (s.size() == 2) - { - extensions.put(s.getObjectAt(0), new Extension(ASN1ObjectIdentifier.getInstance(s.getObjectAt(0)), false, ASN1OctetString.getInstance(s.getObjectAt(1)))); - } - else - { - throw new IllegalArgumentException("Bad sequence size: " + s.size()); - } - - ordering.addElement(s.getObjectAt(0)); - } - } - - /** - * Base Constructor - * - * @param extensions an array of extensions. - */ - public Extensions( - Extension[] extensions) - { - for (int i = 0; i != extensions.length; i++) - { - Extension ext = extensions[i]; - - this.ordering.addElement(ext.getExtnId()); - this.extensions.put(ext.getExtnId(), ext); - } - } - - /** - * return an Enumeration of the extension field's object ids. - */ - public Enumeration oids() - { - return ordering.elements(); - } - - /** - * return the extension represented by the object identifier - * passed in. - * - * @return the extension if it's present, null otherwise. - */ - public Extension getExtension( - ASN1ObjectIdentifier oid) - { - return (Extension)extensions.get(oid); - } - - /** - *
        -     *     Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
        -     *
        -     *     Extension         ::=   SEQUENCE {
        -     *        extnId            EXTENSION.&id ({ExtensionSet}),
        -     *        critical          BOOLEAN DEFAULT FALSE,
        -     *        extnValue         OCTET STRING }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - Enumeration e = ordering.elements(); - - while (e.hasMoreElements()) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement(); - Extension ext = (Extension)extensions.get(oid); - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(oid); - - if (ext.isCritical()) - { - v.add(ASN1Boolean.getInstance(true)); - } - - v.add(ext.getExtnValue()); - - vec.add(new DERSequence(v)); - } - - return new DERSequence(vec); - } - - public boolean equivalent( - Extensions other) - { - if (extensions.size() != other.extensions.size()) - { - return false; - } - - Enumeration e1 = extensions.keys(); - - while (e1.hasMoreElements()) - { - Object key = e1.nextElement(); - - if (!extensions.get(key).equals(other.extensions.get(key))) - { - return false; - } - } - - return true; - } - - public ASN1ObjectIdentifier[] getExtensionOIDs() - { - return toOidArray(ordering); - } - - public ASN1ObjectIdentifier[] getNonCriticalExtensionOIDs() - { - return getExtensionOIDs(false); - } - - public ASN1ObjectIdentifier[] getCriticalExtensionOIDs() - { - return getExtensionOIDs(true); - } - - private ASN1ObjectIdentifier[] getExtensionOIDs(boolean isCritical) - { - Vector oidVec = new Vector(); - - for (int i = 0; i != ordering.size(); i++) - { - Object oid = ordering.elementAt(i); - - if (((Extension)extensions.get(oid)).isCritical() == isCritical) - { - oidVec.addElement(oid); - } - } - - return toOidArray(oidVec); - } - - private ASN1ObjectIdentifier[] toOidArray(Vector oidVec) - { - ASN1ObjectIdentifier[] oids = new ASN1ObjectIdentifier[oidVec.size()]; - - for (int i = 0; i != oids.length; i++) - { - oids[i] = (ASN1ObjectIdentifier)oidVec.elementAt(i); - } - return oids; - } -} diff --git a/src/org/bouncycastle/asn1/x509/ExtensionsGenerator.java b/src/org/bouncycastle/asn1/x509/ExtensionsGenerator.java deleted file mode 100644 index 270ef1c..0000000 --- a/src/org/bouncycastle/asn1/x509/ExtensionsGenerator.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.DEROctetString; - -/** - * Generator for X.509 extensions - */ -public class ExtensionsGenerator -{ - private Hashtable extensions = new Hashtable(); - private Vector extOrdering = new Vector(); - - /** - * Reset the generator - */ - public void reset() - { - extensions = new Hashtable(); - extOrdering = new Vector(); - } - - /** - * Add an extension with the given oid and the passed in value to be included - * in the OCTET STRING associated with the extension. - * - * @param oid OID for the extension. - * @param critical true if critical, false otherwise. - * @param value the ASN.1 object to be included in the extension. - */ - public void addExtension( - ASN1ObjectIdentifier oid, - boolean critical, - ASN1Encodable value) - throws IOException - { - this.addExtension(oid, critical, value.toASN1Primitive().getEncoded(ASN1Encoding.DER)); - } - - /** - * Add an extension with the given oid and the passed in byte array to be wrapped in the - * OCTET STRING associated with the extension. - * - * @param oid OID for the extension. - * @param critical true if critical, false otherwise. - * @param value the byte array to be wrapped. - */ - public void addExtension( - ASN1ObjectIdentifier oid, - boolean critical, - byte[] value) - { - if (extensions.containsKey(oid)) - { - throw new IllegalArgumentException("extension " + oid + " already added"); - } - - extOrdering.addElement(oid); - extensions.put(oid, new Extension(oid, critical, new DEROctetString(value))); - } - - /** - * Return true if there are no extension present in this generator. - * - * @return true if empty, false otherwise - */ - public boolean isEmpty() - { - return extOrdering.isEmpty(); - } - - /** - * Generate an Extensions object based on the current state of the generator. - * - * @return an X09Extensions object. - */ - public Extensions generate() - { - Extension[] exts = new Extension[extOrdering.size()]; - - for (int i = 0; i != extOrdering.size(); i++) - { - exts[i] = (Extension)extensions.get(extOrdering.elementAt(i)); - } - - return new Extensions(exts); - } -} diff --git a/src/org/bouncycastle/asn1/x509/GeneralName.java b/src/org/bouncycastle/asn1/x509/GeneralName.java deleted file mode 100644 index 1829ecd..0000000 --- a/src/org/bouncycastle/asn1/x509/GeneralName.java +++ /dev/null @@ -1,439 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; -import java.util.StringTokenizer; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERIA5String; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.util.IPAddress; - -/** - * The GeneralName object. - *
        - * GeneralName ::= CHOICE {
        - *      otherName                       [0]     OtherName,
        - *      rfc822Name                      [1]     IA5String,
        - *      dNSName                         [2]     IA5String,
        - *      x400Address                     [3]     ORAddress,
        - *      directoryName                   [4]     Name,
        - *      ediPartyName                    [5]     EDIPartyName,
        - *      uniformResourceIdentifier       [6]     IA5String,
        - *      iPAddress                       [7]     OCTET STRING,
        - *      registeredID                    [8]     OBJECT IDENTIFIER}
        - *
        - * OtherName ::= SEQUENCE {
        - *      type-id    OBJECT IDENTIFIER,
        - *      value      [0] EXPLICIT ANY DEFINED BY type-id }
        - *
        - * EDIPartyName ::= SEQUENCE {
        - *      nameAssigner            [0]     DirectoryString OPTIONAL,
        - *      partyName               [1]     DirectoryString }
        - * 
        - * Name ::= CHOICE { RDNSequence }
        - * 
        - */ -public class GeneralName - extends ASN1Object - implements ASN1Choice -{ - public static final int otherName = 0; - public static final int rfc822Name = 1; - public static final int dNSName = 2; - public static final int x400Address = 3; - public static final int directoryName = 4; - public static final int ediPartyName = 5; - public static final int uniformResourceIdentifier = 6; - public static final int iPAddress = 7; - public static final int registeredID = 8; - - private ASN1Encodable obj; - private int tag; - - /** - * @deprecated use X500Name constructor. - * @param dirName - */ - public GeneralName( - X509Name dirName) - { - this.obj = X500Name.getInstance(dirName); - this.tag = 4; - } - - public GeneralName( - X500Name dirName) - { - this.obj = dirName; - this.tag = 4; - } - - /** - * When the subjectAltName extension contains an Internet mail address, - * the address MUST be included as an rfc822Name. The format of an - * rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822]. - * - * When the subjectAltName extension contains a domain name service - * label, the domain name MUST be stored in the dNSName (an IA5String). - * The name MUST be in the "preferred name syntax," as specified by RFC - * 1034 [RFC 1034]. - * - * When the subjectAltName extension contains a URI, the name MUST be - * stored in the uniformResourceIdentifier (an IA5String). The name MUST - * be a non-relative URL, and MUST follow the URL syntax and encoding - * rules specified in [RFC 1738]. The name must include both a scheme - * (e.g., "http" or "ftp") and a scheme-specific-part. The scheme- - * specific-part must include a fully qualified domain name or IP - * address as the host. - * - * When the subjectAltName extension contains a iPAddress, the address - * MUST be stored in the octet string in "network byte order," as - * specified in RFC 791 [RFC 791]. The least significant bit (LSB) of - * each octet is the LSB of the corresponding byte in the network - * address. For IP Version 4, as specified in RFC 791, the octet string - * MUST contain exactly four octets. For IP Version 6, as specified in - * RFC 1883, the octet string MUST contain exactly sixteen octets [RFC - * 1883]. - */ - public GeneralName( - int tag, - ASN1Encodable name) - { - this.obj = name; - this.tag = tag; - } - - /** - * Create a GeneralName for the given tag from the passed in String. - *

        - * This constructor can handle: - *

          - *
        • rfc822Name - *
        • iPAddress - *
        • directoryName - *
        • dNSName - *
        • uniformResourceIdentifier - *
        • registeredID - *
        - * For x400Address, otherName and ediPartyName there is no common string - * format defined. - *

        - * Note: A directory name can be encoded in different ways into a byte - * representation. Be aware of this if the byte representation is used for - * comparing results. - * - * @param tag tag number - * @param name string representation of name - * @throws IllegalArgumentException if the string encoding is not correct or * not supported. - */ - public GeneralName( - int tag, - String name) - { - this.tag = tag; - - if (tag == rfc822Name || tag == dNSName || tag == uniformResourceIdentifier) - { - this.obj = new DERIA5String(name); - } - else if (tag == registeredID) - { - this.obj = new ASN1ObjectIdentifier(name); - } - else if (tag == directoryName) - { - this.obj = new X500Name(name); - } - else if (tag == iPAddress) - { - byte[] enc = toGeneralNameEncoding(name); - if (enc != null) - { - this.obj = new DEROctetString(enc); - } - else - { - throw new IllegalArgumentException("IP Address is invalid"); - } - } - else - { - throw new IllegalArgumentException("can't process String for tag: " + tag); - } - } - - public static GeneralName getInstance( - Object obj) - { - if (obj == null || obj instanceof GeneralName) - { - return (GeneralName)obj; - } - - if (obj instanceof ASN1TaggedObject) - { - ASN1TaggedObject tagObj = (ASN1TaggedObject)obj; - int tag = tagObj.getTagNo(); - - switch (tag) - { - case otherName: - return new GeneralName(tag, ASN1Sequence.getInstance(tagObj, false)); - case rfc822Name: - return new GeneralName(tag, DERIA5String.getInstance(tagObj, false)); - case dNSName: - return new GeneralName(tag, DERIA5String.getInstance(tagObj, false)); - case x400Address: - throw new IllegalArgumentException("unknown tag: " + tag); - case directoryName: - return new GeneralName(tag, X500Name.getInstance(tagObj, true)); - case ediPartyName: - return new GeneralName(tag, ASN1Sequence.getInstance(tagObj, false)); - case uniformResourceIdentifier: - return new GeneralName(tag, DERIA5String.getInstance(tagObj, false)); - case iPAddress: - return new GeneralName(tag, ASN1OctetString.getInstance(tagObj, false)); - case registeredID: - return new GeneralName(tag, ASN1ObjectIdentifier.getInstance(tagObj, false)); - } - } - - if (obj instanceof byte[]) - { - try - { - return getInstance(ASN1Primitive.fromByteArray((byte[])obj)); - } - catch (IOException e) - { - throw new IllegalArgumentException("unable to parse encoded general name"); - } - } - - throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); - } - - public static GeneralName getInstance( - ASN1TaggedObject tagObj, - boolean explicit) - { - return GeneralName.getInstance(ASN1TaggedObject.getInstance(tagObj, true)); - } - - public int getTagNo() - { - return tag; - } - - public ASN1Encodable getName() - { - return obj; - } - - public String toString() - { - StringBuffer buf = new StringBuffer(); - - buf.append(tag); - buf.append(": "); - switch (tag) - { - case rfc822Name: - case dNSName: - case uniformResourceIdentifier: - buf.append(DERIA5String.getInstance(obj).getString()); - break; - case directoryName: - buf.append(X500Name.getInstance(obj).toString()); - break; - default: - buf.append(obj.toString()); - } - return buf.toString(); - } - - private byte[] toGeneralNameEncoding(String ip) - { - if (IPAddress.isValidIPv6WithNetmask(ip) || IPAddress.isValidIPv6(ip)) - { - int slashIndex = ip.indexOf('/'); - - if (slashIndex < 0) - { - byte[] addr = new byte[16]; - int[] parsedIp = parseIPv6(ip); - copyInts(parsedIp, addr, 0); - - return addr; - } - else - { - byte[] addr = new byte[32]; - int[] parsedIp = parseIPv6(ip.substring(0, slashIndex)); - copyInts(parsedIp, addr, 0); - String mask = ip.substring(slashIndex + 1); - if (mask.indexOf(':') > 0) - { - parsedIp = parseIPv6(mask); - } - else - { - parsedIp = parseMask(mask); - } - copyInts(parsedIp, addr, 16); - - return addr; - } - } - else if (IPAddress.isValidIPv4WithNetmask(ip) || IPAddress.isValidIPv4(ip)) - { - int slashIndex = ip.indexOf('/'); - - if (slashIndex < 0) - { - byte[] addr = new byte[4]; - - parseIPv4(ip, addr, 0); - - return addr; - } - else - { - byte[] addr = new byte[8]; - - parseIPv4(ip.substring(0, slashIndex), addr, 0); - - String mask = ip.substring(slashIndex + 1); - if (mask.indexOf('.') > 0) - { - parseIPv4(mask, addr, 4); - } - else - { - parseIPv4Mask(mask, addr, 4); - } - - return addr; - } - } - - return null; - } - - private void parseIPv4Mask(String mask, byte[] addr, int offset) - { - int maskVal = Integer.parseInt(mask); - - for (int i = 0; i != maskVal; i++) - { - addr[(i / 8) + offset] |= 1 << (7 - (i % 8)); - } - } - - private void parseIPv4(String ip, byte[] addr, int offset) - { - StringTokenizer sTok = new StringTokenizer(ip, "./"); - int index = 0; - - while (sTok.hasMoreTokens()) - { - addr[offset + index++] = (byte)Integer.parseInt(sTok.nextToken()); - } - } - - private int[] parseMask(String mask) - { - int[] res = new int[8]; - int maskVal = Integer.parseInt(mask); - - for (int i = 0; i != maskVal; i++) - { - res[i / 16] |= 1 << (15 - (i % 16)); - } - return res; - } - - private void copyInts(int[] parsedIp, byte[] addr, int offSet) - { - for (int i = 0; i != parsedIp.length; i++) - { - addr[(i * 2) + offSet] = (byte)(parsedIp[i] >> 8); - addr[(i * 2 + 1) + offSet] = (byte)parsedIp[i]; - } - } - - private int[] parseIPv6(String ip) - { - StringTokenizer sTok = new StringTokenizer(ip, ":", true); - int index = 0; - int[] val = new int[8]; - - if (ip.charAt(0) == ':' && ip.charAt(1) == ':') - { - sTok.nextToken(); // skip the first one - } - - int doubleColon = -1; - - while (sTok.hasMoreTokens()) - { - String e = sTok.nextToken(); - - if (e.equals(":")) - { - doubleColon = index; - val[index++] = 0; - } - else - { - if (e.indexOf('.') < 0) - { - val[index++] = Integer.parseInt(e, 16); - if (sTok.hasMoreTokens()) - { - sTok.nextToken(); - } - } - else - { - StringTokenizer eTok = new StringTokenizer(e, "."); - - val[index++] = (Integer.parseInt(eTok.nextToken()) << 8) | Integer.parseInt(eTok.nextToken()); - val[index++] = (Integer.parseInt(eTok.nextToken()) << 8) | Integer.parseInt(eTok.nextToken()); - } - } - } - - if (index != val.length) - { - System.arraycopy(val, doubleColon, val, val.length - (index - doubleColon), index - doubleColon); - for (int i = doubleColon; i != val.length - (index - doubleColon); i++) - { - val[i] = 0; - } - } - - return val; - } - - public ASN1Primitive toASN1Primitive() - { - if (tag == directoryName) // directoryName is explicitly tagged as it is a CHOICE - { - return new DERTaggedObject(true, tag, obj); - } - else - { - return new DERTaggedObject(false, tag, obj); - } - } -} diff --git a/src/org/bouncycastle/asn1/x509/GeneralNames.java b/src/org/bouncycastle/asn1/x509/GeneralNames.java deleted file mode 100644 index bd45407..0000000 --- a/src/org/bouncycastle/asn1/x509/GeneralNames.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class GeneralNames - extends ASN1Object -{ - private final GeneralName[] names; - - public static GeneralNames getInstance( - Object obj) - { - if (obj instanceof GeneralNames) - { - return (GeneralNames)obj; - } - - if (obj != null) - { - return new GeneralNames(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public static GeneralNames getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - /** - * Construct a GeneralNames object containing one GeneralName. - * - * @param name the name to be contained. - */ - public GeneralNames( - GeneralName name) - { - this.names = new GeneralName[] { name }; - } - - - public GeneralNames( - GeneralName[] names) - { - this.names = names; - } - - private GeneralNames( - ASN1Sequence seq) - { - this.names = new GeneralName[seq.size()]; - - for (int i = 0; i != seq.size(); i++) - { - names[i] = GeneralName.getInstance(seq.getObjectAt(i)); - } - } - - public GeneralName[] getNames() - { - GeneralName[] tmp = new GeneralName[names.length]; - - System.arraycopy(names, 0, tmp, 0, names.length); - - return tmp; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *

        -     * GeneralNames ::= SEQUENCE SIZE {1..MAX} OF GeneralName
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - return new DERSequence(names); - } - - public String toString() - { - StringBuffer buf = new StringBuffer(); - String sep = System.getProperty("line.separator"); - - buf.append("GeneralNames:"); - buf.append(sep); - - for (int i = 0; i != names.length; i++) - { - buf.append(" "); - buf.append(names[i]); - buf.append(sep); - } - return buf.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/GeneralSubtree.java b/src/org/bouncycastle/asn1/x509/GeneralSubtree.java deleted file mode 100644 index 2037923..0000000 --- a/src/org/bouncycastle/asn1/x509/GeneralSubtree.java +++ /dev/null @@ -1,218 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * Class for containing a restriction object subtrees in NameConstraints. See - * RFC 3280. - * - *
        - *       
        - *       GeneralSubtree ::= SEQUENCE 
        - *       {
        - *         base                    GeneralName,
        - *         minimum         [0]     BaseDistance DEFAULT 0,
        - *         maximum         [1]     BaseDistance OPTIONAL 
        - *       }
        - * 
        - * - * @see org.bouncycastle.asn1.x509.NameConstraints - * - */ -public class GeneralSubtree - extends ASN1Object -{ - private static final BigInteger ZERO = BigInteger.valueOf(0); - - private GeneralName base; - - private ASN1Integer minimum; - - private ASN1Integer maximum; - - private GeneralSubtree( - ASN1Sequence seq) - { - base = GeneralName.getInstance(seq.getObjectAt(0)); - - switch (seq.size()) - { - case 1: - break; - case 2: - ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(1)); - switch (o.getTagNo()) - { - case 0: - minimum = ASN1Integer.getInstance(o, false); - break; - case 1: - maximum = ASN1Integer.getInstance(o, false); - break; - default: - throw new IllegalArgumentException("Bad tag number: " - + o.getTagNo()); - } - break; - case 3: - { - { - ASN1TaggedObject oMin = ASN1TaggedObject.getInstance(seq.getObjectAt(1)); - if (oMin.getTagNo() != 0) - { - throw new IllegalArgumentException("Bad tag number for 'minimum': " + oMin.getTagNo()); - } - minimum = ASN1Integer.getInstance(oMin, false); - } - - { - ASN1TaggedObject oMax = ASN1TaggedObject.getInstance(seq.getObjectAt(2)); - if (oMax.getTagNo() != 1) - { - throw new IllegalArgumentException("Bad tag number for 'maximum': " + oMax.getTagNo()); - } - maximum = ASN1Integer.getInstance(oMax, false); - } - - break; - } - default: - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - } - - /** - * Constructor from a given details. - * - * According RFC 3280, the minimum and maximum fields are not used with any - * name forms, thus minimum MUST be zero, and maximum MUST be absent. - *

        - * If minimum is null, zero is assumed, if - * maximum is null, maximum is absent. - * - * @param base - * A restriction. - * @param minimum - * Minimum - * - * @param maximum - * Maximum - */ - public GeneralSubtree( - GeneralName base, - BigInteger minimum, - BigInteger maximum) - { - this.base = base; - if (maximum != null) - { - this.maximum = new ASN1Integer(maximum); - } - if (minimum == null) - { - this.minimum = null; - } - else - { - this.minimum = new ASN1Integer(minimum); - } - } - - public GeneralSubtree(GeneralName base) - { - this(base, null, null); - } - - public static GeneralSubtree getInstance( - ASN1TaggedObject o, - boolean explicit) - { - return new GeneralSubtree(ASN1Sequence.getInstance(o, explicit)); - } - - public static GeneralSubtree getInstance( - Object obj) - { - if (obj == null) - { - return null; - } - - if (obj instanceof GeneralSubtree) - { - return (GeneralSubtree) obj; - } - - return new GeneralSubtree(ASN1Sequence.getInstance(obj)); - } - - public GeneralName getBase() - { - return base; - } - - public BigInteger getMinimum() - { - if (minimum == null) - { - return ZERO; - } - - return minimum.getValue(); - } - - public BigInteger getMaximum() - { - if (maximum == null) - { - return null; - } - - return maximum.getValue(); - } - - /** - * Produce an object suitable for an ASN1OutputStream. - * - * Returns: - * - *

        -     *       GeneralSubtree ::= SEQUENCE 
        -     *       {
        -     *         base                    GeneralName,
        -     *         minimum         [0]     BaseDistance DEFAULT 0,
        -     *         maximum         [1]     BaseDistance OPTIONAL 
        -     *       }
        -     * 
        - * - * @return a ASN1Primitive - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(base); - - if (minimum != null && !minimum.getValue().equals(ZERO)) - { - v.add(new DERTaggedObject(false, 0, minimum)); - } - - if (maximum != null) - { - v.add(new DERTaggedObject(false, 1, maximum)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/Holder.java b/src/org/bouncycastle/asn1/x509/Holder.java deleted file mode 100644 index 6ae6e35..0000000 --- a/src/org/bouncycastle/asn1/x509/Holder.java +++ /dev/null @@ -1,245 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * The Holder object. - *

        - * For an v2 attribute certificate this is: - * - *

        - *            Holder ::= SEQUENCE {
        - *                  baseCertificateID   [0] IssuerSerial OPTIONAL,
        - *                           -- the issuer and serial number of
        - *                           -- the holder's Public Key Certificate
        - *                  entityName          [1] GeneralNames OPTIONAL,
        - *                           -- the name of the claimant or role
        - *                  objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
        - *                           -- used to directly authenticate the holder,
        - *                           -- for example, an executable
        - *            }
        - * 
        - * - *

        - * For an v1 attribute certificate this is: - * - *

        - *         subject CHOICE {
        - *          baseCertificateID [0] IssuerSerial,
        - *          -- associated with a Public Key Certificate
        - *          subjectName [1] GeneralNames },
        - *          -- associated with a name
        - * 
        - */ -public class Holder - extends ASN1Object -{ - public static final int V1_CERTIFICATE_HOLDER = 0; - public static final int V2_CERTIFICATE_HOLDER = 1; - - IssuerSerial baseCertificateID; - - GeneralNames entityName; - - ObjectDigestInfo objectDigestInfo; - - private int version = V2_CERTIFICATE_HOLDER; - - public static Holder getInstance(Object obj) - { - if (obj instanceof Holder) - { - return (Holder)obj; - } - else if (obj instanceof ASN1TaggedObject) - { - return new Holder(ASN1TaggedObject.getInstance(obj)); - } - else if (obj != null) - { - return new Holder(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor for a holder for an V1 attribute certificate. - * - * @param tagObj The ASN.1 tagged holder object. - */ - private Holder(ASN1TaggedObject tagObj) - { - switch (tagObj.getTagNo()) - { - case 0: - baseCertificateID = IssuerSerial.getInstance(tagObj, false); - break; - case 1: - entityName = GeneralNames.getInstance(tagObj, false); - break; - default: - throw new IllegalArgumentException("unknown tag in Holder"); - } - version = 0; - } - - /** - * Constructor for a holder for an V2 attribute certificate. - * - * @param seq The ASN.1 sequence. - */ - private Holder(ASN1Sequence seq) - { - if (seq.size() > 3) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - for (int i = 0; i != seq.size(); i++) - { - ASN1TaggedObject tObj = ASN1TaggedObject.getInstance(seq - .getObjectAt(i)); - - switch (tObj.getTagNo()) - { - case 0: - baseCertificateID = IssuerSerial.getInstance(tObj, false); - break; - case 1: - entityName = GeneralNames.getInstance(tObj, false); - break; - case 2: - objectDigestInfo = ObjectDigestInfo.getInstance(tObj, false); - break; - default: - throw new IllegalArgumentException("unknown tag in Holder"); - } - } - version = 1; - } - - public Holder(IssuerSerial baseCertificateID) - { - this(baseCertificateID, V2_CERTIFICATE_HOLDER); - } - - /** - * Constructs a holder from a IssuerSerial for a V1 or V2 certificate. - * . - * @param baseCertificateID The IssuerSerial. - * @param version The version of the attribute certificate. - */ - public Holder(IssuerSerial baseCertificateID, int version) - { - this.baseCertificateID = baseCertificateID; - this.version = version; - } - - /** - * Returns 1 for V2 attribute certificates or 0 for V1 attribute - * certificates. - * @return The version of the attribute certificate. - */ - public int getVersion() - { - return version; - } - - /** - * Constructs a holder with an entityName for V2 attribute certificates. - * - * @param entityName The entity or subject name. - */ - public Holder(GeneralNames entityName) - { - this(entityName, V2_CERTIFICATE_HOLDER); - } - - /** - * Constructs a holder with an entityName for V2 attribute certificates or - * with a subjectName for V1 attribute certificates. - * - * @param entityName The entity or subject name. - * @param version The version of the attribute certificate. - */ - public Holder(GeneralNames entityName, int version) - { - this.entityName = entityName; - this.version = version; - } - - /** - * Constructs a holder from an object digest info. - * - * @param objectDigestInfo The object digest info object. - */ - public Holder(ObjectDigestInfo objectDigestInfo) - { - this.objectDigestInfo = objectDigestInfo; - } - - public IssuerSerial getBaseCertificateID() - { - return baseCertificateID; - } - - /** - * Returns the entityName for an V2 attribute certificate or the subjectName - * for an V1 attribute certificate. - * - * @return The entityname or subjectname. - */ - public GeneralNames getEntityName() - { - return entityName; - } - - public ObjectDigestInfo getObjectDigestInfo() - { - return objectDigestInfo; - } - - public ASN1Primitive toASN1Primitive() - { - if (version == 1) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (baseCertificateID != null) - { - v.add(new DERTaggedObject(false, 0, baseCertificateID)); - } - - if (entityName != null) - { - v.add(new DERTaggedObject(false, 1, entityName)); - } - - if (objectDigestInfo != null) - { - v.add(new DERTaggedObject(false, 2, objectDigestInfo)); - } - - return new DERSequence(v); - } - else - { - if (entityName != null) - { - return new DERTaggedObject(false, 1, entityName); - } - else - { - return new DERTaggedObject(false, 0, baseCertificateID); - } - } - } -} diff --git a/src/org/bouncycastle/asn1/x509/IetfAttrSyntax.java b/src/org/bouncycastle/asn1/x509/IetfAttrSyntax.java deleted file mode 100644 index 5a70140..0000000 --- a/src/org/bouncycastle/asn1/x509/IetfAttrSyntax.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTF8String; - -/** - * Implementation of IetfAttrSyntax as specified by RFC3281. - */ -public class IetfAttrSyntax - extends ASN1Object -{ - public static final int VALUE_OCTETS = 1; - public static final int VALUE_OID = 2; - public static final int VALUE_UTF8 = 3; - GeneralNames policyAuthority = null; - Vector values = new Vector(); - int valueChoice = -1; - - public static IetfAttrSyntax getInstance(Object obj) - { - if (obj instanceof IetfAttrSyntax) - { - return (IetfAttrSyntax)obj; - } - if (obj != null) - { - return new IetfAttrSyntax(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * - */ - private IetfAttrSyntax(ASN1Sequence seq) - { - int i = 0; - - if (seq.getObjectAt(0) instanceof ASN1TaggedObject) - { - policyAuthority = GeneralNames.getInstance(((ASN1TaggedObject)seq.getObjectAt(0)), false); - i++; - } - else if (seq.size() == 2) - { // VOMS fix - policyAuthority = GeneralNames.getInstance(seq.getObjectAt(0)); - i++; - } - - if (!(seq.getObjectAt(i) instanceof ASN1Sequence)) - { - throw new IllegalArgumentException("Non-IetfAttrSyntax encoding"); - } - - seq = (ASN1Sequence)seq.getObjectAt(i); - - for (Enumeration e = seq.getObjects(); e.hasMoreElements();) - { - ASN1Primitive obj = (ASN1Primitive)e.nextElement(); - int type; - - if (obj instanceof ASN1ObjectIdentifier) - { - type = VALUE_OID; - } - else if (obj instanceof DERUTF8String) - { - type = VALUE_UTF8; - } - else if (obj instanceof DEROctetString) - { - type = VALUE_OCTETS; - } - else - { - throw new IllegalArgumentException("Bad value type encoding IetfAttrSyntax"); - } - - if (valueChoice < 0) - { - valueChoice = type; - } - - if (type != valueChoice) - { - throw new IllegalArgumentException("Mix of value types in IetfAttrSyntax"); - } - - values.addElement(obj); - } - } - - public GeneralNames getPolicyAuthority() - { - return policyAuthority; - } - - public int getValueType() - { - return valueChoice; - } - - public Object[] getValues() - { - if (this.getValueType() == VALUE_OCTETS) - { - ASN1OctetString[] tmp = new ASN1OctetString[values.size()]; - - for (int i = 0; i != tmp.length; i++) - { - tmp[i] = (ASN1OctetString)values.elementAt(i); - } - - return tmp; - } - else if (this.getValueType() == VALUE_OID) - { - ASN1ObjectIdentifier[] tmp = new ASN1ObjectIdentifier[values.size()]; - - for (int i = 0; i != tmp.length; i++) - { - tmp[i] = (ASN1ObjectIdentifier)values.elementAt(i); - } - - return tmp; - } - else - { - DERUTF8String[] tmp = new DERUTF8String[values.size()]; - - for (int i = 0; i != tmp.length; i++) - { - tmp[i] = (DERUTF8String)values.elementAt(i); - } - - return tmp; - } - } - - /** - * - *
        -     * 
        -     *  IetfAttrSyntax ::= SEQUENCE {
        -     *    policyAuthority [0] GeneralNames OPTIONAL,
        -     *    values SEQUENCE OF CHOICE {
        -     *      octets OCTET STRING,
        -     *      oid OBJECT IDENTIFIER,
        -     *      string UTF8String
        -     *    }
        -     *  }
        -     *  
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (policyAuthority != null) - { - v.add(new DERTaggedObject(0, policyAuthority)); - } - - ASN1EncodableVector v2 = new ASN1EncodableVector(); - - for (Enumeration i = values.elements(); i.hasMoreElements();) - { - v2.add((ASN1Encodable)i.nextElement()); - } - - v.add(new DERSequence(v2)); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/IssuerSerial.java b/src/org/bouncycastle/asn1/x509/IssuerSerial.java deleted file mode 100644 index d082a9d..0000000 --- a/src/org/bouncycastle/asn1/x509/IssuerSerial.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; - -public class IssuerSerial - extends ASN1Object -{ - GeneralNames issuer; - ASN1Integer serial; - DERBitString issuerUID; - - public static IssuerSerial getInstance( - Object obj) - { - if (obj == null || obj instanceof IssuerSerial) - { - return (IssuerSerial)obj; - } - - if (obj instanceof ASN1Sequence) - { - return new IssuerSerial((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - public static IssuerSerial getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public IssuerSerial( - ASN1Sequence seq) - { - if (seq.size() != 2 && seq.size() != 3) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - issuer = GeneralNames.getInstance(seq.getObjectAt(0)); - serial = ASN1Integer.getInstance(seq.getObjectAt(1)); - - if (seq.size() == 3) - { - issuerUID = DERBitString.getInstance(seq.getObjectAt(2)); - } - } - - public IssuerSerial( - GeneralNames issuer, - ASN1Integer serial) - { - this.issuer = issuer; - this.serial = serial; - } - - public GeneralNames getIssuer() - { - return issuer; - } - - public ASN1Integer getSerial() - { - return serial; - } - - public DERBitString getIssuerUID() - { - return issuerUID; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  IssuerSerial  ::=  SEQUENCE {
        -     *       issuer         GeneralNames,
        -     *       serial         CertificateSerialNumber,
        -     *       issuerUID      UniqueIdentifier OPTIONAL
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(issuer); - v.add(serial); - - if (issuerUID != null) - { - v.add(issuerUID); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java b/src/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java deleted file mode 100644 index 22ae756..0000000 --- a/src/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java +++ /dev/null @@ -1,274 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBoolean; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - *
        - * IssuingDistributionPoint ::= SEQUENCE { 
        - *   distributionPoint          [0] DistributionPointName OPTIONAL, 
        - *   onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE, 
        - *   onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE, 
        - *   onlySomeReasons            [3] ReasonFlags OPTIONAL, 
        - *   indirectCRL                [4] BOOLEAN DEFAULT FALSE,
        - *   onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
        - * 
        - */ -public class IssuingDistributionPoint - extends ASN1Object -{ - private DistributionPointName distributionPoint; - - private boolean onlyContainsUserCerts; - - private boolean onlyContainsCACerts; - - private ReasonFlags onlySomeReasons; - - private boolean indirectCRL; - - private boolean onlyContainsAttributeCerts; - - private ASN1Sequence seq; - - public static IssuingDistributionPoint getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static IssuingDistributionPoint getInstance( - Object obj) - { - if (obj instanceof IssuingDistributionPoint) - { - return (IssuingDistributionPoint)obj; - } - else if (obj != null) - { - return new IssuingDistributionPoint(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor from given details. - * - * @param distributionPoint - * May contain an URI as pointer to most current CRL. - * @param onlyContainsUserCerts Covers revocation information for end certificates. - * @param onlyContainsCACerts Covers revocation information for CA certificates. - * - * @param onlySomeReasons - * Which revocation reasons does this point cover. - * @param indirectCRL - * If true then the CRL contains revocation - * information about certificates ssued by other CAs. - * @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. - */ - public IssuingDistributionPoint( - DistributionPointName distributionPoint, - boolean onlyContainsUserCerts, - boolean onlyContainsCACerts, - ReasonFlags onlySomeReasons, - boolean indirectCRL, - boolean onlyContainsAttributeCerts) - { - this.distributionPoint = distributionPoint; - this.indirectCRL = indirectCRL; - this.onlyContainsAttributeCerts = onlyContainsAttributeCerts; - this.onlyContainsCACerts = onlyContainsCACerts; - this.onlyContainsUserCerts = onlyContainsUserCerts; - this.onlySomeReasons = onlySomeReasons; - - ASN1EncodableVector vec = new ASN1EncodableVector(); - if (distributionPoint != null) - { // CHOICE item so explicitly tagged - vec.add(new DERTaggedObject(true, 0, distributionPoint)); - } - if (onlyContainsUserCerts) - { - vec.add(new DERTaggedObject(false, 1, new DERBoolean(true))); - } - if (onlyContainsCACerts) - { - vec.add(new DERTaggedObject(false, 2, new DERBoolean(true))); - } - if (onlySomeReasons != null) - { - vec.add(new DERTaggedObject(false, 3, onlySomeReasons)); - } - if (indirectCRL) - { - vec.add(new DERTaggedObject(false, 4, new DERBoolean(true))); - } - if (onlyContainsAttributeCerts) - { - vec.add(new DERTaggedObject(false, 5, new DERBoolean(true))); - } - - seq = new DERSequence(vec); - } - - /** - * Shorthand Constructor from given details. - * - * @param distributionPoint - * May contain an URI as pointer to most current CRL. - * @param indirectCRL - * If true then the CRL contains revocation - * information about certificates ssued by other CAs. - * @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. - */ - public IssuingDistributionPoint( - DistributionPointName distributionPoint, - boolean indirectCRL, - boolean onlyContainsAttributeCerts) - { - this(distributionPoint, false, false, null, indirectCRL, onlyContainsAttributeCerts); - } - - /** - * Constructor from ASN1Sequence - */ - private IssuingDistributionPoint( - ASN1Sequence seq) - { - this.seq = seq; - - for (int i = 0; i != seq.size(); i++) - { - ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); - - switch (o.getTagNo()) - { - case 0: - // CHOICE so explicit - distributionPoint = DistributionPointName.getInstance(o, true); - break; - case 1: - onlyContainsUserCerts = DERBoolean.getInstance(o, false).isTrue(); - break; - case 2: - onlyContainsCACerts = DERBoolean.getInstance(o, false).isTrue(); - break; - case 3: - onlySomeReasons = new ReasonFlags(ReasonFlags.getInstance(o, false)); - break; - case 4: - indirectCRL = DERBoolean.getInstance(o, false).isTrue(); - break; - case 5: - onlyContainsAttributeCerts = DERBoolean.getInstance(o, false).isTrue(); - break; - default: - throw new IllegalArgumentException( - "unknown tag in IssuingDistributionPoint"); - } - } - } - - public boolean onlyContainsUserCerts() - { - return onlyContainsUserCerts; - } - - public boolean onlyContainsCACerts() - { - return onlyContainsCACerts; - } - - public boolean isIndirectCRL() - { - return indirectCRL; - } - - public boolean onlyContainsAttributeCerts() - { - return onlyContainsAttributeCerts; - } - - /** - * @return Returns the distributionPoint. - */ - public DistributionPointName getDistributionPoint() - { - return distributionPoint; - } - - /** - * @return Returns the onlySomeReasons. - */ - public ReasonFlags getOnlySomeReasons() - { - return onlySomeReasons; - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } - - public String toString() - { - String sep = System.getProperty("line.separator"); - StringBuffer buf = new StringBuffer(); - - buf.append("IssuingDistributionPoint: ["); - buf.append(sep); - if (distributionPoint != null) - { - appendObject(buf, sep, "distributionPoint", distributionPoint.toString()); - } - if (onlyContainsUserCerts) - { - appendObject(buf, sep, "onlyContainsUserCerts", booleanToString(onlyContainsUserCerts)); - } - if (onlyContainsCACerts) - { - appendObject(buf, sep, "onlyContainsCACerts", booleanToString(onlyContainsCACerts)); - } - if (onlySomeReasons != null) - { - appendObject(buf, sep, "onlySomeReasons", onlySomeReasons.toString()); - } - if (onlyContainsAttributeCerts) - { - appendObject(buf, sep, "onlyContainsAttributeCerts", booleanToString(onlyContainsAttributeCerts)); - } - if (indirectCRL) - { - appendObject(buf, sep, "indirectCRL", booleanToString(indirectCRL)); - } - buf.append("]"); - buf.append(sep); - return buf.toString(); - } - - private void appendObject(StringBuffer buf, String sep, String name, String value) - { - String indent = " "; - - buf.append(indent); - buf.append(name); - buf.append(":"); - buf.append(sep); - buf.append(indent); - buf.append(indent); - buf.append(value); - buf.append(sep); - } - - private String booleanToString(boolean value) - { - return value ? "true" : "false"; - } -} diff --git a/src/org/bouncycastle/asn1/x509/KeyPurposeId.java b/src/org/bouncycastle/asn1/x509/KeyPurposeId.java deleted file mode 100644 index 542a26b..0000000 --- a/src/org/bouncycastle/asn1/x509/KeyPurposeId.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -/** - * The KeyPurposeId object. - *
        - *     KeyPurposeId ::= OBJECT IDENTIFIER
        - *
        - *     id-kp ::= OBJECT IDENTIFIER { iso(1) identified-organization(3) 
        - *          dod(6) internet(1) security(5) mechanisms(5) pkix(7) 3}
        - *
        - * 
        - */ -public class KeyPurposeId - extends ASN1ObjectIdentifier -{ - private static final String id_kp = "1.3.6.1.5.5.7.3"; - - /** - * Create a KeyPurposeId from an OID string - * - * @param id OID String. E.g. "1.3.6.1.5.5.7.3.1" - */ - public KeyPurposeId( - String id) - { - super(id); - } - - /** - * { 2 5 29 37 0 } - */ - public static final KeyPurposeId anyExtendedKeyUsage = new KeyPurposeId(X509Extensions.ExtendedKeyUsage.getId() + ".0"); - /** - * { id-kp 1 } - */ - public static final KeyPurposeId id_kp_serverAuth = new KeyPurposeId(id_kp + ".1"); - /** - * { id-kp 2 } - */ - public static final KeyPurposeId id_kp_clientAuth = new KeyPurposeId(id_kp + ".2"); - /** - * { id-kp 3 } - */ - public static final KeyPurposeId id_kp_codeSigning = new KeyPurposeId(id_kp + ".3"); - /** - * { id-kp 4 } - */ - public static final KeyPurposeId id_kp_emailProtection = new KeyPurposeId(id_kp + ".4"); - /** - * Usage deprecated by RFC4945 - was { id-kp 5 } - */ - public static final KeyPurposeId id_kp_ipsecEndSystem = new KeyPurposeId(id_kp + ".5"); - /** - * Usage deprecated by RFC4945 - was { id-kp 6 } - */ - public static final KeyPurposeId id_kp_ipsecTunnel = new KeyPurposeId(id_kp + ".6"); - /** - * Usage deprecated by RFC4945 - was { idkp 7 } - */ - public static final KeyPurposeId id_kp_ipsecUser = new KeyPurposeId(id_kp + ".7"); - /** - * { id-kp 8 } - */ - public static final KeyPurposeId id_kp_timeStamping = new KeyPurposeId(id_kp + ".8"); - /** - * { id-kp 9 } - */ - public static final KeyPurposeId id_kp_OCSPSigning = new KeyPurposeId(id_kp + ".9"); - /** - * { id-kp 10 } - */ - public static final KeyPurposeId id_kp_dvcs = new KeyPurposeId(id_kp + ".10"); - /** - * { id-kp 11 } - */ - public static final KeyPurposeId id_kp_sbgpCertAAServerAuth = new KeyPurposeId(id_kp + ".11"); - /** - * { id-kp 12 } - */ - public static final KeyPurposeId id_kp_scvp_responder = new KeyPurposeId(id_kp + ".12"); - /** - * { id-kp 13 } - */ - public static final KeyPurposeId id_kp_eapOverPPP = new KeyPurposeId(id_kp + ".13"); - /** - * { id-kp 14 } - */ - public static final KeyPurposeId id_kp_eapOverLAN = new KeyPurposeId(id_kp + ".14"); - /** - * { id-kp 15 } - */ - public static final KeyPurposeId id_kp_scvpServer = new KeyPurposeId(id_kp + ".15"); - /** - * { id-kp 16 } - */ - public static final KeyPurposeId id_kp_scvpClient = new KeyPurposeId(id_kp + ".16"); - /** - * { id-kp 17 } - */ - public static final KeyPurposeId id_kp_ipsecIKE = new KeyPurposeId(id_kp + ".17"); - /** - * { id-kp 18 } - */ - public static final KeyPurposeId id_kp_capwapAC = new KeyPurposeId(id_kp + ".18"); - /** - * { id-kp 19 } - */ - public static final KeyPurposeId id_kp_capwapWTP = new KeyPurposeId(id_kp + ".19"); - - // - // microsoft key purpose ids - // - /** - * { 1 3 6 1 4 1 311 20 2 2 } - */ - public static final KeyPurposeId id_kp_smartcardlogon = new KeyPurposeId("1.3.6.1.4.1.311.20.2.2"); -} diff --git a/src/org/bouncycastle/asn1/x509/KeyUsage.java b/src/org/bouncycastle/asn1/x509/KeyUsage.java deleted file mode 100644 index 3ffd94b..0000000 --- a/src/org/bouncycastle/asn1/x509/KeyUsage.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.DERBitString; - -/** - * The KeyUsage object. - *
        - *    id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
        - *
        - *    KeyUsage ::= BIT STRING {
        - *         digitalSignature        (0),
        - *         nonRepudiation          (1),
        - *         keyEncipherment         (2),
        - *         dataEncipherment        (3),
        - *         keyAgreement            (4),
        - *         keyCertSign             (5),
        - *         cRLSign                 (6),
        - *         encipherOnly            (7),
        - *         decipherOnly            (8) }
        - * 
        - */ -public class KeyUsage - extends DERBitString -{ - public static final int digitalSignature = (1 << 7); - public static final int nonRepudiation = (1 << 6); - public static final int keyEncipherment = (1 << 5); - public static final int dataEncipherment = (1 << 4); - public static final int keyAgreement = (1 << 3); - public static final int keyCertSign = (1 << 2); - public static final int cRLSign = (1 << 1); - public static final int encipherOnly = (1 << 0); - public static final int decipherOnly = (1 << 15); - - public static DERBitString getInstance(Object obj) // needs to be DERBitString for other VMs - { - if (obj instanceof KeyUsage) - { - return (KeyUsage)obj; - } - - if (obj instanceof X509Extension) - { - return new KeyUsage(DERBitString.getInstance(X509Extension.convertValueToObject((X509Extension)obj))); - } - - return new KeyUsage(DERBitString.getInstance(obj)); - } - - /** - * Basic constructor. - * - * @param usage - the bitwise OR of the Key Usage flags giving the - * allowed uses for the key. - * e.g. (KeyUsage.keyEncipherment | KeyUsage.dataEncipherment) - */ - public KeyUsage( - int usage) - { - super(getBytes(usage), getPadBits(usage)); - } - - public KeyUsage( - DERBitString usage) - { - super(usage.getBytes(), usage.getPadBits()); - } - - public String toString() - { - if (data.length == 1) - { - return "KeyUsage: 0x" + Integer.toHexString(data[0] & 0xff); - } - return "KeyUsage: 0x" + Integer.toHexString((data[1] & 0xff) << 8 | (data[0] & 0xff)); - } -} diff --git a/src/org/bouncycastle/asn1/x509/NameConstraints.java b/src/org/bouncycastle/asn1/x509/NameConstraints.java deleted file mode 100644 index 02096f2..0000000 --- a/src/org/bouncycastle/asn1/x509/NameConstraints.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -public class NameConstraints - extends ASN1Object -{ - private ASN1Sequence permitted, excluded; - - public static NameConstraints getInstance(Object obj) - { - if (obj instanceof NameConstraints) - { - return (NameConstraints)obj; - } - if (obj != null) - { - return new NameConstraints(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private NameConstraints(ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - while (e.hasMoreElements()) - { - ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement()); - switch (o.getTagNo()) - { - case 0: - permitted = ASN1Sequence.getInstance(o, false); - break; - case 1: - excluded = ASN1Sequence.getInstance(o, false); - break; - } - } - } - - /** - * Constructor from a given details. - * - *

        - * permitted and excluded are Vectors of GeneralSubtree objects. - * - * @param permitted - * Permitted subtrees - * @param excluded - * Excludes subtrees - */ - public NameConstraints( - Vector permitted, - Vector excluded) - { - if (permitted != null) - { - this.permitted = createSequence(permitted); - } - if (excluded != null) - { - this.excluded = createSequence(excluded); - } - } - - private DERSequence createSequence(Vector subtree) - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - Enumeration e = subtree.elements(); - while (e.hasMoreElements()) - { - vec.add((GeneralSubtree)e.nextElement()); - } - - return new DERSequence(vec); - } - - public ASN1Sequence getPermittedSubtrees() - { - return permitted; - } - - public ASN1Sequence getExcludedSubtrees() - { - return excluded; - } - - /* - * NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees - * OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (permitted != null) - { - v.add(new DERTaggedObject(false, 0, permitted)); - } - - if (excluded != null) - { - v.add(new DERTaggedObject(false, 1, excluded)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/NoticeReference.java b/src/org/bouncycastle/asn1/x509/NoticeReference.java deleted file mode 100644 index 9afaae8..0000000 --- a/src/org/bouncycastle/asn1/x509/NoticeReference.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; -import java.util.Enumeration; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * NoticeReference class, used in - * CertificatePolicies X509 V3 extensions - * (in policy qualifiers). - * - *

        - *  NoticeReference ::= SEQUENCE {
        - *      organization     DisplayText,
        - *      noticeNumbers    SEQUENCE OF INTEGER }
        - *
        - * 
        - * - * @see PolicyQualifierInfo - * @see PolicyInformation - */ -public class NoticeReference - extends ASN1Object -{ - private DisplayText organization; - private ASN1Sequence noticeNumbers; - - private static ASN1EncodableVector convertVector(Vector numbers) - { - ASN1EncodableVector av = new ASN1EncodableVector(); - - Enumeration it = numbers.elements(); - - while (it.hasMoreElements()) - { - Object o = it.nextElement(); - ASN1Integer di; - - if (o instanceof BigInteger) - { - di = new ASN1Integer((BigInteger)o); - } - else if (o instanceof Integer) - { - di = new ASN1Integer(((Integer)o).intValue()); - } - else - { - throw new IllegalArgumentException(); - } - - av.add(di); - } - return av; - } - - /** - * Creates a new NoticeReference instance. - * - * @param organization a String value - * @param numbers a Vector value - */ - public NoticeReference( - String organization, - Vector numbers) - { - this(organization, convertVector(numbers)); - } - - /** - * Creates a new NoticeReference instance. - * - * @param organization a String value - * @param noticeNumbers an ASN1EncodableVector value - */ - public NoticeReference( - String organization, - ASN1EncodableVector noticeNumbers) - { - this(new DisplayText(organization), noticeNumbers); - } - - /** - * Creates a new NoticeReference instance. - * - * @param organization displayText - * @param noticeNumbers an ASN1EncodableVector value - */ - public NoticeReference( - DisplayText organization, - ASN1EncodableVector noticeNumbers) - { - this.organization = organization; - this.noticeNumbers = new DERSequence(noticeNumbers); - } - - /** - * Creates a new NoticeReference instance. - *

        Useful for reconstructing a NoticeReference - * instance from its encodable/encoded form. - * - * @param as an ASN1Sequence value obtained from either - * calling @{link toASN1Primitive()} for a NoticeReference - * instance or from parsing it from a DER-encoded stream. - */ - private NoticeReference( - ASN1Sequence as) - { - if (as.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + as.size()); - } - - organization = DisplayText.getInstance(as.getObjectAt(0)); - noticeNumbers = ASN1Sequence.getInstance(as.getObjectAt(1)); - } - - public static NoticeReference getInstance( - Object as) - { - if (as instanceof NoticeReference) - { - return (NoticeReference)as; - } - else if (as != null) - { - return new NoticeReference(ASN1Sequence.getInstance(as)); - } - - return null; - } - - public DisplayText getOrganization() - { - return organization; - } - - public ASN1Integer[] getNoticeNumbers() - { - ASN1Integer[] tmp = new ASN1Integer[noticeNumbers.size()]; - - for (int i = 0; i != noticeNumbers.size(); i++) - { - tmp[i] = ASN1Integer.getInstance(noticeNumbers.getObjectAt(i)); - } - - return tmp; - } - - /** - * Describe toASN1Object method here. - * - * @return a ASN1Primitive value - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector av = new ASN1EncodableVector(); - av.add (organization); - av.add (noticeNumbers); - return new DERSequence (av); - } -} diff --git a/src/org/bouncycastle/asn1/x509/ObjectDigestInfo.java b/src/org/bouncycastle/asn1/x509/ObjectDigestInfo.java deleted file mode 100644 index 7a2d77e..0000000 --- a/src/org/bouncycastle/asn1/x509/ObjectDigestInfo.java +++ /dev/null @@ -1,191 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Enumerated; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DEREnumerated; -import org.bouncycastle.asn1.DERSequence; - -/** - * ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. - * - *

        - *  
        - *    ObjectDigestInfo ::= SEQUENCE {
        - *         digestedObjectType  ENUMERATED {
        - *                 publicKey            (0),
        - *                 publicKeyCert        (1),
        - *                 otherObjectTypes     (2) },
        - *                         -- otherObjectTypes MUST NOT
        - *                         -- be used in this profile
        - *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
        - *         digestAlgorithm     AlgorithmIdentifier,
        - *         objectDigest        BIT STRING
        - *    }
        - *   
        - * 
        - * - */ -public class ObjectDigestInfo - extends ASN1Object -{ - /** - * The public key is hashed. - */ - public final static int publicKey = 0; - - /** - * The public key certificate is hashed. - */ - public final static int publicKeyCert = 1; - - /** - * An other object is hashed. - */ - public final static int otherObjectDigest = 2; - - ASN1Enumerated digestedObjectType; - - ASN1ObjectIdentifier otherObjectTypeID; - - AlgorithmIdentifier digestAlgorithm; - - DERBitString objectDigest; - - public static ObjectDigestInfo getInstance( - Object obj) - { - if (obj instanceof ObjectDigestInfo) - { - return (ObjectDigestInfo)obj; - } - - if (obj != null) - { - return new ObjectDigestInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public static ObjectDigestInfo getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - /** - * Constructor from given details. - *

        - * If digestedObjectType is not {@link #publicKeyCert} or - * {@link #publicKey} otherObjectTypeID must be given, - * otherwise it is ignored. - * - * @param digestedObjectType The digest object type. - * @param otherObjectTypeID The object type ID for - * otherObjectDigest. - * @param digestAlgorithm The algorithm identifier for the hash. - * @param objectDigest The hash value. - */ - public ObjectDigestInfo( - int digestedObjectType, - ASN1ObjectIdentifier otherObjectTypeID, - AlgorithmIdentifier digestAlgorithm, - byte[] objectDigest) - { - this.digestedObjectType = new ASN1Enumerated(digestedObjectType); - if (digestedObjectType == otherObjectDigest) - { - this.otherObjectTypeID = otherObjectTypeID; - } - - this.digestAlgorithm = digestAlgorithm; - this.objectDigest = new DERBitString(objectDigest); - } - - private ObjectDigestInfo( - ASN1Sequence seq) - { - if (seq.size() > 4 || seq.size() < 3) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - digestedObjectType = DEREnumerated.getInstance(seq.getObjectAt(0)); - - int offset = 0; - - if (seq.size() == 4) - { - otherObjectTypeID = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(1)); - offset++; - } - - digestAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1 + offset)); - - objectDigest = DERBitString.getInstance(seq.getObjectAt(2 + offset)); - } - - public DEREnumerated getDigestedObjectType() - { - return digestedObjectType; - } - - public ASN1ObjectIdentifier getOtherObjectTypeID() - { - return otherObjectTypeID; - } - - public AlgorithmIdentifier getDigestAlgorithm() - { - return digestAlgorithm; - } - - public DERBitString getObjectDigest() - { - return objectDigest; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - * - *

        -     *  
        -     *    ObjectDigestInfo ::= SEQUENCE {
        -     *         digestedObjectType  ENUMERATED {
        -     *                 publicKey            (0),
        -     *                 publicKeyCert        (1),
        -     *                 otherObjectTypes     (2) },
        -     *                         -- otherObjectTypes MUST NOT
        -     *                         -- be used in this profile
        -     *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
        -     *         digestAlgorithm     AlgorithmIdentifier,
        -     *         objectDigest        BIT STRING
        -     *    }
        -     *   
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(digestedObjectType); - - if (otherObjectTypeID != null) - { - v.add(otherObjectTypeID); - } - - v.add(digestAlgorithm); - v.add(objectDigest); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/PolicyInformation.java b/src/org/bouncycastle/asn1/x509/PolicyInformation.java deleted file mode 100644 index d1de26f..0000000 --- a/src/org/bouncycastle/asn1/x509/PolicyInformation.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -public class PolicyInformation - extends ASN1Object -{ - private ASN1ObjectIdentifier policyIdentifier; - private ASN1Sequence policyQualifiers; - - private PolicyInformation( - ASN1Sequence seq) - { - if (seq.size() < 1 || seq.size() > 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - policyIdentifier = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); - - if (seq.size() > 1) - { - policyQualifiers = ASN1Sequence.getInstance(seq.getObjectAt(1)); - } - } - - public PolicyInformation( - ASN1ObjectIdentifier policyIdentifier) - { - this.policyIdentifier = policyIdentifier; - } - - public PolicyInformation( - ASN1ObjectIdentifier policyIdentifier, - ASN1Sequence policyQualifiers) - { - this.policyIdentifier = policyIdentifier; - this.policyQualifiers = policyQualifiers; - } - - public static PolicyInformation getInstance( - Object obj) - { - if (obj == null || obj instanceof PolicyInformation) - { - return (PolicyInformation)obj; - } - - return new PolicyInformation(ASN1Sequence.getInstance(obj)); - } - - public ASN1ObjectIdentifier getPolicyIdentifier() - { - return policyIdentifier; - } - - public ASN1Sequence getPolicyQualifiers() - { - return policyQualifiers; - } - - /* - * PolicyInformation ::= SEQUENCE { - * policyIdentifier CertPolicyId, - * policyQualifiers SEQUENCE SIZE (1..MAX) OF - * PolicyQualifierInfo OPTIONAL } - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(policyIdentifier); - - if (policyQualifiers != null) - { - v.add(policyQualifiers); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/PolicyMappings.java b/src/org/bouncycastle/asn1/x509/PolicyMappings.java deleted file mode 100644 index a75093b..0000000 --- a/src/org/bouncycastle/asn1/x509/PolicyMappings.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; -import java.util.Hashtable; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * PolicyMappings V3 extension, described in RFC3280. - *
        - *    PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
        - *      issuerDomainPolicy      CertPolicyId,
        - *      subjectDomainPolicy     CertPolicyId }
        - * 
        - * - * @see
        RFC 3280, section 4.2.1.6 - */ -public class PolicyMappings - extends ASN1Object -{ - ASN1Sequence seq = null; - - public static PolicyMappings getInstance(Object obj) - { - if (obj instanceof PolicyMappings) - { - return (PolicyMappings)obj; - } - if (obj != null) - { - return new PolicyMappings(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Creates a new PolicyMappings instance. - * - * @param seq an ASN1Sequence constructed as specified - * in RFC 3280 - */ - private PolicyMappings(ASN1Sequence seq) - { - this.seq = seq; - } - - /** - * Creates a new PolicyMappings instance. - * - * @param mappings a HashMap value that maps - * String oids - * to other String oids. - */ - public PolicyMappings(Hashtable mappings) - { - ASN1EncodableVector dev = new ASN1EncodableVector(); - Enumeration it = mappings.keys(); - - while (it.hasMoreElements()) - { - String idp = (String)it.nextElement(); - String sdp = (String)mappings.get(idp); - ASN1EncodableVector dv = new ASN1EncodableVector(); - dv.add(new ASN1ObjectIdentifier(idp)); - dv.add(new ASN1ObjectIdentifier(sdp)); - dev.add(new DERSequence(dv)); - } - - seq = new DERSequence(dev); - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/x509/PolicyQualifierId.java b/src/org/bouncycastle/asn1/x509/PolicyQualifierId.java deleted file mode 100644 index 82835f6..0000000 --- a/src/org/bouncycastle/asn1/x509/PolicyQualifierId.java +++ /dev/null @@ -1,31 +0,0 @@ - -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -/** - * PolicyQualifierId, used in the CertificatePolicies - * X509V3 extension. - * - *
        - *    id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
        - *    id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
        - *    id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
        - *  PolicyQualifierId ::=
        - *       OBJECT IDENTIFIER (id-qt-cps | id-qt-unotice)
        - * 
        - */ -public class PolicyQualifierId extends ASN1ObjectIdentifier -{ - private static final String id_qt = "1.3.6.1.5.5.7.2"; - - private PolicyQualifierId(String id) - { - super(id); - } - - public static final PolicyQualifierId id_qt_cps = - new PolicyQualifierId(id_qt + ".1"); - public static final PolicyQualifierId id_qt_unotice = - new PolicyQualifierId(id_qt + ".2"); -} diff --git a/src/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java b/src/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java deleted file mode 100644 index 295accf..0000000 --- a/src/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERIA5String; -import org.bouncycastle.asn1.DERSequence; - -/** - * Policy qualifiers, used in the X509V3 CertificatePolicies - * extension. - * - *
        - *   PolicyQualifierInfo ::= SEQUENCE {
        - *       policyQualifierId  PolicyQualifierId,
        - *       qualifier          ANY DEFINED BY policyQualifierId }
        - * 
        - */ -public class PolicyQualifierInfo - extends ASN1Object -{ - private ASN1ObjectIdentifier policyQualifierId; - private ASN1Encodable qualifier; - - /** - * Creates a new PolicyQualifierInfo instance. - * - * @param policyQualifierId a PolicyQualifierId value - * @param qualifier the qualifier, defined by the above field. - */ - public PolicyQualifierInfo( - ASN1ObjectIdentifier policyQualifierId, - ASN1Encodable qualifier) - { - this.policyQualifierId = policyQualifierId; - this.qualifier = qualifier; - } - - /** - * Creates a new PolicyQualifierInfo containing a - * cPSuri qualifier. - * - * @param cps the CPS (certification practice statement) uri as a - * String. - */ - public PolicyQualifierInfo( - String cps) - { - policyQualifierId = PolicyQualifierId.id_qt_cps; - qualifier = new DERIA5String (cps); - } - - /** - * Creates a new PolicyQualifierInfo instance. - * - * @param as PolicyQualifierInfo X509 structure - * encoded as an ASN1Sequence. - */ - public PolicyQualifierInfo( - ASN1Sequence as) - { - if (as.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + as.size()); - } - - policyQualifierId = ASN1ObjectIdentifier.getInstance(as.getObjectAt(0)); - qualifier = as.getObjectAt(1); - } - - public static PolicyQualifierInfo getInstance( - Object obj) - { - if (obj instanceof PolicyQualifierInfo) - { - return (PolicyQualifierInfo)obj; - } - else if (obj != null) - { - return new PolicyQualifierInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - - public ASN1ObjectIdentifier getPolicyQualifierId() - { - return policyQualifierId; - } - - public ASN1Encodable getQualifier() - { - return qualifier; - } - - /** - * Returns a DER-encodable representation of this instance. - * - * @return a ASN1Primitive value - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector dev = new ASN1EncodableVector(); - dev.add(policyQualifierId); - dev.add(qualifier); - - return new DERSequence(dev); - } -} diff --git a/src/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java b/src/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java deleted file mode 100644 index 8166926..0000000 --- a/src/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - *
        - *    PrivateKeyUsagePeriod ::= SEQUENCE {
        - *      notBefore       [0]     GeneralizedTime OPTIONAL,
        - *      notAfter        [1]     GeneralizedTime OPTIONAL }
        - * 
        - */ -public class PrivateKeyUsagePeriod - extends ASN1Object -{ - public static PrivateKeyUsagePeriod getInstance(Object obj) - { - if (obj instanceof PrivateKeyUsagePeriod) - { - return (PrivateKeyUsagePeriod)obj; - } - - if (obj != null) - { - return new PrivateKeyUsagePeriod(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private DERGeneralizedTime _notBefore, _notAfter; - - private PrivateKeyUsagePeriod(ASN1Sequence seq) - { - Enumeration en = seq.getObjects(); - while (en.hasMoreElements()) - { - ASN1TaggedObject tObj = (ASN1TaggedObject)en.nextElement(); - - if (tObj.getTagNo() == 0) - { - _notBefore = DERGeneralizedTime.getInstance(tObj, false); - } - else if (tObj.getTagNo() == 1) - { - _notAfter = DERGeneralizedTime.getInstance(tObj, false); - } - } - } - - public DERGeneralizedTime getNotBefore() - { - return _notBefore; - } - - public DERGeneralizedTime getNotAfter() - { - return _notAfter; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (_notBefore != null) - { - v.add(new DERTaggedObject(false, 0, _notBefore)); - } - if (_notAfter != null) - { - v.add(new DERTaggedObject(false, 1, _notAfter)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java b/src/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java deleted file mode 100644 index 7303d87..0000000 --- a/src/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -/** - * @deprecated use org.bouncycastle.asn1.pkcs.RSAPublicKey - */ -public class RSAPublicKeyStructure - extends ASN1Object -{ - private BigInteger modulus; - private BigInteger publicExponent; - - public static RSAPublicKeyStructure getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static RSAPublicKeyStructure getInstance( - Object obj) - { - if(obj == null || obj instanceof RSAPublicKeyStructure) - { - return (RSAPublicKeyStructure)obj; - } - - if(obj instanceof ASN1Sequence) - { - return new RSAPublicKeyStructure((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("Invalid RSAPublicKeyStructure: " + obj.getClass().getName()); - } - - public RSAPublicKeyStructure( - BigInteger modulus, - BigInteger publicExponent) - { - this.modulus = modulus; - this.publicExponent = publicExponent; - } - - public RSAPublicKeyStructure( - ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - Enumeration e = seq.getObjects(); - - modulus = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); - publicExponent = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); - } - - public BigInteger getModulus() - { - return modulus; - } - - public BigInteger getPublicExponent() - { - return publicExponent; - } - - /** - * This outputs the key in PKCS1v2 format. - *
        -     *      RSAPublicKey ::= SEQUENCE {
        -     *                          modulus INTEGER, -- n
        -     *                          publicExponent INTEGER, -- e
        -     *                      }
        -     * 
        - *

        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(getModulus())); - v.add(new ASN1Integer(getPublicExponent())); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/ReasonFlags.java b/src/org/bouncycastle/asn1/x509/ReasonFlags.java deleted file mode 100644 index 612e2c5..0000000 --- a/src/org/bouncycastle/asn1/x509/ReasonFlags.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.DERBitString; - -/** - * The ReasonFlags object. - *

        - * ReasonFlags ::= BIT STRING {
        - *      unused                  (0),
        - *      keyCompromise           (1),
        - *      cACompromise            (2),
        - *      affiliationChanged      (3),
        - *      superseded              (4),
        - *      cessationOfOperation    (5),
        - *      certificateHold         (6),
        - *      privilegeWithdrawn      (7),
        - *      aACompromise            (8) }
        - * 
        - */ -public class ReasonFlags - extends DERBitString -{ - /** - * @deprecated use lower case version - */ - public static final int UNUSED = (1 << 7); - /** - * @deprecated use lower case version - */ - public static final int KEY_COMPROMISE = (1 << 6); - /** - * @deprecated use lower case version - */ - public static final int CA_COMPROMISE = (1 << 5); - /** - * @deprecated use lower case version - */ - public static final int AFFILIATION_CHANGED = (1 << 4); - /** - * @deprecated use lower case version - */ - public static final int SUPERSEDED = (1 << 3); - /** - * @deprecated use lower case version - */ - public static final int CESSATION_OF_OPERATION = (1 << 2); - /** - * @deprecated use lower case version - */ - public static final int CERTIFICATE_HOLD = (1 << 1); - /** - * @deprecated use lower case version - */ - public static final int PRIVILEGE_WITHDRAWN = (1 << 0); - /** - * @deprecated use lower case version - */ - public static final int AA_COMPROMISE = (1 << 15); - - public static final int unused = (1 << 7); - public static final int keyCompromise = (1 << 6); - public static final int cACompromise = (1 << 5); - public static final int affiliationChanged = (1 << 4); - public static final int superseded = (1 << 3); - public static final int cessationOfOperation = (1 << 2); - public static final int certificateHold = (1 << 1); - public static final int privilegeWithdrawn = (1 << 0); - public static final int aACompromise = (1 << 15); - - /** - * @param reasons - the bitwise OR of the Key Reason flags giving the - * allowed uses for the key. - */ - public ReasonFlags( - int reasons) - { - super(getBytes(reasons), getPadBits(reasons)); - } - - public ReasonFlags( - DERBitString reasons) - { - super(reasons.getBytes(), reasons.getPadBits()); - } -} diff --git a/src/org/bouncycastle/asn1/x509/RoleSyntax.java b/src/org/bouncycastle/asn1/x509/RoleSyntax.java deleted file mode 100644 index 7558c12..0000000 --- a/src/org/bouncycastle/asn1/x509/RoleSyntax.java +++ /dev/null @@ -1,237 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1String; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * Implementation of the RoleSyntax object as specified by the RFC3281. - * - *
        - * RoleSyntax ::= SEQUENCE {
        - *                 roleAuthority  [0] GeneralNames OPTIONAL,
        - *                 roleName       [1] GeneralName
        - *           } 
        - * 
        - */ -public class RoleSyntax - extends ASN1Object -{ - private GeneralNames roleAuthority; - private GeneralName roleName; - - /** - * RoleSyntax factory method. - * @param obj the object used to construct an instance of - * RoleSyntax. It must be an instance of RoleSyntax - * or ASN1Sequence. - * @return the instance of RoleSyntax built from the - * supplied object. - * @throws java.lang.IllegalArgumentException if the object passed - * to the factory is not an instance of RoleSyntax or - * ASN1Sequence. - */ - public static RoleSyntax getInstance( - Object obj) - { - - if (obj instanceof RoleSyntax) - { - return (RoleSyntax)obj; - } - else if (obj != null) - { - return new RoleSyntax(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor. - * @param roleAuthority the role authority of this RoleSyntax. - * @param roleName the role name of this RoleSyntax. - */ - public RoleSyntax( - GeneralNames roleAuthority, - GeneralName roleName) - { - if(roleName == null || - roleName.getTagNo() != GeneralName.uniformResourceIdentifier || - ((ASN1String)roleName.getName()).getString().equals("")) - { - throw new IllegalArgumentException("the role name MUST be non empty and MUST " + - "use the URI option of GeneralName"); - } - this.roleAuthority = roleAuthority; - this.roleName = roleName; - } - - /** - * Constructor. Invoking this constructor is the same as invoking - * new RoleSyntax(null, roleName). - * @param roleName the role name of this RoleSyntax. - */ - public RoleSyntax( - GeneralName roleName) - { - this(null, roleName); - } - - /** - * Utility constructor. Takes a String argument representing - * the role name, builds a GeneralName to hold the role name - * and calls the constructor that takes a GeneralName. - * @param roleName - */ - public RoleSyntax( - String roleName) - { - this(new GeneralName(GeneralName.uniformResourceIdentifier, - (roleName == null)? "": roleName)); - } - - /** - * Constructor that builds an instance of RoleSyntax by - * extracting the encoded elements from the ASN1Sequence - * object supplied. - * @param seq an instance of ASN1Sequence that holds - * the encoded elements used to build this RoleSyntax. - */ - private RoleSyntax( - ASN1Sequence seq) - { - if (seq.size() < 1 || seq.size() > 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - for (int i = 0; i != seq.size(); i++) - { - ASN1TaggedObject taggedObject = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); - switch (taggedObject.getTagNo()) - { - case 0: - roleAuthority = GeneralNames.getInstance(taggedObject, false); - break; - case 1: - roleName = GeneralName.getInstance(taggedObject, true); - break; - default: - throw new IllegalArgumentException("Unknown tag in RoleSyntax"); - } - } - } - - /** - * Gets the role authority of this RoleSyntax. - * @return an instance of GeneralNames holding the - * role authority of this RoleSyntax. - */ - public GeneralNames getRoleAuthority() - { - return this.roleAuthority; - } - - /** - * Gets the role name of this RoleSyntax. - * @return an instance of GeneralName holding the - * role name of this RoleSyntax. - */ - public GeneralName getRoleName() - { - return this.roleName; - } - - /** - * Gets the role name as a java.lang.String object. - * @return the role name of this RoleSyntax represented as a - * java.lang.String object. - */ - public String getRoleNameAsString() - { - ASN1String str = (ASN1String)this.roleName.getName(); - - return str.getString(); - } - - /** - * Gets the role authority as a String[] object. - * @return the role authority of this RoleSyntax represented as a - * String[] array. - */ - public String[] getRoleAuthorityAsString() - { - if(roleAuthority == null) - { - return new String[0]; - } - - GeneralName[] names = roleAuthority.getNames(); - String[] namesString = new String[names.length]; - for(int i = 0; i < names.length; i++) - { - ASN1Encodable value = names[i].getName(); - if(value instanceof ASN1String) - { - namesString[i] = ((ASN1String)value).getString(); - } - else - { - namesString[i] = value.toString(); - } - } - return namesString; - } - - /** - * Implementation of the method toASN1Object as - * required by the superclass ASN1Encodable. - * - *
        -     * RoleSyntax ::= SEQUENCE {
        -     *                 roleAuthority  [0] GeneralNames OPTIONAL,
        -     *                 roleName       [1] GeneralName
        -     *           } 
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - if(this.roleAuthority != null) - { - v.add(new DERTaggedObject(false, 0, roleAuthority)); - } - v.add(new DERTaggedObject(true, 1, roleName)); - - return new DERSequence(v); - } - - public String toString() - { - StringBuffer buff = new StringBuffer("Name: " + this.getRoleNameAsString() + - " - Auth: "); - if(this.roleAuthority == null || roleAuthority.getNames().length == 0) - { - buff.append("N/A"); - } - else - { - String[] names = this.getRoleAuthorityAsString(); - buff.append('[').append(names[0]); - for(int i = 1; i < names.length; i++) - { - buff.append(", ").append(names[i]); - } - buff.append(']'); - } - return buff.toString(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java b/src/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java deleted file mode 100644 index 9591802..0000000 --- a/src/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * This extension may contain further X.500 attributes of the subject. See also - * RFC 3039. - * - *
        - *     SubjectDirectoryAttributes ::= Attributes
        - *     Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
        - *     Attribute ::= SEQUENCE 
        - *     {
        - *       type AttributeType 
        - *       values SET OF AttributeValue 
        - *     }
        - *     
        - *     AttributeType ::= OBJECT IDENTIFIER
        - *     AttributeValue ::= ANY DEFINED BY AttributeType
        - * 
        - * - * @see org.bouncycastle.asn1.x500.style.BCStyle for AttributeType ObjectIdentifiers. - */ -public class SubjectDirectoryAttributes - extends ASN1Object -{ - private Vector attributes = new Vector(); - - public static SubjectDirectoryAttributes getInstance( - Object obj) - { - if (obj instanceof SubjectDirectoryAttributes) - { - return (SubjectDirectoryAttributes)obj; - } - - if (obj != null) - { - return new SubjectDirectoryAttributes(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor from ASN1Sequence. - * - * The sequence is of type SubjectDirectoryAttributes: - * - *
        -     *      SubjectDirectoryAttributes ::= Attributes
        -     *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
        -     *      Attribute ::= SEQUENCE 
        -     *      {
        -     *        type AttributeType 
        -     *        values SET OF AttributeValue 
        -     *      }
        -     *      
        -     *      AttributeType ::= OBJECT IDENTIFIER
        -     *      AttributeValue ::= ANY DEFINED BY AttributeType
        -     * 
        - * - * @param seq - * The ASN.1 sequence. - */ - private SubjectDirectoryAttributes(ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement()); - attributes.addElement(Attribute.getInstance(s)); - } - } - - /** - * Constructor from a vector of attributes. - * - * The vector consists of attributes of type {@link Attribute Attribute} - * - * @param attributes - * The attributes. - * - */ - public SubjectDirectoryAttributes(Vector attributes) - { - Enumeration e = attributes.elements(); - - while (e.hasMoreElements()) - { - this.attributes.addElement(e.nextElement()); - } - } - - /** - * Produce an object suitable for an ASN1OutputStream. - * - * Returns: - * - *
        -     *      SubjectDirectoryAttributes ::= Attributes
        -     *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
        -     *      Attribute ::= SEQUENCE 
        -     *      {
        -     *        type AttributeType 
        -     *        values SET OF AttributeValue 
        -     *      }
        -     *      
        -     *      AttributeType ::= OBJECT IDENTIFIER
        -     *      AttributeValue ::= ANY DEFINED BY AttributeType
        -     * 
        - * - * @return a ASN1Primitive - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - Enumeration e = attributes.elements(); - - while (e.hasMoreElements()) - { - - vec.add((Attribute)e.nextElement()); - } - - return new DERSequence(vec); - } - - /** - * @return Returns the attributes. - */ - public Vector getAttributes() - { - return attributes; - } -} diff --git a/src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java b/src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java deleted file mode 100644 index e86cded..0000000 --- a/src/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.digests.SHA1Digest; - -/** - * The SubjectKeyIdentifier object. - *
        - * SubjectKeyIdentifier::= OCTET STRING
        - * 
        - */ -public class SubjectKeyIdentifier - extends ASN1Object -{ - private byte[] keyidentifier; - - public static SubjectKeyIdentifier getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1OctetString.getInstance(obj, explicit)); - } - - public static SubjectKeyIdentifier getInstance( - Object obj) - { - if (obj instanceof SubjectKeyIdentifier) - { - return (SubjectKeyIdentifier)obj; - } - else if (obj != null) - { - return new SubjectKeyIdentifier(ASN1OctetString.getInstance(obj)); - } - - return null; - } - - public SubjectKeyIdentifier( - byte[] keyid) - { - this.keyidentifier = keyid; - } - - protected SubjectKeyIdentifier( - ASN1OctetString keyid) - { - this.keyidentifier = keyid.getOctets(); - } - - public byte[] getKeyIdentifier() - { - return keyidentifier; - } - - public ASN1Primitive toASN1Primitive() - { - return new DEROctetString(keyidentifier); - } - - - /** - * Calculates the keyidentifier using a SHA1 hash over the BIT STRING - * from SubjectPublicKeyInfo as defined in RFC3280. - * - * @param spki the subject public key info. - * @deprecated - */ - public SubjectKeyIdentifier( - SubjectPublicKeyInfo spki) - { - this.keyidentifier = getDigest(spki); - } - - /** - * Return a RFC 3280 type 1 key identifier. As in: - *
        -     * (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
        -     * value of the BIT STRING subjectPublicKey (excluding the tag,
        -     * length, and number of unused bits).
        -     * 
        - * @param keyInfo the key info object containing the subjectPublicKey field. - * @return the key identifier. - * @deprecated use org.bouncycastle.cert.X509ExtensionUtils.createSubjectKeyIdentifier - */ - public static SubjectKeyIdentifier createSHA1KeyIdentifier(SubjectPublicKeyInfo keyInfo) - { - return new SubjectKeyIdentifier(keyInfo); - } - - /** - * Return a RFC 3280 type 2 key identifier. As in: - *
        -     * (2) The keyIdentifier is composed of a four bit type field with
        -     * the value 0100 followed by the least significant 60 bits of the
        -     * SHA-1 hash of the value of the BIT STRING subjectPublicKey.
        -     * 
        - * @param keyInfo the key info object containing the subjectPublicKey field. - * @return the key identifier. - * @deprecated use org.bouncycastle.cert.X509ExtensionUtils.createTruncatedSubjectKeyIdentifier - */ - public static SubjectKeyIdentifier createTruncatedSHA1KeyIdentifier(SubjectPublicKeyInfo keyInfo) - { - byte[] dig = getDigest(keyInfo); - byte[] id = new byte[8]; - - System.arraycopy(dig, dig.length - 8, id, 0, id.length); - - id[0] &= 0x0f; - id[0] |= 0x40; - - return new SubjectKeyIdentifier(id); - } - - private static byte[] getDigest(SubjectPublicKeyInfo spki) - { - Digest digest = new SHA1Digest(); - byte[] resBuf = new byte[digest.getDigestSize()]; - - byte[] bytes = spki.getPublicKeyData().getBytes(); - digest.update(bytes, 0, bytes.length); - digest.doFinal(resBuf, 0); - return resBuf; - } -} diff --git a/src/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java b/src/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java deleted file mode 100644 index 660ca05..0000000 --- a/src/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; - -/** - * The object that contains the public key stored in a certficate. - *

        - * The getEncoded() method in the public keys in the JCE produces a DER - * encoded one of these. - */ -public class SubjectPublicKeyInfo - extends ASN1Object -{ - private AlgorithmIdentifier algId; - private DERBitString keyData; - - public static SubjectPublicKeyInfo getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static SubjectPublicKeyInfo getInstance( - Object obj) - { - if (obj instanceof SubjectPublicKeyInfo) - { - return (SubjectPublicKeyInfo)obj; - } - else if (obj != null) - { - return new SubjectPublicKeyInfo(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public SubjectPublicKeyInfo( - AlgorithmIdentifier algId, - ASN1Encodable publicKey) - { - this.keyData = new DERBitString(publicKey); - this.algId = algId; - } - - public SubjectPublicKeyInfo( - AlgorithmIdentifier algId, - byte[] publicKey) - { - this.keyData = new DERBitString(publicKey); - this.algId = algId; - } - - public SubjectPublicKeyInfo( - ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - Enumeration e = seq.getObjects(); - - this.algId = AlgorithmIdentifier.getInstance(e.nextElement()); - this.keyData = DERBitString.getInstance(e.nextElement()); - } - - public AlgorithmIdentifier getAlgorithm() - { - return algId; - } - - /** - * @deprecated use getAlgorithm() - * @return alg ID. - */ - public AlgorithmIdentifier getAlgorithmId() - { - return algId; - } - - /** - * for when the public key is an encoded object - if the bitstring - * can't be decoded this routine throws an IOException. - * - * @exception IOException - if the bit string doesn't represent a DER - * encoded object. - * @return the public key as an ASN.1 primitive. - */ - public ASN1Primitive parsePublicKey() - throws IOException - { - ASN1InputStream aIn = new ASN1InputStream(keyData.getBytes()); - - return aIn.readObject(); - } - - /** - * for when the public key is an encoded object - if the bitstring - * can't be decoded this routine throws an IOException. - * - * @exception IOException - if the bit string doesn't represent a DER - * encoded object. - * @deprecated use parsePublicKey - * @return the public key as an ASN.1 primitive. - */ - public ASN1Primitive getPublicKey() - throws IOException - { - ASN1InputStream aIn = new ASN1InputStream(keyData.getBytes()); - - return aIn.readObject(); - } - - /** - * for when the public key is raw bits. - * - * @return the public key as the raw bit string... - */ - public DERBitString getPublicKeyData() - { - return keyData; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *

        -     * SubjectPublicKeyInfo ::= SEQUENCE {
        -     *                          algorithm AlgorithmIdentifier,
        -     *                          publicKey BIT STRING }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(algId); - v.add(keyData); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/TBSCertList.java b/src/org/bouncycastle/asn1/x509/TBSCertList.java deleted file mode 100644 index ce657a7..0000000 --- a/src/org/bouncycastle/asn1/x509/TBSCertList.java +++ /dev/null @@ -1,309 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTCTime; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * PKIX RFC-2459 - TBSCertList object. - *
        - * TBSCertList  ::=  SEQUENCE  {
        - *      version                 Version OPTIONAL,
        - *                                   -- if present, shall be v2
        - *      signature               AlgorithmIdentifier,
        - *      issuer                  Name,
        - *      thisUpdate              Time,
        - *      nextUpdate              Time OPTIONAL,
        - *      revokedCertificates     SEQUENCE OF SEQUENCE  {
        - *           userCertificate         CertificateSerialNumber,
        - *           revocationDate          Time,
        - *           crlEntryExtensions      Extensions OPTIONAL
        - *                                         -- if present, shall be v2
        - *                                }  OPTIONAL,
        - *      crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
        - *                                         -- if present, shall be v2
        - *                                }
        - * 
        - */ -public class TBSCertList - extends ASN1Object -{ - public static class CRLEntry - extends ASN1Object - { - ASN1Sequence seq; - - Extensions crlEntryExtensions; - - private CRLEntry( - ASN1Sequence seq) - { - if (seq.size() < 2 || seq.size() > 3) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - this.seq = seq; - } - - public static CRLEntry getInstance(Object o) - { - if (o instanceof CRLEntry) - { - return ((CRLEntry)o); - } - else if (o != null) - { - return new CRLEntry(ASN1Sequence.getInstance(o)); - } - - return null; - } - - public ASN1Integer getUserCertificate() - { - return ASN1Integer.getInstance(seq.getObjectAt(0)); - } - - public Time getRevocationDate() - { - return Time.getInstance(seq.getObjectAt(1)); - } - - public Extensions getExtensions() - { - if (crlEntryExtensions == null && seq.size() == 3) - { - crlEntryExtensions = Extensions.getInstance(seq.getObjectAt(2)); - } - - return crlEntryExtensions; - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } - - public boolean hasExtensions() - { - return seq.size() == 3; - } - } - - private class RevokedCertificatesEnumeration - implements Enumeration - { - private final Enumeration en; - - RevokedCertificatesEnumeration(Enumeration en) - { - this.en = en; - } - - public boolean hasMoreElements() - { - return en.hasMoreElements(); - } - - public Object nextElement() - { - return CRLEntry.getInstance(en.nextElement()); - } - } - - private class EmptyEnumeration - implements Enumeration - { - public boolean hasMoreElements() - { - return false; - } - - public Object nextElement() - { - return null; // TODO: check exception handling - } - } - - ASN1Integer version; - AlgorithmIdentifier signature; - X500Name issuer; - Time thisUpdate; - Time nextUpdate; - ASN1Sequence revokedCertificates; - Extensions crlExtensions; - - public static TBSCertList getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static TBSCertList getInstance( - Object obj) - { - if (obj instanceof TBSCertList) - { - return (TBSCertList)obj; - } - else if (obj != null) - { - return new TBSCertList(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public TBSCertList( - ASN1Sequence seq) - { - if (seq.size() < 3 || seq.size() > 7) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - int seqPos = 0; - - if (seq.getObjectAt(seqPos) instanceof ASN1Integer) - { - version = ASN1Integer.getInstance(seq.getObjectAt(seqPos++)); - } - else - { - version = null; // version is optional - } - - signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqPos++)); - issuer = X500Name.getInstance(seq.getObjectAt(seqPos++)); - thisUpdate = Time.getInstance(seq.getObjectAt(seqPos++)); - - if (seqPos < seq.size() - && (seq.getObjectAt(seqPos) instanceof DERUTCTime - || seq.getObjectAt(seqPos) instanceof DERGeneralizedTime - || seq.getObjectAt(seqPos) instanceof Time)) - { - nextUpdate = Time.getInstance(seq.getObjectAt(seqPos++)); - } - - if (seqPos < seq.size() - && !(seq.getObjectAt(seqPos) instanceof DERTaggedObject)) - { - revokedCertificates = ASN1Sequence.getInstance(seq.getObjectAt(seqPos++)); - } - - if (seqPos < seq.size() - && seq.getObjectAt(seqPos) instanceof DERTaggedObject) - { - crlExtensions = Extensions.getInstance(ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(seqPos), true)); - } - } - - public int getVersionNumber() - { - if (version == null) - { - return 1; - } - return version.getValue().intValue() + 1; - } - - public ASN1Integer getVersion() - { - return version; - } - - public AlgorithmIdentifier getSignature() - { - return signature; - } - - public X500Name getIssuer() - { - return issuer; - } - - public Time getThisUpdate() - { - return thisUpdate; - } - - public Time getNextUpdate() - { - return nextUpdate; - } - - public CRLEntry[] getRevokedCertificates() - { - if (revokedCertificates == null) - { - return new CRLEntry[0]; - } - - CRLEntry[] entries = new CRLEntry[revokedCertificates.size()]; - - for (int i = 0; i < entries.length; i++) - { - entries[i] = CRLEntry.getInstance(revokedCertificates.getObjectAt(i)); - } - - return entries; - } - - public Enumeration getRevokedCertificateEnumeration() - { - if (revokedCertificates == null) - { - return new EmptyEnumeration(); - } - - return new RevokedCertificatesEnumeration(revokedCertificates.getObjects()); - } - - public Extensions getExtensions() - { - return crlExtensions; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (version != null) - { - v.add(version); - } - v.add(signature); - v.add(issuer); - - v.add(thisUpdate); - if (nextUpdate != null) - { - v.add(nextUpdate); - } - - // Add CRLEntries if they exist - if (revokedCertificates != null) - { - v.add(revokedCertificates); - } - - if (crlExtensions != null) - { - v.add(new DERTaggedObject(0, crlExtensions)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/TBSCertificate.java b/src/org/bouncycastle/asn1/x509/TBSCertificate.java deleted file mode 100644 index dc41964..0000000 --- a/src/org/bouncycastle/asn1/x509/TBSCertificate.java +++ /dev/null @@ -1,192 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * The TBSCertificate object. - *
        - * TBSCertificate ::= SEQUENCE {
        - *      version          [ 0 ]  Version DEFAULT v1(0),
        - *      serialNumber            CertificateSerialNumber,
        - *      signature               AlgorithmIdentifier,
        - *      issuer                  Name,
        - *      validity                Validity,
        - *      subject                 Name,
        - *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        - *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
        - *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
        - *      extensions        [ 3 ] Extensions OPTIONAL
        - *      }
        - * 
        - *

        - * Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class - * will parse them, but you really shouldn't be creating new ones. - */ -public class TBSCertificate - extends ASN1Object -{ - ASN1Sequence seq; - - ASN1Integer version; - ASN1Integer serialNumber; - AlgorithmIdentifier signature; - X500Name issuer; - Time startDate, endDate; - X500Name subject; - SubjectPublicKeyInfo subjectPublicKeyInfo; - DERBitString issuerUniqueId; - DERBitString subjectUniqueId; - Extensions extensions; - - public static TBSCertificate getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static TBSCertificate getInstance( - Object obj) - { - if (obj instanceof TBSCertificate) - { - return (TBSCertificate)obj; - } - else if (obj != null) - { - return new TBSCertificate(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private TBSCertificate( - ASN1Sequence seq) - { - int seqStart = 0; - - this.seq = seq; - - // - // some certficates don't include a version number - we assume v1 - // - if (seq.getObjectAt(0) instanceof DERTaggedObject) - { - version = ASN1Integer.getInstance((ASN1TaggedObject)seq.getObjectAt(0), true); - } - else - { - seqStart = -1; // field 0 is missing! - version = new ASN1Integer(0); - } - - serialNumber = ASN1Integer.getInstance(seq.getObjectAt(seqStart + 1)); - - signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2)); - issuer = X500Name.getInstance(seq.getObjectAt(seqStart + 3)); - - // - // before and after dates - // - ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4); - - startDate = Time.getInstance(dates.getObjectAt(0)); - endDate = Time.getInstance(dates.getObjectAt(1)); - - subject = X500Name.getInstance(seq.getObjectAt(seqStart + 5)); - - // - // public key info. - // - subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6)); - - for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--) - { - DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras); - - switch (extra.getTagNo()) - { - case 1: - issuerUniqueId = DERBitString.getInstance(extra, false); - break; - case 2: - subjectUniqueId = DERBitString.getInstance(extra, false); - break; - case 3: - extensions = Extensions.getInstance(ASN1Sequence.getInstance(extra, true)); - } - } - } - - public int getVersionNumber() - { - return version.getValue().intValue() + 1; - } - - public ASN1Integer getVersion() - { - return version; - } - - public ASN1Integer getSerialNumber() - { - return serialNumber; - } - - public AlgorithmIdentifier getSignature() - { - return signature; - } - - public X500Name getIssuer() - { - return issuer; - } - - public Time getStartDate() - { - return startDate; - } - - public Time getEndDate() - { - return endDate; - } - - public X500Name getSubject() - { - return subject; - } - - public SubjectPublicKeyInfo getSubjectPublicKeyInfo() - { - return subjectPublicKeyInfo; - } - - public DERBitString getIssuerUniqueId() - { - return issuerUniqueId; - } - - public DERBitString getSubjectUniqueId() - { - return subjectUniqueId; - } - - public Extensions getExtensions() - { - return extensions; - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/x509/TBSCertificateStructure.java b/src/org/bouncycastle/asn1/x509/TBSCertificateStructure.java deleted file mode 100644 index 0c16488..0000000 --- a/src/org/bouncycastle/asn1/x509/TBSCertificateStructure.java +++ /dev/null @@ -1,194 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * The TBSCertificate object. - *

        - * TBSCertificate ::= SEQUENCE {
        - *      version          [ 0 ]  Version DEFAULT v1(0),
        - *      serialNumber            CertificateSerialNumber,
        - *      signature               AlgorithmIdentifier,
        - *      issuer                  Name,
        - *      validity                Validity,
        - *      subject                 Name,
        - *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        - *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
        - *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
        - *      extensions        [ 3 ] Extensions OPTIONAL
        - *      }
        - * 
        - *

        - * Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class - * will parse them, but you really shouldn't be creating new ones. - */ -public class TBSCertificateStructure - extends ASN1Object - //implements X509ObjectIdentifiers, PKCSObjectIdentifiers -{ - ASN1Sequence seq; - - ASN1Integer version; - ASN1Integer serialNumber; - AlgorithmIdentifier signature; - X500Name issuer; - Time startDate, endDate; - X500Name subject; - SubjectPublicKeyInfo subjectPublicKeyInfo; - DERBitString issuerUniqueId; - DERBitString subjectUniqueId; - X509Extensions extensions; - - public static TBSCertificateStructure getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static TBSCertificateStructure getInstance( - Object obj) - { - if (obj instanceof TBSCertificateStructure) - { - return (TBSCertificateStructure)obj; - } - else if (obj != null) - { - return new TBSCertificateStructure(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public TBSCertificateStructure( - ASN1Sequence seq) - { - int seqStart = 0; - - this.seq = seq; - - // - // some certficates don't include a version number - we assume v1 - // - if (seq.getObjectAt(0) instanceof DERTaggedObject) - { - version = ASN1Integer.getInstance((ASN1TaggedObject)seq.getObjectAt(0), true); - } - else - { - seqStart = -1; // field 0 is missing! - version = new ASN1Integer(0); - } - - serialNumber = ASN1Integer.getInstance(seq.getObjectAt(seqStart + 1)); - - signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2)); - issuer = X500Name.getInstance(seq.getObjectAt(seqStart + 3)); - - // - // before and after dates - // - ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4); - - startDate = Time.getInstance(dates.getObjectAt(0)); - endDate = Time.getInstance(dates.getObjectAt(1)); - - subject = X500Name.getInstance(seq.getObjectAt(seqStart + 5)); - - // - // public key info. - // - subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6)); - - for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--) - { - DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras); - - switch (extra.getTagNo()) - { - case 1: - issuerUniqueId = DERBitString.getInstance(extra, false); - break; - case 2: - subjectUniqueId = DERBitString.getInstance(extra, false); - break; - case 3: - extensions = X509Extensions.getInstance(extra); - } - } - } - - public int getVersion() - { - return version.getValue().intValue() + 1; - } - - public ASN1Integer getVersionNumber() - { - return version; - } - - public ASN1Integer getSerialNumber() - { - return serialNumber; - } - - public AlgorithmIdentifier getSignature() - { - return signature; - } - - public X500Name getIssuer() - { - return issuer; - } - - public Time getStartDate() - { - return startDate; - } - - public Time getEndDate() - { - return endDate; - } - - public X500Name getSubject() - { - return subject; - } - - public SubjectPublicKeyInfo getSubjectPublicKeyInfo() - { - return subjectPublicKeyInfo; - } - - public DERBitString getIssuerUniqueId() - { - return issuerUniqueId; - } - - public DERBitString getSubjectUniqueId() - { - return subjectUniqueId; - } - - public X509Extensions getExtensions() - { - return extensions; - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/x509/Target.java b/src/org/bouncycastle/asn1/x509/Target.java deleted file mode 100644 index b302f5a..0000000 --- a/src/org/bouncycastle/asn1/x509/Target.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * Target structure used in target information extension for attribute - * certificates from RFC 3281. - * - *

        - *     Target  ::= CHOICE {
        - *       targetName          [0] GeneralName,
        - *       targetGroup         [1] GeneralName,
        - *       targetCert          [2] TargetCert
        - *     }
        - * 
        - * - *

        - * The targetCert field is currently not supported and must not be used - * according to RFC 3281. - */ -public class Target - extends ASN1Object - implements ASN1Choice -{ - public static final int targetName = 0; - public static final int targetGroup = 1; - - private GeneralName targName; - private GeneralName targGroup; - - /** - * Creates an instance of a Target from the given object. - *

        - * obj can be a Target or a {@link ASN1TaggedObject} - * - * @param obj The object. - * @return A Target instance. - * @throws IllegalArgumentException if the given object cannot be - * interpreted as Target. - */ - public static Target getInstance(Object obj) - { - if (obj == null || obj instanceof Target) - { - return (Target) obj; - } - else if (obj instanceof ASN1TaggedObject) - { - return new Target((ASN1TaggedObject)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " - + obj.getClass()); - } - - /** - * Constructor from ASN1TaggedObject. - * - * @param tagObj The tagged object. - * @throws IllegalArgumentException if the encoding is wrong. - */ - private Target(ASN1TaggedObject tagObj) - { - switch (tagObj.getTagNo()) - { - case targetName: // GeneralName is already a choice so explicit - targName = GeneralName.getInstance(tagObj, true); - break; - case targetGroup: - targGroup = GeneralName.getInstance(tagObj, true); - break; - default: - throw new IllegalArgumentException("unknown tag: " + tagObj.getTagNo()); - } - } - - /** - * Constructor from given details. - *

        - * Exactly one of the parameters must be not null. - * - * @param type the choice type to apply to the name. - * @param name the general name. - * @throws IllegalArgumentException if type is invalid. - */ - public Target(int type, GeneralName name) - { - this(new DERTaggedObject(type, name)); - } - - /** - * @return Returns the targetGroup. - */ - public GeneralName getTargetGroup() - { - return targGroup; - } - - /** - * @return Returns the targetName. - */ - public GeneralName getTargetName() - { - return targName; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - * - * Returns: - * - *

        -     *     Target  ::= CHOICE {
        -     *       targetName          [0] GeneralName,
        -     *       targetGroup         [1] GeneralName,
        -     *       targetCert          [2] TargetCert
        -     *     }
        -     * 
        - * - * @return a ASN1Primitive - */ - public ASN1Primitive toASN1Primitive() - { - // GeneralName is a choice already so most be explicitly tagged - if (targName != null) - { - return new DERTaggedObject(true, 0, targName); - } - else - { - return new DERTaggedObject(true, 1, targGroup); - } - } -} diff --git a/src/org/bouncycastle/asn1/x509/TargetInformation.java b/src/org/bouncycastle/asn1/x509/TargetInformation.java deleted file mode 100644 index eb892b9..0000000 --- a/src/org/bouncycastle/asn1/x509/TargetInformation.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * Target information extension for attributes certificates according to RFC - * 3281. - * - *
        - *           SEQUENCE OF Targets
        - * 
        - * - */ -public class TargetInformation - extends ASN1Object -{ - private ASN1Sequence targets; - - /** - * Creates an instance of a TargetInformation from the given object. - *

        - * obj can be a TargetInformation or a {@link ASN1Sequence} - * - * @param obj The object. - * @return A TargetInformation instance. - * @throws IllegalArgumentException if the given object cannot be - * interpreted as TargetInformation. - */ - public static TargetInformation getInstance(Object obj) - { - if (obj instanceof TargetInformation) - { - return (TargetInformation)obj; - } - else if (obj != null) - { - return new TargetInformation(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor from a ASN1Sequence. - * - * @param seq The ASN1Sequence. - * @throws IllegalArgumentException if the sequence does not contain - * correctly encoded Targets elements. - */ - private TargetInformation(ASN1Sequence seq) - { - targets = seq; - } - - /** - * Returns the targets in this target information extension. - * - * @return Returns the targets. - */ - public Targets[] getTargetsObjects() - { - Targets[] copy = new Targets[targets.size()]; - int count = 0; - for (Enumeration e = targets.getObjects(); e.hasMoreElements();) - { - copy[count++] = Targets.getInstance(e.nextElement()); - } - return copy; - } - - /** - * Constructs a target information from a single targets element. - * According to RFC 3281 only one targets element must be produced. - * - * @param targets A Targets instance. - */ - public TargetInformation(Targets targets) - { - this.targets = new DERSequence(targets); - } - - /** - * According to RFC 3281 only one targets element must be produced. If - * multiple targets are given they must be merged in - * into one targets element. - * - * @param targets An array with {@link Targets}. - */ - public TargetInformation(Target[] targets) - { - this(new Targets(targets)); - } - - /** - * Produce an object suitable for an ASN1OutputStream. - * - * Returns: - * - *

        -     *          SEQUENCE OF Targets
        -     * 
        - * - *

        - * According to RFC 3281 only one targets element must be produced. If - * multiple targets are given in the constructor they are merged into one - * targets element. If this was produced from a - * {@link org.bouncycastle.asn1.ASN1Sequence} the encoding is kept. - * - * @return a ASN1Primitive - */ - public ASN1Primitive toASN1Primitive() - { - return targets; - } -} diff --git a/src/org/bouncycastle/asn1/x509/Targets.java b/src/org/bouncycastle/asn1/x509/Targets.java deleted file mode 100644 index 4c7d062..0000000 --- a/src/org/bouncycastle/asn1/x509/Targets.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * Targets structure used in target information extension for attribute - * certificates from RFC 3281. - * - *

        - *            Targets ::= SEQUENCE OF Target
        - *           
        - *            Target  ::= CHOICE {
        - *              targetName          [0] GeneralName,
        - *              targetGroup         [1] GeneralName,
        - *              targetCert          [2] TargetCert
        - *            }
        - *           
        - *            TargetCert  ::= SEQUENCE {
        - *              targetCertificate    IssuerSerial,
        - *              targetName           GeneralName OPTIONAL,
        - *              certDigestInfo       ObjectDigestInfo OPTIONAL
        - *            }
        - * 
        - * - * @see org.bouncycastle.asn1.x509.Target - * @see org.bouncycastle.asn1.x509.TargetInformation - */ -public class Targets - extends ASN1Object -{ - private ASN1Sequence targets; - - /** - * Creates an instance of a Targets from the given object. - *

        - * obj can be a Targets or a {@link ASN1Sequence} - * - * @param obj The object. - * @return A Targets instance. - * @throws IllegalArgumentException if the given object cannot be - * interpreted as Target. - */ - public static Targets getInstance(Object obj) - { - if (obj instanceof Targets) - { - return (Targets)obj; - } - else if (obj != null) - { - return new Targets(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - /** - * Constructor from ASN1Sequence. - * - * @param targets The ASN.1 SEQUENCE. - * @throws IllegalArgumentException if the contents of the sequence are - * invalid. - */ - private Targets(ASN1Sequence targets) - { - this.targets = targets; - } - - /** - * Constructor from given targets. - *

        - * The vector is copied. - * - * @param targets A Vector of {@link Target}s. - * @see Target - * @throws IllegalArgumentException if the vector contains not only Targets. - */ - public Targets(Target[] targets) - { - this.targets = new DERSequence(targets); - } - - /** - * Returns the targets in a Vector. - *

        - * The vector is cloned before it is returned. - * - * @return Returns the targets. - */ - public Target[] getTargets() - { - Target[] targs = new Target[targets.size()]; - int count = 0; - for (Enumeration e = targets.getObjects(); e.hasMoreElements();) - { - targs[count++] = Target.getInstance(e.nextElement()); - } - return targs; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - * - * Returns: - * - *

        -     *            Targets ::= SEQUENCE OF Target
        -     * 
        - * - * @return a ASN1Primitive - */ - public ASN1Primitive toASN1Primitive() - { - return targets; - } -} diff --git a/src/org/bouncycastle/asn1/x509/Time.java b/src/org/bouncycastle/asn1/x509/Time.java deleted file mode 100644 index f8ca4e2..0000000 --- a/src/org/bouncycastle/asn1/x509/Time.java +++ /dev/null @@ -1,122 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Calendar; -import java.util.Date; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERUTCTime; - -public class Time - extends ASN1Object - implements ASN1Choice -{ - ASN1Primitive time; - - public static Time getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(obj.getObject()); // must be explicitly tagged - } - - public Time( - ASN1Primitive time) - { - if (!(time instanceof DERUTCTime) - && !(time instanceof DERGeneralizedTime)) - { - throw new IllegalArgumentException("unknown object passed to Time"); - } - - this.time = time; - } - - /** - * creates a time object from a given date - if the date is between 1950 - * and 2049 a UTCTime object is generated, otherwise a GeneralizedTime - * is used. - */ - public Time( - Date date) - { - Calendar calendar = Calendar.getInstance(); - - calendar.setTime(date); - - int year = calendar.get(Calendar.YEAR); - - if (year < 1950 || year > 2049) - { - time = new DERGeneralizedTime(date); - } - else - { - time = new DERUTCTime(date); - } - } - - public static Time getInstance( - Object obj) - { - if (obj == null || obj instanceof Time) - { - return (Time)obj; - } - else if (obj instanceof DERUTCTime) - { - return new Time((DERUTCTime)obj); - } - else if (obj instanceof DERGeneralizedTime) - { - return new Time((DERGeneralizedTime)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public String getTime() - { - if (time instanceof DERUTCTime) - { - return ((DERUTCTime)time).getAdjustedTime(); - } - else - { - return ((DERGeneralizedTime)time).getTime(); - } - } - - public Date getDate() - { - if (time instanceof DERUTCTime) - { - return ((DERUTCTime)time).getAdjustedDate(); - } - else - { - return ((DERGeneralizedTime)time).getDate(); - } - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * Time ::= CHOICE {
        -     *             utcTime        UTCTime,
        -     *             generalTime    GeneralizedTime }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - return time; - } - - public String toString() - { - return getTime(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/UserNotice.java b/src/org/bouncycastle/asn1/x509/UserNotice.java deleted file mode 100644 index ebc0405..0000000 --- a/src/org/bouncycastle/asn1/x509/UserNotice.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * UserNotice class, used in - * CertificatePolicies X509 extensions (in policy - * qualifiers). - *
        - * UserNotice ::= SEQUENCE {
        - *      noticeRef        NoticeReference OPTIONAL,
        - *      explicitText     DisplayText OPTIONAL}
        - *
        - * 
        - * - * @see PolicyQualifierId - * @see PolicyInformation - */ -public class UserNotice - extends ASN1Object -{ - private NoticeReference noticeRef; - private DisplayText explicitText; - - /** - * Creates a new UserNotice instance. - * - * @param noticeRef a NoticeReference value - * @param explicitText a DisplayText value - */ - public UserNotice( - NoticeReference noticeRef, - DisplayText explicitText) - { - this.noticeRef = noticeRef; - this.explicitText = explicitText; - } - - /** - * Creates a new UserNotice instance. - * - * @param noticeRef a NoticeReference value - * @param str the explicitText field as a String. - */ - public UserNotice( - NoticeReference noticeRef, - String str) - { - this(noticeRef, new DisplayText(str)); - } - - /** - * Creates a new UserNotice instance. - *

        Useful from reconstructing a UserNotice instance - * from its encodable/encoded form. - * - * @param as an ASN1Sequence value obtained from either - * calling @{link toASN1Primitive()} for a UserNotice - * instance or from parsing it from a DER-encoded stream. - */ - private UserNotice( - ASN1Sequence as) - { - if (as.size() == 2) - { - noticeRef = NoticeReference.getInstance(as.getObjectAt(0)); - explicitText = DisplayText.getInstance(as.getObjectAt(1)); - } - else if (as.size() == 1) - { - if (as.getObjectAt(0).toASN1Primitive() instanceof ASN1Sequence) - { - noticeRef = NoticeReference.getInstance(as.getObjectAt(0)); - } - else - { - explicitText = DisplayText.getInstance(as.getObjectAt(0)); - } - } - else - { - throw new IllegalArgumentException("Bad sequence size: " + as.size()); - } - } - - public static UserNotice getInstance( - Object obj) - { - if (obj instanceof UserNotice) - { - return (UserNotice)obj; - } - - if (obj != null) - { - return new UserNotice(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public NoticeReference getNoticeRef() - { - return noticeRef; - } - - public DisplayText getExplicitText() - { - return explicitText; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector av = new ASN1EncodableVector(); - - if (noticeRef != null) - { - av.add(noticeRef); - } - - if (explicitText != null) - { - av.add(explicitText); - } - - return new DERSequence(av); - } -} diff --git a/src/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java b/src/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java deleted file mode 100644 index 437d6c0..0000000 --- a/src/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java +++ /dev/null @@ -1,144 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTCTime; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * Generator for Version 1 TBSCertificateStructures. - *

        - * TBSCertificate ::= SEQUENCE {
        - *      version          [ 0 ]  Version DEFAULT v1(0),
        - *      serialNumber            CertificateSerialNumber,
        - *      signature               AlgorithmIdentifier,
        - *      issuer                  Name,
        - *      validity                Validity,
        - *      subject                 Name,
        - *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        - *      }
        - * 
        - * - */ -public class V1TBSCertificateGenerator -{ - DERTaggedObject version = new DERTaggedObject(true, 0, new ASN1Integer(0)); - - ASN1Integer serialNumber; - AlgorithmIdentifier signature; - X500Name issuer; - Time startDate, endDate; - X500Name subject; - SubjectPublicKeyInfo subjectPublicKeyInfo; - - public V1TBSCertificateGenerator() - { - } - - public void setSerialNumber( - ASN1Integer serialNumber) - { - this.serialNumber = serialNumber; - } - - public void setSignature( - AlgorithmIdentifier signature) - { - this.signature = signature; - } - - /** - * @deprecated use X500Name method - */ - public void setIssuer( - X509Name issuer) - { - this.issuer = X500Name.getInstance(issuer.toASN1Primitive()); - } - - public void setIssuer( - X500Name issuer) - { - this.issuer = issuer; - } - - public void setStartDate( - Time startDate) - { - this.startDate = startDate; - } - - public void setStartDate( - DERUTCTime startDate) - { - this.startDate = new Time(startDate); - } - - public void setEndDate( - Time endDate) - { - this.endDate = endDate; - } - - public void setEndDate( - DERUTCTime endDate) - { - this.endDate = new Time(endDate); - } - - /** - * @deprecated use X500Name method - */ - public void setSubject( - X509Name subject) - { - this.subject = X500Name.getInstance(subject.toASN1Primitive()); - } - - public void setSubject( - X500Name subject) - { - this.subject = subject; - } - - public void setSubjectPublicKeyInfo( - SubjectPublicKeyInfo pubKeyInfo) - { - this.subjectPublicKeyInfo = pubKeyInfo; - } - - public TBSCertificate generateTBSCertificate() - { - if ((serialNumber == null) || (signature == null) - || (issuer == null) || (startDate == null) || (endDate == null) - || (subject == null) || (subjectPublicKeyInfo == null)) - { - throw new IllegalStateException("not all mandatory fields set in V1 TBScertificate generator"); - } - - ASN1EncodableVector seq = new ASN1EncodableVector(); - - // seq.add(version); - not required as default value. - seq.add(serialNumber); - seq.add(signature); - seq.add(issuer); - - // - // before and after dates - // - ASN1EncodableVector validity = new ASN1EncodableVector(); - - validity.add(startDate); - validity.add(endDate); - - seq.add(new DERSequence(validity)); - - seq.add(subject); - - seq.add(subjectPublicKeyInfo); - - return TBSCertificate.getInstance(new DERSequence(seq)); - } -} diff --git a/src/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java b/src/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java deleted file mode 100644 index 23591db..0000000 --- a/src/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERSet; - -/** - * Generator for Version 2 AttributeCertificateInfo - *
        - * AttributeCertificateInfo ::= SEQUENCE {
        - *       version              AttCertVersion -- version is v2,
        - *       holder               Holder,
        - *       issuer               AttCertIssuer,
        - *       signature            AlgorithmIdentifier,
        - *       serialNumber         CertificateSerialNumber,
        - *       attrCertValidityPeriod   AttCertValidityPeriod,
        - *       attributes           SEQUENCE OF Attribute,
        - *       issuerUniqueID       UniqueIdentifier OPTIONAL,
        - *       extensions           Extensions OPTIONAL
        - * }
        - * 
        - * - */ -public class V2AttributeCertificateInfoGenerator -{ - private ASN1Integer version; - private Holder holder; - private AttCertIssuer issuer; - private AlgorithmIdentifier signature; - private ASN1Integer serialNumber; - private ASN1EncodableVector attributes; - private DERBitString issuerUniqueID; - private Extensions extensions; - - // Note: validity period start/end dates stored directly - //private AttCertValidityPeriod attrCertValidityPeriod; - private DERGeneralizedTime startDate, endDate; - - public V2AttributeCertificateInfoGenerator() - { - this.version = new ASN1Integer(1); - attributes = new ASN1EncodableVector(); - } - - public void setHolder(Holder holder) - { - this.holder = holder; - } - - public void addAttribute(String oid, ASN1Encodable value) - { - attributes.add(new Attribute(new ASN1ObjectIdentifier(oid), new DERSet(value))); - } - - /** - * @param attribute - */ - public void addAttribute(Attribute attribute) - { - attributes.add(attribute); - } - - public void setSerialNumber( - ASN1Integer serialNumber) - { - this.serialNumber = serialNumber; - } - - public void setSignature( - AlgorithmIdentifier signature) - { - this.signature = signature; - } - - public void setIssuer( - AttCertIssuer issuer) - { - this.issuer = issuer; - } - - public void setStartDate( - DERGeneralizedTime startDate) - { - this.startDate = startDate; - } - - public void setEndDate( - DERGeneralizedTime endDate) - { - this.endDate = endDate; - } - - public void setIssuerUniqueID( - DERBitString issuerUniqueID) - { - this.issuerUniqueID = issuerUniqueID; - } - - /** - * @deprecated use method taking Extensions - * @param extensions - */ - public void setExtensions( - X509Extensions extensions) - { - this.extensions = Extensions.getInstance(extensions.toASN1Primitive()); - } - - public void setExtensions( - Extensions extensions) - { - this.extensions = extensions; - } - - public AttributeCertificateInfo generateAttributeCertificateInfo() - { - if ((serialNumber == null) || (signature == null) - || (issuer == null) || (startDate == null) || (endDate == null) - || (holder == null) || (attributes == null)) - { - throw new IllegalStateException("not all mandatory fields set in V2 AttributeCertificateInfo generator"); - } - - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(version); - v.add(holder); - v.add(issuer); - v.add(signature); - v.add(serialNumber); - - // - // before and after dates => AttCertValidityPeriod - // - AttCertValidityPeriod validity = new AttCertValidityPeriod(startDate, endDate); - v.add(validity); - - // Attributes - v.add(new DERSequence(attributes)); - - if (issuerUniqueID != null) - { - v.add(issuerUniqueID); - } - - if (extensions != null) - { - v.add(extensions); - } - - return AttributeCertificateInfo.getInstance(new DERSequence(v)); - } -} diff --git a/src/org/bouncycastle/asn1/x509/V2Form.java b/src/org/bouncycastle/asn1/x509/V2Form.java deleted file mode 100644 index ed5c6ab..0000000 --- a/src/org/bouncycastle/asn1/x509/V2Form.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -public class V2Form - extends ASN1Object -{ - GeneralNames issuerName; - IssuerSerial baseCertificateID; - ObjectDigestInfo objectDigestInfo; - - public static V2Form getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static V2Form getInstance( - Object obj) - { - if (obj == null || obj instanceof V2Form) - { - return (V2Form)obj; - } - else if (obj instanceof ASN1Sequence) - { - return new V2Form((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); - } - - public V2Form( - GeneralNames issuerName) - { - this.issuerName = issuerName; - } - - public V2Form( - ASN1Sequence seq) - { - if (seq.size() > 3) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - int index = 0; - - if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject)) - { - index++; - this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0)); - } - - for (int i = index; i != seq.size(); i++) - { - ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); - if (o.getTagNo() == 0) - { - baseCertificateID = IssuerSerial.getInstance(o, false); - } - else if (o.getTagNo() == 1) - { - objectDigestInfo = ObjectDigestInfo.getInstance(o, false); - } - else - { - throw new IllegalArgumentException("Bad tag number: " - + o.getTagNo()); - } - } - } - - public GeneralNames getIssuerName() - { - return issuerName; - } - - public IssuerSerial getBaseCertificateID() - { - return baseCertificateID; - } - - public ObjectDigestInfo getObjectDigestInfo() - { - return objectDigestInfo; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  V2Form ::= SEQUENCE {
        -     *       issuerName            GeneralNames  OPTIONAL,
        -     *       baseCertificateID     [0] IssuerSerial  OPTIONAL,
        -     *       objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
        -     *         -- issuerName MUST be present in this profile
        -     *         -- baseCertificateID and objectDigestInfo MUST NOT
        -     *         -- be present in this profile
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (issuerName != null) - { - v.add(issuerName); - } - - if (baseCertificateID != null) - { - v.add(new DERTaggedObject(false, 0, baseCertificateID)); - } - - if (objectDigestInfo != null) - { - v.add(new DERTaggedObject(false, 1, objectDigestInfo)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java b/src/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java deleted file mode 100644 index 59a2604..0000000 --- a/src/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java +++ /dev/null @@ -1,281 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTCTime; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * Generator for Version 2 TBSCertList structures. - *
        - *  TBSCertList  ::=  SEQUENCE  {
        - *       version                 Version OPTIONAL,
        - *                                    -- if present, shall be v2
        - *       signature               AlgorithmIdentifier,
        - *       issuer                  Name,
        - *       thisUpdate              Time,
        - *       nextUpdate              Time OPTIONAL,
        - *       revokedCertificates     SEQUENCE OF SEQUENCE  {
        - *            userCertificate         CertificateSerialNumber,
        - *            revocationDate          Time,
        - *            crlEntryExtensions      Extensions OPTIONAL
        - *                                          -- if present, shall be v2
        - *                                 }  OPTIONAL,
        - *       crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
        - *                                          -- if present, shall be v2
        - *                                 }
        - * 
        - * - * Note: This class may be subject to change - */ -public class V2TBSCertListGenerator -{ - private ASN1Integer version = new ASN1Integer(1); - private AlgorithmIdentifier signature; - private X500Name issuer; - private Time thisUpdate, nextUpdate=null; - private Extensions extensions = null; - private ASN1EncodableVector crlentries = new ASN1EncodableVector(); - - private final static ASN1Sequence[] reasons; - - static - { - reasons = new ASN1Sequence[11]; - - reasons[0] = createReasonExtension(CRLReason.unspecified); - reasons[1] = createReasonExtension(CRLReason.keyCompromise); - reasons[2] = createReasonExtension(CRLReason.cACompromise); - reasons[3] = createReasonExtension(CRLReason.affiliationChanged); - reasons[4] = createReasonExtension(CRLReason.superseded); - reasons[5] = createReasonExtension(CRLReason.cessationOfOperation); - reasons[6] = createReasonExtension(CRLReason.certificateHold); - reasons[7] = createReasonExtension(7); // 7 -> unknown - reasons[8] = createReasonExtension(CRLReason.removeFromCRL); - reasons[9] = createReasonExtension(CRLReason.privilegeWithdrawn); - reasons[10] = createReasonExtension(CRLReason.aACompromise); - } - - public V2TBSCertListGenerator() - { - } - - - public void setSignature( - AlgorithmIdentifier signature) - { - this.signature = signature; - } - - /** - * @deprecated use X500Name method - */ - public void setIssuer( - X509Name issuer) - { - this.issuer = X500Name.getInstance(issuer.toASN1Primitive()); - } - - public void setIssuer(X500Name issuer) - { - this.issuer = issuer; - } - - public void setThisUpdate( - DERUTCTime thisUpdate) - { - this.thisUpdate = new Time(thisUpdate); - } - - public void setNextUpdate( - DERUTCTime nextUpdate) - { - this.nextUpdate = new Time(nextUpdate); - } - - public void setThisUpdate( - Time thisUpdate) - { - this.thisUpdate = thisUpdate; - } - - public void setNextUpdate( - Time nextUpdate) - { - this.nextUpdate = nextUpdate; - } - - public void addCRLEntry( - ASN1Sequence crlEntry) - { - crlentries.add(crlEntry); - } - - public void addCRLEntry(ASN1Integer userCertificate, DERUTCTime revocationDate, int reason) - { - addCRLEntry(userCertificate, new Time(revocationDate), reason); - } - - public void addCRLEntry(ASN1Integer userCertificate, Time revocationDate, int reason) - { - addCRLEntry(userCertificate, revocationDate, reason, null); - } - - public void addCRLEntry(ASN1Integer userCertificate, Time revocationDate, int reason, DERGeneralizedTime invalidityDate) - { - if (reason != 0) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (reason < reasons.length) - { - if (reason < 0) - { - throw new IllegalArgumentException("invalid reason value: " + reason); - } - v.add(reasons[reason]); - } - else - { - v.add(createReasonExtension(reason)); - } - - if (invalidityDate != null) - { - v.add(createInvalidityDateExtension(revocationDate)); - } - - internalAddCRLEntry(userCertificate, revocationDate, new DERSequence(v)); - } - else if (invalidityDate != null) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(createInvalidityDateExtension(revocationDate)); - - internalAddCRLEntry(userCertificate, revocationDate, new DERSequence(v)); - } - else - { - addCRLEntry(userCertificate, revocationDate, null); - } - } - - private void internalAddCRLEntry(ASN1Integer userCertificate, Time revocationDate, ASN1Sequence extensions) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(userCertificate); - v.add(revocationDate); - - if (extensions != null) - { - v.add(extensions); - } - - addCRLEntry(new DERSequence(v)); - } - - public void addCRLEntry(ASN1Integer userCertificate, Time revocationDate, Extensions extensions) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(userCertificate); - v.add(revocationDate); - - if (extensions != null) - { - v.add(extensions); - } - - addCRLEntry(new DERSequence(v)); - } - - public void setExtensions( - X509Extensions extensions) - { - setExtensions(Extensions.getInstance(extensions)); - } - - public void setExtensions( - Extensions extensions) - { - this.extensions = extensions; - } - - public TBSCertList generateTBSCertList() - { - if ((signature == null) || (issuer == null) || (thisUpdate == null)) - { - throw new IllegalStateException("Not all mandatory fields set in V2 TBSCertList generator."); - } - - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(version); - v.add(signature); - v.add(issuer); - - v.add(thisUpdate); - if (nextUpdate != null) - { - v.add(nextUpdate); - } - - // Add CRLEntries if they exist - if (crlentries.size() != 0) - { - v.add(new DERSequence(crlentries)); - } - - if (extensions != null) - { - v.add(new DERTaggedObject(0, extensions)); - } - - return new TBSCertList(new DERSequence(v)); - } - - private static ASN1Sequence createReasonExtension(int reasonCode) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - CRLReason crlReason = CRLReason.lookup(reasonCode); - - try - { - v.add(X509Extension.reasonCode); - v.add(new DEROctetString(crlReason.getEncoded())); - } - catch (IOException e) - { - throw new IllegalArgumentException("error encoding reason: " + e); - } - - return new DERSequence(v); - } - - private static ASN1Sequence createInvalidityDateExtension(Time invalidityDate) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - try - { - v.add(X509Extension.invalidityDate); - v.add(new DEROctetString(invalidityDate.getEncoded())); - } - catch (IOException e) - { - throw new IllegalArgumentException("error encoding reason: " + e); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java b/src/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java deleted file mode 100644 index 3d923b6..0000000 --- a/src/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java +++ /dev/null @@ -1,212 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTCTime; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * Generator for Version 3 TBSCertificateStructures. - *
        - * TBSCertificate ::= SEQUENCE {
        - *      version          [ 0 ]  Version DEFAULT v1(0),
        - *      serialNumber            CertificateSerialNumber,
        - *      signature               AlgorithmIdentifier,
        - *      issuer                  Name,
        - *      validity                Validity,
        - *      subject                 Name,
        - *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        - *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
        - *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
        - *      extensions        [ 3 ] Extensions OPTIONAL
        - *      }
        - * 
        - * - */ -public class V3TBSCertificateGenerator -{ - DERTaggedObject version = new DERTaggedObject(true, 0, new ASN1Integer(2)); - - ASN1Integer serialNumber; - AlgorithmIdentifier signature; - X500Name issuer; - Time startDate, endDate; - X500Name subject; - SubjectPublicKeyInfo subjectPublicKeyInfo; - Extensions extensions; - - private boolean altNamePresentAndCritical; - private DERBitString issuerUniqueID; - private DERBitString subjectUniqueID; - - public V3TBSCertificateGenerator() - { - } - - public void setSerialNumber( - ASN1Integer serialNumber) - { - this.serialNumber = serialNumber; - } - - public void setSignature( - AlgorithmIdentifier signature) - { - this.signature = signature; - } - - /** - * @deprecated use X500Name method - */ - public void setIssuer( - X509Name issuer) - { - this.issuer = X500Name.getInstance(issuer); - } - - public void setIssuer( - X500Name issuer) - { - this.issuer = issuer; - } - - public void setStartDate( - DERUTCTime startDate) - { - this.startDate = new Time(startDate); - } - - public void setStartDate( - Time startDate) - { - this.startDate = startDate; - } - - public void setEndDate( - DERUTCTime endDate) - { - this.endDate = new Time(endDate); - } - - public void setEndDate( - Time endDate) - { - this.endDate = endDate; - } - - /** - * @deprecated use X500Name method - */ - public void setSubject( - X509Name subject) - { - this.subject = X500Name.getInstance(subject.toASN1Primitive()); - } - - public void setSubject( - X500Name subject) - { - this.subject = subject; - } - - public void setIssuerUniqueID( - DERBitString uniqueID) - { - this.issuerUniqueID = uniqueID; - } - - public void setSubjectUniqueID( - DERBitString uniqueID) - { - this.subjectUniqueID = uniqueID; - } - - public void setSubjectPublicKeyInfo( - SubjectPublicKeyInfo pubKeyInfo) - { - this.subjectPublicKeyInfo = pubKeyInfo; - } - - /** - * @deprecated use method taking Extensions - * @param extensions - */ - public void setExtensions( - X509Extensions extensions) - { - setExtensions(Extensions.getInstance(extensions)); - } - - public void setExtensions( - Extensions extensions) - { - this.extensions = extensions; - if (extensions != null) - { - Extension altName = extensions.getExtension(Extension.subjectAlternativeName); - - if (altName != null && altName.isCritical()) - { - altNamePresentAndCritical = true; - } - } - } - - public TBSCertificate generateTBSCertificate() - { - if ((serialNumber == null) || (signature == null) - || (issuer == null) || (startDate == null) || (endDate == null) - || (subject == null && !altNamePresentAndCritical) || (subjectPublicKeyInfo == null)) - { - throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator"); - } - - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(version); - v.add(serialNumber); - v.add(signature); - v.add(issuer); - - // - // before and after dates - // - ASN1EncodableVector validity = new ASN1EncodableVector(); - - validity.add(startDate); - validity.add(endDate); - - v.add(new DERSequence(validity)); - - if (subject != null) - { - v.add(subject); - } - else - { - v.add(new DERSequence()); - } - - v.add(subjectPublicKeyInfo); - - if (issuerUniqueID != null) - { - v.add(new DERTaggedObject(false, 1, issuerUniqueID)); - } - - if (subjectUniqueID != null) - { - v.add(new DERTaggedObject(false, 2, subjectUniqueID)); - } - - if (extensions != null) - { - v.add(new DERTaggedObject(true, 3, extensions)); - } - - return TBSCertificate.getInstance(new DERSequence(v)); - } -} diff --git a/src/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java b/src/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java deleted file mode 100644 index 0ed12f7..0000000 --- a/src/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -public interface X509AttributeIdentifiers -{ - /** - * @deprecated use id_at_role - */ - static final ASN1ObjectIdentifier RoleSyntax = new ASN1ObjectIdentifier("2.5.4.72"); - - static final ASN1ObjectIdentifier id_pe_ac_auditIdentity = X509ObjectIdentifiers.id_pe.branch("4"); - static final ASN1ObjectIdentifier id_pe_aaControls = X509ObjectIdentifiers.id_pe.branch("6"); - static final ASN1ObjectIdentifier id_pe_ac_proxying = X509ObjectIdentifiers.id_pe.branch("10"); - - static final ASN1ObjectIdentifier id_ce_targetInformation= X509ObjectIdentifiers.id_ce.branch("55"); - - static final ASN1ObjectIdentifier id_aca = X509ObjectIdentifiers.id_pkix.branch("10"); - - static final ASN1ObjectIdentifier id_aca_authenticationInfo = id_aca.branch("1"); - static final ASN1ObjectIdentifier id_aca_accessIdentity = id_aca.branch("2"); - static final ASN1ObjectIdentifier id_aca_chargingIdentity = id_aca.branch("3"); - static final ASN1ObjectIdentifier id_aca_group = id_aca.branch("4"); - // { id-aca 5 } is reserved - static final ASN1ObjectIdentifier id_aca_encAttrs = id_aca.branch("6"); - - static final ASN1ObjectIdentifier id_at_role = new ASN1ObjectIdentifier("2.5.4.72"); - static final ASN1ObjectIdentifier id_at_clearance = new ASN1ObjectIdentifier("2.5.1.5.55"); -} diff --git a/src/org/bouncycastle/asn1/x509/X509CertificateStructure.java b/src/org/bouncycastle/asn1/x509/X509CertificateStructure.java deleted file mode 100644 index b4c97c8..0000000 --- a/src/org/bouncycastle/asn1/x509/X509CertificateStructure.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.x500.X500Name; - -/** - * an X509Certificate structure. - *
        - *  Certificate ::= SEQUENCE {
        - *      tbsCertificate          TBSCertificate,
        - *      signatureAlgorithm      AlgorithmIdentifier,
        - *      signature               BIT STRING
        - *  }
        - * 
        - * @deprecated use org.bouncycastle.asn1.x509.Certificate - */ -public class X509CertificateStructure - extends ASN1Object - //implements X509ObjectIdentifiers, PKCSObjectIdentifiers -{ - ASN1Sequence seq; - TBSCertificateStructure tbsCert; - AlgorithmIdentifier sigAlgId; - DERBitString sig; - - public static X509CertificateStructure getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static X509CertificateStructure getInstance( - Object obj) - { - if (obj instanceof X509CertificateStructure) - { - return (X509CertificateStructure)obj; - } - else if (obj != null) - { - return new X509CertificateStructure(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public X509CertificateStructure( - ASN1Sequence seq) - { - this.seq = seq; - - // - // correct x509 certficate - // - if (seq.size() == 3) - { - tbsCert = TBSCertificateStructure.getInstance(seq.getObjectAt(0)); - sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); - - sig = DERBitString.getInstance(seq.getObjectAt(2)); - } - else - { - throw new IllegalArgumentException("sequence wrong size for a certificate"); - } - } - - public TBSCertificateStructure getTBSCertificate() - { - return tbsCert; - } - - public int getVersion() - { - return tbsCert.getVersion(); - } - - public ASN1Integer getSerialNumber() - { - return tbsCert.getSerialNumber(); - } - - public X500Name getIssuer() - { - return tbsCert.getIssuer(); - } - - public Time getStartDate() - { - return tbsCert.getStartDate(); - } - - public Time getEndDate() - { - return tbsCert.getEndDate(); - } - - public X500Name getSubject() - { - return tbsCert.getSubject(); - } - - public SubjectPublicKeyInfo getSubjectPublicKeyInfo() - { - return tbsCert.getSubjectPublicKeyInfo(); - } - - public AlgorithmIdentifier getSignatureAlgorithm() - { - return sigAlgId; - } - - public DERBitString getSignature() - { - return sig; - } - - public ASN1Primitive toASN1Primitive() - { - return seq; - } -} diff --git a/src/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java b/src/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java deleted file mode 100644 index 0ae0f80..0000000 --- a/src/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERIA5String; -import org.bouncycastle.asn1.DERPrintableString; -import org.bouncycastle.asn1.DERUTF8String; - -/** - * The default converter for X509 DN entries when going from their - * string value to ASN.1 strings. - */ -public class X509DefaultEntryConverter - extends X509NameEntryConverter -{ - /** - * Apply default coversion for the given value depending on the oid - * and the character range of the value. - * - * @param oid the object identifier for the DN entry - * @param value the value associated with it - * @return the ASN.1 equivalent for the string value. - */ - public ASN1Primitive getConvertedValue( - ASN1ObjectIdentifier oid, - String value) - { - if (value.length() != 0 && value.charAt(0) == '#') - { - try - { - return convertHexEncoded(value, 1); - } - catch (IOException e) - { - throw new RuntimeException("can't recode value for oid " + oid.getId()); - } - } - else - { - if (value.length() != 0 && value.charAt(0) == '\\') - { - value = value.substring(1); - } - if (oid.equals(X509Name.EmailAddress) || oid.equals(X509Name.DC)) - { - return new DERIA5String(value); - } - else if (oid.equals(X509Name.DATE_OF_BIRTH)) // accept time string as well as # (for compatibility) - { - return new DERGeneralizedTime(value); - } - else if (oid.equals(X509Name.C) || oid.equals(X509Name.SN) || oid.equals(X509Name.DN_QUALIFIER) - || oid.equals(X509Name.TELEPHONE_NUMBER)) - { - return new DERPrintableString(value); - } - } - - return new DERUTF8String(value); - } -} diff --git a/src/org/bouncycastle/asn1/x509/X509Extension.java b/src/org/bouncycastle/asn1/x509/X509Extension.java deleted file mode 100644 index f020bcb..0000000 --- a/src/org/bouncycastle/asn1/x509/X509Extension.java +++ /dev/null @@ -1,248 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DERBoolean; - -/** - * an object for the elements in the X.509 V3 extension block. - */ -public class X509Extension -{ - /** - * Subject Directory Attributes - */ - public static final ASN1ObjectIdentifier subjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9"); - - /** - * Subject Key Identifier - */ - public static final ASN1ObjectIdentifier subjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14"); - - /** - * Key Usage - */ - public static final ASN1ObjectIdentifier keyUsage = new ASN1ObjectIdentifier("2.5.29.15"); - - /** - * Private Key Usage Period - */ - public static final ASN1ObjectIdentifier privateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16"); - - /** - * Subject Alternative Name - */ - public static final ASN1ObjectIdentifier subjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17"); - - /** - * Issuer Alternative Name - */ - public static final ASN1ObjectIdentifier issuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18"); - - /** - * Basic Constraints - */ - public static final ASN1ObjectIdentifier basicConstraints = new ASN1ObjectIdentifier("2.5.29.19"); - - /** - * CRL Number - */ - public static final ASN1ObjectIdentifier cRLNumber = new ASN1ObjectIdentifier("2.5.29.20"); - - /** - * Reason code - */ - public static final ASN1ObjectIdentifier reasonCode = new ASN1ObjectIdentifier("2.5.29.21"); - - /** - * Hold Instruction Code - */ - public static final ASN1ObjectIdentifier instructionCode = new ASN1ObjectIdentifier("2.5.29.23"); - - /** - * Invalidity Date - */ - public static final ASN1ObjectIdentifier invalidityDate = new ASN1ObjectIdentifier("2.5.29.24"); - - /** - * Delta CRL indicator - */ - public static final ASN1ObjectIdentifier deltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27"); - - /** - * Issuing Distribution Point - */ - public static final ASN1ObjectIdentifier issuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28"); - - /** - * Certificate Issuer - */ - public static final ASN1ObjectIdentifier certificateIssuer = new ASN1ObjectIdentifier("2.5.29.29"); - - /** - * Name Constraints - */ - public static final ASN1ObjectIdentifier nameConstraints = new ASN1ObjectIdentifier("2.5.29.30"); - - /** - * CRL Distribution Points - */ - public static final ASN1ObjectIdentifier cRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31"); - - /** - * Certificate Policies - */ - public static final ASN1ObjectIdentifier certificatePolicies = new ASN1ObjectIdentifier("2.5.29.32"); - - /** - * Policy Mappings - */ - public static final ASN1ObjectIdentifier policyMappings = new ASN1ObjectIdentifier("2.5.29.33"); - - /** - * Authority Key Identifier - */ - public static final ASN1ObjectIdentifier authorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35"); - - /** - * Policy Constraints - */ - public static final ASN1ObjectIdentifier policyConstraints = new ASN1ObjectIdentifier("2.5.29.36"); - - /** - * Extended Key Usage - */ - public static final ASN1ObjectIdentifier extendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37"); - - /** - * Freshest CRL - */ - public static final ASN1ObjectIdentifier freshestCRL = new ASN1ObjectIdentifier("2.5.29.46"); - - /** - * Inhibit Any Policy - */ - public static final ASN1ObjectIdentifier inhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54"); - - /** - * Authority Info Access - */ - public static final ASN1ObjectIdentifier authorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1"); - - /** - * Subject Info Access - */ - public static final ASN1ObjectIdentifier subjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11"); - - /** - * Logo Type - */ - public static final ASN1ObjectIdentifier logoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12"); - - /** - * BiometricInfo - */ - public static final ASN1ObjectIdentifier biometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2"); - - /** - * QCStatements - */ - public static final ASN1ObjectIdentifier qCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3"); - - /** - * Audit identity extension in attribute certificates. - */ - public static final ASN1ObjectIdentifier auditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4"); - - /** - * NoRevAvail extension in attribute certificates. - */ - public static final ASN1ObjectIdentifier noRevAvail = new ASN1ObjectIdentifier("2.5.29.56"); - - /** - * TargetInformation extension in attribute certificates. - */ - public static final ASN1ObjectIdentifier targetInformation = new ASN1ObjectIdentifier("2.5.29.55"); - - boolean critical; - ASN1OctetString value; - - public X509Extension( - DERBoolean critical, - ASN1OctetString value) - { - this.critical = critical.isTrue(); - this.value = value; - } - - public X509Extension( - boolean critical, - ASN1OctetString value) - { - this.critical = critical; - this.value = value; - } - - public boolean isCritical() - { - return critical; - } - - public ASN1OctetString getValue() - { - return value; - } - - public ASN1Encodable getParsedValue() - { - return convertValueToObject(this); - } - - public int hashCode() - { - if (this.isCritical()) - { - return this.getValue().hashCode(); - } - - return ~this.getValue().hashCode(); - } - - public boolean equals( - Object o) - { - if (!(o instanceof X509Extension)) - { - return false; - } - - X509Extension other = (X509Extension)o; - - return other.getValue().equals(this.getValue()) - && (other.isCritical() == this.isCritical()); - } - - /** - * Convert the value of the passed in extension to an object - * @param ext the extension to parse - * @return the object the value string contains - * @exception IllegalArgumentException if conversion is not possible - */ - public static ASN1Primitive convertValueToObject( - X509Extension ext) - throws IllegalArgumentException - { - try - { - return ASN1Primitive.fromByteArray(ext.getValue().getOctets()); - } - catch (IOException e) - { - throw new IllegalArgumentException("can't convert extension: " + e); - } - } -} diff --git a/src/org/bouncycastle/asn1/x509/X509Extensions.java b/src/org/bouncycastle/asn1/x509/X509Extensions.java deleted file mode 100644 index 242edf7..0000000 --- a/src/org/bouncycastle/asn1/x509/X509Extensions.java +++ /dev/null @@ -1,487 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBoolean; -import org.bouncycastle.asn1.DERObjectIdentifier; -import org.bouncycastle.asn1.DERSequence; - -/** - * @deprecated use Extensions - */ -public class X509Extensions - extends ASN1Object -{ - /** - * Subject Directory Attributes - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier SubjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9"); - - /** - * Subject Key Identifier - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier SubjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14"); - - /** - * Key Usage - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier KeyUsage = new ASN1ObjectIdentifier("2.5.29.15"); - - /** - * Private Key Usage Period - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier PrivateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16"); - - /** - * Subject Alternative Name - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier SubjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17"); - - /** - * Issuer Alternative Name - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier IssuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18"); - - /** - * Basic Constraints - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier BasicConstraints = new ASN1ObjectIdentifier("2.5.29.19"); - - /** - * CRL Number - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier CRLNumber = new ASN1ObjectIdentifier("2.5.29.20"); - - /** - * Reason code - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier ReasonCode = new ASN1ObjectIdentifier("2.5.29.21"); - - /** - * Hold Instruction Code - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier InstructionCode = new ASN1ObjectIdentifier("2.5.29.23"); - - /** - * Invalidity Date - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier InvalidityDate = new ASN1ObjectIdentifier("2.5.29.24"); - - /** - * Delta CRL indicator - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier DeltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27"); - - /** - * Issuing Distribution Point - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier IssuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28"); - - /** - * Certificate Issuer - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier CertificateIssuer = new ASN1ObjectIdentifier("2.5.29.29"); - - /** - * Name Constraints - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier NameConstraints = new ASN1ObjectIdentifier("2.5.29.30"); - - /** - * CRL Distribution Points - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier CRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31"); - - /** - * Certificate Policies - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier CertificatePolicies = new ASN1ObjectIdentifier("2.5.29.32"); - - /** - * Policy Mappings - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier PolicyMappings = new ASN1ObjectIdentifier("2.5.29.33"); - - /** - * Authority Key Identifier - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier AuthorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35"); - - /** - * Policy Constraints - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier PolicyConstraints = new ASN1ObjectIdentifier("2.5.29.36"); - - /** - * Extended Key Usage - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier ExtendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37"); - - /** - * Freshest CRL - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier FreshestCRL = new ASN1ObjectIdentifier("2.5.29.46"); - - /** - * Inhibit Any Policy - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier InhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54"); - - /** - * Authority Info Access - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier AuthorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1"); - - /** - * Subject Info Access - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier SubjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11"); - - /** - * Logo Type - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier LogoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12"); - - /** - * BiometricInfo - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier BiometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2"); - - /** - * QCStatements - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier QCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3"); - - /** - * Audit identity extension in attribute certificates. - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier AuditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4"); - - /** - * NoRevAvail extension in attribute certificates. - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier NoRevAvail = new ASN1ObjectIdentifier("2.5.29.56"); - - /** - * TargetInformation extension in attribute certificates. - * @deprecated use X509Extension value. - */ - public static final ASN1ObjectIdentifier TargetInformation = new ASN1ObjectIdentifier("2.5.29.55"); - - private Hashtable extensions = new Hashtable(); - private Vector ordering = new Vector(); - - public static X509Extensions getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static X509Extensions getInstance( - Object obj) - { - if (obj == null || obj instanceof X509Extensions) - { - return (X509Extensions)obj; - } - - if (obj instanceof ASN1Sequence) - { - return new X509Extensions((ASN1Sequence)obj); - } - - if (obj instanceof Extensions) - { - return new X509Extensions((ASN1Sequence)((Extensions)obj).toASN1Primitive()); - } - - if (obj instanceof ASN1TaggedObject) - { - return getInstance(((ASN1TaggedObject)obj).getObject()); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * Constructor from ASN1Sequence. - * - * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString) - */ - public X509Extensions( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement()); - - if (s.size() == 3) - { - extensions.put(s.getObjectAt(0), new X509Extension(DERBoolean.getInstance(s.getObjectAt(1)), ASN1OctetString.getInstance(s.getObjectAt(2)))); - } - else if (s.size() == 2) - { - extensions.put(s.getObjectAt(0), new X509Extension(false, ASN1OctetString.getInstance(s.getObjectAt(1)))); - } - else - { - throw new IllegalArgumentException("Bad sequence size: " + s.size()); - } - - ordering.addElement(s.getObjectAt(0)); - } - } - - /** - * constructor from a table of extensions. - *

        - * it's is assumed the table contains OID/String pairs. - */ - public X509Extensions( - Hashtable extensions) - { - this(null, extensions); - } - - /** - * Constructor from a table of extensions with ordering. - *

        - * It's is assumed the table contains OID/String pairs. - */ - public X509Extensions( - Vector ordering, - Hashtable extensions) - { - Enumeration e; - - if (ordering == null) - { - e = extensions.keys(); - } - else - { - e = ordering.elements(); - } - - while (e.hasMoreElements()) - { - this.ordering.addElement(ASN1ObjectIdentifier.getInstance(e.nextElement())); - } - - e = this.ordering.elements(); - - while (e.hasMoreElements()) - { - ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(e.nextElement()); - X509Extension ext = (X509Extension)extensions.get(oid); - - this.extensions.put(oid, ext); - } - } - - /** - * Constructor from two vectors - * - * @param objectIDs a vector of the object identifiers. - * @param values a vector of the extension values. - */ - public X509Extensions( - Vector objectIDs, - Vector values) - { - Enumeration e = objectIDs.elements(); - - while (e.hasMoreElements()) - { - this.ordering.addElement(e.nextElement()); - } - - int count = 0; - - e = this.ordering.elements(); - - while (e.hasMoreElements()) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement(); - X509Extension ext = (X509Extension)values.elementAt(count); - - this.extensions.put(oid, ext); - count++; - } - } - - /** - * return an Enumeration of the extension field's object ids. - */ - public Enumeration oids() - { - return ordering.elements(); - } - - /** - * return the extension represented by the object identifier - * passed in. - * - * @return the extension if it's present, null otherwise. - */ - public X509Extension getExtension( - DERObjectIdentifier oid) - { - return (X509Extension)extensions.get(oid); - } - - /** - * @deprecated - * @param oid - * @return - */ - public X509Extension getExtension( - ASN1ObjectIdentifier oid) - { - return (X509Extension)extensions.get(oid); - } - - /** - *

        -     *     Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
        -     *
        -     *     Extension         ::=   SEQUENCE {
        -     *        extnId            EXTENSION.&id ({ExtensionSet}),
        -     *        critical          BOOLEAN DEFAULT FALSE,
        -     *        extnValue         OCTET STRING }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - Enumeration e = ordering.elements(); - - while (e.hasMoreElements()) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement(); - X509Extension ext = (X509Extension)extensions.get(oid); - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(oid); - - if (ext.isCritical()) - { - v.add(new DERBoolean(true)); - } - - v.add(ext.getValue()); - - vec.add(new DERSequence(v)); - } - - return new DERSequence(vec); - } - - public boolean equivalent( - X509Extensions other) - { - if (extensions.size() != other.extensions.size()) - { - return false; - } - - Enumeration e1 = extensions.keys(); - - while (e1.hasMoreElements()) - { - Object key = e1.nextElement(); - - if (!extensions.get(key).equals(other.extensions.get(key))) - { - return false; - } - } - - return true; - } - - public ASN1ObjectIdentifier[] getExtensionOIDs() - { - return toOidArray(ordering); - } - - public ASN1ObjectIdentifier[] getNonCriticalExtensionOIDs() - { - return getExtensionOIDs(false); - } - - public ASN1ObjectIdentifier[] getCriticalExtensionOIDs() - { - return getExtensionOIDs(true); - } - - private ASN1ObjectIdentifier[] getExtensionOIDs(boolean isCritical) - { - Vector oidVec = new Vector(); - - for (int i = 0; i != ordering.size(); i++) - { - Object oid = ordering.elementAt(i); - - if (((X509Extension)extensions.get(oid)).isCritical() == isCritical) - { - oidVec.addElement(oid); - } - } - - return toOidArray(oidVec); - } - - private ASN1ObjectIdentifier[] toOidArray(Vector oidVec) - { - ASN1ObjectIdentifier[] oids = new ASN1ObjectIdentifier[oidVec.size()]; - - for (int i = 0; i != oids.length; i++) - { - oids[i] = (ASN1ObjectIdentifier)oidVec.elementAt(i); - } - return oids; - } -} diff --git a/src/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java b/src/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java deleted file mode 100644 index 468d1b9..0000000 --- a/src/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.DERObjectIdentifier; -import org.bouncycastle.asn1.DEROctetString; - -/** - * Generator for X.509 extensions - * @deprecated use org.bouncycastle.asn1.x509.ExtensionsGenerator - */ -public class X509ExtensionsGenerator -{ - private Hashtable extensions = new Hashtable(); - private Vector extOrdering = new Vector(); - - /** - * Reset the generator - */ - public void reset() - { - extensions = new Hashtable(); - extOrdering = new Vector(); - } - - /** - * @deprecated use ASN1ObjectIdentifier - */ - public void addExtension( - DERObjectIdentifier oid, - boolean critical, - ASN1Encodable value) - { - addExtension(new ASN1ObjectIdentifier(oid.getId()), critical, value); - } - - /** - * @deprecated use ASN1ObjectIdentifier - */ - public void addExtension( - DERObjectIdentifier oid, - boolean critical, - byte[] value) - { - addExtension(new ASN1ObjectIdentifier(oid.getId()), critical, value); - } - - /** - * Add an extension with the given oid and the passed in value to be included - * in the OCTET STRING associated with the extension. - * - * @param oid OID for the extension. - * @param critical true if critical, false otherwise. - * @param value the ASN.1 object to be included in the extension. - */ - public void addExtension( - ASN1ObjectIdentifier oid, - boolean critical, - ASN1Encodable value) - { - try - { - this.addExtension(oid, critical, value.toASN1Primitive().getEncoded(ASN1Encoding.DER)); - } - catch (IOException e) - { - throw new IllegalArgumentException("error encoding value: " + e); - } - } - - /** - * Add an extension with the given oid and the passed in byte array to be wrapped in the - * OCTET STRING associated with the extension. - * - * @param oid OID for the extension. - * @param critical true if critical, false otherwise. - * @param value the byte array to be wrapped. - */ - public void addExtension( - ASN1ObjectIdentifier oid, - boolean critical, - byte[] value) - { - if (extensions.containsKey(oid)) - { - throw new IllegalArgumentException("extension " + oid + " already added"); - } - - extOrdering.addElement(oid); - extensions.put(oid, new X509Extension(critical, new DEROctetString(value))); - } - - /** - * Return true if there are no extension present in this generator. - * - * @return true if empty, false otherwise - */ - public boolean isEmpty() - { - return extOrdering.isEmpty(); - } - - /** - * Generate an X509Extensions object based on the current state of the generator. - * - * @return an X09Extensions object. - */ - public X509Extensions generate() - { - return new X509Extensions(extOrdering, extensions); - } -} diff --git a/src/org/bouncycastle/asn1/x509/X509Name.java b/src/org/bouncycastle/asn1/x509/X509Name.java deleted file mode 100644 index 78c8eb7..0000000 --- a/src/org/bouncycastle/asn1/x509/X509Name.java +++ /dev/null @@ -1,1280 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.ASN1String; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERSet; -import org.bouncycastle.asn1.DERUniversalString; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.util.Strings; -import org.bouncycastle.util.encoders.Hex; - -/** - *
        - *     RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
        - *
        - *     RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
        - *
        - *     AttributeTypeAndValue ::= SEQUENCE {
        - *                                   type  OBJECT IDENTIFIER,
        - *                                   value ANY }
        - * 
        - * @deprecated use org.bouncycastle.asn1.x500.X500Name. - */ -public class X509Name - extends ASN1Object -{ - /** - * country code - StringType(SIZE(2)) - * @deprecated use a X500NameStyle - */ - public static final ASN1ObjectIdentifier C = new ASN1ObjectIdentifier("2.5.4.6"); - - /** - * organization - StringType(SIZE(1..64)) - * @deprecated use a X500NameStyle - */ - public static final ASN1ObjectIdentifier O = new ASN1ObjectIdentifier("2.5.4.10"); - - /** - * organizational unit name - StringType(SIZE(1..64)) - * @deprecated use a X500NameStyle - */ - public static final ASN1ObjectIdentifier OU = new ASN1ObjectIdentifier("2.5.4.11"); - - /** - * Title - * @deprecated use a X500NameStyle - */ - public static final ASN1ObjectIdentifier T = new ASN1ObjectIdentifier("2.5.4.12"); - - /** - * common name - StringType(SIZE(1..64)) - * @deprecated use a X500NameStyle - */ - public static final ASN1ObjectIdentifier CN = new ASN1ObjectIdentifier("2.5.4.3"); - - /** - * device serial number name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier SN = new ASN1ObjectIdentifier("2.5.4.5"); - - /** - * street - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier STREET = new ASN1ObjectIdentifier("2.5.4.9"); - - /** - * device serial number name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier SERIALNUMBER = SN; - - /** - * locality name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier L = new ASN1ObjectIdentifier("2.5.4.7"); - - /** - * state, or province name - StringType(SIZE(1..64)) - */ - public static final ASN1ObjectIdentifier ST = new ASN1ObjectIdentifier("2.5.4.8"); - - /** - * Naming attributes of type X520name - */ - public static final ASN1ObjectIdentifier SURNAME = new ASN1ObjectIdentifier("2.5.4.4"); - public static final ASN1ObjectIdentifier GIVENNAME = new ASN1ObjectIdentifier("2.5.4.42"); - public static final ASN1ObjectIdentifier INITIALS = new ASN1ObjectIdentifier("2.5.4.43"); - public static final ASN1ObjectIdentifier GENERATION = new ASN1ObjectIdentifier("2.5.4.44"); - public static final ASN1ObjectIdentifier UNIQUE_IDENTIFIER = new ASN1ObjectIdentifier("2.5.4.45"); - - /** - * businessCategory - DirectoryString(SIZE(1..128) - */ - public static final ASN1ObjectIdentifier BUSINESS_CATEGORY = new ASN1ObjectIdentifier( - "2.5.4.15"); - - /** - * postalCode - DirectoryString(SIZE(1..40) - */ - public static final ASN1ObjectIdentifier POSTAL_CODE = new ASN1ObjectIdentifier( - "2.5.4.17"); - - /** - * dnQualifier - DirectoryString(SIZE(1..64) - */ - public static final ASN1ObjectIdentifier DN_QUALIFIER = new ASN1ObjectIdentifier( - "2.5.4.46"); - - /** - * RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) - */ - public static final ASN1ObjectIdentifier PSEUDONYM = new ASN1ObjectIdentifier( - "2.5.4.65"); - - - /** - * RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z - */ - public static final ASN1ObjectIdentifier DATE_OF_BIRTH = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.1"); - - /** - * RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) - */ - public static final ASN1ObjectIdentifier PLACE_OF_BIRTH = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.2"); - - /** - * RFC 3039 Gender - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" - */ - public static final ASN1ObjectIdentifier GENDER = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.3"); - - /** - * RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 - * codes only - */ - public static final ASN1ObjectIdentifier COUNTRY_OF_CITIZENSHIP = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.4"); - - /** - * RFC 3039 CountryOfResidence - PrintableString (SIZE (2)) -- ISO 3166 - * codes only - */ - public static final ASN1ObjectIdentifier COUNTRY_OF_RESIDENCE = new ASN1ObjectIdentifier( - "1.3.6.1.5.5.7.9.5"); - - - /** - * ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) - */ - public static final ASN1ObjectIdentifier NAME_AT_BIRTH = new ASN1ObjectIdentifier("1.3.36.8.3.14"); - - /** - * RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF - * DirectoryString(SIZE(1..30)) - */ - public static final ASN1ObjectIdentifier POSTAL_ADDRESS = new ASN1ObjectIdentifier("2.5.4.16"); - - /** - * RFC 2256 dmdName - */ - public static final ASN1ObjectIdentifier DMD_NAME = new ASN1ObjectIdentifier("2.5.4.54"); - - /** - * id-at-telephoneNumber - */ - public static final ASN1ObjectIdentifier TELEPHONE_NUMBER = X509ObjectIdentifiers.id_at_telephoneNumber; - - /** - * id-at-name - */ - public static final ASN1ObjectIdentifier NAME = X509ObjectIdentifiers.id_at_name; - - /** - * Email address (RSA PKCS#9 extension) - IA5String. - *

        Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here. - * @deprecated use a X500NameStyle - */ - public static final ASN1ObjectIdentifier EmailAddress = PKCSObjectIdentifiers.pkcs_9_at_emailAddress; - - /** - * more from PKCS#9 - */ - public static final ASN1ObjectIdentifier UnstructuredName = PKCSObjectIdentifiers.pkcs_9_at_unstructuredName; - public static final ASN1ObjectIdentifier UnstructuredAddress = PKCSObjectIdentifiers.pkcs_9_at_unstructuredAddress; - - /** - * email address in Verisign certificates - */ - public static final ASN1ObjectIdentifier E = EmailAddress; - - /* - * others... - */ - public static final ASN1ObjectIdentifier DC = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25"); - - /** - * LDAP User id. - */ - public static final ASN1ObjectIdentifier UID = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1"); - - /** - * determines whether or not strings should be processed and printed - * from back to front. - */ - public static boolean DefaultReverse = false; - - /** - * default look up table translating OID values into their common symbols following - * the convention in RFC 2253 with a few extras - */ - public static final Hashtable DefaultSymbols = new Hashtable(); - - /** - * look up table translating OID values into their common symbols following the convention in RFC 2253 - * - */ - public static final Hashtable RFC2253Symbols = new Hashtable(); - - /** - * look up table translating OID values into their common symbols following the convention in RFC 1779 - * - */ - public static final Hashtable RFC1779Symbols = new Hashtable(); - - /** - * look up table translating common symbols into their OIDS. - */ - public static final Hashtable DefaultLookUp = new Hashtable(); - - /** - * look up table translating OID values into their common symbols - * @deprecated use DefaultSymbols - */ - public static final Hashtable OIDLookUp = DefaultSymbols; - - /** - * look up table translating string values into their OIDS - - * @deprecated use DefaultLookUp - */ - public static final Hashtable SymbolLookUp = DefaultLookUp; - - private static final Boolean TRUE = new Boolean(true); // for J2ME compatibility - private static final Boolean FALSE = new Boolean(false); - - static - { - DefaultSymbols.put(C, "C"); - DefaultSymbols.put(O, "O"); - DefaultSymbols.put(T, "T"); - DefaultSymbols.put(OU, "OU"); - DefaultSymbols.put(CN, "CN"); - DefaultSymbols.put(L, "L"); - DefaultSymbols.put(ST, "ST"); - DefaultSymbols.put(SN, "SERIALNUMBER"); - DefaultSymbols.put(EmailAddress, "E"); - DefaultSymbols.put(DC, "DC"); - DefaultSymbols.put(UID, "UID"); - DefaultSymbols.put(STREET, "STREET"); - DefaultSymbols.put(SURNAME, "SURNAME"); - DefaultSymbols.put(GIVENNAME, "GIVENNAME"); - DefaultSymbols.put(INITIALS, "INITIALS"); - DefaultSymbols.put(GENERATION, "GENERATION"); - DefaultSymbols.put(UnstructuredAddress, "unstructuredAddress"); - DefaultSymbols.put(UnstructuredName, "unstructuredName"); - DefaultSymbols.put(UNIQUE_IDENTIFIER, "UniqueIdentifier"); - DefaultSymbols.put(DN_QUALIFIER, "DN"); - DefaultSymbols.put(PSEUDONYM, "Pseudonym"); - DefaultSymbols.put(POSTAL_ADDRESS, "PostalAddress"); - DefaultSymbols.put(NAME_AT_BIRTH, "NameAtBirth"); - DefaultSymbols.put(COUNTRY_OF_CITIZENSHIP, "CountryOfCitizenship"); - DefaultSymbols.put(COUNTRY_OF_RESIDENCE, "CountryOfResidence"); - DefaultSymbols.put(GENDER, "Gender"); - DefaultSymbols.put(PLACE_OF_BIRTH, "PlaceOfBirth"); - DefaultSymbols.put(DATE_OF_BIRTH, "DateOfBirth"); - DefaultSymbols.put(POSTAL_CODE, "PostalCode"); - DefaultSymbols.put(BUSINESS_CATEGORY, "BusinessCategory"); - DefaultSymbols.put(TELEPHONE_NUMBER, "TelephoneNumber"); - DefaultSymbols.put(NAME, "Name"); - - RFC2253Symbols.put(C, "C"); - RFC2253Symbols.put(O, "O"); - RFC2253Symbols.put(OU, "OU"); - RFC2253Symbols.put(CN, "CN"); - RFC2253Symbols.put(L, "L"); - RFC2253Symbols.put(ST, "ST"); - RFC2253Symbols.put(STREET, "STREET"); - RFC2253Symbols.put(DC, "DC"); - RFC2253Symbols.put(UID, "UID"); - - RFC1779Symbols.put(C, "C"); - RFC1779Symbols.put(O, "O"); - RFC1779Symbols.put(OU, "OU"); - RFC1779Symbols.put(CN, "CN"); - RFC1779Symbols.put(L, "L"); - RFC1779Symbols.put(ST, "ST"); - RFC1779Symbols.put(STREET, "STREET"); - - DefaultLookUp.put("c", C); - DefaultLookUp.put("o", O); - DefaultLookUp.put("t", T); - DefaultLookUp.put("ou", OU); - DefaultLookUp.put("cn", CN); - DefaultLookUp.put("l", L); - DefaultLookUp.put("st", ST); - DefaultLookUp.put("sn", SN); - DefaultLookUp.put("serialnumber", SN); - DefaultLookUp.put("street", STREET); - DefaultLookUp.put("emailaddress", E); - DefaultLookUp.put("dc", DC); - DefaultLookUp.put("e", E); - DefaultLookUp.put("uid", UID); - DefaultLookUp.put("surname", SURNAME); - DefaultLookUp.put("givenname", GIVENNAME); - DefaultLookUp.put("initials", INITIALS); - DefaultLookUp.put("generation", GENERATION); - DefaultLookUp.put("unstructuredaddress", UnstructuredAddress); - DefaultLookUp.put("unstructuredname", UnstructuredName); - DefaultLookUp.put("uniqueidentifier", UNIQUE_IDENTIFIER); - DefaultLookUp.put("dn", DN_QUALIFIER); - DefaultLookUp.put("pseudonym", PSEUDONYM); - DefaultLookUp.put("postaladdress", POSTAL_ADDRESS); - DefaultLookUp.put("nameofbirth", NAME_AT_BIRTH); - DefaultLookUp.put("countryofcitizenship", COUNTRY_OF_CITIZENSHIP); - DefaultLookUp.put("countryofresidence", COUNTRY_OF_RESIDENCE); - DefaultLookUp.put("gender", GENDER); - DefaultLookUp.put("placeofbirth", PLACE_OF_BIRTH); - DefaultLookUp.put("dateofbirth", DATE_OF_BIRTH); - DefaultLookUp.put("postalcode", POSTAL_CODE); - DefaultLookUp.put("businesscategory", BUSINESS_CATEGORY); - DefaultLookUp.put("telephonenumber", TELEPHONE_NUMBER); - DefaultLookUp.put("name", NAME); - } - - private X509NameEntryConverter converter = null; - private Vector ordering = new Vector(); - private Vector values = new Vector(); - private Vector added = new Vector(); - - private ASN1Sequence seq; - - private boolean isHashCodeCalculated; - private int hashCodeValue; - - /** - * Return a X509Name based on the passed in tagged object. - * - * @param obj tag object holding name. - * @param explicit true if explicitly tagged false otherwise. - * @return the X509Name - */ - public static X509Name getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static X509Name getInstance( - Object obj) - { - if (obj == null || obj instanceof X509Name) - { - return (X509Name)obj; - } - else if (obj instanceof X500Name) - { - return new X509Name(ASN1Sequence.getInstance(((X500Name)obj).toASN1Primitive())); - } - else if (obj != null) - { - return new X509Name(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - protected X509Name() - { - // constructure use by new X500 Name class - } - /** - * Constructor from ASN1Sequence - * - * the principal will be a list of constructed sets, each containing an (OID, String) pair. - */ - public X509Name( - ASN1Sequence seq) - { - this.seq = seq; - - Enumeration e = seq.getObjects(); - - while (e.hasMoreElements()) - { - ASN1Set set = ASN1Set.getInstance(((ASN1Encodable)e.nextElement()).toASN1Primitive()); - - for (int i = 0; i < set.size(); i++) - { - ASN1Sequence s = ASN1Sequence.getInstance(set.getObjectAt(i).toASN1Primitive()); - - if (s.size() != 2) - { - throw new IllegalArgumentException("badly sized pair"); - } - - ordering.addElement(ASN1ObjectIdentifier.getInstance(s.getObjectAt(0))); - - ASN1Encodable value = s.getObjectAt(1); - if (value instanceof ASN1String && !(value instanceof DERUniversalString)) - { - String v = ((ASN1String)value).getString(); - if (v.length() > 0 && v.charAt(0) == '#') - { - values.addElement("\\" + v); - } - else - { - values.addElement(v); - } - } - else - { - try - { - values.addElement("#" + bytesToString(Hex.encode(value.toASN1Primitive().getEncoded(ASN1Encoding.DER)))); - } - catch (IOException e1) - { - throw new IllegalArgumentException("cannot encode value"); - } - } - added.addElement((i != 0) ? TRUE : FALSE); // to allow earlier JDK compatibility - } - } - } - - /** - * constructor from a table of attributes. - *

        - * it's is assumed the table contains OID/String pairs, and the contents - * of the table are copied into an internal table as part of the - * construction process. - *

        - * Note: if the name you are trying to generate should be - * following a specific ordering, you should use the constructor - * with the ordering specified below. - * @deprecated use an ordered constructor! The hashtable ordering is rarely correct - */ - public X509Name( - Hashtable attributes) - { - this(null, attributes); - } - - /** - * Constructor from a table of attributes with ordering. - *

        - * it's is assumed the table contains OID/String pairs, and the contents - * of the table are copied into an internal table as part of the - * construction process. The ordering vector should contain the OIDs - * in the order they are meant to be encoded or printed in toString. - */ - public X509Name( - Vector ordering, - Hashtable attributes) - { - this(ordering, attributes, new X509DefaultEntryConverter()); - } - - /** - * Constructor from a table of attributes with ordering. - *

        - * it's is assumed the table contains OID/String pairs, and the contents - * of the table are copied into an internal table as part of the - * construction process. The ordering vector should contain the OIDs - * in the order they are meant to be encoded or printed in toString. - *

        - * The passed in converter will be used to convert the strings into their - * ASN.1 counterparts. - */ - public X509Name( - Vector ordering, - Hashtable attributes, - X509NameEntryConverter converter) - { - this.converter = converter; - - if (ordering != null) - { - for (int i = 0; i != ordering.size(); i++) - { - this.ordering.addElement(ordering.elementAt(i)); - this.added.addElement(FALSE); - } - } - else - { - Enumeration e = attributes.keys(); - - while (e.hasMoreElements()) - { - this.ordering.addElement(e.nextElement()); - this.added.addElement(FALSE); - } - } - - for (int i = 0; i != this.ordering.size(); i++) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)this.ordering.elementAt(i); - - if (attributes.get(oid) == null) - { - throw new IllegalArgumentException("No attribute for object id - " + oid.getId() + " - passed to distinguished name"); - } - - this.values.addElement(attributes.get(oid)); // copy the hash table - } - } - - /** - * Takes two vectors one of the oids and the other of the values. - */ - public X509Name( - Vector oids, - Vector values) - { - this(oids, values, new X509DefaultEntryConverter()); - } - - /** - * Takes two vectors one of the oids and the other of the values. - *

        - * The passed in converter will be used to convert the strings into their - * ASN.1 counterparts. - */ - public X509Name( - Vector oids, - Vector values, - X509NameEntryConverter converter) - { - this.converter = converter; - - if (oids.size() != values.size()) - { - throw new IllegalArgumentException("oids vector must be same length as values."); - } - - for (int i = 0; i < oids.size(); i++) - { - this.ordering.addElement(oids.elementAt(i)); - this.values.addElement(values.elementAt(i)); - this.added.addElement(FALSE); - } - } - -// private Boolean isEncoded(String s) -// { -// if (s.charAt(0) == '#') -// { -// return TRUE; -// } -// -// return FALSE; -// } - - /** - * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or - * some such, converting it into an ordered set of name attributes. - */ - public X509Name( - String dirName) - { - this(DefaultReverse, DefaultLookUp, dirName); - } - - /** - * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or - * some such, converting it into an ordered set of name attributes with each - * string value being converted to its associated ASN.1 type using the passed - * in converter. - */ - public X509Name( - String dirName, - X509NameEntryConverter converter) - { - this(DefaultReverse, DefaultLookUp, dirName, converter); - } - - /** - * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or - * some such, converting it into an ordered set of name attributes. If reverse - * is true, create the encoded version of the sequence starting from the - * last element in the string. - */ - public X509Name( - boolean reverse, - String dirName) - { - this(reverse, DefaultLookUp, dirName); - } - - /** - * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or - * some such, converting it into an ordered set of name attributes with each - * string value being converted to its associated ASN.1 type using the passed - * in converter. If reverse is true the ASN.1 sequence representing the DN will - * be built by starting at the end of the string, rather than the start. - */ - public X509Name( - boolean reverse, - String dirName, - X509NameEntryConverter converter) - { - this(reverse, DefaultLookUp, dirName, converter); - } - - /** - * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or - * some such, converting it into an ordered set of name attributes. lookUp - * should provide a table of lookups, indexed by lowercase only strings and - * yielding a ASN1ObjectIdentifier, other than that OID. and numeric oids - * will be processed automatically. - *
        - * If reverse is true, create the encoded version of the sequence - * starting from the last element in the string. - * @param reverse true if we should start scanning from the end (RFC 2553). - * @param lookUp table of names and their oids. - * @param dirName the X.500 string to be parsed. - */ - public X509Name( - boolean reverse, - Hashtable lookUp, - String dirName) - { - this(reverse, lookUp, dirName, new X509DefaultEntryConverter()); - } - - private ASN1ObjectIdentifier decodeOID( - String name, - Hashtable lookUp) - { - if (Strings.toUpperCase(name).startsWith("OID.")) - { - return new ASN1ObjectIdentifier(name.substring(4)); - } - else if (name.charAt(0) >= '0' && name.charAt(0) <= '9') - { - return new ASN1ObjectIdentifier(name); - } - - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)lookUp.get(Strings.toLowerCase(name)); - if (oid == null) - { - throw new IllegalArgumentException("Unknown object id - " + name + " - passed to distinguished name"); - } - - return oid; - } - - /** - * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or - * some such, converting it into an ordered set of name attributes. lookUp - * should provide a table of lookups, indexed by lowercase only strings and - * yielding a ASN1ObjectIdentifier, other than that OID. and numeric oids - * will be processed automatically. The passed in converter is used to convert the - * string values to the right of each equals sign to their ASN.1 counterparts. - *
        - * @param reverse true if we should start scanning from the end, false otherwise. - * @param lookUp table of names and oids. - * @param dirName the string dirName - * @param converter the converter to convert string values into their ASN.1 equivalents - */ - public X509Name( - boolean reverse, - Hashtable lookUp, - String dirName, - X509NameEntryConverter converter) - { - this.converter = converter; - X509NameTokenizer nTok = new X509NameTokenizer(dirName); - - while (nTok.hasMoreTokens()) - { - String token = nTok.nextToken(); - int index = token.indexOf('='); - - if (index == -1) - { - throw new IllegalArgumentException("badly formated directory string"); - } - - String name = token.substring(0, index); - String value = token.substring(index + 1); - ASN1ObjectIdentifier oid = decodeOID(name, lookUp); - - if (value.indexOf('+') > 0) - { - X509NameTokenizer vTok = new X509NameTokenizer(value, '+'); - String v = vTok.nextToken(); - - this.ordering.addElement(oid); - this.values.addElement(v); - this.added.addElement(FALSE); - - while (vTok.hasMoreTokens()) - { - String sv = vTok.nextToken(); - int ndx = sv.indexOf('='); - - String nm = sv.substring(0, ndx); - String vl = sv.substring(ndx + 1); - this.ordering.addElement(decodeOID(nm, lookUp)); - this.values.addElement(vl); - this.added.addElement(TRUE); - } - } - else - { - this.ordering.addElement(oid); - this.values.addElement(value); - this.added.addElement(FALSE); - } - } - - if (reverse) - { - Vector o = new Vector(); - Vector v = new Vector(); - Vector a = new Vector(); - - int count = 1; - - for (int i = 0; i < this.ordering.size(); i++) - { - if (((Boolean)this.added.elementAt(i)).booleanValue()) - { - o.insertElementAt(this.ordering.elementAt(i), count); - v.insertElementAt(this.values.elementAt(i), count); - a.insertElementAt(this.added.elementAt(i), count); - count++; - } - else - { - o.insertElementAt(this.ordering.elementAt(i), 0); - v.insertElementAt(this.values.elementAt(i), 0); - a.insertElementAt(this.added.elementAt(i), 0); - count = 1; - } - } - - this.ordering = o; - this.values = v; - this.added = a; - } - } - - /** - * return a vector of the oids in the name, in the order they were found. - */ - public Vector getOIDs() - { - Vector v = new Vector(); - - for (int i = 0; i != ordering.size(); i++) - { - v.addElement(ordering.elementAt(i)); - } - - return v; - } - - /** - * return a vector of the values found in the name, in the order they - * were found. - */ - public Vector getValues() - { - Vector v = new Vector(); - - for (int i = 0; i != values.size(); i++) - { - v.addElement(values.elementAt(i)); - } - - return v; - } - - /** - * return a vector of the values found in the name, in the order they - * were found, with the DN label corresponding to passed in oid. - */ - public Vector getValues( - ASN1ObjectIdentifier oid) - { - Vector v = new Vector(); - - for (int i = 0; i != values.size(); i++) - { - if (ordering.elementAt(i).equals(oid)) - { - String val = (String)values.elementAt(i); - - if (val.length() > 2 && val.charAt(0) == '\\' && val.charAt(1) == '#') - { - v.addElement(val.substring(1)); - } - else - { - v.addElement(val); - } - } - } - - return v; - } - - public ASN1Primitive toASN1Primitive() - { - if (seq == null) - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - ASN1EncodableVector sVec = new ASN1EncodableVector(); - ASN1ObjectIdentifier lstOid = null; - - for (int i = 0; i != ordering.size(); i++) - { - ASN1EncodableVector v = new ASN1EncodableVector(); - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)ordering.elementAt(i); - - v.add(oid); - - String str = (String)values.elementAt(i); - - v.add(converter.getConvertedValue(oid, str)); - - if (lstOid == null - || ((Boolean)this.added.elementAt(i)).booleanValue()) - { - sVec.add(new DERSequence(v)); - } - else - { - vec.add(new DERSet(sVec)); - sVec = new ASN1EncodableVector(); - - sVec.add(new DERSequence(v)); - } - - lstOid = oid; - } - - vec.add(new DERSet(sVec)); - - seq = new DERSequence(vec); - } - - return seq; - } - - /** - * @param inOrder if true the order of both X509 names must be the same, - * as well as the values associated with each element. - */ - public boolean equals(Object obj, boolean inOrder) - { - if (!inOrder) - { - return this.equals(obj); - } - - if (obj == this) - { - return true; - } - - if (!(obj instanceof X509Name || obj instanceof ASN1Sequence)) - { - return false; - } - - ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); - - if (this.toASN1Primitive().equals(derO)) - { - return true; - } - - X509Name other; - - try - { - other = X509Name.getInstance(obj); - } - catch (IllegalArgumentException e) - { - return false; - } - - int orderingSize = ordering.size(); - - if (orderingSize != other.ordering.size()) - { - return false; - } - - for (int i = 0; i < orderingSize; i++) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)ordering.elementAt(i); - ASN1ObjectIdentifier oOid = (ASN1ObjectIdentifier)other.ordering.elementAt(i); - - if (oid.equals(oOid)) - { - String value = (String)values.elementAt(i); - String oValue = (String)other.values.elementAt(i); - - if (!equivalentStrings(value, oValue)) - { - return false; - } - } - else - { - return false; - } - } - - return true; - } - - public int hashCode() - { - if (isHashCodeCalculated) - { - return hashCodeValue; - } - - isHashCodeCalculated = true; - - // this needs to be order independent, like equals - for (int i = 0; i != ordering.size(); i += 1) - { - String value = (String)values.elementAt(i); - - value = canonicalize(value); - value = stripInternalSpaces(value); - - hashCodeValue ^= ordering.elementAt(i).hashCode(); - hashCodeValue ^= value.hashCode(); - } - - return hashCodeValue; - } - - /** - * test for equality - note: case is ignored. - */ - public boolean equals(Object obj) - { - if (obj == this) - { - return true; - } - - if (!(obj instanceof X509Name || obj instanceof ASN1Sequence)) - { - return false; - } - - ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); - - if (this.toASN1Primitive().equals(derO)) - { - return true; - } - - X509Name other; - - try - { - other = X509Name.getInstance(obj); - } - catch (IllegalArgumentException e) - { - return false; - } - - int orderingSize = ordering.size(); - - if (orderingSize != other.ordering.size()) - { - return false; - } - - boolean[] indexes = new boolean[orderingSize]; - int start, end, delta; - - if (ordering.elementAt(0).equals(other.ordering.elementAt(0))) // guess forward - { - start = 0; - end = orderingSize; - delta = 1; - } - else // guess reversed - most common problem - { - start = orderingSize - 1; - end = -1; - delta = -1; - } - - for (int i = start; i != end; i += delta) - { - boolean found = false; - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)ordering.elementAt(i); - String value = (String)values.elementAt(i); - - for (int j = 0; j < orderingSize; j++) - { - if (indexes[j]) - { - continue; - } - - ASN1ObjectIdentifier oOid = (ASN1ObjectIdentifier)other.ordering.elementAt(j); - - if (oid.equals(oOid)) - { - String oValue = (String)other.values.elementAt(j); - - if (equivalentStrings(value, oValue)) - { - indexes[j] = true; - found = true; - break; - } - } - } - - if (!found) - { - return false; - } - } - - return true; - } - - private boolean equivalentStrings(String s1, String s2) - { - String value = canonicalize(s1); - String oValue = canonicalize(s2); - - if (!value.equals(oValue)) - { - value = stripInternalSpaces(value); - oValue = stripInternalSpaces(oValue); - - if (!value.equals(oValue)) - { - return false; - } - } - - return true; - } - - private String canonicalize(String s) - { - String value = Strings.toLowerCase(s.trim()); - - if (value.length() > 0 && value.charAt(0) == '#') - { - ASN1Primitive obj = decodeObject(value); - - if (obj instanceof ASN1String) - { - value = Strings.toLowerCase(((ASN1String)obj).getString().trim()); - } - } - - return value; - } - - private ASN1Primitive decodeObject(String oValue) - { - try - { - return ASN1Primitive.fromByteArray(Hex.decode(oValue.substring(1))); - } - catch (IOException e) - { - throw new IllegalStateException("unknown encoding in name: " + e); - } - } - - private String stripInternalSpaces( - String str) - { - StringBuffer res = new StringBuffer(); - - if (str.length() != 0) - { - char c1 = str.charAt(0); - - res.append(c1); - - for (int k = 1; k < str.length(); k++) - { - char c2 = str.charAt(k); - if (!(c1 == ' ' && c2 == ' ')) - { - res.append(c2); - } - c1 = c2; - } - } - - return res.toString(); - } - - private void appendValue( - StringBuffer buf, - Hashtable oidSymbols, - ASN1ObjectIdentifier oid, - String value) - { - String sym = (String)oidSymbols.get(oid); - - if (sym != null) - { - buf.append(sym); - } - else - { - buf.append(oid.getId()); - } - - buf.append('='); - - int index = buf.length(); - - buf.append(value); - - int end = buf.length(); - - if (value.length() >= 2 && value.charAt(0) == '\\' && value.charAt(1) == '#') - { - index += 2; - } - - while (index != end) - { - if ((buf.charAt(index) == ',') - || (buf.charAt(index) == '"') - || (buf.charAt(index) == '\\') - || (buf.charAt(index) == '+') - || (buf.charAt(index) == '=') - || (buf.charAt(index) == '<') - || (buf.charAt(index) == '>') - || (buf.charAt(index) == ';')) - { - buf.insert(index, "\\"); - index++; - end++; - } - - index++; - } - } - - /** - * convert the structure to a string - if reverse is true the - * oids and values are listed out starting with the last element - * in the sequence (ala RFC 2253), otherwise the string will begin - * with the first element of the structure. If no string definition - * for the oid is found in oidSymbols the string value of the oid is - * added. Two standard symbol tables are provided DefaultSymbols, and - * RFC2253Symbols as part of this class. - * - * @param reverse if true start at the end of the sequence and work back. - * @param oidSymbols look up table strings for oids. - */ - public String toString( - boolean reverse, - Hashtable oidSymbols) - { - StringBuffer buf = new StringBuffer(); - Vector components = new Vector(); - boolean first = true; - - StringBuffer ava = null; - - for (int i = 0; i < ordering.size(); i++) - { - if (((Boolean)added.elementAt(i)).booleanValue()) - { - ava.append('+'); - appendValue(ava, oidSymbols, - (ASN1ObjectIdentifier)ordering.elementAt(i), - (String)values.elementAt(i)); - } - else - { - ava = new StringBuffer(); - appendValue(ava, oidSymbols, - (ASN1ObjectIdentifier)ordering.elementAt(i), - (String)values.elementAt(i)); - components.addElement(ava); - } - } - - if (reverse) - { - for (int i = components.size() - 1; i >= 0; i--) - { - if (first) - { - first = false; - } - else - { - buf.append(','); - } - - buf.append(components.elementAt(i).toString()); - } - } - else - { - for (int i = 0; i < components.size(); i++) - { - if (first) - { - first = false; - } - else - { - buf.append(','); - } - - buf.append(components.elementAt(i).toString()); - } - } - - return buf.toString(); - } - - private String bytesToString( - byte[] data) - { - char[] cs = new char[data.length]; - - for (int i = 0; i != cs.length; i++) - { - cs[i] = (char)(data[i] & 0xff); - } - - return new String(cs); - } - - public String toString() - { - return toString(DefaultReverse, DefaultSymbols); - } -} diff --git a/src/org/bouncycastle/asn1/x509/X509NameEntryConverter.java b/src/org/bouncycastle/asn1/x509/X509NameEntryConverter.java deleted file mode 100644 index 5d919e1..0000000 --- a/src/org/bouncycastle/asn1/x509/X509NameEntryConverter.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.bouncycastle.asn1.x509; - -import java.io.IOException; - -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DERPrintableString; -import org.bouncycastle.util.Strings; - -/** - * It turns out that the number of standard ways the fields in a DN should be - * encoded into their ASN.1 counterparts is rapidly approaching the - * number of machines on the internet. By default the X509Name class - * will produce UTF8Strings in line with the current recommendations (RFC 3280). - *

        - * An example of an encoder look like below: - *

        - * public class X509DirEntryConverter
        - *     extends X509NameEntryConverter
        - * {
        - *     public ASN1Primitive getConvertedValue(
        - *         ASN1ObjectIdentifier  oid,
        - *         String               value)
        - *     {
        - *         if (str.length() != 0 && str.charAt(0) == '#')
        - *         {
        - *             return convertHexEncoded(str, 1);
        - *         }
        - *         if (oid.equals(EmailAddress))
        - *         {
        - *             return new DERIA5String(str);
        - *         }
        - *         else if (canBePrintable(str))
        - *         {
        - *             return new DERPrintableString(str);
        - *         }
        - *         else if (canBeUTF8(str))
        - *         {
        - *             return new DERUTF8String(str);
        - *         }
        - *         else
        - *         {
        - *             return new DERBMPString(str);
        - *         }
        - *     }
        - * }
        - */
        -public abstract class X509NameEntryConverter
        -{
        -    /**
        -     * Convert an inline encoded hex string rendition of an ASN.1
        -     * object back into its corresponding ASN.1 object.
        -     * 
        -     * @param str the hex encoded object
        -     * @param off the index at which the encoding starts
        -     * @return the decoded object
        -     */
        -    protected ASN1Primitive convertHexEncoded(
        -        String  str,
        -        int     off)
        -        throws IOException
        -    {
        -        str = Strings.toLowerCase(str);
        -        byte[] data = new byte[(str.length() - off) / 2];
        -        for (int index = 0; index != data.length; index++)
        -        {
        -            char left = str.charAt((index * 2) + off);
        -            char right = str.charAt((index * 2) + off + 1);
        -            
        -            if (left < 'a')
        -            {
        -                data[index] = (byte)((left - '0') << 4);
        -            }
        -            else
        -            {
        -                data[index] = (byte)((left - 'a' + 10) << 4);
        -            }
        -            if (right < 'a')
        -            {
        -                data[index] |= (byte)(right - '0');
        -            }
        -            else
        -            {
        -                data[index] |= (byte)(right - 'a' + 10);
        -            }
        -        }
        -
        -        ASN1InputStream aIn = new ASN1InputStream(data);
        -                                            
        -        return aIn.readObject();
        -    }
        -    
        -    /**
        -     * return true if the passed in String can be represented without
        -     * loss as a PrintableString, false otherwise.
        -     */
        -    protected boolean canBePrintable(
        -        String  str)
        -    {
        -        return DERPrintableString.isPrintableString(str);
        -    }
        -    
        -    /**
        -     * Convert the passed in String value into the appropriate ASN.1
        -     * encoded object.
        -     * 
        -     * @param oid the oid associated with the value in the DN.
        -     * @param value the value of the particular DN component.
        -     * @return the ASN.1 equivalent for the value.
        -     */
        -    public abstract ASN1Primitive getConvertedValue(ASN1ObjectIdentifier oid, String value);
        -}
        diff --git a/src/org/bouncycastle/asn1/x509/X509NameTokenizer.java b/src/org/bouncycastle/asn1/x509/X509NameTokenizer.java
        deleted file mode 100644
        index 1887fb6..0000000
        --- a/src/org/bouncycastle/asn1/x509/X509NameTokenizer.java
        +++ /dev/null
        @@ -1,99 +0,0 @@
        -package org.bouncycastle.asn1.x509;
        -
        -/**
        - * class for breaking up an X500 Name into it's component tokens, ala
        - * java.util.StringTokenizer. We need this class as some of the
        - * lightweight Java environment don't support classes like
        - * StringTokenizer.
        - */
        -public class X509NameTokenizer
        -{
        -    private String          value;
        -    private int             index;
        -    private char            seperator;
        -    private StringBuffer    buf = new StringBuffer();
        -
        -    public X509NameTokenizer(
        -        String  oid)
        -    {
        -        this(oid, ',');
        -    }
        -    
        -    public X509NameTokenizer(
        -        String  oid,
        -        char    seperator)
        -    {
        -        this.value = oid;
        -        this.index = -1;
        -        this.seperator = seperator;
        -    }
        -
        -    public boolean hasMoreTokens()
        -    {
        -        return (index != value.length());
        -    }
        -
        -    public String nextToken()
        -    {
        -        if (index == value.length())
        -        {
        -            return null;
        -        }
        -
        -        int     end = index + 1;
        -        boolean quoted = false;
        -        boolean escaped = false;
        -
        -        buf.setLength(0);
        -
        -        while (end != value.length())
        -        {
        -            char    c = value.charAt(end);
        -
        -            if (c == '"')
        -            {
        -                if (!escaped)
        -                {
        -                    quoted = !quoted;
        -                }
        -                else
        -                {
        -                    buf.append(c);
        -                }
        -                escaped = false;
        -            }
        -            else
        -            {
        -                if (escaped || quoted)
        -                {
        -                    if (c == '#' && buf.charAt(buf.length() - 1) == '=')
        -                    {
        -                        buf.append('\\');
        -                    }
        -                    else if (c == '+' && seperator != '+')
        -                    {
        -                        buf.append('\\');
        -                    }
        -                    buf.append(c);
        -                    escaped = false;
        -                }
        -                else if (c == '\\')
        -                {
        -                    escaped = true;
        -                }
        -                else if (c == seperator)
        -                {
        -                    break;
        -                }
        -                else
        -                {
        -                    buf.append(c);
        -                }
        -            }
        -            end++;
        -        }
        -
        -        index = end;
        -        return buf.toString().trim();
        -    }
        -}
        diff --git a/src/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java b/src/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java
        deleted file mode 100644
        index ed4dd32..0000000
        --- a/src/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java
        +++ /dev/null
        @@ -1,67 +0,0 @@
        -package org.bouncycastle.asn1.x509;
        -
        -import org.bouncycastle.asn1.ASN1ObjectIdentifier;
        -
        -public interface X509ObjectIdentifiers
        -{
        -    //
        -    // base id
        -    //
        -    static final String                 id                      = "2.5.4";
        -
        -    static final ASN1ObjectIdentifier    commonName              = new ASN1ObjectIdentifier(id + ".3");
        -    static final ASN1ObjectIdentifier    countryName             = new ASN1ObjectIdentifier(id + ".6");
        -    static final ASN1ObjectIdentifier    localityName            = new ASN1ObjectIdentifier(id + ".7");
        -    static final ASN1ObjectIdentifier    stateOrProvinceName     = new ASN1ObjectIdentifier(id + ".8");
        -    static final ASN1ObjectIdentifier    organization            = new ASN1ObjectIdentifier(id + ".10");
        -    static final ASN1ObjectIdentifier    organizationalUnitName  = new ASN1ObjectIdentifier(id + ".11");
        -
        -    static final ASN1ObjectIdentifier    id_at_telephoneNumber   = new ASN1ObjectIdentifier("2.5.4.20");
        -    static final ASN1ObjectIdentifier    id_at_name              = new ASN1ObjectIdentifier(id + ".41");
        -
        -    // id-SHA1 OBJECT IDENTIFIER ::=    
        -    //   {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 }    //
        -    static final ASN1ObjectIdentifier    id_SHA1                 = new ASN1ObjectIdentifier("1.3.14.3.2.26");
        -
        -    //
        -    // ripemd160 OBJECT IDENTIFIER ::=
        -    //      {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) hashAlgorithm(2) RIPEMD-160(1)}
        -    //
        -    static final ASN1ObjectIdentifier    ripemd160               = new ASN1ObjectIdentifier("1.3.36.3.2.1");
        -
        -    //
        -    // ripemd160WithRSAEncryption OBJECT IDENTIFIER ::=
        -    //      {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) signatureAlgorithm(3) rsaSignature(1) rsaSignatureWithripemd160(2) }
        -    //
        -    static final ASN1ObjectIdentifier    ripemd160WithRSAEncryption = new ASN1ObjectIdentifier("1.3.36.3.3.1.2");
        -
        -
        -    static final ASN1ObjectIdentifier    id_ea_rsa = new ASN1ObjectIdentifier("2.5.8.1.1");
        -    
        -    // id-pkix
        -    static final ASN1ObjectIdentifier id_pkix = new ASN1ObjectIdentifier("1.3.6.1.5.5.7");
        -
        -    //
        -    // private internet extensions
        -    //
        -    static final ASN1ObjectIdentifier  id_pe = new ASN1ObjectIdentifier(id_pkix + ".1");
        -
        -    //
        -    // ISO ARC for standard certificate and CRL extensions
        -    //
        -    static final ASN1ObjectIdentifier id_ce = new ASN1ObjectIdentifier("2.5.29");
        -
        -    //
        -    // authority information access
        -    //
        -    static final ASN1ObjectIdentifier  id_ad = new ASN1ObjectIdentifier(id_pkix + ".48");
        -    static final ASN1ObjectIdentifier  id_ad_caIssuers = new ASN1ObjectIdentifier(id_ad + ".2");
        -    static final ASN1ObjectIdentifier  id_ad_ocsp = new ASN1ObjectIdentifier(id_ad + ".1");
        -
        -    //
        -    //    OID for ocsp and crl uri in AuthorityInformationAccess extension
        -    //
        -    static final ASN1ObjectIdentifier ocspAccessMethod = id_ad_ocsp;
        -    static final ASN1ObjectIdentifier crlAccessMethod = id_ad_caIssuers;
        -}
        -
        diff --git a/src/org/bouncycastle/asn1/x509/package.html b/src/org/bouncycastle/asn1/x509/package.html
        deleted file mode 100644
        index 728921a..0000000
        --- a/src/org/bouncycastle/asn1/x509/package.html
        +++ /dev/null
        @@ -1,5 +0,0 @@
        -
        -
        -Support classes useful for encoding and processing X.509 certificates.
        -
        -
        diff --git a/src/org/bouncycastle/asn1/x509/qualified/BiometricData.java b/src/org/bouncycastle/asn1/x509/qualified/BiometricData.java
        deleted file mode 100644
        index 32fa451..0000000
        --- a/src/org/bouncycastle/asn1/x509/qualified/BiometricData.java
        +++ /dev/null
        @@ -1,122 +0,0 @@
        -package org.bouncycastle.asn1.x509.qualified;
        -
        -import java.util.Enumeration;
        -
        -import org.bouncycastle.asn1.ASN1EncodableVector;
        -import org.bouncycastle.asn1.ASN1Object;
        -import org.bouncycastle.asn1.ASN1OctetString;
        -import org.bouncycastle.asn1.ASN1Primitive;
        -import org.bouncycastle.asn1.ASN1Sequence;
        -import org.bouncycastle.asn1.DERIA5String;
        -import org.bouncycastle.asn1.DERSequence;
        -import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
        -
        -/**
        - * The BiometricData object.
        - * 
        - * BiometricData  ::=  SEQUENCE {
        - *       typeOfBiometricData  TypeOfBiometricData,
        - *       hashAlgorithm        AlgorithmIdentifier,
        - *       biometricDataHash    OCTET STRING,
        - *       sourceDataUri        IA5String OPTIONAL  }
        - * 
        - */ -public class BiometricData - extends ASN1Object -{ - private TypeOfBiometricData typeOfBiometricData; - private AlgorithmIdentifier hashAlgorithm; - private ASN1OctetString biometricDataHash; - private DERIA5String sourceDataUri; - - public static BiometricData getInstance( - Object obj) - { - if (obj instanceof BiometricData) - { - return (BiometricData)obj; - } - - if (obj != null) - { - return new BiometricData(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private BiometricData(ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - // typeOfBiometricData - typeOfBiometricData = TypeOfBiometricData.getInstance(e.nextElement()); - // hashAlgorithm - hashAlgorithm = AlgorithmIdentifier.getInstance(e.nextElement()); - // biometricDataHash - biometricDataHash = ASN1OctetString.getInstance(e.nextElement()); - // sourceDataUri - if (e.hasMoreElements()) - { - sourceDataUri = DERIA5String.getInstance(e.nextElement()); - } - } - - public BiometricData( - TypeOfBiometricData typeOfBiometricData, - AlgorithmIdentifier hashAlgorithm, - ASN1OctetString biometricDataHash, - DERIA5String sourceDataUri) - { - this.typeOfBiometricData = typeOfBiometricData; - this.hashAlgorithm = hashAlgorithm; - this.biometricDataHash = biometricDataHash; - this.sourceDataUri = sourceDataUri; - } - - public BiometricData( - TypeOfBiometricData typeOfBiometricData, - AlgorithmIdentifier hashAlgorithm, - ASN1OctetString biometricDataHash) - { - this.typeOfBiometricData = typeOfBiometricData; - this.hashAlgorithm = hashAlgorithm; - this.biometricDataHash = biometricDataHash; - this.sourceDataUri = null; - } - - public TypeOfBiometricData getTypeOfBiometricData() - { - return typeOfBiometricData; - } - - public AlgorithmIdentifier getHashAlgorithm() - { - return hashAlgorithm; - } - - public ASN1OctetString getBiometricDataHash() - { - return biometricDataHash; - } - - public DERIA5String getSourceDataUri() - { - return sourceDataUri; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector seq = new ASN1EncodableVector(); - seq.add(typeOfBiometricData); - seq.add(hashAlgorithm); - seq.add(biometricDataHash); - - if (sourceDataUri != null) - { - seq.add(sourceDataUri); - } - - return new DERSequence(seq); - } -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java b/src/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java deleted file mode 100644 index 19ef12b..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bouncycastle.asn1.x509.qualified; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -public interface ETSIQCObjectIdentifiers -{ - // - // base id - // - static final ASN1ObjectIdentifier id_etsi_qcs = new ASN1ObjectIdentifier("0.4.0.1862.1"); - - static final ASN1ObjectIdentifier id_etsi_qcs_QcCompliance = id_etsi_qcs.branch("1"); - static final ASN1ObjectIdentifier id_etsi_qcs_LimiteValue = id_etsi_qcs.branch("2"); - static final ASN1ObjectIdentifier id_etsi_qcs_RetentionPeriod = id_etsi_qcs.branch("3"); - static final ASN1ObjectIdentifier id_etsi_qcs_QcSSCD = id_etsi_qcs.branch("4"); -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java b/src/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java deleted file mode 100644 index b6cfb62..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.bouncycastle.asn1.x509.qualified; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DERPrintableString; - -/** - * The Iso4217CurrencyCode object. - *
        - * Iso4217CurrencyCode  ::=  CHOICE {
        - *       alphabetic              PrintableString (SIZE 3), --Recommended
        - *       numeric              INTEGER (1..999) }
        - * -- Alphabetic or numeric currency code as defined in ISO 4217
        - * -- It is recommended that the Alphabetic form is used
        - * 
        - */ -public class Iso4217CurrencyCode - extends ASN1Object - implements ASN1Choice -{ - final int ALPHABETIC_MAXSIZE = 3; - final int NUMERIC_MINSIZE = 1; - final int NUMERIC_MAXSIZE = 999; - - ASN1Encodable obj; - int numeric; - - public static Iso4217CurrencyCode getInstance( - Object obj) - { - if (obj == null || obj instanceof Iso4217CurrencyCode) - { - return (Iso4217CurrencyCode)obj; - } - - if (obj instanceof ASN1Integer) - { - ASN1Integer numericobj = ASN1Integer.getInstance(obj); - int numeric = numericobj.getValue().intValue(); - return new Iso4217CurrencyCode(numeric); - } - else - if (obj instanceof DERPrintableString) - { - DERPrintableString alphabetic = DERPrintableString.getInstance(obj); - return new Iso4217CurrencyCode(alphabetic.getString()); - } - throw new IllegalArgumentException("unknown object in getInstance"); - } - - public Iso4217CurrencyCode( - int numeric) - { - if (numeric > NUMERIC_MAXSIZE || numeric < NUMERIC_MINSIZE) - { - throw new IllegalArgumentException("wrong size in numeric code : not in (" +NUMERIC_MINSIZE +".."+ NUMERIC_MAXSIZE +")"); - } - obj = new ASN1Integer(numeric); - } - - public Iso4217CurrencyCode( - String alphabetic) - { - if (alphabetic.length() > ALPHABETIC_MAXSIZE) - { - throw new IllegalArgumentException("wrong size in alphabetic code : max size is " + ALPHABETIC_MAXSIZE); - } - obj = new DERPrintableString(alphabetic); - } - - public boolean isAlphabetic() - { - return obj instanceof DERPrintableString; - } - - public String getAlphabetic() - { - return ((DERPrintableString)obj).getString(); - } - - public int getNumeric() - { - return ((ASN1Integer)obj).getValue().intValue(); - } - - public ASN1Primitive toASN1Primitive() - { - return obj.toASN1Primitive(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java b/src/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java deleted file mode 100644 index 1098aa0..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.bouncycastle.asn1.x509.qualified; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * The MonetaryValue object. - *
        - * MonetaryValue  ::=  SEQUENCE {
        - *       currency              Iso4217CurrencyCode,
        - *       amount               INTEGER, 
        - *       exponent             INTEGER }
        - * -- value = amount * 10^exponent
        - * 
        - */ -public class MonetaryValue - extends ASN1Object -{ - private Iso4217CurrencyCode currency; - private ASN1Integer amount; - private ASN1Integer exponent; - - public static MonetaryValue getInstance( - Object obj) - { - if (obj instanceof MonetaryValue) - { - return (MonetaryValue)obj; - } - - if (obj != null) - { - return new MonetaryValue(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private MonetaryValue( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - // currency - currency = Iso4217CurrencyCode.getInstance(e.nextElement()); - // hashAlgorithm - amount = ASN1Integer.getInstance(e.nextElement()); - // exponent - exponent = ASN1Integer.getInstance(e.nextElement()); - } - - public MonetaryValue( - Iso4217CurrencyCode currency, - int amount, - int exponent) - { - this.currency = currency; - this.amount = new ASN1Integer(amount); - this.exponent = new ASN1Integer(exponent); - } - - public Iso4217CurrencyCode getCurrency() - { - return currency; - } - - public BigInteger getAmount() - { - return amount.getValue(); - } - - public BigInteger getExponent() - { - return exponent.getValue(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector seq = new ASN1EncodableVector(); - seq.add(currency); - seq.add(amount); - seq.add(exponent); - - return new DERSequence(seq); - } -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/QCStatement.java b/src/org/bouncycastle/asn1/x509/qualified/QCStatement.java deleted file mode 100644 index aef6cd5..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/QCStatement.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.bouncycastle.asn1.x509.qualified; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * The QCStatement object. - *
        - * QCStatement ::= SEQUENCE {
        - *   statementId        OBJECT IDENTIFIER,
        - *   statementInfo      ANY DEFINED BY statementId OPTIONAL} 
        - * 
        - */ - -public class QCStatement extends ASN1Object -{ - ASN1ObjectIdentifier qcStatementId; - ASN1Encodable qcStatementInfo; - - public static QCStatement getInstance( - Object obj) - { - if (obj instanceof QCStatement) - { - return (QCStatement)obj; - } - if (obj != null) - { - return new QCStatement(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private QCStatement( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - // qcStatementId - qcStatementId = ASN1ObjectIdentifier.getInstance(e.nextElement()); - // qcstatementInfo - if (e.hasMoreElements()) - { - qcStatementInfo = (ASN1Encodable) e.nextElement(); - } - } - - public QCStatement( - ASN1ObjectIdentifier qcStatementId) - { - this.qcStatementId = qcStatementId; - this.qcStatementInfo = null; - } - - public QCStatement( - ASN1ObjectIdentifier qcStatementId, - ASN1Encodable qcStatementInfo) - { - this.qcStatementId = qcStatementId; - this.qcStatementInfo = qcStatementInfo; - } - - public ASN1ObjectIdentifier getStatementId() - { - return qcStatementId; - } - - public ASN1Encodable getStatementInfo() - { - return qcStatementInfo; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector seq = new ASN1EncodableVector(); - seq.add(qcStatementId); - - if (qcStatementInfo != null) - { - seq.add(qcStatementInfo); - } - - return new DERSequence(seq); - } -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java b/src/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java deleted file mode 100644 index b3b2425..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.bouncycastle.asn1.x509.qualified; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -public class RFC3739QCObjectIdentifiers -{ - // - // base id - // - static final ASN1ObjectIdentifier id_qcs = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.11"); - - static final ASN1ObjectIdentifier id_qcs_pkixQCSyntax_v1 = id_qcs.branch("1"); - static final ASN1ObjectIdentifier id_qcs_pkixQCSyntax_v2 = id_qcs.branch("2"); -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java b/src/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java deleted file mode 100644 index 43d8d58..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.bouncycastle.asn1.x509.qualified; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x509.GeneralName; - -/** - * The SemanticsInformation object. - *
        - *       SemanticsInformation ::= SEQUENCE {
        - *         semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
        - *         nameRegistrationAuthorities NameRegistrationAuthorities
        - *                                                         OPTIONAL }
        - *         (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
        - *          WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
        - *
        - *     NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
        - *         GeneralName
        - * 
        - */ -public class SemanticsInformation - extends ASN1Object -{ - private ASN1ObjectIdentifier semanticsIdentifier; - private GeneralName[] nameRegistrationAuthorities; - - public static SemanticsInformation getInstance(Object obj) - { - if (obj instanceof SemanticsInformation) - { - return (SemanticsInformation)obj; - } - - if (obj != null) - { - return new SemanticsInformation(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - private SemanticsInformation(ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - if (seq.size() < 1) - { - throw new IllegalArgumentException("no objects in SemanticsInformation"); - } - - Object object = e.nextElement(); - if (object instanceof ASN1ObjectIdentifier) - { - semanticsIdentifier = ASN1ObjectIdentifier.getInstance(object); - if (e.hasMoreElements()) - { - object = e.nextElement(); - } - else - { - object = null; - } - } - - if (object != null) - { - ASN1Sequence generalNameSeq = ASN1Sequence.getInstance(object); - nameRegistrationAuthorities = new GeneralName[generalNameSeq.size()]; - for (int i= 0; i < generalNameSeq.size(); i++) - { - nameRegistrationAuthorities[i] = GeneralName.getInstance(generalNameSeq.getObjectAt(i)); - } - } - } - - public SemanticsInformation( - ASN1ObjectIdentifier semanticsIdentifier, - GeneralName[] generalNames) - { - this.semanticsIdentifier = semanticsIdentifier; - this.nameRegistrationAuthorities = generalNames; - } - - public SemanticsInformation(ASN1ObjectIdentifier semanticsIdentifier) - { - this.semanticsIdentifier = semanticsIdentifier; - this.nameRegistrationAuthorities = null; - } - - public SemanticsInformation(GeneralName[] generalNames) - { - this.semanticsIdentifier = null; - this.nameRegistrationAuthorities = generalNames; - } - - public ASN1ObjectIdentifier getSemanticsIdentifier() - { - return semanticsIdentifier; - } - - public GeneralName[] getNameRegistrationAuthorities() - { - return nameRegistrationAuthorities; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector seq = new ASN1EncodableVector(); - - if (this.semanticsIdentifier != null) - { - seq.add(semanticsIdentifier); - } - if (this.nameRegistrationAuthorities != null) - { - ASN1EncodableVector seqname = new ASN1EncodableVector(); - for (int i = 0; i < nameRegistrationAuthorities.length; i++) - { - seqname.add(nameRegistrationAuthorities[i]); - } - seq.add(new DERSequence(seqname)); - } - - return new DERSequence(seq); - } -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java b/src/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java deleted file mode 100644 index 01b254e..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.bouncycastle.asn1.x509.qualified; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; - -/** - * The TypeOfBiometricData object. - *
        - * TypeOfBiometricData ::= CHOICE {
        - *   predefinedBiometricType   PredefinedBiometricType,
        - *   biometricDataOid          OBJECT IDENTIFIER }
        - *
        - * PredefinedBiometricType ::= INTEGER {
        - *   picture(0),handwritten-signature(1)}
        - *   (picture|handwritten-signature)
        - * 
        - */ -public class TypeOfBiometricData - extends ASN1Object - implements ASN1Choice -{ - public static final int PICTURE = 0; - public static final int HANDWRITTEN_SIGNATURE = 1; - - ASN1Encodable obj; - - public static TypeOfBiometricData getInstance(Object obj) - { - if (obj == null || obj instanceof TypeOfBiometricData) - { - return (TypeOfBiometricData)obj; - } - - if (obj instanceof ASN1Integer) - { - ASN1Integer predefinedBiometricTypeObj = ASN1Integer.getInstance(obj); - int predefinedBiometricType = predefinedBiometricTypeObj.getValue().intValue(); - - return new TypeOfBiometricData(predefinedBiometricType); - } - else if (obj instanceof ASN1ObjectIdentifier) - { - ASN1ObjectIdentifier BiometricDataID = ASN1ObjectIdentifier.getInstance(obj); - return new TypeOfBiometricData(BiometricDataID); - } - - throw new IllegalArgumentException("unknown object in getInstance"); - } - - public TypeOfBiometricData(int predefinedBiometricType) - { - if (predefinedBiometricType == PICTURE || predefinedBiometricType == HANDWRITTEN_SIGNATURE) - { - obj = new ASN1Integer(predefinedBiometricType); - } - else - { - throw new IllegalArgumentException("unknow PredefinedBiometricType : " + predefinedBiometricType); - } - } - - public TypeOfBiometricData(ASN1ObjectIdentifier BiometricDataID) - { - obj = BiometricDataID; - } - - public boolean isPredefined() - { - return obj instanceof ASN1Integer; - } - - public int getPredefinedBiometricType() - { - return ((ASN1Integer)obj).getValue().intValue(); - } - - public ASN1ObjectIdentifier getBiometricDataOid() - { - return (ASN1ObjectIdentifier)obj; - } - - public ASN1Primitive toASN1Primitive() - { - return obj.toASN1Primitive(); - } -} diff --git a/src/org/bouncycastle/asn1/x509/qualified/package.html b/src/org/bouncycastle/asn1/x509/qualified/package.html deleted file mode 100644 index 28cfef9..0000000 --- a/src/org/bouncycastle/asn1/x509/qualified/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Support classes useful for encoding and processing messages based around RFC3739 - - diff --git a/src/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java b/src/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java deleted file mode 100644 index 304f1d4..0000000 --- a/src/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java +++ /dev/null @@ -1,191 +0,0 @@ -package org.bouncycastle.asn1.x509.sigi; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1String; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.x500.DirectoryString; - -/** - * Structure for a name or pseudonym. - * - *
        - *       NameOrPseudonym ::= CHOICE {
        - *            surAndGivenName SEQUENCE {
        - *              surName DirectoryString,
        - *              givenName SEQUENCE OF DirectoryString 
        - *         },
        - *            pseudonym DirectoryString 
        - *       }
        - * 
        - * - * @see org.bouncycastle.asn1.x509.sigi.PersonalData - * - */ -public class NameOrPseudonym - extends ASN1Object - implements ASN1Choice -{ - private DirectoryString pseudonym; - - private DirectoryString surname; - - private ASN1Sequence givenName; - - public static NameOrPseudonym getInstance(Object obj) - { - if (obj == null || obj instanceof NameOrPseudonym) - { - return (NameOrPseudonym)obj; - } - - if (obj instanceof ASN1String) - { - return new NameOrPseudonym(DirectoryString.getInstance(obj)); - } - - if (obj instanceof ASN1Sequence) - { - return new NameOrPseudonym((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("illegal object in getInstance: " - + obj.getClass().getName()); - } - - /** - * Constructor from DirectoryString. - *

        - * The sequence is of type NameOrPseudonym: - *

        - *

        -     *       NameOrPseudonym ::= CHOICE {
        -     *            surAndGivenName SEQUENCE {
        -     *              surName DirectoryString,
        -     *              givenName SEQUENCE OF DirectoryString
        -     *         },
        -     *            pseudonym DirectoryString
        -     *       }
        -     * 
        - * @param pseudonym pseudonym value to use. - */ - public NameOrPseudonym(DirectoryString pseudonym) - { - this.pseudonym = pseudonym; - } - - /** - * Constructor from ASN1Sequence. - *

        - * The sequence is of type NameOrPseudonym: - *

        - *

        -     *       NameOrPseudonym ::= CHOICE {
        -     *            surAndGivenName SEQUENCE {
        -     *              surName DirectoryString,
        -     *              givenName SEQUENCE OF DirectoryString
        -     *         },
        -     *            pseudonym DirectoryString
        -     *       }
        -     * 
        - * - * @param seq The ASN.1 sequence. - */ - private NameOrPseudonym(ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - if (!(seq.getObjectAt(0) instanceof ASN1String)) - { - throw new IllegalArgumentException("Bad object encountered: " - + seq.getObjectAt(0).getClass()); - } - - surname = DirectoryString.getInstance(seq.getObjectAt(0)); - givenName = ASN1Sequence.getInstance(seq.getObjectAt(1)); - } - - /** - * Constructor from a given details. - * - * @param pseudonym The pseudonym. - */ - public NameOrPseudonym(String pseudonym) - { - this(new DirectoryString(pseudonym)); - } - - /** - * Constructor from a given details. - * - * @param surname The surname. - * @param givenName A sequence of directory strings making up the givenName - */ - public NameOrPseudonym(DirectoryString surname, ASN1Sequence givenName) - { - this.surname = surname; - this.givenName = givenName; - } - - public DirectoryString getPseudonym() - { - return pseudonym; - } - - public DirectoryString getSurname() - { - return surname; - } - - public DirectoryString[] getGivenName() - { - DirectoryString[] items = new DirectoryString[givenName.size()]; - int count = 0; - for (Enumeration e = givenName.getObjects(); e.hasMoreElements();) - { - items[count++] = DirectoryString.getInstance(e.nextElement()); - } - return items; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *

        - * Returns: - *

        - *

        -     *       NameOrPseudonym ::= CHOICE {
        -     *            surAndGivenName SEQUENCE {
        -     *              surName DirectoryString,
        -     *              givenName SEQUENCE OF DirectoryString
        -     *         },
        -     *            pseudonym DirectoryString
        -     *       }
        -     * 
        - * - * @return a DERObject - */ - public ASN1Primitive toASN1Primitive() - { - if (pseudonym != null) - { - return pseudonym.toASN1Primitive(); - } - else - { - ASN1EncodableVector vec1 = new ASN1EncodableVector(); - vec1.add(surname); - vec1.add(givenName); - return new DERSequence(vec1); - } - } -} diff --git a/src/org/bouncycastle/asn1/x509/sigi/PersonalData.java b/src/org/bouncycastle/asn1/x509/sigi/PersonalData.java deleted file mode 100644 index 3b8214d..0000000 --- a/src/org/bouncycastle/asn1/x509/sigi/PersonalData.java +++ /dev/null @@ -1,214 +0,0 @@ -package org.bouncycastle.asn1.x509.sigi; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERGeneralizedTime; -import org.bouncycastle.asn1.DERPrintableString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.x500.DirectoryString; - -/** - * Contains personal data for the otherName field in the subjectAltNames - * extension. - *

        - *

        - *     PersonalData ::= SEQUENCE {
        - *       nameOrPseudonym NameOrPseudonym,
        - *       nameDistinguisher [0] INTEGER OPTIONAL,
        - *       dateOfBirth [1] GeneralizedTime OPTIONAL,
        - *       placeOfBirth [2] DirectoryString OPTIONAL,
        - *       gender [3] PrintableString OPTIONAL,
        - *       postalAddress [4] DirectoryString OPTIONAL
        - *       }
        - * 
        - * - * @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym - * @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers - */ -public class PersonalData - extends ASN1Object -{ - private NameOrPseudonym nameOrPseudonym; - private BigInteger nameDistinguisher; - private DERGeneralizedTime dateOfBirth; - private DirectoryString placeOfBirth; - private String gender; - private DirectoryString postalAddress; - - public static PersonalData getInstance(Object obj) - { - if (obj == null || obj instanceof PersonalData) - { - return (PersonalData)obj; - } - - if (obj instanceof ASN1Sequence) - { - return new PersonalData((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); - } - - /** - * Constructor from ASN1Sequence. - *

        - * The sequence is of type NameOrPseudonym: - *

        - *

        -     *     PersonalData ::= SEQUENCE {
        -     *       nameOrPseudonym NameOrPseudonym,
        -     *       nameDistinguisher [0] INTEGER OPTIONAL,
        -     *       dateOfBirth [1] GeneralizedTime OPTIONAL,
        -     *       placeOfBirth [2] DirectoryString OPTIONAL,
        -     *       gender [3] PrintableString OPTIONAL,
        -     *       postalAddress [4] DirectoryString OPTIONAL
        -     *       }
        -     * 
        - * - * @param seq The ASN.1 sequence. - */ - private PersonalData(ASN1Sequence seq) - { - if (seq.size() < 1) - { - throw new IllegalArgumentException("Bad sequence size: " - + seq.size()); - } - - Enumeration e = seq.getObjects(); - - nameOrPseudonym = NameOrPseudonym.getInstance(e.nextElement()); - - while (e.hasMoreElements()) - { - ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement()); - int tag = o.getTagNo(); - switch (tag) - { - case 0: - nameDistinguisher = ASN1Integer.getInstance(o, false).getValue(); - break; - case 1: - dateOfBirth = DERGeneralizedTime.getInstance(o, false); - break; - case 2: - placeOfBirth = DirectoryString.getInstance(o, true); - break; - case 3: - gender = DERPrintableString.getInstance(o, false).getString(); - break; - case 4: - postalAddress = DirectoryString.getInstance(o, true); - break; - default: - throw new IllegalArgumentException("Bad tag number: " + o.getTagNo()); - } - } - } - - /** - * Constructor from a given details. - * - * @param nameOrPseudonym Name or pseudonym. - * @param nameDistinguisher Name distinguisher. - * @param dateOfBirth Date of birth. - * @param placeOfBirth Place of birth. - * @param gender Gender. - * @param postalAddress Postal Address. - */ - public PersonalData(NameOrPseudonym nameOrPseudonym, - BigInteger nameDistinguisher, DERGeneralizedTime dateOfBirth, - DirectoryString placeOfBirth, String gender, DirectoryString postalAddress) - { - this.nameOrPseudonym = nameOrPseudonym; - this.dateOfBirth = dateOfBirth; - this.gender = gender; - this.nameDistinguisher = nameDistinguisher; - this.postalAddress = postalAddress; - this.placeOfBirth = placeOfBirth; - } - - public NameOrPseudonym getNameOrPseudonym() - { - return nameOrPseudonym; - } - - public BigInteger getNameDistinguisher() - { - return nameDistinguisher; - } - - public DERGeneralizedTime getDateOfBirth() - { - return dateOfBirth; - } - - public DirectoryString getPlaceOfBirth() - { - return placeOfBirth; - } - - public String getGender() - { - return gender; - } - - public DirectoryString getPostalAddress() - { - return postalAddress; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *

        - * Returns: - *

        - *

        -     *     PersonalData ::= SEQUENCE {
        -     *       nameOrPseudonym NameOrPseudonym,
        -     *       nameDistinguisher [0] INTEGER OPTIONAL,
        -     *       dateOfBirth [1] GeneralizedTime OPTIONAL,
        -     *       placeOfBirth [2] DirectoryString OPTIONAL,
        -     *       gender [3] PrintableString OPTIONAL,
        -     *       postalAddress [4] DirectoryString OPTIONAL
        -     *       }
        -     * 
        - * - * @return a DERObject - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector vec = new ASN1EncodableVector(); - vec.add(nameOrPseudonym); - if (nameDistinguisher != null) - { - vec.add(new DERTaggedObject(false, 0, new ASN1Integer(nameDistinguisher))); - } - if (dateOfBirth != null) - { - vec.add(new DERTaggedObject(false, 1, dateOfBirth)); - } - if (placeOfBirth != null) - { - vec.add(new DERTaggedObject(true, 2, placeOfBirth)); - } - if (gender != null) - { - vec.add(new DERTaggedObject(false, 3, new DERPrintableString(gender, true))); - } - if (postalAddress != null) - { - vec.add(new DERTaggedObject(true, 4, postalAddress)); - } - return new DERSequence(vec); - } -} diff --git a/src/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java b/src/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java deleted file mode 100644 index 8cac124..0000000 --- a/src/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bouncycastle.asn1.x509.sigi; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -/** - * Object Identifiers of SigI specifciation (German Signature Law - * Interoperability specification). - */ -public interface SigIObjectIdentifiers -{ - public final static ASN1ObjectIdentifier id_sigi = new ASN1ObjectIdentifier("1.3.36.8"); - - /** - * Key purpose IDs for German SigI (Signature Interoperability - * Specification) - */ - public final static ASN1ObjectIdentifier id_sigi_kp = new ASN1ObjectIdentifier(id_sigi + ".2"); - - /** - * Certificate policy IDs for German SigI (Signature Interoperability - * Specification) - */ - public final static ASN1ObjectIdentifier id_sigi_cp = new ASN1ObjectIdentifier(id_sigi + ".1"); - - /** - * Other Name IDs for German SigI (Signature Interoperability Specification) - */ - public final static ASN1ObjectIdentifier id_sigi_on = new ASN1ObjectIdentifier(id_sigi + ".4"); - - /** - * To be used for for the generation of directory service certificates. - */ - public static final ASN1ObjectIdentifier id_sigi_kp_directoryService = new ASN1ObjectIdentifier(id_sigi_kp + ".1"); - - /** - * ID for PersonalData - */ - public static final ASN1ObjectIdentifier id_sigi_on_personalData = new ASN1ObjectIdentifier(id_sigi_on + ".1"); - - /** - * Certificate is conform to german signature law. - */ - public static final ASN1ObjectIdentifier id_sigi_cp_sigconform = new ASN1ObjectIdentifier(id_sigi_cp + ".1"); - -} diff --git a/src/org/bouncycastle/asn1/x9/DHDomainParameters.java b/src/org/bouncycastle/asn1/x9/DHDomainParameters.java deleted file mode 100644 index 6a97a48..0000000 --- a/src/org/bouncycastle/asn1/x9/DHDomainParameters.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERSequence; - -public class DHDomainParameters - extends ASN1Object -{ - private ASN1Integer p, g, q, j; - private DHValidationParms validationParms; - - public static DHDomainParameters getInstance(ASN1TaggedObject obj, boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static DHDomainParameters getInstance(Object obj) - { - if (obj == null || obj instanceof DHDomainParameters) - { - return (DHDomainParameters)obj; - } - - if (obj instanceof ASN1Sequence) - { - return new DHDomainParameters((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("Invalid DHDomainParameters: " - + obj.getClass().getName()); - } - - public DHDomainParameters(ASN1Integer p, ASN1Integer g, ASN1Integer q, ASN1Integer j, - DHValidationParms validationParms) - { - if (p == null) - { - throw new IllegalArgumentException("'p' cannot be null"); - } - if (g == null) - { - throw new IllegalArgumentException("'g' cannot be null"); - } - if (q == null) - { - throw new IllegalArgumentException("'q' cannot be null"); - } - - this.p = p; - this.g = g; - this.q = q; - this.j = j; - this.validationParms = validationParms; - } - - private DHDomainParameters(ASN1Sequence seq) - { - if (seq.size() < 3 || seq.size() > 5) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - Enumeration e = seq.getObjects(); - this.p = ASN1Integer.getInstance(e.nextElement()); - this.g = ASN1Integer.getInstance(e.nextElement()); - this.q = ASN1Integer.getInstance(e.nextElement()); - - ASN1Encodable next = getNext(e); - - if (next != null && next instanceof ASN1Integer) - { - this.j = ASN1Integer.getInstance(next); - next = getNext(e); - } - - if (next != null) - { - this.validationParms = DHValidationParms.getInstance(next.toASN1Primitive()); - } - } - - private static ASN1Encodable getNext(Enumeration e) - { - return e.hasMoreElements() ? (ASN1Encodable)e.nextElement() : null; - } - - public ASN1Integer getP() - { - return this.p; - } - - public ASN1Integer getG() - { - return this.g; - } - - public ASN1Integer getQ() - { - return this.q; - } - - public ASN1Integer getJ() - { - return this.j; - } - - public DHValidationParms getValidationParms() - { - return this.validationParms; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - v.add(this.p); - v.add(this.g); - v.add(this.q); - - if (this.j != null) - { - v.add(this.j); - } - - if (this.validationParms != null) - { - v.add(this.validationParms); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x9/DHPublicKey.java b/src/org/bouncycastle/asn1/x9/DHPublicKey.java deleted file mode 100644 index 7c6d217..0000000 --- a/src/org/bouncycastle/asn1/x9/DHPublicKey.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1TaggedObject; - -public class DHPublicKey - extends ASN1Object -{ - private ASN1Integer y; - - public static DHPublicKey getInstance(ASN1TaggedObject obj, boolean explicit) - { - return getInstance(ASN1Integer.getInstance(obj, explicit)); - } - - public static DHPublicKey getInstance(Object obj) - { - if (obj == null || obj instanceof DHPublicKey) - { - return (DHPublicKey)obj; - } - - if (obj instanceof ASN1Integer) - { - return new DHPublicKey((ASN1Integer)obj); - } - - throw new IllegalArgumentException("Invalid DHPublicKey: " + obj.getClass().getName()); - } - - public DHPublicKey(ASN1Integer y) - { - if (y == null) - { - throw new IllegalArgumentException("'y' cannot be null"); - } - - this.y = y; - } - - public ASN1Integer getY() - { - return this.y; - } - - public ASN1Primitive toASN1Primitive() - { - return this.y; - } -} diff --git a/src/org/bouncycastle/asn1/x9/DHValidationParms.java b/src/org/bouncycastle/asn1/x9/DHValidationParms.java deleted file mode 100644 index 78b0979..0000000 --- a/src/org/bouncycastle/asn1/x9/DHValidationParms.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; - -public class DHValidationParms extends ASN1Object -{ - private DERBitString seed; - private ASN1Integer pgenCounter; - - public static DHValidationParms getInstance(ASN1TaggedObject obj, boolean explicit) - { - return getInstance(ASN1Sequence.getInstance(obj, explicit)); - } - - public static DHValidationParms getInstance(Object obj) - { - if (obj == null || obj instanceof DHDomainParameters) - { - return (DHValidationParms)obj; - } - - if (obj instanceof ASN1Sequence) - { - return new DHValidationParms((ASN1Sequence)obj); - } - - throw new IllegalArgumentException("Invalid DHValidationParms: " + obj.getClass().getName()); - } - - public DHValidationParms(DERBitString seed, ASN1Integer pgenCounter) - { - if (seed == null) - { - throw new IllegalArgumentException("'seed' cannot be null"); - } - if (pgenCounter == null) - { - throw new IllegalArgumentException("'pgenCounter' cannot be null"); - } - - this.seed = seed; - this.pgenCounter = pgenCounter; - } - - private DHValidationParms(ASN1Sequence seq) - { - if (seq.size() != 2) - { - throw new IllegalArgumentException("Bad sequence size: " + seq.size()); - } - - this.seed = DERBitString.getInstance(seq.getObjectAt(0)); - this.pgenCounter = ASN1Integer.getInstance(seq.getObjectAt(1)); - } - - public DERBitString getSeed() - { - return this.seed; - } - - public ASN1Integer getPgenCounter() - { - return this.pgenCounter; - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - v.add(this.seed); - v.add(this.pgenCounter); - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x9/KeySpecificInfo.java b/src/org/bouncycastle/asn1/x9/KeySpecificInfo.java deleted file mode 100644 index 092716f..0000000 --- a/src/org/bouncycastle/asn1/x9/KeySpecificInfo.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See - * RFC 2631, or X9.42, for further details. - */ -public class KeySpecificInfo - extends ASN1Object -{ - private ASN1ObjectIdentifier algorithm; - private ASN1OctetString counter; - - public KeySpecificInfo( - ASN1ObjectIdentifier algorithm, - ASN1OctetString counter) - { - this.algorithm = algorithm; - this.counter = counter; - } - - public KeySpecificInfo( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - algorithm = (ASN1ObjectIdentifier)e.nextElement(); - counter = (ASN1OctetString)e.nextElement(); - } - - public ASN1ObjectIdentifier getAlgorithm() - { - return algorithm; - } - - public ASN1OctetString getCounter() - { - return counter; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  KeySpecificInfo ::= SEQUENCE {
        -     *      algorithm OBJECT IDENTIFIER,
        -     *      counter OCTET STRING SIZE (4..4)
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(algorithm); - v.add(counter); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x9/OtherInfo.java b/src/org/bouncycastle/asn1/x9/OtherInfo.java deleted file mode 100644 index 0959244..0000000 --- a/src/org/bouncycastle/asn1/x9/OtherInfo.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERTaggedObject; - -/** - * ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See - * RFC 2631, or X9.42, for further details. - */ -public class OtherInfo - extends ASN1Object -{ - private KeySpecificInfo keyInfo; - private ASN1OctetString partyAInfo; - private ASN1OctetString suppPubInfo; - - public OtherInfo( - KeySpecificInfo keyInfo, - ASN1OctetString partyAInfo, - ASN1OctetString suppPubInfo) - { - this.keyInfo = keyInfo; - this.partyAInfo = partyAInfo; - this.suppPubInfo = suppPubInfo; - } - - public OtherInfo( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - keyInfo = new KeySpecificInfo((ASN1Sequence)e.nextElement()); - - while (e.hasMoreElements()) - { - DERTaggedObject o = (DERTaggedObject)e.nextElement(); - - if (o.getTagNo() == 0) - { - partyAInfo = (ASN1OctetString)o.getObject(); - } - else if (o.getTagNo() == 2) - { - suppPubInfo = (ASN1OctetString)o.getObject(); - } - } - } - - public KeySpecificInfo getKeyInfo() - { - return keyInfo; - } - - public ASN1OctetString getPartyAInfo() - { - return partyAInfo; - } - - public ASN1OctetString getSuppPubInfo() - { - return suppPubInfo; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  OtherInfo ::= SEQUENCE {
        -     *      keyInfo KeySpecificInfo,
        -     *      partyAInfo [0] OCTET STRING OPTIONAL,
        -     *      suppPubInfo [2] OCTET STRING
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(keyInfo); - - if (partyAInfo != null) - { - v.add(new DERTaggedObject(0, partyAInfo)); - } - - v.add(new DERTaggedObject(2, suppPubInfo)); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x9/X962NamedCurves.java b/src/org/bouncycastle/asn1/x9/X962NamedCurves.java deleted file mode 100644 index 972c450..0000000 --- a/src/org/bouncycastle/asn1/x9/X962NamedCurves.java +++ /dev/null @@ -1,621 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import javabc.BigInteger; -import java.util.Enumeration; -import java.util.Hashtable; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.math.ec.ECCurve; -import org.bouncycastle.util.Strings; -import org.bouncycastle.util.encoders.Hex; - - -/** - * table of the current named curves defined in X.962 EC-DSA. - */ -public class X962NamedCurves -{ - static X9ECParametersHolder prime192v1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - ECCurve cFp192v1 = new ECCurve.Fp( - new BigInteger("6277101735386680763835789423207666416083908700390324961279"), - new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), - new BigInteger("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16)); - - return new X9ECParameters( - cFp192v1, - cFp192v1.decodePoint( - Hex.decode("03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012")), - new BigInteger("ffffffffffffffffffffffff99def836146bc9b1b4d22831", 16), - BigInteger.valueOf(1), - Hex.decode("3045AE6FC8422f64ED579528D38120EAE12196D5")); - } - }; - - static X9ECParametersHolder prime192v2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - ECCurve cFp192v2 = new ECCurve.Fp( - new BigInteger("6277101735386680763835789423207666416083908700390324961279"), - new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), - new BigInteger("cc22d6dfb95c6b25e49c0d6364a4e5980c393aa21668d953", 16)); - - return new X9ECParameters( - cFp192v2, - cFp192v2.decodePoint( - Hex.decode("03eea2bae7e1497842f2de7769cfe9c989c072ad696f48034a")), - new BigInteger("fffffffffffffffffffffffe5fb1a724dc80418648d8dd31", 16), - BigInteger.valueOf(1), - Hex.decode("31a92ee2029fd10d901b113e990710f0d21ac6b6")); - } - }; - - static X9ECParametersHolder prime192v3 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - ECCurve cFp192v3 = new ECCurve.Fp( - new BigInteger("6277101735386680763835789423207666416083908700390324961279"), - new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), - new BigInteger("22123dc2395a05caa7423daeccc94760a7d462256bd56916", 16)); - - return new X9ECParameters( - cFp192v3, - cFp192v3.decodePoint( - Hex.decode("027d29778100c65a1da1783716588dce2b8b4aee8e228f1896")), - new BigInteger("ffffffffffffffffffffffff7a62d031c83f4294f640ec13", 16), - BigInteger.valueOf(1), - Hex.decode("c469684435deb378c4b65ca9591e2a5763059a2e")); - } - }; - - static X9ECParametersHolder prime239v1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - ECCurve cFp239v1 = new ECCurve.Fp( - new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), - new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), - new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16)); - - return new X9ECParameters( - cFp239v1, - cFp239v1.decodePoint( - Hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), - new BigInteger("7fffffffffffffffffffffff7fffff9e5e9a9f5d9071fbd1522688909d0b", 16), - BigInteger.valueOf(1), - Hex.decode("e43bb460f0b80cc0c0b075798e948060f8321b7d")); - } - }; - - static X9ECParametersHolder prime239v2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - ECCurve cFp239v2 = new ECCurve.Fp( - new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), - new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), - new BigInteger("617fab6832576cbbfed50d99f0249c3fee58b94ba0038c7ae84c8c832f2c", 16)); - - return new X9ECParameters( - cFp239v2, - cFp239v2.decodePoint( - Hex.decode("0238af09d98727705120c921bb5e9e26296a3cdcf2f35757a0eafd87b830e7")), - new BigInteger("7fffffffffffffffffffffff800000cfa7e8594377d414c03821bc582063", 16), - BigInteger.valueOf(1), - Hex.decode("e8b4011604095303ca3b8099982be09fcb9ae616")); - } - }; - - static X9ECParametersHolder prime239v3 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - ECCurve cFp239v3 = new ECCurve.Fp( - new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), - new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), - new BigInteger("255705fa2a306654b1f4cb03d6a750a30c250102d4988717d9ba15ab6d3e", 16)); - - return new X9ECParameters( - cFp239v3, - cFp239v3.decodePoint( - Hex.decode("036768ae8e18bb92cfcf005c949aa2c6d94853d0e660bbf854b1c9505fe95a")), - new BigInteger("7fffffffffffffffffffffff7fffff975deb41b3a6057c3c432146526551", 16), - BigInteger.valueOf(1), - Hex.decode("7d7374168ffe3471b60a857686a19475d3bfa2ff")); - } - }; - - static X9ECParametersHolder prime256v1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - ECCurve cFp256v1 = new ECCurve.Fp( - new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853951"), - new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16), - new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16)); - - return new X9ECParameters( - cFp256v1, - cFp256v1.decodePoint( - Hex.decode("036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296")), - new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16), - BigInteger.valueOf(1), - Hex.decode("c49d360886e704936a6678e1139d26b7819f7e90")); - } - }; - - /* - * F2m Curves - */ - static X9ECParametersHolder c2pnb163v1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m163v1n = new BigInteger("0400000000000000000001E60FC8821CC74DAEAFC1", 16); - BigInteger c2m163v1h = BigInteger.valueOf(2); - - ECCurve c2m163v1 = new ECCurve.F2m( - 163, - 1, 2, 8, - new BigInteger("072546B5435234A422E0789675F432C89435DE5242", 16), - new BigInteger("00C9517D06D5240D3CFF38C74B20B6CD4D6F9DD4D9", 16), - c2m163v1n, c2m163v1h); - - return new X9ECParameters( - c2m163v1, - c2m163v1.decodePoint( - Hex.decode("0307AF69989546103D79329FCC3D74880F33BBE803CB")), - c2m163v1n, c2m163v1h, - Hex.decode("D2COFB15760860DEF1EEF4D696E6768756151754")); - } - }; - - static X9ECParametersHolder c2pnb163v2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m163v2n = new BigInteger("03FFFFFFFFFFFFFFFFFFFDF64DE1151ADBB78F10A7", 16); - BigInteger c2m163v2h = BigInteger.valueOf(2); - - ECCurve c2m163v2 = new ECCurve.F2m( - 163, - 1, 2, 8, - new BigInteger("0108B39E77C4B108BED981ED0E890E117C511CF072", 16), - new BigInteger("0667ACEB38AF4E488C407433FFAE4F1C811638DF20", 16), - c2m163v2n, c2m163v2h); - - return new X9ECParameters( - c2m163v2, - c2m163v2.decodePoint( - Hex.decode("030024266E4EB5106D0A964D92C4860E2671DB9B6CC5")), - c2m163v2n, c2m163v2h, - null); - } - }; - - static X9ECParametersHolder c2pnb163v3 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m163v3n = new BigInteger("03FFFFFFFFFFFFFFFFFFFE1AEE140F110AFF961309", 16); - BigInteger c2m163v3h = BigInteger.valueOf(2); - - ECCurve c2m163v3 = new ECCurve.F2m( - 163, - 1, 2, 8, - new BigInteger("07A526C63D3E25A256A007699F5447E32AE456B50E", 16), - new BigInteger("03F7061798EB99E238FD6F1BF95B48FEEB4854252B", 16), - c2m163v3n, c2m163v3h); - - return new X9ECParameters( - c2m163v3, - c2m163v3.decodePoint( - Hex.decode("0202F9F87B7C574D0BDECF8A22E6524775F98CDEBDCB")), - c2m163v3n, c2m163v3h, - null); - } - }; - - static X9ECParametersHolder c2pnb176w1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m176w1n = new BigInteger("010092537397ECA4F6145799D62B0A19CE06FE26AD", 16); - BigInteger c2m176w1h = BigInteger.valueOf(0xFF6E); - - ECCurve c2m176w1 = new ECCurve.F2m( - 176, - 1, 2, 43, - new BigInteger("00E4E6DB2995065C407D9D39B8D0967B96704BA8E9C90B", 16), - new BigInteger("005DDA470ABE6414DE8EC133AE28E9BBD7FCEC0AE0FFF2", 16), - c2m176w1n, c2m176w1h); - - return new X9ECParameters( - c2m176w1, - c2m176w1.decodePoint( - Hex.decode("038D16C2866798B600F9F08BB4A8E860F3298CE04A5798")), - c2m176w1n, c2m176w1h, - null); - } - }; - - static X9ECParametersHolder c2tnb191v1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m191v1n = new BigInteger("40000000000000000000000004A20E90C39067C893BBB9A5", 16); - BigInteger c2m191v1h = BigInteger.valueOf(2); - - ECCurve c2m191v1 = new ECCurve.F2m( - 191, - 9, - new BigInteger("2866537B676752636A68F56554E12640276B649EF7526267", 16), - new BigInteger("2E45EF571F00786F67B0081B9495A3D95462F5DE0AA185EC", 16), - c2m191v1n, c2m191v1h); - - return new X9ECParameters( - c2m191v1, - c2m191v1.decodePoint( - Hex.decode("0236B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D")), - c2m191v1n, c2m191v1h, - Hex.decode("4E13CA542744D696E67687561517552F279A8C84")); - } - }; - - static X9ECParametersHolder c2tnb191v2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m191v2n = new BigInteger("20000000000000000000000050508CB89F652824E06B8173", 16); - BigInteger c2m191v2h = BigInteger.valueOf(4); - - ECCurve c2m191v2 = new ECCurve.F2m( - 191, - 9, - new BigInteger("401028774D7777C7B7666D1366EA432071274F89FF01E718", 16), - new BigInteger("0620048D28BCBD03B6249C99182B7C8CD19700C362C46A01", 16), - c2m191v2n, c2m191v2h); - - return new X9ECParameters( - c2m191v2, - c2m191v2.decodePoint( - Hex.decode("023809B2B7CC1B28CC5A87926AAD83FD28789E81E2C9E3BF10")), - c2m191v2n, c2m191v2h, - null); - } - }; - - static X9ECParametersHolder c2tnb191v3 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m191v3n = new BigInteger("155555555555555555555555610C0B196812BFB6288A3EA3", 16); - BigInteger c2m191v3h = BigInteger.valueOf(6); - - ECCurve c2m191v3 = new ECCurve.F2m( - 191, - 9, - new BigInteger("6C01074756099122221056911C77D77E77A777E7E7E77FCB", 16), - new BigInteger("71FE1AF926CF847989EFEF8DB459F66394D90F32AD3F15E8", 16), - c2m191v3n, c2m191v3h); - - return new X9ECParameters( - c2m191v3, - c2m191v3.decodePoint( - Hex.decode("03375D4CE24FDE434489DE8746E71786015009E66E38A926DD")), - c2m191v3n, c2m191v3h, - null); - } - }; - - static X9ECParametersHolder c2pnb208w1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m208w1n = new BigInteger("0101BAF95C9723C57B6C21DA2EFF2D5ED588BDD5717E212F9D", 16); - BigInteger c2m208w1h = BigInteger.valueOf(0xFE48); - - ECCurve c2m208w1 = new ECCurve.F2m( - 208, - 1, 2, 83, - new BigInteger("0", 16), - new BigInteger("00C8619ED45A62E6212E1160349E2BFA844439FAFC2A3FD1638F9E", 16), - c2m208w1n, c2m208w1h); - - return new X9ECParameters( - c2m208w1, - c2m208w1.decodePoint( - Hex.decode("0289FDFBE4ABE193DF9559ECF07AC0CE78554E2784EB8C1ED1A57A")), - c2m208w1n, c2m208w1h, - null); - } - }; - - static X9ECParametersHolder c2tnb239v1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m239v1n = new BigInteger("2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447", 16); - BigInteger c2m239v1h = BigInteger.valueOf(4); - - ECCurve c2m239v1 = new ECCurve.F2m( - 239, - 36, - new BigInteger("32010857077C5431123A46B808906756F543423E8D27877578125778AC76", 16), - new BigInteger("790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16", 16), - c2m239v1n, c2m239v1h); - - return new X9ECParameters( - c2m239v1, - c2m239v1.decodePoint( - Hex.decode("0257927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D")), - c2m239v1n, c2m239v1h, - null); - } - }; - - static X9ECParametersHolder c2tnb239v2 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m239v2n = new BigInteger("1555555555555555555555555555553C6F2885259C31E3FCDF154624522D", 16); - BigInteger c2m239v2h = BigInteger.valueOf(6); - - ECCurve c2m239v2 = new ECCurve.F2m( - 239, - 36, - new BigInteger("4230017757A767FAE42398569B746325D45313AF0766266479B75654E65F", 16), - new BigInteger("5037EA654196CFF0CD82B2C14A2FCF2E3FF8775285B545722F03EACDB74B", 16), - c2m239v2n, c2m239v2h); - - return new X9ECParameters( - c2m239v2, - c2m239v2.decodePoint( - Hex.decode("0228F9D04E900069C8DC47A08534FE76D2B900B7D7EF31F5709F200C4CA205")), - c2m239v2n, c2m239v2h, - null); - } - }; - - static X9ECParametersHolder c2tnb239v3 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m239v3n = new BigInteger("0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC4912D2D9DF903EF9888B8A0E4CFF", 16); - BigInteger c2m239v3h = BigInteger.valueOf(10); - - ECCurve c2m239v3 = new ECCurve.F2m( - 239, - 36, - new BigInteger("01238774666A67766D6676F778E676B66999176666E687666D8766C66A9F", 16), - new BigInteger("6A941977BA9F6A435199ACFC51067ED587F519C5ECB541B8E44111DE1D40", 16), - c2m239v3n, c2m239v3h); - - return new X9ECParameters( - c2m239v3, - c2m239v3.decodePoint( - Hex.decode("0370F6E9D04D289C4E89913CE3530BFDE903977D42B146D539BF1BDE4E9C92")), - c2m239v3n, c2m239v3h, - null); - } - }; - - static X9ECParametersHolder c2pnb272w1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m272w1n = new BigInteger("0100FAF51354E0E39E4892DF6E319C72C8161603FA45AA7B998A167B8F1E629521", 16); - BigInteger c2m272w1h = BigInteger.valueOf(0xFF06); - - ECCurve c2m272w1 = new ECCurve.F2m( - 272, - 1, 3, 56, - new BigInteger("0091A091F03B5FBA4AB2CCF49C4EDD220FB028712D42BE752B2C40094DBACDB586FB20", 16), - new BigInteger("7167EFC92BB2E3CE7C8AAAFF34E12A9C557003D7C73A6FAF003F99F6CC8482E540F7", 16), - c2m272w1n, c2m272w1h); - - return new X9ECParameters( - c2m272w1, - c2m272w1.decodePoint( - Hex.decode("026108BABB2CEEBCF787058A056CBE0CFE622D7723A289E08A07AE13EF0D10D171DD8D")), - c2m272w1n, c2m272w1h, - null); - } - }; - - static X9ECParametersHolder c2pnb304w1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m304w1n = new BigInteger("0101D556572AABAC800101D556572AABAC8001022D5C91DD173F8FB561DA6899164443051D", 16); - BigInteger c2m304w1h = BigInteger.valueOf(0xFE2E); - - ECCurve c2m304w1 = new ECCurve.F2m( - 304, - 1, 2, 11, - new BigInteger("00FD0D693149A118F651E6DCE6802085377E5F882D1B510B44160074C1288078365A0396C8E681", 16), - new BigInteger("00BDDB97E555A50A908E43B01C798EA5DAA6788F1EA2794EFCF57166B8C14039601E55827340BE", 16), - c2m304w1n, c2m304w1h); - - return new X9ECParameters( - c2m304w1, - c2m304w1.decodePoint( - Hex.decode("02197B07845E9BE2D96ADB0F5F3C7F2CFFBD7A3EB8B6FEC35C7FD67F26DDF6285A644F740A2614")), - c2m304w1n, c2m304w1h, - null); - } - }; - - static X9ECParametersHolder c2tnb359v1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m359v1n = new BigInteger("01AF286BCA1AF286BCA1AF286BCA1AF286BCA1AF286BC9FB8F6B85C556892C20A7EB964FE7719E74F490758D3B", 16); - BigInteger c2m359v1h = BigInteger.valueOf(0x4C); - - ECCurve c2m359v1 = new ECCurve.F2m( - 359, - 68, - new BigInteger("5667676A654B20754F356EA92017D946567C46675556F19556A04616B567D223A5E05656FB549016A96656A557", 16), - new BigInteger("2472E2D0197C49363F1FE7F5B6DB075D52B6947D135D8CA445805D39BC345626089687742B6329E70680231988", 16), - c2m359v1n, c2m359v1h); - - return new X9ECParameters( - c2m359v1, - c2m359v1.decodePoint( - Hex.decode("033C258EF3047767E7EDE0F1FDAA79DAEE3841366A132E163ACED4ED2401DF9C6BDCDE98E8E707C07A2239B1B097")), - c2m359v1n, c2m359v1h, - null); - } - }; - - static X9ECParametersHolder c2pnb368w1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m368w1n = new BigInteger("010090512DA9AF72B08349D98A5DD4C7B0532ECA51CE03E2D10F3B7AC579BD87E909AE40A6F131E9CFCE5BD967", 16); - BigInteger c2m368w1h = BigInteger.valueOf(0xFF70); - - ECCurve c2m368w1 = new ECCurve.F2m( - 368, - 1, 2, 85, - new BigInteger("00E0D2EE25095206F5E2A4F9ED229F1F256E79A0E2B455970D8D0D865BD94778C576D62F0AB7519CCD2A1A906AE30D", 16), - new BigInteger("00FC1217D4320A90452C760A58EDCD30C8DD069B3C34453837A34ED50CB54917E1C2112D84D164F444F8F74786046A", 16), - c2m368w1n, c2m368w1h); - - return new X9ECParameters( - c2m368w1, - c2m368w1.decodePoint( - Hex.decode("021085E2755381DCCCE3C1557AFA10C2F0C0C2825646C5B34A394CBCFA8BC16B22E7E789E927BE216F02E1FB136A5F")), - c2m368w1n, c2m368w1h, - null); - } - }; - - static X9ECParametersHolder c2tnb431r1 = new X9ECParametersHolder() - { - protected X9ECParameters createParameters() - { - BigInteger c2m431r1n = new BigInteger("0340340340340340340340340340340340340340340340340340340323C313FAB50589703B5EC68D3587FEC60D161CC149C1AD4A91", 16); - BigInteger c2m431r1h = BigInteger.valueOf(0x2760); - - ECCurve c2m431r1 = new ECCurve.F2m( - 431, - 120, - new BigInteger("1A827EF00DD6FC0E234CAF046C6A5D8A85395B236CC4AD2CF32A0CADBDC9DDF620B0EB9906D0957F6C6FEACD615468DF104DE296CD8F", 16), - new BigInteger("10D9B4A3D9047D8B154359ABFB1B7F5485B04CEB868237DDC9DEDA982A679A5A919B626D4E50A8DD731B107A9962381FB5D807BF2618", 16), - c2m431r1n, c2m431r1h); - - return new X9ECParameters( - c2m431r1, - c2m431r1.decodePoint( - Hex.decode("02120FC05D3C67A99DE161D2F4092622FECA701BE4F50F4758714E8A87BBF2A658EF8C21E7C5EFE965361F6C2999C0C247B0DBD70CE6B7")), - c2m431r1n, c2m431r1h, - null); - } - }; - - static final Hashtable objIds = new Hashtable(); - static final Hashtable curves = new Hashtable(); - static final Hashtable names = new Hashtable(); - - static void defineCurve(String name, ASN1ObjectIdentifier oid, X9ECParametersHolder holder) - { - objIds.put(name, oid); - names.put(oid, name); - curves.put(oid, holder); - } - - static - { - defineCurve("prime192v1", X9ObjectIdentifiers.prime192v1, prime192v1); - defineCurve("prime192v2", X9ObjectIdentifiers.prime192v2, prime192v2); - defineCurve("prime192v3", X9ObjectIdentifiers.prime192v3, prime192v3); - defineCurve("prime239v1", X9ObjectIdentifiers.prime239v1, prime239v1); - defineCurve("prime239v2", X9ObjectIdentifiers.prime239v2, prime239v2); - defineCurve("prime239v3", X9ObjectIdentifiers.prime239v3, prime239v3); - defineCurve("prime256v1", X9ObjectIdentifiers.prime256v1, prime256v1); - defineCurve("c2pnb163v1", X9ObjectIdentifiers.c2pnb163v1, c2pnb163v1); - defineCurve("c2pnb163v2", X9ObjectIdentifiers.c2pnb163v2, c2pnb163v2); - defineCurve("c2pnb163v3", X9ObjectIdentifiers.c2pnb163v3, c2pnb163v3); - defineCurve("c2pnb176w1", X9ObjectIdentifiers.c2pnb176w1, c2pnb176w1); - defineCurve("c2tnb191v1", X9ObjectIdentifiers.c2tnb191v1, c2tnb191v1); - defineCurve("c2tnb191v2", X9ObjectIdentifiers.c2tnb191v2, c2tnb191v2); - defineCurve("c2tnb191v3", X9ObjectIdentifiers.c2tnb191v3, c2tnb191v3); - defineCurve("c2pnb208w1", X9ObjectIdentifiers.c2pnb208w1, c2pnb208w1); - defineCurve("c2tnb239v1", X9ObjectIdentifiers.c2tnb239v1, c2tnb239v1); - defineCurve("c2tnb239v2", X9ObjectIdentifiers.c2tnb239v2, c2tnb239v2); - defineCurve("c2tnb239v3", X9ObjectIdentifiers.c2tnb239v3, c2tnb239v3); - defineCurve("c2pnb272w1", X9ObjectIdentifiers.c2pnb272w1, c2pnb272w1); - defineCurve("c2pnb304w1", X9ObjectIdentifiers.c2pnb304w1, c2pnb304w1); - defineCurve("c2tnb359v1", X9ObjectIdentifiers.c2tnb359v1, c2tnb359v1); - defineCurve("c2pnb368w1", X9ObjectIdentifiers.c2pnb368w1, c2pnb368w1); - defineCurve("c2tnb431r1", X9ObjectIdentifiers.c2tnb431r1, c2tnb431r1); - } - - public static X9ECParameters getByName( - String name) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); - - if (oid != null) - { - return getByOID(oid); - } - - return null; - } - - /** - * return the X9ECParameters object for the named curve represented by - * the passed in object identifier. Null if the curve isn't present. - * - * @param oid an object identifier representing a named curve, if present. - */ - public static X9ECParameters getByOID( - ASN1ObjectIdentifier oid) - { - X9ECParametersHolder holder = (X9ECParametersHolder)curves.get(oid); - - if (holder != null) - { - return holder.getParameters(); - } - - return null; - } - - /** - * return the object identifier signified by the passed in name. Null - * if there is no object identifier associated with name. - * - * @return the object identifier associated with name, if present. - */ - public static ASN1ObjectIdentifier getOID( - String name) - { - return (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); - } - - /** - * return the named curve name represented by the given object identifier. - */ - public static String getName( - ASN1ObjectIdentifier oid) - { - return (String)names.get(oid); - } - - /** - * returns an enumeration containing the name strings for curves - * contained in this structure. - */ - public static Enumeration getNames() - { - return objIds.keys(); - } -} diff --git a/src/org/bouncycastle/asn1/x9/X962Parameters.java b/src/org/bouncycastle/asn1/x9/X962Parameters.java deleted file mode 100644 index 1c395d2..0000000 --- a/src/org/bouncycastle/asn1/x9/X962Parameters.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import org.bouncycastle.asn1.ASN1Choice; -import org.bouncycastle.asn1.ASN1Null; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1TaggedObject; - -public class X962Parameters - extends ASN1Object - implements ASN1Choice -{ - private ASN1Primitive params = null; - - public static X962Parameters getInstance( - Object obj) - { - if (obj == null || obj instanceof X962Parameters) - { - return (X962Parameters)obj; - } - - if (obj instanceof ASN1Primitive) - { - return new X962Parameters((ASN1Primitive)obj); - } - - throw new IllegalArgumentException("unknown object in getInstance()"); - } - - public static X962Parameters getInstance( - ASN1TaggedObject obj, - boolean explicit) - { - return getInstance(obj.getObject()); // must be explicitly tagged - } - - public X962Parameters( - X9ECParameters ecParameters) - { - this.params = ecParameters.toASN1Primitive(); - } - - public X962Parameters( - ASN1ObjectIdentifier namedCurve) - { - this.params = namedCurve; - } - - public X962Parameters( - ASN1Primitive obj) - { - this.params = obj; - } - - public boolean isNamedCurve() - { - return (params instanceof ASN1ObjectIdentifier); - } - - public boolean isImplicitlyCA() - { - return (params instanceof ASN1Null); - } - - public ASN1Primitive getParameters() - { - return params; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     * Parameters ::= CHOICE {
        -     *    ecParameters ECParameters,
        -     *    namedCurve   CURVES.&id({CurveNames}),
        -     *    implicitlyCA NULL
        -     * }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - return (ASN1Primitive)params; - } -} diff --git a/src/org/bouncycastle/asn1/x9/X9Curve.java b/src/org/bouncycastle/asn1/x9/X9Curve.java deleted file mode 100644 index a1d0194..0000000 --- a/src/org/bouncycastle/asn1/x9/X9Curve.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.math.ec.ECCurve; - -/** - * ASN.1 def for Elliptic-Curve Curve structure. See - * X9.62, for further details. - */ -public class X9Curve - extends ASN1Object - implements X9ObjectIdentifiers -{ - private ECCurve curve; - private byte[] seed; - private ASN1ObjectIdentifier fieldIdentifier = null; - - public X9Curve( - ECCurve curve) - { - this.curve = curve; - this.seed = null; - setFieldIdentifier(); - } - - public X9Curve( - ECCurve curve, - byte[] seed) - { - this.curve = curve; - this.seed = seed; - setFieldIdentifier(); - } - - public X9Curve( - X9FieldID fieldID, - ASN1Sequence seq) - { - fieldIdentifier = fieldID.getIdentifier(); - if (fieldIdentifier.equals(prime_field)) - { - BigInteger p = ((ASN1Integer)fieldID.getParameters()).getValue(); - X9FieldElement x9A = new X9FieldElement(p, (ASN1OctetString)seq.getObjectAt(0)); - X9FieldElement x9B = new X9FieldElement(p, (ASN1OctetString)seq.getObjectAt(1)); - curve = new ECCurve.Fp(p, x9A.getValue().toBigInteger(), x9B.getValue().toBigInteger()); - } - else - { - if (fieldIdentifier.equals(characteristic_two_field)) - { - // Characteristic two field - ASN1Sequence parameters = ASN1Sequence.getInstance(fieldID.getParameters()); - int m = ((ASN1Integer)parameters.getObjectAt(0)).getValue(). - intValue(); - ASN1ObjectIdentifier representation - = (ASN1ObjectIdentifier)parameters.getObjectAt(1); - - int k1 = 0; - int k2 = 0; - int k3 = 0; - if (representation.equals(tpBasis)) - { - // Trinomial basis representation - k1 = ((ASN1Integer)parameters.getObjectAt(2)).getValue(). - intValue(); - } - else - { - // Pentanomial basis representation - DERSequence pentanomial - = (DERSequence)parameters.getObjectAt(2); - k1 = ((ASN1Integer)pentanomial.getObjectAt(0)).getValue(). - intValue(); - k2 = ((ASN1Integer)pentanomial.getObjectAt(1)).getValue(). - intValue(); - k3 = ((ASN1Integer)pentanomial.getObjectAt(2)).getValue(). - intValue(); - } - X9FieldElement x9A = new X9FieldElement(m, k1, k2, k3, (ASN1OctetString)seq.getObjectAt(0)); - X9FieldElement x9B = new X9FieldElement(m, k1, k2, k3, (ASN1OctetString)seq.getObjectAt(1)); - // TODO Is it possible to get the order (n) and cofactor(h) too? - curve = new ECCurve.F2m(m, k1, k2, k3, x9A.getValue().toBigInteger(), x9B.getValue().toBigInteger()); - } - } - - if (seq.size() == 3) - { - seed = ((DERBitString)seq.getObjectAt(2)).getBytes(); - } - } - - private void setFieldIdentifier() - { - if (curve instanceof ECCurve.Fp) - { - fieldIdentifier = prime_field; - } - else if (curve instanceof ECCurve.F2m) - { - fieldIdentifier = characteristic_two_field; - } - else - { - throw new IllegalArgumentException("This type of ECCurve is not " - + "implemented"); - } - } - - public ECCurve getCurve() - { - return curve; - } - - public byte[] getSeed() - { - return seed; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  Curve ::= SEQUENCE {
        -     *      a               FieldElement,
        -     *      b               FieldElement,
        -     *      seed            BIT STRING      OPTIONAL
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - if (fieldIdentifier.equals(prime_field)) - { - v.add(new X9FieldElement(curve.getA()).toASN1Primitive()); - v.add(new X9FieldElement(curve.getB()).toASN1Primitive()); - } - else if (fieldIdentifier.equals(characteristic_two_field)) - { - v.add(new X9FieldElement(curve.getA()).toASN1Primitive()); - v.add(new X9FieldElement(curve.getB()).toASN1Primitive()); - } - - if (seed != null) - { - v.add(new DERBitString(seed)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x9/X9ECParameters.java b/src/org/bouncycastle/asn1/x9/X9ECParameters.java deleted file mode 100644 index 69b1171..0000000 --- a/src/org/bouncycastle/asn1/x9/X9ECParameters.java +++ /dev/null @@ -1,176 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.math.ec.ECCurve; -import org.bouncycastle.math.ec.ECPoint; - -/** - * ASN.1 def for Elliptic-Curve ECParameters structure. See - * X9.62, for further details. - */ -public class X9ECParameters - extends ASN1Object - implements X9ObjectIdentifiers -{ - private static final BigInteger ONE = BigInteger.valueOf(1); - - private X9FieldID fieldID; - private ECCurve curve; - private ECPoint g; - private BigInteger n; - private BigInteger h; - private byte[] seed; - - private X9ECParameters( - ASN1Sequence seq) - { - if (!(seq.getObjectAt(0) instanceof ASN1Integer) - || !((ASN1Integer)seq.getObjectAt(0)).getValue().equals(ONE)) - { - throw new IllegalArgumentException("bad version in X9ECParameters"); - } - - X9Curve x9c = new X9Curve( - new X9FieldID((ASN1Sequence)seq.getObjectAt(1)), - (ASN1Sequence)seq.getObjectAt(2)); - - this.curve = x9c.getCurve(); - this.g = new X9ECPoint(curve, (ASN1OctetString)seq.getObjectAt(3)).getPoint(); - this.n = ((ASN1Integer)seq.getObjectAt(4)).getValue(); - this.seed = x9c.getSeed(); - - if (seq.size() == 6) - { - this.h = ((ASN1Integer)seq.getObjectAt(5)).getValue(); - } - } - - public static X9ECParameters getInstance(Object obj) - { - if (obj instanceof X9ECParameters) - { - return (X9ECParameters)obj; - } - - if (obj != null) - { - return new X9ECParameters(ASN1Sequence.getInstance(obj)); - } - - return null; - } - - public X9ECParameters( - ECCurve curve, - ECPoint g, - BigInteger n) - { - this(curve, g, n, ONE, null); - } - - public X9ECParameters( - ECCurve curve, - ECPoint g, - BigInteger n, - BigInteger h) - { - this(curve, g, n, h, null); - } - - public X9ECParameters( - ECCurve curve, - ECPoint g, - BigInteger n, - BigInteger h, - byte[] seed) - { - this.curve = curve; - this.g = g; - this.n = n; - this.h = h; - this.seed = seed; - - if (curve instanceof ECCurve.Fp) - { - this.fieldID = new X9FieldID(((ECCurve.Fp)curve).getQ()); - } - else - { - if (curve instanceof ECCurve.F2m) - { - ECCurve.F2m curveF2m = (ECCurve.F2m)curve; - this.fieldID = new X9FieldID(curveF2m.getM(), curveF2m.getK1(), - curveF2m.getK2(), curveF2m.getK3()); - } - } - } - - public ECCurve getCurve() - { - return curve; - } - - public ECPoint getG() - { - return g; - } - - public BigInteger getN() - { - return n; - } - - public BigInteger getH() - { - if (h == null) - { - return ONE; // TODO - this should be calculated, it will cause issues with custom curves. - } - - return h; - } - - public byte[] getSeed() - { - return seed; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  ECParameters ::= SEQUENCE {
        -     *      version         INTEGER { ecpVer1(1) } (ecpVer1),
        -     *      fieldID         FieldID {{FieldTypes}},
        -     *      curve           X9Curve,
        -     *      base            X9ECPoint,
        -     *      order           INTEGER,
        -     *      cofactor        INTEGER OPTIONAL
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(new ASN1Integer(1)); - v.add(fieldID); - v.add(new X9Curve(curve, seed)); - v.add(new X9ECPoint(g)); - v.add(new ASN1Integer(n)); - - if (h != null) - { - v.add(new ASN1Integer(h)); - } - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x9/X9ECParametersHolder.java b/src/org/bouncycastle/asn1/x9/X9ECParametersHolder.java deleted file mode 100644 index 47361f8..0000000 --- a/src/org/bouncycastle/asn1/x9/X9ECParametersHolder.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.asn1.x9; - -public abstract class X9ECParametersHolder -{ - private X9ECParameters params; - - public X9ECParameters getParameters() - { - if (params == null) - { - params = createParameters(); - } - - return params; - } - - protected abstract X9ECParameters createParameters(); -} diff --git a/src/org/bouncycastle/asn1/x9/X9ECPoint.java b/src/org/bouncycastle/asn1/x9/X9ECPoint.java deleted file mode 100644 index a4acb6e..0000000 --- a/src/org/bouncycastle/asn1/x9/X9ECPoint.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.math.ec.ECCurve; -import org.bouncycastle.math.ec.ECPoint; - -/** - * class for describing an ECPoint as a DER object. - */ -public class X9ECPoint - extends ASN1Object -{ - ECPoint p; - - public X9ECPoint( - ECPoint p) - { - this.p = p; - } - - public X9ECPoint( - ECCurve c, - ASN1OctetString s) - { - this.p = c.decodePoint(s.getOctets()); - } - - public ECPoint getPoint() - { - return p; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *
        -     *  ECPoint ::= OCTET STRING
        -     * 
        - *

        - * Octet string produced using ECPoint.getEncoded(). - */ - public ASN1Primitive toASN1Primitive() - { - return new DEROctetString(p.getEncoded()); - } -} diff --git a/src/org/bouncycastle/asn1/x9/X9FieldElement.java b/src/org/bouncycastle/asn1/x9/X9FieldElement.java deleted file mode 100644 index 8864fd4..0000000 --- a/src/org/bouncycastle/asn1/x9/X9FieldElement.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.math.ec.ECFieldElement; - -/** - * class for processing an FieldElement as a DER object. - */ -public class X9FieldElement - extends ASN1Object -{ - protected ECFieldElement f; - - private static X9IntegerConverter converter = new X9IntegerConverter(); - - public X9FieldElement(ECFieldElement f) - { - this.f = f; - } - - public X9FieldElement(BigInteger p, ASN1OctetString s) - { - this(new ECFieldElement.Fp(p, new BigInteger(1, s.getOctets()))); - } - - public X9FieldElement(int m, int k1, int k2, int k3, ASN1OctetString s) - { - this(new ECFieldElement.F2m(m, k1, k2, k3, new BigInteger(1, s.getOctets()))); - } - - public ECFieldElement getValue() - { - return f; - } - - /** - * Produce an object suitable for an ASN1OutputStream. - *

        -     *  FieldElement ::= OCTET STRING
        -     * 
        - *

        - *

          - *
        1. if q is an odd prime then the field element is - * processed as an Integer and converted to an octet string - * according to x 9.62 4.3.1.
        2. - *
        3. if q is 2m then the bit string - * contained in the field element is converted into an octet - * string with the same ordering padded at the front if necessary. - *
        4. - *
        - */ - public ASN1Primitive toASN1Primitive() - { - int byteCount = converter.getByteLength(f); - byte[] paddedBigInteger = converter.integerToBytes(f.toBigInteger(), byteCount); - - return new DEROctetString(paddedBigInteger); - } -} diff --git a/src/org/bouncycastle/asn1/x9/X9FieldID.java b/src/org/bouncycastle/asn1/x9/X9FieldID.java deleted file mode 100644 index 0a9e06a..0000000 --- a/src/org/bouncycastle/asn1/x9/X9FieldID.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -/** - * ASN.1 def for Elliptic-Curve Field ID structure. See - * X9.62, for further details. - */ -public class X9FieldID - extends ASN1Object - implements X9ObjectIdentifiers -{ - private ASN1ObjectIdentifier id; - private ASN1Primitive parameters; - - /** - * Constructor for elliptic curves over prime fields - * F2. - * @param primeP The prime p defining the prime field. - */ - public X9FieldID(BigInteger primeP) - { - this.id = prime_field; - this.parameters = new ASN1Integer(primeP); - } - - /** - * Constructor for elliptic curves over binary fields - * F2m. - * @param m The exponent m of - * F2m. - * @param k1 The integer k1 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k2 The integer k2 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k3 The integer k3 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).. - */ - public X9FieldID(int m, int k1, int k2, int k3) - { - this.id = characteristic_two_field; - ASN1EncodableVector fieldIdParams = new ASN1EncodableVector(); - fieldIdParams.add(new ASN1Integer(m)); - - if (k2 == 0) - { - fieldIdParams.add(tpBasis); - fieldIdParams.add(new ASN1Integer(k1)); - } - else - { - fieldIdParams.add(ppBasis); - ASN1EncodableVector pentanomialParams = new ASN1EncodableVector(); - pentanomialParams.add(new ASN1Integer(k1)); - pentanomialParams.add(new ASN1Integer(k2)); - pentanomialParams.add(new ASN1Integer(k3)); - fieldIdParams.add(new DERSequence(pentanomialParams)); - } - - this.parameters = new DERSequence(fieldIdParams); - } - - public X9FieldID( - ASN1Sequence seq) - { - this.id = (ASN1ObjectIdentifier)seq.getObjectAt(0); - this.parameters = (ASN1Primitive)seq.getObjectAt(1); - } - - public ASN1ObjectIdentifier getIdentifier() - { - return id; - } - - public ASN1Primitive getParameters() - { - return parameters; - } - - /** - * Produce a DER encoding of the following structure. - *
        -     *  FieldID ::= SEQUENCE {
        -     *      fieldType       FIELD-ID.&id({IOSet}),
        -     *      parameters      FIELD-ID.&Type({IOSet}{@fieldType})
        -     *  }
        -     * 
        - */ - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(this.id); - v.add(this.parameters); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/asn1/x9/X9IntegerConverter.java b/src/org/bouncycastle/asn1/x9/X9IntegerConverter.java deleted file mode 100644 index ff7f977..0000000 --- a/src/org/bouncycastle/asn1/x9/X9IntegerConverter.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import javabc.BigInteger; - -import org.bouncycastle.math.ec.ECCurve; -import org.bouncycastle.math.ec.ECFieldElement; - -public class X9IntegerConverter -{ - public int getByteLength( - ECCurve c) - { - return (c.getFieldSize() + 7) / 8; - } - - public int getByteLength( - ECFieldElement fe) - { - return (fe.getFieldSize() + 7) / 8; - } - - public byte[] integerToBytes( - BigInteger s, - int qLength) - { - byte[] bytes = s.toByteArray(); - - if (qLength < bytes.length) - { - byte[] tmp = new byte[qLength]; - - System.arraycopy(bytes, bytes.length - tmp.length, tmp, 0, tmp.length); - - return tmp; - } - else if (qLength > bytes.length) - { - byte[] tmp = new byte[qLength]; - - System.arraycopy(bytes, 0, tmp, tmp.length - bytes.length, bytes.length); - - return tmp; - } - - return bytes; - } -} diff --git a/src/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java b/src/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java deleted file mode 100644 index 6c1fcd7..0000000 --- a/src/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.bouncycastle.asn1.x9; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -public interface X9ObjectIdentifiers -{ - // - // X9.62 - // - // ansi-X9-62 OBJECT IDENTIFIER ::= { iso(1) member-body(2) - // us(840) ansi-x962(10045) } - // - static final ASN1ObjectIdentifier ansi_X9_62 = new ASN1ObjectIdentifier("1.2.840.10045"); - static final ASN1ObjectIdentifier id_fieldType = ansi_X9_62.branch("1"); - - static final ASN1ObjectIdentifier prime_field = id_fieldType.branch("1"); - - static final ASN1ObjectIdentifier characteristic_two_field = id_fieldType.branch("2"); - - static final ASN1ObjectIdentifier gnBasis = id_fieldType.branch("2.3.1"); - - static final ASN1ObjectIdentifier tpBasis = id_fieldType.branch("2.3.2"); - - static final ASN1ObjectIdentifier ppBasis = id_fieldType.branch("2.3.3"); - - static final ASN1ObjectIdentifier id_ecSigType = ansi_X9_62.branch("4"); - - static final ASN1ObjectIdentifier ecdsa_with_SHA1 = new ASN1ObjectIdentifier(id_ecSigType + ".1"); - - static final ASN1ObjectIdentifier id_publicKeyType = ansi_X9_62.branch("2"); - - static final ASN1ObjectIdentifier id_ecPublicKey = id_publicKeyType.branch("1"); - - static final ASN1ObjectIdentifier ecdsa_with_SHA2 = id_ecSigType.branch("3"); - - static final ASN1ObjectIdentifier ecdsa_with_SHA224 = ecdsa_with_SHA2.branch("1"); - - static final ASN1ObjectIdentifier ecdsa_with_SHA256 = ecdsa_with_SHA2.branch("2"); - - static final ASN1ObjectIdentifier ecdsa_with_SHA384 = ecdsa_with_SHA2.branch("3"); - - static final ASN1ObjectIdentifier ecdsa_with_SHA512 = ecdsa_with_SHA2.branch("4"); - - // - // named curves - // - static final ASN1ObjectIdentifier ellipticCurve = ansi_X9_62.branch("3"); - - // - // Two Curves - // - static final ASN1ObjectIdentifier cTwoCurve = ellipticCurve.branch("0"); - - static final ASN1ObjectIdentifier c2pnb163v1 = cTwoCurve.branch("1"); - static final ASN1ObjectIdentifier c2pnb163v2 = cTwoCurve.branch("2"); - static final ASN1ObjectIdentifier c2pnb163v3 = cTwoCurve.branch("3"); - static final ASN1ObjectIdentifier c2pnb176w1 = cTwoCurve.branch("4"); - static final ASN1ObjectIdentifier c2tnb191v1 = cTwoCurve.branch("5"); - static final ASN1ObjectIdentifier c2tnb191v2 = cTwoCurve.branch("6"); - static final ASN1ObjectIdentifier c2tnb191v3 = cTwoCurve.branch("7"); - static final ASN1ObjectIdentifier c2onb191v4 = cTwoCurve.branch("8"); - static final ASN1ObjectIdentifier c2onb191v5 = cTwoCurve.branch("9"); - static final ASN1ObjectIdentifier c2pnb208w1 = cTwoCurve.branch("10"); - static final ASN1ObjectIdentifier c2tnb239v1 = cTwoCurve.branch("11"); - static final ASN1ObjectIdentifier c2tnb239v2 = cTwoCurve.branch("12"); - static final ASN1ObjectIdentifier c2tnb239v3 = cTwoCurve.branch("13"); - static final ASN1ObjectIdentifier c2onb239v4 = cTwoCurve.branch("14"); - static final ASN1ObjectIdentifier c2onb239v5 = cTwoCurve.branch("15"); - static final ASN1ObjectIdentifier c2pnb272w1 = cTwoCurve.branch("16"); - static final ASN1ObjectIdentifier c2pnb304w1 = cTwoCurve.branch("17"); - static final ASN1ObjectIdentifier c2tnb359v1 = cTwoCurve.branch("18"); - static final ASN1ObjectIdentifier c2pnb368w1 = cTwoCurve.branch("19"); - static final ASN1ObjectIdentifier c2tnb431r1 = cTwoCurve.branch("20"); - - // - // Prime - // - static final ASN1ObjectIdentifier primeCurve = ellipticCurve.branch("1"); - - static final ASN1ObjectIdentifier prime192v1 = primeCurve.branch("1"); - static final ASN1ObjectIdentifier prime192v2 = primeCurve.branch("2"); - static final ASN1ObjectIdentifier prime192v3 = primeCurve.branch("3"); - static final ASN1ObjectIdentifier prime239v1 = primeCurve.branch("4"); - static final ASN1ObjectIdentifier prime239v2 = primeCurve.branch("5"); - static final ASN1ObjectIdentifier prime239v3 = primeCurve.branch("6"); - static final ASN1ObjectIdentifier prime256v1 = primeCurve.branch("7"); - - // - // DSA - // - // dsapublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) - // us(840) ansi-x957(10040) number-type(4) 1 } - static final ASN1ObjectIdentifier id_dsa = new ASN1ObjectIdentifier("1.2.840.10040.4.1"); - - /** - * id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57 - * (10040) x9cm(4) 3 } - */ - public static final ASN1ObjectIdentifier id_dsa_with_sha1 = new ASN1ObjectIdentifier("1.2.840.10040.4.3"); - - /** - * X9.63 - */ - public static final ASN1ObjectIdentifier x9_63_scheme = new ASN1ObjectIdentifier("1.3.133.16.840.63.0"); - public static final ASN1ObjectIdentifier dhSinglePass_stdDH_sha1kdf_scheme = x9_63_scheme.branch("2"); - public static final ASN1ObjectIdentifier dhSinglePass_cofactorDH_sha1kdf_scheme = x9_63_scheme.branch("3"); - public static final ASN1ObjectIdentifier mqvSinglePass_sha1kdf_scheme = x9_63_scheme.branch("16"); - - /** - * X9.42 - */ - - static final ASN1ObjectIdentifier ansi_X9_42 = new ASN1ObjectIdentifier("1.2.840.10046"); - - // - // Diffie-Hellman - // - // dhpublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) - // us(840) ansi-x942(10046) number-type(2) 1 } - // - public static final ASN1ObjectIdentifier dhpublicnumber = ansi_X9_42.branch("2.1"); - - public static final ASN1ObjectIdentifier x9_42_schemes = ansi_X9_42.branch("3"); - public static final ASN1ObjectIdentifier dhStatic = x9_42_schemes.branch("1"); - public static final ASN1ObjectIdentifier dhEphem = x9_42_schemes.branch("2"); - public static final ASN1ObjectIdentifier dhOneFlow = x9_42_schemes.branch("3"); - public static final ASN1ObjectIdentifier dhHybrid1 = x9_42_schemes.branch("4"); - public static final ASN1ObjectIdentifier dhHybrid2 = x9_42_schemes.branch("5"); - public static final ASN1ObjectIdentifier dhHybridOneFlow = x9_42_schemes.branch("6"); - public static final ASN1ObjectIdentifier mqv2 = x9_42_schemes.branch("7"); - public static final ASN1ObjectIdentifier mqv1 = x9_42_schemes.branch("8"); -} diff --git a/src/org/bouncycastle/asn1/x9/package.html b/src/org/bouncycastle/asn1/x9/package.html deleted file mode 100644 index 42fc97c..0000000 --- a/src/org/bouncycastle/asn1/x9/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Support classes useful for encoding and supporting X9.62 elliptic curve. - - diff --git a/src/org/bouncycastle/crypto/AsymmetricBlockCipher.java b/src/org/bouncycastle/crypto/AsymmetricBlockCipher.java deleted file mode 100644 index 565effc..0000000 --- a/src/org/bouncycastle/crypto/AsymmetricBlockCipher.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.bouncycastle.crypto; - - -/** - * base interface that a public/private key block cipher needs - * to conform to. - */ -public interface AsymmetricBlockCipher -{ - /** - * initialise the cipher. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param param the key and other data required by the cipher. - */ - public void init(boolean forEncryption, CipherParameters param); - - /** - * returns the largest size an input block can be. - * - * @return maximum size for an input block. - */ - public int getInputBlockSize(); - - /** - * returns the maximum size of the block produced by this cipher. - * - * @return maximum size of the output block produced by the cipher. - */ - public int getOutputBlockSize(); - - /** - * process the block of len bytes stored in in from offset inOff. - * - * @param in the input data - * @param inOff offset into the in array where the data starts - * @param len the length of the block to be processed. - * @return the resulting byte array of the encryption/decryption process. - * @exception InvalidCipherTextException data decrypts improperly. - * @exception DataLengthException the input data is too large for the cipher. - */ - public byte[] processBlock(byte[] in, int inOff, int len) - throws InvalidCipherTextException; -} diff --git a/src/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java b/src/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java deleted file mode 100644 index 85bec73..0000000 --- a/src/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * a holding class for public/private parameter pairs. - */ -public class AsymmetricCipherKeyPair -{ - private CipherParameters publicParam; - private CipherParameters privateParam; - - /** - * basic constructor. - * - * @param publicParam a public key parameters object. - * @param privateParam the corresponding private key parameters. - */ - public AsymmetricCipherKeyPair( - CipherParameters publicParam, - CipherParameters privateParam) - { - this.publicParam = publicParam; - this.privateParam = privateParam; - } - - /** - * return the public key parameters. - * - * @return the public key parameters. - */ - public CipherParameters getPublic() - { - return publicParam; - } - - /** - * return the private key parameters. - * - * @return the private key parameters. - */ - public CipherParameters getPrivate() - { - return privateParam; - } -} diff --git a/src/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java b/src/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java deleted file mode 100644 index 919db19..0000000 --- a/src/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * interface that a public/private key pair generator should conform to. - */ -public interface AsymmetricCipherKeyPairGenerator -{ - /** - * intialise the key pair generator. - * - * @param param the parameters the key pair is to be initialised with. - */ - public void init(KeyGenerationParameters param); - - /** - * return an AsymmetricCipherKeyPair containing the generated keys. - * - * @return an AsymmetricCipherKeyPair containing the generated keys. - */ - public AsymmetricCipherKeyPair generateKeyPair(); -} - diff --git a/src/org/bouncycastle/crypto/BasicAgreement.java b/src/org/bouncycastle/crypto/BasicAgreement.java deleted file mode 100644 index 8a98855..0000000 --- a/src/org/bouncycastle/crypto/BasicAgreement.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bouncycastle.crypto; - -import javabc.BigInteger; - -/** - * The basic interface that basic Diffie-Hellman implementations - * conforms to. - */ -public interface BasicAgreement -{ - /** - * initialise the agreement engine. - */ - public void init(CipherParameters param); - - /** - * given a public key from a given party calculate the next - * message in the agreement sequence. - */ - public BigInteger calculateAgreement(CipherParameters pubKey); -} diff --git a/src/org/bouncycastle/crypto/BlockCipher.java b/src/org/bouncycastle/crypto/BlockCipher.java deleted file mode 100644 index 3cfa25a..0000000 --- a/src/org/bouncycastle/crypto/BlockCipher.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bouncycastle.crypto; - - -/** - * Block cipher engines are expected to conform to this interface. - */ -public interface BlockCipher -{ - /** - * Initialise the cipher. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException; - - /** - * Return the name of the algorithm the cipher implements. - * - * @return the name of the algorithm the cipher implements. - */ - public String getAlgorithmName(); - - /** - * Return the block size for this cipher (in bytes). - * - * @return the block size for this cipher in bytes. - */ - public int getBlockSize(); - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock(byte[] in, int inOff, byte[] out, int outOff) - throws DataLengthException, IllegalStateException; - - /** - * Reset the cipher. After resetting the cipher is in the same state - * as it was after the last init (if there was one). - */ - public void reset(); -} diff --git a/src/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java b/src/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java deleted file mode 100644 index 1bf7ce3..0000000 --- a/src/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java +++ /dev/null @@ -1,171 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * a buffer wrapper for an asymmetric block cipher, allowing input - * to be accumulated in a piecemeal fashion until final processing. - */ -public class BufferedAsymmetricBlockCipher -{ - protected byte[] buf; - protected int bufOff; - - private final AsymmetricBlockCipher cipher; - - /** - * base constructor. - * - * @param cipher the cipher this buffering object wraps. - */ - public BufferedAsymmetricBlockCipher( - AsymmetricBlockCipher cipher) - { - this.cipher = cipher; - } - - /** - * return the underlying cipher for the buffer. - * - * @return the underlying cipher for the buffer. - */ - public AsymmetricBlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * return the amount of data sitting in the buffer. - * - * @return the amount of data sitting in the buffer. - */ - public int getBufferPosition() - { - return bufOff; - } - - /** - * initialise the buffer and the underlying cipher. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - */ - public void init( - boolean forEncryption, - CipherParameters params) - { - reset(); - - cipher.init(forEncryption, params); - - // - // we allow for an extra byte where people are using their own padding - // mechanisms on a raw cipher. - // - buf = new byte[cipher.getInputBlockSize() + (forEncryption ? 1 : 0)]; - bufOff = 0; - } - - /** - * returns the largest size an input block can be. - * - * @return maximum size for an input block. - */ - public int getInputBlockSize() - { - return cipher.getInputBlockSize(); - } - - /** - * returns the maximum size of the block produced by this cipher. - * - * @return maximum size of the output block produced by the cipher. - */ - public int getOutputBlockSize() - { - return cipher.getOutputBlockSize(); - } - - /** - * add another byte for processing. - * - * @param in the input byte. - */ - public void processByte( - byte in) - { - if (bufOff >= buf.length) - { - throw new DataLengthException("attempt to process message too long for cipher"); - } - - buf[bufOff++] = in; - } - - /** - * add len bytes to the buffer for processing. - * - * @param in the input data - * @param inOff offset into the in array where the data starts - * @param len the length of the block to be processed. - */ - public void processBytes( - byte[] in, - int inOff, - int len) - { - if (len == 0) - { - return; - } - - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - if (bufOff + len > buf.length) - { - throw new DataLengthException("attempt to process message too long for cipher"); - } - - System.arraycopy(in, inOff, buf, bufOff, len); - bufOff += len; - } - - /** - * process the contents of the buffer using the underlying - * cipher. - * - * @return the result of the encryption/decryption process on the - * buffer. - * @exception InvalidCipherTextException if we are given a garbage block. - */ - public byte[] doFinal() - throws InvalidCipherTextException - { - byte[] out = cipher.processBlock(buf, 0, bufOff); - - reset(); - - return out; - } - - /** - * Reset the buffer and the underlying cipher. - */ - public void reset() - { - /* - * clean the buffer. - */ - if (buf != null) - { - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - } - - bufOff = 0; - } -} diff --git a/src/org/bouncycastle/crypto/BufferedBlockCipher.java b/src/org/bouncycastle/crypto/BufferedBlockCipher.java deleted file mode 100644 index 4878786..0000000 --- a/src/org/bouncycastle/crypto/BufferedBlockCipher.java +++ /dev/null @@ -1,313 +0,0 @@ -package org.bouncycastle.crypto; - - -/** - * A wrapper class that allows block ciphers to be used to process data in - * a piecemeal fashion. The BufferedBlockCipher outputs a block only when the - * buffer is full and more data is being added, or on a doFinal. - *

        - * Note: in the case where the underlying cipher is either a CFB cipher or an - * OFB one the last block may not be a multiple of the block size. - */ -public class BufferedBlockCipher -{ - protected byte[] buf; - protected int bufOff; - - protected boolean forEncryption; - protected BlockCipher cipher; - - protected boolean partialBlockOkay; - protected boolean pgpCFB; - - /** - * constructor for subclasses - */ - protected BufferedBlockCipher() - { - } - - /** - * Create a buffered block cipher without padding. - * - * @param cipher the underlying block cipher this buffering object wraps. - */ - public BufferedBlockCipher( - BlockCipher cipher) - { - this.cipher = cipher; - - buf = new byte[cipher.getBlockSize()]; - bufOff = 0; - - // - // check if we can handle partial blocks on doFinal. - // - String name = cipher.getAlgorithmName(); - int idx = name.indexOf('/') + 1; - - pgpCFB = (idx > 0 && name.startsWith("PGP", idx)); - - if (pgpCFB) - { - partialBlockOkay = true; - } - else - { - partialBlockOkay = (idx > 0 && (name.startsWith("CFB", idx) || name.startsWith("OFB", idx) || name.startsWith("OpenPGP", idx) || name.startsWith("SIC", idx) || name.startsWith("GCTR", idx))); - } - } - - /** - * return the cipher this object wraps. - * - * @return the cipher this object wraps. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * initialise the cipher. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - throws IllegalArgumentException - { - this.forEncryption = forEncryption; - - reset(); - - cipher.init(forEncryption, params); - } - - /** - * return the blocksize for the underlying cipher. - * - * @return the blocksize for the underlying cipher. - */ - public int getBlockSize() - { - return cipher.getBlockSize(); - } - - /** - * return the size of the output buffer required for an update - * an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to update - * with len bytes of input. - */ - public int getUpdateOutputSize( - int len) - { - int total = len + bufOff; - int leftOver; - - if (pgpCFB) - { - leftOver = total % buf.length - (cipher.getBlockSize() + 2); - } - else - { - leftOver = total % buf.length; - } - - return total - leftOver; - } - - /** - * return the size of the output buffer required for an update plus a - * doFinal with an input of 'length' bytes. - * - * @param length the length of the input. - * @return the space required to accommodate a call to update and doFinal - * with 'length' bytes of input. - */ - public int getOutputSize( - int length) - { - // Note: Can assume partialBlockOkay is true for purposes of this calculation - return length + bufOff; - } - - /** - * process a single byte, producing an output block if neccessary. - * - * @param in the input byte. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processByte( - byte in, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - int resultLen = 0; - - buf[bufOff++] = in; - - if (bufOff == buf.length) - { - resultLen = cipher.processBlock(buf, 0, out, outOff); - bufOff = 0; - } - - return resultLen; - } - - /** - * process an array of bytes, producing output if necessary. - * - * @param in the input byte array. - * @param inOff the offset at which the input data starts. - * @param len the number of bytes to be copied out of the input array. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = getBlockSize(); - int length = getUpdateOutputSize(len); - - if (length > 0) - { - if ((outOff + length) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - } - - int resultLen = 0; - int gapLen = buf.length - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += cipher.processBlock(buf, 0, out, outOff); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > buf.length) - { - resultLen += cipher.processBlock(in, inOff, out, outOff + resultLen); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - - if (bufOff == buf.length) - { - resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); - bufOff = 0; - } - - return resultLen; - } - - /** - * Process the last block in the buffer. - * - * @param out the array the block currently being held is copied into. - * @param outOff the offset at which the copying starts. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there is insufficient space in out for - * the output, or the input is not block size aligned and should be. - * @exception IllegalStateException if the underlying cipher is not - * initialised. - * @exception InvalidCipherTextException if padding is expected and not found. - * @exception DataLengthException if the input is not block size - * aligned. - */ - public int doFinal( - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException, InvalidCipherTextException - { - try - { - int resultLen = 0; - - if (outOff + bufOff > out.length) - { - throw new DataLengthException("output buffer too short for doFinal()"); - } - - if (bufOff != 0) - { - if (!partialBlockOkay) - { - throw new DataLengthException("data not block size aligned"); - } - - cipher.processBlock(buf, 0, buf, 0); - resultLen = bufOff; - bufOff = 0; - System.arraycopy(buf, 0, out, outOff, resultLen); - } - - return resultLen; - } - finally - { - reset(); - } - } - - /** - * Reset the buffer and cipher. After resetting the object is in the same - * state as it was after the last init (if there was one). - */ - public void reset() - { - // - // clean the buffer. - // - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - - bufOff = 0; - - // - // reset the underlying cipher. - // - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/CipherKeyGenerator.java b/src/org/bouncycastle/crypto/CipherKeyGenerator.java deleted file mode 100644 index 1742d6d..0000000 --- a/src/org/bouncycastle/crypto/CipherKeyGenerator.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bouncycastle.crypto; - -import javabc.SecureRandom; - -/** - * The base class for symmetric, or secret, cipher key generators. - */ -public class CipherKeyGenerator -{ - protected SecureRandom random; - protected int strength; - - /** - * initialise the key generator. - * - * @param param the parameters to be used for key generation - */ - public void init( - KeyGenerationParameters param) - { - this.random = param.getRandom(); - this.strength = (param.getStrength() + 7) / 8; - } - - /** - * generate a secret key. - * - * @return a byte array containing the key value. - */ - public byte[] generateKey() - { - byte[] key = new byte[strength]; - - random.nextBytes(key); - - return key; - } -} diff --git a/src/org/bouncycastle/crypto/CipherParameters.java b/src/org/bouncycastle/crypto/CipherParameters.java deleted file mode 100644 index 5be8730..0000000 --- a/src/org/bouncycastle/crypto/CipherParameters.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * all parameter classes implement this. - */ -public interface CipherParameters -{ -} diff --git a/src/org/bouncycastle/crypto/CryptoException.java b/src/org/bouncycastle/crypto/CryptoException.java deleted file mode 100644 index 352c556..0000000 --- a/src/org/bouncycastle/crypto/CryptoException.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * the foundation class for the hard exceptions thrown by the crypto packages. - */ -public class CryptoException - extends Exception -{ - private Throwable cause; - - /** - * base constructor. - */ - public CryptoException() - { - } - - /** - * create a CryptoException with the given message. - * - * @param message the message to be carried with the exception. - */ - public CryptoException( - String message) - { - super(message); - } - - /** - * Create a CryptoException with the given message and underlying cause. - * - * @param message message describing exception. - * @param cause the throwable that was the underlying cause. - */ - public CryptoException( - String message, - Throwable cause) - { - super(message); - - this.cause = cause; - } - - public Throwable getCause() - { - return cause; - } -} diff --git a/src/org/bouncycastle/crypto/DSA.java b/src/org/bouncycastle/crypto/DSA.java deleted file mode 100644 index 4f8ce2a..0000000 --- a/src/org/bouncycastle/crypto/DSA.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bouncycastle.crypto; - -import javabc.BigInteger; - -/** - * interface for classes implementing algorithms modeled similar to the Digital Signature Alorithm. - */ -public interface DSA -{ - /** - * initialise the signer for signature generation or signature - * verification. - * - * @param forSigning true if we are generating a signature, false - * otherwise. - * @param param key parameters for signature generation. - */ - public void init(boolean forSigning, CipherParameters param); - - /** - * sign the passed in message (usually the output of a hash function). - * - * @param message the message to be signed. - * @return two big integers representing the r and s values respectively. - */ - public BigInteger[] generateSignature(byte[] message); - - /** - * verify the message message against the signature values r and s. - * - * @param message the message that was supposed to have been signed. - * @param r the r signature value. - * @param s the s signature value. - */ - public boolean verifySignature(byte[] message, BigInteger r, BigInteger s); -} diff --git a/src/org/bouncycastle/crypto/DataLengthException.java b/src/org/bouncycastle/crypto/DataLengthException.java deleted file mode 100644 index fbf047c..0000000 --- a/src/org/bouncycastle/crypto/DataLengthException.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * this exception is thrown if a buffer that is meant to have output - * copied into it turns out to be too short, or if we've been given - * insufficient input. In general this exception will get thrown rather - * than an ArrayOutOfBounds exception. - */ -public class DataLengthException - extends RuntimeCryptoException -{ - /** - * base constructor. - */ - public DataLengthException() - { - } - - /** - * create a DataLengthException with the given message. - * - * @param message the message to be carried with the exception. - */ - public DataLengthException( - String message) - { - super(message); - } -} diff --git a/src/org/bouncycastle/crypto/DerivationFunction.java b/src/org/bouncycastle/crypto/DerivationFunction.java deleted file mode 100644 index ef6e29e..0000000 --- a/src/org/bouncycastle/crypto/DerivationFunction.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * base interface for general purpose byte derivation functions. - */ -public interface DerivationFunction -{ - public void init(DerivationParameters param); - - /** - * return the message digest used as the basis for the function - */ - public Digest getDigest(); - - public int generateBytes(byte[] out, int outOff, int len) - throws DataLengthException, IllegalArgumentException; -} diff --git a/src/org/bouncycastle/crypto/DerivationParameters.java b/src/org/bouncycastle/crypto/DerivationParameters.java deleted file mode 100644 index e11eb86..0000000 --- a/src/org/bouncycastle/crypto/DerivationParameters.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * Parameters for key/byte stream derivation classes - */ -public interface DerivationParameters -{ -} diff --git a/src/org/bouncycastle/crypto/Digest.java b/src/org/bouncycastle/crypto/Digest.java deleted file mode 100644 index f44fad0..0000000 --- a/src/org/bouncycastle/crypto/Digest.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * interface that a message digest conforms to. - */ -public interface Digest -{ - /** - * return the algorithm name - * - * @return the algorithm name - */ - public String getAlgorithmName(); - - /** - * return the size, in bytes, of the digest produced by this message digest. - * - * @return the size, in bytes, of the digest produced by this message digest. - */ - public int getDigestSize(); - - /** - * update the message digest with a single byte. - * - * @param in the input byte to be entered. - */ - public void update(byte in); - - /** - * update the message digest with a block of bytes. - * - * @param in the byte array containing the data. - * @param inOff the offset into the byte array where the data starts. - * @param len the length of the data. - */ - public void update(byte[] in, int inOff, int len); - - /** - * close the digest, producing the final digest value. The doFinal - * call leaves the digest reset. - * - * @param out the array the digest is to be copied into. - * @param outOff the offset into the out array the digest is to start at. - */ - public int doFinal(byte[] out, int outOff); - - /** - * reset the digest back to it's initial state. - */ - public void reset(); -} diff --git a/src/org/bouncycastle/crypto/ExtendedDigest.java b/src/org/bouncycastle/crypto/ExtendedDigest.java deleted file mode 100644 index c5e9e8b..0000000 --- a/src/org/bouncycastle/crypto/ExtendedDigest.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.bouncycastle.crypto; - -public interface ExtendedDigest - extends Digest -{ - /** - * Return the size in bytes of the internal buffer the digest applies it's compression - * function to. - * - * @return byte length of the digests internal buffer. - */ - public int getByteLength(); -} diff --git a/src/org/bouncycastle/crypto/InvalidCipherTextException.java b/src/org/bouncycastle/crypto/InvalidCipherTextException.java deleted file mode 100644 index 59e4b26..0000000 --- a/src/org/bouncycastle/crypto/InvalidCipherTextException.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * this exception is thrown whenever we find something we don't expect in a - * message. - */ -public class InvalidCipherTextException - extends CryptoException -{ - /** - * base constructor. - */ - public InvalidCipherTextException() - { - } - - /** - * create a InvalidCipherTextException with the given message. - * - * @param message the message to be carried with the exception. - */ - public InvalidCipherTextException( - String message) - { - super(message); - } -} diff --git a/src/org/bouncycastle/crypto/KeyGenerationParameters.java b/src/org/bouncycastle/crypto/KeyGenerationParameters.java deleted file mode 100644 index ecd8672..0000000 --- a/src/org/bouncycastle/crypto/KeyGenerationParameters.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.crypto; - -import javabc.SecureRandom; - -/** - * The base class for parameters to key generators. - */ -public class KeyGenerationParameters -{ - private SecureRandom random; - private int strength; - - /** - * initialise the generator with a source of randomness - * and a strength (in bits). - * - * @param random the random byte source. - * @param strength the size, in bits, of the keys we want to produce. - */ - public KeyGenerationParameters( - SecureRandom random, - int strength) - { - this.random = random; - this.strength = strength; - } - - /** - * return the random source associated with this - * generator. - * - * @return the generators random source. - */ - public SecureRandom getRandom() - { - return random; - } - - /** - * return the bit strength for keys produced by this generator, - * - * @return the strength of the keys this generator produces (in bits). - */ - public int getStrength() - { - return strength; - } -} diff --git a/src/org/bouncycastle/crypto/Mac.java b/src/org/bouncycastle/crypto/Mac.java deleted file mode 100644 index c00cd58..0000000 --- a/src/org/bouncycastle/crypto/Mac.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.bouncycastle.crypto; - - -/** - * The base interface for implementations of message authentication codes (MACs). - */ -public interface Mac -{ - /** - * Initialise the MAC. - * - * @param params the key and other data required by the MAC. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init(CipherParameters params) - throws IllegalArgumentException; - - /** - * Return the name of the algorithm the MAC implements. - * - * @return the name of the algorithm the MAC implements. - */ - public String getAlgorithmName(); - - /** - * Return the block size for this MAC (in bytes). - * - * @return the block size for this MAC in bytes. - */ - public int getMacSize(); - - /** - * add a single byte to the mac for processing. - * - * @param in the byte to be processed. - * @exception IllegalStateException if the MAC is not initialised. - */ - public void update(byte in) - throws IllegalStateException; - - /** - * @param in the array containing the input. - * @param inOff the index in the array the data begins at. - * @param len the length of the input starting at inOff. - * @exception IllegalStateException if the MAC is not initialised. - * @exception DataLengthException if there isn't enough data in in. - */ - public void update(byte[] in, int inOff, int len) - throws DataLengthException, IllegalStateException; - - /** - * Compute the final stage of the MAC writing the output to the out - * parameter. - *

        - * doFinal leaves the MAC in the same state it was after the last init. - * - * @param out the array the MAC is to be output to. - * @param outOff the offset into the out buffer the output is to start at. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the MAC is not initialised. - */ - public int doFinal(byte[] out, int outOff) - throws DataLengthException, IllegalStateException; - - /** - * Reset the MAC. At the end of resetting the MAC should be in the - * in the same state it was after the last init (if there was one). - */ - public void reset(); -} diff --git a/src/org/bouncycastle/crypto/MaxBytesExceededException.java b/src/org/bouncycastle/crypto/MaxBytesExceededException.java deleted file mode 100644 index bfa1544..0000000 --- a/src/org/bouncycastle/crypto/MaxBytesExceededException.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * this exception is thrown whenever a cipher requires a change of key, iv - * or similar after x amount of bytes enciphered - */ -public class MaxBytesExceededException - extends RuntimeCryptoException -{ - /** - * base constructor. - */ - public MaxBytesExceededException() - { - } - - /** - * create an with the given message. - * - * @param message the message to be carried with the exception. - */ - public MaxBytesExceededException( - String message) - { - super(message); - } -} diff --git a/src/org/bouncycastle/crypto/PBEParametersGenerator.java b/src/org/bouncycastle/crypto/PBEParametersGenerator.java deleted file mode 100644 index 59765ce..0000000 --- a/src/org/bouncycastle/crypto/PBEParametersGenerator.java +++ /dev/null @@ -1,157 +0,0 @@ -package org.bouncycastle.crypto; - -import org.bouncycastle.util.Strings; - -/** - * super class for all Password Based Encryption (PBE) parameter generator classes. - */ -public abstract class PBEParametersGenerator -{ - protected byte[] password; - protected byte[] salt; - protected int iterationCount; - - /** - * base constructor. - */ - protected PBEParametersGenerator() - { - } - - /** - * initialise the PBE generator. - * - * @param password the password converted into bytes (see below). - * @param salt the salt to be mixed with the password. - * @param iterationCount the number of iterations the "mixing" function - * is to be applied for. - */ - public void init( - byte[] password, - byte[] salt, - int iterationCount) - { - this.password = password; - this.salt = salt; - this.iterationCount = iterationCount; - } - - /** - * return the password byte array. - * - * @return the password byte array. - */ - public byte[] getPassword() - { - return password; - } - - /** - * return the salt byte array. - * - * @return the salt byte array. - */ - public byte[] getSalt() - { - return salt; - } - - /** - * return the iteration count. - * - * @return the iteration count. - */ - public int getIterationCount() - { - return iterationCount; - } - - /** - * generate derived parameters for a key of length keySize. - * - * @param keySize the length, in bits, of the key required. - * @return a parameters object representing a key. - */ - public abstract CipherParameters generateDerivedParameters(int keySize); - - /** - * generate derived parameters for a key of length keySize, and - * an initialisation vector (IV) of length ivSize. - * - * @param keySize the length, in bits, of the key required. - * @param ivSize the length, in bits, of the iv required. - * @return a parameters object representing a key and an IV. - */ - public abstract CipherParameters generateDerivedParameters(int keySize, int ivSize); - - /** - * generate derived parameters for a key of length keySize, specifically - * for use with a MAC. - * - * @param keySize the length, in bits, of the key required. - * @return a parameters object representing a key. - */ - public abstract CipherParameters generateDerivedMacParameters(int keySize); - - /** - * converts a password to a byte array according to the scheme in - * PKCS5 (ascii, no padding) - * - * @param password a character array representing the password. - * @return a byte array representing the password. - */ - public static byte[] PKCS5PasswordToBytes( - char[] password) - { - byte[] bytes = new byte[password.length]; - - for (int i = 0; i != bytes.length; i++) - { - bytes[i] = (byte)password[i]; - } - - return bytes; - } - - /** - * converts a password to a byte array according to the scheme in - * PKCS5 (UTF-8, no padding) - * - * @param password a character array representing the password. - * @return a byte array representing the password. - */ - public static byte[] PKCS5PasswordToUTF8Bytes( - char[] password) - { - return Strings.toUTF8ByteArray(password); - } - - /** - * converts a password to a byte array according to the scheme in - * PKCS12 (unicode, big endian, 2 zero pad bytes at the end). - * - * @param password a character array representing the password. - * @return a byte array representing the password. - */ - public static byte[] PKCS12PasswordToBytes( - char[] password) - { - if (password.length > 0) - { - // +1 for extra 2 pad bytes. - byte[] bytes = new byte[(password.length + 1) * 2]; - - for (int i = 0; i != password.length; i ++) - { - bytes[i * 2] = (byte)(password[i] >>> 8); - bytes[i * 2 + 1] = (byte)password[i]; - } - - return bytes; - } - else - { - return new byte[0]; - } - } -} diff --git a/src/org/bouncycastle/crypto/RuntimeCryptoException.java b/src/org/bouncycastle/crypto/RuntimeCryptoException.java deleted file mode 100644 index c157202..0000000 --- a/src/org/bouncycastle/crypto/RuntimeCryptoException.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * the foundation class for the exceptions thrown by the crypto packages. - */ -public class RuntimeCryptoException - extends RuntimeException -{ - /** - * base constructor. - */ - public RuntimeCryptoException() - { - } - - /** - * create a RuntimeCryptoException with the given message. - * - * @param message the message to be carried with the exception. - */ - public RuntimeCryptoException( - String message) - { - super(message); - } -} diff --git a/src/org/bouncycastle/crypto/Signer.java b/src/org/bouncycastle/crypto/Signer.java deleted file mode 100644 index 357b0da..0000000 --- a/src/org/bouncycastle/crypto/Signer.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * Generic signer interface for hash based and message recovery signers. - */ -public interface Signer -{ - /** - * Initialise the signer for signing or verification. - * - * @param forSigning true if for signing, false otherwise - * @param param necessary parameters. - */ - public void init(boolean forSigning, CipherParameters param); - - /** - * update the internal digest with the byte b - */ - public void update(byte b); - - /** - * update the internal digest with the byte array in - */ - public void update(byte[] in, int off, int len); - - /** - * generate a signature for the message we've been loaded with using - * the key we were initialised with. - */ - public byte[] generateSignature() - throws CryptoException, DataLengthException; - - /** - * return true if the internal state represents the signature described - * in the passed in array. - */ - public boolean verifySignature(byte[] signature); - - /** - * reset the internal state - */ - public void reset(); -} diff --git a/src/org/bouncycastle/crypto/SignerWithRecovery.java b/src/org/bouncycastle/crypto/SignerWithRecovery.java deleted file mode 100644 index 452b367..0000000 --- a/src/org/bouncycastle/crypto/SignerWithRecovery.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * Signer with message recovery. - */ -public interface SignerWithRecovery - extends Signer -{ - /** - * Returns true if the signer has recovered the full message as - * part of signature verification. - * - * @return true if full message recovered. - */ - public boolean hasFullMessage(); - - /** - * Returns a reference to what message was recovered (if any). - * - * @return full/partial message, null if nothing. - */ - public byte[] getRecoveredMessage(); - - /** - * Perform an update with the recovered message before adding any other data. This must - * be the first update method called, and calling it will result in the signer assuming - * that further calls to update will include message content past what is recoverable. - * - * @param signature the signature that we are in the process of verifying. - * @throws IllegalStateException - */ - public void updateWithRecoveredMessage(byte[] signature) - throws InvalidCipherTextException; -} diff --git a/src/org/bouncycastle/crypto/StreamBlockCipher.java b/src/org/bouncycastle/crypto/StreamBlockCipher.java deleted file mode 100644 index 8fdd232..0000000 --- a/src/org/bouncycastle/crypto/StreamBlockCipher.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * a wrapper for block ciphers with a single byte block size, so that they - * can be treated like stream ciphers. - */ -public class StreamBlockCipher - implements StreamCipher -{ - private BlockCipher cipher; - - private byte[] oneByte = new byte[1]; - - /** - * basic constructor. - * - * @param cipher the block cipher to be wrapped. - * @exception IllegalArgumentException if the cipher has a block size other than - * one. - */ - public StreamBlockCipher( - BlockCipher cipher) - { - if (cipher.getBlockSize() != 1) - { - throw new IllegalArgumentException("block cipher block size != 1."); - } - - this.cipher = cipher; - } - - /** - * initialise the underlying cipher. - * - * @param forEncryption true if we are setting up for encryption, false otherwise. - * @param params the necessary parameters for the underlying cipher to be initialised. - */ - public void init( - boolean forEncryption, - CipherParameters params) - { - cipher.init(forEncryption, params); - } - - /** - * return the name of the algorithm we are wrapping. - * - * @return the name of the algorithm we are wrapping. - */ - public String getAlgorithmName() - { - return cipher.getAlgorithmName(); - } - - /** - * encrypt/decrypt a single byte returning the result. - * - * @param in the byte to be processed. - * @return the result of processing the input byte. - */ - public byte returnByte( - byte in) - { - oneByte[0] = in; - - cipher.processBlock(oneByte, 0, oneByte, 0); - - return oneByte[0]; - } - - /** - * process a block of bytes from in putting the result into out. - * - * @param in the input byte array. - * @param inOff the offset into the in array where the data to be processed starts. - * @param len the number of bytes to be processed. - * @param out the output buffer the processed bytes go into. - * @param outOff the offset into the output byte array the processed data stars at. - * @exception DataLengthException if the output buffer is too small. - */ - public void processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - throws DataLengthException - { - if (outOff + len > out.length) - { - throw new DataLengthException("output buffer too small in processBytes()"); - } - - for (int i = 0; i != len; i++) - { - cipher.processBlock(in, inOff + i, out, outOff + i); - } - } - - /** - * reset the underlying cipher. This leaves it in the same state - * it was at after the last init (if there was one). - */ - public void reset() - { - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/StreamCipher.java b/src/org/bouncycastle/crypto/StreamCipher.java deleted file mode 100644 index 2a55d4f..0000000 --- a/src/org/bouncycastle/crypto/StreamCipher.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bouncycastle.crypto; - -/** - * the interface stream ciphers conform to. - */ -public interface StreamCipher -{ - /** - * Initialise the cipher. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException; - - /** - * Return the name of the algorithm the cipher implements. - * - * @return the name of the algorithm the cipher implements. - */ - public String getAlgorithmName(); - - /** - * encrypt/decrypt a single byte returning the result. - * - * @param in the byte to be processed. - * @return the result of processing the input byte. - */ - public byte returnByte(byte in); - - /** - * process a block of bytes from in putting the result into out. - * - * @param in the input byte array. - * @param inOff the offset into the in array where the data to be processed starts. - * @param len the number of bytes to be processed. - * @param out the output buffer the processed bytes go into. - * @param outOff the offset into the output byte array the processed data starts at. - * @exception DataLengthException if the output buffer is too small. - */ - public void processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) - throws DataLengthException; - - /** - * reset the cipher. This leaves it in the same state - * it was at after the last init (if there was one). - */ - public void reset(); -} diff --git a/src/org/bouncycastle/crypto/Wrapper.java b/src/org/bouncycastle/crypto/Wrapper.java deleted file mode 100644 index 3956a6f..0000000 --- a/src/org/bouncycastle/crypto/Wrapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.crypto; - -public interface Wrapper -{ - public void init(boolean forWrapping, CipherParameters param); - - /** - * Return the name of the algorithm the wrapper implements. - * - * @return the name of the algorithm the wrapper implements. - */ - public String getAlgorithmName(); - - public byte[] wrap(byte[] in, int inOff, int inLen); - - public byte[] unwrap(byte[] in, int inOff, int inLen) - throws InvalidCipherTextException; -} diff --git a/src/org/bouncycastle/crypto/agreement/DHAgreement.java b/src/org/bouncycastle/crypto/agreement/DHAgreement.java deleted file mode 100644 index bcf8929..0000000 --- a/src/org/bouncycastle/crypto/agreement/DHAgreement.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.bouncycastle.crypto.agreement; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.generators.DHKeyPairGenerator; -import org.bouncycastle.crypto.params.DHKeyGenerationParameters; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -/** - * a Diffie-Hellman key exchange engine. - *

        - * note: This uses MTI/A0 key agreement in order to make the key agreement - * secure against passive attacks. If you're doing Diffie-Hellman and both - * parties have long term public keys you should look at using this. For - * further information have a look at RFC 2631. - *

        - * It's possible to extend this to more than two parties as well, for the moment - * that is left as an exercise for the reader. - */ -public class DHAgreement -{ - private DHPrivateKeyParameters key; - private DHParameters dhParams; - private BigInteger privateValue; - private SecureRandom random; - - public void init( - CipherParameters param) - { - AsymmetricKeyParameter kParam; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - kParam = (AsymmetricKeyParameter)rParam.getParameters(); - } - else - { - this.random = new SecureRandom(); - kParam = (AsymmetricKeyParameter)param; - } - - - if (!(kParam instanceof DHPrivateKeyParameters)) - { - throw new IllegalArgumentException("DHEngine expects DHPrivateKeyParameters"); - } - - this.key = (DHPrivateKeyParameters)kParam; - this.dhParams = key.getParameters(); - } - - /** - * calculate our initial message. - */ - public BigInteger calculateMessage() - { - DHKeyPairGenerator dhGen = new DHKeyPairGenerator(); - dhGen.init(new DHKeyGenerationParameters(random, dhParams)); - AsymmetricCipherKeyPair dhPair = dhGen.generateKeyPair(); - - this.privateValue = ((DHPrivateKeyParameters)dhPair.getPrivate()).getX(); - - return ((DHPublicKeyParameters)dhPair.getPublic()).getY(); - } - - /** - * given a message from a given party and the corresponding public key, - * calculate the next message in the agreement sequence. In this case - * this will represent the shared secret. - */ - public BigInteger calculateAgreement( - DHPublicKeyParameters pub, - BigInteger message) - { - if (!pub.getParameters().equals(dhParams)) - { - throw new IllegalArgumentException("Diffie-Hellman public key has wrong parameters."); - } - - BigInteger p = dhParams.getP(); - - return message.modPow(key.getX(), p).multiply(pub.getY().modPow(privateValue, p)).mod(p); - } -} diff --git a/src/org/bouncycastle/crypto/agreement/DHBasicAgreement.java b/src/org/bouncycastle/crypto/agreement/DHBasicAgreement.java deleted file mode 100644 index d89e37b..0000000 --- a/src/org/bouncycastle/crypto/agreement/DHBasicAgreement.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.bouncycastle.crypto.agreement; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.BasicAgreement; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -/** - * a Diffie-Hellman key agreement class. - *

        - * note: This is only the basic algorithm, it doesn't take advantage of - * long term public keys if they are available. See the DHAgreement class - * for a "better" implementation. - */ -public class DHBasicAgreement - implements BasicAgreement -{ - private DHPrivateKeyParameters key; - private DHParameters dhParams; - - public void init( - CipherParameters param) - { - AsymmetricKeyParameter kParam; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - kParam = (AsymmetricKeyParameter)rParam.getParameters(); - } - else - { - kParam = (AsymmetricKeyParameter)param; - } - - if (!(kParam instanceof DHPrivateKeyParameters)) - { - throw new IllegalArgumentException("DHEngine expects DHPrivateKeyParameters"); - } - - this.key = (DHPrivateKeyParameters)kParam; - this.dhParams = key.getParameters(); - } - - /** - * given a short term public key from a given party calculate the next - * message in the agreement sequence. - */ - public BigInteger calculateAgreement( - CipherParameters pubKey) - { - DHPublicKeyParameters pub = (DHPublicKeyParameters)pubKey; - - if (!pub.getParameters().equals(dhParams)) - { - throw new IllegalArgumentException("Diffie-Hellman public key has wrong parameters."); - } - - return pub.getY().modPow(key.getX(), dhParams.getP()); - } -} diff --git a/src/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java b/src/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java deleted file mode 100644 index 3197c46..0000000 --- a/src/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bouncycastle.crypto.agreement; - -import javabc.BigInteger; - -import org.bouncycastle.math.ec.ECPoint; - -import org.bouncycastle.crypto.BasicAgreement; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; - -/** - * P1363 7.2.1 ECSVDP-DH - * - * ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, - * Diffie-Hellman version. It is based on the work of [DH76], [Mil86], - * and [Kob87]. This primitive derives a shared secret value from one - * party's private key and another party's public key, where both have - * the same set of EC domain parameters. If two parties correctly - * execute this primitive, they will produce the same output. This - * primitive can be invoked by a scheme to derive a shared secret key; - * specifically, it may be used with the schemes ECKAS-DH1 and - * DL/ECKAS-DH2. It assumes that the input keys are valid (see also - * Section 7.2.2). - */ -public class ECDHBasicAgreement - implements BasicAgreement -{ - private ECPrivateKeyParameters key; - - public void init( - CipherParameters key) - { - this.key = (ECPrivateKeyParameters)key; - } - - public BigInteger calculateAgreement( - CipherParameters pubKey) - { - ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; - ECPoint P = pub.getQ().multiply(key.getD()); - - // if (p.isInfinity()) throw new RuntimeException("d*Q == infinity"); - - return P.getX().toBigInteger(); - } -} diff --git a/src/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java b/src/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java deleted file mode 100644 index 18e32a4..0000000 --- a/src/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.bouncycastle.crypto.agreement; - -import javabc.BigInteger; - -import org.bouncycastle.math.ec.ECPoint; - -import org.bouncycastle.crypto.BasicAgreement; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECDomainParameters; - -/** - * P1363 7.2.2 ECSVDP-DHC - * - * ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, - * Diffie-Hellman version with cofactor multiplication. It is based on - * the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This - * primitive derives a shared secret value from one party's private key - * and another party's public key, where both have the same set of EC - * domain parameters. If two parties correctly execute this primitive, - * they will produce the same output. This primitive can be invoked by a - * scheme to derive a shared secret key; specifically, it may be used - * with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the - * validity of the input public key (see also Section 7.2.1). - *

        - * Note: As stated P1363 compatibility mode with ECDH can be preset, and - * in this case the implementation doesn't have a ECDH compatibility mode - * (if you want that just use ECDHBasicAgreement and note they both implement - * BasicAgreement!). - */ -public class ECDHCBasicAgreement - implements BasicAgreement -{ - ECPrivateKeyParameters key; - - public void init( - CipherParameters key) - { - this.key = (ECPrivateKeyParameters)key; - } - - public BigInteger calculateAgreement( - CipherParameters pubKey) - { - ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; - ECDomainParameters params = pub.getParameters(); - ECPoint P = pub.getQ().multiply(params.getH().multiply(key.getD())); - - // if (p.isInfinity()) throw new RuntimeException("Invalid public key"); - - return P.getX().toBigInteger(); - } -} diff --git a/src/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java b/src/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java deleted file mode 100644 index 60d0255..0000000 --- a/src/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.bouncycastle.crypto.agreement; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.BasicAgreement; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.params.ECDomainParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.params.MQVPrivateParameters; -import org.bouncycastle.crypto.params.MQVPublicParameters; -import org.bouncycastle.math.ec.ECAlgorithms; -import org.bouncycastle.math.ec.ECConstants; -import org.bouncycastle.math.ec.ECPoint; - -public class ECMQVBasicAgreement - implements BasicAgreement -{ - MQVPrivateParameters privParams; - - public void init( - CipherParameters key) - { - this.privParams = (MQVPrivateParameters)key; - } - - public BigInteger calculateAgreement(CipherParameters pubKey) - { - MQVPublicParameters pubParams = (MQVPublicParameters)pubKey; - - ECPrivateKeyParameters staticPrivateKey = privParams.getStaticPrivateKey(); - - ECPoint agreement = calculateMqvAgreement(staticPrivateKey.getParameters(), staticPrivateKey, - privParams.getEphemeralPrivateKey(), privParams.getEphemeralPublicKey(), - pubParams.getStaticPublicKey(), pubParams.getEphemeralPublicKey()); - - return agreement.getX().toBigInteger(); - } - - // The ECMQV Primitive as described in SEC-1, 3.4 - private ECPoint calculateMqvAgreement( - ECDomainParameters parameters, - ECPrivateKeyParameters d1U, - ECPrivateKeyParameters d2U, - ECPublicKeyParameters Q2U, - ECPublicKeyParameters Q1V, - ECPublicKeyParameters Q2V) - { - BigInteger n = parameters.getN(); - int e = (n.bitLength() + 1) / 2; - BigInteger powE = ECConstants.ONE.shiftLeft(e); - - // The Q2U public key is optional - ECPoint q; - if (Q2U == null) - { - q = parameters.getG().multiply(d2U.getD()); - } - else - { - q = Q2U.getQ(); - } - - BigInteger x = q.getX().toBigInteger(); - BigInteger xBar = x.mod(powE); - BigInteger Q2UBar = xBar.setBit(e); - BigInteger s = d1U.getD().multiply(Q2UBar).mod(n).add(d2U.getD()).mod(n); - - BigInteger xPrime = Q2V.getQ().getX().toBigInteger(); - BigInteger xPrimeBar = xPrime.mod(powE); - BigInteger Q2VBar = xPrimeBar.setBit(e); - - BigInteger hs = parameters.getH().multiply(s).mod(n); - -// ECPoint p = Q1V.getQ().multiply(Q2VBar).add(Q2V.getQ()).multiply(hs); - ECPoint p = ECAlgorithms.sumOfTwoMultiplies( - Q1V.getQ(), Q2VBar.multiply(hs).mod(n), Q2V.getQ(), hs); - - if (p.isInfinity()) - { - throw new IllegalStateException("Infinity is not a valid agreement value for MQV"); - } - - return p; - } -} diff --git a/src/org/bouncycastle/crypto/agreement/package.html b/src/org/bouncycastle/crypto/agreement/package.html deleted file mode 100644 index 4b49331..0000000 --- a/src/org/bouncycastle/crypto/agreement/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Basic key agreement classes. - - diff --git a/src/org/bouncycastle/crypto/agreement/srp/SRP6Client.java b/src/org/bouncycastle/crypto/agreement/srp/SRP6Client.java deleted file mode 100644 index 5ea8ad5..0000000 --- a/src/org/bouncycastle/crypto/agreement/srp/SRP6Client.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.bouncycastle.crypto.agreement.srp; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Digest; - -/** - * Implements the client side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. - * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper - * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" - */ -public class SRP6Client -{ - protected BigInteger N; - protected BigInteger g; - - protected BigInteger a; - protected BigInteger A; - - protected BigInteger B; - - protected BigInteger x; - protected BigInteger u; - protected BigInteger S; - - protected Digest digest; - protected SecureRandom random; - - public SRP6Client() - { - } - - /** - * Initialises the client to begin new authentication attempt - * @param N The safe prime associated with the client's verifier - * @param g The group parameter associated with the client's verifier - * @param digest The digest algorithm associated with the client's verifier - * @param random For key generation - */ - public void init(BigInteger N, BigInteger g, Digest digest, SecureRandom random) - { - this.N = N; - this.g = g; - this.digest = digest; - this.random = random; - } - - /** - * Generates client's credentials given the client's salt, identity and password - * @param salt The salt used in the client's verifier. - * @param identity The user's identity (eg. username) - * @param password The user's password - * @return Client's public value to send to server - */ - public BigInteger generateClientCredentials(byte[] salt, byte[] identity, byte[] password) - { - this.x = SRP6Util.calculateX(digest, N, salt, identity, password); - this.a = selectPrivateValue(); - this.A = g.modPow(a, N); - - return A; - } - - /** - * Generates client's verification message given the server's credentials - * @param serverB The server's credentials - * @return Client's verification message for the server - * @throws CryptoException If server's credentials are invalid - */ - public BigInteger calculateSecret(BigInteger serverB) throws CryptoException - { - this.B = SRP6Util.validatePublicValue(N, serverB); - this.u = SRP6Util.calculateU(digest, N, A, B); - this.S = calculateS(); - - return S; - } - - protected BigInteger selectPrivateValue() - { - return SRP6Util.generatePrivateValue(digest, N, g, random); - } - - private BigInteger calculateS() - { - BigInteger k = SRP6Util.calculateK(digest, N, g); - BigInteger exp = u.multiply(x).add(a); - BigInteger tmp = g.modPow(x, N).multiply(k).mod(N); - return B.subtract(tmp).mod(N).modPow(exp, N); - } -} diff --git a/src/org/bouncycastle/crypto/agreement/srp/SRP6Server.java b/src/org/bouncycastle/crypto/agreement/srp/SRP6Server.java deleted file mode 100644 index 348c608..0000000 --- a/src/org/bouncycastle/crypto/agreement/srp/SRP6Server.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.bouncycastle.crypto.agreement.srp; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Digest; - -/** - * Implements the server side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. - * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper - * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" - */ -public class SRP6Server -{ - protected BigInteger N; - protected BigInteger g; - protected BigInteger v; - - protected SecureRandom random; - protected Digest digest; - - protected BigInteger A; - - protected BigInteger b; - protected BigInteger B; - - protected BigInteger u; - protected BigInteger S; - - public SRP6Server() - { - } - - /** - * Initialises the server to accept a new client authentication attempt - * @param N The safe prime associated with the client's verifier - * @param g The group parameter associated with the client's verifier - * @param v The client's verifier - * @param digest The digest algorithm associated with the client's verifier - * @param random For key generation - */ - public void init(BigInteger N, BigInteger g, BigInteger v, Digest digest, SecureRandom random) - { - this.N = N; - this.g = g; - this.v = v; - - this.random = random; - this.digest = digest; - } - - /** - * Generates the server's credentials that are to be sent to the client. - * @return The server's public value to the client - */ - public BigInteger generateServerCredentials() - { - BigInteger k = SRP6Util.calculateK(digest, N, g); - this.b = selectPrivateValue(); - this.B = k.multiply(v).mod(N).add(g.modPow(b, N)).mod(N); - - return B; - } - - /** - * Processes the client's credentials. If valid the shared secret is generated and returned. - * @param clientA The client's credentials - * @return A shared secret BigInteger - * @throws CryptoException If client's credentials are invalid - */ - public BigInteger calculateSecret(BigInteger clientA) throws CryptoException - { - this.A = SRP6Util.validatePublicValue(N, clientA); - this.u = SRP6Util.calculateU(digest, N, A, B); - this.S = calculateS(); - - return S; - } - - protected BigInteger selectPrivateValue() - { - return SRP6Util.generatePrivateValue(digest, N, g, random); - } - - private BigInteger calculateS() - { - return v.modPow(u, N).multiply(A).mod(N).modPow(b, N); - } -} diff --git a/src/org/bouncycastle/crypto/agreement/srp/SRP6Util.java b/src/org/bouncycastle/crypto/agreement/srp/SRP6Util.java deleted file mode 100644 index f8941f9..0000000 --- a/src/org/bouncycastle/crypto/agreement/srp/SRP6Util.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.bouncycastle.crypto.agreement.srp; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.util.BigIntegers; - -public class SRP6Util -{ - private static BigInteger ZERO = BigInteger.valueOf(0); - private static BigInteger ONE = BigInteger.valueOf(1); - - public static BigInteger calculateK(Digest digest, BigInteger N, BigInteger g) - { - return hashPaddedPair(digest, N, N, g); - } - - public static BigInteger calculateU(Digest digest, BigInteger N, BigInteger A, BigInteger B) - { - return hashPaddedPair(digest, N, A, B); - } - - public static BigInteger calculateX(Digest digest, BigInteger N, byte[] salt, byte[] identity, byte[] password) - { - byte[] output = new byte[digest.getDigestSize()]; - - digest.update(identity, 0, identity.length); - digest.update((byte)':'); - digest.update(password, 0, password.length); - digest.doFinal(output, 0); - - digest.update(salt, 0, salt.length); - digest.update(output, 0, output.length); - digest.doFinal(output, 0); - - return new BigInteger(1, output); - } - - public static BigInteger generatePrivateValue(Digest digest, BigInteger N, BigInteger g, SecureRandom random) - { - int minBits = Math.min(256, N.bitLength() / 2); - BigInteger min = ONE.shiftLeft(minBits - 1); - BigInteger max = N.subtract(ONE); - - return BigIntegers.createRandomInRange(min, max, random); - } - - public static BigInteger validatePublicValue(BigInteger N, BigInteger val) - throws CryptoException - { - val = val.mod(N); - - // Check that val % N != 0 - if (val.equals(ZERO)) - { - throw new CryptoException("Invalid public value: 0"); - } - - return val; - } - - private static BigInteger hashPaddedPair(Digest digest, BigInteger N, BigInteger n1, BigInteger n2) - { - int padLength = (N.bitLength() + 7) / 8; - - byte[] n1_bytes = getPadded(n1, padLength); - byte[] n2_bytes = getPadded(n2, padLength); - - digest.update(n1_bytes, 0, n1_bytes.length); - digest.update(n2_bytes, 0, n2_bytes.length); - - byte[] output = new byte[digest.getDigestSize()]; - digest.doFinal(output, 0); - - return new BigInteger(1, output); - } - - private static byte[] getPadded(BigInteger n, int length) - { - byte[] bs = BigIntegers.asUnsignedByteArray(n); - if (bs.length < length) - { - byte[] tmp = new byte[length]; - System.arraycopy(bs, 0, tmp, length - bs.length, bs.length); - bs = tmp; - } - return bs; - } -} diff --git a/src/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java b/src/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java deleted file mode 100644 index 30fde0a..0000000 --- a/src/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bouncycastle.crypto.agreement.srp; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.Digest; - -/** - * Generates new SRP verifier for user - */ -public class SRP6VerifierGenerator -{ - protected BigInteger N; - protected BigInteger g; - protected Digest digest; - - public SRP6VerifierGenerator() - { - } - - /** - * Initialises generator to create new verifiers - * @param N The safe prime to use (see DHParametersGenerator) - * @param g The group parameter to use (see DHParametersGenerator) - * @param digest The digest to use. The same digest type will need to be used later for the actual authentication - * attempt. Also note that the final session key size is dependent on the chosen digest. - */ - public void init(BigInteger N, BigInteger g, Digest digest) - { - this.N = N; - this.g = g; - this.digest = digest; - } - - /** - * Creates a new SRP verifier - * @param salt The salt to use, generally should be large and random - * @param identity The user's identifying information (eg. username) - * @param password The user's password - * @return A new verifier for use in future SRP authentication - */ - public BigInteger generateVerifier(byte[] salt, byte[] identity, byte[] password) - { - BigInteger x = SRP6Util.calculateX(digest, N, salt, identity, password); - - return g.modPow(x, N); - } -} diff --git a/src/org/bouncycastle/crypto/digests/GeneralDigest.java b/src/org/bouncycastle/crypto/digests/GeneralDigest.java deleted file mode 100644 index f2c9967..0000000 --- a/src/org/bouncycastle/crypto/digests/GeneralDigest.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.ExtendedDigest; - -/** - * base implementation of MD4 family style digest as outlined in - * "Handbook of Applied Cryptography", pages 344 - 347. - */ -public abstract class GeneralDigest - implements ExtendedDigest -{ - private static final int BYTE_LENGTH = 64; - private byte[] xBuf; - private int xBufOff; - - private long byteCount; - - /** - * Standard constructor - */ - protected GeneralDigest() - { - xBuf = new byte[4]; - xBufOff = 0; - } - - /** - * Copy constructor. We are using copy constructors in place - * of the Object.clone() interface as this interface is not - * supported by J2ME. - */ - protected GeneralDigest(GeneralDigest t) - { - xBuf = new byte[t.xBuf.length]; - System.arraycopy(t.xBuf, 0, xBuf, 0, t.xBuf.length); - - xBufOff = t.xBufOff; - byteCount = t.byteCount; - } - - public void update( - byte in) - { - xBuf[xBufOff++] = in; - - if (xBufOff == xBuf.length) - { - processWord(xBuf, 0); - xBufOff = 0; - } - - byteCount++; - } - - public void update( - byte[] in, - int inOff, - int len) - { - // - // fill the current word - // - while ((xBufOff != 0) && (len > 0)) - { - update(in[inOff]); - - inOff++; - len--; - } - - // - // process whole words. - // - while (len > xBuf.length) - { - processWord(in, inOff); - - inOff += xBuf.length; - len -= xBuf.length; - byteCount += xBuf.length; - } - - // - // load in the remainder. - // - while (len > 0) - { - update(in[inOff]); - - inOff++; - len--; - } - } - - public void finish() - { - long bitLength = (byteCount << 3); - - // - // add the pad bytes. - // - update((byte)128); - - while (xBufOff != 0) - { - update((byte)0); - } - - processLength(bitLength); - - processBlock(); - } - - public void reset() - { - byteCount = 0; - - xBufOff = 0; - for (int i = 0; i < xBuf.length; i++) - { - xBuf[i] = 0; - } - } - - public int getByteLength() - { - return BYTE_LENGTH; - } - - protected abstract void processWord(byte[] in, int inOff); - - protected abstract void processLength(long bitLength); - - protected abstract void processBlock(); -} diff --git a/src/org/bouncycastle/crypto/digests/LongDigest.java b/src/org/bouncycastle/crypto/digests/LongDigest.java deleted file mode 100644 index 22d457b..0000000 --- a/src/org/bouncycastle/crypto/digests/LongDigest.java +++ /dev/null @@ -1,354 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.ExtendedDigest; -import org.bouncycastle.crypto.util.Pack; - -/** - * Base class for SHA-384 and SHA-512. - */ -public abstract class LongDigest - implements ExtendedDigest -{ - private static final int BYTE_LENGTH = 128; - - private byte[] xBuf; - private int xBufOff; - - private long byteCount1; - private long byteCount2; - - protected long H1, H2, H3, H4, H5, H6, H7, H8; - - private long[] W = new long[80]; - private int wOff; - - /** - * Constructor for variable length word - */ - protected LongDigest() - { - xBuf = new byte[8]; - xBufOff = 0; - - reset(); - } - - /** - * Copy constructor. We are using copy constructors in place - * of the Object.clone() interface as this interface is not - * supported by J2ME. - */ - protected LongDigest(LongDigest t) - { - xBuf = new byte[t.xBuf.length]; - System.arraycopy(t.xBuf, 0, xBuf, 0, t.xBuf.length); - - xBufOff = t.xBufOff; - byteCount1 = t.byteCount1; - byteCount2 = t.byteCount2; - - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - H5 = t.H5; - H6 = t.H6; - H7 = t.H7; - H8 = t.H8; - - System.arraycopy(t.W, 0, W, 0, t.W.length); - wOff = t.wOff; - } - - public void update( - byte in) - { - xBuf[xBufOff++] = in; - - if (xBufOff == xBuf.length) - { - processWord(xBuf, 0); - xBufOff = 0; - } - - byteCount1++; - } - - public void update( - byte[] in, - int inOff, - int len) - { - // - // fill the current word - // - while ((xBufOff != 0) && (len > 0)) - { - update(in[inOff]); - - inOff++; - len--; - } - - // - // process whole words. - // - while (len > xBuf.length) - { - processWord(in, inOff); - - inOff += xBuf.length; - len -= xBuf.length; - byteCount1 += xBuf.length; - } - - // - // load in the remainder. - // - while (len > 0) - { - update(in[inOff]); - - inOff++; - len--; - } - } - - public void finish() - { - adjustByteCounts(); - - long lowBitLength = byteCount1 << 3; - long hiBitLength = byteCount2; - - // - // add the pad bytes. - // - update((byte)128); - - while (xBufOff != 0) - { - update((byte)0); - } - - processLength(lowBitLength, hiBitLength); - - processBlock(); - } - - public void reset() - { - byteCount1 = 0; - byteCount2 = 0; - - xBufOff = 0; - for (int i = 0; i < xBuf.length; i++) - { - xBuf[i] = 0; - } - - wOff = 0; - for (int i = 0; i != W.length; i++) - { - W[i] = 0; - } - } - - public int getByteLength() - { - return BYTE_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - W[wOff] = Pack.bigEndianToLong(in, inOff); - - if (++wOff == 16) - { - processBlock(); - } - } - - /** - * adjust the byte counts so that byteCount2 represents the - * upper long (less 3 bits) word of the byte count. - */ - private void adjustByteCounts() - { - if (byteCount1 > 0x1fffffffffffffffL) - { - byteCount2 += (byteCount1 >>> 61); - byteCount1 &= 0x1fffffffffffffffL; - } - } - - protected void processLength( - long lowW, - long hiW) - { - if (wOff > 14) - { - processBlock(); - } - - W[14] = hiW; - W[15] = lowW; - } - - protected void processBlock() - { - adjustByteCounts(); - - // - // expand 16 word block into 80 word blocks. - // - for (int t = 16; t <= 79; t++) - { - W[t] = Sigma1(W[t - 2]) + W[t - 7] + Sigma0(W[t - 15]) + W[t - 16]; - } - - // - // set up working variables. - // - long a = H1; - long b = H2; - long c = H3; - long d = H4; - long e = H5; - long f = H6; - long g = H7; - long h = H8; - - int t = 0; - for(int i = 0; i < 10; i ++) - { - // t = 8 * i - h += Sum1(e) + Ch(e, f, g) + K[t] + W[t++]; - d += h; - h += Sum0(a) + Maj(a, b, c); - - // t = 8 * i + 1 - g += Sum1(d) + Ch(d, e, f) + K[t] + W[t++]; - c += g; - g += Sum0(h) + Maj(h, a, b); - - // t = 8 * i + 2 - f += Sum1(c) + Ch(c, d, e) + K[t] + W[t++]; - b += f; - f += Sum0(g) + Maj(g, h, a); - - // t = 8 * i + 3 - e += Sum1(b) + Ch(b, c, d) + K[t] + W[t++]; - a += e; - e += Sum0(f) + Maj(f, g, h); - - // t = 8 * i + 4 - d += Sum1(a) + Ch(a, b, c) + K[t] + W[t++]; - h += d; - d += Sum0(e) + Maj(e, f, g); - - // t = 8 * i + 5 - c += Sum1(h) + Ch(h, a, b) + K[t] + W[t++]; - g += c; - c += Sum0(d) + Maj(d, e, f); - - // t = 8 * i + 6 - b += Sum1(g) + Ch(g, h, a) + K[t] + W[t++]; - f += b; - b += Sum0(c) + Maj(c, d, e); - - // t = 8 * i + 7 - a += Sum1(f) + Ch(f, g, h) + K[t] + W[t++]; - e += a; - a += Sum0(b) + Maj(b, c, d); - } - - H1 += a; - H2 += b; - H3 += c; - H4 += d; - H5 += e; - H6 += f; - H7 += g; - H8 += h; - - // - // reset the offset and clean out the word buffer. - // - wOff = 0; - for (int i = 0; i < 16; i++) - { - W[i] = 0; - } - } - - /* SHA-384 and SHA-512 functions (as for SHA-256 but for longs) */ - private long Ch( - long x, - long y, - long z) - { - return ((x & y) ^ ((~x) & z)); - } - - private long Maj( - long x, - long y, - long z) - { - return ((x & y) ^ (x & z) ^ (y & z)); - } - - private long Sum0( - long x) - { - return ((x << 36)|(x >>> 28)) ^ ((x << 30)|(x >>> 34)) ^ ((x << 25)|(x >>> 39)); - } - - private long Sum1( - long x) - { - return ((x << 50)|(x >>> 14)) ^ ((x << 46)|(x >>> 18)) ^ ((x << 23)|(x >>> 41)); - } - - private long Sigma0( - long x) - { - return ((x << 63)|(x >>> 1)) ^ ((x << 56)|(x >>> 8)) ^ (x >>> 7); - } - - private long Sigma1( - long x) - { - return ((x << 45)|(x >>> 19)) ^ ((x << 3)|(x >>> 61)) ^ (x >>> 6); - } - - /* SHA-384 and SHA-512 Constants - * (represent the first 64 bits of the fractional parts of the - * cube roots of the first sixty-four prime numbers) - */ - static final long K[] = { -0x428a2f98d728ae22L, 0x7137449123ef65cdL, 0xb5c0fbcfec4d3b2fL, 0xe9b5dba58189dbbcL, -0x3956c25bf348b538L, 0x59f111f1b605d019L, 0x923f82a4af194f9bL, 0xab1c5ed5da6d8118L, -0xd807aa98a3030242L, 0x12835b0145706fbeL, 0x243185be4ee4b28cL, 0x550c7dc3d5ffb4e2L, -0x72be5d74f27b896fL, 0x80deb1fe3b1696b1L, 0x9bdc06a725c71235L, 0xc19bf174cf692694L, -0xe49b69c19ef14ad2L, 0xefbe4786384f25e3L, 0x0fc19dc68b8cd5b5L, 0x240ca1cc77ac9c65L, -0x2de92c6f592b0275L, 0x4a7484aa6ea6e483L, 0x5cb0a9dcbd41fbd4L, 0x76f988da831153b5L, -0x983e5152ee66dfabL, 0xa831c66d2db43210L, 0xb00327c898fb213fL, 0xbf597fc7beef0ee4L, -0xc6e00bf33da88fc2L, 0xd5a79147930aa725L, 0x06ca6351e003826fL, 0x142929670a0e6e70L, -0x27b70a8546d22ffcL, 0x2e1b21385c26c926L, 0x4d2c6dfc5ac42aedL, 0x53380d139d95b3dfL, -0x650a73548baf63deL, 0x766a0abb3c77b2a8L, 0x81c2c92e47edaee6L, 0x92722c851482353bL, -0xa2bfe8a14cf10364L, 0xa81a664bbc423001L, 0xc24b8b70d0f89791L, 0xc76c51a30654be30L, -0xd192e819d6ef5218L, 0xd69906245565a910L, 0xf40e35855771202aL, 0x106aa07032bbd1b8L, -0x19a4c116b8d2d0c8L, 0x1e376c085141ab53L, 0x2748774cdf8eeb99L, 0x34b0bcb5e19b48a8L, -0x391c0cb3c5c95a63L, 0x4ed8aa4ae3418acbL, 0x5b9cca4f7763e373L, 0x682e6ff3d6b2b8a3L, -0x748f82ee5defb2fcL, 0x78a5636f43172f60L, 0x84c87814a1f0ab72L, 0x8cc702081a6439ecL, -0x90befffa23631e28L, 0xa4506cebde82bde9L, 0xbef9a3f7b2c67915L, 0xc67178f2e372532bL, -0xca273eceea26619cL, 0xd186b8c721c0c207L, 0xeada7dd6cde0eb1eL, 0xf57d4f7fee6ed178L, -0x06f067aa72176fbaL, 0x0a637dc5a2c898a6L, 0x113f9804bef90daeL, 0x1b710b35131c471bL, -0x28db77f523047d84L, 0x32caab7b40c72493L, 0x3c9ebe0a15c9bebcL, 0x431d67c49c100d4cL, -0x4cc5d4becb3e42b6L, 0x597f299cfc657e2aL, 0x5fcb6fab3ad6faecL, 0x6c44198c4a475817L - }; -} diff --git a/src/org/bouncycastle/crypto/digests/MD2Digest.java b/src/org/bouncycastle/crypto/digests/MD2Digest.java deleted file mode 100644 index 0edafbc..0000000 --- a/src/org/bouncycastle/crypto/digests/MD2Digest.java +++ /dev/null @@ -1,237 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.*; -/** - * implementation of MD2 - * as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 - */ -public class MD2Digest - implements ExtendedDigest -{ - private static final int DIGEST_LENGTH = 16; - - /* X buffer */ - private byte[] X = new byte[48]; - private int xOff; - /* M buffer */ - private byte[] M = new byte[16]; - private int mOff; - /* check sum */ - private byte[] C = new byte[16]; - private int COff; - - public MD2Digest() - { - reset(); - } - public MD2Digest(MD2Digest t) - { - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - System.arraycopy(t.M, 0, M, 0, t.M.length); - mOff = t.mOff; - System.arraycopy(t.C, 0, C, 0, t.C.length); - COff = t.COff; - } - /** - * return the algorithm name - * - * @return the algorithm name - */ - public String getAlgorithmName() - { - return "MD2"; - } - /** - * return the size, in bytes, of the digest produced by this message digest. - * - * @return the size, in bytes, of the digest produced by this message digest. - */ - public int getDigestSize() - { - return DIGEST_LENGTH; - } - /** - * close the digest, producing the final digest value. The doFinal - * call leaves the digest reset. - * - * @param out the array the digest is to be copied into. - * @param outOff the offset into the out array the digest is to start at. - */ - public int doFinal(byte[] out, int outOff) - { - // add padding - byte paddingByte = (byte)(M.length-mOff); - for (int i=mOff;i 0)) - { - update(in[inOff]); - inOff++; - len--; - } - - // - // process whole words. - // - while (len > 16) - { - System.arraycopy(in,inOff,M,0,16); - processCheckSum(M); - processBlock(M); - len -= 16; - inOff += 16; - } - - // - // load in the remainder. - // - while (len > 0) - { - update(in[inOff]); - inOff++; - len--; - } - } - protected void processCheckSum(byte[] m) - { - int L = C[15]; - for (int i=0;i<16;i++) - { - C[i] ^= S[(m[i] ^ L) & 0xff]; - L = C[i]; - } - } - protected void processBlock(byte[] m) - { - for (int i=0;i<16;i++) - { - X[i+16] = m[i]; - X[i+32] = (byte)(m[i] ^ X[i]); - } - // encrypt block - int t = 0; - - for (int j=0;j<18;j++) - { - for (int k=0;k<48;k++) - { - t = X[k] ^= S[t]; - t = t & 0xff; - } - t = (t + j)%256; - } - } - // 256-byte random permutation constructed from the digits of PI - private static final byte[] S = { - (byte)41,(byte)46,(byte)67,(byte)201,(byte)162,(byte)216,(byte)124, - (byte)1,(byte)61,(byte)54,(byte)84,(byte)161,(byte)236,(byte)240, - (byte)6,(byte)19,(byte)98,(byte)167,(byte)5,(byte)243,(byte)192, - (byte)199,(byte)115,(byte)140,(byte)152,(byte)147,(byte)43,(byte)217, - (byte)188,(byte)76,(byte)130,(byte)202,(byte)30,(byte)155,(byte)87, - (byte)60,(byte)253,(byte)212,(byte)224,(byte)22,(byte)103,(byte)66, - (byte)111,(byte)24,(byte)138,(byte)23,(byte)229,(byte)18,(byte)190, - (byte)78,(byte)196,(byte)214,(byte)218,(byte)158,(byte)222,(byte)73, - (byte)160,(byte)251,(byte)245,(byte)142,(byte)187,(byte)47,(byte)238, - (byte)122,(byte)169,(byte)104,(byte)121,(byte)145,(byte)21,(byte)178, - (byte)7,(byte)63,(byte)148,(byte)194,(byte)16,(byte)137,(byte)11, - (byte)34,(byte)95,(byte)33,(byte)128,(byte)127,(byte)93,(byte)154, - (byte)90,(byte)144,(byte)50,(byte)39,(byte)53,(byte)62,(byte)204, - (byte)231,(byte)191,(byte)247,(byte)151,(byte)3,(byte)255,(byte)25, - (byte)48,(byte)179,(byte)72,(byte)165,(byte)181,(byte)209,(byte)215, - (byte)94,(byte)146,(byte)42,(byte)172,(byte)86,(byte)170,(byte)198, - (byte)79,(byte)184,(byte)56,(byte)210,(byte)150,(byte)164,(byte)125, - (byte)182,(byte)118,(byte)252,(byte)107,(byte)226,(byte)156,(byte)116, - (byte)4,(byte)241,(byte)69,(byte)157,(byte)112,(byte)89,(byte)100, - (byte)113,(byte)135,(byte)32,(byte)134,(byte)91,(byte)207,(byte)101, - (byte)230,(byte)45,(byte)168,(byte)2,(byte)27,(byte)96,(byte)37, - (byte)173,(byte)174,(byte)176,(byte)185,(byte)246,(byte)28,(byte)70, - (byte)97,(byte)105,(byte)52,(byte)64,(byte)126,(byte)15,(byte)85, - (byte)71,(byte)163,(byte)35,(byte)221,(byte)81,(byte)175,(byte)58, - (byte)195,(byte)92,(byte)249,(byte)206,(byte)186,(byte)197,(byte)234, - (byte)38,(byte)44,(byte)83,(byte)13,(byte)110,(byte)133,(byte)40, - (byte)132, 9,(byte)211,(byte)223,(byte)205,(byte)244,(byte)65, - (byte)129,(byte)77,(byte)82,(byte)106,(byte)220,(byte)55,(byte)200, - (byte)108,(byte)193,(byte)171,(byte)250,(byte)36,(byte)225,(byte)123, - (byte)8,(byte)12,(byte)189,(byte)177,(byte)74,(byte)120,(byte)136, - (byte)149,(byte)139,(byte)227,(byte)99,(byte)232,(byte)109,(byte)233, - (byte)203,(byte)213,(byte)254,(byte)59,(byte)0,(byte)29,(byte)57, - (byte)242,(byte)239,(byte)183,(byte)14,(byte)102,(byte)88,(byte)208, - (byte)228,(byte)166,(byte)119,(byte)114,(byte)248,(byte)235,(byte)117, - (byte)75,(byte)10,(byte)49,(byte)68,(byte)80,(byte)180,(byte)143, - (byte)237,(byte)31,(byte)26,(byte)219,(byte)153,(byte)141,(byte)51, - (byte)159,(byte)17,(byte)131,(byte)20 - }; - - public int getByteLength() - { - return 16; - } -} - - diff --git a/src/org/bouncycastle/crypto/digests/MD4Digest.java b/src/org/bouncycastle/crypto/digests/MD4Digest.java deleted file mode 100644 index 2a8084f..0000000 --- a/src/org/bouncycastle/crypto/digests/MD4Digest.java +++ /dev/null @@ -1,270 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -/** - * implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for - * Computer Science and RSA Data Security, Inc. - *

        - * NOTE: This algorithm is only included for backwards compatability - * with legacy applications, it's not secure, don't use it for anything new! - */ -public class MD4Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 16; - - private int H1, H2, H3, H4; // IV's - - private int[] X = new int[16]; - private int xOff; - - /** - * Standard constructor - */ - public MD4Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public MD4Digest(MD4Digest t) - { - super(t); - - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "MD4"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) - | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); - - if (xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength & 0xffffffff); - X[15] = (int)(bitLength >>> 32); - } - - private void unpackWord( - int word, - byte[] out, - int outOff) - { - out[outOff] = (byte)word; - out[outOff + 1] = (byte)(word >>> 8); - out[outOff + 2] = (byte)(word >>> 16); - out[outOff + 3] = (byte)(word >>> 24); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - unpackWord(H1, out, outOff); - unpackWord(H2, out, outOff + 4); - unpackWord(H3, out, outOff + 8); - unpackWord(H4, out, outOff + 12); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables to the IV values. - */ - public void reset() - { - super.reset(); - - H1 = 0x67452301; - H2 = 0xefcdab89; - H3 = 0x98badcfe; - H4 = 0x10325476; - - xOff = 0; - - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - // - // round 1 left rotates - // - private static final int S11 = 3; - private static final int S12 = 7; - private static final int S13 = 11; - private static final int S14 = 19; - - // - // round 2 left rotates - // - private static final int S21 = 3; - private static final int S22 = 5; - private static final int S23 = 9; - private static final int S24 = 13; - - // - // round 3 left rotates - // - private static final int S31 = 3; - private static final int S32 = 9; - private static final int S33 = 11; - private static final int S34 = 15; - - /* - * rotate int x left n bits. - */ - private int rotateLeft( - int x, - int n) - { - return (x << n) | (x >>> (32 - n)); - } - - /* - * F, G, H and I are the basic MD4 functions. - */ - private int F( - int u, - int v, - int w) - { - return (u & v) | (~u & w); - } - - private int G( - int u, - int v, - int w) - { - return (u & v) | (u & w) | (v & w); - } - - private int H( - int u, - int v, - int w) - { - return u ^ v ^ w; - } - - protected void processBlock() - { - int a = H1; - int b = H2; - int c = H3; - int d = H4; - - // - // Round 1 - F cycle, 16 times. - // - a = rotateLeft(a + F(b, c, d) + X[ 0], S11); - d = rotateLeft(d + F(a, b, c) + X[ 1], S12); - c = rotateLeft(c + F(d, a, b) + X[ 2], S13); - b = rotateLeft(b + F(c, d, a) + X[ 3], S14); - a = rotateLeft(a + F(b, c, d) + X[ 4], S11); - d = rotateLeft(d + F(a, b, c) + X[ 5], S12); - c = rotateLeft(c + F(d, a, b) + X[ 6], S13); - b = rotateLeft(b + F(c, d, a) + X[ 7], S14); - a = rotateLeft(a + F(b, c, d) + X[ 8], S11); - d = rotateLeft(d + F(a, b, c) + X[ 9], S12); - c = rotateLeft(c + F(d, a, b) + X[10], S13); - b = rotateLeft(b + F(c, d, a) + X[11], S14); - a = rotateLeft(a + F(b, c, d) + X[12], S11); - d = rotateLeft(d + F(a, b, c) + X[13], S12); - c = rotateLeft(c + F(d, a, b) + X[14], S13); - b = rotateLeft(b + F(c, d, a) + X[15], S14); - - // - // Round 2 - G cycle, 16 times. - // - a = rotateLeft(a + G(b, c, d) + X[ 0] + 0x5a827999, S21); - d = rotateLeft(d + G(a, b, c) + X[ 4] + 0x5a827999, S22); - c = rotateLeft(c + G(d, a, b) + X[ 8] + 0x5a827999, S23); - b = rotateLeft(b + G(c, d, a) + X[12] + 0x5a827999, S24); - a = rotateLeft(a + G(b, c, d) + X[ 1] + 0x5a827999, S21); - d = rotateLeft(d + G(a, b, c) + X[ 5] + 0x5a827999, S22); - c = rotateLeft(c + G(d, a, b) + X[ 9] + 0x5a827999, S23); - b = rotateLeft(b + G(c, d, a) + X[13] + 0x5a827999, S24); - a = rotateLeft(a + G(b, c, d) + X[ 2] + 0x5a827999, S21); - d = rotateLeft(d + G(a, b, c) + X[ 6] + 0x5a827999, S22); - c = rotateLeft(c + G(d, a, b) + X[10] + 0x5a827999, S23); - b = rotateLeft(b + G(c, d, a) + X[14] + 0x5a827999, S24); - a = rotateLeft(a + G(b, c, d) + X[ 3] + 0x5a827999, S21); - d = rotateLeft(d + G(a, b, c) + X[ 7] + 0x5a827999, S22); - c = rotateLeft(c + G(d, a, b) + X[11] + 0x5a827999, S23); - b = rotateLeft(b + G(c, d, a) + X[15] + 0x5a827999, S24); - - // - // Round 3 - H cycle, 16 times. - // - a = rotateLeft(a + H(b, c, d) + X[ 0] + 0x6ed9eba1, S31); - d = rotateLeft(d + H(a, b, c) + X[ 8] + 0x6ed9eba1, S32); - c = rotateLeft(c + H(d, a, b) + X[ 4] + 0x6ed9eba1, S33); - b = rotateLeft(b + H(c, d, a) + X[12] + 0x6ed9eba1, S34); - a = rotateLeft(a + H(b, c, d) + X[ 2] + 0x6ed9eba1, S31); - d = rotateLeft(d + H(a, b, c) + X[10] + 0x6ed9eba1, S32); - c = rotateLeft(c + H(d, a, b) + X[ 6] + 0x6ed9eba1, S33); - b = rotateLeft(b + H(c, d, a) + X[14] + 0x6ed9eba1, S34); - a = rotateLeft(a + H(b, c, d) + X[ 1] + 0x6ed9eba1, S31); - d = rotateLeft(d + H(a, b, c) + X[ 9] + 0x6ed9eba1, S32); - c = rotateLeft(c + H(d, a, b) + X[ 5] + 0x6ed9eba1, S33); - b = rotateLeft(b + H(c, d, a) + X[13] + 0x6ed9eba1, S34); - a = rotateLeft(a + H(b, c, d) + X[ 3] + 0x6ed9eba1, S31); - d = rotateLeft(d + H(a, b, c) + X[11] + 0x6ed9eba1, S32); - c = rotateLeft(c + H(d, a, b) + X[ 7] + 0x6ed9eba1, S33); - b = rotateLeft(b + H(c, d, a) + X[15] + 0x6ed9eba1, S34); - - H1 += a; - H2 += b; - H3 += c; - H4 += d; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } -} diff --git a/src/org/bouncycastle/crypto/digests/MD5Digest.java b/src/org/bouncycastle/crypto/digests/MD5Digest.java deleted file mode 100644 index 05ed27a..0000000 --- a/src/org/bouncycastle/crypto/digests/MD5Digest.java +++ /dev/null @@ -1,302 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -/** - * implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. - */ -public class MD5Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 16; - - private int H1, H2, H3, H4; // IV's - - private int[] X = new int[16]; - private int xOff; - - /** - * Standard constructor - */ - public MD5Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public MD5Digest(MD5Digest t) - { - super(t); - - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "MD5"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) - | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); - - if (xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength & 0xffffffff); - X[15] = (int)(bitLength >>> 32); - } - - private void unpackWord( - int word, - byte[] out, - int outOff) - { - out[outOff] = (byte)word; - out[outOff + 1] = (byte)(word >>> 8); - out[outOff + 2] = (byte)(word >>> 16); - out[outOff + 3] = (byte)(word >>> 24); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - unpackWord(H1, out, outOff); - unpackWord(H2, out, outOff + 4); - unpackWord(H3, out, outOff + 8); - unpackWord(H4, out, outOff + 12); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables to the IV values. - */ - public void reset() - { - super.reset(); - - H1 = 0x67452301; - H2 = 0xefcdab89; - H3 = 0x98badcfe; - H4 = 0x10325476; - - xOff = 0; - - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - // - // round 1 left rotates - // - private static final int S11 = 7; - private static final int S12 = 12; - private static final int S13 = 17; - private static final int S14 = 22; - - // - // round 2 left rotates - // - private static final int S21 = 5; - private static final int S22 = 9; - private static final int S23 = 14; - private static final int S24 = 20; - - // - // round 3 left rotates - // - private static final int S31 = 4; - private static final int S32 = 11; - private static final int S33 = 16; - private static final int S34 = 23; - - // - // round 4 left rotates - // - private static final int S41 = 6; - private static final int S42 = 10; - private static final int S43 = 15; - private static final int S44 = 21; - - /* - * rotate int x left n bits. - */ - private int rotateLeft( - int x, - int n) - { - return (x << n) | (x >>> (32 - n)); - } - - /* - * F, G, H and I are the basic MD5 functions. - */ - private int F( - int u, - int v, - int w) - { - return (u & v) | (~u & w); - } - - private int G( - int u, - int v, - int w) - { - return (u & w) | (v & ~w); - } - - private int H( - int u, - int v, - int w) - { - return u ^ v ^ w; - } - - private int K( - int u, - int v, - int w) - { - return v ^ (u | ~w); - } - - protected void processBlock() - { - int a = H1; - int b = H2; - int c = H3; - int d = H4; - - // - // Round 1 - F cycle, 16 times. - // - a = rotateLeft(a + F(b, c, d) + X[ 0] + 0xd76aa478, S11) + b; - d = rotateLeft(d + F(a, b, c) + X[ 1] + 0xe8c7b756, S12) + a; - c = rotateLeft(c + F(d, a, b) + X[ 2] + 0x242070db, S13) + d; - b = rotateLeft(b + F(c, d, a) + X[ 3] + 0xc1bdceee, S14) + c; - a = rotateLeft(a + F(b, c, d) + X[ 4] + 0xf57c0faf, S11) + b; - d = rotateLeft(d + F(a, b, c) + X[ 5] + 0x4787c62a, S12) + a; - c = rotateLeft(c + F(d, a, b) + X[ 6] + 0xa8304613, S13) + d; - b = rotateLeft(b + F(c, d, a) + X[ 7] + 0xfd469501, S14) + c; - a = rotateLeft(a + F(b, c, d) + X[ 8] + 0x698098d8, S11) + b; - d = rotateLeft(d + F(a, b, c) + X[ 9] + 0x8b44f7af, S12) + a; - c = rotateLeft(c + F(d, a, b) + X[10] + 0xffff5bb1, S13) + d; - b = rotateLeft(b + F(c, d, a) + X[11] + 0x895cd7be, S14) + c; - a = rotateLeft(a + F(b, c, d) + X[12] + 0x6b901122, S11) + b; - d = rotateLeft(d + F(a, b, c) + X[13] + 0xfd987193, S12) + a; - c = rotateLeft(c + F(d, a, b) + X[14] + 0xa679438e, S13) + d; - b = rotateLeft(b + F(c, d, a) + X[15] + 0x49b40821, S14) + c; - - // - // Round 2 - G cycle, 16 times. - // - a = rotateLeft(a + G(b, c, d) + X[ 1] + 0xf61e2562, S21) + b; - d = rotateLeft(d + G(a, b, c) + X[ 6] + 0xc040b340, S22) + a; - c = rotateLeft(c + G(d, a, b) + X[11] + 0x265e5a51, S23) + d; - b = rotateLeft(b + G(c, d, a) + X[ 0] + 0xe9b6c7aa, S24) + c; - a = rotateLeft(a + G(b, c, d) + X[ 5] + 0xd62f105d, S21) + b; - d = rotateLeft(d + G(a, b, c) + X[10] + 0x02441453, S22) + a; - c = rotateLeft(c + G(d, a, b) + X[15] + 0xd8a1e681, S23) + d; - b = rotateLeft(b + G(c, d, a) + X[ 4] + 0xe7d3fbc8, S24) + c; - a = rotateLeft(a + G(b, c, d) + X[ 9] + 0x21e1cde6, S21) + b; - d = rotateLeft(d + G(a, b, c) + X[14] + 0xc33707d6, S22) + a; - c = rotateLeft(c + G(d, a, b) + X[ 3] + 0xf4d50d87, S23) + d; - b = rotateLeft(b + G(c, d, a) + X[ 8] + 0x455a14ed, S24) + c; - a = rotateLeft(a + G(b, c, d) + X[13] + 0xa9e3e905, S21) + b; - d = rotateLeft(d + G(a, b, c) + X[ 2] + 0xfcefa3f8, S22) + a; - c = rotateLeft(c + G(d, a, b) + X[ 7] + 0x676f02d9, S23) + d; - b = rotateLeft(b + G(c, d, a) + X[12] + 0x8d2a4c8a, S24) + c; - - // - // Round 3 - H cycle, 16 times. - // - a = rotateLeft(a + H(b, c, d) + X[ 5] + 0xfffa3942, S31) + b; - d = rotateLeft(d + H(a, b, c) + X[ 8] + 0x8771f681, S32) + a; - c = rotateLeft(c + H(d, a, b) + X[11] + 0x6d9d6122, S33) + d; - b = rotateLeft(b + H(c, d, a) + X[14] + 0xfde5380c, S34) + c; - a = rotateLeft(a + H(b, c, d) + X[ 1] + 0xa4beea44, S31) + b; - d = rotateLeft(d + H(a, b, c) + X[ 4] + 0x4bdecfa9, S32) + a; - c = rotateLeft(c + H(d, a, b) + X[ 7] + 0xf6bb4b60, S33) + d; - b = rotateLeft(b + H(c, d, a) + X[10] + 0xbebfbc70, S34) + c; - a = rotateLeft(a + H(b, c, d) + X[13] + 0x289b7ec6, S31) + b; - d = rotateLeft(d + H(a, b, c) + X[ 0] + 0xeaa127fa, S32) + a; - c = rotateLeft(c + H(d, a, b) + X[ 3] + 0xd4ef3085, S33) + d; - b = rotateLeft(b + H(c, d, a) + X[ 6] + 0x04881d05, S34) + c; - a = rotateLeft(a + H(b, c, d) + X[ 9] + 0xd9d4d039, S31) + b; - d = rotateLeft(d + H(a, b, c) + X[12] + 0xe6db99e5, S32) + a; - c = rotateLeft(c + H(d, a, b) + X[15] + 0x1fa27cf8, S33) + d; - b = rotateLeft(b + H(c, d, a) + X[ 2] + 0xc4ac5665, S34) + c; - - // - // Round 4 - K cycle, 16 times. - // - a = rotateLeft(a + K(b, c, d) + X[ 0] + 0xf4292244, S41) + b; - d = rotateLeft(d + K(a, b, c) + X[ 7] + 0x432aff97, S42) + a; - c = rotateLeft(c + K(d, a, b) + X[14] + 0xab9423a7, S43) + d; - b = rotateLeft(b + K(c, d, a) + X[ 5] + 0xfc93a039, S44) + c; - a = rotateLeft(a + K(b, c, d) + X[12] + 0x655b59c3, S41) + b; - d = rotateLeft(d + K(a, b, c) + X[ 3] + 0x8f0ccc92, S42) + a; - c = rotateLeft(c + K(d, a, b) + X[10] + 0xffeff47d, S43) + d; - b = rotateLeft(b + K(c, d, a) + X[ 1] + 0x85845dd1, S44) + c; - a = rotateLeft(a + K(b, c, d) + X[ 8] + 0x6fa87e4f, S41) + b; - d = rotateLeft(d + K(a, b, c) + X[15] + 0xfe2ce6e0, S42) + a; - c = rotateLeft(c + K(d, a, b) + X[ 6] + 0xa3014314, S43) + d; - b = rotateLeft(b + K(c, d, a) + X[13] + 0x4e0811a1, S44) + c; - a = rotateLeft(a + K(b, c, d) + X[ 4] + 0xf7537e82, S41) + b; - d = rotateLeft(d + K(a, b, c) + X[11] + 0xbd3af235, S42) + a; - c = rotateLeft(c + K(d, a, b) + X[ 2] + 0x2ad7d2bb, S43) + d; - b = rotateLeft(b + K(c, d, a) + X[ 9] + 0xeb86d391, S44) + c; - - H1 += a; - H2 += b; - H3 += c; - H4 += d; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } -} diff --git a/src/org/bouncycastle/crypto/digests/NullDigest.java b/src/org/bouncycastle/crypto/digests/NullDigest.java deleted file mode 100644 index 6cb0d4a..0000000 --- a/src/org/bouncycastle/crypto/digests/NullDigest.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import java.io.ByteArrayOutputStream; - -import org.bouncycastle.crypto.Digest; - - -public class NullDigest - implements Digest -{ - private ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - public String getAlgorithmName() - { - return "NULL"; - } - - public int getDigestSize() - { - return bOut.size(); - } - - public void update(byte in) - { - bOut.write(in); - } - - public void update(byte[] in, int inOff, int len) - { - bOut.write(in, inOff, len); - } - - public int doFinal(byte[] out, int outOff) - { - byte[] res = bOut.toByteArray(); - - System.arraycopy(res, 0, out, outOff, res.length); - - reset(); - - return res.length; - } - - public void reset() - { - bOut.reset(); - } -} \ No newline at end of file diff --git a/src/org/bouncycastle/crypto/digests/RIPEMD128Digest.java b/src/org/bouncycastle/crypto/digests/RIPEMD128Digest.java deleted file mode 100644 index 46fd8b3..0000000 --- a/src/org/bouncycastle/crypto/digests/RIPEMD128Digest.java +++ /dev/null @@ -1,461 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -/** - * implementation of RIPEMD128 - */ -public class RIPEMD128Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 16; - - private int H0, H1, H2, H3; // IV's - - private int[] X = new int[16]; - private int xOff; - - /** - * Standard constructor - */ - public RIPEMD128Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public RIPEMD128Digest(RIPEMD128Digest t) - { - super(t); - - H0 = t.H0; - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "RIPEMD128"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) - | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); - - if (xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength & 0xffffffff); - X[15] = (int)(bitLength >>> 32); - } - - private void unpackWord( - int word, - byte[] out, - int outOff) - { - out[outOff] = (byte)word; - out[outOff + 1] = (byte)(word >>> 8); - out[outOff + 2] = (byte)(word >>> 16); - out[outOff + 3] = (byte)(word >>> 24); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - unpackWord(H0, out, outOff); - unpackWord(H1, out, outOff + 4); - unpackWord(H2, out, outOff + 8); - unpackWord(H3, out, outOff + 12); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables to the IV values. - */ - public void reset() - { - super.reset(); - - H0 = 0x67452301; - H1 = 0xefcdab89; - H2 = 0x98badcfe; - H3 = 0x10325476; - - xOff = 0; - - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - /* - * rotate int x left n bits. - */ - private int RL( - int x, - int n) - { - return (x << n) | (x >>> (32 - n)); - } - - /* - * f1,f2,f3,f4 are the basic RIPEMD128 functions. - */ - - /* - * F - */ - private int f1( - int x, - int y, - int z) - { - return x ^ y ^ z; - } - - /* - * G - */ - private int f2( - int x, - int y, - int z) - { - return (x & y) | (~x & z); - } - - /* - * H - */ - private int f3( - int x, - int y, - int z) - { - return (x | ~y) ^ z; - } - - /* - * I - */ - private int f4( - int x, - int y, - int z) - { - return (x & z) | (y & ~z); - } - - private int F1( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f1(b, c, d) + x, s); - } - - private int F2( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f2(b, c, d) + x + 0x5a827999, s); - } - - private int F3( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f3(b, c, d) + x + 0x6ed9eba1, s); - } - - private int F4( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f4(b, c, d) + x + 0x8f1bbcdc, s); - } - - private int FF1( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f1(b, c, d) + x, s); - } - - private int FF2( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f2(b, c, d) + x + 0x6d703ef3, s); - } - - private int FF3( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f3(b, c, d) + x + 0x5c4dd124, s); - } - - private int FF4( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f4(b, c, d) + x + 0x50a28be6, s); - } - - protected void processBlock() - { - int a, aa; - int b, bb; - int c, cc; - int d, dd; - - a = aa = H0; - b = bb = H1; - c = cc = H2; - d = dd = H3; - - // - // Round 1 - // - a = F1(a, b, c, d, X[ 0], 11); - d = F1(d, a, b, c, X[ 1], 14); - c = F1(c, d, a, b, X[ 2], 15); - b = F1(b, c, d, a, X[ 3], 12); - a = F1(a, b, c, d, X[ 4], 5); - d = F1(d, a, b, c, X[ 5], 8); - c = F1(c, d, a, b, X[ 6], 7); - b = F1(b, c, d, a, X[ 7], 9); - a = F1(a, b, c, d, X[ 8], 11); - d = F1(d, a, b, c, X[ 9], 13); - c = F1(c, d, a, b, X[10], 14); - b = F1(b, c, d, a, X[11], 15); - a = F1(a, b, c, d, X[12], 6); - d = F1(d, a, b, c, X[13], 7); - c = F1(c, d, a, b, X[14], 9); - b = F1(b, c, d, a, X[15], 8); - - // - // Round 2 - // - a = F2(a, b, c, d, X[ 7], 7); - d = F2(d, a, b, c, X[ 4], 6); - c = F2(c, d, a, b, X[13], 8); - b = F2(b, c, d, a, X[ 1], 13); - a = F2(a, b, c, d, X[10], 11); - d = F2(d, a, b, c, X[ 6], 9); - c = F2(c, d, a, b, X[15], 7); - b = F2(b, c, d, a, X[ 3], 15); - a = F2(a, b, c, d, X[12], 7); - d = F2(d, a, b, c, X[ 0], 12); - c = F2(c, d, a, b, X[ 9], 15); - b = F2(b, c, d, a, X[ 5], 9); - a = F2(a, b, c, d, X[ 2], 11); - d = F2(d, a, b, c, X[14], 7); - c = F2(c, d, a, b, X[11], 13); - b = F2(b, c, d, a, X[ 8], 12); - - // - // Round 3 - // - a = F3(a, b, c, d, X[ 3], 11); - d = F3(d, a, b, c, X[10], 13); - c = F3(c, d, a, b, X[14], 6); - b = F3(b, c, d, a, X[ 4], 7); - a = F3(a, b, c, d, X[ 9], 14); - d = F3(d, a, b, c, X[15], 9); - c = F3(c, d, a, b, X[ 8], 13); - b = F3(b, c, d, a, X[ 1], 15); - a = F3(a, b, c, d, X[ 2], 14); - d = F3(d, a, b, c, X[ 7], 8); - c = F3(c, d, a, b, X[ 0], 13); - b = F3(b, c, d, a, X[ 6], 6); - a = F3(a, b, c, d, X[13], 5); - d = F3(d, a, b, c, X[11], 12); - c = F3(c, d, a, b, X[ 5], 7); - b = F3(b, c, d, a, X[12], 5); - - // - // Round 4 - // - a = F4(a, b, c, d, X[ 1], 11); - d = F4(d, a, b, c, X[ 9], 12); - c = F4(c, d, a, b, X[11], 14); - b = F4(b, c, d, a, X[10], 15); - a = F4(a, b, c, d, X[ 0], 14); - d = F4(d, a, b, c, X[ 8], 15); - c = F4(c, d, a, b, X[12], 9); - b = F4(b, c, d, a, X[ 4], 8); - a = F4(a, b, c, d, X[13], 9); - d = F4(d, a, b, c, X[ 3], 14); - c = F4(c, d, a, b, X[ 7], 5); - b = F4(b, c, d, a, X[15], 6); - a = F4(a, b, c, d, X[14], 8); - d = F4(d, a, b, c, X[ 5], 6); - c = F4(c, d, a, b, X[ 6], 5); - b = F4(b, c, d, a, X[ 2], 12); - - // - // Parallel round 1 - // - aa = FF4(aa, bb, cc, dd, X[ 5], 8); - dd = FF4(dd, aa, bb, cc, X[14], 9); - cc = FF4(cc, dd, aa, bb, X[ 7], 9); - bb = FF4(bb, cc, dd, aa, X[ 0], 11); - aa = FF4(aa, bb, cc, dd, X[ 9], 13); - dd = FF4(dd, aa, bb, cc, X[ 2], 15); - cc = FF4(cc, dd, aa, bb, X[11], 15); - bb = FF4(bb, cc, dd, aa, X[ 4], 5); - aa = FF4(aa, bb, cc, dd, X[13], 7); - dd = FF4(dd, aa, bb, cc, X[ 6], 7); - cc = FF4(cc, dd, aa, bb, X[15], 8); - bb = FF4(bb, cc, dd, aa, X[ 8], 11); - aa = FF4(aa, bb, cc, dd, X[ 1], 14); - dd = FF4(dd, aa, bb, cc, X[10], 14); - cc = FF4(cc, dd, aa, bb, X[ 3], 12); - bb = FF4(bb, cc, dd, aa, X[12], 6); - - // - // Parallel round 2 - // - aa = FF3(aa, bb, cc, dd, X[ 6], 9); - dd = FF3(dd, aa, bb, cc, X[11], 13); - cc = FF3(cc, dd, aa, bb, X[ 3], 15); - bb = FF3(bb, cc, dd, aa, X[ 7], 7); - aa = FF3(aa, bb, cc, dd, X[ 0], 12); - dd = FF3(dd, aa, bb, cc, X[13], 8); - cc = FF3(cc, dd, aa, bb, X[ 5], 9); - bb = FF3(bb, cc, dd, aa, X[10], 11); - aa = FF3(aa, bb, cc, dd, X[14], 7); - dd = FF3(dd, aa, bb, cc, X[15], 7); - cc = FF3(cc, dd, aa, bb, X[ 8], 12); - bb = FF3(bb, cc, dd, aa, X[12], 7); - aa = FF3(aa, bb, cc, dd, X[ 4], 6); - dd = FF3(dd, aa, bb, cc, X[ 9], 15); - cc = FF3(cc, dd, aa, bb, X[ 1], 13); - bb = FF3(bb, cc, dd, aa, X[ 2], 11); - - // - // Parallel round 3 - // - aa = FF2(aa, bb, cc, dd, X[15], 9); - dd = FF2(dd, aa, bb, cc, X[ 5], 7); - cc = FF2(cc, dd, aa, bb, X[ 1], 15); - bb = FF2(bb, cc, dd, aa, X[ 3], 11); - aa = FF2(aa, bb, cc, dd, X[ 7], 8); - dd = FF2(dd, aa, bb, cc, X[14], 6); - cc = FF2(cc, dd, aa, bb, X[ 6], 6); - bb = FF2(bb, cc, dd, aa, X[ 9], 14); - aa = FF2(aa, bb, cc, dd, X[11], 12); - dd = FF2(dd, aa, bb, cc, X[ 8], 13); - cc = FF2(cc, dd, aa, bb, X[12], 5); - bb = FF2(bb, cc, dd, aa, X[ 2], 14); - aa = FF2(aa, bb, cc, dd, X[10], 13); - dd = FF2(dd, aa, bb, cc, X[ 0], 13); - cc = FF2(cc, dd, aa, bb, X[ 4], 7); - bb = FF2(bb, cc, dd, aa, X[13], 5); - - // - // Parallel round 4 - // - aa = FF1(aa, bb, cc, dd, X[ 8], 15); - dd = FF1(dd, aa, bb, cc, X[ 6], 5); - cc = FF1(cc, dd, aa, bb, X[ 4], 8); - bb = FF1(bb, cc, dd, aa, X[ 1], 11); - aa = FF1(aa, bb, cc, dd, X[ 3], 14); - dd = FF1(dd, aa, bb, cc, X[11], 14); - cc = FF1(cc, dd, aa, bb, X[15], 6); - bb = FF1(bb, cc, dd, aa, X[ 0], 14); - aa = FF1(aa, bb, cc, dd, X[ 5], 6); - dd = FF1(dd, aa, bb, cc, X[12], 9); - cc = FF1(cc, dd, aa, bb, X[ 2], 12); - bb = FF1(bb, cc, dd, aa, X[13], 9); - aa = FF1(aa, bb, cc, dd, X[ 9], 12); - dd = FF1(dd, aa, bb, cc, X[ 7], 5); - cc = FF1(cc, dd, aa, bb, X[10], 15); - bb = FF1(bb, cc, dd, aa, X[14], 8); - - dd += c + H1; // final result for H0 - - // - // combine the results - // - H1 = H2 + d + aa; - H2 = H3 + a + bb; - H3 = H0 + b + cc; - H0 = dd; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } -} diff --git a/src/org/bouncycastle/crypto/digests/RIPEMD160Digest.java b/src/org/bouncycastle/crypto/digests/RIPEMD160Digest.java deleted file mode 100644 index 2351357..0000000 --- a/src/org/bouncycastle/crypto/digests/RIPEMD160Digest.java +++ /dev/null @@ -1,422 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -/** - * implementation of RIPEMD see, - * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html - */ -public class RIPEMD160Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 20; - - private int H0, H1, H2, H3, H4; // IV's - - private int[] X = new int[16]; - private int xOff; - - /** - * Standard constructor - */ - public RIPEMD160Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public RIPEMD160Digest(RIPEMD160Digest t) - { - super(t); - - H0 = t.H0; - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "RIPEMD160"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) - | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); - - if (xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength & 0xffffffff); - X[15] = (int)(bitLength >>> 32); - } - - private void unpackWord( - int word, - byte[] out, - int outOff) - { - out[outOff] = (byte)word; - out[outOff + 1] = (byte)(word >>> 8); - out[outOff + 2] = (byte)(word >>> 16); - out[outOff + 3] = (byte)(word >>> 24); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - unpackWord(H0, out, outOff); - unpackWord(H1, out, outOff + 4); - unpackWord(H2, out, outOff + 8); - unpackWord(H3, out, outOff + 12); - unpackWord(H4, out, outOff + 16); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables to the IV values. - */ - public void reset() - { - super.reset(); - - H0 = 0x67452301; - H1 = 0xefcdab89; - H2 = 0x98badcfe; - H3 = 0x10325476; - H4 = 0xc3d2e1f0; - - xOff = 0; - - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - /* - * rotate int x left n bits. - */ - private int RL( - int x, - int n) - { - return (x << n) | (x >>> (32 - n)); - } - - /* - * f1,f2,f3,f4,f5 are the basic RIPEMD160 functions. - */ - - /* - * rounds 0-15 - */ - private int f1( - int x, - int y, - int z) - { - return x ^ y ^ z; - } - - /* - * rounds 16-31 - */ - private int f2( - int x, - int y, - int z) - { - return (x & y) | (~x & z); - } - - /* - * rounds 32-47 - */ - private int f3( - int x, - int y, - int z) - { - return (x | ~y) ^ z; - } - - /* - * rounds 48-63 - */ - private int f4( - int x, - int y, - int z) - { - return (x & z) | (y & ~z); - } - - /* - * rounds 64-79 - */ - private int f5( - int x, - int y, - int z) - { - return x ^ (y | ~z); - } - - protected void processBlock() - { - int a, aa; - int b, bb; - int c, cc; - int d, dd; - int e, ee; - - a = aa = H0; - b = bb = H1; - c = cc = H2; - d = dd = H3; - e = ee = H4; - - // - // Rounds 1 - 16 - // - // left - a = RL(a + f1(b,c,d) + X[ 0], 11) + e; c = RL(c, 10); - e = RL(e + f1(a,b,c) + X[ 1], 14) + d; b = RL(b, 10); - d = RL(d + f1(e,a,b) + X[ 2], 15) + c; a = RL(a, 10); - c = RL(c + f1(d,e,a) + X[ 3], 12) + b; e = RL(e, 10); - b = RL(b + f1(c,d,e) + X[ 4], 5) + a; d = RL(d, 10); - a = RL(a + f1(b,c,d) + X[ 5], 8) + e; c = RL(c, 10); - e = RL(e + f1(a,b,c) + X[ 6], 7) + d; b = RL(b, 10); - d = RL(d + f1(e,a,b) + X[ 7], 9) + c; a = RL(a, 10); - c = RL(c + f1(d,e,a) + X[ 8], 11) + b; e = RL(e, 10); - b = RL(b + f1(c,d,e) + X[ 9], 13) + a; d = RL(d, 10); - a = RL(a + f1(b,c,d) + X[10], 14) + e; c = RL(c, 10); - e = RL(e + f1(a,b,c) + X[11], 15) + d; b = RL(b, 10); - d = RL(d + f1(e,a,b) + X[12], 6) + c; a = RL(a, 10); - c = RL(c + f1(d,e,a) + X[13], 7) + b; e = RL(e, 10); - b = RL(b + f1(c,d,e) + X[14], 9) + a; d = RL(d, 10); - a = RL(a + f1(b,c,d) + X[15], 8) + e; c = RL(c, 10); - - // right - aa = RL(aa + f5(bb,cc,dd) + X[ 5] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); - ee = RL(ee + f5(aa,bb,cc) + X[14] + 0x50a28be6, 9) + dd; bb = RL(bb, 10); - dd = RL(dd + f5(ee,aa,bb) + X[ 7] + 0x50a28be6, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f5(dd,ee,aa) + X[ 0] + 0x50a28be6, 11) + bb; ee = RL(ee, 10); - bb = RL(bb + f5(cc,dd,ee) + X[ 9] + 0x50a28be6, 13) + aa; dd = RL(dd, 10); - aa = RL(aa + f5(bb,cc,dd) + X[ 2] + 0x50a28be6, 15) + ee; cc = RL(cc, 10); - ee = RL(ee + f5(aa,bb,cc) + X[11] + 0x50a28be6, 15) + dd; bb = RL(bb, 10); - dd = RL(dd + f5(ee,aa,bb) + X[ 4] + 0x50a28be6, 5) + cc; aa = RL(aa, 10); - cc = RL(cc + f5(dd,ee,aa) + X[13] + 0x50a28be6, 7) + bb; ee = RL(ee, 10); - bb = RL(bb + f5(cc,dd,ee) + X[ 6] + 0x50a28be6, 7) + aa; dd = RL(dd, 10); - aa = RL(aa + f5(bb,cc,dd) + X[15] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); - ee = RL(ee + f5(aa,bb,cc) + X[ 8] + 0x50a28be6, 11) + dd; bb = RL(bb, 10); - dd = RL(dd + f5(ee,aa,bb) + X[ 1] + 0x50a28be6, 14) + cc; aa = RL(aa, 10); - cc = RL(cc + f5(dd,ee,aa) + X[10] + 0x50a28be6, 14) + bb; ee = RL(ee, 10); - bb = RL(bb + f5(cc,dd,ee) + X[ 3] + 0x50a28be6, 12) + aa; dd = RL(dd, 10); - aa = RL(aa + f5(bb,cc,dd) + X[12] + 0x50a28be6, 6) + ee; cc = RL(cc, 10); - - // - // Rounds 16-31 - // - // left - e = RL(e + f2(a,b,c) + X[ 7] + 0x5a827999, 7) + d; b = RL(b, 10); - d = RL(d + f2(e,a,b) + X[ 4] + 0x5a827999, 6) + c; a = RL(a, 10); - c = RL(c + f2(d,e,a) + X[13] + 0x5a827999, 8) + b; e = RL(e, 10); - b = RL(b + f2(c,d,e) + X[ 1] + 0x5a827999, 13) + a; d = RL(d, 10); - a = RL(a + f2(b,c,d) + X[10] + 0x5a827999, 11) + e; c = RL(c, 10); - e = RL(e + f2(a,b,c) + X[ 6] + 0x5a827999, 9) + d; b = RL(b, 10); - d = RL(d + f2(e,a,b) + X[15] + 0x5a827999, 7) + c; a = RL(a, 10); - c = RL(c + f2(d,e,a) + X[ 3] + 0x5a827999, 15) + b; e = RL(e, 10); - b = RL(b + f2(c,d,e) + X[12] + 0x5a827999, 7) + a; d = RL(d, 10); - a = RL(a + f2(b,c,d) + X[ 0] + 0x5a827999, 12) + e; c = RL(c, 10); - e = RL(e + f2(a,b,c) + X[ 9] + 0x5a827999, 15) + d; b = RL(b, 10); - d = RL(d + f2(e,a,b) + X[ 5] + 0x5a827999, 9) + c; a = RL(a, 10); - c = RL(c + f2(d,e,a) + X[ 2] + 0x5a827999, 11) + b; e = RL(e, 10); - b = RL(b + f2(c,d,e) + X[14] + 0x5a827999, 7) + a; d = RL(d, 10); - a = RL(a + f2(b,c,d) + X[11] + 0x5a827999, 13) + e; c = RL(c, 10); - e = RL(e + f2(a,b,c) + X[ 8] + 0x5a827999, 12) + d; b = RL(b, 10); - - // right - ee = RL(ee + f4(aa,bb,cc) + X[ 6] + 0x5c4dd124, 9) + dd; bb = RL(bb, 10); - dd = RL(dd + f4(ee,aa,bb) + X[11] + 0x5c4dd124, 13) + cc; aa = RL(aa, 10); - cc = RL(cc + f4(dd,ee,aa) + X[ 3] + 0x5c4dd124, 15) + bb; ee = RL(ee, 10); - bb = RL(bb + f4(cc,dd,ee) + X[ 7] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); - aa = RL(aa + f4(bb,cc,dd) + X[ 0] + 0x5c4dd124, 12) + ee; cc = RL(cc, 10); - ee = RL(ee + f4(aa,bb,cc) + X[13] + 0x5c4dd124, 8) + dd; bb = RL(bb, 10); - dd = RL(dd + f4(ee,aa,bb) + X[ 5] + 0x5c4dd124, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f4(dd,ee,aa) + X[10] + 0x5c4dd124, 11) + bb; ee = RL(ee, 10); - bb = RL(bb + f4(cc,dd,ee) + X[14] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); - aa = RL(aa + f4(bb,cc,dd) + X[15] + 0x5c4dd124, 7) + ee; cc = RL(cc, 10); - ee = RL(ee + f4(aa,bb,cc) + X[ 8] + 0x5c4dd124, 12) + dd; bb = RL(bb, 10); - dd = RL(dd + f4(ee,aa,bb) + X[12] + 0x5c4dd124, 7) + cc; aa = RL(aa, 10); - cc = RL(cc + f4(dd,ee,aa) + X[ 4] + 0x5c4dd124, 6) + bb; ee = RL(ee, 10); - bb = RL(bb + f4(cc,dd,ee) + X[ 9] + 0x5c4dd124, 15) + aa; dd = RL(dd, 10); - aa = RL(aa + f4(bb,cc,dd) + X[ 1] + 0x5c4dd124, 13) + ee; cc = RL(cc, 10); - ee = RL(ee + f4(aa,bb,cc) + X[ 2] + 0x5c4dd124, 11) + dd; bb = RL(bb, 10); - - // - // Rounds 32-47 - // - // left - d = RL(d + f3(e,a,b) + X[ 3] + 0x6ed9eba1, 11) + c; a = RL(a, 10); - c = RL(c + f3(d,e,a) + X[10] + 0x6ed9eba1, 13) + b; e = RL(e, 10); - b = RL(b + f3(c,d,e) + X[14] + 0x6ed9eba1, 6) + a; d = RL(d, 10); - a = RL(a + f3(b,c,d) + X[ 4] + 0x6ed9eba1, 7) + e; c = RL(c, 10); - e = RL(e + f3(a,b,c) + X[ 9] + 0x6ed9eba1, 14) + d; b = RL(b, 10); - d = RL(d + f3(e,a,b) + X[15] + 0x6ed9eba1, 9) + c; a = RL(a, 10); - c = RL(c + f3(d,e,a) + X[ 8] + 0x6ed9eba1, 13) + b; e = RL(e, 10); - b = RL(b + f3(c,d,e) + X[ 1] + 0x6ed9eba1, 15) + a; d = RL(d, 10); - a = RL(a + f3(b,c,d) + X[ 2] + 0x6ed9eba1, 14) + e; c = RL(c, 10); - e = RL(e + f3(a,b,c) + X[ 7] + 0x6ed9eba1, 8) + d; b = RL(b, 10); - d = RL(d + f3(e,a,b) + X[ 0] + 0x6ed9eba1, 13) + c; a = RL(a, 10); - c = RL(c + f3(d,e,a) + X[ 6] + 0x6ed9eba1, 6) + b; e = RL(e, 10); - b = RL(b + f3(c,d,e) + X[13] + 0x6ed9eba1, 5) + a; d = RL(d, 10); - a = RL(a + f3(b,c,d) + X[11] + 0x6ed9eba1, 12) + e; c = RL(c, 10); - e = RL(e + f3(a,b,c) + X[ 5] + 0x6ed9eba1, 7) + d; b = RL(b, 10); - d = RL(d + f3(e,a,b) + X[12] + 0x6ed9eba1, 5) + c; a = RL(a, 10); - - // right - dd = RL(dd + f3(ee,aa,bb) + X[15] + 0x6d703ef3, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f3(dd,ee,aa) + X[ 5] + 0x6d703ef3, 7) + bb; ee = RL(ee, 10); - bb = RL(bb + f3(cc,dd,ee) + X[ 1] + 0x6d703ef3, 15) + aa; dd = RL(dd, 10); - aa = RL(aa + f3(bb,cc,dd) + X[ 3] + 0x6d703ef3, 11) + ee; cc = RL(cc, 10); - ee = RL(ee + f3(aa,bb,cc) + X[ 7] + 0x6d703ef3, 8) + dd; bb = RL(bb, 10); - dd = RL(dd + f3(ee,aa,bb) + X[14] + 0x6d703ef3, 6) + cc; aa = RL(aa, 10); - cc = RL(cc + f3(dd,ee,aa) + X[ 6] + 0x6d703ef3, 6) + bb; ee = RL(ee, 10); - bb = RL(bb + f3(cc,dd,ee) + X[ 9] + 0x6d703ef3, 14) + aa; dd = RL(dd, 10); - aa = RL(aa + f3(bb,cc,dd) + X[11] + 0x6d703ef3, 12) + ee; cc = RL(cc, 10); - ee = RL(ee + f3(aa,bb,cc) + X[ 8] + 0x6d703ef3, 13) + dd; bb = RL(bb, 10); - dd = RL(dd + f3(ee,aa,bb) + X[12] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); - cc = RL(cc + f3(dd,ee,aa) + X[ 2] + 0x6d703ef3, 14) + bb; ee = RL(ee, 10); - bb = RL(bb + f3(cc,dd,ee) + X[10] + 0x6d703ef3, 13) + aa; dd = RL(dd, 10); - aa = RL(aa + f3(bb,cc,dd) + X[ 0] + 0x6d703ef3, 13) + ee; cc = RL(cc, 10); - ee = RL(ee + f3(aa,bb,cc) + X[ 4] + 0x6d703ef3, 7) + dd; bb = RL(bb, 10); - dd = RL(dd + f3(ee,aa,bb) + X[13] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); - - // - // Rounds 48-63 - // - // left - c = RL(c + f4(d,e,a) + X[ 1] + 0x8f1bbcdc, 11) + b; e = RL(e, 10); - b = RL(b + f4(c,d,e) + X[ 9] + 0x8f1bbcdc, 12) + a; d = RL(d, 10); - a = RL(a + f4(b,c,d) + X[11] + 0x8f1bbcdc, 14) + e; c = RL(c, 10); - e = RL(e + f4(a,b,c) + X[10] + 0x8f1bbcdc, 15) + d; b = RL(b, 10); - d = RL(d + f4(e,a,b) + X[ 0] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); - c = RL(c + f4(d,e,a) + X[ 8] + 0x8f1bbcdc, 15) + b; e = RL(e, 10); - b = RL(b + f4(c,d,e) + X[12] + 0x8f1bbcdc, 9) + a; d = RL(d, 10); - a = RL(a + f4(b,c,d) + X[ 4] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); - e = RL(e + f4(a,b,c) + X[13] + 0x8f1bbcdc, 9) + d; b = RL(b, 10); - d = RL(d + f4(e,a,b) + X[ 3] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); - c = RL(c + f4(d,e,a) + X[ 7] + 0x8f1bbcdc, 5) + b; e = RL(e, 10); - b = RL(b + f4(c,d,e) + X[15] + 0x8f1bbcdc, 6) + a; d = RL(d, 10); - a = RL(a + f4(b,c,d) + X[14] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); - e = RL(e + f4(a,b,c) + X[ 5] + 0x8f1bbcdc, 6) + d; b = RL(b, 10); - d = RL(d + f4(e,a,b) + X[ 6] + 0x8f1bbcdc, 5) + c; a = RL(a, 10); - c = RL(c + f4(d,e,a) + X[ 2] + 0x8f1bbcdc, 12) + b; e = RL(e, 10); - - // right - cc = RL(cc + f2(dd,ee,aa) + X[ 8] + 0x7a6d76e9, 15) + bb; ee = RL(ee, 10); - bb = RL(bb + f2(cc,dd,ee) + X[ 6] + 0x7a6d76e9, 5) + aa; dd = RL(dd, 10); - aa = RL(aa + f2(bb,cc,dd) + X[ 4] + 0x7a6d76e9, 8) + ee; cc = RL(cc, 10); - ee = RL(ee + f2(aa,bb,cc) + X[ 1] + 0x7a6d76e9, 11) + dd; bb = RL(bb, 10); - dd = RL(dd + f2(ee,aa,bb) + X[ 3] + 0x7a6d76e9, 14) + cc; aa = RL(aa, 10); - cc = RL(cc + f2(dd,ee,aa) + X[11] + 0x7a6d76e9, 14) + bb; ee = RL(ee, 10); - bb = RL(bb + f2(cc,dd,ee) + X[15] + 0x7a6d76e9, 6) + aa; dd = RL(dd, 10); - aa = RL(aa + f2(bb,cc,dd) + X[ 0] + 0x7a6d76e9, 14) + ee; cc = RL(cc, 10); - ee = RL(ee + f2(aa,bb,cc) + X[ 5] + 0x7a6d76e9, 6) + dd; bb = RL(bb, 10); - dd = RL(dd + f2(ee,aa,bb) + X[12] + 0x7a6d76e9, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f2(dd,ee,aa) + X[ 2] + 0x7a6d76e9, 12) + bb; ee = RL(ee, 10); - bb = RL(bb + f2(cc,dd,ee) + X[13] + 0x7a6d76e9, 9) + aa; dd = RL(dd, 10); - aa = RL(aa + f2(bb,cc,dd) + X[ 9] + 0x7a6d76e9, 12) + ee; cc = RL(cc, 10); - ee = RL(ee + f2(aa,bb,cc) + X[ 7] + 0x7a6d76e9, 5) + dd; bb = RL(bb, 10); - dd = RL(dd + f2(ee,aa,bb) + X[10] + 0x7a6d76e9, 15) + cc; aa = RL(aa, 10); - cc = RL(cc + f2(dd,ee,aa) + X[14] + 0x7a6d76e9, 8) + bb; ee = RL(ee, 10); - - // - // Rounds 64-79 - // - // left - b = RL(b + f5(c,d,e) + X[ 4] + 0xa953fd4e, 9) + a; d = RL(d, 10); - a = RL(a + f5(b,c,d) + X[ 0] + 0xa953fd4e, 15) + e; c = RL(c, 10); - e = RL(e + f5(a,b,c) + X[ 5] + 0xa953fd4e, 5) + d; b = RL(b, 10); - d = RL(d + f5(e,a,b) + X[ 9] + 0xa953fd4e, 11) + c; a = RL(a, 10); - c = RL(c + f5(d,e,a) + X[ 7] + 0xa953fd4e, 6) + b; e = RL(e, 10); - b = RL(b + f5(c,d,e) + X[12] + 0xa953fd4e, 8) + a; d = RL(d, 10); - a = RL(a + f5(b,c,d) + X[ 2] + 0xa953fd4e, 13) + e; c = RL(c, 10); - e = RL(e + f5(a,b,c) + X[10] + 0xa953fd4e, 12) + d; b = RL(b, 10); - d = RL(d + f5(e,a,b) + X[14] + 0xa953fd4e, 5) + c; a = RL(a, 10); - c = RL(c + f5(d,e,a) + X[ 1] + 0xa953fd4e, 12) + b; e = RL(e, 10); - b = RL(b + f5(c,d,e) + X[ 3] + 0xa953fd4e, 13) + a; d = RL(d, 10); - a = RL(a + f5(b,c,d) + X[ 8] + 0xa953fd4e, 14) + e; c = RL(c, 10); - e = RL(e + f5(a,b,c) + X[11] + 0xa953fd4e, 11) + d; b = RL(b, 10); - d = RL(d + f5(e,a,b) + X[ 6] + 0xa953fd4e, 8) + c; a = RL(a, 10); - c = RL(c + f5(d,e,a) + X[15] + 0xa953fd4e, 5) + b; e = RL(e, 10); - b = RL(b + f5(c,d,e) + X[13] + 0xa953fd4e, 6) + a; d = RL(d, 10); - - // right - bb = RL(bb + f1(cc,dd,ee) + X[12], 8) + aa; dd = RL(dd, 10); - aa = RL(aa + f1(bb,cc,dd) + X[15], 5) + ee; cc = RL(cc, 10); - ee = RL(ee + f1(aa,bb,cc) + X[10], 12) + dd; bb = RL(bb, 10); - dd = RL(dd + f1(ee,aa,bb) + X[ 4], 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f1(dd,ee,aa) + X[ 1], 12) + bb; ee = RL(ee, 10); - bb = RL(bb + f1(cc,dd,ee) + X[ 5], 5) + aa; dd = RL(dd, 10); - aa = RL(aa + f1(bb,cc,dd) + X[ 8], 14) + ee; cc = RL(cc, 10); - ee = RL(ee + f1(aa,bb,cc) + X[ 7], 6) + dd; bb = RL(bb, 10); - dd = RL(dd + f1(ee,aa,bb) + X[ 6], 8) + cc; aa = RL(aa, 10); - cc = RL(cc + f1(dd,ee,aa) + X[ 2], 13) + bb; ee = RL(ee, 10); - bb = RL(bb + f1(cc,dd,ee) + X[13], 6) + aa; dd = RL(dd, 10); - aa = RL(aa + f1(bb,cc,dd) + X[14], 5) + ee; cc = RL(cc, 10); - ee = RL(ee + f1(aa,bb,cc) + X[ 0], 15) + dd; bb = RL(bb, 10); - dd = RL(dd + f1(ee,aa,bb) + X[ 3], 13) + cc; aa = RL(aa, 10); - cc = RL(cc + f1(dd,ee,aa) + X[ 9], 11) + bb; ee = RL(ee, 10); - bb = RL(bb + f1(cc,dd,ee) + X[11], 11) + aa; dd = RL(dd, 10); - - dd += c + H1; - H1 = H2 + d + ee; - H2 = H3 + e + aa; - H3 = H4 + a + bb; - H4 = H0 + b + cc; - H0 = dd; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } -} diff --git a/src/org/bouncycastle/crypto/digests/RIPEMD256Digest.java b/src/org/bouncycastle/crypto/digests/RIPEMD256Digest.java deleted file mode 100644 index 3d92e4a..0000000 --- a/src/org/bouncycastle/crypto/digests/RIPEMD256Digest.java +++ /dev/null @@ -1,476 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -/** - * implementation of RIPEMD256. - *

        - * note: this algorithm offers the same level of security as RIPEMD128. - */ -public class RIPEMD256Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 32; - - private int H0, H1, H2, H3, H4, H5, H6, H7; // IV's - - private int[] X = new int[16]; - private int xOff; - - /** - * Standard constructor - */ - public RIPEMD256Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public RIPEMD256Digest(RIPEMD256Digest t) - { - super(t); - - H0 = t.H0; - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - H5 = t.H5; - H6 = t.H6; - H7 = t.H7; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "RIPEMD256"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) - | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); - - if (xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength & 0xffffffff); - X[15] = (int)(bitLength >>> 32); - } - - private void unpackWord( - int word, - byte[] out, - int outOff) - { - out[outOff] = (byte)word; - out[outOff + 1] = (byte)(word >>> 8); - out[outOff + 2] = (byte)(word >>> 16); - out[outOff + 3] = (byte)(word >>> 24); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - unpackWord(H0, out, outOff); - unpackWord(H1, out, outOff + 4); - unpackWord(H2, out, outOff + 8); - unpackWord(H3, out, outOff + 12); - unpackWord(H4, out, outOff + 16); - unpackWord(H5, out, outOff + 20); - unpackWord(H6, out, outOff + 24); - unpackWord(H7, out, outOff + 28); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables to the IV values. - */ - public void reset() - { - super.reset(); - - H0 = 0x67452301; - H1 = 0xefcdab89; - H2 = 0x98badcfe; - H3 = 0x10325476; - H4 = 0x76543210; - H5 = 0xFEDCBA98; - H6 = 0x89ABCDEF; - H7 = 0x01234567; - - xOff = 0; - - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - /* - * rotate int x left n bits. - */ - private int RL( - int x, - int n) - { - return (x << n) | (x >>> (32 - n)); - } - - /* - * f1,f2,f3,f4 are the basic RIPEMD128 functions. - */ - - /* - * F - */ - private int f1( - int x, - int y, - int z) - { - return x ^ y ^ z; - } - - /* - * G - */ - private int f2( - int x, - int y, - int z) - { - return (x & y) | (~x & z); - } - - /* - * H - */ - private int f3( - int x, - int y, - int z) - { - return (x | ~y) ^ z; - } - - /* - * I - */ - private int f4( - int x, - int y, - int z) - { - return (x & z) | (y & ~z); - } - - private int F1( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f1(b, c, d) + x, s); - } - - private int F2( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f2(b, c, d) + x + 0x5a827999, s); - } - - private int F3( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f3(b, c, d) + x + 0x6ed9eba1, s); - } - - private int F4( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f4(b, c, d) + x + 0x8f1bbcdc, s); - } - - private int FF1( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f1(b, c, d) + x, s); - } - - private int FF2( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f2(b, c, d) + x + 0x6d703ef3, s); - } - - private int FF3( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f3(b, c, d) + x + 0x5c4dd124, s); - } - - private int FF4( - int a, - int b, - int c, - int d, - int x, - int s) - { - return RL(a + f4(b, c, d) + x + 0x50a28be6, s); - } - - protected void processBlock() - { - int a, aa; - int b, bb; - int c, cc; - int d, dd; - int t; - - a = H0; - b = H1; - c = H2; - d = H3; - aa = H4; - bb = H5; - cc = H6; - dd = H7; - - // - // Round 1 - // - - a = F1(a, b, c, d, X[ 0], 11); - d = F1(d, a, b, c, X[ 1], 14); - c = F1(c, d, a, b, X[ 2], 15); - b = F1(b, c, d, a, X[ 3], 12); - a = F1(a, b, c, d, X[ 4], 5); - d = F1(d, a, b, c, X[ 5], 8); - c = F1(c, d, a, b, X[ 6], 7); - b = F1(b, c, d, a, X[ 7], 9); - a = F1(a, b, c, d, X[ 8], 11); - d = F1(d, a, b, c, X[ 9], 13); - c = F1(c, d, a, b, X[10], 14); - b = F1(b, c, d, a, X[11], 15); - a = F1(a, b, c, d, X[12], 6); - d = F1(d, a, b, c, X[13], 7); - c = F1(c, d, a, b, X[14], 9); - b = F1(b, c, d, a, X[15], 8); - - aa = FF4(aa, bb, cc, dd, X[ 5], 8); - dd = FF4(dd, aa, bb, cc, X[14], 9); - cc = FF4(cc, dd, aa, bb, X[ 7], 9); - bb = FF4(bb, cc, dd, aa, X[ 0], 11); - aa = FF4(aa, bb, cc, dd, X[ 9], 13); - dd = FF4(dd, aa, bb, cc, X[ 2], 15); - cc = FF4(cc, dd, aa, bb, X[11], 15); - bb = FF4(bb, cc, dd, aa, X[ 4], 5); - aa = FF4(aa, bb, cc, dd, X[13], 7); - dd = FF4(dd, aa, bb, cc, X[ 6], 7); - cc = FF4(cc, dd, aa, bb, X[15], 8); - bb = FF4(bb, cc, dd, aa, X[ 8], 11); - aa = FF4(aa, bb, cc, dd, X[ 1], 14); - dd = FF4(dd, aa, bb, cc, X[10], 14); - cc = FF4(cc, dd, aa, bb, X[ 3], 12); - bb = FF4(bb, cc, dd, aa, X[12], 6); - - t = a; a = aa; aa = t; - - // - // Round 2 - // - a = F2(a, b, c, d, X[ 7], 7); - d = F2(d, a, b, c, X[ 4], 6); - c = F2(c, d, a, b, X[13], 8); - b = F2(b, c, d, a, X[ 1], 13); - a = F2(a, b, c, d, X[10], 11); - d = F2(d, a, b, c, X[ 6], 9); - c = F2(c, d, a, b, X[15], 7); - b = F2(b, c, d, a, X[ 3], 15); - a = F2(a, b, c, d, X[12], 7); - d = F2(d, a, b, c, X[ 0], 12); - c = F2(c, d, a, b, X[ 9], 15); - b = F2(b, c, d, a, X[ 5], 9); - a = F2(a, b, c, d, X[ 2], 11); - d = F2(d, a, b, c, X[14], 7); - c = F2(c, d, a, b, X[11], 13); - b = F2(b, c, d, a, X[ 8], 12); - - aa = FF3(aa, bb, cc, dd, X[ 6], 9); - dd = FF3(dd, aa, bb, cc, X[ 11], 13); - cc = FF3(cc, dd, aa, bb, X[3], 15); - bb = FF3(bb, cc, dd, aa, X[ 7], 7); - aa = FF3(aa, bb, cc, dd, X[0], 12); - dd = FF3(dd, aa, bb, cc, X[13], 8); - cc = FF3(cc, dd, aa, bb, X[5], 9); - bb = FF3(bb, cc, dd, aa, X[10], 11); - aa = FF3(aa, bb, cc, dd, X[14], 7); - dd = FF3(dd, aa, bb, cc, X[15], 7); - cc = FF3(cc, dd, aa, bb, X[ 8], 12); - bb = FF3(bb, cc, dd, aa, X[12], 7); - aa = FF3(aa, bb, cc, dd, X[ 4], 6); - dd = FF3(dd, aa, bb, cc, X[ 9], 15); - cc = FF3(cc, dd, aa, bb, X[ 1], 13); - bb = FF3(bb, cc, dd, aa, X[ 2], 11); - - t = b; b = bb; bb = t; - - // - // Round 3 - // - a = F3(a, b, c, d, X[ 3], 11); - d = F3(d, a, b, c, X[10], 13); - c = F3(c, d, a, b, X[14], 6); - b = F3(b, c, d, a, X[ 4], 7); - a = F3(a, b, c, d, X[ 9], 14); - d = F3(d, a, b, c, X[15], 9); - c = F3(c, d, a, b, X[ 8], 13); - b = F3(b, c, d, a, X[ 1], 15); - a = F3(a, b, c, d, X[ 2], 14); - d = F3(d, a, b, c, X[ 7], 8); - c = F3(c, d, a, b, X[ 0], 13); - b = F3(b, c, d, a, X[ 6], 6); - a = F3(a, b, c, d, X[13], 5); - d = F3(d, a, b, c, X[11], 12); - c = F3(c, d, a, b, X[ 5], 7); - b = F3(b, c, d, a, X[12], 5); - - aa = FF2(aa, bb, cc, dd, X[ 15], 9); - dd = FF2(dd, aa, bb, cc, X[5], 7); - cc = FF2(cc, dd, aa, bb, X[1], 15); - bb = FF2(bb, cc, dd, aa, X[ 3], 11); - aa = FF2(aa, bb, cc, dd, X[ 7], 8); - dd = FF2(dd, aa, bb, cc, X[14], 6); - cc = FF2(cc, dd, aa, bb, X[ 6], 6); - bb = FF2(bb, cc, dd, aa, X[ 9], 14); - aa = FF2(aa, bb, cc, dd, X[11], 12); - dd = FF2(dd, aa, bb, cc, X[ 8], 13); - cc = FF2(cc, dd, aa, bb, X[12], 5); - bb = FF2(bb, cc, dd, aa, X[ 2], 14); - aa = FF2(aa, bb, cc, dd, X[10], 13); - dd = FF2(dd, aa, bb, cc, X[ 0], 13); - cc = FF2(cc, dd, aa, bb, X[ 4], 7); - bb = FF2(bb, cc, dd, aa, X[13], 5); - - t = c; c = cc; cc = t; - - // - // Round 4 - // - a = F4(a, b, c, d, X[ 1], 11); - d = F4(d, a, b, c, X[ 9], 12); - c = F4(c, d, a, b, X[11], 14); - b = F4(b, c, d, a, X[10], 15); - a = F4(a, b, c, d, X[ 0], 14); - d = F4(d, a, b, c, X[ 8], 15); - c = F4(c, d, a, b, X[12], 9); - b = F4(b, c, d, a, X[ 4], 8); - a = F4(a, b, c, d, X[13], 9); - d = F4(d, a, b, c, X[ 3], 14); - c = F4(c, d, a, b, X[ 7], 5); - b = F4(b, c, d, a, X[15], 6); - a = F4(a, b, c, d, X[14], 8); - d = F4(d, a, b, c, X[ 5], 6); - c = F4(c, d, a, b, X[ 6], 5); - b = F4(b, c, d, a, X[ 2], 12); - - aa = FF1(aa, bb, cc, dd, X[ 8], 15); - dd = FF1(dd, aa, bb, cc, X[ 6], 5); - cc = FF1(cc, dd, aa, bb, X[ 4], 8); - bb = FF1(bb, cc, dd, aa, X[ 1], 11); - aa = FF1(aa, bb, cc, dd, X[ 3], 14); - dd = FF1(dd, aa, bb, cc, X[11], 14); - cc = FF1(cc, dd, aa, bb, X[15], 6); - bb = FF1(bb, cc, dd, aa, X[ 0], 14); - aa = FF1(aa, bb, cc, dd, X[ 5], 6); - dd = FF1(dd, aa, bb, cc, X[12], 9); - cc = FF1(cc, dd, aa, bb, X[ 2], 12); - bb = FF1(bb, cc, dd, aa, X[13], 9); - aa = FF1(aa, bb, cc, dd, X[ 9], 12); - dd = FF1(dd, aa, bb, cc, X[ 7], 5); - cc = FF1(cc, dd, aa, bb, X[10], 15); - bb = FF1(bb, cc, dd, aa, X[14], 8); - - t = d; d = dd; dd = t; - - H0 += a; - H1 += b; - H2 += c; - H3 += d; - H4 += aa; - H5 += bb; - H6 += cc; - H7 += dd; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } -} diff --git a/src/org/bouncycastle/crypto/digests/RIPEMD320Digest.java b/src/org/bouncycastle/crypto/digests/RIPEMD320Digest.java deleted file mode 100644 index e2cda58..0000000 --- a/src/org/bouncycastle/crypto/digests/RIPEMD320Digest.java +++ /dev/null @@ -1,461 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -/** - * implementation of RIPEMD 320. - *

        - * Note: this implementation offers the same level of security - * as RIPEMD 160. - */ -public class RIPEMD320Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 40; - - private int H0, H1, H2, H3, H4, H5, H6, H7, H8, H9; // IV's - - private int[] X = new int[16]; - private int xOff; - - /** - * Standard constructor - */ - public RIPEMD320Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public RIPEMD320Digest(RIPEMD320Digest t) - { - super(t); - - H0 = t.H0; - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - H5 = t.H5; - H6 = t.H6; - H7 = t.H7; - H8 = t.H8; - H9 = t.H9; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "RIPEMD320"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) - | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); - - if (xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength & 0xffffffff); - X[15] = (int)(bitLength >>> 32); - } - - private void unpackWord( - int word, - byte[] out, - int outOff) - { - out[outOff] = (byte)word; - out[outOff + 1] = (byte)(word >>> 8); - out[outOff + 2] = (byte)(word >>> 16); - out[outOff + 3] = (byte)(word >>> 24); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - unpackWord(H0, out, outOff); - unpackWord(H1, out, outOff + 4); - unpackWord(H2, out, outOff + 8); - unpackWord(H3, out, outOff + 12); - unpackWord(H4, out, outOff + 16); - unpackWord(H5, out, outOff + 20); - unpackWord(H6, out, outOff + 24); - unpackWord(H7, out, outOff + 28); - unpackWord(H8, out, outOff + 32); - unpackWord(H9, out, outOff + 36); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables to the IV values. - */ - public void reset() - { - super.reset(); - - H0 = 0x67452301; - H1 = 0xefcdab89; - H2 = 0x98badcfe; - H3 = 0x10325476; - H4 = 0xc3d2e1f0; - H5 = 0x76543210; - H6 = 0xFEDCBA98; - H7 = 0x89ABCDEF; - H8 = 0x01234567; - H9 = 0x3C2D1E0F; - - xOff = 0; - - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - /* - * rotate int x left n bits. - */ - private int RL( - int x, - int n) - { - return (x << n) | (x >>> (32 - n)); - } - - /* - * f1,f2,f3,f4,f5 are the basic RIPEMD160 functions. - */ - - /* - * rounds 0-15 - */ - private int f1( - int x, - int y, - int z) - { - return x ^ y ^ z; - } - - /* - * rounds 16-31 - */ - private int f2( - int x, - int y, - int z) - { - return (x & y) | (~x & z); - } - - /* - * rounds 32-47 - */ - private int f3( - int x, - int y, - int z) - { - return (x | ~y) ^ z; - } - - /* - * rounds 48-63 - */ - private int f4( - int x, - int y, - int z) - { - return (x & z) | (y & ~z); - } - - /* - * rounds 64-79 - */ - private int f5( - int x, - int y, - int z) - { - return x ^ (y | ~z); - } - - protected void processBlock() - { - int a, aa; - int b, bb; - int c, cc; - int d, dd; - int e, ee; - int t; - - a = H0; - b = H1; - c = H2; - d = H3; - e = H4; - aa = H5; - bb = H6; - cc = H7; - dd = H8; - ee = H9; - - // - // Rounds 1 - 16 - // - // left - a = RL(a + f1(b,c,d) + X[ 0], 11) + e; c = RL(c, 10); - e = RL(e + f1(a,b,c) + X[ 1], 14) + d; b = RL(b, 10); - d = RL(d + f1(e,a,b) + X[ 2], 15) + c; a = RL(a, 10); - c = RL(c + f1(d,e,a) + X[ 3], 12) + b; e = RL(e, 10); - b = RL(b + f1(c,d,e) + X[ 4], 5) + a; d = RL(d, 10); - a = RL(a + f1(b,c,d) + X[ 5], 8) + e; c = RL(c, 10); - e = RL(e + f1(a,b,c) + X[ 6], 7) + d; b = RL(b, 10); - d = RL(d + f1(e,a,b) + X[ 7], 9) + c; a = RL(a, 10); - c = RL(c + f1(d,e,a) + X[ 8], 11) + b; e = RL(e, 10); - b = RL(b + f1(c,d,e) + X[ 9], 13) + a; d = RL(d, 10); - a = RL(a + f1(b,c,d) + X[10], 14) + e; c = RL(c, 10); - e = RL(e + f1(a,b,c) + X[11], 15) + d; b = RL(b, 10); - d = RL(d + f1(e,a,b) + X[12], 6) + c; a = RL(a, 10); - c = RL(c + f1(d,e,a) + X[13], 7) + b; e = RL(e, 10); - b = RL(b + f1(c,d,e) + X[14], 9) + a; d = RL(d, 10); - a = RL(a + f1(b,c,d) + X[15], 8) + e; c = RL(c, 10); - - // right - aa = RL(aa + f5(bb,cc,dd) + X[ 5] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); - ee = RL(ee + f5(aa,bb,cc) + X[14] + 0x50a28be6, 9) + dd; bb = RL(bb, 10); - dd = RL(dd + f5(ee,aa,bb) + X[ 7] + 0x50a28be6, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f5(dd,ee,aa) + X[ 0] + 0x50a28be6, 11) + bb; ee = RL(ee, 10); - bb = RL(bb + f5(cc,dd,ee) + X[ 9] + 0x50a28be6, 13) + aa; dd = RL(dd, 10); - aa = RL(aa + f5(bb,cc,dd) + X[ 2] + 0x50a28be6, 15) + ee; cc = RL(cc, 10); - ee = RL(ee + f5(aa,bb,cc) + X[11] + 0x50a28be6, 15) + dd; bb = RL(bb, 10); - dd = RL(dd + f5(ee,aa,bb) + X[ 4] + 0x50a28be6, 5) + cc; aa = RL(aa, 10); - cc = RL(cc + f5(dd,ee,aa) + X[13] + 0x50a28be6, 7) + bb; ee = RL(ee, 10); - bb = RL(bb + f5(cc,dd,ee) + X[ 6] + 0x50a28be6, 7) + aa; dd = RL(dd, 10); - aa = RL(aa + f5(bb,cc,dd) + X[15] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); - ee = RL(ee + f5(aa,bb,cc) + X[ 8] + 0x50a28be6, 11) + dd; bb = RL(bb, 10); - dd = RL(dd + f5(ee,aa,bb) + X[ 1] + 0x50a28be6, 14) + cc; aa = RL(aa, 10); - cc = RL(cc + f5(dd,ee,aa) + X[10] + 0x50a28be6, 14) + bb; ee = RL(ee, 10); - bb = RL(bb + f5(cc,dd,ee) + X[ 3] + 0x50a28be6, 12) + aa; dd = RL(dd, 10); - aa = RL(aa + f5(bb,cc,dd) + X[12] + 0x50a28be6, 6) + ee; cc = RL(cc, 10); - - t = a; a = aa; aa = t; - - // - // Rounds 16-31 - // - // left - e = RL(e + f2(a,b,c) + X[ 7] + 0x5a827999, 7) + d; b = RL(b, 10); - d = RL(d + f2(e,a,b) + X[ 4] + 0x5a827999, 6) + c; a = RL(a, 10); - c = RL(c + f2(d,e,a) + X[13] + 0x5a827999, 8) + b; e = RL(e, 10); - b = RL(b + f2(c,d,e) + X[ 1] + 0x5a827999, 13) + a; d = RL(d, 10); - a = RL(a + f2(b,c,d) + X[10] + 0x5a827999, 11) + e; c = RL(c, 10); - e = RL(e + f2(a,b,c) + X[ 6] + 0x5a827999, 9) + d; b = RL(b, 10); - d = RL(d + f2(e,a,b) + X[15] + 0x5a827999, 7) + c; a = RL(a, 10); - c = RL(c + f2(d,e,a) + X[ 3] + 0x5a827999, 15) + b; e = RL(e, 10); - b = RL(b + f2(c,d,e) + X[12] + 0x5a827999, 7) + a; d = RL(d, 10); - a = RL(a + f2(b,c,d) + X[ 0] + 0x5a827999, 12) + e; c = RL(c, 10); - e = RL(e + f2(a,b,c) + X[ 9] + 0x5a827999, 15) + d; b = RL(b, 10); - d = RL(d + f2(e,a,b) + X[ 5] + 0x5a827999, 9) + c; a = RL(a, 10); - c = RL(c + f2(d,e,a) + X[ 2] + 0x5a827999, 11) + b; e = RL(e, 10); - b = RL(b + f2(c,d,e) + X[14] + 0x5a827999, 7) + a; d = RL(d, 10); - a = RL(a + f2(b,c,d) + X[11] + 0x5a827999, 13) + e; c = RL(c, 10); - e = RL(e + f2(a,b,c) + X[ 8] + 0x5a827999, 12) + d; b = RL(b, 10); - - // right - ee = RL(ee + f4(aa,bb,cc) + X[ 6] + 0x5c4dd124, 9) + dd; bb = RL(bb, 10); - dd = RL(dd + f4(ee,aa,bb) + X[11] + 0x5c4dd124, 13) + cc; aa = RL(aa, 10); - cc = RL(cc + f4(dd,ee,aa) + X[ 3] + 0x5c4dd124, 15) + bb; ee = RL(ee, 10); - bb = RL(bb + f4(cc,dd,ee) + X[ 7] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); - aa = RL(aa + f4(bb,cc,dd) + X[ 0] + 0x5c4dd124, 12) + ee; cc = RL(cc, 10); - ee = RL(ee + f4(aa,bb,cc) + X[13] + 0x5c4dd124, 8) + dd; bb = RL(bb, 10); - dd = RL(dd + f4(ee,aa,bb) + X[ 5] + 0x5c4dd124, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f4(dd,ee,aa) + X[10] + 0x5c4dd124, 11) + bb; ee = RL(ee, 10); - bb = RL(bb + f4(cc,dd,ee) + X[14] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); - aa = RL(aa + f4(bb,cc,dd) + X[15] + 0x5c4dd124, 7) + ee; cc = RL(cc, 10); - ee = RL(ee + f4(aa,bb,cc) + X[ 8] + 0x5c4dd124, 12) + dd; bb = RL(bb, 10); - dd = RL(dd + f4(ee,aa,bb) + X[12] + 0x5c4dd124, 7) + cc; aa = RL(aa, 10); - cc = RL(cc + f4(dd,ee,aa) + X[ 4] + 0x5c4dd124, 6) + bb; ee = RL(ee, 10); - bb = RL(bb + f4(cc,dd,ee) + X[ 9] + 0x5c4dd124, 15) + aa; dd = RL(dd, 10); - aa = RL(aa + f4(bb,cc,dd) + X[ 1] + 0x5c4dd124, 13) + ee; cc = RL(cc, 10); - ee = RL(ee + f4(aa,bb,cc) + X[ 2] + 0x5c4dd124, 11) + dd; bb = RL(bb, 10); - - t = b; b = bb; bb = t; - - // - // Rounds 32-47 - // - // left - d = RL(d + f3(e,a,b) + X[ 3] + 0x6ed9eba1, 11) + c; a = RL(a, 10); - c = RL(c + f3(d,e,a) + X[10] + 0x6ed9eba1, 13) + b; e = RL(e, 10); - b = RL(b + f3(c,d,e) + X[14] + 0x6ed9eba1, 6) + a; d = RL(d, 10); - a = RL(a + f3(b,c,d) + X[ 4] + 0x6ed9eba1, 7) + e; c = RL(c, 10); - e = RL(e + f3(a,b,c) + X[ 9] + 0x6ed9eba1, 14) + d; b = RL(b, 10); - d = RL(d + f3(e,a,b) + X[15] + 0x6ed9eba1, 9) + c; a = RL(a, 10); - c = RL(c + f3(d,e,a) + X[ 8] + 0x6ed9eba1, 13) + b; e = RL(e, 10); - b = RL(b + f3(c,d,e) + X[ 1] + 0x6ed9eba1, 15) + a; d = RL(d, 10); - a = RL(a + f3(b,c,d) + X[ 2] + 0x6ed9eba1, 14) + e; c = RL(c, 10); - e = RL(e + f3(a,b,c) + X[ 7] + 0x6ed9eba1, 8) + d; b = RL(b, 10); - d = RL(d + f3(e,a,b) + X[ 0] + 0x6ed9eba1, 13) + c; a = RL(a, 10); - c = RL(c + f3(d,e,a) + X[ 6] + 0x6ed9eba1, 6) + b; e = RL(e, 10); - b = RL(b + f3(c,d,e) + X[13] + 0x6ed9eba1, 5) + a; d = RL(d, 10); - a = RL(a + f3(b,c,d) + X[11] + 0x6ed9eba1, 12) + e; c = RL(c, 10); - e = RL(e + f3(a,b,c) + X[ 5] + 0x6ed9eba1, 7) + d; b = RL(b, 10); - d = RL(d + f3(e,a,b) + X[12] + 0x6ed9eba1, 5) + c; a = RL(a, 10); - - // right - dd = RL(dd + f3(ee,aa,bb) + X[15] + 0x6d703ef3, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f3(dd,ee,aa) + X[ 5] + 0x6d703ef3, 7) + bb; ee = RL(ee, 10); - bb = RL(bb + f3(cc,dd,ee) + X[ 1] + 0x6d703ef3, 15) + aa; dd = RL(dd, 10); - aa = RL(aa + f3(bb,cc,dd) + X[ 3] + 0x6d703ef3, 11) + ee; cc = RL(cc, 10); - ee = RL(ee + f3(aa,bb,cc) + X[ 7] + 0x6d703ef3, 8) + dd; bb = RL(bb, 10); - dd = RL(dd + f3(ee,aa,bb) + X[14] + 0x6d703ef3, 6) + cc; aa = RL(aa, 10); - cc = RL(cc + f3(dd,ee,aa) + X[ 6] + 0x6d703ef3, 6) + bb; ee = RL(ee, 10); - bb = RL(bb + f3(cc,dd,ee) + X[ 9] + 0x6d703ef3, 14) + aa; dd = RL(dd, 10); - aa = RL(aa + f3(bb,cc,dd) + X[11] + 0x6d703ef3, 12) + ee; cc = RL(cc, 10); - ee = RL(ee + f3(aa,bb,cc) + X[ 8] + 0x6d703ef3, 13) + dd; bb = RL(bb, 10); - dd = RL(dd + f3(ee,aa,bb) + X[12] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); - cc = RL(cc + f3(dd,ee,aa) + X[ 2] + 0x6d703ef3, 14) + bb; ee = RL(ee, 10); - bb = RL(bb + f3(cc,dd,ee) + X[10] + 0x6d703ef3, 13) + aa; dd = RL(dd, 10); - aa = RL(aa + f3(bb,cc,dd) + X[ 0] + 0x6d703ef3, 13) + ee; cc = RL(cc, 10); - ee = RL(ee + f3(aa,bb,cc) + X[ 4] + 0x6d703ef3, 7) + dd; bb = RL(bb, 10); - dd = RL(dd + f3(ee,aa,bb) + X[13] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); - - t = c; c = cc; cc = t; - - // - // Rounds 48-63 - // - // left - c = RL(c + f4(d,e,a) + X[ 1] + 0x8f1bbcdc, 11) + b; e = RL(e, 10); - b = RL(b + f4(c,d,e) + X[ 9] + 0x8f1bbcdc, 12) + a; d = RL(d, 10); - a = RL(a + f4(b,c,d) + X[11] + 0x8f1bbcdc, 14) + e; c = RL(c, 10); - e = RL(e + f4(a,b,c) + X[10] + 0x8f1bbcdc, 15) + d; b = RL(b, 10); - d = RL(d + f4(e,a,b) + X[ 0] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); - c = RL(c + f4(d,e,a) + X[ 8] + 0x8f1bbcdc, 15) + b; e = RL(e, 10); - b = RL(b + f4(c,d,e) + X[12] + 0x8f1bbcdc, 9) + a; d = RL(d, 10); - a = RL(a + f4(b,c,d) + X[ 4] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); - e = RL(e + f4(a,b,c) + X[13] + 0x8f1bbcdc, 9) + d; b = RL(b, 10); - d = RL(d + f4(e,a,b) + X[ 3] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); - c = RL(c + f4(d,e,a) + X[ 7] + 0x8f1bbcdc, 5) + b; e = RL(e, 10); - b = RL(b + f4(c,d,e) + X[15] + 0x8f1bbcdc, 6) + a; d = RL(d, 10); - a = RL(a + f4(b,c,d) + X[14] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); - e = RL(e + f4(a,b,c) + X[ 5] + 0x8f1bbcdc, 6) + d; b = RL(b, 10); - d = RL(d + f4(e,a,b) + X[ 6] + 0x8f1bbcdc, 5) + c; a = RL(a, 10); - c = RL(c + f4(d,e,a) + X[ 2] + 0x8f1bbcdc, 12) + b; e = RL(e, 10); - - // right - cc = RL(cc + f2(dd,ee,aa) + X[ 8] + 0x7a6d76e9, 15) + bb; ee = RL(ee, 10); - bb = RL(bb + f2(cc,dd,ee) + X[ 6] + 0x7a6d76e9, 5) + aa; dd = RL(dd, 10); - aa = RL(aa + f2(bb,cc,dd) + X[ 4] + 0x7a6d76e9, 8) + ee; cc = RL(cc, 10); - ee = RL(ee + f2(aa,bb,cc) + X[ 1] + 0x7a6d76e9, 11) + dd; bb = RL(bb, 10); - dd = RL(dd + f2(ee,aa,bb) + X[ 3] + 0x7a6d76e9, 14) + cc; aa = RL(aa, 10); - cc = RL(cc + f2(dd,ee,aa) + X[11] + 0x7a6d76e9, 14) + bb; ee = RL(ee, 10); - bb = RL(bb + f2(cc,dd,ee) + X[15] + 0x7a6d76e9, 6) + aa; dd = RL(dd, 10); - aa = RL(aa + f2(bb,cc,dd) + X[ 0] + 0x7a6d76e9, 14) + ee; cc = RL(cc, 10); - ee = RL(ee + f2(aa,bb,cc) + X[ 5] + 0x7a6d76e9, 6) + dd; bb = RL(bb, 10); - dd = RL(dd + f2(ee,aa,bb) + X[12] + 0x7a6d76e9, 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f2(dd,ee,aa) + X[ 2] + 0x7a6d76e9, 12) + bb; ee = RL(ee, 10); - bb = RL(bb + f2(cc,dd,ee) + X[13] + 0x7a6d76e9, 9) + aa; dd = RL(dd, 10); - aa = RL(aa + f2(bb,cc,dd) + X[ 9] + 0x7a6d76e9, 12) + ee; cc = RL(cc, 10); - ee = RL(ee + f2(aa,bb,cc) + X[ 7] + 0x7a6d76e9, 5) + dd; bb = RL(bb, 10); - dd = RL(dd + f2(ee,aa,bb) + X[10] + 0x7a6d76e9, 15) + cc; aa = RL(aa, 10); - cc = RL(cc + f2(dd,ee,aa) + X[14] + 0x7a6d76e9, 8) + bb; ee = RL(ee, 10); - - t = d; d = dd; dd = t; - - // - // Rounds 64-79 - // - // left - b = RL(b + f5(c,d,e) + X[ 4] + 0xa953fd4e, 9) + a; d = RL(d, 10); - a = RL(a + f5(b,c,d) + X[ 0] + 0xa953fd4e, 15) + e; c = RL(c, 10); - e = RL(e + f5(a,b,c) + X[ 5] + 0xa953fd4e, 5) + d; b = RL(b, 10); - d = RL(d + f5(e,a,b) + X[ 9] + 0xa953fd4e, 11) + c; a = RL(a, 10); - c = RL(c + f5(d,e,a) + X[ 7] + 0xa953fd4e, 6) + b; e = RL(e, 10); - b = RL(b + f5(c,d,e) + X[12] + 0xa953fd4e, 8) + a; d = RL(d, 10); - a = RL(a + f5(b,c,d) + X[ 2] + 0xa953fd4e, 13) + e; c = RL(c, 10); - e = RL(e + f5(a,b,c) + X[10] + 0xa953fd4e, 12) + d; b = RL(b, 10); - d = RL(d + f5(e,a,b) + X[14] + 0xa953fd4e, 5) + c; a = RL(a, 10); - c = RL(c + f5(d,e,a) + X[ 1] + 0xa953fd4e, 12) + b; e = RL(e, 10); - b = RL(b + f5(c,d,e) + X[ 3] + 0xa953fd4e, 13) + a; d = RL(d, 10); - a = RL(a + f5(b,c,d) + X[ 8] + 0xa953fd4e, 14) + e; c = RL(c, 10); - e = RL(e + f5(a,b,c) + X[11] + 0xa953fd4e, 11) + d; b = RL(b, 10); - d = RL(d + f5(e,a,b) + X[ 6] + 0xa953fd4e, 8) + c; a = RL(a, 10); - c = RL(c + f5(d,e,a) + X[15] + 0xa953fd4e, 5) + b; e = RL(e, 10); - b = RL(b + f5(c,d,e) + X[13] + 0xa953fd4e, 6) + a; d = RL(d, 10); - - // right - bb = RL(bb + f1(cc,dd,ee) + X[12], 8) + aa; dd = RL(dd, 10); - aa = RL(aa + f1(bb,cc,dd) + X[15], 5) + ee; cc = RL(cc, 10); - ee = RL(ee + f1(aa,bb,cc) + X[10], 12) + dd; bb = RL(bb, 10); - dd = RL(dd + f1(ee,aa,bb) + X[ 4], 9) + cc; aa = RL(aa, 10); - cc = RL(cc + f1(dd,ee,aa) + X[ 1], 12) + bb; ee = RL(ee, 10); - bb = RL(bb + f1(cc,dd,ee) + X[ 5], 5) + aa; dd = RL(dd, 10); - aa = RL(aa + f1(bb,cc,dd) + X[ 8], 14) + ee; cc = RL(cc, 10); - ee = RL(ee + f1(aa,bb,cc) + X[ 7], 6) + dd; bb = RL(bb, 10); - dd = RL(dd + f1(ee,aa,bb) + X[ 6], 8) + cc; aa = RL(aa, 10); - cc = RL(cc + f1(dd,ee,aa) + X[ 2], 13) + bb; ee = RL(ee, 10); - bb = RL(bb + f1(cc,dd,ee) + X[13], 6) + aa; dd = RL(dd, 10); - aa = RL(aa + f1(bb,cc,dd) + X[14], 5) + ee; cc = RL(cc, 10); - ee = RL(ee + f1(aa,bb,cc) + X[ 0], 15) + dd; bb = RL(bb, 10); - dd = RL(dd + f1(ee,aa,bb) + X[ 3], 13) + cc; aa = RL(aa, 10); - cc = RL(cc + f1(dd,ee,aa) + X[ 9], 11) + bb; ee = RL(ee, 10); - bb = RL(bb + f1(cc,dd,ee) + X[11], 11) + aa; dd = RL(dd, 10); - - // - // do (e, ee) swap as part of assignment. - // - - H0 += a; - H1 += b; - H2 += c; - H3 += d; - H4 += ee; - H5 += aa; - H6 += bb; - H7 += cc; - H8 += dd; - H9 += e; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } -} diff --git a/src/org/bouncycastle/crypto/digests/SHA1Digest.java b/src/org/bouncycastle/crypto/digests/SHA1Digest.java deleted file mode 100644 index 7f8d30a..0000000 --- a/src/org/bouncycastle/crypto/digests/SHA1Digest.java +++ /dev/null @@ -1,290 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.util.Pack; - -/** - * implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. - * - * It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 - * is the "endienness" of the word processing! - */ -public class SHA1Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 20; - - private int H1, H2, H3, H4, H5; - - private int[] X = new int[80]; - private int xOff; - - /** - * Standard constructor - */ - public SHA1Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public SHA1Digest(SHA1Digest t) - { - super(t); - - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - H5 = t.H5; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "SHA-1"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - // Note: Inlined for performance -// X[xOff] = Pack.bigEndianToInt(in, inOff); - int n = in[ inOff] << 24; - n |= (in[++inOff] & 0xff) << 16; - n |= (in[++inOff] & 0xff) << 8; - n |= (in[++inOff] & 0xff); - X[xOff] = n; - - if (++xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength >>> 32); - X[15] = (int)(bitLength & 0xffffffff); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - Pack.intToBigEndian(H1, out, outOff); - Pack.intToBigEndian(H2, out, outOff + 4); - Pack.intToBigEndian(H3, out, outOff + 8); - Pack.intToBigEndian(H4, out, outOff + 12); - Pack.intToBigEndian(H5, out, outOff + 16); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables - */ - public void reset() - { - super.reset(); - - H1 = 0x67452301; - H2 = 0xefcdab89; - H3 = 0x98badcfe; - H4 = 0x10325476; - H5 = 0xc3d2e1f0; - - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - // - // Additive constants - // - private static final int Y1 = 0x5a827999; - private static final int Y2 = 0x6ed9eba1; - private static final int Y3 = 0x8f1bbcdc; - private static final int Y4 = 0xca62c1d6; - - private int f( - int u, - int v, - int w) - { - return ((u & v) | ((~u) & w)); - } - - private int h( - int u, - int v, - int w) - { - return (u ^ v ^ w); - } - - private int g( - int u, - int v, - int w) - { - return ((u & v) | (u & w) | (v & w)); - } - - protected void processBlock() - { - // - // expand 16 word block into 80 word block. - // - for (int i = 16; i < 80; i++) - { - int t = X[i - 3] ^ X[i - 8] ^ X[i - 14] ^ X[i - 16]; - X[i] = t << 1 | t >>> 31; - } - - // - // set up working variables. - // - int A = H1; - int B = H2; - int C = H3; - int D = H4; - int E = H5; - - // - // round 1 - // - int idx = 0; - - for (int j = 0; j < 4; j++) - { - // E = rotateLeft(A, 5) + f(B, C, D) + E + X[idx++] + Y1 - // B = rotateLeft(B, 30) - E += (A << 5 | A >>> 27) + f(B, C, D) + X[idx++] + Y1; - B = B << 30 | B >>> 2; - - D += (E << 5 | E >>> 27) + f(A, B, C) + X[idx++] + Y1; - A = A << 30 | A >>> 2; - - C += (D << 5 | D >>> 27) + f(E, A, B) + X[idx++] + Y1; - E = E << 30 | E >>> 2; - - B += (C << 5 | C >>> 27) + f(D, E, A) + X[idx++] + Y1; - D = D << 30 | D >>> 2; - - A += (B << 5 | B >>> 27) + f(C, D, E) + X[idx++] + Y1; - C = C << 30 | C >>> 2; - } - - // - // round 2 - // - for (int j = 0; j < 4; j++) - { - // E = rotateLeft(A, 5) + h(B, C, D) + E + X[idx++] + Y2 - // B = rotateLeft(B, 30) - E += (A << 5 | A >>> 27) + h(B, C, D) + X[idx++] + Y2; - B = B << 30 | B >>> 2; - - D += (E << 5 | E >>> 27) + h(A, B, C) + X[idx++] + Y2; - A = A << 30 | A >>> 2; - - C += (D << 5 | D >>> 27) + h(E, A, B) + X[idx++] + Y2; - E = E << 30 | E >>> 2; - - B += (C << 5 | C >>> 27) + h(D, E, A) + X[idx++] + Y2; - D = D << 30 | D >>> 2; - - A += (B << 5 | B >>> 27) + h(C, D, E) + X[idx++] + Y2; - C = C << 30 | C >>> 2; - } - - // - // round 3 - // - for (int j = 0; j < 4; j++) - { - // E = rotateLeft(A, 5) + g(B, C, D) + E + X[idx++] + Y3 - // B = rotateLeft(B, 30) - E += (A << 5 | A >>> 27) + g(B, C, D) + X[idx++] + Y3; - B = B << 30 | B >>> 2; - - D += (E << 5 | E >>> 27) + g(A, B, C) + X[idx++] + Y3; - A = A << 30 | A >>> 2; - - C += (D << 5 | D >>> 27) + g(E, A, B) + X[idx++] + Y3; - E = E << 30 | E >>> 2; - - B += (C << 5 | C >>> 27) + g(D, E, A) + X[idx++] + Y3; - D = D << 30 | D >>> 2; - - A += (B << 5 | B >>> 27) + g(C, D, E) + X[idx++] + Y3; - C = C << 30 | C >>> 2; - } - - // - // round 4 - // - for (int j = 0; j <= 3; j++) - { - // E = rotateLeft(A, 5) + h(B, C, D) + E + X[idx++] + Y4 - // B = rotateLeft(B, 30) - E += (A << 5 | A >>> 27) + h(B, C, D) + X[idx++] + Y4; - B = B << 30 | B >>> 2; - - D += (E << 5 | E >>> 27) + h(A, B, C) + X[idx++] + Y4; - A = A << 30 | A >>> 2; - - C += (D << 5 | D >>> 27) + h(E, A, B) + X[idx++] + Y4; - E = E << 30 | E >>> 2; - - B += (C << 5 | C >>> 27) + h(D, E, A) + X[idx++] + Y4; - D = D << 30 | D >>> 2; - - A += (B << 5 | B >>> 27) + h(C, D, E) + X[idx++] + Y4; - C = C << 30 | C >>> 2; - } - - - H1 += A; - H2 += B; - H3 += C; - H4 += D; - H5 += E; - - // - // reset start of the buffer. - // - xOff = 0; - for (int i = 0; i < 16; i++) - { - X[i] = 0; - } - } -} - - - - diff --git a/src/org/bouncycastle/crypto/digests/SHA224Digest.java b/src/org/bouncycastle/crypto/digests/SHA224Digest.java deleted file mode 100644 index d144c54..0000000 --- a/src/org/bouncycastle/crypto/digests/SHA224Digest.java +++ /dev/null @@ -1,292 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -import org.bouncycastle.crypto.digests.GeneralDigest; -import org.bouncycastle.crypto.util.Pack; - - -/** - * SHA-224 as described in RFC 3874 - *

        - *         block  word  digest
        - * SHA-1   512    32    160
        - * SHA-224 512    32    224
        - * SHA-256 512    32    256
        - * SHA-384 1024   64    384
        - * SHA-512 1024   64    512
        - * 
        - */ -public class SHA224Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 28; - - private int H1, H2, H3, H4, H5, H6, H7, H8; - - private int[] X = new int[64]; - private int xOff; - - /** - * Standard constructor - */ - public SHA224Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public SHA224Digest(SHA224Digest t) - { - super(t); - - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - H5 = t.H5; - H6 = t.H6; - H7 = t.H7; - H8 = t.H8; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "SHA-224"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - // Note: Inlined for performance -// X[xOff] = Pack.bigEndianToInt(in, inOff); - int n = in[ inOff] << 24; - n |= (in[++inOff] & 0xff) << 16; - n |= (in[++inOff] & 0xff) << 8; - n |= (in[++inOff] & 0xff); - X[xOff] = n; - - if (++xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength >>> 32); - X[15] = (int)(bitLength & 0xffffffff); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - Pack.intToBigEndian(H1, out, outOff); - Pack.intToBigEndian(H2, out, outOff + 4); - Pack.intToBigEndian(H3, out, outOff + 8); - Pack.intToBigEndian(H4, out, outOff + 12); - Pack.intToBigEndian(H5, out, outOff + 16); - Pack.intToBigEndian(H6, out, outOff + 20); - Pack.intToBigEndian(H7, out, outOff + 24); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables - */ - public void reset() - { - super.reset(); - - /* SHA-224 initial hash value - */ - - H1 = 0xc1059ed8; - H2 = 0x367cd507; - H3 = 0x3070dd17; - H4 = 0xf70e5939; - H5 = 0xffc00b31; - H6 = 0x68581511; - H7 = 0x64f98fa7; - H8 = 0xbefa4fa4; - - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - protected void processBlock() - { - // - // expand 16 word block into 64 word blocks. - // - for (int t = 16; t <= 63; t++) - { - X[t] = Theta1(X[t - 2]) + X[t - 7] + Theta0(X[t - 15]) + X[t - 16]; - } - - // - // set up working variables. - // - int a = H1; - int b = H2; - int c = H3; - int d = H4; - int e = H5; - int f = H6; - int g = H7; - int h = H8; - - - int t = 0; - for(int i = 0; i < 8; i ++) - { - // t = 8 * i - h += Sum1(e) + Ch(e, f, g) + K[t] + X[t]; - d += h; - h += Sum0(a) + Maj(a, b, c); - ++t; - - // t = 8 * i + 1 - g += Sum1(d) + Ch(d, e, f) + K[t] + X[t]; - c += g; - g += Sum0(h) + Maj(h, a, b); - ++t; - - // t = 8 * i + 2 - f += Sum1(c) + Ch(c, d, e) + K[t] + X[t]; - b += f; - f += Sum0(g) + Maj(g, h, a); - ++t; - - // t = 8 * i + 3 - e += Sum1(b) + Ch(b, c, d) + K[t] + X[t]; - a += e; - e += Sum0(f) + Maj(f, g, h); - ++t; - - // t = 8 * i + 4 - d += Sum1(a) + Ch(a, b, c) + K[t] + X[t]; - h += d; - d += Sum0(e) + Maj(e, f, g); - ++t; - - // t = 8 * i + 5 - c += Sum1(h) + Ch(h, a, b) + K[t] + X[t]; - g += c; - c += Sum0(d) + Maj(d, e, f); - ++t; - - // t = 8 * i + 6 - b += Sum1(g) + Ch(g, h, a) + K[t] + X[t]; - f += b; - b += Sum0(c) + Maj(c, d, e); - ++t; - - // t = 8 * i + 7 - a += Sum1(f) + Ch(f, g, h) + K[t] + X[t]; - e += a; - a += Sum0(b) + Maj(b, c, d); - ++t; - } - - H1 += a; - H2 += b; - H3 += c; - H4 += d; - H5 += e; - H6 += f; - H7 += g; - H8 += h; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i < 16; i++) - { - X[i] = 0; - } - } - - /* SHA-224 functions */ - private int Ch( - int x, - int y, - int z) - { - return ((x & y) ^ ((~x) & z)); - } - - private int Maj( - int x, - int y, - int z) - { - return ((x & y) ^ (x & z) ^ (y & z)); - } - - private int Sum0( - int x) - { - return ((x >>> 2) | (x << 30)) ^ ((x >>> 13) | (x << 19)) ^ ((x >>> 22) | (x << 10)); - } - - private int Sum1( - int x) - { - return ((x >>> 6) | (x << 26)) ^ ((x >>> 11) | (x << 21)) ^ ((x >>> 25) | (x << 7)); - } - - private int Theta0( - int x) - { - return ((x >>> 7) | (x << 25)) ^ ((x >>> 18) | (x << 14)) ^ (x >>> 3); - } - - private int Theta1( - int x) - { - return ((x >>> 17) | (x << 15)) ^ ((x >>> 19) | (x << 13)) ^ (x >>> 10); - } - - /* SHA-224 Constants - * (represent the first 32 bits of the fractional parts of the - * cube roots of the first sixty-four prime numbers) - */ - static final int K[] = { - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - }; -} - diff --git a/src/org/bouncycastle/crypto/digests/SHA256Digest.java b/src/org/bouncycastle/crypto/digests/SHA256Digest.java deleted file mode 100644 index abd9c1b..0000000 --- a/src/org/bouncycastle/crypto/digests/SHA256Digest.java +++ /dev/null @@ -1,295 +0,0 @@ -package org.bouncycastle.crypto.digests; - - -import org.bouncycastle.crypto.digests.GeneralDigest; -import org.bouncycastle.crypto.util.Pack; - - -/** - * FIPS 180-2 implementation of SHA-256. - * - *
        - *         block  word  digest
        - * SHA-1   512    32    160
        - * SHA-256 512    32    256
        - * SHA-384 1024   64    384
        - * SHA-512 1024   64    512
        - * 
        - */ -public class SHA256Digest - extends GeneralDigest -{ - private static final int DIGEST_LENGTH = 32; - - private int H1, H2, H3, H4, H5, H6, H7, H8; - - private int[] X = new int[64]; - private int xOff; - - /** - * Standard constructor - */ - public SHA256Digest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public SHA256Digest(SHA256Digest t) - { - super(t); - - H1 = t.H1; - H2 = t.H2; - H3 = t.H3; - H4 = t.H4; - H5 = t.H5; - H6 = t.H6; - H7 = t.H7; - H8 = t.H8; - - System.arraycopy(t.X, 0, X, 0, t.X.length); - xOff = t.xOff; - } - - public String getAlgorithmName() - { - return "SHA-256"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - protected void processWord( - byte[] in, - int inOff) - { - // Note: Inlined for performance -// X[xOff] = Pack.bigEndianToInt(in, inOff); - int n = in[inOff] << 24; - n |= (in[++inOff] & 0xff) << 16; - n |= (in[++inOff] & 0xff) << 8; - n |= (in[++inOff] & 0xff); - X[xOff] = n; - - if (++xOff == 16) - { - processBlock(); - } - } - - protected void processLength( - long bitLength) - { - if (xOff > 14) - { - processBlock(); - } - - X[14] = (int)(bitLength >>> 32); - X[15] = (int)(bitLength & 0xffffffff); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - Pack.intToBigEndian(H1, out, outOff); - Pack.intToBigEndian(H2, out, outOff + 4); - Pack.intToBigEndian(H3, out, outOff + 8); - Pack.intToBigEndian(H4, out, outOff + 12); - Pack.intToBigEndian(H5, out, outOff + 16); - Pack.intToBigEndian(H6, out, outOff + 20); - Pack.intToBigEndian(H7, out, outOff + 24); - Pack.intToBigEndian(H8, out, outOff + 28); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables - */ - public void reset() - { - super.reset(); - - /* SHA-256 initial hash value - * The first 32 bits of the fractional parts of the square roots - * of the first eight prime numbers - */ - - H1 = 0x6a09e667; - H2 = 0xbb67ae85; - H3 = 0x3c6ef372; - H4 = 0xa54ff53a; - H5 = 0x510e527f; - H6 = 0x9b05688c; - H7 = 0x1f83d9ab; - H8 = 0x5be0cd19; - - xOff = 0; - for (int i = 0; i != X.length; i++) - { - X[i] = 0; - } - } - - protected void processBlock() - { - // - // expand 16 word block into 64 word blocks. - // - for (int t = 16; t <= 63; t++) - { - X[t] = Theta1(X[t - 2]) + X[t - 7] + Theta0(X[t - 15]) + X[t - 16]; - } - - // - // set up working variables. - // - int a = H1; - int b = H2; - int c = H3; - int d = H4; - int e = H5; - int f = H6; - int g = H7; - int h = H8; - - int t = 0; - for(int i = 0; i < 8; i ++) - { - // t = 8 * i - h += Sum1(e) + Ch(e, f, g) + K[t] + X[t]; - d += h; - h += Sum0(a) + Maj(a, b, c); - ++t; - - // t = 8 * i + 1 - g += Sum1(d) + Ch(d, e, f) + K[t] + X[t]; - c += g; - g += Sum0(h) + Maj(h, a, b); - ++t; - - // t = 8 * i + 2 - f += Sum1(c) + Ch(c, d, e) + K[t] + X[t]; - b += f; - f += Sum0(g) + Maj(g, h, a); - ++t; - - // t = 8 * i + 3 - e += Sum1(b) + Ch(b, c, d) + K[t] + X[t]; - a += e; - e += Sum0(f) + Maj(f, g, h); - ++t; - - // t = 8 * i + 4 - d += Sum1(a) + Ch(a, b, c) + K[t] + X[t]; - h += d; - d += Sum0(e) + Maj(e, f, g); - ++t; - - // t = 8 * i + 5 - c += Sum1(h) + Ch(h, a, b) + K[t] + X[t]; - g += c; - c += Sum0(d) + Maj(d, e, f); - ++t; - - // t = 8 * i + 6 - b += Sum1(g) + Ch(g, h, a) + K[t] + X[t]; - f += b; - b += Sum0(c) + Maj(c, d, e); - ++t; - - // t = 8 * i + 7 - a += Sum1(f) + Ch(f, g, h) + K[t] + X[t]; - e += a; - a += Sum0(b) + Maj(b, c, d); - ++t; - } - - H1 += a; - H2 += b; - H3 += c; - H4 += d; - H5 += e; - H6 += f; - H7 += g; - H8 += h; - - // - // reset the offset and clean out the word buffer. - // - xOff = 0; - for (int i = 0; i < 16; i++) - { - X[i] = 0; - } - } - - /* SHA-256 functions */ - private int Ch( - int x, - int y, - int z) - { - return (x & y) ^ ((~x) & z); - } - - private int Maj( - int x, - int y, - int z) - { - return (x & y) ^ (x & z) ^ (y & z); - } - - private int Sum0( - int x) - { - return ((x >>> 2) | (x << 30)) ^ ((x >>> 13) | (x << 19)) ^ ((x >>> 22) | (x << 10)); - } - - private int Sum1( - int x) - { - return ((x >>> 6) | (x << 26)) ^ ((x >>> 11) | (x << 21)) ^ ((x >>> 25) | (x << 7)); - } - - private int Theta0( - int x) - { - return ((x >>> 7) | (x << 25)) ^ ((x >>> 18) | (x << 14)) ^ (x >>> 3); - } - - private int Theta1( - int x) - { - return ((x >>> 17) | (x << 15)) ^ ((x >>> 19) | (x << 13)) ^ (x >>> 10); - } - - /* SHA-256 Constants - * (represent the first 32 bits of the fractional parts of the - * cube roots of the first sixty-four prime numbers) - */ - static final int K[] = { - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - }; -} - diff --git a/src/org/bouncycastle/crypto/digests/SHA384Digest.java b/src/org/bouncycastle/crypto/digests/SHA384Digest.java deleted file mode 100644 index cdd979a..0000000 --- a/src/org/bouncycastle/crypto/digests/SHA384Digest.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.util.Pack; - - -/** - * FIPS 180-2 implementation of SHA-384. - * - *
        - *         block  word  digest
        - * SHA-1   512    32    160
        - * SHA-256 512    32    256
        - * SHA-384 1024   64    384
        - * SHA-512 1024   64    512
        - * 
        - */ -public class SHA384Digest - extends LongDigest -{ - - private static final int DIGEST_LENGTH = 48; - - /** - * Standard constructor - */ - public SHA384Digest() - { - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public SHA384Digest(SHA384Digest t) - { - super(t); - } - - public String getAlgorithmName() - { - return "SHA-384"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - Pack.longToBigEndian(H1, out, outOff); - Pack.longToBigEndian(H2, out, outOff + 8); - Pack.longToBigEndian(H3, out, outOff + 16); - Pack.longToBigEndian(H4, out, outOff + 24); - Pack.longToBigEndian(H5, out, outOff + 32); - Pack.longToBigEndian(H6, out, outOff + 40); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables - */ - public void reset() - { - super.reset(); - - /* SHA-384 initial hash value - * The first 64 bits of the fractional parts of the square roots - * of the 9th through 16th prime numbers - */ - H1 = 0xcbbb9d5dc1059ed8l; - H2 = 0x629a292a367cd507l; - H3 = 0x9159015a3070dd17l; - H4 = 0x152fecd8f70e5939l; - H5 = 0x67332667ffc00b31l; - H6 = 0x8eb44a8768581511l; - H7 = 0xdb0c2e0d64f98fa7l; - H8 = 0x47b5481dbefa4fa4l; - } -} diff --git a/src/org/bouncycastle/crypto/digests/SHA512Digest.java b/src/org/bouncycastle/crypto/digests/SHA512Digest.java deleted file mode 100644 index 34a8e4e..0000000 --- a/src/org/bouncycastle/crypto/digests/SHA512Digest.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.util.Pack; - - -/** - * FIPS 180-2 implementation of SHA-512. - * - *
        - *         block  word  digest
        - * SHA-1   512    32    160
        - * SHA-256 512    32    256
        - * SHA-384 1024   64    384
        - * SHA-512 1024   64    512
        - * 
        - */ -public class SHA512Digest - extends LongDigest -{ - private static final int DIGEST_LENGTH = 64; - - /** - * Standard constructor - */ - public SHA512Digest() - { - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public SHA512Digest(SHA512Digest t) - { - super(t); - } - - public String getAlgorithmName() - { - return "SHA-512"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - Pack.longToBigEndian(H1, out, outOff); - Pack.longToBigEndian(H2, out, outOff + 8); - Pack.longToBigEndian(H3, out, outOff + 16); - Pack.longToBigEndian(H4, out, outOff + 24); - Pack.longToBigEndian(H5, out, outOff + 32); - Pack.longToBigEndian(H6, out, outOff + 40); - Pack.longToBigEndian(H7, out, outOff + 48); - Pack.longToBigEndian(H8, out, outOff + 56); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables - */ - public void reset() - { - super.reset(); - - /* SHA-512 initial hash value - * The first 64 bits of the fractional parts of the square roots - * of the first eight prime numbers - */ - H1 = 0x6a09e667f3bcc908L; - H2 = 0xbb67ae8584caa73bL; - H3 = 0x3c6ef372fe94f82bL; - H4 = 0xa54ff53a5f1d36f1L; - H5 = 0x510e527fade682d1L; - H6 = 0x9b05688c2b3e6c1fL; - H7 = 0x1f83d9abfb41bd6bL; - H8 = 0x5be0cd19137e2179L; - } -} - diff --git a/src/org/bouncycastle/crypto/digests/ShortenedDigest.java b/src/org/bouncycastle/crypto/digests/ShortenedDigest.java deleted file mode 100644 index 89033e8..0000000 --- a/src/org/bouncycastle/crypto/digests/ShortenedDigest.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.ExtendedDigest; - -/** - * Wrapper class that reduces the output length of a particular digest to - * only the first n bytes of the digest function. - */ -public class ShortenedDigest - implements ExtendedDigest -{ - private ExtendedDigest baseDigest; - private int length; - - /** - * Base constructor. - * - * @param baseDigest underlying digest to use. - * @param length length in bytes of the output of doFinal. - * @exception IllegalArgumentException if baseDigest is null, or length is greater than baseDigest.getDigestSize(). - */ - public ShortenedDigest( - ExtendedDigest baseDigest, - int length) - { - if (baseDigest == null) - { - throw new IllegalArgumentException("baseDigest must not be null"); - } - - if (length > baseDigest.getDigestSize()) - { - throw new IllegalArgumentException("baseDigest output not large enough to support length"); - } - - this.baseDigest = baseDigest; - this.length = length; - } - - public String getAlgorithmName() - { - return baseDigest.getAlgorithmName() + "(" + length * 8 + ")"; - } - - public int getDigestSize() - { - return length; - } - - public void update(byte in) - { - baseDigest.update(in); - } - - public void update(byte[] in, int inOff, int len) - { - baseDigest.update(in, inOff, len); - } - - public int doFinal(byte[] out, int outOff) - { - byte[] tmp = new byte[baseDigest.getDigestSize()]; - - baseDigest.doFinal(tmp, 0); - - System.arraycopy(tmp, 0, out, outOff, length); - - return length; - } - - public void reset() - { - baseDigest.reset(); - } - - public int getByteLength() - { - return baseDigest.getByteLength(); - } -} diff --git a/src/org/bouncycastle/crypto/digests/TigerDigest.java b/src/org/bouncycastle/crypto/digests/TigerDigest.java deleted file mode 100644 index 0062ea9..0000000 --- a/src/org/bouncycastle/crypto/digests/TigerDigest.java +++ /dev/null @@ -1,866 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.ExtendedDigest; - -/** - * implementation of Tiger based on: - * - * http://www.cs.technion.ac.il/~biham/Reports/Tiger - */ -public class TigerDigest - implements ExtendedDigest -{ - private static final int BYTE_LENGTH = 64; - - /* - * S-Boxes. - */ - private static final long[] t1 = { - 0x02AAB17CF7E90C5EL /* 0 */, 0xAC424B03E243A8ECL /* 1 */, - 0x72CD5BE30DD5FCD3L /* 2 */, 0x6D019B93F6F97F3AL /* 3 */, - 0xCD9978FFD21F9193L /* 4 */, 0x7573A1C9708029E2L /* 5 */, - 0xB164326B922A83C3L /* 6 */, 0x46883EEE04915870L /* 7 */, - 0xEAACE3057103ECE6L /* 8 */, 0xC54169B808A3535CL /* 9 */, - 0x4CE754918DDEC47CL /* 10 */, 0x0AA2F4DFDC0DF40CL /* 11 */, - 0x10B76F18A74DBEFAL /* 12 */, 0xC6CCB6235AD1AB6AL /* 13 */, - 0x13726121572FE2FFL /* 14 */, 0x1A488C6F199D921EL /* 15 */, - 0x4BC9F9F4DA0007CAL /* 16 */, 0x26F5E6F6E85241C7L /* 17 */, - 0x859079DBEA5947B6L /* 18 */, 0x4F1885C5C99E8C92L /* 19 */, - 0xD78E761EA96F864BL /* 20 */, 0x8E36428C52B5C17DL /* 21 */, - 0x69CF6827373063C1L /* 22 */, 0xB607C93D9BB4C56EL /* 23 */, - 0x7D820E760E76B5EAL /* 24 */, 0x645C9CC6F07FDC42L /* 25 */, - 0xBF38A078243342E0L /* 26 */, 0x5F6B343C9D2E7D04L /* 27 */, - 0xF2C28AEB600B0EC6L /* 28 */, 0x6C0ED85F7254BCACL /* 29 */, - 0x71592281A4DB4FE5L /* 30 */, 0x1967FA69CE0FED9FL /* 31 */, - 0xFD5293F8B96545DBL /* 32 */, 0xC879E9D7F2A7600BL /* 33 */, - 0x860248920193194EL /* 34 */, 0xA4F9533B2D9CC0B3L /* 35 */, - 0x9053836C15957613L /* 36 */, 0xDB6DCF8AFC357BF1L /* 37 */, - 0x18BEEA7A7A370F57L /* 38 */, 0x037117CA50B99066L /* 39 */, - 0x6AB30A9774424A35L /* 40 */, 0xF4E92F02E325249BL /* 41 */, - 0x7739DB07061CCAE1L /* 42 */, 0xD8F3B49CECA42A05L /* 43 */, - 0xBD56BE3F51382F73L /* 44 */, 0x45FAED5843B0BB28L /* 45 */, - 0x1C813D5C11BF1F83L /* 46 */, 0x8AF0E4B6D75FA169L /* 47 */, - 0x33EE18A487AD9999L /* 48 */, 0x3C26E8EAB1C94410L /* 49 */, - 0xB510102BC0A822F9L /* 50 */, 0x141EEF310CE6123BL /* 51 */, - 0xFC65B90059DDB154L /* 52 */, 0xE0158640C5E0E607L /* 53 */, - 0x884E079826C3A3CFL /* 54 */, 0x930D0D9523C535FDL /* 55 */, - 0x35638D754E9A2B00L /* 56 */, 0x4085FCCF40469DD5L /* 57 */, - 0xC4B17AD28BE23A4CL /* 58 */, 0xCAB2F0FC6A3E6A2EL /* 59 */, - 0x2860971A6B943FCDL /* 60 */, 0x3DDE6EE212E30446L /* 61 */, - 0x6222F32AE01765AEL /* 62 */, 0x5D550BB5478308FEL /* 63 */, - 0xA9EFA98DA0EDA22AL /* 64 */, 0xC351A71686C40DA7L /* 65 */, - 0x1105586D9C867C84L /* 66 */, 0xDCFFEE85FDA22853L /* 67 */, - 0xCCFBD0262C5EEF76L /* 68 */, 0xBAF294CB8990D201L /* 69 */, - 0xE69464F52AFAD975L /* 70 */, 0x94B013AFDF133E14L /* 71 */, - 0x06A7D1A32823C958L /* 72 */, 0x6F95FE5130F61119L /* 73 */, - 0xD92AB34E462C06C0L /* 74 */, 0xED7BDE33887C71D2L /* 75 */, - 0x79746D6E6518393EL /* 76 */, 0x5BA419385D713329L /* 77 */, - 0x7C1BA6B948A97564L /* 78 */, 0x31987C197BFDAC67L /* 79 */, - 0xDE6C23C44B053D02L /* 80 */, 0x581C49FED002D64DL /* 81 */, - 0xDD474D6338261571L /* 82 */, 0xAA4546C3E473D062L /* 83 */, - 0x928FCE349455F860L /* 84 */, 0x48161BBACAAB94D9L /* 85 */, - 0x63912430770E6F68L /* 86 */, 0x6EC8A5E602C6641CL /* 87 */, - 0x87282515337DDD2BL /* 88 */, 0x2CDA6B42034B701BL /* 89 */, - 0xB03D37C181CB096DL /* 90 */, 0xE108438266C71C6FL /* 91 */, - 0x2B3180C7EB51B255L /* 92 */, 0xDF92B82F96C08BBCL /* 93 */, - 0x5C68C8C0A632F3BAL /* 94 */, 0x5504CC861C3D0556L /* 95 */, - 0xABBFA4E55FB26B8FL /* 96 */, 0x41848B0AB3BACEB4L /* 97 */, - 0xB334A273AA445D32L /* 98 */, 0xBCA696F0A85AD881L /* 99 */, - 0x24F6EC65B528D56CL /* 100 */, 0x0CE1512E90F4524AL /* 101 */, - 0x4E9DD79D5506D35AL /* 102 */, 0x258905FAC6CE9779L /* 103 */, - 0x2019295B3E109B33L /* 104 */, 0xF8A9478B73A054CCL /* 105 */, - 0x2924F2F934417EB0L /* 106 */, 0x3993357D536D1BC4L /* 107 */, - 0x38A81AC21DB6FF8BL /* 108 */, 0x47C4FBF17D6016BFL /* 109 */, - 0x1E0FAADD7667E3F5L /* 110 */, 0x7ABCFF62938BEB96L /* 111 */, - 0xA78DAD948FC179C9L /* 112 */, 0x8F1F98B72911E50DL /* 113 */, - 0x61E48EAE27121A91L /* 114 */, 0x4D62F7AD31859808L /* 115 */, - 0xECEBA345EF5CEAEBL /* 116 */, 0xF5CEB25EBC9684CEL /* 117 */, - 0xF633E20CB7F76221L /* 118 */, 0xA32CDF06AB8293E4L /* 119 */, - 0x985A202CA5EE2CA4L /* 120 */, 0xCF0B8447CC8A8FB1L /* 121 */, - 0x9F765244979859A3L /* 122 */, 0xA8D516B1A1240017L /* 123 */, - 0x0BD7BA3EBB5DC726L /* 124 */, 0xE54BCA55B86ADB39L /* 125 */, - 0x1D7A3AFD6C478063L /* 126 */, 0x519EC608E7669EDDL /* 127 */, - 0x0E5715A2D149AA23L /* 128 */, 0x177D4571848FF194L /* 129 */, - 0xEEB55F3241014C22L /* 130 */, 0x0F5E5CA13A6E2EC2L /* 131 */, - 0x8029927B75F5C361L /* 132 */, 0xAD139FABC3D6E436L /* 133 */, - 0x0D5DF1A94CCF402FL /* 134 */, 0x3E8BD948BEA5DFC8L /* 135 */, - 0xA5A0D357BD3FF77EL /* 136 */, 0xA2D12E251F74F645L /* 137 */, - 0x66FD9E525E81A082L /* 138 */, 0x2E0C90CE7F687A49L /* 139 */, - 0xC2E8BCBEBA973BC5L /* 140 */, 0x000001BCE509745FL /* 141 */, - 0x423777BBE6DAB3D6L /* 142 */, 0xD1661C7EAEF06EB5L /* 143 */, - 0xA1781F354DAACFD8L /* 144 */, 0x2D11284A2B16AFFCL /* 145 */, - 0xF1FC4F67FA891D1FL /* 146 */, 0x73ECC25DCB920ADAL /* 147 */, - 0xAE610C22C2A12651L /* 148 */, 0x96E0A810D356B78AL /* 149 */, - 0x5A9A381F2FE7870FL /* 150 */, 0xD5AD62EDE94E5530L /* 151 */, - 0xD225E5E8368D1427L /* 152 */, 0x65977B70C7AF4631L /* 153 */, - 0x99F889B2DE39D74FL /* 154 */, 0x233F30BF54E1D143L /* 155 */, - 0x9A9675D3D9A63C97L /* 156 */, 0x5470554FF334F9A8L /* 157 */, - 0x166ACB744A4F5688L /* 158 */, 0x70C74CAAB2E4AEADL /* 159 */, - 0xF0D091646F294D12L /* 160 */, 0x57B82A89684031D1L /* 161 */, - 0xEFD95A5A61BE0B6BL /* 162 */, 0x2FBD12E969F2F29AL /* 163 */, - 0x9BD37013FEFF9FE8L /* 164 */, 0x3F9B0404D6085A06L /* 165 */, - 0x4940C1F3166CFE15L /* 166 */, 0x09542C4DCDF3DEFBL /* 167 */, - 0xB4C5218385CD5CE3L /* 168 */, 0xC935B7DC4462A641L /* 169 */, - 0x3417F8A68ED3B63FL /* 170 */, 0xB80959295B215B40L /* 171 */, - 0xF99CDAEF3B8C8572L /* 172 */, 0x018C0614F8FCB95DL /* 173 */, - 0x1B14ACCD1A3ACDF3L /* 174 */, 0x84D471F200BB732DL /* 175 */, - 0xC1A3110E95E8DA16L /* 176 */, 0x430A7220BF1A82B8L /* 177 */, - 0xB77E090D39DF210EL /* 178 */, 0x5EF4BD9F3CD05E9DL /* 179 */, - 0x9D4FF6DA7E57A444L /* 180 */, 0xDA1D60E183D4A5F8L /* 181 */, - 0xB287C38417998E47L /* 182 */, 0xFE3EDC121BB31886L /* 183 */, - 0xC7FE3CCC980CCBEFL /* 184 */, 0xE46FB590189BFD03L /* 185 */, - 0x3732FD469A4C57DCL /* 186 */, 0x7EF700A07CF1AD65L /* 187 */, - 0x59C64468A31D8859L /* 188 */, 0x762FB0B4D45B61F6L /* 189 */, - 0x155BAED099047718L /* 190 */, 0x68755E4C3D50BAA6L /* 191 */, - 0xE9214E7F22D8B4DFL /* 192 */, 0x2ADDBF532EAC95F4L /* 193 */, - 0x32AE3909B4BD0109L /* 194 */, 0x834DF537B08E3450L /* 195 */, - 0xFA209DA84220728DL /* 196 */, 0x9E691D9B9EFE23F7L /* 197 */, - 0x0446D288C4AE8D7FL /* 198 */, 0x7B4CC524E169785BL /* 199 */, - 0x21D87F0135CA1385L /* 200 */, 0xCEBB400F137B8AA5L /* 201 */, - 0x272E2B66580796BEL /* 202 */, 0x3612264125C2B0DEL /* 203 */, - 0x057702BDAD1EFBB2L /* 204 */, 0xD4BABB8EACF84BE9L /* 205 */, - 0x91583139641BC67BL /* 206 */, 0x8BDC2DE08036E024L /* 207 */, - 0x603C8156F49F68EDL /* 208 */, 0xF7D236F7DBEF5111L /* 209 */, - 0x9727C4598AD21E80L /* 210 */, 0xA08A0896670A5FD7L /* 211 */, - 0xCB4A8F4309EBA9CBL /* 212 */, 0x81AF564B0F7036A1L /* 213 */, - 0xC0B99AA778199ABDL /* 214 */, 0x959F1EC83FC8E952L /* 215 */, - 0x8C505077794A81B9L /* 216 */, 0x3ACAAF8F056338F0L /* 217 */, - 0x07B43F50627A6778L /* 218 */, 0x4A44AB49F5ECCC77L /* 219 */, - 0x3BC3D6E4B679EE98L /* 220 */, 0x9CC0D4D1CF14108CL /* 221 */, - 0x4406C00B206BC8A0L /* 222 */, 0x82A18854C8D72D89L /* 223 */, - 0x67E366B35C3C432CL /* 224 */, 0xB923DD61102B37F2L /* 225 */, - 0x56AB2779D884271DL /* 226 */, 0xBE83E1B0FF1525AFL /* 227 */, - 0xFB7C65D4217E49A9L /* 228 */, 0x6BDBE0E76D48E7D4L /* 229 */, - 0x08DF828745D9179EL /* 230 */, 0x22EA6A9ADD53BD34L /* 231 */, - 0xE36E141C5622200AL /* 232 */, 0x7F805D1B8CB750EEL /* 233 */, - 0xAFE5C7A59F58E837L /* 234 */, 0xE27F996A4FB1C23CL /* 235 */, - 0xD3867DFB0775F0D0L /* 236 */, 0xD0E673DE6E88891AL /* 237 */, - 0x123AEB9EAFB86C25L /* 238 */, 0x30F1D5D5C145B895L /* 239 */, - 0xBB434A2DEE7269E7L /* 240 */, 0x78CB67ECF931FA38L /* 241 */, - 0xF33B0372323BBF9CL /* 242 */, 0x52D66336FB279C74L /* 243 */, - 0x505F33AC0AFB4EAAL /* 244 */, 0xE8A5CD99A2CCE187L /* 245 */, - 0x534974801E2D30BBL /* 246 */, 0x8D2D5711D5876D90L /* 247 */, - 0x1F1A412891BC038EL /* 248 */, 0xD6E2E71D82E56648L /* 249 */, - 0x74036C3A497732B7L /* 250 */, 0x89B67ED96361F5ABL /* 251 */, - 0xFFED95D8F1EA02A2L /* 252 */, 0xE72B3BD61464D43DL /* 253 */, - 0xA6300F170BDC4820L /* 254 */, 0xEBC18760ED78A77AL /* 255 */, - }; - - private static final long[] t2 = { - 0xE6A6BE5A05A12138L /* 256 */, 0xB5A122A5B4F87C98L /* 257 */, - 0x563C6089140B6990L /* 258 */, 0x4C46CB2E391F5DD5L /* 259 */, - 0xD932ADDBC9B79434L /* 260 */, 0x08EA70E42015AFF5L /* 261 */, - 0xD765A6673E478CF1L /* 262 */, 0xC4FB757EAB278D99L /* 263 */, - 0xDF11C6862D6E0692L /* 264 */, 0xDDEB84F10D7F3B16L /* 265 */, - 0x6F2EF604A665EA04L /* 266 */, 0x4A8E0F0FF0E0DFB3L /* 267 */, - 0xA5EDEEF83DBCBA51L /* 268 */, 0xFC4F0A2A0EA4371EL /* 269 */, - 0xE83E1DA85CB38429L /* 270 */, 0xDC8FF882BA1B1CE2L /* 271 */, - 0xCD45505E8353E80DL /* 272 */, 0x18D19A00D4DB0717L /* 273 */, - 0x34A0CFEDA5F38101L /* 274 */, 0x0BE77E518887CAF2L /* 275 */, - 0x1E341438B3C45136L /* 276 */, 0xE05797F49089CCF9L /* 277 */, - 0xFFD23F9DF2591D14L /* 278 */, 0x543DDA228595C5CDL /* 279 */, - 0x661F81FD99052A33L /* 280 */, 0x8736E641DB0F7B76L /* 281 */, - 0x15227725418E5307L /* 282 */, 0xE25F7F46162EB2FAL /* 283 */, - 0x48A8B2126C13D9FEL /* 284 */, 0xAFDC541792E76EEAL /* 285 */, - 0x03D912BFC6D1898FL /* 286 */, 0x31B1AAFA1B83F51BL /* 287 */, - 0xF1AC2796E42AB7D9L /* 288 */, 0x40A3A7D7FCD2EBACL /* 289 */, - 0x1056136D0AFBBCC5L /* 290 */, 0x7889E1DD9A6D0C85L /* 291 */, - 0xD33525782A7974AAL /* 292 */, 0xA7E25D09078AC09BL /* 293 */, - 0xBD4138B3EAC6EDD0L /* 294 */, 0x920ABFBE71EB9E70L /* 295 */, - 0xA2A5D0F54FC2625CL /* 296 */, 0xC054E36B0B1290A3L /* 297 */, - 0xF6DD59FF62FE932BL /* 298 */, 0x3537354511A8AC7DL /* 299 */, - 0xCA845E9172FADCD4L /* 300 */, 0x84F82B60329D20DCL /* 301 */, - 0x79C62CE1CD672F18L /* 302 */, 0x8B09A2ADD124642CL /* 303 */, - 0xD0C1E96A19D9E726L /* 304 */, 0x5A786A9B4BA9500CL /* 305 */, - 0x0E020336634C43F3L /* 306 */, 0xC17B474AEB66D822L /* 307 */, - 0x6A731AE3EC9BAAC2L /* 308 */, 0x8226667AE0840258L /* 309 */, - 0x67D4567691CAECA5L /* 310 */, 0x1D94155C4875ADB5L /* 311 */, - 0x6D00FD985B813FDFL /* 312 */, 0x51286EFCB774CD06L /* 313 */, - 0x5E8834471FA744AFL /* 314 */, 0xF72CA0AEE761AE2EL /* 315 */, - 0xBE40E4CDAEE8E09AL /* 316 */, 0xE9970BBB5118F665L /* 317 */, - 0x726E4BEB33DF1964L /* 318 */, 0x703B000729199762L /* 319 */, - 0x4631D816F5EF30A7L /* 320 */, 0xB880B5B51504A6BEL /* 321 */, - 0x641793C37ED84B6CL /* 322 */, 0x7B21ED77F6E97D96L /* 323 */, - 0x776306312EF96B73L /* 324 */, 0xAE528948E86FF3F4L /* 325 */, - 0x53DBD7F286A3F8F8L /* 326 */, 0x16CADCE74CFC1063L /* 327 */, - 0x005C19BDFA52C6DDL /* 328 */, 0x68868F5D64D46AD3L /* 329 */, - 0x3A9D512CCF1E186AL /* 330 */, 0x367E62C2385660AEL /* 331 */, - 0xE359E7EA77DCB1D7L /* 332 */, 0x526C0773749ABE6EL /* 333 */, - 0x735AE5F9D09F734BL /* 334 */, 0x493FC7CC8A558BA8L /* 335 */, - 0xB0B9C1533041AB45L /* 336 */, 0x321958BA470A59BDL /* 337 */, - 0x852DB00B5F46C393L /* 338 */, 0x91209B2BD336B0E5L /* 339 */, - 0x6E604F7D659EF19FL /* 340 */, 0xB99A8AE2782CCB24L /* 341 */, - 0xCCF52AB6C814C4C7L /* 342 */, 0x4727D9AFBE11727BL /* 343 */, - 0x7E950D0C0121B34DL /* 344 */, 0x756F435670AD471FL /* 345 */, - 0xF5ADD442615A6849L /* 346 */, 0x4E87E09980B9957AL /* 347 */, - 0x2ACFA1DF50AEE355L /* 348 */, 0xD898263AFD2FD556L /* 349 */, - 0xC8F4924DD80C8FD6L /* 350 */, 0xCF99CA3D754A173AL /* 351 */, - 0xFE477BACAF91BF3CL /* 352 */, 0xED5371F6D690C12DL /* 353 */, - 0x831A5C285E687094L /* 354 */, 0xC5D3C90A3708A0A4L /* 355 */, - 0x0F7F903717D06580L /* 356 */, 0x19F9BB13B8FDF27FL /* 357 */, - 0xB1BD6F1B4D502843L /* 358 */, 0x1C761BA38FFF4012L /* 359 */, - 0x0D1530C4E2E21F3BL /* 360 */, 0x8943CE69A7372C8AL /* 361 */, - 0xE5184E11FEB5CE66L /* 362 */, 0x618BDB80BD736621L /* 363 */, - 0x7D29BAD68B574D0BL /* 364 */, 0x81BB613E25E6FE5BL /* 365 */, - 0x071C9C10BC07913FL /* 366 */, 0xC7BEEB7909AC2D97L /* 367 */, - 0xC3E58D353BC5D757L /* 368 */, 0xEB017892F38F61E8L /* 369 */, - 0xD4EFFB9C9B1CC21AL /* 370 */, 0x99727D26F494F7ABL /* 371 */, - 0xA3E063A2956B3E03L /* 372 */, 0x9D4A8B9A4AA09C30L /* 373 */, - 0x3F6AB7D500090FB4L /* 374 */, 0x9CC0F2A057268AC0L /* 375 */, - 0x3DEE9D2DEDBF42D1L /* 376 */, 0x330F49C87960A972L /* 377 */, - 0xC6B2720287421B41L /* 378 */, 0x0AC59EC07C00369CL /* 379 */, - 0xEF4EAC49CB353425L /* 380 */, 0xF450244EEF0129D8L /* 381 */, - 0x8ACC46E5CAF4DEB6L /* 382 */, 0x2FFEAB63989263F7L /* 383 */, - 0x8F7CB9FE5D7A4578L /* 384 */, 0x5BD8F7644E634635L /* 385 */, - 0x427A7315BF2DC900L /* 386 */, 0x17D0C4AA2125261CL /* 387 */, - 0x3992486C93518E50L /* 388 */, 0xB4CBFEE0A2D7D4C3L /* 389 */, - 0x7C75D6202C5DDD8DL /* 390 */, 0xDBC295D8E35B6C61L /* 391 */, - 0x60B369D302032B19L /* 392 */, 0xCE42685FDCE44132L /* 393 */, - 0x06F3DDB9DDF65610L /* 394 */, 0x8EA4D21DB5E148F0L /* 395 */, - 0x20B0FCE62FCD496FL /* 396 */, 0x2C1B912358B0EE31L /* 397 */, - 0xB28317B818F5A308L /* 398 */, 0xA89C1E189CA6D2CFL /* 399 */, - 0x0C6B18576AAADBC8L /* 400 */, 0xB65DEAA91299FAE3L /* 401 */, - 0xFB2B794B7F1027E7L /* 402 */, 0x04E4317F443B5BEBL /* 403 */, - 0x4B852D325939D0A6L /* 404 */, 0xD5AE6BEEFB207FFCL /* 405 */, - 0x309682B281C7D374L /* 406 */, 0xBAE309A194C3B475L /* 407 */, - 0x8CC3F97B13B49F05L /* 408 */, 0x98A9422FF8293967L /* 409 */, - 0x244B16B01076FF7CL /* 410 */, 0xF8BF571C663D67EEL /* 411 */, - 0x1F0D6758EEE30DA1L /* 412 */, 0xC9B611D97ADEB9B7L /* 413 */, - 0xB7AFD5887B6C57A2L /* 414 */, 0x6290AE846B984FE1L /* 415 */, - 0x94DF4CDEACC1A5FDL /* 416 */, 0x058A5BD1C5483AFFL /* 417 */, - 0x63166CC142BA3C37L /* 418 */, 0x8DB8526EB2F76F40L /* 419 */, - 0xE10880036F0D6D4EL /* 420 */, 0x9E0523C9971D311DL /* 421 */, - 0x45EC2824CC7CD691L /* 422 */, 0x575B8359E62382C9L /* 423 */, - 0xFA9E400DC4889995L /* 424 */, 0xD1823ECB45721568L /* 425 */, - 0xDAFD983B8206082FL /* 426 */, 0xAA7D29082386A8CBL /* 427 */, - 0x269FCD4403B87588L /* 428 */, 0x1B91F5F728BDD1E0L /* 429 */, - 0xE4669F39040201F6L /* 430 */, 0x7A1D7C218CF04ADEL /* 431 */, - 0x65623C29D79CE5CEL /* 432 */, 0x2368449096C00BB1L /* 433 */, - 0xAB9BF1879DA503BAL /* 434 */, 0xBC23ECB1A458058EL /* 435 */, - 0x9A58DF01BB401ECCL /* 436 */, 0xA070E868A85F143DL /* 437 */, - 0x4FF188307DF2239EL /* 438 */, 0x14D565B41A641183L /* 439 */, - 0xEE13337452701602L /* 440 */, 0x950E3DCF3F285E09L /* 441 */, - 0x59930254B9C80953L /* 442 */, 0x3BF299408930DA6DL /* 443 */, - 0xA955943F53691387L /* 444 */, 0xA15EDECAA9CB8784L /* 445 */, - 0x29142127352BE9A0L /* 446 */, 0x76F0371FFF4E7AFBL /* 447 */, - 0x0239F450274F2228L /* 448 */, 0xBB073AF01D5E868BL /* 449 */, - 0xBFC80571C10E96C1L /* 450 */, 0xD267088568222E23L /* 451 */, - 0x9671A3D48E80B5B0L /* 452 */, 0x55B5D38AE193BB81L /* 453 */, - 0x693AE2D0A18B04B8L /* 454 */, 0x5C48B4ECADD5335FL /* 455 */, - 0xFD743B194916A1CAL /* 456 */, 0x2577018134BE98C4L /* 457 */, - 0xE77987E83C54A4ADL /* 458 */, 0x28E11014DA33E1B9L /* 459 */, - 0x270CC59E226AA213L /* 460 */, 0x71495F756D1A5F60L /* 461 */, - 0x9BE853FB60AFEF77L /* 462 */, 0xADC786A7F7443DBFL /* 463 */, - 0x0904456173B29A82L /* 464 */, 0x58BC7A66C232BD5EL /* 465 */, - 0xF306558C673AC8B2L /* 466 */, 0x41F639C6B6C9772AL /* 467 */, - 0x216DEFE99FDA35DAL /* 468 */, 0x11640CC71C7BE615L /* 469 */, - 0x93C43694565C5527L /* 470 */, 0xEA038E6246777839L /* 471 */, - 0xF9ABF3CE5A3E2469L /* 472 */, 0x741E768D0FD312D2L /* 473 */, - 0x0144B883CED652C6L /* 474 */, 0xC20B5A5BA33F8552L /* 475 */, - 0x1AE69633C3435A9DL /* 476 */, 0x97A28CA4088CFDECL /* 477 */, - 0x8824A43C1E96F420L /* 478 */, 0x37612FA66EEEA746L /* 479 */, - 0x6B4CB165F9CF0E5AL /* 480 */, 0x43AA1C06A0ABFB4AL /* 481 */, - 0x7F4DC26FF162796BL /* 482 */, 0x6CBACC8E54ED9B0FL /* 483 */, - 0xA6B7FFEFD2BB253EL /* 484 */, 0x2E25BC95B0A29D4FL /* 485 */, - 0x86D6A58BDEF1388CL /* 486 */, 0xDED74AC576B6F054L /* 487 */, - 0x8030BDBC2B45805DL /* 488 */, 0x3C81AF70E94D9289L /* 489 */, - 0x3EFF6DDA9E3100DBL /* 490 */, 0xB38DC39FDFCC8847L /* 491 */, - 0x123885528D17B87EL /* 492 */, 0xF2DA0ED240B1B642L /* 493 */, - 0x44CEFADCD54BF9A9L /* 494 */, 0x1312200E433C7EE6L /* 495 */, - 0x9FFCC84F3A78C748L /* 496 */, 0xF0CD1F72248576BBL /* 497 */, - 0xEC6974053638CFE4L /* 498 */, 0x2BA7B67C0CEC4E4CL /* 499 */, - 0xAC2F4DF3E5CE32EDL /* 500 */, 0xCB33D14326EA4C11L /* 501 */, - 0xA4E9044CC77E58BCL /* 502 */, 0x5F513293D934FCEFL /* 503 */, - 0x5DC9645506E55444L /* 504 */, 0x50DE418F317DE40AL /* 505 */, - 0x388CB31A69DDE259L /* 506 */, 0x2DB4A83455820A86L /* 507 */, - 0x9010A91E84711AE9L /* 508 */, 0x4DF7F0B7B1498371L /* 509 */, - 0xD62A2EABC0977179L /* 510 */, 0x22FAC097AA8D5C0EL /* 511 */, - }; - - private static final long[] t3 = { - 0xF49FCC2FF1DAF39BL /* 512 */, 0x487FD5C66FF29281L /* 513 */, - 0xE8A30667FCDCA83FL /* 514 */, 0x2C9B4BE3D2FCCE63L /* 515 */, - 0xDA3FF74B93FBBBC2L /* 516 */, 0x2FA165D2FE70BA66L /* 517 */, - 0xA103E279970E93D4L /* 518 */, 0xBECDEC77B0E45E71L /* 519 */, - 0xCFB41E723985E497L /* 520 */, 0xB70AAA025EF75017L /* 521 */, - 0xD42309F03840B8E0L /* 522 */, 0x8EFC1AD035898579L /* 523 */, - 0x96C6920BE2B2ABC5L /* 524 */, 0x66AF4163375A9172L /* 525 */, - 0x2174ABDCCA7127FBL /* 526 */, 0xB33CCEA64A72FF41L /* 527 */, - 0xF04A4933083066A5L /* 528 */, 0x8D970ACDD7289AF5L /* 529 */, - 0x8F96E8E031C8C25EL /* 530 */, 0xF3FEC02276875D47L /* 531 */, - 0xEC7BF310056190DDL /* 532 */, 0xF5ADB0AEBB0F1491L /* 533 */, - 0x9B50F8850FD58892L /* 534 */, 0x4975488358B74DE8L /* 535 */, - 0xA3354FF691531C61L /* 536 */, 0x0702BBE481D2C6EEL /* 537 */, - 0x89FB24057DEDED98L /* 538 */, 0xAC3075138596E902L /* 539 */, - 0x1D2D3580172772EDL /* 540 */, 0xEB738FC28E6BC30DL /* 541 */, - 0x5854EF8F63044326L /* 542 */, 0x9E5C52325ADD3BBEL /* 543 */, - 0x90AA53CF325C4623L /* 544 */, 0xC1D24D51349DD067L /* 545 */, - 0x2051CFEEA69EA624L /* 546 */, 0x13220F0A862E7E4FL /* 547 */, - 0xCE39399404E04864L /* 548 */, 0xD9C42CA47086FCB7L /* 549 */, - 0x685AD2238A03E7CCL /* 550 */, 0x066484B2AB2FF1DBL /* 551 */, - 0xFE9D5D70EFBF79ECL /* 552 */, 0x5B13B9DD9C481854L /* 553 */, - 0x15F0D475ED1509ADL /* 554 */, 0x0BEBCD060EC79851L /* 555 */, - 0xD58C6791183AB7F8L /* 556 */, 0xD1187C5052F3EEE4L /* 557 */, - 0xC95D1192E54E82FFL /* 558 */, 0x86EEA14CB9AC6CA2L /* 559 */, - 0x3485BEB153677D5DL /* 560 */, 0xDD191D781F8C492AL /* 561 */, - 0xF60866BAA784EBF9L /* 562 */, 0x518F643BA2D08C74L /* 563 */, - 0x8852E956E1087C22L /* 564 */, 0xA768CB8DC410AE8DL /* 565 */, - 0x38047726BFEC8E1AL /* 566 */, 0xA67738B4CD3B45AAL /* 567 */, - 0xAD16691CEC0DDE19L /* 568 */, 0xC6D4319380462E07L /* 569 */, - 0xC5A5876D0BA61938L /* 570 */, 0x16B9FA1FA58FD840L /* 571 */, - 0x188AB1173CA74F18L /* 572 */, 0xABDA2F98C99C021FL /* 573 */, - 0x3E0580AB134AE816L /* 574 */, 0x5F3B05B773645ABBL /* 575 */, - 0x2501A2BE5575F2F6L /* 576 */, 0x1B2F74004E7E8BA9L /* 577 */, - 0x1CD7580371E8D953L /* 578 */, 0x7F6ED89562764E30L /* 579 */, - 0xB15926FF596F003DL /* 580 */, 0x9F65293DA8C5D6B9L /* 581 */, - 0x6ECEF04DD690F84CL /* 582 */, 0x4782275FFF33AF88L /* 583 */, - 0xE41433083F820801L /* 584 */, 0xFD0DFE409A1AF9B5L /* 585 */, - 0x4325A3342CDB396BL /* 586 */, 0x8AE77E62B301B252L /* 587 */, - 0xC36F9E9F6655615AL /* 588 */, 0x85455A2D92D32C09L /* 589 */, - 0xF2C7DEA949477485L /* 590 */, 0x63CFB4C133A39EBAL /* 591 */, - 0x83B040CC6EBC5462L /* 592 */, 0x3B9454C8FDB326B0L /* 593 */, - 0x56F56A9E87FFD78CL /* 594 */, 0x2DC2940D99F42BC6L /* 595 */, - 0x98F7DF096B096E2DL /* 596 */, 0x19A6E01E3AD852BFL /* 597 */, - 0x42A99CCBDBD4B40BL /* 598 */, 0xA59998AF45E9C559L /* 599 */, - 0x366295E807D93186L /* 600 */, 0x6B48181BFAA1F773L /* 601 */, - 0x1FEC57E2157A0A1DL /* 602 */, 0x4667446AF6201AD5L /* 603 */, - 0xE615EBCACFB0F075L /* 604 */, 0xB8F31F4F68290778L /* 605 */, - 0x22713ED6CE22D11EL /* 606 */, 0x3057C1A72EC3C93BL /* 607 */, - 0xCB46ACC37C3F1F2FL /* 608 */, 0xDBB893FD02AAF50EL /* 609 */, - 0x331FD92E600B9FCFL /* 610 */, 0xA498F96148EA3AD6L /* 611 */, - 0xA8D8426E8B6A83EAL /* 612 */, 0xA089B274B7735CDCL /* 613 */, - 0x87F6B3731E524A11L /* 614 */, 0x118808E5CBC96749L /* 615 */, - 0x9906E4C7B19BD394L /* 616 */, 0xAFED7F7E9B24A20CL /* 617 */, - 0x6509EADEEB3644A7L /* 618 */, 0x6C1EF1D3E8EF0EDEL /* 619 */, - 0xB9C97D43E9798FB4L /* 620 */, 0xA2F2D784740C28A3L /* 621 */, - 0x7B8496476197566FL /* 622 */, 0x7A5BE3E6B65F069DL /* 623 */, - 0xF96330ED78BE6F10L /* 624 */, 0xEEE60DE77A076A15L /* 625 */, - 0x2B4BEE4AA08B9BD0L /* 626 */, 0x6A56A63EC7B8894EL /* 627 */, - 0x02121359BA34FEF4L /* 628 */, 0x4CBF99F8283703FCL /* 629 */, - 0x398071350CAF30C8L /* 630 */, 0xD0A77A89F017687AL /* 631 */, - 0xF1C1A9EB9E423569L /* 632 */, 0x8C7976282DEE8199L /* 633 */, - 0x5D1737A5DD1F7ABDL /* 634 */, 0x4F53433C09A9FA80L /* 635 */, - 0xFA8B0C53DF7CA1D9L /* 636 */, 0x3FD9DCBC886CCB77L /* 637 */, - 0xC040917CA91B4720L /* 638 */, 0x7DD00142F9D1DCDFL /* 639 */, - 0x8476FC1D4F387B58L /* 640 */, 0x23F8E7C5F3316503L /* 641 */, - 0x032A2244E7E37339L /* 642 */, 0x5C87A5D750F5A74BL /* 643 */, - 0x082B4CC43698992EL /* 644 */, 0xDF917BECB858F63CL /* 645 */, - 0x3270B8FC5BF86DDAL /* 646 */, 0x10AE72BB29B5DD76L /* 647 */, - 0x576AC94E7700362BL /* 648 */, 0x1AD112DAC61EFB8FL /* 649 */, - 0x691BC30EC5FAA427L /* 650 */, 0xFF246311CC327143L /* 651 */, - 0x3142368E30E53206L /* 652 */, 0x71380E31E02CA396L /* 653 */, - 0x958D5C960AAD76F1L /* 654 */, 0xF8D6F430C16DA536L /* 655 */, - 0xC8FFD13F1BE7E1D2L /* 656 */, 0x7578AE66004DDBE1L /* 657 */, - 0x05833F01067BE646L /* 658 */, 0xBB34B5AD3BFE586DL /* 659 */, - 0x095F34C9A12B97F0L /* 660 */, 0x247AB64525D60CA8L /* 661 */, - 0xDCDBC6F3017477D1L /* 662 */, 0x4A2E14D4DECAD24DL /* 663 */, - 0xBDB5E6D9BE0A1EEBL /* 664 */, 0x2A7E70F7794301ABL /* 665 */, - 0xDEF42D8A270540FDL /* 666 */, 0x01078EC0A34C22C1L /* 667 */, - 0xE5DE511AF4C16387L /* 668 */, 0x7EBB3A52BD9A330AL /* 669 */, - 0x77697857AA7D6435L /* 670 */, 0x004E831603AE4C32L /* 671 */, - 0xE7A21020AD78E312L /* 672 */, 0x9D41A70C6AB420F2L /* 673 */, - 0x28E06C18EA1141E6L /* 674 */, 0xD2B28CBD984F6B28L /* 675 */, - 0x26B75F6C446E9D83L /* 676 */, 0xBA47568C4D418D7FL /* 677 */, - 0xD80BADBFE6183D8EL /* 678 */, 0x0E206D7F5F166044L /* 679 */, - 0xE258A43911CBCA3EL /* 680 */, 0x723A1746B21DC0BCL /* 681 */, - 0xC7CAA854F5D7CDD3L /* 682 */, 0x7CAC32883D261D9CL /* 683 */, - 0x7690C26423BA942CL /* 684 */, 0x17E55524478042B8L /* 685 */, - 0xE0BE477656A2389FL /* 686 */, 0x4D289B5E67AB2DA0L /* 687 */, - 0x44862B9C8FBBFD31L /* 688 */, 0xB47CC8049D141365L /* 689 */, - 0x822C1B362B91C793L /* 690 */, 0x4EB14655FB13DFD8L /* 691 */, - 0x1ECBBA0714E2A97BL /* 692 */, 0x6143459D5CDE5F14L /* 693 */, - 0x53A8FBF1D5F0AC89L /* 694 */, 0x97EA04D81C5E5B00L /* 695 */, - 0x622181A8D4FDB3F3L /* 696 */, 0xE9BCD341572A1208L /* 697 */, - 0x1411258643CCE58AL /* 698 */, 0x9144C5FEA4C6E0A4L /* 699 */, - 0x0D33D06565CF620FL /* 700 */, 0x54A48D489F219CA1L /* 701 */, - 0xC43E5EAC6D63C821L /* 702 */, 0xA9728B3A72770DAFL /* 703 */, - 0xD7934E7B20DF87EFL /* 704 */, 0xE35503B61A3E86E5L /* 705 */, - 0xCAE321FBC819D504L /* 706 */, 0x129A50B3AC60BFA6L /* 707 */, - 0xCD5E68EA7E9FB6C3L /* 708 */, 0xB01C90199483B1C7L /* 709 */, - 0x3DE93CD5C295376CL /* 710 */, 0xAED52EDF2AB9AD13L /* 711 */, - 0x2E60F512C0A07884L /* 712 */, 0xBC3D86A3E36210C9L /* 713 */, - 0x35269D9B163951CEL /* 714 */, 0x0C7D6E2AD0CDB5FAL /* 715 */, - 0x59E86297D87F5733L /* 716 */, 0x298EF221898DB0E7L /* 717 */, - 0x55000029D1A5AA7EL /* 718 */, 0x8BC08AE1B5061B45L /* 719 */, - 0xC2C31C2B6C92703AL /* 720 */, 0x94CC596BAF25EF42L /* 721 */, - 0x0A1D73DB22540456L /* 722 */, 0x04B6A0F9D9C4179AL /* 723 */, - 0xEFFDAFA2AE3D3C60L /* 724 */, 0xF7C8075BB49496C4L /* 725 */, - 0x9CC5C7141D1CD4E3L /* 726 */, 0x78BD1638218E5534L /* 727 */, - 0xB2F11568F850246AL /* 728 */, 0xEDFABCFA9502BC29L /* 729 */, - 0x796CE5F2DA23051BL /* 730 */, 0xAAE128B0DC93537CL /* 731 */, - 0x3A493DA0EE4B29AEL /* 732 */, 0xB5DF6B2C416895D7L /* 733 */, - 0xFCABBD25122D7F37L /* 734 */, 0x70810B58105DC4B1L /* 735 */, - 0xE10FDD37F7882A90L /* 736 */, 0x524DCAB5518A3F5CL /* 737 */, - 0x3C9E85878451255BL /* 738 */, 0x4029828119BD34E2L /* 739 */, - 0x74A05B6F5D3CECCBL /* 740 */, 0xB610021542E13ECAL /* 741 */, - 0x0FF979D12F59E2ACL /* 742 */, 0x6037DA27E4F9CC50L /* 743 */, - 0x5E92975A0DF1847DL /* 744 */, 0xD66DE190D3E623FEL /* 745 */, - 0x5032D6B87B568048L /* 746 */, 0x9A36B7CE8235216EL /* 747 */, - 0x80272A7A24F64B4AL /* 748 */, 0x93EFED8B8C6916F7L /* 749 */, - 0x37DDBFF44CCE1555L /* 750 */, 0x4B95DB5D4B99BD25L /* 751 */, - 0x92D3FDA169812FC0L /* 752 */, 0xFB1A4A9A90660BB6L /* 753 */, - 0x730C196946A4B9B2L /* 754 */, 0x81E289AA7F49DA68L /* 755 */, - 0x64669A0F83B1A05FL /* 756 */, 0x27B3FF7D9644F48BL /* 757 */, - 0xCC6B615C8DB675B3L /* 758 */, 0x674F20B9BCEBBE95L /* 759 */, - 0x6F31238275655982L /* 760 */, 0x5AE488713E45CF05L /* 761 */, - 0xBF619F9954C21157L /* 762 */, 0xEABAC46040A8EAE9L /* 763 */, - 0x454C6FE9F2C0C1CDL /* 764 */, 0x419CF6496412691CL /* 765 */, - 0xD3DC3BEF265B0F70L /* 766 */, 0x6D0E60F5C3578A9EL /* 767 */, - }; - - private static final long[] t4 = { - 0x5B0E608526323C55L /* 768 */, 0x1A46C1A9FA1B59F5L /* 769 */, - 0xA9E245A17C4C8FFAL /* 770 */, 0x65CA5159DB2955D7L /* 771 */, - 0x05DB0A76CE35AFC2L /* 772 */, 0x81EAC77EA9113D45L /* 773 */, - 0x528EF88AB6AC0A0DL /* 774 */, 0xA09EA253597BE3FFL /* 775 */, - 0x430DDFB3AC48CD56L /* 776 */, 0xC4B3A67AF45CE46FL /* 777 */, - 0x4ECECFD8FBE2D05EL /* 778 */, 0x3EF56F10B39935F0L /* 779 */, - 0x0B22D6829CD619C6L /* 780 */, 0x17FD460A74DF2069L /* 781 */, - 0x6CF8CC8E8510ED40L /* 782 */, 0xD6C824BF3A6ECAA7L /* 783 */, - 0x61243D581A817049L /* 784 */, 0x048BACB6BBC163A2L /* 785 */, - 0xD9A38AC27D44CC32L /* 786 */, 0x7FDDFF5BAAF410ABL /* 787 */, - 0xAD6D495AA804824BL /* 788 */, 0xE1A6A74F2D8C9F94L /* 789 */, - 0xD4F7851235DEE8E3L /* 790 */, 0xFD4B7F886540D893L /* 791 */, - 0x247C20042AA4BFDAL /* 792 */, 0x096EA1C517D1327CL /* 793 */, - 0xD56966B4361A6685L /* 794 */, 0x277DA5C31221057DL /* 795 */, - 0x94D59893A43ACFF7L /* 796 */, 0x64F0C51CCDC02281L /* 797 */, - 0x3D33BCC4FF6189DBL /* 798 */, 0xE005CB184CE66AF1L /* 799 */, - 0xFF5CCD1D1DB99BEAL /* 800 */, 0xB0B854A7FE42980FL /* 801 */, - 0x7BD46A6A718D4B9FL /* 802 */, 0xD10FA8CC22A5FD8CL /* 803 */, - 0xD31484952BE4BD31L /* 804 */, 0xC7FA975FCB243847L /* 805 */, - 0x4886ED1E5846C407L /* 806 */, 0x28CDDB791EB70B04L /* 807 */, - 0xC2B00BE2F573417FL /* 808 */, 0x5C9590452180F877L /* 809 */, - 0x7A6BDDFFF370EB00L /* 810 */, 0xCE509E38D6D9D6A4L /* 811 */, - 0xEBEB0F00647FA702L /* 812 */, 0x1DCC06CF76606F06L /* 813 */, - 0xE4D9F28BA286FF0AL /* 814 */, 0xD85A305DC918C262L /* 815 */, - 0x475B1D8732225F54L /* 816 */, 0x2D4FB51668CCB5FEL /* 817 */, - 0xA679B9D9D72BBA20L /* 818 */, 0x53841C0D912D43A5L /* 819 */, - 0x3B7EAA48BF12A4E8L /* 820 */, 0x781E0E47F22F1DDFL /* 821 */, - 0xEFF20CE60AB50973L /* 822 */, 0x20D261D19DFFB742L /* 823 */, - 0x16A12B03062A2E39L /* 824 */, 0x1960EB2239650495L /* 825 */, - 0x251C16FED50EB8B8L /* 826 */, 0x9AC0C330F826016EL /* 827 */, - 0xED152665953E7671L /* 828 */, 0x02D63194A6369570L /* 829 */, - 0x5074F08394B1C987L /* 830 */, 0x70BA598C90B25CE1L /* 831 */, - 0x794A15810B9742F6L /* 832 */, 0x0D5925E9FCAF8C6CL /* 833 */, - 0x3067716CD868744EL /* 834 */, 0x910AB077E8D7731BL /* 835 */, - 0x6A61BBDB5AC42F61L /* 836 */, 0x93513EFBF0851567L /* 837 */, - 0xF494724B9E83E9D5L /* 838 */, 0xE887E1985C09648DL /* 839 */, - 0x34B1D3C675370CFDL /* 840 */, 0xDC35E433BC0D255DL /* 841 */, - 0xD0AAB84234131BE0L /* 842 */, 0x08042A50B48B7EAFL /* 843 */, - 0x9997C4EE44A3AB35L /* 844 */, 0x829A7B49201799D0L /* 845 */, - 0x263B8307B7C54441L /* 846 */, 0x752F95F4FD6A6CA6L /* 847 */, - 0x927217402C08C6E5L /* 848 */, 0x2A8AB754A795D9EEL /* 849 */, - 0xA442F7552F72943DL /* 850 */, 0x2C31334E19781208L /* 851 */, - 0x4FA98D7CEAEE6291L /* 852 */, 0x55C3862F665DB309L /* 853 */, - 0xBD0610175D53B1F3L /* 854 */, 0x46FE6CB840413F27L /* 855 */, - 0x3FE03792DF0CFA59L /* 856 */, 0xCFE700372EB85E8FL /* 857 */, - 0xA7BE29E7ADBCE118L /* 858 */, 0xE544EE5CDE8431DDL /* 859 */, - 0x8A781B1B41F1873EL /* 860 */, 0xA5C94C78A0D2F0E7L /* 861 */, - 0x39412E2877B60728L /* 862 */, 0xA1265EF3AFC9A62CL /* 863 */, - 0xBCC2770C6A2506C5L /* 864 */, 0x3AB66DD5DCE1CE12L /* 865 */, - 0xE65499D04A675B37L /* 866 */, 0x7D8F523481BFD216L /* 867 */, - 0x0F6F64FCEC15F389L /* 868 */, 0x74EFBE618B5B13C8L /* 869 */, - 0xACDC82B714273E1DL /* 870 */, 0xDD40BFE003199D17L /* 871 */, - 0x37E99257E7E061F8L /* 872 */, 0xFA52626904775AAAL /* 873 */, - 0x8BBBF63A463D56F9L /* 874 */, 0xF0013F1543A26E64L /* 875 */, - 0xA8307E9F879EC898L /* 876 */, 0xCC4C27A4150177CCL /* 877 */, - 0x1B432F2CCA1D3348L /* 878 */, 0xDE1D1F8F9F6FA013L /* 879 */, - 0x606602A047A7DDD6L /* 880 */, 0xD237AB64CC1CB2C7L /* 881 */, - 0x9B938E7225FCD1D3L /* 882 */, 0xEC4E03708E0FF476L /* 883 */, - 0xFEB2FBDA3D03C12DL /* 884 */, 0xAE0BCED2EE43889AL /* 885 */, - 0x22CB8923EBFB4F43L /* 886 */, 0x69360D013CF7396DL /* 887 */, - 0x855E3602D2D4E022L /* 888 */, 0x073805BAD01F784CL /* 889 */, - 0x33E17A133852F546L /* 890 */, 0xDF4874058AC7B638L /* 891 */, - 0xBA92B29C678AA14AL /* 892 */, 0x0CE89FC76CFAADCDL /* 893 */, - 0x5F9D4E0908339E34L /* 894 */, 0xF1AFE9291F5923B9L /* 895 */, - 0x6E3480F60F4A265FL /* 896 */, 0xEEBF3A2AB29B841CL /* 897 */, - 0xE21938A88F91B4ADL /* 898 */, 0x57DFEFF845C6D3C3L /* 899 */, - 0x2F006B0BF62CAAF2L /* 900 */, 0x62F479EF6F75EE78L /* 901 */, - 0x11A55AD41C8916A9L /* 902 */, 0xF229D29084FED453L /* 903 */, - 0x42F1C27B16B000E6L /* 904 */, 0x2B1F76749823C074L /* 905 */, - 0x4B76ECA3C2745360L /* 906 */, 0x8C98F463B91691BDL /* 907 */, - 0x14BCC93CF1ADE66AL /* 908 */, 0x8885213E6D458397L /* 909 */, - 0x8E177DF0274D4711L /* 910 */, 0xB49B73B5503F2951L /* 911 */, - 0x10168168C3F96B6BL /* 912 */, 0x0E3D963B63CAB0AEL /* 913 */, - 0x8DFC4B5655A1DB14L /* 914 */, 0xF789F1356E14DE5CL /* 915 */, - 0x683E68AF4E51DAC1L /* 916 */, 0xC9A84F9D8D4B0FD9L /* 917 */, - 0x3691E03F52A0F9D1L /* 918 */, 0x5ED86E46E1878E80L /* 919 */, - 0x3C711A0E99D07150L /* 920 */, 0x5A0865B20C4E9310L /* 921 */, - 0x56FBFC1FE4F0682EL /* 922 */, 0xEA8D5DE3105EDF9BL /* 923 */, - 0x71ABFDB12379187AL /* 924 */, 0x2EB99DE1BEE77B9CL /* 925 */, - 0x21ECC0EA33CF4523L /* 926 */, 0x59A4D7521805C7A1L /* 927 */, - 0x3896F5EB56AE7C72L /* 928 */, 0xAA638F3DB18F75DCL /* 929 */, - 0x9F39358DABE9808EL /* 930 */, 0xB7DEFA91C00B72ACL /* 931 */, - 0x6B5541FD62492D92L /* 932 */, 0x6DC6DEE8F92E4D5BL /* 933 */, - 0x353F57ABC4BEEA7EL /* 934 */, 0x735769D6DA5690CEL /* 935 */, - 0x0A234AA642391484L /* 936 */, 0xF6F9508028F80D9DL /* 937 */, - 0xB8E319A27AB3F215L /* 938 */, 0x31AD9C1151341A4DL /* 939 */, - 0x773C22A57BEF5805L /* 940 */, 0x45C7561A07968633L /* 941 */, - 0xF913DA9E249DBE36L /* 942 */, 0xDA652D9B78A64C68L /* 943 */, - 0x4C27A97F3BC334EFL /* 944 */, 0x76621220E66B17F4L /* 945 */, - 0x967743899ACD7D0BL /* 946 */, 0xF3EE5BCAE0ED6782L /* 947 */, - 0x409F753600C879FCL /* 948 */, 0x06D09A39B5926DB6L /* 949 */, - 0x6F83AEB0317AC588L /* 950 */, 0x01E6CA4A86381F21L /* 951 */, - 0x66FF3462D19F3025L /* 952 */, 0x72207C24DDFD3BFBL /* 953 */, - 0x4AF6B6D3E2ECE2EBL /* 954 */, 0x9C994DBEC7EA08DEL /* 955 */, - 0x49ACE597B09A8BC4L /* 956 */, 0xB38C4766CF0797BAL /* 957 */, - 0x131B9373C57C2A75L /* 958 */, 0xB1822CCE61931E58L /* 959 */, - 0x9D7555B909BA1C0CL /* 960 */, 0x127FAFDD937D11D2L /* 961 */, - 0x29DA3BADC66D92E4L /* 962 */, 0xA2C1D57154C2ECBCL /* 963 */, - 0x58C5134D82F6FE24L /* 964 */, 0x1C3AE3515B62274FL /* 965 */, - 0xE907C82E01CB8126L /* 966 */, 0xF8ED091913E37FCBL /* 967 */, - 0x3249D8F9C80046C9L /* 968 */, 0x80CF9BEDE388FB63L /* 969 */, - 0x1881539A116CF19EL /* 970 */, 0x5103F3F76BD52457L /* 971 */, - 0x15B7E6F5AE47F7A8L /* 972 */, 0xDBD7C6DED47E9CCFL /* 973 */, - 0x44E55C410228BB1AL /* 974 */, 0xB647D4255EDB4E99L /* 975 */, - 0x5D11882BB8AAFC30L /* 976 */, 0xF5098BBB29D3212AL /* 977 */, - 0x8FB5EA14E90296B3L /* 978 */, 0x677B942157DD025AL /* 979 */, - 0xFB58E7C0A390ACB5L /* 980 */, 0x89D3674C83BD4A01L /* 981 */, - 0x9E2DA4DF4BF3B93BL /* 982 */, 0xFCC41E328CAB4829L /* 983 */, - 0x03F38C96BA582C52L /* 984 */, 0xCAD1BDBD7FD85DB2L /* 985 */, - 0xBBB442C16082AE83L /* 986 */, 0xB95FE86BA5DA9AB0L /* 987 */, - 0xB22E04673771A93FL /* 988 */, 0x845358C9493152D8L /* 989 */, - 0xBE2A488697B4541EL /* 990 */, 0x95A2DC2DD38E6966L /* 991 */, - 0xC02C11AC923C852BL /* 992 */, 0x2388B1990DF2A87BL /* 993 */, - 0x7C8008FA1B4F37BEL /* 994 */, 0x1F70D0C84D54E503L /* 995 */, - 0x5490ADEC7ECE57D4L /* 996 */, 0x002B3C27D9063A3AL /* 997 */, - 0x7EAEA3848030A2BFL /* 998 */, 0xC602326DED2003C0L /* 999 */, - 0x83A7287D69A94086L /* 1000 */, 0xC57A5FCB30F57A8AL /* 1001 */, - 0xB56844E479EBE779L /* 1002 */, 0xA373B40F05DCBCE9L /* 1003 */, - 0xD71A786E88570EE2L /* 1004 */, 0x879CBACDBDE8F6A0L /* 1005 */, - 0x976AD1BCC164A32FL /* 1006 */, 0xAB21E25E9666D78BL /* 1007 */, - 0x901063AAE5E5C33CL /* 1008 */, 0x9818B34448698D90L /* 1009 */, - 0xE36487AE3E1E8ABBL /* 1010 */, 0xAFBDF931893BDCB4L /* 1011 */, - 0x6345A0DC5FBBD519L /* 1012 */, 0x8628FE269B9465CAL /* 1013 */, - 0x1E5D01603F9C51ECL /* 1014 */, 0x4DE44006A15049B7L /* 1015 */, - 0xBF6C70E5F776CBB1L /* 1016 */, 0x411218F2EF552BEDL /* 1017 */, - 0xCB0C0708705A36A3L /* 1018 */, 0xE74D14754F986044L /* 1019 */, - 0xCD56D9430EA8280EL /* 1020 */, 0xC12591D7535F5065L /* 1021 */, - 0xC83223F1720AEF96L /* 1022 */, 0xC3A0396F7363A51FL /* 1023 */ - }; - - private static final int DIGEST_LENGTH = 24; - - // - // registers - // - private long a, b, c; - private long byteCount; - - // - // buffers - // - private byte[] buf = new byte[8]; - private int bOff = 0; - - private long[] x = new long[8]; - private int xOff = 0; - - /** - * Standard constructor - */ - public TigerDigest() - { - reset(); - } - - /** - * Copy constructor. This will copy the state of the provided - * message digest. - */ - public TigerDigest(TigerDigest t) - { - a = t.a; - b = t.b; - c = t.c; - - System.arraycopy(t.x, 0, x, 0, t.x.length); - xOff = t.xOff; - - System.arraycopy(t.buf, 0, buf, 0, t.buf.length); - bOff = t.bOff; - - byteCount = t.byteCount; - } - - public String getAlgorithmName() - { - return "Tiger"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH; - } - - private void processWord( - byte[] b, - int off) - { - x[xOff++] = ((long)(b[off + 7] & 0xff) << 56) - | ((long)(b[off + 6] & 0xff) << 48) - | ((long)(b[off + 5] & 0xff) << 40) - | ((long)(b[off + 4] & 0xff) << 32) - | ((long)(b[off + 3] & 0xff) << 24) - | ((long)(b[off + 2] & 0xff) << 16) - | ((long)(b[off + 1] & 0xff) << 8) - | ((b[off + 0] & 0xff)); - - if (xOff == x.length) - { - processBlock(); - } - - bOff = 0; - } - - public void update( - byte in) - { - buf[bOff++] = in; - - if (bOff == buf.length) - { - processWord(buf, 0); - } - - byteCount++; - } - - public void update( - byte[] in, - int inOff, - int len) - { - // - // fill the current word - // - while ((bOff != 0) && (len > 0)) - { - update(in[inOff]); - - inOff++; - len--; - } - - // - // process whole words. - // - while (len > 8) - { - processWord(in, inOff); - - inOff += 8; - len -= 8; - byteCount += 8; - } - - // - // load in the remainder. - // - while (len > 0) - { - update(in[inOff]); - - inOff++; - len--; - } - } - - private void roundABC( - long x, - long mul) - { - c ^= x ; - a -= t1[(int)c & 0xff] ^ t2[(int)(c >> 16) & 0xff] - ^ t3[(int)(c >> 32) & 0xff] ^ t4[(int)(c >> 48) & 0xff]; - b += t4[(int)(c >> 8) & 0xff] ^ t3[(int)(c >> 24) & 0xff] - ^ t2[(int)(c >> 40) & 0xff] ^ t1[(int)(c >> 56) & 0xff]; - b *= mul; - } - - private void roundBCA( - long x, - long mul) - { - a ^= x ; - b -= t1[(int)a & 0xff] ^ t2[(int)(a >> 16) & 0xff] - ^ t3[(int)(a >> 32) & 0xff] ^ t4[(int)(a >> 48) & 0xff]; - c += t4[(int)(a >> 8) & 0xff] ^ t3[(int)(a >> 24) & 0xff] - ^ t2[(int)(a >> 40) & 0xff] ^ t1[(int)(a >> 56) & 0xff]; - c *= mul; - } - - private void roundCAB( - long x, - long mul) - { - b ^= x ; - c -= t1[(int)b & 0xff] ^ t2[(int)(b >> 16) & 0xff] - ^ t3[(int)(b >> 32) & 0xff] ^ t4[(int)(b >> 48) & 0xff]; - a += t4[(int)(b >> 8) & 0xff] ^ t3[(int)(b >> 24) & 0xff] - ^ t2[(int)(b >> 40) & 0xff] ^ t1[(int)(b >> 56) & 0xff]; - a *= mul; - } - - private void keySchedule() - { - x[0] -= x[7] ^ 0xA5A5A5A5A5A5A5A5L; - x[1] ^= x[0]; - x[2] += x[1]; - x[3] -= x[2] ^ ((~x[1]) << 19); - x[4] ^= x[3]; - x[5] += x[4]; - x[6] -= x[5] ^ ((~x[4]) >>> 23); - x[7] ^= x[6]; - x[0] += x[7]; - x[1] -= x[0] ^ ((~x[7]) << 19); - x[2] ^= x[1]; - x[3] += x[2]; - x[4] -= x[3] ^ ((~x[2]) >>> 23); - x[5] ^= x[4]; - x[6] += x[5]; - x[7] -= x[6] ^ 0x0123456789ABCDEFL; - } - - private void processBlock() - { - // - // save abc - // - long aa = a; - long bb = b; - long cc = c; - - // - // rounds and schedule - // - roundABC(x[0], 5); - roundBCA(x[1], 5); - roundCAB(x[2], 5); - roundABC(x[3], 5); - roundBCA(x[4], 5); - roundCAB(x[5], 5); - roundABC(x[6], 5); - roundBCA(x[7], 5); - - keySchedule(); - - roundCAB(x[0], 7); - roundABC(x[1], 7); - roundBCA(x[2], 7); - roundCAB(x[3], 7); - roundABC(x[4], 7); - roundBCA(x[5], 7); - roundCAB(x[6], 7); - roundABC(x[7], 7); - - keySchedule(); - - roundBCA(x[0], 9); - roundCAB(x[1], 9); - roundABC(x[2], 9); - roundBCA(x[3], 9); - roundCAB(x[4], 9); - roundABC(x[5], 9); - roundBCA(x[6], 9); - roundCAB(x[7], 9); - - // - // feed forward - // - a ^= aa; - b -= bb; - c += cc; - - // - // clear the x buffer - // - xOff = 0; - for (int i = 0; i != x.length; i++) - { - x[i] = 0; - } - } - - public void unpackWord( - long r, - byte[] out, - int outOff) - { - out[outOff + 7] = (byte)(r >> 56); - out[outOff + 6] = (byte)(r >> 48); - out[outOff + 5] = (byte)(r >> 40); - out[outOff + 4] = (byte)(r >> 32); - out[outOff + 3] = (byte)(r >> 24); - out[outOff + 2] = (byte)(r >> 16); - out[outOff + 1] = (byte)(r >> 8); - out[outOff] = (byte)r; - } - - private void processLength( - long bitLength) - { - x[7] = bitLength; - } - - private void finish() - { - long bitLength = (byteCount << 3); - - update((byte)0x01); - - while (bOff != 0) - { - update((byte)0); - } - - processLength(bitLength); - - processBlock(); - } - - public int doFinal( - byte[] out, - int outOff) - { - finish(); - - unpackWord(a, out, outOff); - unpackWord(b, out, outOff + 8); - unpackWord(c, out, outOff + 16); - - reset(); - - return DIGEST_LENGTH; - } - - /** - * reset the chaining variables - */ - public void reset() - { - a = 0x0123456789ABCDEFL; - b = 0xFEDCBA9876543210L; - c = 0xF096A5B4C3B2E187L; - - xOff = 0; - for (int i = 0; i != x.length; i++) - { - x[i] = 0; - } - - bOff = 0; - for (int i = 0; i != buf.length; i++) - { - buf[i] = 0; - } - - byteCount = 0; - } - - public int getByteLength() - { - return BYTE_LENGTH; - } -} diff --git a/src/org/bouncycastle/crypto/digests/WhirlpoolDigest.java b/src/org/bouncycastle/crypto/digests/WhirlpoolDigest.java deleted file mode 100644 index 6d35047..0000000 --- a/src/org/bouncycastle/crypto/digests/WhirlpoolDigest.java +++ /dev/null @@ -1,396 +0,0 @@ -package org.bouncycastle.crypto.digests; - -import org.bouncycastle.crypto.ExtendedDigest; -import org.bouncycastle.util.Arrays; - - -/** - * Implementation of WhirlpoolDigest, based on Java source published by Barreto - * and Rijmen. - * - */ -public final class WhirlpoolDigest - implements ExtendedDigest -{ - private static final int BYTE_LENGTH = 64; - - private static final int DIGEST_LENGTH_BYTES = 512 / 8; - private static final int ROUNDS = 10; - private static final int REDUCTION_POLYNOMIAL = 0x011d; // 2^8 + 2^4 + 2^3 + 2 + 1; - - private static final int[] SBOX = { - 0x18, 0x23, 0xc6, 0xe8, 0x87, 0xb8, 0x01, 0x4f, 0x36, 0xa6, 0xd2, 0xf5, 0x79, 0x6f, 0x91, 0x52, - 0x60, 0xbc, 0x9b, 0x8e, 0xa3, 0x0c, 0x7b, 0x35, 0x1d, 0xe0, 0xd7, 0xc2, 0x2e, 0x4b, 0xfe, 0x57, - 0x15, 0x77, 0x37, 0xe5, 0x9f, 0xf0, 0x4a, 0xda, 0x58, 0xc9, 0x29, 0x0a, 0xb1, 0xa0, 0x6b, 0x85, - 0xbd, 0x5d, 0x10, 0xf4, 0xcb, 0x3e, 0x05, 0x67, 0xe4, 0x27, 0x41, 0x8b, 0xa7, 0x7d, 0x95, 0xd8, - 0xfb, 0xee, 0x7c, 0x66, 0xdd, 0x17, 0x47, 0x9e, 0xca, 0x2d, 0xbf, 0x07, 0xad, 0x5a, 0x83, 0x33, - 0x63, 0x02, 0xaa, 0x71, 0xc8, 0x19, 0x49, 0xd9, 0xf2, 0xe3, 0x5b, 0x88, 0x9a, 0x26, 0x32, 0xb0, - 0xe9, 0x0f, 0xd5, 0x80, 0xbe, 0xcd, 0x34, 0x48, 0xff, 0x7a, 0x90, 0x5f, 0x20, 0x68, 0x1a, 0xae, - 0xb4, 0x54, 0x93, 0x22, 0x64, 0xf1, 0x73, 0x12, 0x40, 0x08, 0xc3, 0xec, 0xdb, 0xa1, 0x8d, 0x3d, - 0x97, 0x00, 0xcf, 0x2b, 0x76, 0x82, 0xd6, 0x1b, 0xb5, 0xaf, 0x6a, 0x50, 0x45, 0xf3, 0x30, 0xef, - 0x3f, 0x55, 0xa2, 0xea, 0x65, 0xba, 0x2f, 0xc0, 0xde, 0x1c, 0xfd, 0x4d, 0x92, 0x75, 0x06, 0x8a, - 0xb2, 0xe6, 0x0e, 0x1f, 0x62, 0xd4, 0xa8, 0x96, 0xf9, 0xc5, 0x25, 0x59, 0x84, 0x72, 0x39, 0x4c, - 0x5e, 0x78, 0x38, 0x8c, 0xd1, 0xa5, 0xe2, 0x61, 0xb3, 0x21, 0x9c, 0x1e, 0x43, 0xc7, 0xfc, 0x04, - 0x51, 0x99, 0x6d, 0x0d, 0xfa, 0xdf, 0x7e, 0x24, 0x3b, 0xab, 0xce, 0x11, 0x8f, 0x4e, 0xb7, 0xeb, - 0x3c, 0x81, 0x94, 0xf7, 0xb9, 0x13, 0x2c, 0xd3, 0xe7, 0x6e, 0xc4, 0x03, 0x56, 0x44, 0x7f, 0xa9, - 0x2a, 0xbb, 0xc1, 0x53, 0xdc, 0x0b, 0x9d, 0x6c, 0x31, 0x74, 0xf6, 0x46, 0xac, 0x89, 0x14, 0xe1, - 0x16, 0x3a, 0x69, 0x09, 0x70, 0xb6, 0xd0, 0xed, 0xcc, 0x42, 0x98, 0xa4, 0x28, 0x5c, 0xf8, 0x86 - }; - - private static final long[] C0 = new long[256]; - private static final long[] C1 = new long[256]; - private static final long[] C2 = new long[256]; - private static final long[] C3 = new long[256]; - private static final long[] C4 = new long[256]; - private static final long[] C5 = new long[256]; - private static final long[] C6 = new long[256]; - private static final long[] C7 = new long[256]; - - private final long[] _rc = new long[ROUNDS + 1]; - - public WhirlpoolDigest() - { - for (int i = 0; i < 256; i++) - { - int v1 = SBOX[i]; - int v2 = maskWithReductionPolynomial(v1 << 1); - int v4 = maskWithReductionPolynomial(v2 << 1); - int v5 = v4 ^ v1; - int v8 = maskWithReductionPolynomial(v4 << 1); - int v9 = v8 ^ v1; - - C0[i] = packIntoLong(v1, v1, v4, v1, v8, v5, v2, v9); - C1[i] = packIntoLong(v9, v1, v1, v4, v1, v8, v5, v2); - C2[i] = packIntoLong(v2, v9, v1, v1, v4, v1, v8, v5); - C3[i] = packIntoLong(v5, v2, v9, v1, v1, v4, v1, v8); - C4[i] = packIntoLong(v8, v5, v2, v9, v1, v1, v4, v1); - C5[i] = packIntoLong(v1, v8, v5, v2, v9, v1, v1, v4); - C6[i] = packIntoLong(v4, v1, v8, v5, v2, v9, v1, v1); - C7[i] = packIntoLong(v1, v4, v1, v8, v5, v2, v9, v1); - - } - - _rc[0] = 0L; - for (int r = 1; r <= ROUNDS; r++) - { - int i = 8 * (r - 1); - _rc[r] = (C0[i ] & 0xff00000000000000L) ^ - (C1[i + 1] & 0x00ff000000000000L) ^ - (C2[i + 2] & 0x0000ff0000000000L) ^ - (C3[i + 3] & 0x000000ff00000000L) ^ - (C4[i + 4] & 0x00000000ff000000L) ^ - (C5[i + 5] & 0x0000000000ff0000L) ^ - (C6[i + 6] & 0x000000000000ff00L) ^ - (C7[i + 7] & 0x00000000000000ffL); - } - - } - - private long packIntoLong(int b7, int b6, int b5, int b4, int b3, int b2, int b1, int b0) - { - return - ((long)b7 << 56) ^ - ((long)b6 << 48) ^ - ((long)b5 << 40) ^ - ((long)b4 << 32) ^ - ((long)b3 << 24) ^ - ((long)b2 << 16) ^ - ((long)b1 << 8) ^ - b0; - } - - /* - * int's are used to prevent sign extension. The values that are really being used are - * actually just 0..255 - */ - private int maskWithReductionPolynomial(int input) - { - int rv = input; - if (rv >= 0x100L) // high bit set - { - rv ^= REDUCTION_POLYNOMIAL; // reduced by the polynomial - } - return rv; - } - - // --------------------------------------------------------------------------------------// - - // -- buffer information -- - private static final int BITCOUNT_ARRAY_SIZE = 32; - private byte[] _buffer = new byte[64]; - private int _bufferPos = 0; - private short[] _bitCount = new short[BITCOUNT_ARRAY_SIZE]; - - // -- internal hash state -- - private long[] _hash = new long[8]; - private long[] _K = new long[8]; // the round key - private long[] _L = new long[8]; - private long[] _block = new long[8]; // mu (buffer) - private long[] _state = new long[8]; // the current "cipher" state - - - - /** - * Copy constructor. This will copy the state of the provided message - * digest. - */ - public WhirlpoolDigest(WhirlpoolDigest originalDigest) - { - System.arraycopy(originalDigest._rc, 0, _rc, 0, _rc.length); - - System.arraycopy(originalDigest._buffer, 0, _buffer, 0, _buffer.length); - - this._bufferPos = originalDigest._bufferPos; - System.arraycopy(originalDigest._bitCount, 0, _bitCount, 0, _bitCount.length); - - // -- internal hash state -- - System.arraycopy(originalDigest._hash, 0, _hash, 0, _hash.length); - System.arraycopy(originalDigest._K, 0, _K, 0, _K.length); - System.arraycopy(originalDigest._L, 0, _L, 0, _L.length); - System.arraycopy(originalDigest._block, 0, _block, 0, _block.length); - System.arraycopy(originalDigest._state, 0, _state, 0, _state.length); - } - - public String getAlgorithmName() - { - return "Whirlpool"; - } - - public int getDigestSize() - { - return DIGEST_LENGTH_BYTES; - } - - public int doFinal(byte[] out, int outOff) - { - // sets out[outOff] .. out[outOff+DIGEST_LENGTH_BYTES] - finish(); - - for (int i = 0; i < 8; i++) - { - convertLongToByteArray(_hash[i], out, outOff + (i * 8)); - } - - reset(); - return getDigestSize(); - } - - /** - * reset the chaining variables - */ - public void reset() - { - // set variables to null, blank, whatever - _bufferPos = 0; - Arrays.fill(_bitCount, (short)0); - Arrays.fill(_buffer, (byte)0); - Arrays.fill(_hash, 0); - Arrays.fill(_K, 0); - Arrays.fill(_L, 0); - Arrays.fill(_block, 0); - Arrays.fill(_state, 0); - } - - // this takes a buffer of information and fills the block - private void processFilledBuffer(byte[] in, int inOff) - { - // copies into the block... - for (int i = 0; i < _state.length; i++) - { - _block[i] = bytesToLongFromBuffer(_buffer, i * 8); - } - processBlock(); - _bufferPos = 0; - Arrays.fill(_buffer, (byte)0); - } - - private long bytesToLongFromBuffer(byte[] buffer, int startPos) - { - long rv = (((buffer[startPos + 0] & 0xffL) << 56) | - ((buffer[startPos + 1] & 0xffL) << 48) | - ((buffer[startPos + 2] & 0xffL) << 40) | - ((buffer[startPos + 3] & 0xffL) << 32) | - ((buffer[startPos + 4] & 0xffL) << 24) | - ((buffer[startPos + 5] & 0xffL) << 16) | - ((buffer[startPos + 6] & 0xffL) << 8) | - ((buffer[startPos + 7]) & 0xffL)); - - return rv; - } - - private void convertLongToByteArray(long inputLong, byte[] outputArray, int offSet) - { - for (int i = 0; i < 8; i++) - { - outputArray[offSet + i] = (byte)((inputLong >> (56 - (i * 8))) & 0xff); - } - } - - protected void processBlock() - { - // buffer contents have been transferred to the _block[] array via - // processFilledBuffer - - // compute and apply K^0 - for (int i = 0; i < 8; i++) - { - _state[i] = _block[i] ^ (_K[i] = _hash[i]); - } - - // iterate over the rounds - for (int round = 1; round <= ROUNDS; round++) - { - for (int i = 0; i < 8; i++) - { - _L[i] = 0; - _L[i] ^= C0[(int)(_K[(i - 0) & 7] >>> 56) & 0xff]; - _L[i] ^= C1[(int)(_K[(i - 1) & 7] >>> 48) & 0xff]; - _L[i] ^= C2[(int)(_K[(i - 2) & 7] >>> 40) & 0xff]; - _L[i] ^= C3[(int)(_K[(i - 3) & 7] >>> 32) & 0xff]; - _L[i] ^= C4[(int)(_K[(i - 4) & 7] >>> 24) & 0xff]; - _L[i] ^= C5[(int)(_K[(i - 5) & 7] >>> 16) & 0xff]; - _L[i] ^= C6[(int)(_K[(i - 6) & 7] >>> 8) & 0xff]; - _L[i] ^= C7[(int)(_K[(i - 7) & 7]) & 0xff]; - } - - System.arraycopy(_L, 0, _K, 0, _K.length); - - _K[0] ^= _rc[round]; - - // apply the round transformation - for (int i = 0; i < 8; i++) - { - _L[i] = _K[i]; - - _L[i] ^= C0[(int)(_state[(i - 0) & 7] >>> 56) & 0xff]; - _L[i] ^= C1[(int)(_state[(i - 1) & 7] >>> 48) & 0xff]; - _L[i] ^= C2[(int)(_state[(i - 2) & 7] >>> 40) & 0xff]; - _L[i] ^= C3[(int)(_state[(i - 3) & 7] >>> 32) & 0xff]; - _L[i] ^= C4[(int)(_state[(i - 4) & 7] >>> 24) & 0xff]; - _L[i] ^= C5[(int)(_state[(i - 5) & 7] >>> 16) & 0xff]; - _L[i] ^= C6[(int)(_state[(i - 6) & 7] >>> 8) & 0xff]; - _L[i] ^= C7[(int)(_state[(i - 7) & 7]) & 0xff]; - } - - // save the current state - System.arraycopy(_L, 0, _state, 0, _state.length); - } - - // apply Miuaguchi-Preneel compression - for (int i = 0; i < 8; i++) - { - _hash[i] ^= _state[i] ^ _block[i]; - } - - } - - public void update(byte in) - { - _buffer[_bufferPos] = in; - - //System.out.println("adding to buffer = "+_buffer[_bufferPos]); - - ++_bufferPos; - - if (_bufferPos == _buffer.length) - { - processFilledBuffer(_buffer, 0); - } - - increment(); - } - - /* - * increment() can be implemented in this way using 2 arrays or - * by having some temporary variables that are used to set the - * value provided by EIGHT[i] and carry within the loop. - * - * not having done any timing, this seems likely to be faster - * at the slight expense of 32*(sizeof short) bytes - */ - private static final short[] EIGHT = new short[BITCOUNT_ARRAY_SIZE]; - static - { - EIGHT[BITCOUNT_ARRAY_SIZE - 1] = 8; - } - - private void increment() - { - int carry = 0; - for (int i = _bitCount.length - 1; i >= 0; i--) - { - int sum = (_bitCount[i] & 0xff) + EIGHT[i] + carry; - - carry = sum >>> 8; - _bitCount[i] = (short)(sum & 0xff); - } - } - - public void update(byte[] in, int inOff, int len) - { - while (len > 0) - { - update(in[inOff]); - ++inOff; - --len; - } - - } - - private void finish() - { - /* - * this makes a copy of the current bit length. at the expense of an - * object creation of 32 bytes rather than providing a _stopCounting - * boolean which was the alternative I could think of. - */ - byte[] bitLength = copyBitLength(); - - _buffer[_bufferPos++] |= 0x80; - - if (_bufferPos == _buffer.length) - { - processFilledBuffer(_buffer, 0); - } - - /* - * Final block contains - * [ ... data .... ][0][0][0][ length ] - * - * if [ length ] cannot fit. Need to create a new block. - */ - if (_bufferPos > 32) - { - while (_bufferPos != 0) - { - update((byte)0); - } - } - - while (_bufferPos <= 32) - { - update((byte)0); - } - - // copy the length information to the final 32 bytes of the - // 64 byte block.... - System.arraycopy(bitLength, 0, _buffer, 32, bitLength.length); - - processFilledBuffer(_buffer, 0); - } - - private byte[] copyBitLength() - { - byte[] rv = new byte[BITCOUNT_ARRAY_SIZE]; - for (int i = 0; i < rv.length; i++) - { - rv[i] = (byte)(_bitCount[i] & 0xff); - } - return rv; - } - - public int getByteLength() - { - return BYTE_LENGTH; - } -} diff --git a/src/org/bouncycastle/crypto/digests/package.html b/src/org/bouncycastle/crypto/digests/package.html deleted file mode 100644 index 0a0d95c..0000000 --- a/src/org/bouncycastle/crypto/digests/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Message digest classes. - - diff --git a/src/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java b/src/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java deleted file mode 100644 index 109ad93..0000000 --- a/src/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java +++ /dev/null @@ -1,287 +0,0 @@ -package org.bouncycastle.crypto.encodings; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -/** - * ISO 9796-1 padding. Note in the light of recent results you should - * only use this with RSA (rather than the "simpler" Rabin keys) and you - * should never use it with anything other than a hash (ie. even if the - * message is small don't sign the message, sign it's hash) or some "random" - * value. See your favorite search engine for details. - */ -public class ISO9796d1Encoding - implements AsymmetricBlockCipher -{ - private static final BigInteger SIXTEEN = BigInteger.valueOf(16L); - private static final BigInteger SIX = BigInteger.valueOf(6L); - - private static byte[] shadows = { 0xe, 0x3, 0x5, 0x8, 0x9, 0x4, 0x2, 0xf, - 0x0, 0xd, 0xb, 0x6, 0x7, 0xa, 0xc, 0x1 }; - private static byte[] inverse = { 0x8, 0xf, 0x6, 0x1, 0x5, 0x2, 0xb, 0xc, - 0x3, 0x4, 0xd, 0xa, 0xe, 0x9, 0x0, 0x7 }; - - private AsymmetricBlockCipher engine; - private boolean forEncryption; - private int bitSize; - private int padBits = 0; - private BigInteger modulus; - - public ISO9796d1Encoding( - AsymmetricBlockCipher cipher) - { - this.engine = cipher; - } - - public AsymmetricBlockCipher getUnderlyingCipher() - { - return engine; - } - - public void init( - boolean forEncryption, - CipherParameters param) - { - RSAKeyParameters kParam = null; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - kParam = (RSAKeyParameters)rParam.getParameters(); - } - else - { - kParam = (RSAKeyParameters)param; - } - - engine.init(forEncryption, param); - - modulus = kParam.getModulus(); - bitSize = modulus.bitLength(); - - this.forEncryption = forEncryption; - } - - /** - * return the input block size. The largest message we can process - * is (key_size_in_bits + 3)/16, which in our world comes to - * key_size_in_bytes / 2. - */ - public int getInputBlockSize() - { - int baseBlockSize = engine.getInputBlockSize(); - - if (forEncryption) - { - return (baseBlockSize + 1) / 2; - } - else - { - return baseBlockSize; - } - } - - /** - * return the maximum possible size for the output. - */ - public int getOutputBlockSize() - { - int baseBlockSize = engine.getOutputBlockSize(); - - if (forEncryption) - { - return baseBlockSize; - } - else - { - return (baseBlockSize + 1) / 2; - } - } - - /** - * set the number of bits in the next message to be treated as - * pad bits. - */ - public void setPadBits( - int padBits) - { - if (padBits > 7) - { - throw new IllegalArgumentException("padBits > 7"); - } - - this.padBits = padBits; - } - - /** - * retrieve the number of pad bits in the last decoded message. - */ - public int getPadBits() - { - return padBits; - } - - public byte[] processBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - if (forEncryption) - { - return encodeBlock(in, inOff, inLen); - } - else - { - return decodeBlock(in, inOff, inLen); - } - } - - private byte[] encodeBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - byte[] block = new byte[(bitSize + 7) / 8]; - int r = padBits + 1; - int z = inLen; - int t = (bitSize + 13) / 16; - - for (int i = 0; i < t; i += z) - { - if (i > t - z) - { - System.arraycopy(in, inOff + inLen - (t - i), - block, block.length - t, t - i); - } - else - { - System.arraycopy(in, inOff, block, block.length - (i + z), z); - } - } - - for (int i = block.length - 2 * t; i != block.length; i += 2) - { - byte val = block[block.length - t + i / 2]; - - block[i] = (byte)((shadows[(val & 0xff) >>> 4] << 4) - | shadows[val & 0x0f]); - block[i + 1] = val; - } - - block[block.length - 2 * z] ^= r; - block[block.length - 1] = (byte)((block[block.length - 1] << 4) | 0x06); - - int maxBit = (8 - (bitSize - 1) % 8); - int offSet = 0; - - if (maxBit != 8) - { - block[0] &= 0xff >>> maxBit; - block[0] |= 0x80 >>> maxBit; - } - else - { - block[0] = 0x00; - block[1] |= 0x80; - offSet = 1; - } - - return engine.processBlock(block, offSet, block.length - offSet); - } - - /** - * @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string - */ - private byte[] decodeBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - byte[] block = engine.processBlock(in, inOff, inLen); - int r = 1; - int t = (bitSize + 13) / 16; - - BigInteger iS = new BigInteger(1, block); - BigInteger iR; - if (iS.mod(SIXTEEN).equals(SIX)) - { - iR = iS; - } - else if ((modulus.subtract(iS)).mod(SIXTEEN).equals(SIX)) - { - iR = modulus.subtract(iS); - } - else - { - throw new InvalidCipherTextException("resulting integer iS or (modulus - iS) is not congruent to 6 mod 16"); - } - - block = convertOutputDecryptOnly(iR); - - if ((block[block.length - 1] & 0x0f) != 0x6 ) - { - throw new InvalidCipherTextException("invalid forcing byte in block"); - } - - block[block.length - 1] = (byte)(((block[block.length - 1] & 0xff) >>> 4) | ((inverse[(block[block.length - 2] & 0xff) >> 4]) << 4)); - block[0] = (byte)((shadows[(block[1] & 0xff) >>> 4] << 4) - | shadows[block[1] & 0x0f]); - - boolean boundaryFound = false; - int boundary = 0; - - for (int i = block.length - 1; i >= block.length - 2 * t; i -= 2) - { - int val = ((shadows[(block[i] & 0xff) >>> 4] << 4) - | shadows[block[i] & 0x0f]); - - if (((block[i - 1] ^ val) & 0xff) != 0) - { - if (!boundaryFound) - { - boundaryFound = true; - r = (block[i - 1] ^ val) & 0xff; - boundary = i - 1; - } - else - { - throw new InvalidCipherTextException("invalid tsums in block"); - } - } - } - - block[boundary] = 0; - - byte[] nblock = new byte[(block.length - boundary) / 2]; - - for (int i = 0; i < nblock.length; i++) - { - nblock[i] = block[2 * i + boundary + 1]; - } - - padBits = r - 1; - - return nblock; - } - - private static byte[] convertOutputDecryptOnly(BigInteger result) - { - byte[] output = result.toByteArray(); - if (output[0] == 0) // have ended up with an extra zero byte, copy down. - { - byte[] tmp = new byte[output.length - 1]; - System.arraycopy(output, 1, tmp, 0, tmp.length); - return tmp; - } - return output; - } -} diff --git a/src/org/bouncycastle/crypto/encodings/OAEPEncoding.java b/src/org/bouncycastle/crypto/encodings/OAEPEncoding.java deleted file mode 100644 index 97c8d7d..0000000 --- a/src/org/bouncycastle/crypto/encodings/OAEPEncoding.java +++ /dev/null @@ -1,348 +0,0 @@ -package org.bouncycastle.crypto.encodings; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -import javabc.SecureRandom; - -/** - * Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. - */ -public class OAEPEncoding - implements AsymmetricBlockCipher -{ - private byte[] defHash; - private Digest hash; - private Digest mgf1Hash; - - private AsymmetricBlockCipher engine; - private SecureRandom random; - private boolean forEncryption; - - public OAEPEncoding( - AsymmetricBlockCipher cipher) - { - this(cipher, new SHA1Digest(), null); - } - - public OAEPEncoding( - AsymmetricBlockCipher cipher, - Digest hash) - { - this(cipher, hash, null); - } - - public OAEPEncoding( - AsymmetricBlockCipher cipher, - Digest hash, - byte[] encodingParams) - { - this(cipher, hash, hash, encodingParams); - } - - public OAEPEncoding( - AsymmetricBlockCipher cipher, - Digest hash, - Digest mgf1Hash, - byte[] encodingParams) - { - this.engine = cipher; - this.hash = hash; - this.mgf1Hash = mgf1Hash; - this.defHash = new byte[hash.getDigestSize()]; - - if (encodingParams != null) - { - hash.update(encodingParams, 0, encodingParams.length); - } - - hash.doFinal(defHash, 0); - } - - public AsymmetricBlockCipher getUnderlyingCipher() - { - return engine; - } - - public void init( - boolean forEncryption, - CipherParameters param) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - } - else - { - this.random = new SecureRandom(); - } - - engine.init(forEncryption, param); - - this.forEncryption = forEncryption; - } - - public int getInputBlockSize() - { - int baseBlockSize = engine.getInputBlockSize(); - - if (forEncryption) - { - return baseBlockSize - 1 - 2 * defHash.length; - } - else - { - return baseBlockSize; - } - } - - public int getOutputBlockSize() - { - int baseBlockSize = engine.getOutputBlockSize(); - - if (forEncryption) - { - return baseBlockSize; - } - else - { - return baseBlockSize - 1 - 2 * defHash.length; - } - } - - public byte[] processBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - if (forEncryption) - { - return encodeBlock(in, inOff, inLen); - } - else - { - return decodeBlock(in, inOff, inLen); - } - } - - public byte[] encodeBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - byte[] block = new byte[getInputBlockSize() + 1 + 2 * defHash.length]; - - // - // copy in the message - // - System.arraycopy(in, inOff, block, block.length - inLen, inLen); - - // - // add sentinel - // - block[block.length - inLen - 1] = 0x01; - - // - // as the block is already zeroed - there's no need to add PS (the >= 0 pad of 0) - // - - // - // add the hash of the encoding params. - // - System.arraycopy(defHash, 0, block, defHash.length, defHash.length); - - // - // generate the seed. - // - byte[] seed = new byte[defHash.length]; - - random.nextBytes(seed); - - // - // mask the message block. - // - byte[] mask = maskGeneratorFunction1(seed, 0, seed.length, block.length - defHash.length); - - for (int i = defHash.length; i != block.length; i++) - { - block[i] ^= mask[i - defHash.length]; - } - - // - // add in the seed - // - System.arraycopy(seed, 0, block, 0, defHash.length); - - // - // mask the seed. - // - mask = maskGeneratorFunction1( - block, defHash.length, block.length - defHash.length, defHash.length); - - for (int i = 0; i != defHash.length; i++) - { - block[i] ^= mask[i]; - } - - return engine.processBlock(block, 0, block.length); - } - - /** - * @exception InvalidCipherTextException if the decrypted block turns out to - * be badly formatted. - */ - public byte[] decodeBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - byte[] data = engine.processBlock(in, inOff, inLen); - byte[] block; - - // - // as we may have zeros in our leading bytes for the block we produced - // on encryption, we need to make sure our decrypted block comes back - // the same size. - // - if (data.length < engine.getOutputBlockSize()) - { - block = new byte[engine.getOutputBlockSize()]; - - System.arraycopy(data, 0, block, block.length - data.length, data.length); - } - else - { - block = data; - } - - if (block.length < (2 * defHash.length) + 1) - { - throw new InvalidCipherTextException("data too short"); - } - - // - // unmask the seed. - // - byte[] mask = maskGeneratorFunction1( - block, defHash.length, block.length - defHash.length, defHash.length); - - for (int i = 0; i != defHash.length; i++) - { - block[i] ^= mask[i]; - } - - // - // unmask the message block. - // - mask = maskGeneratorFunction1(block, 0, defHash.length, block.length - defHash.length); - - for (int i = defHash.length; i != block.length; i++) - { - block[i] ^= mask[i - defHash.length]; - } - - // - // check the hash of the encoding params. - // - for (int i = 0; i != defHash.length; i++) - { - if (defHash[i] != block[defHash.length + i]) - { - throw new InvalidCipherTextException("data hash wrong"); - } - } - - // - // find the data block - // - int start; - - for (start = 2 * defHash.length; start != block.length; start++) - { - if (block[start] != 0) - { - break; - } - } - - if (start >= (block.length - 1) || block[start] != 1) - { - throw new InvalidCipherTextException("data start wrong " + start); - } - - start++; - - // - // extract the data block - // - byte[] output = new byte[block.length - start]; - - System.arraycopy(block, start, output, 0, output.length); - - return output; - } - - /** - * int to octet string. - */ - private void ItoOSP( - int i, - byte[] sp) - { - sp[0] = (byte)(i >>> 24); - sp[1] = (byte)(i >>> 16); - sp[2] = (byte)(i >>> 8); - sp[3] = (byte)(i >>> 0); - } - - /** - * mask generator function, as described in PKCS1v2. - */ - private byte[] maskGeneratorFunction1( - byte[] Z, - int zOff, - int zLen, - int length) - { - byte[] mask = new byte[length]; - byte[] hashBuf = new byte[mgf1Hash.getDigestSize()]; - byte[] C = new byte[4]; - int counter = 0; - - hash.reset(); - - do - { - ItoOSP(counter, C); - - mgf1Hash.update(Z, zOff, zLen); - mgf1Hash.update(C, 0, C.length); - mgf1Hash.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, mask, counter * hashBuf.length, hashBuf.length); - } - while (++counter < (length / hashBuf.length)); - - if ((counter * hashBuf.length) < length) - { - ItoOSP(counter, C); - - mgf1Hash.update(Z, zOff, zLen); - mgf1Hash.update(C, 0, C.length); - mgf1Hash.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, mask, counter * hashBuf.length, mask.length - (counter * hashBuf.length)); - } - - return mask; - } -} diff --git a/src/org/bouncycastle/crypto/encodings/PKCS1Encoding.java b/src/org/bouncycastle/crypto/encodings/PKCS1Encoding.java deleted file mode 100644 index b9faa33..0000000 --- a/src/org/bouncycastle/crypto/encodings/PKCS1Encoding.java +++ /dev/null @@ -1,238 +0,0 @@ -package org.bouncycastle.crypto.encodings; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -import javabc.SecureRandom; - -/** - * this does your basic PKCS 1 v1.5 padding - whether or not you should be using this - * depends on your application - see PKCS1 Version 2 for details. - */ -public class PKCS1Encoding - implements AsymmetricBlockCipher -{ - /** - * some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to - * work with one of these set the system property org.bouncycastle.pkcs1.strict to false. - *

        - * The system property is checked during construction of the encoding object, it is set to - * true by default. - *

        - */ - public static final String STRICT_LENGTH_ENABLED_PROPERTY = "org.bouncycastle.pkcs1.strict"; - - private static final int HEADER_LENGTH = 10; - - private SecureRandom random; - private AsymmetricBlockCipher engine; - private boolean forEncryption; - private boolean forPrivateKey; - private boolean useStrictLength; - - /** - * Basic constructor. - * @param cipher - */ - public PKCS1Encoding( - AsymmetricBlockCipher cipher) - { - this.engine = cipher; - this.useStrictLength = useStrict(); - } - - // - // for J2ME compatibility - // - private boolean useStrict() - { - String strict = System.getProperty(STRICT_LENGTH_ENABLED_PROPERTY); - - return strict == null || strict.equals("true"); - } - - public AsymmetricBlockCipher getUnderlyingCipher() - { - return engine; - } - - public void init( - boolean forEncryption, - CipherParameters param) - { - AsymmetricKeyParameter kParam; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - kParam = (AsymmetricKeyParameter)rParam.getParameters(); - } - else - { - this.random = new SecureRandom(); - kParam = (AsymmetricKeyParameter)param; - } - - engine.init(forEncryption, param); - - this.forPrivateKey = kParam.isPrivate(); - this.forEncryption = forEncryption; - } - - public int getInputBlockSize() - { - int baseBlockSize = engine.getInputBlockSize(); - - if (forEncryption) - { - return baseBlockSize - HEADER_LENGTH; - } - else - { - return baseBlockSize; - } - } - - public int getOutputBlockSize() - { - int baseBlockSize = engine.getOutputBlockSize(); - - if (forEncryption) - { - return baseBlockSize; - } - else - { - return baseBlockSize - HEADER_LENGTH; - } - } - - public byte[] processBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - if (forEncryption) - { - return encodeBlock(in, inOff, inLen); - } - else - { - return decodeBlock(in, inOff, inLen); - } - } - - private byte[] encodeBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - if (inLen > getInputBlockSize()) - { - throw new IllegalArgumentException("input data too large"); - } - - byte[] block = new byte[engine.getInputBlockSize()]; - - if (forPrivateKey) - { - block[0] = 0x01; // type code 1 - - for (int i = 1; i != block.length - inLen - 1; i++) - { - block[i] = (byte)0xFF; - } - } - else - { - random.nextBytes(block); // random fill - - block[0] = 0x02; // type code 2 - - // - // a zero byte marks the end of the padding, so all - // the pad bytes must be non-zero. - // - for (int i = 1; i != block.length - inLen - 1; i++) - { - while (block[i] == 0) - { - block[i] = (byte)random.nextInt(); - } - } - } - - block[block.length - inLen - 1] = 0x00; // mark the end of the padding - System.arraycopy(in, inOff, block, block.length - inLen, inLen); - - return engine.processBlock(block, 0, block.length); - } - - /** - * @exception InvalidCipherTextException if the decrypted block is not in PKCS1 format. - */ - private byte[] decodeBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - byte[] block = engine.processBlock(in, inOff, inLen); - - if (block.length < getOutputBlockSize()) - { - throw new InvalidCipherTextException("block truncated"); - } - - byte type = block[0]; - - if (type != 1 && type != 2) - { - throw new InvalidCipherTextException("unknown block type"); - } - - if (useStrictLength && block.length != engine.getOutputBlockSize()) - { - throw new InvalidCipherTextException("block incorrect size"); - } - - // - // find and extract the message block. - // - int start; - - for (start = 1; start != block.length; start++) - { - byte pad = block[start]; - - if (pad == 0) - { - break; - } - if (type == 1 && pad != (byte)0xff) - { - throw new InvalidCipherTextException("block padding incorrect"); - } - } - - start++; // data should start at the next byte - - if (start > block.length || start < HEADER_LENGTH) - { - throw new InvalidCipherTextException("no data in block"); - } - - byte[] result = new byte[block.length - start]; - - System.arraycopy(block, start, result, 0, result.length); - - return result; - } -} diff --git a/src/org/bouncycastle/crypto/encodings/package.html b/src/org/bouncycastle/crypto/encodings/package.html deleted file mode 100644 index fc56f63..0000000 --- a/src/org/bouncycastle/crypto/encodings/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Block encodings for asymmetric ciphers. - - diff --git a/src/org/bouncycastle/crypto/engines/AESEngine.java b/src/org/bouncycastle/crypto/engines/AESEngine.java deleted file mode 100644 index d9bb482..0000000 --- a/src/org/bouncycastle/crypto/engines/AESEngine.java +++ /dev/null @@ -1,547 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * an implementation of the AES (Rijndael), from FIPS-197. - *

        - * For further details see: http://csrc.nist.gov/encryption/aes/. - * - * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at - * http://fp.gladman.plus.com/cryptography_technology/rijndael/ - * - * There are three levels of tradeoff of speed vs memory - * Because java has no preprocessor, they are written as three separate classes from which to choose - * - * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption - * and 4 for decryption. - * - * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, - * adding 12 rotate operations per round to compute the values contained in the other tables from - * the contents of the first. - * - * The slowest version uses no static tables at all and computes the values in each round. - *

        - * This file contains the middle performance version with 2Kbytes of static tables for round precomputation. - * - */ -public class AESEngine - implements BlockCipher -{ - // The S box - private static final byte[] S = { - (byte)99, (byte)124, (byte)119, (byte)123, (byte)242, (byte)107, (byte)111, (byte)197, - (byte)48, (byte)1, (byte)103, (byte)43, (byte)254, (byte)215, (byte)171, (byte)118, - (byte)202, (byte)130, (byte)201, (byte)125, (byte)250, (byte)89, (byte)71, (byte)240, - (byte)173, (byte)212, (byte)162, (byte)175, (byte)156, (byte)164, (byte)114, (byte)192, - (byte)183, (byte)253, (byte)147, (byte)38, (byte)54, (byte)63, (byte)247, (byte)204, - (byte)52, (byte)165, (byte)229, (byte)241, (byte)113, (byte)216, (byte)49, (byte)21, - (byte)4, (byte)199, (byte)35, (byte)195, (byte)24, (byte)150, (byte)5, (byte)154, - (byte)7, (byte)18, (byte)128, (byte)226, (byte)235, (byte)39, (byte)178, (byte)117, - (byte)9, (byte)131, (byte)44, (byte)26, (byte)27, (byte)110, (byte)90, (byte)160, - (byte)82, (byte)59, (byte)214, (byte)179, (byte)41, (byte)227, (byte)47, (byte)132, - (byte)83, (byte)209, (byte)0, (byte)237, (byte)32, (byte)252, (byte)177, (byte)91, - (byte)106, (byte)203, (byte)190, (byte)57, (byte)74, (byte)76, (byte)88, (byte)207, - (byte)208, (byte)239, (byte)170, (byte)251, (byte)67, (byte)77, (byte)51, (byte)133, - (byte)69, (byte)249, (byte)2, (byte)127, (byte)80, (byte)60, (byte)159, (byte)168, - (byte)81, (byte)163, (byte)64, (byte)143, (byte)146, (byte)157, (byte)56, (byte)245, - (byte)188, (byte)182, (byte)218, (byte)33, (byte)16, (byte)255, (byte)243, (byte)210, - (byte)205, (byte)12, (byte)19, (byte)236, (byte)95, (byte)151, (byte)68, (byte)23, - (byte)196, (byte)167, (byte)126, (byte)61, (byte)100, (byte)93, (byte)25, (byte)115, - (byte)96, (byte)129, (byte)79, (byte)220, (byte)34, (byte)42, (byte)144, (byte)136, - (byte)70, (byte)238, (byte)184, (byte)20, (byte)222, (byte)94, (byte)11, (byte)219, - (byte)224, (byte)50, (byte)58, (byte)10, (byte)73, (byte)6, (byte)36, (byte)92, - (byte)194, (byte)211, (byte)172, (byte)98, (byte)145, (byte)149, (byte)228, (byte)121, - (byte)231, (byte)200, (byte)55, (byte)109, (byte)141, (byte)213, (byte)78, (byte)169, - (byte)108, (byte)86, (byte)244, (byte)234, (byte)101, (byte)122, (byte)174, (byte)8, - (byte)186, (byte)120, (byte)37, (byte)46, (byte)28, (byte)166, (byte)180, (byte)198, - (byte)232, (byte)221, (byte)116, (byte)31, (byte)75, (byte)189, (byte)139, (byte)138, - (byte)112, (byte)62, (byte)181, (byte)102, (byte)72, (byte)3, (byte)246, (byte)14, - (byte)97, (byte)53, (byte)87, (byte)185, (byte)134, (byte)193, (byte)29, (byte)158, - (byte)225, (byte)248, (byte)152, (byte)17, (byte)105, (byte)217, (byte)142, (byte)148, - (byte)155, (byte)30, (byte)135, (byte)233, (byte)206, (byte)85, (byte)40, (byte)223, - (byte)140, (byte)161, (byte)137, (byte)13, (byte)191, (byte)230, (byte)66, (byte)104, - (byte)65, (byte)153, (byte)45, (byte)15, (byte)176, (byte)84, (byte)187, (byte)22, - }; - - // The inverse S-box - private static final byte[] Si = { - (byte)82, (byte)9, (byte)106, (byte)213, (byte)48, (byte)54, (byte)165, (byte)56, - (byte)191, (byte)64, (byte)163, (byte)158, (byte)129, (byte)243, (byte)215, (byte)251, - (byte)124, (byte)227, (byte)57, (byte)130, (byte)155, (byte)47, (byte)255, (byte)135, - (byte)52, (byte)142, (byte)67, (byte)68, (byte)196, (byte)222, (byte)233, (byte)203, - (byte)84, (byte)123, (byte)148, (byte)50, (byte)166, (byte)194, (byte)35, (byte)61, - (byte)238, (byte)76, (byte)149, (byte)11, (byte)66, (byte)250, (byte)195, (byte)78, - (byte)8, (byte)46, (byte)161, (byte)102, (byte)40, (byte)217, (byte)36, (byte)178, - (byte)118, (byte)91, (byte)162, (byte)73, (byte)109, (byte)139, (byte)209, (byte)37, - (byte)114, (byte)248, (byte)246, (byte)100, (byte)134, (byte)104, (byte)152, (byte)22, - (byte)212, (byte)164, (byte)92, (byte)204, (byte)93, (byte)101, (byte)182, (byte)146, - (byte)108, (byte)112, (byte)72, (byte)80, (byte)253, (byte)237, (byte)185, (byte)218, - (byte)94, (byte)21, (byte)70, (byte)87, (byte)167, (byte)141, (byte)157, (byte)132, - (byte)144, (byte)216, (byte)171, (byte)0, (byte)140, (byte)188, (byte)211, (byte)10, - (byte)247, (byte)228, (byte)88, (byte)5, (byte)184, (byte)179, (byte)69, (byte)6, - (byte)208, (byte)44, (byte)30, (byte)143, (byte)202, (byte)63, (byte)15, (byte)2, - (byte)193, (byte)175, (byte)189, (byte)3, (byte)1, (byte)19, (byte)138, (byte)107, - (byte)58, (byte)145, (byte)17, (byte)65, (byte)79, (byte)103, (byte)220, (byte)234, - (byte)151, (byte)242, (byte)207, (byte)206, (byte)240, (byte)180, (byte)230, (byte)115, - (byte)150, (byte)172, (byte)116, (byte)34, (byte)231, (byte)173, (byte)53, (byte)133, - (byte)226, (byte)249, (byte)55, (byte)232, (byte)28, (byte)117, (byte)223, (byte)110, - (byte)71, (byte)241, (byte)26, (byte)113, (byte)29, (byte)41, (byte)197, (byte)137, - (byte)111, (byte)183, (byte)98, (byte)14, (byte)170, (byte)24, (byte)190, (byte)27, - (byte)252, (byte)86, (byte)62, (byte)75, (byte)198, (byte)210, (byte)121, (byte)32, - (byte)154, (byte)219, (byte)192, (byte)254, (byte)120, (byte)205, (byte)90, (byte)244, - (byte)31, (byte)221, (byte)168, (byte)51, (byte)136, (byte)7, (byte)199, (byte)49, - (byte)177, (byte)18, (byte)16, (byte)89, (byte)39, (byte)128, (byte)236, (byte)95, - (byte)96, (byte)81, (byte)127, (byte)169, (byte)25, (byte)181, (byte)74, (byte)13, - (byte)45, (byte)229, (byte)122, (byte)159, (byte)147, (byte)201, (byte)156, (byte)239, - (byte)160, (byte)224, (byte)59, (byte)77, (byte)174, (byte)42, (byte)245, (byte)176, - (byte)200, (byte)235, (byte)187, (byte)60, (byte)131, (byte)83, (byte)153, (byte)97, - (byte)23, (byte)43, (byte)4, (byte)126, (byte)186, (byte)119, (byte)214, (byte)38, - (byte)225, (byte)105, (byte)20, (byte)99, (byte)85, (byte)33, (byte)12, (byte)125, - }; - - // vector used in calculating key schedule (powers of x in GF(256)) - private static final int[] rcon = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, - 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; - - // precomputation tables of calculations for rounds - private static final int[] T0 = - { - 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, - 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, - 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, - 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, - 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, 0xecadad41, - 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, - 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, - 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, - 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, - 0x73d8d8ab, 0x53313162, 0x3f15152a, 0x0c040408, 0x52c7c795, - 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, - 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, - 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, - 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, - 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, - 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, - 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, - 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, - 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, - 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, - 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, - 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, - 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, - 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, - 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, - 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, - 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, - 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, - 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, - 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, - 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, - 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, - 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, - 0x0a06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, - 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, - 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, - 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, - 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, - 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, - 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, - 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, - 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, - 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, - 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, - 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, - 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, - 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, - 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, - 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, - 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, - 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, - 0x3a16162c}; - -private static final int[] Tinv0 = - { - 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, - 0xf1459d1f, 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, - 0x9176cc88, 0x254c02f5, 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, - 0x8fa362b5, 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, - 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, 0xe75f8f03, - 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, - 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, - 0xdd71b927, 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, - 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, 0xe07764b1, - 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, 0x58684870, 0x19fd458f, - 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, 0x578f1fe3, - 0x2aab5566, 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, - 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, - 0x92b479a7, 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, - 0x1f6234d1, 0x8afea6c4, 0x9d532e34, 0xa055f3a2, 0x32e18a05, - 0x75ebf6a4, 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, - 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, 0xb58d5491, - 0x055dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, - 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, - 0xdbeec879, 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, - 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, 0xfbff0efd, - 0x5638850f, 0x1ed5ae3d, 0x27392d36, 0x64d90f0a, 0x21a65c68, - 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0x0fe75793, 0xd296eeb4, - 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, - 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0x0b0d090e, - 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, - 0xbbdd99ee, 0xfd607fa3, 0x9f2601f7, 0xbcf5725c, 0xc53b6644, - 0x347efb5b, 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, - 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, 0x7d244a85, - 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, - 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, - 0x2264e947, 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, - 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, - 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, 0xe49d3a2c, 0x0d927850, - 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, 0x5ef7392e, - 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, - 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x097826cd, - 0xf418596e, 0x01b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, - 0x08cfbc21, 0xe6e815ef, 0xd99be7ba, 0xce366f4a, 0xd4099fea, - 0xd67cb029, 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, - 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, 0x4a9804f1, - 0xf7daec41, 0x0e50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, - 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, - 0x7f516546, 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, - 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, 0x8c61d79a, - 0x7a0ca137, 0x8e14f859, 0x893c13eb, 0xee27a9ce, 0x35c961b7, - 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, 0x79ce1418, - 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, - 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, - 0x0c25e2bc, 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, - 0x9ce4b4d8, 0x90c15664, 0x6184cb7b, 0x70b632d5, 0x745c6c48, - 0x4257b8d0}; - - private int shift( - int r, - int shift) - { - return (r >>> shift) | (r << -shift); - } - - /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ - - private static final int m1 = 0x80808080; - private static final int m2 = 0x7f7f7f7f; - private static final int m3 = 0x0000001b; - - private int FFmulX(int x) - { - return (((x & m2) << 1) ^ (((x & m1) >>> 7) * m3)); - } - - /* - The following defines provide alternative definitions of FFmulX that might - give improved performance if a fast 32-bit multiply is not available. - - private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } - private static final int m4 = 0x1b1b1b1b; - private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } - - */ - - private int inv_mcol(int x) - { - int f2 = FFmulX(x); - int f4 = FFmulX(f2); - int f8 = FFmulX(f4); - int f9 = x ^ f8; - - return f2 ^ f4 ^ f8 ^ shift(f2 ^ f9, 8) ^ shift(f4 ^ f9, 16) ^ shift(f9, 24); - } - - private int subWord(int x) - { - return (S[x&255]&255 | ((S[(x>>8)&255]&255)<<8) | ((S[(x>>16)&255]&255)<<16) | S[(x>>24)&255]<<24); - } - - /** - * Calculate the necessary round keys - * The number of calculations depends on key size and block size - * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits - * This code is written assuming those are the only possible values - */ - private int[][] generateWorkingKey( - byte[] key, - boolean forEncryption) - { - int KC = key.length / 4; // key length in words - int t; - - if (((KC != 4) && (KC != 6) && (KC != 8)) || ((KC * 4) != key.length)) - { - throw new IllegalArgumentException("Key length not 128/192/256 bits."); - } - - ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes - int[][] W = new int[ROUNDS+1][4]; // 4 words in a block - - // - // copy the key into the round key array - // - - t = 0; - int i = 0; - while (i < key.length) - { - W[t >> 2][t & 3] = (key[i]&0xff) | ((key[i+1]&0xff) << 8) | ((key[i+2]&0xff) << 16) | (key[i+3] << 24); - i+=4; - t++; - } - - // - // while not enough round key material calculated - // calculate new values - // - int k = (ROUNDS + 1) << 2; - for (i = KC; (i < k); i++) - { - int temp = W[(i-1)>>2][(i-1)&3]; - if ((i % KC) == 0) - { - temp = subWord(shift(temp, 8)) ^ rcon[(i / KC)-1]; - } - else if ((KC > 6) && ((i % KC) == 4)) - { - temp = subWord(temp); - } - - W[i>>2][i&3] = W[(i - KC)>>2][(i-KC)&3] ^ temp; - } - - if (!forEncryption) - { - for (int j = 1; j < ROUNDS; j++) - { - for (i = 0; i < 4; i++) - { - W[j][i] = inv_mcol(W[j][i]); - } - } - } - - return W; - } - - private int ROUNDS; - private int[][] WorkingKey = null; - private int C0, C1, C2, C3; - private boolean forEncryption; - - private static final int BLOCK_SIZE = 16; - - /** - * default constructor - 128 bit block size. - */ - public AESEngine() - { - } - - /** - * initialise an AES cipher. - * - * @param forEncryption whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - { - if (params instanceof KeyParameter) - { - WorkingKey = generateWorkingKey(((KeyParameter)params).getKey(), forEncryption); - this.forEncryption = forEncryption; - return; - } - - throw new IllegalArgumentException("invalid parameter passed to AES init - " + params.getClass().getName()); - } - - public String getAlgorithmName() - { - return "AES"; - } - - public int getBlockSize() - { - return BLOCK_SIZE; - } - - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - { - if (WorkingKey == null) - { - throw new IllegalStateException("AES engine not initialised"); - } - - if ((inOff + (32 / 2)) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + (32 / 2)) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (forEncryption) - { - unpackBlock(in, inOff); - encryptBlock(WorkingKey); - packBlock(out, outOff); - } - else - { - unpackBlock(in, inOff); - decryptBlock(WorkingKey); - packBlock(out, outOff); - } - - return BLOCK_SIZE; - } - - public void reset() - { - } - - private void unpackBlock( - byte[] bytes, - int off) - { - int index = off; - - C0 = (bytes[index++] & 0xff); - C0 |= (bytes[index++] & 0xff) << 8; - C0 |= (bytes[index++] & 0xff) << 16; - C0 |= bytes[index++] << 24; - - C1 = (bytes[index++] & 0xff); - C1 |= (bytes[index++] & 0xff) << 8; - C1 |= (bytes[index++] & 0xff) << 16; - C1 |= bytes[index++] << 24; - - C2 = (bytes[index++] & 0xff); - C2 |= (bytes[index++] & 0xff) << 8; - C2 |= (bytes[index++] & 0xff) << 16; - C2 |= bytes[index++] << 24; - - C3 = (bytes[index++] & 0xff); - C3 |= (bytes[index++] & 0xff) << 8; - C3 |= (bytes[index++] & 0xff) << 16; - C3 |= bytes[index++] << 24; - } - - private void packBlock( - byte[] bytes, - int off) - { - int index = off; - - bytes[index++] = (byte)C0; - bytes[index++] = (byte)(C0 >> 8); - bytes[index++] = (byte)(C0 >> 16); - bytes[index++] = (byte)(C0 >> 24); - - bytes[index++] = (byte)C1; - bytes[index++] = (byte)(C1 >> 8); - bytes[index++] = (byte)(C1 >> 16); - bytes[index++] = (byte)(C1 >> 24); - - bytes[index++] = (byte)C2; - bytes[index++] = (byte)(C2 >> 8); - bytes[index++] = (byte)(C2 >> 16); - bytes[index++] = (byte)(C2 >> 24); - - bytes[index++] = (byte)C3; - bytes[index++] = (byte)(C3 >> 8); - bytes[index++] = (byte)(C3 >> 16); - bytes[index++] = (byte)(C3 >> 24); - } - - - private void encryptBlock(int[][] KW) - { - int r, r0, r1, r2, r3; - - C0 ^= KW[0][0]; - C1 ^= KW[0][1]; - C2 ^= KW[0][2]; - C3 ^= KW[0][3]; - - r = 1; - - while (r < ROUNDS - 1) - { - r0 = T0[C0&255] ^ shift(T0[(C1>>8)&255], 24) ^ shift(T0[(C2>>16)&255],16) ^ shift(T0[(C3>>24)&255],8) ^ KW[r][0]; - r1 = T0[C1&255] ^ shift(T0[(C2>>8)&255], 24) ^ shift(T0[(C3>>16)&255], 16) ^ shift(T0[(C0>>24)&255], 8) ^ KW[r][1]; - r2 = T0[C2&255] ^ shift(T0[(C3>>8)&255], 24) ^ shift(T0[(C0>>16)&255], 16) ^ shift(T0[(C1>>24)&255], 8) ^ KW[r][2]; - r3 = T0[C3&255] ^ shift(T0[(C0>>8)&255], 24) ^ shift(T0[(C1>>16)&255], 16) ^ shift(T0[(C2>>24)&255], 8) ^ KW[r++][3]; - C0 = T0[r0&255] ^ shift(T0[(r1>>8)&255], 24) ^ shift(T0[(r2>>16)&255], 16) ^ shift(T0[(r3>>24)&255], 8) ^ KW[r][0]; - C1 = T0[r1&255] ^ shift(T0[(r2>>8)&255], 24) ^ shift(T0[(r3>>16)&255], 16) ^ shift(T0[(r0>>24)&255], 8) ^ KW[r][1]; - C2 = T0[r2&255] ^ shift(T0[(r3>>8)&255], 24) ^ shift(T0[(r0>>16)&255], 16) ^ shift(T0[(r1>>24)&255], 8) ^ KW[r][2]; - C3 = T0[r3&255] ^ shift(T0[(r0>>8)&255], 24) ^ shift(T0[(r1>>16)&255], 16) ^ shift(T0[(r2>>24)&255], 8) ^ KW[r++][3]; - } - - r0 = T0[C0&255] ^ shift(T0[(C1>>8)&255], 24) ^ shift(T0[(C2>>16)&255], 16) ^ shift(T0[(C3>>24)&255], 8) ^ KW[r][0]; - r1 = T0[C1&255] ^ shift(T0[(C2>>8)&255], 24) ^ shift(T0[(C3>>16)&255], 16) ^ shift(T0[(C0>>24)&255], 8) ^ KW[r][1]; - r2 = T0[C2&255] ^ shift(T0[(C3>>8)&255], 24) ^ shift(T0[(C0>>16)&255], 16) ^ shift(T0[(C1>>24)&255], 8) ^ KW[r][2]; - r3 = T0[C3&255] ^ shift(T0[(C0>>8)&255], 24) ^ shift(T0[(C1>>16)&255], 16) ^ shift(T0[(C2>>24)&255], 8) ^ KW[r++][3]; - - // the final round's table is a simple function of S so we don't use a whole other four tables for it - - C0 = (S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24) ^ KW[r][0]; - C1 = (S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24) ^ KW[r][1]; - C2 = (S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24) ^ KW[r][2]; - C3 = (S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24) ^ KW[r][3]; - - } - - private void decryptBlock(int[][] KW) - { - int r, r0, r1, r2, r3; - - C0 ^= KW[ROUNDS][0]; - C1 ^= KW[ROUNDS][1]; - C2 ^= KW[ROUNDS][2]; - C3 ^= KW[ROUNDS][3]; - - r = ROUNDS-1; - - while (r>1) - { - r0 = Tinv0[C0&255] ^ shift(Tinv0[(C3>>8)&255], 24) ^ shift(Tinv0[(C2>>16)&255], 16) ^ shift(Tinv0[(C1>>24)&255], 8) ^ KW[r][0]; - r1 = Tinv0[C1&255] ^ shift(Tinv0[(C0>>8)&255], 24) ^ shift(Tinv0[(C3>>16)&255], 16) ^ shift(Tinv0[(C2>>24)&255], 8) ^ KW[r][1]; - r2 = Tinv0[C2&255] ^ shift(Tinv0[(C1>>8)&255], 24) ^ shift(Tinv0[(C0>>16)&255], 16) ^ shift(Tinv0[(C3>>24)&255], 8) ^ KW[r][2]; - r3 = Tinv0[C3&255] ^ shift(Tinv0[(C2>>8)&255], 24) ^ shift(Tinv0[(C1>>16)&255], 16) ^ shift(Tinv0[(C0>>24)&255], 8) ^ KW[r--][3]; - C0 = Tinv0[r0&255] ^ shift(Tinv0[(r3>>8)&255], 24) ^ shift(Tinv0[(r2>>16)&255], 16) ^ shift(Tinv0[(r1>>24)&255], 8) ^ KW[r][0]; - C1 = Tinv0[r1&255] ^ shift(Tinv0[(r0>>8)&255], 24) ^ shift(Tinv0[(r3>>16)&255], 16) ^ shift(Tinv0[(r2>>24)&255], 8) ^ KW[r][1]; - C2 = Tinv0[r2&255] ^ shift(Tinv0[(r1>>8)&255], 24) ^ shift(Tinv0[(r0>>16)&255], 16) ^ shift(Tinv0[(r3>>24)&255], 8) ^ KW[r][2]; - C3 = Tinv0[r3&255] ^ shift(Tinv0[(r2>>8)&255], 24) ^ shift(Tinv0[(r1>>16)&255], 16) ^ shift(Tinv0[(r0>>24)&255], 8) ^ KW[r--][3]; - } - - r0 = Tinv0[C0&255] ^ shift(Tinv0[(C3>>8)&255], 24) ^ shift(Tinv0[(C2>>16)&255], 16) ^ shift(Tinv0[(C1>>24)&255], 8) ^ KW[r][0]; - r1 = Tinv0[C1&255] ^ shift(Tinv0[(C0>>8)&255], 24) ^ shift(Tinv0[(C3>>16)&255], 16) ^ shift(Tinv0[(C2>>24)&255], 8) ^ KW[r][1]; - r2 = Tinv0[C2&255] ^ shift(Tinv0[(C1>>8)&255], 24) ^ shift(Tinv0[(C0>>16)&255], 16) ^ shift(Tinv0[(C3>>24)&255], 8) ^ KW[r][2]; - r3 = Tinv0[C3&255] ^ shift(Tinv0[(C2>>8)&255], 24) ^ shift(Tinv0[(C1>>16)&255], 16) ^ shift(Tinv0[(C0>>24)&255], 8) ^ KW[r][3]; - - // the final round's table is a simple function of Si so we don't use a whole other four tables for it - - C0 = (Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24) ^ KW[0][0]; - C1 = (Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24) ^ KW[0][1]; - C2 = (Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24) ^ KW[0][2]; - C3 = (Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24) ^ KW[0][3]; - } -} diff --git a/src/org/bouncycastle/crypto/engines/AESFastEngine.java b/src/org/bouncycastle/crypto/engines/AESFastEngine.java deleted file mode 100644 index 2374be1..0000000 --- a/src/org/bouncycastle/crypto/engines/AESFastEngine.java +++ /dev/null @@ -1,876 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * an implementation of the AES (Rijndael), from FIPS-197. - *

        - * For further details see: http://csrc.nist.gov/encryption/aes/. - * - * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at - * http://fp.gladman.plus.com/cryptography_technology/rijndael/ - * - * There are three levels of tradeoff of speed vs memory - * Because java has no preprocessor, they are written as three separate classes from which to choose - * - * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption - * and 4 for decryption. - * - * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, - * adding 12 rotate operations per round to compute the values contained in the other tables from - * the contents of the first - * - * The slowest version uses no static tables at all and computes the values in each round - *

        - * This file contains the fast version with 8Kbytes of static tables for round precomputation - * - */ -public class AESFastEngine - implements BlockCipher -{ - // The S box - private static final byte[] S = { - (byte)99, (byte)124, (byte)119, (byte)123, (byte)242, (byte)107, (byte)111, (byte)197, - (byte)48, (byte)1, (byte)103, (byte)43, (byte)254, (byte)215, (byte)171, (byte)118, - (byte)202, (byte)130, (byte)201, (byte)125, (byte)250, (byte)89, (byte)71, (byte)240, - (byte)173, (byte)212, (byte)162, (byte)175, (byte)156, (byte)164, (byte)114, (byte)192, - (byte)183, (byte)253, (byte)147, (byte)38, (byte)54, (byte)63, (byte)247, (byte)204, - (byte)52, (byte)165, (byte)229, (byte)241, (byte)113, (byte)216, (byte)49, (byte)21, - (byte)4, (byte)199, (byte)35, (byte)195, (byte)24, (byte)150, (byte)5, (byte)154, - (byte)7, (byte)18, (byte)128, (byte)226, (byte)235, (byte)39, (byte)178, (byte)117, - (byte)9, (byte)131, (byte)44, (byte)26, (byte)27, (byte)110, (byte)90, (byte)160, - (byte)82, (byte)59, (byte)214, (byte)179, (byte)41, (byte)227, (byte)47, (byte)132, - (byte)83, (byte)209, (byte)0, (byte)237, (byte)32, (byte)252, (byte)177, (byte)91, - (byte)106, (byte)203, (byte)190, (byte)57, (byte)74, (byte)76, (byte)88, (byte)207, - (byte)208, (byte)239, (byte)170, (byte)251, (byte)67, (byte)77, (byte)51, (byte)133, - (byte)69, (byte)249, (byte)2, (byte)127, (byte)80, (byte)60, (byte)159, (byte)168, - (byte)81, (byte)163, (byte)64, (byte)143, (byte)146, (byte)157, (byte)56, (byte)245, - (byte)188, (byte)182, (byte)218, (byte)33, (byte)16, (byte)255, (byte)243, (byte)210, - (byte)205, (byte)12, (byte)19, (byte)236, (byte)95, (byte)151, (byte)68, (byte)23, - (byte)196, (byte)167, (byte)126, (byte)61, (byte)100, (byte)93, (byte)25, (byte)115, - (byte)96, (byte)129, (byte)79, (byte)220, (byte)34, (byte)42, (byte)144, (byte)136, - (byte)70, (byte)238, (byte)184, (byte)20, (byte)222, (byte)94, (byte)11, (byte)219, - (byte)224, (byte)50, (byte)58, (byte)10, (byte)73, (byte)6, (byte)36, (byte)92, - (byte)194, (byte)211, (byte)172, (byte)98, (byte)145, (byte)149, (byte)228, (byte)121, - (byte)231, (byte)200, (byte)55, (byte)109, (byte)141, (byte)213, (byte)78, (byte)169, - (byte)108, (byte)86, (byte)244, (byte)234, (byte)101, (byte)122, (byte)174, (byte)8, - (byte)186, (byte)120, (byte)37, (byte)46, (byte)28, (byte)166, (byte)180, (byte)198, - (byte)232, (byte)221, (byte)116, (byte)31, (byte)75, (byte)189, (byte)139, (byte)138, - (byte)112, (byte)62, (byte)181, (byte)102, (byte)72, (byte)3, (byte)246, (byte)14, - (byte)97, (byte)53, (byte)87, (byte)185, (byte)134, (byte)193, (byte)29, (byte)158, - (byte)225, (byte)248, (byte)152, (byte)17, (byte)105, (byte)217, (byte)142, (byte)148, - (byte)155, (byte)30, (byte)135, (byte)233, (byte)206, (byte)85, (byte)40, (byte)223, - (byte)140, (byte)161, (byte)137, (byte)13, (byte)191, (byte)230, (byte)66, (byte)104, - (byte)65, (byte)153, (byte)45, (byte)15, (byte)176, (byte)84, (byte)187, (byte)22, - }; - - // The inverse S-box - private static final byte[] Si = { - (byte)82, (byte)9, (byte)106, (byte)213, (byte)48, (byte)54, (byte)165, (byte)56, - (byte)191, (byte)64, (byte)163, (byte)158, (byte)129, (byte)243, (byte)215, (byte)251, - (byte)124, (byte)227, (byte)57, (byte)130, (byte)155, (byte)47, (byte)255, (byte)135, - (byte)52, (byte)142, (byte)67, (byte)68, (byte)196, (byte)222, (byte)233, (byte)203, - (byte)84, (byte)123, (byte)148, (byte)50, (byte)166, (byte)194, (byte)35, (byte)61, - (byte)238, (byte)76, (byte)149, (byte)11, (byte)66, (byte)250, (byte)195, (byte)78, - (byte)8, (byte)46, (byte)161, (byte)102, (byte)40, (byte)217, (byte)36, (byte)178, - (byte)118, (byte)91, (byte)162, (byte)73, (byte)109, (byte)139, (byte)209, (byte)37, - (byte)114, (byte)248, (byte)246, (byte)100, (byte)134, (byte)104, (byte)152, (byte)22, - (byte)212, (byte)164, (byte)92, (byte)204, (byte)93, (byte)101, (byte)182, (byte)146, - (byte)108, (byte)112, (byte)72, (byte)80, (byte)253, (byte)237, (byte)185, (byte)218, - (byte)94, (byte)21, (byte)70, (byte)87, (byte)167, (byte)141, (byte)157, (byte)132, - (byte)144, (byte)216, (byte)171, (byte)0, (byte)140, (byte)188, (byte)211, (byte)10, - (byte)247, (byte)228, (byte)88, (byte)5, (byte)184, (byte)179, (byte)69, (byte)6, - (byte)208, (byte)44, (byte)30, (byte)143, (byte)202, (byte)63, (byte)15, (byte)2, - (byte)193, (byte)175, (byte)189, (byte)3, (byte)1, (byte)19, (byte)138, (byte)107, - (byte)58, (byte)145, (byte)17, (byte)65, (byte)79, (byte)103, (byte)220, (byte)234, - (byte)151, (byte)242, (byte)207, (byte)206, (byte)240, (byte)180, (byte)230, (byte)115, - (byte)150, (byte)172, (byte)116, (byte)34, (byte)231, (byte)173, (byte)53, (byte)133, - (byte)226, (byte)249, (byte)55, (byte)232, (byte)28, (byte)117, (byte)223, (byte)110, - (byte)71, (byte)241, (byte)26, (byte)113, (byte)29, (byte)41, (byte)197, (byte)137, - (byte)111, (byte)183, (byte)98, (byte)14, (byte)170, (byte)24, (byte)190, (byte)27, - (byte)252, (byte)86, (byte)62, (byte)75, (byte)198, (byte)210, (byte)121, (byte)32, - (byte)154, (byte)219, (byte)192, (byte)254, (byte)120, (byte)205, (byte)90, (byte)244, - (byte)31, (byte)221, (byte)168, (byte)51, (byte)136, (byte)7, (byte)199, (byte)49, - (byte)177, (byte)18, (byte)16, (byte)89, (byte)39, (byte)128, (byte)236, (byte)95, - (byte)96, (byte)81, (byte)127, (byte)169, (byte)25, (byte)181, (byte)74, (byte)13, - (byte)45, (byte)229, (byte)122, (byte)159, (byte)147, (byte)201, (byte)156, (byte)239, - (byte)160, (byte)224, (byte)59, (byte)77, (byte)174, (byte)42, (byte)245, (byte)176, - (byte)200, (byte)235, (byte)187, (byte)60, (byte)131, (byte)83, (byte)153, (byte)97, - (byte)23, (byte)43, (byte)4, (byte)126, (byte)186, (byte)119, (byte)214, (byte)38, - (byte)225, (byte)105, (byte)20, (byte)99, (byte)85, (byte)33, (byte)12, (byte)125, - }; - - // vector used in calculating key schedule (powers of x in GF(256)) - private static final int[] rcon = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, - 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; - - // precomputation tables of calculations for rounds - private static final int[] T0 = - { - 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, - 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, - 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, - 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, - 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, 0xecadad41, - 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, - 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, - 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, - 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, - 0x73d8d8ab, 0x53313162, 0x3f15152a, 0x0c040408, 0x52c7c795, - 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, - 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, - 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, - 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, - 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, - 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, - 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, - 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, - 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, - 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, - 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, - 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, - 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, - 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, - 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, - 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, - 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, - 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, - 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, - 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, - 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, - 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, - 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, - 0x0a06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, - 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, - 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, - 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, - 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, - 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, - 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, - 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, - 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, - 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, - 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, - 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, - 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, - 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, - 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, - 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, - 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, - 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, - 0x3a16162c}; - - private static final int[] T1 = - { - 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d, 0xf2f2ff0d, - 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154, 0x30306050, 0x01010203, - 0x6767cea9, 0x2b2b567d, 0xfefee719, 0xd7d7b562, 0xabab4de6, - 0x7676ec9a, 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87, - 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b, 0xadad41ec, - 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea, 0x9c9c23bf, 0xa4a453f7, - 0x7272e496, 0xc0c09b5b, 0xb7b775c2, 0xfdfde11c, 0x93933dae, - 0x26264c6a, 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f, - 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908, 0x7171e293, - 0xd8d8ab73, 0x31316253, 0x15152a3f, 0x0404080c, 0xc7c79552, - 0x23234665, 0xc3c39d5e, 0x18183028, 0x969637a1, 0x05050a0f, - 0x9a9a2fb5, 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d, - 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f, 0x0909121b, - 0x83831d9e, 0x2c2c5874, 0x1a1a342e, 0x1b1b362d, 0x6e6edcb2, - 0x5a5ab4ee, 0xa0a05bfb, 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, - 0xb3b37dce, 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397, - 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c, 0x20204060, - 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed, 0x6a6ad4be, 0xcbcb8d46, - 0xbebe67d9, 0x3939724b, 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, - 0xcfcf854a, 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16, - 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194, 0x45458acf, - 0xf9f9e910, 0x02020406, 0x7f7ffe81, 0x5050a0f0, 0x3c3c7844, - 0x9f9f25ba, 0xa8a84be3, 0x5151a2f3, 0xa3a35dfe, 0x404080c0, - 0x8f8f058a, 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104, - 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263, 0x10102030, - 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d, 0xcdcd814c, 0x0c0c1814, - 0x13132635, 0xececc32f, 0x5f5fbee1, 0x979735a2, 0x444488cc, - 0x17172e39, 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47, - 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695, 0x6060c0a0, - 0x81811998, 0x4f4f9ed1, 0xdcdca37f, 0x22224466, 0x2a2a547e, - 0x90903bab, 0x88880b83, 0x46468cca, 0xeeeec729, 0xb8b86bd3, - 0x1414283c, 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76, - 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e, 0x494992db, - 0x06060c0a, 0x2424486c, 0x5c5cb8e4, 0xc2c29f5d, 0xd3d3bd6e, - 0xacac43ef, 0x6262c4a6, 0x919139a8, 0x959531a4, 0xe4e4d337, - 0x7979f28b, 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7, - 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0, 0x6c6cd8b4, - 0x5656acfa, 0xf4f4f307, 0xeaeacf25, 0x6565caaf, 0x7a7af48e, - 0xaeae47e9, 0x08081018, 0xbaba6fd5, 0x7878f088, 0x25254a6f, - 0x2e2e5c72, 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751, - 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21, 0x4b4b96dd, - 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85, 0x7070e090, 0x3e3e7c42, - 0xb5b571c4, 0x6666ccaa, 0x484890d8, 0x03030605, 0xf6f6f701, - 0x0e0e1c12, 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0, - 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9, 0xe1e1d938, - 0xf8f8eb13, 0x98982bb3, 0x11112233, 0x6969d2bb, 0xd9d9a970, - 0x8e8e0789, 0x949433a7, 0x9b9b2db6, 0x1e1e3c22, 0x87871592, - 0xe9e9c920, 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a, - 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17, 0xbfbf65da, - 0xe6e6d731, 0x424284c6, 0x6868d0b8, 0x414182c3, 0x999929b0, - 0x2d2d5a77, 0x0f0f1e11, 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, - 0x16162c3a}; - - private static final int[] T2 = - { - 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b, 0xf2ff0df2, - 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5, 0x30605030, 0x01020301, - 0x67cea967, 0x2b567d2b, 0xfee719fe, 0xd7b562d7, 0xab4de6ab, - 0x76ec9a76, 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d, - 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0, 0xad41ecad, - 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf, 0x9c23bf9c, 0xa453f7a4, - 0x72e49672, 0xc09b5bc0, 0xb775c2b7, 0xfde11cfd, 0x933dae93, - 0x264c6a26, 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc, - 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1, 0x71e29371, - 0xd8ab73d8, 0x31625331, 0x152a3f15, 0x04080c04, 0xc79552c7, - 0x23466523, 0xc39d5ec3, 0x18302818, 0x9637a196, 0x050a0f05, - 0x9a2fb59a, 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2, - 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75, 0x09121b09, - 0x831d9e83, 0x2c58742c, 0x1a342e1a, 0x1b362d1b, 0x6edcb26e, - 0x5ab4ee5a, 0xa05bfba0, 0x52a4f652, 0x3b764d3b, 0xd6b761d6, - 0xb37dceb3, 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784, - 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced, 0x20406020, - 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b, 0x6ad4be6a, 0xcb8d46cb, - 0xbe67d9be, 0x39724b39, 0x4a94de4a, 0x4c98d44c, 0x58b0e858, - 0xcf854acf, 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb, - 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485, 0x458acf45, - 0xf9e910f9, 0x02040602, 0x7ffe817f, 0x50a0f050, 0x3c78443c, - 0x9f25ba9f, 0xa84be3a8, 0x51a2f351, 0xa35dfea3, 0x4080c040, - 0x8f058a8f, 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5, - 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321, 0x10203010, - 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2, 0xcd814ccd, 0x0c18140c, - 0x13263513, 0xecc32fec, 0x5fbee15f, 0x9735a297, 0x4488cc44, - 0x172e3917, 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d, - 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573, 0x60c0a060, - 0x81199881, 0x4f9ed14f, 0xdca37fdc, 0x22446622, 0x2a547e2a, - 0x903bab90, 0x880b8388, 0x468cca46, 0xeec729ee, 0xb86bd3b8, - 0x14283c14, 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db, - 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a, 0x4992db49, - 0x060c0a06, 0x24486c24, 0x5cb8e45c, 0xc29f5dc2, 0xd3bd6ed3, - 0xac43efac, 0x62c4a662, 0x9139a891, 0x9531a495, 0xe4d337e4, - 0x79f28b79, 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d, - 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9, 0x6cd8b46c, - 0x56acfa56, 0xf4f307f4, 0xeacf25ea, 0x65caaf65, 0x7af48e7a, - 0xae47e9ae, 0x08101808, 0xba6fd5ba, 0x78f08878, 0x254a6f25, - 0x2e5c722e, 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6, - 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f, 0x4b96dd4b, - 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a, 0x70e09070, 0x3e7c423e, - 0xb571c4b5, 0x66ccaa66, 0x4890d848, 0x03060503, 0xf6f701f6, - 0x0e1c120e, 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9, - 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e, 0xe1d938e1, - 0xf8eb13f8, 0x982bb398, 0x11223311, 0x69d2bb69, 0xd9a970d9, - 0x8e07898e, 0x9433a794, 0x9b2db69b, 0x1e3c221e, 0x87159287, - 0xe9c920e9, 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf, - 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d, 0xbf65dabf, - 0xe6d731e6, 0x4284c642, 0x68d0b868, 0x4182c341, 0x9929b099, - 0x2d5a772d, 0x0f1e110f, 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, - 0x162c3a16}; - - private static final int[] T3 = - { - 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b, 0xff0df2f2, - 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5, 0x60503030, 0x02030101, - 0xcea96767, 0x567d2b2b, 0xe719fefe, 0xb562d7d7, 0x4de6abab, - 0xec9a7676, 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d, - 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0, 0x41ecadad, - 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf, 0x23bf9c9c, 0x53f7a4a4, - 0xe4967272, 0x9b5bc0c0, 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, - 0x4c6a2626, 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc, - 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1, 0xe2937171, - 0xab73d8d8, 0x62533131, 0x2a3f1515, 0x080c0404, 0x9552c7c7, - 0x46652323, 0x9d5ec3c3, 0x30281818, 0x37a19696, 0x0a0f0505, - 0x2fb59a9a, 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2, - 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575, 0x121b0909, - 0x1d9e8383, 0x58742c2c, 0x342e1a1a, 0x362d1b1b, 0xdcb26e6e, - 0xb4ee5a5a, 0x5bfba0a0, 0xa4f65252, 0x764d3b3b, 0xb761d6d6, - 0x7dceb3b3, 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484, - 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded, 0x40602020, - 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b, 0xd4be6a6a, 0x8d46cbcb, - 0x67d9bebe, 0x724b3939, 0x94de4a4a, 0x98d44c4c, 0xb0e85858, - 0x854acfcf, 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb, - 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585, 0x8acf4545, - 0xe910f9f9, 0x04060202, 0xfe817f7f, 0xa0f05050, 0x78443c3c, - 0x25ba9f9f, 0x4be3a8a8, 0xa2f35151, 0x5dfea3a3, 0x80c04040, - 0x058a8f8f, 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5, - 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121, 0x20301010, - 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2, 0x814ccdcd, 0x18140c0c, - 0x26351313, 0xc32fecec, 0xbee15f5f, 0x35a29797, 0x88cc4444, - 0x2e391717, 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d, - 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373, 0xc0a06060, - 0x19988181, 0x9ed14f4f, 0xa37fdcdc, 0x44662222, 0x547e2a2a, - 0x3bab9090, 0x0b838888, 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, - 0x283c1414, 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb, - 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a, 0x92db4949, - 0x0c0a0606, 0x486c2424, 0xb8e45c5c, 0x9f5dc2c2, 0xbd6ed3d3, - 0x43efacac, 0xc4a66262, 0x39a89191, 0x31a49595, 0xd337e4e4, - 0xf28b7979, 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d, - 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9, 0xd8b46c6c, - 0xacfa5656, 0xf307f4f4, 0xcf25eaea, 0xcaaf6565, 0xf48e7a7a, - 0x47e9aeae, 0x10180808, 0x6fd5baba, 0xf0887878, 0x4a6f2525, - 0x5c722e2e, 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6, - 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f, 0x96dd4b4b, - 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a, 0xe0907070, 0x7c423e3e, - 0x71c4b5b5, 0xccaa6666, 0x90d84848, 0x06050303, 0xf701f6f6, - 0x1c120e0e, 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9, - 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e, 0xd938e1e1, - 0xeb13f8f8, 0x2bb39898, 0x22331111, 0xd2bb6969, 0xa970d9d9, - 0x07898e8e, 0x33a79494, 0x2db69b9b, 0x3c221e1e, 0x15928787, - 0xc920e9e9, 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf, - 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d, 0x65dabfbf, - 0xd731e6e6, 0x84c64242, 0xd0b86868, 0x82c34141, 0x29b09999, - 0x5a772d2d, 0x1e110f0f, 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, - 0x2c3a1616}; - - private static final int[] Tinv0 = - { - 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, - 0xf1459d1f, 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, - 0x9176cc88, 0x254c02f5, 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, - 0x8fa362b5, 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, - 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, 0xe75f8f03, - 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, - 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, - 0xdd71b927, 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, - 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, 0xe07764b1, - 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, 0x58684870, 0x19fd458f, - 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, 0x578f1fe3, - 0x2aab5566, 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, - 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, - 0x92b479a7, 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, - 0x1f6234d1, 0x8afea6c4, 0x9d532e34, 0xa055f3a2, 0x32e18a05, - 0x75ebf6a4, 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, - 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, 0xb58d5491, - 0x055dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, - 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, - 0xdbeec879, 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, - 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, 0xfbff0efd, - 0x5638850f, 0x1ed5ae3d, 0x27392d36, 0x64d90f0a, 0x21a65c68, - 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0x0fe75793, 0xd296eeb4, - 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, - 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0x0b0d090e, - 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, - 0xbbdd99ee, 0xfd607fa3, 0x9f2601f7, 0xbcf5725c, 0xc53b6644, - 0x347efb5b, 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, - 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, 0x7d244a85, - 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, - 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, - 0x2264e947, 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, - 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, - 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, 0xe49d3a2c, 0x0d927850, - 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, 0x5ef7392e, - 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, - 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x097826cd, - 0xf418596e, 0x01b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, - 0x08cfbc21, 0xe6e815ef, 0xd99be7ba, 0xce366f4a, 0xd4099fea, - 0xd67cb029, 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, - 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, 0x4a9804f1, - 0xf7daec41, 0x0e50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, - 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, - 0x7f516546, 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, - 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, 0x8c61d79a, - 0x7a0ca137, 0x8e14f859, 0x893c13eb, 0xee27a9ce, 0x35c961b7, - 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, 0x79ce1418, - 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, - 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, - 0x0c25e2bc, 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, - 0x9ce4b4d8, 0x90c15664, 0x6184cb7b, 0x70b632d5, 0x745c6c48, - 0x4257b8d0}; - - private static final int[] Tinv1 = - { - 0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96, 0x6bab3bcb, - 0x459d1ff1, 0x58faacab, 0x03e34b93, 0xfa302055, 0x6d76adf6, - 0x76cc8891, 0x4c02f525, 0xd7e54ffc, 0xcb2ac5d7, 0x44352680, - 0xa362b58f, 0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1, - 0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6, 0x5f8f03e7, - 0x9c921595, 0x7a6dbfeb, 0x595295da, 0x83bed42d, 0x217458d3, - 0x69e04929, 0xc8c98e44, 0x89c2756a, 0x798ef478, 0x3e58996b, - 0x71b927dd, 0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4, - 0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245, 0x7764b1e0, - 0xae6bbb84, 0xa081fe1c, 0x2b08f994, 0x68487058, 0xfd458f19, - 0x6cde9487, 0xf87b52b7, 0xd373ab23, 0x024b72e2, 0x8f1fe357, - 0xab55662a, 0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5, - 0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c, 0x1ccf8a2b, - 0xb479a792, 0xf207f3f0, 0xe2694ea1, 0xf4da65cd, 0xbe0506d5, - 0x6234d11f, 0xfea6c48a, 0x532e349d, 0x55f3a2a0, 0xe18a0532, - 0xebf6a475, 0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51, - 0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46, 0x8d5491b5, - 0x5dc47105, 0xd406046f, 0x155060ff, 0xfb981924, 0xe9bdd697, - 0x434089cc, 0x9ed96777, 0x42e8b0bd, 0x8b890788, 0x5b19e738, - 0xeec879db, 0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000, - 0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e, 0xff0efdfb, - 0x38850f56, 0xd5ae3d1e, 0x392d3627, 0xd90f0a64, 0xa65c6821, - 0x545b9bd1, 0x2e36243a, 0x670a0cb1, 0xe757930f, 0x96eeb4d2, - 0x919b1b9e, 0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16, - 0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d, 0x0d090e0b, - 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8, 0x19f15785, 0x0775af4c, - 0xdd99eebb, 0x607fa3fd, 0x2601f79f, 0xf5725cbc, 0x3b6644c5, - 0x7efb5b34, 0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863, - 0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420, 0x244a857d, - 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d, 0x2f9e1d4b, 0x30b2dcf3, - 0x52860dec, 0xe3c177d0, 0x16b32b6c, 0xb970a999, 0x489411fa, - 0x64e94722, 0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef, - 0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836, 0x81f5a6cf, - 0xde7aa528, 0x8eb7da26, 0xbfad3fa4, 0x9d3a2ce4, 0x9278500d, - 0xcc5f6a9b, 0x467e5462, 0x138df6c2, 0xb8d890e8, 0xf7392e5e, - 0xafc382f5, 0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3, - 0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b, 0x7826cd09, - 0x18596ef4, 0xb79aec01, 0x9a4f83a8, 0x6e95e665, 0xe6ffaa7e, - 0xcfbc2108, 0xe815efe6, 0x9be7bad9, 0x366f4ace, 0x099fead4, - 0x7cb029d6, 0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0, - 0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315, 0x9804f14a, - 0xdaec41f7, 0x50cd7f0e, 0xf691172f, 0xd64d768d, 0xb0ef434d, - 0x4daacc54, 0x0496e4df, 0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, - 0x5165467f, 0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e, - 0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13, 0x61d79a8c, - 0x0ca1377a, 0x14f8598e, 0x3c13eb89, 0x27a9ceee, 0xc961b735, - 0xe51ce1ed, 0xb1477a3c, 0xdfd29c59, 0x73f2553f, 0xce141879, - 0x37c773bf, 0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886, - 0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f, 0xc31d1672, - 0x25e2bc0c, 0x493c288b, 0x950dff41, 0x01a83971, 0xb30c08de, - 0xe4b4d89c, 0xc1566490, 0x84cb7b61, 0xb632d570, 0x5c6c4874, - 0x57b8d042}; - - private static final int[] Tinv2 = - { - 0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e, 0xab3bcb6b, - 0x9d1ff145, 0xfaacab58, 0xe34b9303, 0x302055fa, 0x76adf66d, - 0xcc889176, 0x02f5254c, 0xe54ffcd7, 0x2ac5d7cb, 0x35268044, - 0x62b58fa3, 0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0, - 0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9, 0x8f03e75f, - 0x9215959c, 0x6dbfeb7a, 0x5295da59, 0xbed42d83, 0x7458d321, - 0xe0492969, 0xc98e44c8, 0xc2756a89, 0x8ef47879, 0x58996b3e, - 0xb927dd71, 0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a, - 0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f, 0x64b1e077, - 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b, 0x48705868, 0x458f19fd, - 0xde94876c, 0x7b52b7f8, 0x73ab23d3, 0x4b72e202, 0x1fe3578f, - 0x55662aab, 0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508, - 0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82, 0xcf8a2b1c, - 0x79a792b4, 0x07f3f0f2, 0x694ea1e2, 0xda65cdf4, 0x0506d5be, - 0x34d11f62, 0xa6c48afe, 0x2e349d53, 0xf3a2a055, 0x8a0532e1, - 0xf6a475eb, 0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110, - 0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd, 0x5491b58d, - 0xc471055d, 0x06046fd4, 0x5060ff15, 0x981924fb, 0xbdd697e9, - 0x4089cc43, 0xd967779e, 0xe8b0bd42, 0x8907888b, 0x19e7385b, - 0xc879dbee, 0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000, - 0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72, 0x0efdfbff, - 0x850f5638, 0xae3d1ed5, 0x2d362739, 0x0f0a64d9, 0x5c6821a6, - 0x5b9bd154, 0x36243a2e, 0x0a0cb167, 0x57930fe7, 0xeeb4d296, - 0x9b1b9e91, 0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a, - 0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17, 0x090e0b0d, - 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9, 0xf1578519, 0x75af4c07, - 0x99eebbdd, 0x7fa3fd60, 0x01f79f26, 0x725cbcf5, 0x6644c53b, - 0xfb5b347e, 0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1, - 0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011, 0x4a857d24, - 0xbbd2f83d, 0xf9ae1132, 0x29c76da1, 0x9e1d4b2f, 0xb2dcf330, - 0x860dec52, 0xc177d0e3, 0xb32b6c16, 0x70a999b9, 0x9411fa48, - 0xe9472264, 0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90, - 0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b, 0xf5a6cf81, - 0x7aa528de, 0xb7da268e, 0xad3fa4bf, 0x3a2ce49d, 0x78500d92, - 0x5f6a9bcc, 0x7e546246, 0x8df6c213, 0xd890e8b8, 0x392e5ef7, - 0xc382f5af, 0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312, - 0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb, 0x26cd0978, - 0x596ef418, 0x9aec01b7, 0x4f83a89a, 0x95e6656e, 0xffaa7ee6, - 0xbc2108cf, 0x15efe6e8, 0xe7bad99b, 0x6f4ace36, 0x9fead409, - 0xb029d67c, 0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066, - 0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8, 0x04f14a98, - 0xec41f7da, 0xcd7f0e50, 0x91172ff6, 0x4d768dd6, 0xef434db0, - 0xaacc544d, 0x96e4df04, 0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, - 0x65467f51, 0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41, - 0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347, 0xd79a8c61, - 0xa1377a0c, 0xf8598e14, 0x13eb893c, 0xa9ceee27, 0x61b735c9, - 0x1ce1ede5, 0x477a3cb1, 0xd29c59df, 0xf2553f73, 0x141879ce, - 0xc773bf37, 0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db, - 0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40, 0x1d1672c3, - 0xe2bc0c25, 0x3c288b49, 0x0dff4195, 0xa8397101, 0x0c08deb3, - 0xb4d89ce4, 0x566490c1, 0xcb7b6184, 0x32d570b6, 0x6c48745c, - 0xb8d04257}; - - private static final int[] Tinv3 = - { - 0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27, 0x3bcb6bab, - 0x1ff1459d, 0xacab58fa, 0x4b9303e3, 0x2055fa30, 0xadf66d76, - 0x889176cc, 0xf5254c02, 0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, - 0xb58fa362, 0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe, - 0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3, 0x03e75f8f, - 0x15959c92, 0xbfeb7a6d, 0x95da5952, 0xd42d83be, 0x58d32174, - 0x492969e0, 0x8e44c8c9, 0x756a89c2, 0xf478798e, 0x996b3e58, - 0x27dd71b9, 0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace, - 0x63184adf, 0xe582311a, 0x97603351, 0x62457f53, 0xb1e07764, - 0xbb84ae6b, 0xfe1ca081, 0xf9942b08, 0x70586848, 0x8f19fd45, - 0x94876cde, 0x52b7f87b, 0xab23d373, 0x72e2024b, 0xe3578f1f, - 0x662aab55, 0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837, - 0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216, 0x8a2b1ccf, - 0xa792b479, 0xf3f0f207, 0x4ea1e269, 0x65cdf4da, 0x06d5be05, - 0xd11f6234, 0xc48afea6, 0x349d532e, 0xa2a055f3, 0x0532e18a, - 0xa475ebf6, 0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e, - 0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6, 0x91b58d54, - 0x71055dc4, 0x046fd406, 0x60ff1550, 0x1924fb98, 0xd697e9bd, - 0x89cc4340, 0x67779ed9, 0xb0bd42e8, 0x07888b89, 0xe7385b19, - 0x79dbeec8, 0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000, - 0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a, 0xfdfbff0e, - 0x0f563885, 0x3d1ed5ae, 0x3627392d, 0x0a64d90f, 0x6821a65c, - 0x9bd1545b, 0x243a2e36, 0x0cb1670a, 0x930fe757, 0xb4d296ee, - 0x1b9e919b, 0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12, - 0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b, 0x0e0b0d09, - 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e, 0x578519f1, 0xaf4c0775, - 0xeebbdd99, 0xa3fd607f, 0xf79f2601, 0x5cbcf572, 0x44c53b66, - 0x5b347efb, 0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4, - 0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6, 0x857d244a, - 0xd2f83dbb, 0xae1132f9, 0xc76da129, 0x1d4b2f9e, 0xdcf330b2, - 0x0dec5286, 0x77d0e3c1, 0x2b6c16b3, 0xa999b970, 0x11fa4894, - 0x472264e9, 0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033, - 0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4, 0xa6cf81f5, - 0xa528de7a, 0xda268eb7, 0x3fa4bfad, 0x2ce49d3a, 0x500d9278, - 0x6a9bcc5f, 0x5462467e, 0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, - 0x82f5afc3, 0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225, - 0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b, 0xcd097826, - 0x6ef41859, 0xec01b79a, 0x83a89a4f, 0xe6656e95, 0xaa7ee6ff, - 0x2108cfbc, 0xefe6e815, 0xbad99be7, 0x4ace366f, 0xead4099f, - 0x29d67cb0, 0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2, - 0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7, 0xf14a9804, - 0x41f7daec, 0x7f0e50cd, 0x172ff691, 0x768dd64d, 0x434db0ef, - 0xcc544daa, 0xe4df0496, 0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, - 0x467f5165, 0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b, - 0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6, 0x9a8c61d7, - 0x377a0ca1, 0x598e14f8, 0xeb893c13, 0xceee27a9, 0xb735c961, - 0xe1ede51c, 0x7a3cb147, 0x9c59dfd2, 0x553f73f2, 0x1879ce14, - 0x73bf37c7, 0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44, - 0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3, 0x1672c31d, - 0xbc0c25e2, 0x288b493c, 0xff41950d, 0x397101a8, 0x08deb30c, - 0xd89ce4b4, 0x6490c156, 0x7b6184cb, 0xd570b632, 0x48745c6c, - 0xd04257b8}; - - private int shift( - int r, - int shift) - { - return (r >>> shift) | (r << -shift); - } - - /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ - - private static final int m1 = 0x80808080; - private static final int m2 = 0x7f7f7f7f; - private static final int m3 = 0x0000001b; - - private int FFmulX(int x) - { - return (((x & m2) << 1) ^ (((x & m1) >>> 7) * m3)); - } - - /* - The following defines provide alternative definitions of FFmulX that might - give improved performance if a fast 32-bit multiply is not available. - - private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } - private static final int m4 = 0x1b1b1b1b; - private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } - - */ - - private int inv_mcol(int x) - { - int f2 = FFmulX(x); - int f4 = FFmulX(f2); - int f8 = FFmulX(f4); - int f9 = x ^ f8; - - return f2 ^ f4 ^ f8 ^ shift(f2 ^ f9, 8) ^ shift(f4 ^ f9, 16) ^ shift(f9, 24); - } - - - private int subWord(int x) - { - return (S[x&255]&255 | ((S[(x>>8)&255]&255)<<8) | ((S[(x>>16)&255]&255)<<16) | S[(x>>24)&255]<<24); - } - - /** - * Calculate the necessary round keys - * The number of calculations depends on key size and block size - * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits - * This code is written assuming those are the only possible values - */ - private int[][] generateWorkingKey( - byte[] key, - boolean forEncryption) - { - int KC = key.length / 4; // key length in words - int t; - - if (((KC != 4) && (KC != 6) && (KC != 8)) || ((KC * 4) != key.length)) - { - throw new IllegalArgumentException("Key length not 128/192/256 bits."); - } - - ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes - int[][] W = new int[ROUNDS+1][4]; // 4 words in a block - - // - // copy the key into the round key array - // - - t = 0; - int i = 0; - while (i < key.length) - { - W[t >> 2][t & 3] = (key[i]&0xff) | ((key[i+1]&0xff) << 8) | ((key[i+2]&0xff) << 16) | (key[i+3] << 24); - i+=4; - t++; - } - - // - // while not enough round key material calculated - // calculate new values - // - int k = (ROUNDS + 1) << 2; - for (i = KC; (i < k); i++) - { - int temp = W[(i - 1) >> 2][(i - 1) & 3]; - if ((i % KC) == 0) - { - temp = subWord(shift(temp, 8)) ^ rcon[(i / KC) - 1]; - } - else if ((KC > 6) && ((i % KC) == 4)) - { - temp = subWord(temp); - } - - W[i >> 2][i & 3] = W[(i - KC) >> 2][(i - KC) & 3] ^ temp; - } - - if (!forEncryption) - { - for (int j = 1; j < ROUNDS; j++) - { - for (i = 0; i < 4; i++) - { - W[j][i] = inv_mcol(W[j][i]); - } - } - } - - return W; - } - - private int ROUNDS; - private int[][] WorkingKey = null; - private int C0, C1, C2, C3; - private boolean forEncryption; - - private static final int BLOCK_SIZE = 16; - - /** - * default constructor - 128 bit block size. - */ - public AESFastEngine() - { - } - - /** - * initialise an AES cipher. - * - * @param forEncryption whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - { - if (params instanceof KeyParameter) - { - WorkingKey = generateWorkingKey(((KeyParameter)params).getKey(), forEncryption); - this.forEncryption = forEncryption; - return; - } - - throw new IllegalArgumentException("invalid parameter passed to AES init - " + params.getClass().getName()); - } - - public String getAlgorithmName() - { - return "AES"; - } - - public int getBlockSize() - { - return BLOCK_SIZE; - } - - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - { - if (WorkingKey == null) - { - throw new IllegalStateException("AES engine not initialised"); - } - - if ((inOff + (32 / 2)) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + (32 / 2)) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (forEncryption) - { - unpackBlock(in, inOff); - encryptBlock(WorkingKey); - packBlock(out, outOff); - } - else - { - unpackBlock(in, inOff); - decryptBlock(WorkingKey); - packBlock(out, outOff); - } - - return BLOCK_SIZE; - } - - public void reset() - { - } - - private void unpackBlock( - byte[] bytes, - int off) - { - int index = off; - - C0 = (bytes[index++] & 0xff); - C0 |= (bytes[index++] & 0xff) << 8; - C0 |= (bytes[index++] & 0xff) << 16; - C0 |= bytes[index++] << 24; - - C1 = (bytes[index++] & 0xff); - C1 |= (bytes[index++] & 0xff) << 8; - C1 |= (bytes[index++] & 0xff) << 16; - C1 |= bytes[index++] << 24; - - C2 = (bytes[index++] & 0xff); - C2 |= (bytes[index++] & 0xff) << 8; - C2 |= (bytes[index++] & 0xff) << 16; - C2 |= bytes[index++] << 24; - - C3 = (bytes[index++] & 0xff); - C3 |= (bytes[index++] & 0xff) << 8; - C3 |= (bytes[index++] & 0xff) << 16; - C3 |= bytes[index++] << 24; - } - - private void packBlock( - byte[] bytes, - int off) - { - int index = off; - - bytes[index++] = (byte)C0; - bytes[index++] = (byte)(C0 >> 8); - bytes[index++] = (byte)(C0 >> 16); - bytes[index++] = (byte)(C0 >> 24); - - bytes[index++] = (byte)C1; - bytes[index++] = (byte)(C1 >> 8); - bytes[index++] = (byte)(C1 >> 16); - bytes[index++] = (byte)(C1 >> 24); - - bytes[index++] = (byte)C2; - bytes[index++] = (byte)(C2 >> 8); - bytes[index++] = (byte)(C2 >> 16); - bytes[index++] = (byte)(C2 >> 24); - - bytes[index++] = (byte)C3; - bytes[index++] = (byte)(C3 >> 8); - bytes[index++] = (byte)(C3 >> 16); - bytes[index++] = (byte)(C3 >> 24); - } - - private void encryptBlock(int[][] KW) - { - int r, r0, r1, r2, r3; - - C0 ^= KW[0][0]; - C1 ^= KW[0][1]; - C2 ^= KW[0][2]; - C3 ^= KW[0][3]; - - r = 1; - while (r < ROUNDS - 1) - { - r0 = T0[C0&255] ^ T1[(C1>>8)&255] ^ T2[(C2>>16)&255] ^ T3[(C3>>24)&255] ^ KW[r][0]; - r1 = T0[C1&255] ^ T1[(C2>>8)&255] ^ T2[(C3>>16)&255] ^ T3[(C0>>24)&255] ^ KW[r][1]; - r2 = T0[C2&255] ^ T1[(C3>>8)&255] ^ T2[(C0>>16)&255] ^ T3[(C1>>24)&255] ^ KW[r][2]; - r3 = T0[C3&255] ^ T1[(C0>>8)&255] ^ T2[(C1>>16)&255] ^ T3[(C2>>24)&255] ^ KW[r++][3]; - C0 = T0[r0&255] ^ T1[(r1>>8)&255] ^ T2[(r2>>16)&255] ^ T3[(r3>>24)&255] ^ KW[r][0]; - C1 = T0[r1&255] ^ T1[(r2>>8)&255] ^ T2[(r3>>16)&255] ^ T3[(r0>>24)&255] ^ KW[r][1]; - C2 = T0[r2&255] ^ T1[(r3>>8)&255] ^ T2[(r0>>16)&255] ^ T3[(r1>>24)&255] ^ KW[r][2]; - C3 = T0[r3&255] ^ T1[(r0>>8)&255] ^ T2[(r1>>16)&255] ^ T3[(r2>>24)&255] ^ KW[r++][3]; - } - - r0 = T0[C0&255] ^ T1[(C1>>8)&255] ^ T2[(C2>>16)&255] ^ T3[(C3>>24)&255] ^ KW[r][0]; - r1 = T0[C1&255] ^ T1[(C2>>8)&255] ^ T2[(C3>>16)&255] ^ T3[(C0>>24)&255] ^ KW[r][1]; - r2 = T0[C2&255] ^ T1[(C3>>8)&255] ^ T2[(C0>>16)&255] ^ T3[(C1>>24)&255] ^ KW[r][2]; - r3 = T0[C3&255] ^ T1[(C0>>8)&255] ^ T2[(C1>>16)&255] ^ T3[(C2>>24)&255] ^ KW[r++][3]; - - // the final round's table is a simple function of S so we don't use a whole other four tables for it - - C0 = (S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24) ^ KW[r][0]; - C1 = (S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24) ^ KW[r][1]; - C2 = (S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24) ^ KW[r][2]; - C3 = (S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24) ^ KW[r][3]; - - } - - private void decryptBlock(int[][] KW) - { - int r0, r1, r2, r3; - - C0 ^= KW[ROUNDS][0]; - C1 ^= KW[ROUNDS][1]; - C2 ^= KW[ROUNDS][2]; - C3 ^= KW[ROUNDS][3]; - - int r = ROUNDS-1; - - while (r>1) - { - r0 = Tinv0[C0&255] ^ Tinv1[(C3>>8)&255] ^ Tinv2[(C2>>16)&255] ^ Tinv3[(C1>>24)&255] ^ KW[r][0]; - r1 = Tinv0[C1&255] ^ Tinv1[(C0>>8)&255] ^ Tinv2[(C3>>16)&255] ^ Tinv3[(C2>>24)&255] ^ KW[r][1]; - r2 = Tinv0[C2&255] ^ Tinv1[(C1>>8)&255] ^ Tinv2[(C0>>16)&255] ^ Tinv3[(C3>>24)&255] ^ KW[r][2]; - r3 = Tinv0[C3&255] ^ Tinv1[(C2>>8)&255] ^ Tinv2[(C1>>16)&255] ^ Tinv3[(C0>>24)&255] ^ KW[r--][3]; - C0 = Tinv0[r0&255] ^ Tinv1[(r3>>8)&255] ^ Tinv2[(r2>>16)&255] ^ Tinv3[(r1>>24)&255] ^ KW[r][0]; - C1 = Tinv0[r1&255] ^ Tinv1[(r0>>8)&255] ^ Tinv2[(r3>>16)&255] ^ Tinv3[(r2>>24)&255] ^ KW[r][1]; - C2 = Tinv0[r2&255] ^ Tinv1[(r1>>8)&255] ^ Tinv2[(r0>>16)&255] ^ Tinv3[(r3>>24)&255] ^ KW[r][2]; - C3 = Tinv0[r3&255] ^ Tinv1[(r2>>8)&255] ^ Tinv2[(r1>>16)&255] ^ Tinv3[(r0>>24)&255] ^ KW[r--][3]; - } - - r0 = Tinv0[C0&255] ^ Tinv1[(C3>>8)&255] ^ Tinv2[(C2>>16)&255] ^ Tinv3[(C1>>24)&255] ^ KW[r][0]; - r1 = Tinv0[C1&255] ^ Tinv1[(C0>>8)&255] ^ Tinv2[(C3>>16)&255] ^ Tinv3[(C2>>24)&255] ^ KW[r][1]; - r2 = Tinv0[C2&255] ^ Tinv1[(C1>>8)&255] ^ Tinv2[(C0>>16)&255] ^ Tinv3[(C3>>24)&255] ^ KW[r][2]; - r3 = Tinv0[C3&255] ^ Tinv1[(C2>>8)&255] ^ Tinv2[(C1>>16)&255] ^ Tinv3[(C0>>24)&255] ^ KW[r][3]; - - // the final round's table is a simple function of Si so we don't use a whole other four tables for it - - C0 = (Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24) ^ KW[0][0]; - C1 = (Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24) ^ KW[0][1]; - C2 = (Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24) ^ KW[0][2]; - C3 = (Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24) ^ KW[0][3]; - } -} diff --git a/src/org/bouncycastle/crypto/engines/AESLightEngine.java b/src/org/bouncycastle/crypto/engines/AESLightEngine.java deleted file mode 100644 index afd37ba..0000000 --- a/src/org/bouncycastle/crypto/engines/AESLightEngine.java +++ /dev/null @@ -1,440 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * an implementation of the AES (Rijndael), from FIPS-197. - *

        - * For further details see: http://csrc.nist.gov/encryption/aes/. - * - * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at - * http://fp.gladman.plus.com/cryptography_technology/rijndael/ - * - * There are three levels of tradeoff of speed vs memory - * Because java has no preprocessor, they are written as three separate classes from which to choose - * - * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption - * and 4 for decryption. - * - * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, - * adding 12 rotate operations per round to compute the values contained in the other tables from - * the contents of the first - * - * The slowest version uses no static tables at all and computes the values - * in each round. - *

        - * This file contains the slowest performance version with no static tables - * for round precomputation, but it has the smallest foot print. - * - */ -public class AESLightEngine - implements BlockCipher -{ - // The S box - private static final byte[] S = { - (byte)99, (byte)124, (byte)119, (byte)123, (byte)242, (byte)107, (byte)111, (byte)197, - (byte)48, (byte)1, (byte)103, (byte)43, (byte)254, (byte)215, (byte)171, (byte)118, - (byte)202, (byte)130, (byte)201, (byte)125, (byte)250, (byte)89, (byte)71, (byte)240, - (byte)173, (byte)212, (byte)162, (byte)175, (byte)156, (byte)164, (byte)114, (byte)192, - (byte)183, (byte)253, (byte)147, (byte)38, (byte)54, (byte)63, (byte)247, (byte)204, - (byte)52, (byte)165, (byte)229, (byte)241, (byte)113, (byte)216, (byte)49, (byte)21, - (byte)4, (byte)199, (byte)35, (byte)195, (byte)24, (byte)150, (byte)5, (byte)154, - (byte)7, (byte)18, (byte)128, (byte)226, (byte)235, (byte)39, (byte)178, (byte)117, - (byte)9, (byte)131, (byte)44, (byte)26, (byte)27, (byte)110, (byte)90, (byte)160, - (byte)82, (byte)59, (byte)214, (byte)179, (byte)41, (byte)227, (byte)47, (byte)132, - (byte)83, (byte)209, (byte)0, (byte)237, (byte)32, (byte)252, (byte)177, (byte)91, - (byte)106, (byte)203, (byte)190, (byte)57, (byte)74, (byte)76, (byte)88, (byte)207, - (byte)208, (byte)239, (byte)170, (byte)251, (byte)67, (byte)77, (byte)51, (byte)133, - (byte)69, (byte)249, (byte)2, (byte)127, (byte)80, (byte)60, (byte)159, (byte)168, - (byte)81, (byte)163, (byte)64, (byte)143, (byte)146, (byte)157, (byte)56, (byte)245, - (byte)188, (byte)182, (byte)218, (byte)33, (byte)16, (byte)255, (byte)243, (byte)210, - (byte)205, (byte)12, (byte)19, (byte)236, (byte)95, (byte)151, (byte)68, (byte)23, - (byte)196, (byte)167, (byte)126, (byte)61, (byte)100, (byte)93, (byte)25, (byte)115, - (byte)96, (byte)129, (byte)79, (byte)220, (byte)34, (byte)42, (byte)144, (byte)136, - (byte)70, (byte)238, (byte)184, (byte)20, (byte)222, (byte)94, (byte)11, (byte)219, - (byte)224, (byte)50, (byte)58, (byte)10, (byte)73, (byte)6, (byte)36, (byte)92, - (byte)194, (byte)211, (byte)172, (byte)98, (byte)145, (byte)149, (byte)228, (byte)121, - (byte)231, (byte)200, (byte)55, (byte)109, (byte)141, (byte)213, (byte)78, (byte)169, - (byte)108, (byte)86, (byte)244, (byte)234, (byte)101, (byte)122, (byte)174, (byte)8, - (byte)186, (byte)120, (byte)37, (byte)46, (byte)28, (byte)166, (byte)180, (byte)198, - (byte)232, (byte)221, (byte)116, (byte)31, (byte)75, (byte)189, (byte)139, (byte)138, - (byte)112, (byte)62, (byte)181, (byte)102, (byte)72, (byte)3, (byte)246, (byte)14, - (byte)97, (byte)53, (byte)87, (byte)185, (byte)134, (byte)193, (byte)29, (byte)158, - (byte)225, (byte)248, (byte)152, (byte)17, (byte)105, (byte)217, (byte)142, (byte)148, - (byte)155, (byte)30, (byte)135, (byte)233, (byte)206, (byte)85, (byte)40, (byte)223, - (byte)140, (byte)161, (byte)137, (byte)13, (byte)191, (byte)230, (byte)66, (byte)104, - (byte)65, (byte)153, (byte)45, (byte)15, (byte)176, (byte)84, (byte)187, (byte)22, - }; - - // The inverse S-box - private static final byte[] Si = { - (byte)82, (byte)9, (byte)106, (byte)213, (byte)48, (byte)54, (byte)165, (byte)56, - (byte)191, (byte)64, (byte)163, (byte)158, (byte)129, (byte)243, (byte)215, (byte)251, - (byte)124, (byte)227, (byte)57, (byte)130, (byte)155, (byte)47, (byte)255, (byte)135, - (byte)52, (byte)142, (byte)67, (byte)68, (byte)196, (byte)222, (byte)233, (byte)203, - (byte)84, (byte)123, (byte)148, (byte)50, (byte)166, (byte)194, (byte)35, (byte)61, - (byte)238, (byte)76, (byte)149, (byte)11, (byte)66, (byte)250, (byte)195, (byte)78, - (byte)8, (byte)46, (byte)161, (byte)102, (byte)40, (byte)217, (byte)36, (byte)178, - (byte)118, (byte)91, (byte)162, (byte)73, (byte)109, (byte)139, (byte)209, (byte)37, - (byte)114, (byte)248, (byte)246, (byte)100, (byte)134, (byte)104, (byte)152, (byte)22, - (byte)212, (byte)164, (byte)92, (byte)204, (byte)93, (byte)101, (byte)182, (byte)146, - (byte)108, (byte)112, (byte)72, (byte)80, (byte)253, (byte)237, (byte)185, (byte)218, - (byte)94, (byte)21, (byte)70, (byte)87, (byte)167, (byte)141, (byte)157, (byte)132, - (byte)144, (byte)216, (byte)171, (byte)0, (byte)140, (byte)188, (byte)211, (byte)10, - (byte)247, (byte)228, (byte)88, (byte)5, (byte)184, (byte)179, (byte)69, (byte)6, - (byte)208, (byte)44, (byte)30, (byte)143, (byte)202, (byte)63, (byte)15, (byte)2, - (byte)193, (byte)175, (byte)189, (byte)3, (byte)1, (byte)19, (byte)138, (byte)107, - (byte)58, (byte)145, (byte)17, (byte)65, (byte)79, (byte)103, (byte)220, (byte)234, - (byte)151, (byte)242, (byte)207, (byte)206, (byte)240, (byte)180, (byte)230, (byte)115, - (byte)150, (byte)172, (byte)116, (byte)34, (byte)231, (byte)173, (byte)53, (byte)133, - (byte)226, (byte)249, (byte)55, (byte)232, (byte)28, (byte)117, (byte)223, (byte)110, - (byte)71, (byte)241, (byte)26, (byte)113, (byte)29, (byte)41, (byte)197, (byte)137, - (byte)111, (byte)183, (byte)98, (byte)14, (byte)170, (byte)24, (byte)190, (byte)27, - (byte)252, (byte)86, (byte)62, (byte)75, (byte)198, (byte)210, (byte)121, (byte)32, - (byte)154, (byte)219, (byte)192, (byte)254, (byte)120, (byte)205, (byte)90, (byte)244, - (byte)31, (byte)221, (byte)168, (byte)51, (byte)136, (byte)7, (byte)199, (byte)49, - (byte)177, (byte)18, (byte)16, (byte)89, (byte)39, (byte)128, (byte)236, (byte)95, - (byte)96, (byte)81, (byte)127, (byte)169, (byte)25, (byte)181, (byte)74, (byte)13, - (byte)45, (byte)229, (byte)122, (byte)159, (byte)147, (byte)201, (byte)156, (byte)239, - (byte)160, (byte)224, (byte)59, (byte)77, (byte)174, (byte)42, (byte)245, (byte)176, - (byte)200, (byte)235, (byte)187, (byte)60, (byte)131, (byte)83, (byte)153, (byte)97, - (byte)23, (byte)43, (byte)4, (byte)126, (byte)186, (byte)119, (byte)214, (byte)38, - (byte)225, (byte)105, (byte)20, (byte)99, (byte)85, (byte)33, (byte)12, (byte)125, - }; - - // vector used in calculating key schedule (powers of x in GF(256)) - private static final int[] rcon = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, - 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; - - private int shift( - int r, - int shift) - { - return (r >>> shift) | (r << -shift); - } - - /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ - - private static final int m1 = 0x80808080; - private static final int m2 = 0x7f7f7f7f; - private static final int m3 = 0x0000001b; - - private int FFmulX(int x) - { - return (((x & m2) << 1) ^ (((x & m1) >>> 7) * m3)); - } - - /* - The following defines provide alternative definitions of FFmulX that might - give improved performance if a fast 32-bit multiply is not available. - - private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } - private static final int m4 = 0x1b1b1b1b; - private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } - - */ - - private int mcol(int x) - { - int f2 = FFmulX(x); - return f2 ^ shift(x ^ f2, 8) ^ shift(x, 16) ^ shift(x, 24); - } - - private int inv_mcol(int x) - { - int f2 = FFmulX(x); - int f4 = FFmulX(f2); - int f8 = FFmulX(f4); - int f9 = x ^ f8; - - return f2 ^ f4 ^ f8 ^ shift(f2 ^ f9, 8) ^ shift(f4 ^ f9, 16) ^ shift(f9, 24); - } - - - private int subWord(int x) - { - return (S[x&255]&255 | ((S[(x>>8)&255]&255)<<8) | ((S[(x>>16)&255]&255)<<16) | S[(x>>24)&255]<<24); - } - - /** - * Calculate the necessary round keys - * The number of calculations depends on key size and block size - * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits - * This code is written assuming those are the only possible values - */ - private int[][] generateWorkingKey( - byte[] key, - boolean forEncryption) - { - int KC = key.length / 4; // key length in words - int t; - - if (((KC != 4) && (KC != 6) && (KC != 8)) || ((KC * 4) != key.length)) - { - throw new IllegalArgumentException("Key length not 128/192/256 bits."); - } - - ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes - int[][] W = new int[ROUNDS+1][4]; // 4 words in a block - - // - // copy the key into the round key array - // - - t = 0; - int i = 0; - while (i < key.length) - { - W[t >> 2][t & 3] = (key[i]&0xff) | ((key[i+1]&0xff) << 8) | ((key[i+2]&0xff) << 16) | (key[i+3] << 24); - i+=4; - t++; - } - - // - // while not enough round key material calculated - // calculate new values - // - int k = (ROUNDS + 1) << 2; - for (i = KC; (i < k); i++) - { - int temp = W[(i-1)>>2][(i-1)&3]; - if ((i % KC) == 0) - { - temp = subWord(shift(temp, 8)) ^ rcon[(i / KC)-1]; - } - else if ((KC > 6) && ((i % KC) == 4)) - { - temp = subWord(temp); - } - - W[i>>2][i&3] = W[(i - KC)>>2][(i-KC)&3] ^ temp; - } - - if (!forEncryption) - { - for (int j = 1; j < ROUNDS; j++) - { - for (i = 0; i < 4; i++) - { - W[j][i] = inv_mcol(W[j][i]); - } - } - } - - return W; - } - - private int ROUNDS; - private int[][] WorkingKey = null; - private int C0, C1, C2, C3; - private boolean forEncryption; - - private static final int BLOCK_SIZE = 16; - - /** - * default constructor - 128 bit block size. - */ - public AESLightEngine() - { - } - - /** - * initialise an AES cipher. - * - * @param forEncryption whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - { - if (params instanceof KeyParameter) - { - WorkingKey = generateWorkingKey(((KeyParameter)params).getKey(), forEncryption); - this.forEncryption = forEncryption; - return; - } - - throw new IllegalArgumentException("invalid parameter passed to AES init - " + params.getClass().getName()); - } - - public String getAlgorithmName() - { - return "AES"; - } - - public int getBlockSize() - { - return BLOCK_SIZE; - } - - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - { - if (WorkingKey == null) - { - throw new IllegalStateException("AES engine not initialised"); - } - - if ((inOff + (32 / 2)) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + (32 / 2)) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (forEncryption) - { - unpackBlock(in, inOff); - encryptBlock(WorkingKey); - packBlock(out, outOff); - } - else - { - unpackBlock(in, inOff); - decryptBlock(WorkingKey); - packBlock(out, outOff); - } - - return BLOCK_SIZE; - } - - public void reset() - { - } - - private void unpackBlock( - byte[] bytes, - int off) - { - int index = off; - - C0 = (bytes[index++] & 0xff); - C0 |= (bytes[index++] & 0xff) << 8; - C0 |= (bytes[index++] & 0xff) << 16; - C0 |= bytes[index++] << 24; - - C1 = (bytes[index++] & 0xff); - C1 |= (bytes[index++] & 0xff) << 8; - C1 |= (bytes[index++] & 0xff) << 16; - C1 |= bytes[index++] << 24; - - C2 = (bytes[index++] & 0xff); - C2 |= (bytes[index++] & 0xff) << 8; - C2 |= (bytes[index++] & 0xff) << 16; - C2 |= bytes[index++] << 24; - - C3 = (bytes[index++] & 0xff); - C3 |= (bytes[index++] & 0xff) << 8; - C3 |= (bytes[index++] & 0xff) << 16; - C3 |= bytes[index++] << 24; - } - - private void packBlock( - byte[] bytes, - int off) - { - int index = off; - - bytes[index++] = (byte)C0; - bytes[index++] = (byte)(C0 >> 8); - bytes[index++] = (byte)(C0 >> 16); - bytes[index++] = (byte)(C0 >> 24); - - bytes[index++] = (byte)C1; - bytes[index++] = (byte)(C1 >> 8); - bytes[index++] = (byte)(C1 >> 16); - bytes[index++] = (byte)(C1 >> 24); - - bytes[index++] = (byte)C2; - bytes[index++] = (byte)(C2 >> 8); - bytes[index++] = (byte)(C2 >> 16); - bytes[index++] = (byte)(C2 >> 24); - - bytes[index++] = (byte)C3; - bytes[index++] = (byte)(C3 >> 8); - bytes[index++] = (byte)(C3 >> 16); - bytes[index++] = (byte)(C3 >> 24); - } - - private void encryptBlock(int[][] KW) - { - int r, r0, r1, r2, r3; - - C0 ^= KW[0][0]; - C1 ^= KW[0][1]; - C2 ^= KW[0][2]; - C3 ^= KW[0][3]; - - for (r = 1; r < ROUNDS - 1;) - { - r0 = mcol((S[C0&255]&255) ^ ((S[(C1>>8)&255]&255)<<8) ^ ((S[(C2>>16)&255]&255)<<16) ^ (S[(C3>>24)&255]<<24)) ^ KW[r][0]; - r1 = mcol((S[C1&255]&255) ^ ((S[(C2>>8)&255]&255)<<8) ^ ((S[(C3>>16)&255]&255)<<16) ^ (S[(C0>>24)&255]<<24)) ^ KW[r][1]; - r2 = mcol((S[C2&255]&255) ^ ((S[(C3>>8)&255]&255)<<8) ^ ((S[(C0>>16)&255]&255)<<16) ^ (S[(C1>>24)&255]<<24)) ^ KW[r][2]; - r3 = mcol((S[C3&255]&255) ^ ((S[(C0>>8)&255]&255)<<8) ^ ((S[(C1>>16)&255]&255)<<16) ^ (S[(C2>>24)&255]<<24)) ^ KW[r++][3]; - C0 = mcol((S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24)) ^ KW[r][0]; - C1 = mcol((S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24)) ^ KW[r][1]; - C2 = mcol((S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24)) ^ KW[r][2]; - C3 = mcol((S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24)) ^ KW[r++][3]; - } - - r0 = mcol((S[C0&255]&255) ^ ((S[(C1>>8)&255]&255)<<8) ^ ((S[(C2>>16)&255]&255)<<16) ^ (S[(C3>>24)&255]<<24)) ^ KW[r][0]; - r1 = mcol((S[C1&255]&255) ^ ((S[(C2>>8)&255]&255)<<8) ^ ((S[(C3>>16)&255]&255)<<16) ^ (S[(C0>>24)&255]<<24)) ^ KW[r][1]; - r2 = mcol((S[C2&255]&255) ^ ((S[(C3>>8)&255]&255)<<8) ^ ((S[(C0>>16)&255]&255)<<16) ^ (S[(C1>>24)&255]<<24)) ^ KW[r][2]; - r3 = mcol((S[C3&255]&255) ^ ((S[(C0>>8)&255]&255)<<8) ^ ((S[(C1>>16)&255]&255)<<16) ^ (S[(C2>>24)&255]<<24)) ^ KW[r++][3]; - - // the final round is a simple function of S - - C0 = (S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24) ^ KW[r][0]; - C1 = (S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24) ^ KW[r][1]; - C2 = (S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24) ^ KW[r][2]; - C3 = (S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24) ^ KW[r][3]; - - } - - private void decryptBlock(int[][] KW) - { - int r, r0, r1, r2, r3; - - C0 ^= KW[ROUNDS][0]; - C1 ^= KW[ROUNDS][1]; - C2 ^= KW[ROUNDS][2]; - C3 ^= KW[ROUNDS][3]; - - for (r = ROUNDS-1; r>1;) - { - r0 = inv_mcol((Si[C0&255]&255) ^ ((Si[(C3>>8)&255]&255)<<8) ^ ((Si[(C2>>16)&255]&255)<<16) ^ (Si[(C1>>24)&255]<<24)) ^ KW[r][0]; - r1 = inv_mcol((Si[C1&255]&255) ^ ((Si[(C0>>8)&255]&255)<<8) ^ ((Si[(C3>>16)&255]&255)<<16) ^ (Si[(C2>>24)&255]<<24)) ^ KW[r][1]; - r2 = inv_mcol((Si[C2&255]&255) ^ ((Si[(C1>>8)&255]&255)<<8) ^ ((Si[(C0>>16)&255]&255)<<16) ^ (Si[(C3>>24)&255]<<24)) ^ KW[r][2]; - r3 = inv_mcol((Si[C3&255]&255) ^ ((Si[(C2>>8)&255]&255)<<8) ^ ((Si[(C1>>16)&255]&255)<<16) ^ (Si[(C0>>24)&255]<<24)) ^ KW[r--][3]; - C0 = inv_mcol((Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24)) ^ KW[r][0]; - C1 = inv_mcol((Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24)) ^ KW[r][1]; - C2 = inv_mcol((Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24)) ^ KW[r][2]; - C3 = inv_mcol((Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24)) ^ KW[r--][3]; - } - - r0 = inv_mcol((Si[C0&255]&255) ^ ((Si[(C3>>8)&255]&255)<<8) ^ ((Si[(C2>>16)&255]&255)<<16) ^ (Si[(C1>>24)&255]<<24)) ^ KW[r][0]; - r1 = inv_mcol((Si[C1&255]&255) ^ ((Si[(C0>>8)&255]&255)<<8) ^ ((Si[(C3>>16)&255]&255)<<16) ^ (Si[(C2>>24)&255]<<24)) ^ KW[r][1]; - r2 = inv_mcol((Si[C2&255]&255) ^ ((Si[(C1>>8)&255]&255)<<8) ^ ((Si[(C0>>16)&255]&255)<<16) ^ (Si[(C3>>24)&255]<<24)) ^ KW[r][2]; - r3 = inv_mcol((Si[C3&255]&255) ^ ((Si[(C2>>8)&255]&255)<<8) ^ ((Si[(C1>>16)&255]&255)<<16) ^ (Si[(C0>>24)&255]<<24)) ^ KW[r][3]; - - // the final round's table is a simple function of Si - - C0 = (Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24) ^ KW[0][0]; - C1 = (Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24) ^ KW[0][1]; - C2 = (Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24) ^ KW[0][2]; - C3 = (Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24) ^ KW[0][3]; - } -} diff --git a/src/org/bouncycastle/crypto/engines/AESWrapEngine.java b/src/org/bouncycastle/crypto/engines/AESWrapEngine.java deleted file mode 100644 index 5d316ac..0000000 --- a/src/org/bouncycastle/crypto/engines/AESWrapEngine.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bouncycastle.crypto.engines; - -/** - * an implementation of the AES Key Wrapper from the NIST Key Wrap - * Specification. - *

        - * For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. - */ -public class AESWrapEngine - extends RFC3394WrapEngine -{ - public AESWrapEngine() - { - super(new AESEngine()); - } -} diff --git a/src/org/bouncycastle/crypto/engines/BlowfishEngine.java b/src/org/bouncycastle/crypto/engines/BlowfishEngine.java deleted file mode 100644 index 6ee1c49..0000000 --- a/src/org/bouncycastle/crypto/engines/BlowfishEngine.java +++ /dev/null @@ -1,576 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * A class that provides Blowfish key encryption operations, - * such as encoding data and generating keys. - * All the algorithms herein are from Applied Cryptography - * and implement a simplified cryptography interface. - */ -public final class BlowfishEngine -implements BlockCipher -{ - private final static int[] - KP = { - 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, - 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, - 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, - 0x9216D5D9, 0x8979FB1B - }, - - KS0 = { - 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, - 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, - 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, - 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, - 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, - 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, - 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, - 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, - 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, - 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, - 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, - 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, - 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, - 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, - 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, - 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, - 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, - 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, - 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, - 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, - 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, - 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, - 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, - 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, - 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, - 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, - 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, - 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, - 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, - 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, - 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, - 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, - 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, - 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, - 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, - 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, - 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, - 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, - 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, - 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, - 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, - 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, - 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, - 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, - 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, - 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, - 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, - 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, - 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, - 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, - 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, - 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, - 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, - 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, - 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, - 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, - 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, - 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, - 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, - 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, - 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, - 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, - 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, - 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A - }, - - KS1 = { - 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, - 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, - 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, - 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, - 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, - 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, - 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, - 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, - 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, - 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, - 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, - 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, - 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, - 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, - 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, - 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, - 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, - 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, - 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, - 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, - 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, - 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, - 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, - 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, - 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, - 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, - 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, - 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, - 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, - 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, - 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, - 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, - 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, - 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, - 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, - 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, - 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, - 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, - 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, - 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, - 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, - 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, - 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, - 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, - 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, - 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, - 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, - 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, - 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, - 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, - 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, - 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, - 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, - 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, - 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, - 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, - 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, - 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, - 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, - 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, - 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, - 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, - 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, - 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 - }, - - KS2 = { - 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, - 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, - 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, - 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, - 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, - 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, - 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, - 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, - 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, - 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, - 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, - 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, - 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, - 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, - 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, - 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, - 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, - 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, - 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, - 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, - 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, - 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, - 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, - 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, - 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, - 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, - 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, - 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, - 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, - 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, - 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, - 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, - 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, - 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, - 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, - 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, - 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, - 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, - 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, - 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, - 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, - 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, - 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, - 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, - 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, - 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, - 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, - 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, - 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, - 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, - 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, - 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, - 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, - 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, - 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, - 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, - 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, - 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, - 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, - 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, - 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, - 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, - 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, - 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 - }, - - KS3 = { - 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, - 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, - 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, - 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, - 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, - 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, - 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, - 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, - 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, - 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, - 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, - 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, - 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, - 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, - 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, - 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, - 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, - 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, - 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, - 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, - 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, - 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, - 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, - 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, - 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, - 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, - 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, - 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, - 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, - 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, - 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, - 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, - 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, - 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, - 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, - 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, - 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, - 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, - 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, - 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, - 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, - 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, - 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, - 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, - 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, - 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, - 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, - 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, - 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, - 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, - 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, - 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, - 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, - 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, - 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, - 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, - 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, - 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, - 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, - 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, - 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, - 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, - 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, - 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 - }; - - //==================================== - // Useful constants - //==================================== - - private static final int ROUNDS = 16; - private static final int BLOCK_SIZE = 8; // bytes = 64 bits - private static final int SBOX_SK = 256; - private static final int P_SZ = ROUNDS+2; - - private final int[] S0, S1, S2, S3; // the s-boxes - private final int[] P; // the p-array - - private boolean encrypting = false; - - private byte[] workingKey = null; - - public BlowfishEngine() - { - S0 = new int[SBOX_SK]; - S1 = new int[SBOX_SK]; - S2 = new int[SBOX_SK]; - S3 = new int[SBOX_SK]; - P = new int[P_SZ]; - } - - /** - * initialise a Blowfish cipher. - * - * @param encrypting whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean encrypting, - CipherParameters params) - { - if (params instanceof KeyParameter) - { - this.encrypting = encrypting; - this.workingKey = ((KeyParameter)params).getKey(); - setKey(this.workingKey); - - return; - } - - throw new IllegalArgumentException("invalid parameter passed to Blowfish init - " + params.getClass().getName()); - } - - public String getAlgorithmName() - { - return "Blowfish"; - } - - public final int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - { - if (workingKey == null) - { - throw new IllegalStateException("Blowfish not initialised"); - } - - if ((inOff + BLOCK_SIZE) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + BLOCK_SIZE) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (encrypting) - { - encryptBlock(in, inOff, out, outOff); - } - else - { - decryptBlock(in, inOff, out, outOff); - } - - return BLOCK_SIZE; - } - - public void reset() - { - } - - public int getBlockSize() - { - return BLOCK_SIZE; - } - - //================================== - // Private Implementation - //================================== - - private int F(int x) - { - return (((S0[(x >>> 24)] + S1[(x >>> 16) & 0xff]) - ^ S2[(x >>> 8) & 0xff]) + S3[x & 0xff]); - } - - /** - * apply the encryption cycle to each value pair in the table. - */ - private void processTable( - int xl, - int xr, - int[] table) - { - int size = table.length; - - for (int s = 0; s < size; s += 2) - { - xl ^= P[0]; - - for (int i = 1; i < ROUNDS; i += 2) - { - xr ^= F(xl) ^ P[i]; - xl ^= F(xr) ^ P[i + 1]; - } - - xr ^= P[ROUNDS + 1]; - - table[s] = xr; - table[s + 1] = xl; - - xr = xl; // end of cycle swap - xl = table[s]; - } - } - - private void setKey(byte[] key) - { - /* - * - comments are from _Applied Crypto_, Schneier, p338 - * please be careful comparing the two, AC numbers the - * arrays from 1, the enclosed code from 0. - * - * (1) - * Initialise the S-boxes and the P-array, with a fixed string - * This string contains the hexadecimal digits of pi (3.141...) - */ - System.arraycopy(KS0, 0, S0, 0, SBOX_SK); - System.arraycopy(KS1, 0, S1, 0, SBOX_SK); - System.arraycopy(KS2, 0, S2, 0, SBOX_SK); - System.arraycopy(KS3, 0, S3, 0, SBOX_SK); - - System.arraycopy(KP, 0, P, 0, P_SZ); - - /* - * (2) - * Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with the - * second 32-bits of the key, and so on for all bits of the key - * (up to P[17]). Repeatedly cycle through the key bits until the - * entire P-array has been XOR-ed with the key bits - */ - int keyLength = key.length; - int keyIndex = 0; - - for (int i=0; i < P_SZ; i++) - { - // get the 32 bits of the key, in 4 * 8 bit chunks - int data = 0x0000000; - for (int j=0; j < 4; j++) - { - // create a 32 bit block - data = (data << 8) | (key[keyIndex++] & 0xff); - - // wrap when we get to the end of the key - if (keyIndex >= keyLength) - { - keyIndex = 0; - } - } - // XOR the newly created 32 bit chunk onto the P-array - P[i] ^= data; - } - - /* - * (3) - * Encrypt the all-zero string with the Blowfish algorithm, using - * the subkeys described in (1) and (2) - * - * (4) - * Replace P1 and P2 with the output of step (3) - * - * (5) - * Encrypt the output of step(3) using the Blowfish algorithm, - * with the modified subkeys. - * - * (6) - * Replace P3 and P4 with the output of step (5) - * - * (7) - * Continue the process, replacing all elements of the P-array - * and then all four S-boxes in order, with the output of the - * continuously changing Blowfish algorithm - */ - - processTable(0, 0, P); - processTable(P[P_SZ - 2], P[P_SZ - 1], S0); - processTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1); - processTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2); - processTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3); - } - - /** - * Encrypt the given input starting at the given offset and place - * the result in the provided buffer starting at the given offset. - * The input will be an exact multiple of our blocksize. - */ - private void encryptBlock( - byte[] src, - int srcIndex, - byte[] dst, - int dstIndex) - { - int xl = BytesTo32bits(src, srcIndex); - int xr = BytesTo32bits(src, srcIndex+4); - - xl ^= P[0]; - - for (int i = 1; i < ROUNDS; i += 2) - { - xr ^= F(xl) ^ P[i]; - xl ^= F(xr) ^ P[i + 1]; - } - - xr ^= P[ROUNDS + 1]; - - Bits32ToBytes(xr, dst, dstIndex); - Bits32ToBytes(xl, dst, dstIndex + 4); - } - - /** - * Decrypt the given input starting at the given offset and place - * the result in the provided buffer starting at the given offset. - * The input will be an exact multiple of our blocksize. - */ - private void decryptBlock( - byte[] src, - int srcIndex, - byte[] dst, - int dstIndex) - { - int xl = BytesTo32bits(src, srcIndex); - int xr = BytesTo32bits(src, srcIndex + 4); - - xl ^= P[ROUNDS + 1]; - - for (int i = ROUNDS; i > 0 ; i -= 2) - { - xr ^= F(xl) ^ P[i]; - xl ^= F(xr) ^ P[i - 1]; - } - - xr ^= P[0]; - - Bits32ToBytes(xr, dst, dstIndex); - Bits32ToBytes(xl, dst, dstIndex+4); - } - - private int BytesTo32bits(byte[] b, int i) - { - return ((b[i] & 0xff) << 24) | - ((b[i+1] & 0xff) << 16) | - ((b[i+2] & 0xff) << 8) | - ((b[i+3] & 0xff)); - } - - private void Bits32ToBytes(int in, byte[] b, int offset) - { - b[offset + 3] = (byte)in; - b[offset + 2] = (byte)(in >> 8); - b[offset + 1] = (byte)(in >> 16); - b[offset] = (byte)(in >> 24); - } -} diff --git a/src/org/bouncycastle/crypto/engines/DESEngine.java b/src/org/bouncycastle/crypto/engines/DESEngine.java deleted file mode 100644 index b04911c..0000000 --- a/src/org/bouncycastle/crypto/engines/DESEngine.java +++ /dev/null @@ -1,494 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * a class that provides a basic DES engine. - */ -public class DESEngine - implements BlockCipher -{ - protected static final int BLOCK_SIZE = 8; - - private int[] workingKey = null; - - /** - * standard constructor. - */ - public DESEngine() - { - } - - /** - * initialise a DES cipher. - * - * @param encrypting whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean encrypting, - CipherParameters params) - { - if (params instanceof KeyParameter) - { - if (((KeyParameter)params).getKey().length > 8) - { - throw new IllegalArgumentException("DES key too long - should be 8 bytes"); - } - - workingKey = generateWorkingKey(encrypting, - ((KeyParameter)params).getKey()); - - return; - } - - throw new IllegalArgumentException("invalid parameter passed to DES init - " + params.getClass().getName()); - } - - public String getAlgorithmName() - { - return "DES"; - } - - public int getBlockSize() - { - return BLOCK_SIZE; - } - - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - { - if (workingKey == null) - { - throw new IllegalStateException("DES engine not initialised"); - } - - if ((inOff + BLOCK_SIZE) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + BLOCK_SIZE) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - desFunc(workingKey, in, inOff, out, outOff); - - return BLOCK_SIZE; - } - - public void reset() - { - } - - /** - * what follows is mainly taken from "Applied Cryptography", by - * Bruce Schneier, however it also bears great resemblance to Richard - * Outerbridge's D3DES... - */ - -// private static final short[] Df_Key = -// { -// 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, -// 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10, -// 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 -// }; - - private static final short[] bytebit = - { - 0200, 0100, 040, 020, 010, 04, 02, 01 - }; - - private static final int[] bigbyte = - { - 0x800000, 0x400000, 0x200000, 0x100000, - 0x80000, 0x40000, 0x20000, 0x10000, - 0x8000, 0x4000, 0x2000, 0x1000, - 0x800, 0x400, 0x200, 0x100, - 0x80, 0x40, 0x20, 0x10, - 0x8, 0x4, 0x2, 0x1 - }; - - /* - * Use the key schedule specified in the Standard (ANSI X3.92-1981). - */ - - private static final byte[] pc1 = - { - 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, - 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, - 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, - 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 - }; - - private static final byte[] totrot = - { - 1, 2, 4, 6, 8, 10, 12, 14, - 15, 17, 19, 21, 23, 25, 27, 28 - }; - - private static final byte[] pc2 = - { - 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, - 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, - 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, - 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 - }; - - private static final int[] SP1 = { - 0x01010400, 0x00000000, 0x00010000, 0x01010404, - 0x01010004, 0x00010404, 0x00000004, 0x00010000, - 0x00000400, 0x01010400, 0x01010404, 0x00000400, - 0x01000404, 0x01010004, 0x01000000, 0x00000004, - 0x00000404, 0x01000400, 0x01000400, 0x00010400, - 0x00010400, 0x01010000, 0x01010000, 0x01000404, - 0x00010004, 0x01000004, 0x01000004, 0x00010004, - 0x00000000, 0x00000404, 0x00010404, 0x01000000, - 0x00010000, 0x01010404, 0x00000004, 0x01010000, - 0x01010400, 0x01000000, 0x01000000, 0x00000400, - 0x01010004, 0x00010000, 0x00010400, 0x01000004, - 0x00000400, 0x00000004, 0x01000404, 0x00010404, - 0x01010404, 0x00010004, 0x01010000, 0x01000404, - 0x01000004, 0x00000404, 0x00010404, 0x01010400, - 0x00000404, 0x01000400, 0x01000400, 0x00000000, - 0x00010004, 0x00010400, 0x00000000, 0x01010004 - }; - - private static final int[] SP2 = { - 0x80108020, 0x80008000, 0x00008000, 0x00108020, - 0x00100000, 0x00000020, 0x80100020, 0x80008020, - 0x80000020, 0x80108020, 0x80108000, 0x80000000, - 0x80008000, 0x00100000, 0x00000020, 0x80100020, - 0x00108000, 0x00100020, 0x80008020, 0x00000000, - 0x80000000, 0x00008000, 0x00108020, 0x80100000, - 0x00100020, 0x80000020, 0x00000000, 0x00108000, - 0x00008020, 0x80108000, 0x80100000, 0x00008020, - 0x00000000, 0x00108020, 0x80100020, 0x00100000, - 0x80008020, 0x80100000, 0x80108000, 0x00008000, - 0x80100000, 0x80008000, 0x00000020, 0x80108020, - 0x00108020, 0x00000020, 0x00008000, 0x80000000, - 0x00008020, 0x80108000, 0x00100000, 0x80000020, - 0x00100020, 0x80008020, 0x80000020, 0x00100020, - 0x00108000, 0x00000000, 0x80008000, 0x00008020, - 0x80000000, 0x80100020, 0x80108020, 0x00108000 - }; - - private static final int[] SP3 = { - 0x00000208, 0x08020200, 0x00000000, 0x08020008, - 0x08000200, 0x00000000, 0x00020208, 0x08000200, - 0x00020008, 0x08000008, 0x08000008, 0x00020000, - 0x08020208, 0x00020008, 0x08020000, 0x00000208, - 0x08000000, 0x00000008, 0x08020200, 0x00000200, - 0x00020200, 0x08020000, 0x08020008, 0x00020208, - 0x08000208, 0x00020200, 0x00020000, 0x08000208, - 0x00000008, 0x08020208, 0x00000200, 0x08000000, - 0x08020200, 0x08000000, 0x00020008, 0x00000208, - 0x00020000, 0x08020200, 0x08000200, 0x00000000, - 0x00000200, 0x00020008, 0x08020208, 0x08000200, - 0x08000008, 0x00000200, 0x00000000, 0x08020008, - 0x08000208, 0x00020000, 0x08000000, 0x08020208, - 0x00000008, 0x00020208, 0x00020200, 0x08000008, - 0x08020000, 0x08000208, 0x00000208, 0x08020000, - 0x00020208, 0x00000008, 0x08020008, 0x00020200 - }; - - private static final int[] SP4 = { - 0x00802001, 0x00002081, 0x00002081, 0x00000080, - 0x00802080, 0x00800081, 0x00800001, 0x00002001, - 0x00000000, 0x00802000, 0x00802000, 0x00802081, - 0x00000081, 0x00000000, 0x00800080, 0x00800001, - 0x00000001, 0x00002000, 0x00800000, 0x00802001, - 0x00000080, 0x00800000, 0x00002001, 0x00002080, - 0x00800081, 0x00000001, 0x00002080, 0x00800080, - 0x00002000, 0x00802080, 0x00802081, 0x00000081, - 0x00800080, 0x00800001, 0x00802000, 0x00802081, - 0x00000081, 0x00000000, 0x00000000, 0x00802000, - 0x00002080, 0x00800080, 0x00800081, 0x00000001, - 0x00802001, 0x00002081, 0x00002081, 0x00000080, - 0x00802081, 0x00000081, 0x00000001, 0x00002000, - 0x00800001, 0x00002001, 0x00802080, 0x00800081, - 0x00002001, 0x00002080, 0x00800000, 0x00802001, - 0x00000080, 0x00800000, 0x00002000, 0x00802080 - }; - - private static final int[] SP5 = { - 0x00000100, 0x02080100, 0x02080000, 0x42000100, - 0x00080000, 0x00000100, 0x40000000, 0x02080000, - 0x40080100, 0x00080000, 0x02000100, 0x40080100, - 0x42000100, 0x42080000, 0x00080100, 0x40000000, - 0x02000000, 0x40080000, 0x40080000, 0x00000000, - 0x40000100, 0x42080100, 0x42080100, 0x02000100, - 0x42080000, 0x40000100, 0x00000000, 0x42000000, - 0x02080100, 0x02000000, 0x42000000, 0x00080100, - 0x00080000, 0x42000100, 0x00000100, 0x02000000, - 0x40000000, 0x02080000, 0x42000100, 0x40080100, - 0x02000100, 0x40000000, 0x42080000, 0x02080100, - 0x40080100, 0x00000100, 0x02000000, 0x42080000, - 0x42080100, 0x00080100, 0x42000000, 0x42080100, - 0x02080000, 0x00000000, 0x40080000, 0x42000000, - 0x00080100, 0x02000100, 0x40000100, 0x00080000, - 0x00000000, 0x40080000, 0x02080100, 0x40000100 - }; - - private static final int[] SP6 = { - 0x20000010, 0x20400000, 0x00004000, 0x20404010, - 0x20400000, 0x00000010, 0x20404010, 0x00400000, - 0x20004000, 0x00404010, 0x00400000, 0x20000010, - 0x00400010, 0x20004000, 0x20000000, 0x00004010, - 0x00000000, 0x00400010, 0x20004010, 0x00004000, - 0x00404000, 0x20004010, 0x00000010, 0x20400010, - 0x20400010, 0x00000000, 0x00404010, 0x20404000, - 0x00004010, 0x00404000, 0x20404000, 0x20000000, - 0x20004000, 0x00000010, 0x20400010, 0x00404000, - 0x20404010, 0x00400000, 0x00004010, 0x20000010, - 0x00400000, 0x20004000, 0x20000000, 0x00004010, - 0x20000010, 0x20404010, 0x00404000, 0x20400000, - 0x00404010, 0x20404000, 0x00000000, 0x20400010, - 0x00000010, 0x00004000, 0x20400000, 0x00404010, - 0x00004000, 0x00400010, 0x20004010, 0x00000000, - 0x20404000, 0x20000000, 0x00400010, 0x20004010 - }; - - private static final int[] SP7 = { - 0x00200000, 0x04200002, 0x04000802, 0x00000000, - 0x00000800, 0x04000802, 0x00200802, 0x04200800, - 0x04200802, 0x00200000, 0x00000000, 0x04000002, - 0x00000002, 0x04000000, 0x04200002, 0x00000802, - 0x04000800, 0x00200802, 0x00200002, 0x04000800, - 0x04000002, 0x04200000, 0x04200800, 0x00200002, - 0x04200000, 0x00000800, 0x00000802, 0x04200802, - 0x00200800, 0x00000002, 0x04000000, 0x00200800, - 0x04000000, 0x00200800, 0x00200000, 0x04000802, - 0x04000802, 0x04200002, 0x04200002, 0x00000002, - 0x00200002, 0x04000000, 0x04000800, 0x00200000, - 0x04200800, 0x00000802, 0x00200802, 0x04200800, - 0x00000802, 0x04000002, 0x04200802, 0x04200000, - 0x00200800, 0x00000000, 0x00000002, 0x04200802, - 0x00000000, 0x00200802, 0x04200000, 0x00000800, - 0x04000002, 0x04000800, 0x00000800, 0x00200002 - }; - - private static final int[] SP8 = { - 0x10001040, 0x00001000, 0x00040000, 0x10041040, - 0x10000000, 0x10001040, 0x00000040, 0x10000000, - 0x00040040, 0x10040000, 0x10041040, 0x00041000, - 0x10041000, 0x00041040, 0x00001000, 0x00000040, - 0x10040000, 0x10000040, 0x10001000, 0x00001040, - 0x00041000, 0x00040040, 0x10040040, 0x10041000, - 0x00001040, 0x00000000, 0x00000000, 0x10040040, - 0x10000040, 0x10001000, 0x00041040, 0x00040000, - 0x00041040, 0x00040000, 0x10041000, 0x00001000, - 0x00000040, 0x10040040, 0x00001000, 0x00041040, - 0x10001000, 0x00000040, 0x10000040, 0x10040000, - 0x10040040, 0x10000000, 0x00040000, 0x10001040, - 0x00000000, 0x10041040, 0x00040040, 0x10000040, - 0x10040000, 0x10001000, 0x10001040, 0x00000000, - 0x10041040, 0x00041000, 0x00041000, 0x00001040, - 0x00001040, 0x00040040, 0x10000000, 0x10041000 - }; - - /** - * generate an integer based working key based on our secret key - * and what we processing we are planning to do. - * - * Acknowledgements for this routine go to James Gillogly & Phil Karn. - * (whoever, and wherever they are!). - */ - protected int[] generateWorkingKey( - boolean encrypting, - byte[] key) - { - int[] newKey = new int[32]; - boolean[] pc1m = new boolean[56], - pcr = new boolean[56]; - - for (int j = 0; j < 56; j++) - { - int l = pc1[j]; - - pc1m[j] = ((key[l >>> 3] & bytebit[l & 07]) != 0); - } - - for (int i = 0; i < 16; i++) - { - int l, m, n; - - if (encrypting) - { - m = i << 1; - } - else - { - m = (15 - i) << 1; - } - - n = m + 1; - newKey[m] = newKey[n] = 0; - - for (int j = 0; j < 28; j++) - { - l = j + totrot[i]; - if (l < 28) - { - pcr[j] = pc1m[l]; - } - else - { - pcr[j] = pc1m[l - 28]; - } - } - - for (int j = 28; j < 56; j++) - { - l = j + totrot[i]; - if (l < 56) - { - pcr[j] = pc1m[l]; - } - else - { - pcr[j] = pc1m[l - 28]; - } - } - - for (int j = 0; j < 24; j++) - { - if (pcr[pc2[j]]) - { - newKey[m] |= bigbyte[j]; - } - - if (pcr[pc2[j + 24]]) - { - newKey[n] |= bigbyte[j]; - } - } - } - - // - // store the processed key - // - for (int i = 0; i != 32; i += 2) - { - int i1, i2; - - i1 = newKey[i]; - i2 = newKey[i + 1]; - - newKey[i] = ((i1 & 0x00fc0000) << 6) | ((i1 & 0x00000fc0) << 10) - | ((i2 & 0x00fc0000) >>> 10) | ((i2 & 0x00000fc0) >>> 6); - - newKey[i + 1] = ((i1 & 0x0003f000) << 12) | ((i1 & 0x0000003f) << 16) - | ((i2 & 0x0003f000) >>> 4) | (i2 & 0x0000003f); - } - - return newKey; - } - - /** - * the DES engine. - */ - protected void desFunc( - int[] wKey, - byte[] in, - int inOff, - byte[] out, - int outOff) - { - int work, right, left; - - left = (in[inOff + 0] & 0xff) << 24; - left |= (in[inOff + 1] & 0xff) << 16; - left |= (in[inOff + 2] & 0xff) << 8; - left |= (in[inOff + 3] & 0xff); - - right = (in[inOff + 4] & 0xff) << 24; - right |= (in[inOff + 5] & 0xff) << 16; - right |= (in[inOff + 6] & 0xff) << 8; - right |= (in[inOff + 7] & 0xff); - - work = ((left >>> 4) ^ right) & 0x0f0f0f0f; - right ^= work; - left ^= (work << 4); - work = ((left >>> 16) ^ right) & 0x0000ffff; - right ^= work; - left ^= (work << 16); - work = ((right >>> 2) ^ left) & 0x33333333; - left ^= work; - right ^= (work << 2); - work = ((right >>> 8) ^ left) & 0x00ff00ff; - left ^= work; - right ^= (work << 8); - right = ((right << 1) | ((right >>> 31) & 1)) & 0xffffffff; - work = (left ^ right) & 0xaaaaaaaa; - left ^= work; - right ^= work; - left = ((left << 1) | ((left >>> 31) & 1)) & 0xffffffff; - - for (int round = 0; round < 8; round++) - { - int fval; - - work = (right << 28) | (right >>> 4); - work ^= wKey[round * 4 + 0]; - fval = SP7[ work & 0x3f]; - fval |= SP5[(work >>> 8) & 0x3f]; - fval |= SP3[(work >>> 16) & 0x3f]; - fval |= SP1[(work >>> 24) & 0x3f]; - work = right ^ wKey[round * 4 + 1]; - fval |= SP8[ work & 0x3f]; - fval |= SP6[(work >>> 8) & 0x3f]; - fval |= SP4[(work >>> 16) & 0x3f]; - fval |= SP2[(work >>> 24) & 0x3f]; - left ^= fval; - work = (left << 28) | (left >>> 4); - work ^= wKey[round * 4 + 2]; - fval = SP7[ work & 0x3f]; - fval |= SP5[(work >>> 8) & 0x3f]; - fval |= SP3[(work >>> 16) & 0x3f]; - fval |= SP1[(work >>> 24) & 0x3f]; - work = left ^ wKey[round * 4 + 3]; - fval |= SP8[ work & 0x3f]; - fval |= SP6[(work >>> 8) & 0x3f]; - fval |= SP4[(work >>> 16) & 0x3f]; - fval |= SP2[(work >>> 24) & 0x3f]; - right ^= fval; - } - - right = (right << 31) | (right >>> 1); - work = (left ^ right) & 0xaaaaaaaa; - left ^= work; - right ^= work; - left = (left << 31) | (left >>> 1); - work = ((left >>> 8) ^ right) & 0x00ff00ff; - right ^= work; - left ^= (work << 8); - work = ((left >>> 2) ^ right) & 0x33333333; - right ^= work; - left ^= (work << 2); - work = ((right >>> 16) ^ left) & 0x0000ffff; - left ^= work; - right ^= (work << 16); - work = ((right >>> 4) ^ left) & 0x0f0f0f0f; - left ^= work; - right ^= (work << 4); - - out[outOff + 0] = (byte)((right >>> 24) & 0xff); - out[outOff + 1] = (byte)((right >>> 16) & 0xff); - out[outOff + 2] = (byte)((right >>> 8) & 0xff); - out[outOff + 3] = (byte)(right & 0xff); - out[outOff + 4] = (byte)((left >>> 24) & 0xff); - out[outOff + 5] = (byte)((left >>> 16) & 0xff); - out[outOff + 6] = (byte)((left >>> 8) & 0xff); - out[outOff + 7] = (byte)(left & 0xff); - } -} diff --git a/src/org/bouncycastle/crypto/engines/DESedeEngine.java b/src/org/bouncycastle/crypto/engines/DESedeEngine.java deleted file mode 100644 index d1935ec..0000000 --- a/src/org/bouncycastle/crypto/engines/DESedeEngine.java +++ /dev/null @@ -1,126 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * a class that provides a basic DESede (or Triple DES) engine. - */ -public class DESedeEngine - extends DESEngine -{ - protected static final int BLOCK_SIZE = 8; - - private int[] workingKey1 = null; - private int[] workingKey2 = null; - private int[] workingKey3 = null; - - private boolean forEncryption; - - /** - * standard constructor. - */ - public DESedeEngine() - { - } - - /** - * initialise a DESede cipher. - * - * @param encrypting whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean encrypting, - CipherParameters params) - { - if (!(params instanceof KeyParameter)) - { - throw new IllegalArgumentException("invalid parameter passed to DESede init - " + params.getClass().getName()); - } - - byte[] keyMaster = ((KeyParameter)params).getKey(); - - if (keyMaster.length != 24 && keyMaster.length != 16) - { - throw new IllegalArgumentException("key size must be 16 or 24 bytes."); - } - - this.forEncryption = encrypting; - - byte[] key1 = new byte[8]; - System.arraycopy(keyMaster, 0, key1, 0, key1.length); - workingKey1 = generateWorkingKey(encrypting, key1); - - byte[] key2 = new byte[8]; - System.arraycopy(keyMaster, 8, key2, 0, key2.length); - workingKey2 = generateWorkingKey(!encrypting, key2); - - if (keyMaster.length == 24) - { - byte[] key3 = new byte[8]; - System.arraycopy(keyMaster, 16, key3, 0, key3.length); - workingKey3 = generateWorkingKey(encrypting, key3); - } - else // 16 byte key - { - workingKey3 = workingKey1; - } - } - - public String getAlgorithmName() - { - return "DESede"; - } - - public int getBlockSize() - { - return BLOCK_SIZE; - } - - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - { - if (workingKey1 == null) - { - throw new IllegalStateException("DESede engine not initialised"); - } - - if ((inOff + BLOCK_SIZE) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + BLOCK_SIZE) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - byte[] temp = new byte[BLOCK_SIZE]; - - if (forEncryption) - { - desFunc(workingKey1, in, inOff, temp, 0); - desFunc(workingKey2, temp, 0, temp, 0); - desFunc(workingKey3, temp, 0, out, outOff); - } - else - { - desFunc(workingKey3, in, inOff, temp, 0); - desFunc(workingKey2, temp, 0, temp, 0); - desFunc(workingKey1, temp, 0, out, outOff); - } - - return BLOCK_SIZE; - } - - public void reset() - { - } -} diff --git a/src/org/bouncycastle/crypto/engines/DESedeWrapEngine.java b/src/org/bouncycastle/crypto/engines/DESedeWrapEngine.java deleted file mode 100644 index 9d571c3..0000000 --- a/src/org/bouncycastle/crypto/engines/DESedeWrapEngine.java +++ /dev/null @@ -1,348 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.Wrapper; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.util.Arrays; - -/** - * Wrap keys according to - * - * draft-ietf-smime-key-wrap-01.txt. - *

        - * Note: - *

          - *
        • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage. - *
        • if you are using this to wrap triple-des keys you need to set the - * parity bits on the key and, if it's a two-key triple-des key, pad it - * yourself. - *
        - */ -public class DESedeWrapEngine - implements Wrapper -{ - /** Field engine */ - private CBCBlockCipher engine; - - /** Field param */ - private KeyParameter param; - - /** Field paramPlusIV */ - private ParametersWithIV paramPlusIV; - - /** Field iv */ - private byte[] iv; - - /** Field forWrapping */ - private boolean forWrapping; - - /** Field IV2 */ - private static final byte[] IV2 = { (byte) 0x4a, (byte) 0xdd, (byte) 0xa2, - (byte) 0x2c, (byte) 0x79, (byte) 0xe8, - (byte) 0x21, (byte) 0x05 }; - - // - // checksum digest - // - Digest sha1 = new SHA1Digest(); - byte[] digest = new byte[20]; - - /** - * Method init - * - * @param forWrapping - * @param param - */ - public void init(boolean forWrapping, CipherParameters param) - { - - this.forWrapping = forWrapping; - this.engine = new CBCBlockCipher(new DESedeEngine()); - - SecureRandom sr; - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom pr = (ParametersWithRandom) param; - param = pr.getParameters(); - sr = pr.getRandom(); - } - else - { - sr = new SecureRandom(); - } - - if (param instanceof KeyParameter) - { - this.param = (KeyParameter)param; - - if (this.forWrapping) - { - - // Hm, we have no IV but we want to wrap ?!? - // well, then we have to create our own IV. - this.iv = new byte[8]; - sr.nextBytes(iv); - - this.paramPlusIV = new ParametersWithIV(this.param, this.iv); - } - } - else if (param instanceof ParametersWithIV) - { - this.paramPlusIV = (ParametersWithIV)param; - this.iv = this.paramPlusIV.getIV(); - this.param = (KeyParameter)this.paramPlusIV.getParameters(); - - if (this.forWrapping) - { - if ((this.iv == null) || (this.iv.length != 8)) - { - throw new IllegalArgumentException("IV is not 8 octets"); - } - } - else - { - throw new IllegalArgumentException( - "You should not supply an IV for unwrapping"); - } - } - } - - /** - * Method getAlgorithmName - * - * @return the algorithm name "DESede". - */ - public String getAlgorithmName() - { - return "DESede"; - } - - /** - * Method wrap - * - * @param in - * @param inOff - * @param inLen - * @return the wrapped bytes. - */ - public byte[] wrap(byte[] in, int inOff, int inLen) - { - if (!forWrapping) - { - throw new IllegalStateException("Not initialized for wrapping"); - } - - byte keyToBeWrapped[] = new byte[inLen]; - - System.arraycopy(in, inOff, keyToBeWrapped, 0, inLen); - - // Compute the CMS Key Checksum, (section 5.6.1), call this CKS. - byte[] CKS = calculateCMSKeyChecksum(keyToBeWrapped); - - // Let WKCKS = WK || CKS where || is concatenation. - byte[] WKCKS = new byte[keyToBeWrapped.length + CKS.length]; - - System.arraycopy(keyToBeWrapped, 0, WKCKS, 0, keyToBeWrapped.length); - System.arraycopy(CKS, 0, WKCKS, keyToBeWrapped.length, CKS.length); - - // Encrypt WKCKS in CBC mode using KEK as the key and IV as the - // initialization vector. Call the results TEMP1. - - int blockSize = engine.getBlockSize(); - - if (WKCKS.length % blockSize != 0) - { - throw new IllegalStateException("Not multiple of block length"); - } - - engine.init(true, paramPlusIV); - - byte TEMP1[] = new byte[WKCKS.length]; - - for (int currentBytePos = 0; currentBytePos != WKCKS.length; currentBytePos += blockSize) - { - engine.processBlock(WKCKS, currentBytePos, TEMP1, currentBytePos); - } - - // Let TEMP2 = IV || TEMP1. - byte[] TEMP2 = new byte[this.iv.length + TEMP1.length]; - - System.arraycopy(this.iv, 0, TEMP2, 0, this.iv.length); - System.arraycopy(TEMP1, 0, TEMP2, this.iv.length, TEMP1.length); - - // Reverse the order of the octets in TEMP2 and call the result TEMP3. - byte[] TEMP3 = reverse(TEMP2); - - // Encrypt TEMP3 in CBC mode using the KEK and an initialization vector - // of 0x 4a dd a2 2c 79 e8 21 05. The resulting cipher text is the desired - // result. It is 40 octets long if a 168 bit key is being wrapped. - ParametersWithIV param2 = new ParametersWithIV(this.param, IV2); - - this.engine.init(true, param2); - - for (int currentBytePos = 0; currentBytePos != TEMP3.length; currentBytePos += blockSize) - { - engine.processBlock(TEMP3, currentBytePos, TEMP3, currentBytePos); - } - - return TEMP3; - } - - /** - * Method unwrap - * - * @param in - * @param inOff - * @param inLen - * @return the unwrapped bytes. - * @throws InvalidCipherTextException - */ - public byte[] unwrap(byte[] in, int inOff, int inLen) - throws InvalidCipherTextException - { - if (forWrapping) - { - throw new IllegalStateException("Not set for unwrapping"); - } - - if (in == null) - { - throw new InvalidCipherTextException("Null pointer as ciphertext"); - } - - final int blockSize = engine.getBlockSize(); - if (inLen % blockSize != 0) - { - throw new InvalidCipherTextException("Ciphertext not multiple of " + blockSize); - } - - /* - // Check if the length of the cipher text is reasonable given the key - // type. It must be 40 bytes for a 168 bit key and either 32, 40, or - // 48 bytes for a 128, 192, or 256 bit key. If the length is not supported - // or inconsistent with the algorithm for which the key is intended, - // return error. - // - // we do not accept 168 bit keys. it has to be 192 bit. - int lengthA = (estimatedKeyLengthInBit / 8) + 16; - int lengthB = estimatedKeyLengthInBit % 8; - - if ((lengthA != keyToBeUnwrapped.length) || (lengthB != 0)) { - throw new XMLSecurityException("empty"); - } - */ - - // Decrypt the cipher text with TRIPLedeS in CBC mode using the KEK - // and an initialization vector (IV) of 0x4adda22c79e82105. Call the output TEMP3. - ParametersWithIV param2 = new ParametersWithIV(this.param, IV2); - - this.engine.init(false, param2); - - byte TEMP3[] = new byte[inLen]; - - for (int currentBytePos = 0; currentBytePos != inLen; currentBytePos += blockSize) - { - engine.processBlock(in, inOff + currentBytePos, TEMP3, currentBytePos); - } - - // Reverse the order of the octets in TEMP3 and call the result TEMP2. - byte[] TEMP2 = reverse(TEMP3); - - // Decompose TEMP2 into IV, the first 8 octets, and TEMP1, the remaining octets. - this.iv = new byte[8]; - - byte[] TEMP1 = new byte[TEMP2.length - 8]; - - System.arraycopy(TEMP2, 0, this.iv, 0, 8); - System.arraycopy(TEMP2, 8, TEMP1, 0, TEMP2.length - 8); - - // Decrypt TEMP1 using TRIPLedeS in CBC mode using the KEK and the IV - // found in the previous step. Call the result WKCKS. - this.paramPlusIV = new ParametersWithIV(this.param, this.iv); - - this.engine.init(false, this.paramPlusIV); - - byte[] WKCKS = new byte[TEMP1.length]; - - for (int currentBytePos = 0; currentBytePos != WKCKS.length; currentBytePos += blockSize) - { - engine.processBlock(TEMP1, currentBytePos, WKCKS, currentBytePos); - } - - // Decompose WKCKS. CKS is the last 8 octets and WK, the wrapped key, are - // those octets before the CKS. - byte[] result = new byte[WKCKS.length - 8]; - byte[] CKStoBeVerified = new byte[8]; - - System.arraycopy(WKCKS, 0, result, 0, WKCKS.length - 8); - System.arraycopy(WKCKS, WKCKS.length - 8, CKStoBeVerified, 0, 8); - - // Calculate a CMS Key Checksum, (section 5.6.1), over the WK and compare - // with the CKS extracted in the above step. If they are not equal, return error. - if (!checkCMSKeyChecksum(result, CKStoBeVerified)) - { - throw new InvalidCipherTextException( - "Checksum inside ciphertext is corrupted"); - } - - // WK is the wrapped key, now extracted for use in data decryption. - return result; - } - - /** - * Some key wrap algorithms make use of the Key Checksum defined - * in CMS [CMS-Algorithms]. This is used to provide an integrity - * check value for the key being wrapped. The algorithm is - * - * - Compute the 20 octet SHA-1 hash on the key being wrapped. - * - Use the first 8 octets of this hash as the checksum value. - * - * @param key - * @return the CMS checksum. - * @throws RuntimeException - * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum - */ - private byte[] calculateCMSKeyChecksum( - byte[] key) - { - byte[] result = new byte[8]; - - sha1.update(key, 0, key.length); - sha1.doFinal(digest, 0); - - System.arraycopy(digest, 0, result, 0, 8); - - return result; - } - - /** - * @param key - * @param checksum - * @return true if okay, false otherwise. - * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum - */ - private boolean checkCMSKeyChecksum( - byte[] key, - byte[] checksum) - { - return Arrays.constantTimeAreEqual(calculateCMSKeyChecksum(key), checksum); - } - - private static byte[] reverse(byte[] bs) - { - byte[] result = new byte[bs.length]; - for (int i = 0; i < bs.length; i++) - { - result[i] = bs[bs.length - (i + 1)]; - } - return result; - } -} diff --git a/src/org/bouncycastle/crypto/engines/HC128Engine.java b/src/org/bouncycastle/crypto/engines/HC128Engine.java deleted file mode 100644 index bf9a1b0..0000000 --- a/src/org/bouncycastle/crypto/engines/HC128Engine.java +++ /dev/null @@ -1,256 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.StreamCipher; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * HC-128 is a software-efficient stream cipher created by Hongjun Wu. It - * generates keystream from a 128-bit secret key and a 128-bit initialization - * vector. - *

        - * http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf - *

        - * It is a third phase candidate in the eStream contest, and is patent-free. - * No attacks are known as of today (April 2007). See - * - * http://www.ecrypt.eu.org/stream/hcp3.html - *

        - */ -public class HC128Engine - implements StreamCipher -{ - private int[] p = new int[512]; - private int[] q = new int[512]; - private int cnt = 0; - - private static int f1(int x) - { - return rotateRight(x, 7) ^ rotateRight(x, 18) - ^ (x >>> 3); - } - - private static int f2(int x) - { - return rotateRight(x, 17) ^ rotateRight(x, 19) - ^ (x >>> 10); - } - - private int g1(int x, int y, int z) - { - return (rotateRight(x, 10) ^ rotateRight(z, 23)) - + rotateRight(y, 8); - } - - private int g2(int x, int y, int z) - { - return (rotateLeft(x, 10) ^ rotateLeft(z, 23)) + rotateLeft(y, 8); - } - - private static int rotateLeft( - int x, - int bits) - { - return (x << bits) | (x >>> -bits); - } - - private static int rotateRight( - int x, - int bits) - { - return (x >>> bits) | (x << -bits); - } - - private int h1(int x) - { - return q[x & 0xFF] + q[((x >> 16) & 0xFF) + 256]; - } - - private int h2(int x) - { - return p[x & 0xFF] + p[((x >> 16) & 0xFF) + 256]; - } - - private static int mod1024(int x) - { - return x & 0x3FF; - } - - private static int mod512(int x) - { - return x & 0x1FF; - } - - private static int dim(int x, int y) - { - return mod512(x - y); - } - - private int step() - { - int j = mod512(cnt); - int ret; - if (cnt < 512) - { - p[j] += g1(p[dim(j, 3)], p[dim(j, 10)], p[dim(j, 511)]); - ret = h1(p[dim(j, 12)]) ^ p[j]; - } - else - { - q[j] += g2(q[dim(j, 3)], q[dim(j, 10)], q[dim(j, 511)]); - ret = h2(q[dim(j, 12)]) ^ q[j]; - } - cnt = mod1024(cnt + 1); - return ret; - } - - private byte[] key, iv; - private boolean initialised; - - private void init() - { - if (key.length != 16) - { - throw new java.lang.IllegalArgumentException( - "The key must be 128 bits long"); - } - - cnt = 0; - - int[] w = new int[1280]; - - for (int i = 0; i < 16; i++) - { - w[i >> 2] |= (key[i] & 0xff) << (8 * (i & 0x3)); - } - System.arraycopy(w, 0, w, 4, 4); - - for (int i = 0; i < iv.length && i < 16; i++) - { - w[(i >> 2) + 8] |= (iv[i] & 0xff) << (8 * (i & 0x3)); - } - System.arraycopy(w, 8, w, 12, 4); - - for (int i = 16; i < 1280; i++) - { - w[i] = f2(w[i - 2]) + w[i - 7] + f1(w[i - 15]) + w[i - 16] + i; - } - - System.arraycopy(w, 256, p, 0, 512); - System.arraycopy(w, 768, q, 0, 512); - - for (int i = 0; i < 512; i++) - { - p[i] = step(); - } - for (int i = 0; i < 512; i++) - { - q[i] = step(); - } - - cnt = 0; - } - - public String getAlgorithmName() - { - return "HC-128"; - } - - /** - * Initialise a HC-128 cipher. - * - * @param forEncryption whether or not we are for encryption. Irrelevant, as - * encryption and decryption are the same. - * @param params the parameters required to set up the cipher. - * @throws IllegalArgumentException if the params argument is - * inappropriate (ie. the key is not 128 bit long). - */ - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException - { - CipherParameters keyParam = params; - - if (params instanceof ParametersWithIV) - { - iv = ((ParametersWithIV)params).getIV(); - keyParam = ((ParametersWithIV)params).getParameters(); - } - else - { - iv = new byte[0]; - } - - if (keyParam instanceof KeyParameter) - { - key = ((KeyParameter)keyParam).getKey(); - init(); - } - else - { - throw new IllegalArgumentException( - "Invalid parameter passed to HC128 init - " - + params.getClass().getName()); - } - - initialised = true; - } - - private byte[] buf = new byte[4]; - private int idx = 0; - - private byte getByte() - { - if (idx == 0) - { - int step = step(); - buf[0] = (byte)(step & 0xFF); - step >>= 8; - buf[1] = (byte)(step & 0xFF); - step >>= 8; - buf[2] = (byte)(step & 0xFF); - step >>= 8; - buf[3] = (byte)(step & 0xFF); - } - byte ret = buf[idx]; - idx = idx + 1 & 0x3; - return ret; - } - - public void processBytes(byte[] in, int inOff, int len, byte[] out, - int outOff) throws DataLengthException - { - if (!initialised) - { - throw new IllegalStateException(getAlgorithmName() - + " not initialised"); - } - - if ((inOff + len) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + len) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - for (int i = 0; i < len; i++) - { - out[outOff + i] = (byte)(in[inOff + i] ^ getByte()); - } - } - - public void reset() - { - idx = 0; - init(); - } - - public byte returnByte(byte in) - { - return (byte)(in ^ getByte()); - } -} diff --git a/src/org/bouncycastle/crypto/engines/HC256Engine.java b/src/org/bouncycastle/crypto/engines/HC256Engine.java deleted file mode 100644 index 5b78687..0000000 --- a/src/org/bouncycastle/crypto/engines/HC256Engine.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.StreamCipher; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * HC-256 is a software-efficient stream cipher created by Hongjun Wu. It - * generates keystream from a 256-bit secret key and a 256-bit initialization - * vector. - *

        - * http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf - *

        - * Its brother, HC-128, is a third phase candidate in the eStream contest. - * The algorithm is patent-free. No attacks are known as of today (April 2007). - * See - * - * http://www.ecrypt.eu.org/stream/hcp3.html - *

        - */ -public class HC256Engine - implements StreamCipher -{ - private int[] p = new int[1024]; - private int[] q = new int[1024]; - private int cnt = 0; - - private int step() - { - int j = cnt & 0x3FF; - int ret; - if (cnt < 1024) - { - int x = p[(j - 3 & 0x3FF)]; - int y = p[(j - 1023 & 0x3FF)]; - p[j] += p[(j - 10 & 0x3FF)] - + (rotateRight(x, 10) ^ rotateRight(y, 23)) - + q[((x ^ y) & 0x3FF)]; - - x = p[(j - 12 & 0x3FF)]; - ret = (q[x & 0xFF] + q[((x >> 8) & 0xFF) + 256] - + q[((x >> 16) & 0xFF) + 512] + q[((x >> 24) & 0xFF) + 768]) - ^ p[j]; - } - else - { - int x = q[(j - 3 & 0x3FF)]; - int y = q[(j - 1023 & 0x3FF)]; - q[j] += q[(j - 10 & 0x3FF)] - + (rotateRight(x, 10) ^ rotateRight(y, 23)) - + p[((x ^ y) & 0x3FF)]; - - x = q[(j - 12 & 0x3FF)]; - ret = (p[x & 0xFF] + p[((x >> 8) & 0xFF) + 256] - + p[((x >> 16) & 0xFF) + 512] + p[((x >> 24) & 0xFF) + 768]) - ^ q[j]; - } - cnt = cnt + 1 & 0x7FF; - return ret; - } - - private byte[] key, iv; - private boolean initialised; - - private void init() - { - if (key.length != 32 && key.length != 16) - { - throw new IllegalArgumentException( - "The key must be 128/256 bits long"); - } - - if (iv.length < 16) - { - throw new IllegalArgumentException( - "The IV must be at least 128 bits long"); - } - - if (key.length != 32) - { - byte[] k = new byte[32]; - - System.arraycopy(key, 0, k, 0, key.length); - System.arraycopy(key, 0, k, 16, key.length); - - key = k; - } - - if (iv.length < 32) - { - byte[] newIV = new byte[32]; - - System.arraycopy(iv, 0, newIV, 0, iv.length); - System.arraycopy(iv, 0, newIV, iv.length, newIV.length - iv.length); - - iv = newIV; - } - - cnt = 0; - - int[] w = new int[2560]; - - for (int i = 0; i < 32; i++) - { - w[i >> 2] |= (key[i] & 0xff) << (8 * (i & 0x3)); - } - - for (int i = 0; i < 32; i++) - { - w[(i >> 2) + 8] |= (iv[i] & 0xff) << (8 * (i & 0x3)); - } - - for (int i = 16; i < 2560; i++) - { - int x = w[i - 2]; - int y = w[i - 15]; - w[i] = (rotateRight(x, 17) ^ rotateRight(x, 19) ^ (x >>> 10)) - + w[i - 7] - + (rotateRight(y, 7) ^ rotateRight(y, 18) ^ (y >>> 3)) - + w[i - 16] + i; - } - - System.arraycopy(w, 512, p, 0, 1024); - System.arraycopy(w, 1536, q, 0, 1024); - - for (int i = 0; i < 4096; i++) - { - step(); - } - - cnt = 0; - } - - public String getAlgorithmName() - { - return "HC-256"; - } - - /** - * Initialise a HC-256 cipher. - * - * @param forEncryption whether or not we are for encryption. Irrelevant, as - * encryption and decryption are the same. - * @param params the parameters required to set up the cipher. - * @throws IllegalArgumentException if the params argument is - * inappropriate (ie. the key is not 256 bit long). - */ - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException - { - CipherParameters keyParam = params; - - if (params instanceof ParametersWithIV) - { - iv = ((ParametersWithIV)params).getIV(); - keyParam = ((ParametersWithIV)params).getParameters(); - } - else - { - iv = new byte[0]; - } - - if (keyParam instanceof KeyParameter) - { - key = ((KeyParameter)keyParam).getKey(); - init(); - } - else - { - throw new IllegalArgumentException( - "Invalid parameter passed to HC256 init - " - + params.getClass().getName()); - } - - initialised = true; - } - - private byte[] buf = new byte[4]; - private int idx = 0; - - private byte getByte() - { - if (idx == 0) - { - int step = step(); - buf[0] = (byte)(step & 0xFF); - step >>= 8; - buf[1] = (byte)(step & 0xFF); - step >>= 8; - buf[2] = (byte)(step & 0xFF); - step >>= 8; - buf[3] = (byte)(step & 0xFF); - } - byte ret = buf[idx]; - idx = idx + 1 & 0x3; - return ret; - } - - public void processBytes(byte[] in, int inOff, int len, byte[] out, - int outOff) throws DataLengthException - { - if (!initialised) - { - throw new IllegalStateException(getAlgorithmName() - + " not initialised"); - } - - if ((inOff + len) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + len) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - for (int i = 0; i < len; i++) - { - out[outOff + i] = (byte)(in[inOff + i] ^ getByte()); - } - } - - public void reset() - { - idx = 0; - init(); - } - - public byte returnByte(byte in) - { - return (byte)(in ^ getByte()); - } - - private static int rotateRight( - int x, - int bits) - { - return (x >>> bits) | (x << -bits); - } -} diff --git a/src/org/bouncycastle/crypto/engines/IDEAEngine.java b/src/org/bouncycastle/crypto/engines/IDEAEngine.java deleted file mode 100644 index 34e2817..0000000 --- a/src/org/bouncycastle/crypto/engines/IDEAEngine.java +++ /dev/null @@ -1,366 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * A class that provides a basic International Data Encryption Algorithm (IDEA) engine. - *

        - * This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" - * implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (baring 1 typo at the - * end of the mulinv function!). - *

        - * It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ - *

        - * Note 1: This algorithm is patented in the USA, Japan, and Europe including - * at least Austria, France, Germany, Italy, Netherlands, Spain, Sweden, Switzerland - * and the United Kingdom. Non-commercial use is free, however any commercial - * products are liable for royalties. Please see - * www.mediacrypt.com for - * further details. This announcement has been included at the request of - * the patent holders. - *

        - * Note 2: Due to the requests concerning the above, this algorithm is now only - * included in the extended Bouncy Castle provider and JCE signed jars. It is - * not included in the default distributions. - */ -public class IDEAEngine - implements BlockCipher -{ - protected static final int BLOCK_SIZE = 8; - - private int[] workingKey = null; - - /** - * standard constructor. - */ - public IDEAEngine() - { - } - - /** - * initialise an IDEA cipher. - * - * @param forEncryption whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - { - if (params instanceof KeyParameter) - { - workingKey = generateWorkingKey(forEncryption, - ((KeyParameter)params).getKey()); - return; - } - - throw new IllegalArgumentException("invalid parameter passed to IDEA init - " + params.getClass().getName()); - } - - public String getAlgorithmName() - { - return "IDEA"; - } - - public int getBlockSize() - { - return BLOCK_SIZE; - } - - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - { - if (workingKey == null) - { - throw new IllegalStateException("IDEA engine not initialised"); - } - - if ((inOff + BLOCK_SIZE) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + BLOCK_SIZE) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - ideaFunc(workingKey, in, inOff, out, outOff); - - return BLOCK_SIZE; - } - - public void reset() - { - } - - private static final int MASK = 0xffff; - private static final int BASE = 0x10001; - - private int bytesToWord( - byte[] in, - int inOff) - { - return ((in[inOff] << 8) & 0xff00) + (in[inOff + 1] & 0xff); - } - - private void wordToBytes( - int word, - byte[] out, - int outOff) - { - out[outOff] = (byte)(word >>> 8); - out[outOff + 1] = (byte)word; - } - - /** - * return x = x * y where the multiplication is done modulo - * 65537 (0x10001) (as defined in the IDEA specification) and - * a zero input is taken to be 65536 (0x10000). - * - * @param x the x value - * @param y the y value - * @return x = x * y - */ - private int mul( - int x, - int y) - { - if (x == 0) - { - x = (BASE - y); - } - else if (y == 0) - { - x = (BASE - x); - } - else - { - int p = x * y; - - y = p & MASK; - x = p >>> 16; - x = y - x + ((y < x) ? 1 : 0); - } - - return x & MASK; - } - - private void ideaFunc( - int[] workingKey, - byte[] in, - int inOff, - byte[] out, - int outOff) - { - int x0, x1, x2, x3, t0, t1; - int keyOff = 0; - - x0 = bytesToWord(in, inOff); - x1 = bytesToWord(in, inOff + 2); - x2 = bytesToWord(in, inOff + 4); - x3 = bytesToWord(in, inOff + 6); - - for (int round = 0; round < 8; round++) - { - x0 = mul(x0, workingKey[keyOff++]); - x1 += workingKey[keyOff++]; - x1 &= MASK; - x2 += workingKey[keyOff++]; - x2 &= MASK; - x3 = mul(x3, workingKey[keyOff++]); - - t0 = x1; - t1 = x2; - x2 ^= x0; - x1 ^= x3; - - x2 = mul(x2, workingKey[keyOff++]); - x1 += x2; - x1 &= MASK; - - x1 = mul(x1, workingKey[keyOff++]); - x2 += x1; - x2 &= MASK; - - x0 ^= x1; - x3 ^= x2; - x1 ^= t1; - x2 ^= t0; - } - - wordToBytes(mul(x0, workingKey[keyOff++]), out, outOff); - wordToBytes(x2 + workingKey[keyOff++], out, outOff + 2); /* NB: Order */ - wordToBytes(x1 + workingKey[keyOff++], out, outOff + 4); - wordToBytes(mul(x3, workingKey[keyOff]), out, outOff + 6); - } - - /** - * The following function is used to expand the user key to the encryption - * subkey. The first 16 bytes are the user key, and the rest of the subkey - * is calculated by rotating the previous 16 bytes by 25 bits to the left, - * and so on until the subkey is completed. - */ - private int[] expandKey( - byte[] uKey) - { - int[] key = new int[52]; - - if (uKey.length < 16) - { - byte[] tmp = new byte[16]; - - System.arraycopy(uKey, 0, tmp, tmp.length - uKey.length, uKey.length); - - uKey = tmp; - } - - for (int i = 0; i < 8; i++) - { - key[i] = bytesToWord(uKey, i * 2); - } - - for (int i = 8; i < 52; i++) - { - if ((i & 7) < 6) - { - key[i] = ((key[i - 7] & 127) << 9 | key[i - 6] >> 7) & MASK; - } - else if ((i & 7) == 6) - { - key[i] = ((key[i - 7] & 127) << 9 | key[i - 14] >> 7) & MASK; - } - else - { - key[i] = ((key[i - 15] & 127) << 9 | key[i - 14] >> 7) & MASK; - } - } - - return key; - } - - /** - * This function computes multiplicative inverse using Euclid's Greatest - * Common Divisor algorithm. Zero and one are self inverse. - *

        - * i.e. x * mulInv(x) == 1 (modulo BASE) - */ - private int mulInv( - int x) - { - int t0, t1, q, y; - - if (x < 2) - { - return x; - } - - t0 = 1; - t1 = BASE / x; - y = BASE % x; - - while (y != 1) - { - q = x / y; - x = x % y; - t0 = (t0 + (t1 * q)) & MASK; - if (x == 1) - { - return t0; - } - q = y / x; - y = y % x; - t1 = (t1 + (t0 * q)) & MASK; - } - - return (1 - t1) & MASK; - } - - /** - * Return the additive inverse of x. - *

        - * i.e. x + addInv(x) == 0 - */ - int addInv( - int x) - { - return (0 - x) & MASK; - } - - /** - * The function to invert the encryption subkey to the decryption subkey. - * It also involves the multiplicative inverse and the additive inverse functions. - */ - private int[] invertKey( - int[] inKey) - { - int t1, t2, t3, t4; - int p = 52; /* We work backwards */ - int[] key = new int[52]; - int inOff = 0; - - t1 = mulInv(inKey[inOff++]); - t2 = addInv(inKey[inOff++]); - t3 = addInv(inKey[inOff++]); - t4 = mulInv(inKey[inOff++]); - key[--p] = t4; - key[--p] = t3; - key[--p] = t2; - key[--p] = t1; - - for (int round = 1; round < 8; round++) - { - t1 = inKey[inOff++]; - t2 = inKey[inOff++]; - key[--p] = t2; - key[--p] = t1; - - t1 = mulInv(inKey[inOff++]); - t2 = addInv(inKey[inOff++]); - t3 = addInv(inKey[inOff++]); - t4 = mulInv(inKey[inOff++]); - key[--p] = t4; - key[--p] = t2; /* NB: Order */ - key[--p] = t3; - key[--p] = t1; - } - - t1 = inKey[inOff++]; - t2 = inKey[inOff++]; - key[--p] = t2; - key[--p] = t1; - - t1 = mulInv(inKey[inOff++]); - t2 = addInv(inKey[inOff++]); - t3 = addInv(inKey[inOff++]); - t4 = mulInv(inKey[inOff]); - key[--p] = t4; - key[--p] = t3; - key[--p] = t2; - key[--p] = t1; - - return key; - } - - private int[] generateWorkingKey( - boolean forEncryption, - byte[] userKey) - { - if (forEncryption) - { - return expandKey(userKey); - } - else - { - return invertKey(expandKey(userKey)); - } - } -} diff --git a/src/org/bouncycastle/crypto/engines/IESEngine.java b/src/org/bouncycastle/crypto/engines/IESEngine.java deleted file mode 100644 index ae03040..0000000 --- a/src/org/bouncycastle/crypto/engines/IESEngine.java +++ /dev/null @@ -1,256 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.BasicAgreement; -import org.bouncycastle.crypto.BufferedBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DerivationFunction; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.params.IESParameters; -import org.bouncycastle.crypto.params.IESWithCipherParameters; -import org.bouncycastle.crypto.params.KDFParameters; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.util.BigIntegers; - -/** - * support class for constructing integrated encryption ciphers - * for doing basic message exchanges on top of key agreement ciphers - */ -public class IESEngine -{ - BasicAgreement agree; - DerivationFunction kdf; - Mac mac; - BufferedBlockCipher cipher; - byte[] macBuf; - - boolean forEncryption; - CipherParameters privParam, pubParam; - IESParameters param; - - /** - * set up for use with stream mode, where the key derivation function - * is used to provide a stream of bytes to xor with the message. - * - * @param agree the key agreement used as the basis for the encryption - * @param kdf the key derivation function used for byte generation - * @param mac the message authentication code generator for the message - */ - public IESEngine( - BasicAgreement agree, - DerivationFunction kdf, - Mac mac) - { - this.agree = agree; - this.kdf = kdf; - this.mac = mac; - this.macBuf = new byte[mac.getMacSize()]; - this.cipher = null; - } - - /** - * set up for use in conjunction with a block cipher to handle the - * message. - * - * @param agree the key agreement used as the basis for the encryption - * @param kdf the key derivation function used for byte generation - * @param mac the message authentication code generator for the message - * @param cipher the cipher to used for encrypting the message - */ - public IESEngine( - BasicAgreement agree, - DerivationFunction kdf, - Mac mac, - BufferedBlockCipher cipher) - { - this.agree = agree; - this.kdf = kdf; - this.mac = mac; - this.macBuf = new byte[mac.getMacSize()]; - this.cipher = cipher; - } - - /** - * Initialise the encryptor. - * - * @param forEncryption whether or not this is encryption/decryption. - * @param privParam our private key parameters - * @param pubParam the recipient's/sender's public key parameters - * @param param encoding and derivation parameters. - */ - public void init( - boolean forEncryption, - CipherParameters privParam, - CipherParameters pubParam, - CipherParameters param) - { - this.forEncryption = forEncryption; - this.privParam = privParam; - this.pubParam = pubParam; - this.param = (IESParameters)param; - } - - private byte[] decryptBlock( - byte[] in_enc, - int inOff, - int inLen, - byte[] z) - throws InvalidCipherTextException - { - byte[] M = null; - KeyParameter macKey = null; - KDFParameters kParam = new KDFParameters(z, param.getDerivationV()); - int macKeySize = param.getMacKeySize(); - - kdf.init(kParam); - - inLen -= mac.getMacSize(); - - if (cipher == null) // stream mode - { - byte[] buf = generateKdfBytes(kParam, inLen + (macKeySize / 8)); - - M = new byte[inLen]; - - for (int i = 0; i != inLen; i++) - { - M[i] = (byte)(in_enc[inOff + i] ^ buf[i]); - } - - macKey = new KeyParameter(buf, inLen, (macKeySize / 8)); - } - else - { - int cipherKeySize = ((IESWithCipherParameters)param).getCipherKeySize(); - byte[] buf = generateKdfBytes(kParam, (cipherKeySize / 8) + (macKeySize / 8)); - - cipher.init(false, new KeyParameter(buf, 0, (cipherKeySize / 8))); - - byte[] tmp = new byte[cipher.getOutputSize(inLen)]; - - int len = cipher.processBytes(in_enc, inOff, inLen, tmp, 0); - - len += cipher.doFinal(tmp, len); - - M = new byte[len]; - - System.arraycopy(tmp, 0, M, 0, len); - - macKey = new KeyParameter(buf, (cipherKeySize / 8), (macKeySize / 8)); - } - - byte[] macIV = param.getEncodingV(); - - mac.init(macKey); - mac.update(in_enc, inOff, inLen); - mac.update(macIV, 0, macIV.length); - mac.doFinal(macBuf, 0); - - inOff += inLen; - - for (int t = 0; t < macBuf.length; t++) - { - if (macBuf[t] != in_enc[inOff + t]) - { - throw (new InvalidCipherTextException("Mac codes failed to equal.")); - } - } - - return M; - } - - private byte[] encryptBlock( - byte[] in, - int inOff, - int inLen, - byte[] z) - throws InvalidCipherTextException - { - byte[] C = null; - KeyParameter macKey = null; - KDFParameters kParam = new KDFParameters(z, param.getDerivationV()); - int c_text_length = 0; - int macKeySize = param.getMacKeySize(); - - if (cipher == null) // stream mode - { - byte[] buf = generateKdfBytes(kParam, inLen + (macKeySize / 8)); - - C = new byte[inLen + mac.getMacSize()]; - c_text_length = inLen; - - for (int i = 0; i != inLen; i++) - { - C[i] = (byte)(in[inOff + i] ^ buf[i]); - } - - macKey = new KeyParameter(buf, inLen, (macKeySize / 8)); - } - else - { - int cipherKeySize = ((IESWithCipherParameters)param).getCipherKeySize(); - byte[] buf = generateKdfBytes(kParam, (cipherKeySize / 8) + (macKeySize / 8)); - - cipher.init(true, new KeyParameter(buf, 0, (cipherKeySize / 8))); - - c_text_length = cipher.getOutputSize(inLen); - - byte[] tmp = new byte[c_text_length]; - - int len = cipher.processBytes(in, inOff, inLen, tmp, 0); - - len += cipher.doFinal(tmp, len); - - C = new byte[len + mac.getMacSize()]; - c_text_length = len; - - System.arraycopy(tmp, 0, C, 0, len); - - macKey = new KeyParameter(buf, (cipherKeySize / 8), (macKeySize / 8)); - } - - byte[] macIV = param.getEncodingV(); - - mac.init(macKey); - mac.update(C, 0, c_text_length); - mac.update(macIV, 0, macIV.length); - // - // return the message and it's MAC - // - mac.doFinal(C, c_text_length); - return C; - } - - private byte[] generateKdfBytes( - KDFParameters kParam, - int length) - { - byte[] buf = new byte[length]; - - kdf.init(kParam); - - kdf.generateBytes(buf, 0, buf.length); - - return buf; - } - - public byte[] processBlock( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - agree.init(privParam); - - BigInteger z = agree.calculateAgreement(pubParam); - - // TODO Is a fixed length result expected? - byte[] zBytes = BigIntegers.asUnsignedByteArray(z); - - return forEncryption - ? encryptBlock(in, inOff, inLen, zBytes) - : decryptBlock(in, inOff, inLen, zBytes); - } -} diff --git a/src/org/bouncycastle/crypto/engines/NullEngine.java b/src/org/bouncycastle/crypto/engines/NullEngine.java deleted file mode 100644 index 4e8f7d0..0000000 --- a/src/org/bouncycastle/crypto/engines/NullEngine.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; - -/** - * The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. - * Provided for the sake of completeness. - */ -public class NullEngine implements BlockCipher -{ - private boolean initialised; - protected static final int BLOCK_SIZE = 1; - - /** - * Standard constructor. - */ - public NullEngine() - { - super(); - } - - /* (non-Javadoc) - * @see org.bouncycastle.crypto.BlockCipher#init(boolean, org.bouncycastle.crypto.CipherParameters) - */ - public void init(boolean forEncryption, CipherParameters params) throws IllegalArgumentException - { - // we don't mind any parameters that may come in - this.initialised = true; - } - - /* (non-Javadoc) - * @see org.bouncycastle.crypto.BlockCipher#getAlgorithmName() - */ - public String getAlgorithmName() - { - return "Null"; - } - - /* (non-Javadoc) - * @see org.bouncycastle.crypto.BlockCipher#getBlockSize() - */ - public int getBlockSize() - { - return BLOCK_SIZE; - } - - /* (non-Javadoc) - * @see org.bouncycastle.crypto.BlockCipher#processBlock(byte[], int, byte[], int) - */ - public int processBlock(byte[] in, int inOff, byte[] out, int outOff) - throws DataLengthException, IllegalStateException - { - if (!initialised) - { - throw new IllegalStateException("Null engine not initialised"); - } - if ((inOff + BLOCK_SIZE) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + BLOCK_SIZE) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - for (int i = 0; i < BLOCK_SIZE; ++i) - { - out[outOff + i] = in[inOff + i]; - } - - return BLOCK_SIZE; - } - - /* (non-Javadoc) - * @see org.bouncycastle.crypto.BlockCipher#reset() - */ - public void reset() - { - // nothing needs to be done - } -} diff --git a/src/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java b/src/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java deleted file mode 100644 index c630dad..0000000 --- a/src/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java +++ /dev/null @@ -1,175 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.Wrapper; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -import javabc.SecureRandom; - -/** - * an implementation of the RFC 3211 Key Wrap - * Specification. - */ -public class RFC3211WrapEngine - implements Wrapper -{ - private CBCBlockCipher engine; - private ParametersWithIV param; - private boolean forWrapping; - private SecureRandom rand; - - public RFC3211WrapEngine(BlockCipher engine) - { - this.engine = new CBCBlockCipher(engine); - } - - public void init( - boolean forWrapping, - CipherParameters param) - { - this.forWrapping = forWrapping; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom p = (ParametersWithRandom)param; - - rand = p.getRandom(); - this.param = (ParametersWithIV)p.getParameters(); - } - else - { - if (forWrapping) - { - rand = new SecureRandom(); - } - - this.param = (ParametersWithIV)param; - } - } - - public String getAlgorithmName() - { - return engine.getUnderlyingCipher().getAlgorithmName() + "/RFC3211Wrap"; - } - - public byte[] wrap( - byte[] in, - int inOff, - int inLen) - { - if (!forWrapping) - { - throw new IllegalStateException("not set for wrapping"); - } - - engine.init(true, param); - - int blockSize = engine.getBlockSize(); - byte[] cekBlock; - - if (inLen + 4 < blockSize * 2) - { - cekBlock = new byte[blockSize * 2]; - } - else - { - cekBlock = new byte[(inLen + 4) % blockSize == 0 ? inLen + 4 : ((inLen + 4) / blockSize + 1) * blockSize]; - } - - cekBlock[0] = (byte)inLen; - cekBlock[1] = (byte)~in[inOff]; - cekBlock[2] = (byte)~in[inOff + 1]; - cekBlock[3] = (byte)~in[inOff + 2]; - - System.arraycopy(in, inOff, cekBlock, 4, inLen); - - for (int i = inLen + 4; i < cekBlock.length; i++) - { - cekBlock[i] = (byte)rand.nextInt(); - } - - for (int i = 0; i < cekBlock.length; i += blockSize) - { - engine.processBlock(cekBlock, i, cekBlock, i); - } - - for (int i = 0; i < cekBlock.length; i += blockSize) - { - engine.processBlock(cekBlock, i, cekBlock, i); - } - - return cekBlock; - } - - public byte[] unwrap( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - if (forWrapping) - { - throw new IllegalStateException("not set for unwrapping"); - } - - int blockSize = engine.getBlockSize(); - - if (inLen < 2 * blockSize) - { - throw new InvalidCipherTextException("input too short"); - } - - byte[] cekBlock = new byte[inLen]; - byte[] iv = new byte[blockSize]; - - System.arraycopy(in, inOff, cekBlock, 0, inLen); - System.arraycopy(in, inOff, iv, 0, iv.length); - - engine.init(false, new ParametersWithIV(param.getParameters(), iv)); - - for (int i = blockSize; i < cekBlock.length; i += blockSize) - { - engine.processBlock(cekBlock, i, cekBlock, i); - } - - System.arraycopy(cekBlock, cekBlock.length - iv.length, iv, 0, iv.length); - - engine.init(false, new ParametersWithIV(param.getParameters(), iv)); - - engine.processBlock(cekBlock, 0, cekBlock, 0); - - engine.init(false, param); - - for (int i = 0; i < cekBlock.length; i += blockSize) - { - engine.processBlock(cekBlock, i, cekBlock, i); - } - - if ((cekBlock[0] & 0xff) > cekBlock.length - 4) - { - throw new InvalidCipherTextException("wrapped key corrupted"); - } - - byte[] key = new byte[cekBlock[0] & 0xff]; - - System.arraycopy(cekBlock, 4, key, 0, cekBlock[0]); - - // Note: Using constant time comparison - int nonEqual = 0; - for (int i = 0; i != 3; i++) - { - byte check = (byte)~cekBlock[1 + i]; - nonEqual |= (check ^ key[i]); - } - if (nonEqual != 0) - { - throw new InvalidCipherTextException("wrapped key fails checksum"); - } - - return key; - } -} diff --git a/src/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java b/src/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java deleted file mode 100644 index 540bd25..0000000 --- a/src/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java +++ /dev/null @@ -1,177 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.Wrapper; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.util.Arrays; - -/** - * an implementation of the AES Key Wrapper from the NIST Key Wrap - * Specification as described in RFC 3394. - *

        - * For further details see: http://www.ietf.org/rfc/rfc3394.txt - * and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. - */ -public class RFC3394WrapEngine - implements Wrapper -{ - private BlockCipher engine; - private KeyParameter param; - private boolean forWrapping; - - private byte[] iv = { - (byte)0xa6, (byte)0xa6, (byte)0xa6, (byte)0xa6, - (byte)0xa6, (byte)0xa6, (byte)0xa6, (byte)0xa6 }; - - public RFC3394WrapEngine(BlockCipher engine) - { - this.engine = engine; - } - - public void init( - boolean forWrapping, - CipherParameters param) - { - this.forWrapping = forWrapping; - - if (param instanceof ParametersWithRandom) - { - param = ((ParametersWithRandom) param).getParameters(); - } - - if (param instanceof KeyParameter) - { - this.param = (KeyParameter)param; - } - else if (param instanceof ParametersWithIV) - { - this.iv = ((ParametersWithIV)param).getIV(); - this.param = (KeyParameter)((ParametersWithIV) param).getParameters(); - if (this.iv.length != 8) - { - throw new IllegalArgumentException("IV not equal to 8"); - } - } - } - - public String getAlgorithmName() - { - return engine.getAlgorithmName(); - } - - public byte[] wrap( - byte[] in, - int inOff, - int inLen) - { - if (!forWrapping) - { - throw new IllegalStateException("not set for wrapping"); - } - - int n = inLen / 8; - - if ((n * 8) != inLen) - { - throw new DataLengthException("wrap data must be a multiple of 8 bytes"); - } - - byte[] block = new byte[inLen + iv.length]; - byte[] buf = new byte[8 + iv.length]; - - System.arraycopy(iv, 0, block, 0, iv.length); - System.arraycopy(in, 0, block, iv.length, inLen); - - engine.init(true, param); - - for (int j = 0; j != 6; j++) - { - for (int i = 1; i <= n; i++) - { - System.arraycopy(block, 0, buf, 0, iv.length); - System.arraycopy(block, 8 * i, buf, iv.length, 8); - engine.processBlock(buf, 0, buf, 0); - - int t = n * j + i; - for (int k = 1; t != 0; k++) - { - byte v = (byte)t; - - buf[iv.length - k] ^= v; - - t >>>= 8; - } - - System.arraycopy(buf, 0, block, 0, 8); - System.arraycopy(buf, 8, block, 8 * i, 8); - } - } - - return block; - } - - public byte[] unwrap( - byte[] in, - int inOff, - int inLen) - throws InvalidCipherTextException - { - if (forWrapping) - { - throw new IllegalStateException("not set for unwrapping"); - } - - int n = inLen / 8; - - if ((n * 8) != inLen) - { - throw new InvalidCipherTextException("unwrap data must be a multiple of 8 bytes"); - } - - byte[] block = new byte[inLen - iv.length]; - byte[] a = new byte[iv.length]; - byte[] buf = new byte[8 + iv.length]; - - System.arraycopy(in, 0, a, 0, iv.length); - System.arraycopy(in, iv.length, block, 0, inLen - iv.length); - - engine.init(false, param); - - n = n - 1; - - for (int j = 5; j >= 0; j--) - { - for (int i = n; i >= 1; i--) - { - System.arraycopy(a, 0, buf, 0, iv.length); - System.arraycopy(block, 8 * (i - 1), buf, iv.length, 8); - - int t = n * j + i; - for (int k = 1; t != 0; k++) - { - byte v = (byte)t; - - buf[iv.length - k] ^= v; - - t >>>= 8; - } - - engine.processBlock(buf, 0, buf, 0); - System.arraycopy(buf, 0, a, 0, 8); - System.arraycopy(buf, 8, block, 8 * (i - 1), 8); - } - } - - if (!Arrays.constantTimeAreEqual(a, iv)) - { - throw new InvalidCipherTextException("checksum failed"); - } - - return block; - } -} diff --git a/src/org/bouncycastle/crypto/engines/RSABlindedEngine.java b/src/org/bouncycastle/crypto/engines/RSABlindedEngine.java deleted file mode 100644 index d7449c1..0000000 --- a/src/org/bouncycastle/crypto/engines/RSABlindedEngine.java +++ /dev/null @@ -1,126 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSAKeyParameters; -import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; -import org.bouncycastle.util.BigIntegers; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * this does your basic RSA algorithm with blinding - */ -public class RSABlindedEngine - implements AsymmetricBlockCipher -{ - private static BigInteger ONE = BigInteger.valueOf(1); - - private RSACoreEngine core = new RSACoreEngine(); - private RSAKeyParameters key; - private SecureRandom random; - - /** - * initialise the RSA engine. - * - * @param forEncryption true if we are encrypting, false otherwise. - * @param param the necessary RSA key parameters. - */ - public void init( - boolean forEncryption, - CipherParameters param) - { - core.init(forEncryption, param); - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - key = (RSAKeyParameters)rParam.getParameters(); - random = rParam.getRandom(); - } - else - { - key = (RSAKeyParameters)param; - random = new SecureRandom(); - } - } - - /** - * Return the maximum size for an input block to this engine. - * For RSA this is always one byte less than the key size on - * encryption, and the same length as the key size on decryption. - * - * @return maximum size for an input block. - */ - public int getInputBlockSize() - { - return core.getInputBlockSize(); - } - - /** - * Return the maximum size for an output block to this engine. - * For RSA this is always one byte less than the key size on - * decryption, and the same length as the key size on encryption. - * - * @return maximum size for an output block. - */ - public int getOutputBlockSize() - { - return core.getOutputBlockSize(); - } - - /** - * Process a single block using the basic RSA algorithm. - * - * @param in the input array. - * @param inOff the offset into the input buffer where the data starts. - * @param inLen the length of the data to be processed. - * @return the result of the RSA process. - * @exception DataLengthException the input block is too large. - */ - public byte[] processBlock( - byte[] in, - int inOff, - int inLen) - { - if (key == null) - { - throw new IllegalStateException("RSA engine not initialised"); - } - - BigInteger input = core.convertInput(in, inOff, inLen); - - BigInteger result; - if (key instanceof RSAPrivateCrtKeyParameters) - { - RSAPrivateCrtKeyParameters k = (RSAPrivateCrtKeyParameters)key; - - BigInteger e = k.getPublicExponent(); - if (e != null) // can't do blinding without a public exponent - { - BigInteger m = k.getModulus(); - BigInteger r = BigIntegers.createRandomInRange(ONE, m.subtract(ONE), random); - - BigInteger blindedInput = r.modPow(e, m).multiply(input).mod(m); - BigInteger blindedResult = core.processBlock(blindedInput); - - BigInteger rInv = r.modInverse(m); - result = blindedResult.multiply(rInv).mod(m); - } - else - { - result = core.processBlock(input); - } - } - else - { - result = core.processBlock(input); - } - - return core.convertOutput(result); - } -} diff --git a/src/org/bouncycastle/crypto/engines/RSABlindingEngine.java b/src/org/bouncycastle/crypto/engines/RSABlindingEngine.java deleted file mode 100644 index e0d6814..0000000 --- a/src/org/bouncycastle/crypto/engines/RSABlindingEngine.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSABlindingParameters; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -import javabc.BigInteger; - -/** - * This does your basic RSA Chaum's blinding and unblinding as outlined in - * "Handbook of Applied Cryptography", page 475. You need to use this if you are - * trying to get another party to generate signatures without them being aware - * of the message they are signing. - */ -public class RSABlindingEngine - implements AsymmetricBlockCipher -{ - private RSACoreEngine core = new RSACoreEngine(); - - private RSAKeyParameters key; - private BigInteger blindingFactor; - - private boolean forEncryption; - - /** - * Initialise the blinding engine. - * - * @param forEncryption true if we are encrypting (blinding), false otherwise. - * @param param the necessary RSA key parameters. - */ - public void init( - boolean forEncryption, - CipherParameters param) - { - RSABlindingParameters p; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - p = (RSABlindingParameters)rParam.getParameters(); - } - else - { - p = (RSABlindingParameters)param; - } - - core.init(forEncryption, p.getPublicKey()); - - this.forEncryption = forEncryption; - this.key = p.getPublicKey(); - this.blindingFactor = p.getBlindingFactor(); - } - - /** - * Return the maximum size for an input block to this engine. - * For RSA this is always one byte less than the key size on - * encryption, and the same length as the key size on decryption. - * - * @return maximum size for an input block. - */ - public int getInputBlockSize() - { - return core.getInputBlockSize(); - } - - /** - * Return the maximum size for an output block to this engine. - * For RSA this is always one byte less than the key size on - * decryption, and the same length as the key size on encryption. - * - * @return maximum size for an output block. - */ - public int getOutputBlockSize() - { - return core.getOutputBlockSize(); - } - - /** - * Process a single block using the RSA blinding algorithm. - * - * @param in the input array. - * @param inOff the offset into the input buffer where the data starts. - * @param inLen the length of the data to be processed. - * @return the result of the RSA process. - * @throws DataLengthException the input block is too large. - */ - public byte[] processBlock( - byte[] in, - int inOff, - int inLen) - { - BigInteger msg = core.convertInput(in, inOff, inLen); - - if (forEncryption) - { - msg = blindMessage(msg); - } - else - { - msg = unblindMessage(msg); - } - - return core.convertOutput(msg); - } - - /* - * Blind message with the blind factor. - */ - private BigInteger blindMessage( - BigInteger msg) - { - BigInteger blindMsg = blindingFactor; - blindMsg = msg.multiply(blindMsg.modPow(key.getExponent(), key.getModulus())); - blindMsg = blindMsg.mod(key.getModulus()); - - return blindMsg; - } - - /* - * Unblind the message blinded with the blind factor. - */ - private BigInteger unblindMessage( - BigInteger blindedMsg) - { - BigInteger m = key.getModulus(); - BigInteger msg = blindedMsg; - BigInteger blindFactorInverse = blindingFactor.modInverse(m); - msg = msg.multiply(blindFactorInverse); - msg = msg.mod(m); - - return msg; - } -} diff --git a/src/org/bouncycastle/crypto/engines/RSACoreEngine.java b/src/org/bouncycastle/crypto/engines/RSACoreEngine.java deleted file mode 100644 index 886530c..0000000 --- a/src/org/bouncycastle/crypto/engines/RSACoreEngine.java +++ /dev/null @@ -1,203 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSAKeyParameters; -import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; - -import javabc.BigInteger; - -/** - * this does your basic RSA algorithm. - */ -class RSACoreEngine -{ - private RSAKeyParameters key; - private boolean forEncryption; - - /** - * initialise the RSA engine. - * - * @param forEncryption true if we are encrypting, false otherwise. - * @param param the necessary RSA key parameters. - */ - public void init( - boolean forEncryption, - CipherParameters param) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - key = (RSAKeyParameters)rParam.getParameters(); - } - else - { - key = (RSAKeyParameters)param; - } - - this.forEncryption = forEncryption; - } - - /** - * Return the maximum size for an input block to this engine. - * For RSA this is always one byte less than the key size on - * encryption, and the same length as the key size on decryption. - * - * @return maximum size for an input block. - */ - public int getInputBlockSize() - { - int bitSize = key.getModulus().bitLength(); - - if (forEncryption) - { - return (bitSize + 7) / 8 - 1; - } - else - { - return (bitSize + 7) / 8; - } - } - - /** - * Return the maximum size for an output block to this engine. - * For RSA this is always one byte less than the key size on - * decryption, and the same length as the key size on encryption. - * - * @return maximum size for an output block. - */ - public int getOutputBlockSize() - { - int bitSize = key.getModulus().bitLength(); - - if (forEncryption) - { - return (bitSize + 7) / 8; - } - else - { - return (bitSize + 7) / 8 - 1; - } - } - - public BigInteger convertInput( - byte[] in, - int inOff, - int inLen) - { - if (inLen > (getInputBlockSize() + 1)) - { - throw new DataLengthException("input too large for RSA cipher."); - } - else if (inLen == (getInputBlockSize() + 1) && !forEncryption) - { - throw new DataLengthException("input too large for RSA cipher."); - } - - byte[] block; - - if (inOff != 0 || inLen != in.length) - { - block = new byte[inLen]; - - System.arraycopy(in, inOff, block, 0, inLen); - } - else - { - block = in; - } - - BigInteger res = new BigInteger(1, block); - if (res.compareTo(key.getModulus()) >= 0) - { - throw new DataLengthException("input too large for RSA cipher."); - } - - return res; - } - - public byte[] convertOutput( - BigInteger result) - { - byte[] output = result.toByteArray(); - - if (forEncryption) - { - if (output[0] == 0 && output.length > getOutputBlockSize()) // have ended up with an extra zero byte, copy down. - { - byte[] tmp = new byte[output.length - 1]; - - System.arraycopy(output, 1, tmp, 0, tmp.length); - - return tmp; - } - - if (output.length < getOutputBlockSize()) // have ended up with less bytes than normal, lengthen - { - byte[] tmp = new byte[getOutputBlockSize()]; - - System.arraycopy(output, 0, tmp, tmp.length - output.length, output.length); - - return tmp; - } - } - else - { - if (output[0] == 0) // have ended up with an extra zero byte, copy down. - { - byte[] tmp = new byte[output.length - 1]; - - System.arraycopy(output, 1, tmp, 0, tmp.length); - - return tmp; - } - } - - return output; - } - - public BigInteger processBlock(BigInteger input) - { - if (key instanceof RSAPrivateCrtKeyParameters) - { - // - // we have the extra factors, use the Chinese Remainder Theorem - the author - // wishes to express his thanks to Dirk Bonekaemper at rtsffm.com for - // advice regarding the expression of this. - // - RSAPrivateCrtKeyParameters crtKey = (RSAPrivateCrtKeyParameters)key; - - BigInteger p = crtKey.getP(); - BigInteger q = crtKey.getQ(); - BigInteger dP = crtKey.getDP(); - BigInteger dQ = crtKey.getDQ(); - BigInteger qInv = crtKey.getQInv(); - - BigInteger mP, mQ, h, m; - - // mP = ((input mod p) ^ dP)) mod p - mP = (input.remainder(p)).modPow(dP, p); - - // mQ = ((input mod q) ^ dQ)) mod q - mQ = (input.remainder(q)).modPow(dQ, q); - - // h = qInv * (mP - mQ) mod p - h = mP.subtract(mQ); - h = h.multiply(qInv); - h = h.mod(p); // mod (in Java) returns the positive residual - - // m = h * q + mQ - m = h.multiply(q); - m = m.add(mQ); - - return m; - } - else - { - return input.modPow( - key.getExponent(), key.getModulus()); - } - } -} diff --git a/src/org/bouncycastle/crypto/engines/RSAEngine.java b/src/org/bouncycastle/crypto/engines/RSAEngine.java deleted file mode 100644 index 009dcd4..0000000 --- a/src/org/bouncycastle/crypto/engines/RSAEngine.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; - -/** - * this does your basic RSA algorithm. - */ -public class RSAEngine - implements AsymmetricBlockCipher -{ - private RSACoreEngine core; - - /** - * initialise the RSA engine. - * - * @param forEncryption true if we are encrypting, false otherwise. - * @param param the necessary RSA key parameters. - */ - public void init( - boolean forEncryption, - CipherParameters param) - { - if (core == null) - { - core = new RSACoreEngine(); - } - - core.init(forEncryption, param); - } - - /** - * Return the maximum size for an input block to this engine. - * For RSA this is always one byte less than the key size on - * encryption, and the same length as the key size on decryption. - * - * @return maximum size for an input block. - */ - public int getInputBlockSize() - { - return core.getInputBlockSize(); - } - - /** - * Return the maximum size for an output block to this engine. - * For RSA this is always one byte less than the key size on - * decryption, and the same length as the key size on encryption. - * - * @return maximum size for an output block. - */ - public int getOutputBlockSize() - { - return core.getOutputBlockSize(); - } - - /** - * Process a single block using the basic RSA algorithm. - * - * @param in the input array. - * @param inOff the offset into the input buffer where the data starts. - * @param inLen the length of the data to be processed. - * @return the result of the RSA process. - * @exception DataLengthException the input block is too large. - */ - public byte[] processBlock( - byte[] in, - int inOff, - int inLen) - { - if (core == null) - { - throw new IllegalStateException("RSA engine not initialised"); - } - - return core.convertOutput(core.processBlock(core.convertInput(in, inOff, inLen))); - } -} diff --git a/src/org/bouncycastle/crypto/engines/Salsa20Engine.java b/src/org/bouncycastle/crypto/engines/Salsa20Engine.java deleted file mode 100644 index 896d72f..0000000 --- a/src/org/bouncycastle/crypto/engines/Salsa20Engine.java +++ /dev/null @@ -1,318 +0,0 @@ -package org.bouncycastle.crypto.engines; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.MaxBytesExceededException; -import org.bouncycastle.crypto.StreamCipher; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.crypto.util.Pack; -import org.bouncycastle.util.Strings; - -/** - * Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 - */ - -public class Salsa20Engine - implements StreamCipher -{ - /** Constants */ - private final static int STATE_SIZE = 16; // 16, 32 bit ints = 64 bytes - - private final static byte[] - sigma = Strings.toByteArray("expand 32-byte k"), - tau = Strings.toByteArray("expand 16-byte k"); - - /* - * variables to hold the state of the engine - * during encryption and decryption - */ - private int index = 0; - private int[] engineState = new int[STATE_SIZE]; // state - private int[] x = new int[STATE_SIZE] ; // internal buffer - private byte[] keyStream = new byte[STATE_SIZE * 4], // expanded state, 64 bytes - workingKey = null, - workingIV = null; - private boolean initialised = false; - - /* - * internal counter - */ - private int cW0, cW1, cW2; - - /** - * initialise a Salsa20 cipher. - * - * @param forEncryption whether or not we are for encryption. - * @param params the parameters required to set up the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - { - /* - * Salsa20 encryption and decryption is completely - * symmetrical, so the 'forEncryption' is - * irrelevant. (Like 90% of stream ciphers) - */ - - if (!(params instanceof ParametersWithIV)) - { - throw new IllegalArgumentException("Salsa20 Init parameters must include an IV"); - } - - ParametersWithIV ivParams = (ParametersWithIV) params; - - byte[] iv = ivParams.getIV(); - - if (iv == null || iv.length != 8) - { - throw new IllegalArgumentException("Salsa20 requires exactly 8 bytes of IV"); - } - - if (!(ivParams.getParameters() instanceof KeyParameter)) - { - throw new IllegalArgumentException("Salsa20 Init parameters must include a key"); - } - - KeyParameter key = (KeyParameter) ivParams.getParameters(); - - workingKey = key.getKey(); - workingIV = iv; - - setKey(workingKey, workingIV); - } - - public String getAlgorithmName() - { - return "Salsa20"; - } - - public byte returnByte(byte in) - { - if (limitExceeded()) - { - throw new MaxBytesExceededException("2^70 byte limit per IV; Change IV"); - } - - if (index == 0) - { - generateKeyStream(keyStream); - - if (++engineState[8] == 0) - { - ++engineState[9]; - } - } - - byte out = (byte)(keyStream[index]^in); - index = (index + 1) & 63; - - return out; - } - - public void processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - { - if (!initialised) - { - throw new IllegalStateException(getAlgorithmName()+" not initialised"); - } - - if ((inOff + len) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + len) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (limitExceeded(len)) - { - throw new MaxBytesExceededException("2^70 byte limit per IV would be exceeded; Change IV"); - } - - for (int i = 0; i < len; i++) - { - if (index == 0) - { - generateKeyStream(keyStream); - - if (++engineState[8] == 0) - { - ++engineState[9]; - } - } - - out[i+outOff] = (byte)(keyStream[index]^in[i+inOff]); - index = (index + 1) & 63; - } - } - - public void reset() - { - setKey(workingKey, workingIV); - } - - // Private implementation - - private void setKey(byte[] keyBytes, byte[] ivBytes) - { - workingKey = keyBytes; - workingIV = ivBytes; - - index = 0; - resetCounter(); - int offset = 0; - byte[] constants; - - // Key - engineState[1] = Pack.littleEndianToInt(workingKey, 0); - engineState[2] = Pack.littleEndianToInt(workingKey, 4); - engineState[3] = Pack.littleEndianToInt(workingKey, 8); - engineState[4] = Pack.littleEndianToInt(workingKey, 12); - - if (workingKey.length == 32) - { - constants = sigma; - offset = 16; - } - else - { - constants = tau; - } - - engineState[11] = Pack.littleEndianToInt(workingKey, offset); - engineState[12] = Pack.littleEndianToInt(workingKey, offset+4); - engineState[13] = Pack.littleEndianToInt(workingKey, offset+8); - engineState[14] = Pack.littleEndianToInt(workingKey, offset+12); - engineState[0 ] = Pack.littleEndianToInt(constants, 0); - engineState[5 ] = Pack.littleEndianToInt(constants, 4); - engineState[10] = Pack.littleEndianToInt(constants, 8); - engineState[15] = Pack.littleEndianToInt(constants, 12); - - // IV - engineState[6] = Pack.littleEndianToInt(workingIV, 0); - engineState[7] = Pack.littleEndianToInt(workingIV, 4); - engineState[8] = engineState[9] = 0; - - initialised = true; - } - - private void generateKeyStream(byte[] output) - { - salsaCore(20, engineState, x); - Pack.intToLittleEndian(x, output, 0); - } - - /** - * Salsa20 function - * - * @param input input data - * - * @return keystream - */ - public static void salsaCore(int rounds, int[] input, int[] x) - { - System.arraycopy(input, 0, x, 0, input.length); - - for (int i = rounds; i > 0; i -= 2) - { - x[ 4] ^= rotl((x[ 0]+x[12]), 7); - x[ 8] ^= rotl((x[ 4]+x[ 0]), 9); - x[12] ^= rotl((x[ 8]+x[ 4]),13); - x[ 0] ^= rotl((x[12]+x[ 8]),18); - x[ 9] ^= rotl((x[ 5]+x[ 1]), 7); - x[13] ^= rotl((x[ 9]+x[ 5]), 9); - x[ 1] ^= rotl((x[13]+x[ 9]),13); - x[ 5] ^= rotl((x[ 1]+x[13]),18); - x[14] ^= rotl((x[10]+x[ 6]), 7); - x[ 2] ^= rotl((x[14]+x[10]), 9); - x[ 6] ^= rotl((x[ 2]+x[14]),13); - x[10] ^= rotl((x[ 6]+x[ 2]),18); - x[ 3] ^= rotl((x[15]+x[11]), 7); - x[ 7] ^= rotl((x[ 3]+x[15]), 9); - x[11] ^= rotl((x[ 7]+x[ 3]),13); - x[15] ^= rotl((x[11]+x[ 7]),18); - x[ 1] ^= rotl((x[ 0]+x[ 3]), 7); - x[ 2] ^= rotl((x[ 1]+x[ 0]), 9); - x[ 3] ^= rotl((x[ 2]+x[ 1]),13); - x[ 0] ^= rotl((x[ 3]+x[ 2]),18); - x[ 6] ^= rotl((x[ 5]+x[ 4]), 7); - x[ 7] ^= rotl((x[ 6]+x[ 5]), 9); - x[ 4] ^= rotl((x[ 7]+x[ 6]),13); - x[ 5] ^= rotl((x[ 4]+x[ 7]),18); - x[11] ^= rotl((x[10]+x[ 9]), 7); - x[ 8] ^= rotl((x[11]+x[10]), 9); - x[ 9] ^= rotl((x[ 8]+x[11]),13); - x[10] ^= rotl((x[ 9]+x[ 8]),18); - x[12] ^= rotl((x[15]+x[14]), 7); - x[13] ^= rotl((x[12]+x[15]), 9); - x[14] ^= rotl((x[13]+x[12]),13); - x[15] ^= rotl((x[14]+x[13]),18); - } - - for (int i = 0; i < STATE_SIZE; ++i) - { - x[i] += input[i]; - } - } - - /** - * Rotate left - * - * @param x value to rotate - * @param y amount to rotate x - * - * @return rotated x - */ - private static int rotl(int x, int y) - { - return (x << y) | (x >>> -y); - } - - private void resetCounter() - { - cW0 = 0; - cW1 = 0; - cW2 = 0; - } - - private boolean limitExceeded() - { - if (++cW0 == 0) - { - if (++cW1 == 0) - { - return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) - } - } - - return false; - } - - /* - * this relies on the fact len will always be positive. - */ - private boolean limitExceeded(int len) - { - cW0 += len; - if (cW0 < len && cW0 >= 0) - { - if (++cW1 == 0) - { - return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) - } - } - - return false; - } -} diff --git a/src/org/bouncycastle/crypto/engines/package.html b/src/org/bouncycastle/crypto/engines/package.html deleted file mode 100644 index e945dac..0000000 --- a/src/org/bouncycastle/crypto/engines/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Basic cipher classes. - - diff --git a/src/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java b/src/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java deleted file mode 100644 index 268ae9b..0000000 --- a/src/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.DerivationFunction; -import org.bouncycastle.crypto.DerivationParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.params.ISO18033KDFParameters; -import org.bouncycastle.crypto.params.KDFParameters; - -/** - * Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 - *
        - * This implementation is based on ISO 18033/P1363a. - */ -public class BaseKDFBytesGenerator - implements DerivationFunction -{ - private int counterStart; - private Digest digest; - private byte[] shared; - private byte[] iv; - - /** - * Construct a KDF Parameters generator. - *

        - * @param counterStart value of counter. - * @param digest the digest to be used as the source of derived keys. - */ - protected BaseKDFBytesGenerator( - int counterStart, - Digest digest) - { - this.counterStart = counterStart; - this.digest = digest; - } - - public void init( - DerivationParameters param) - { - if (param instanceof KDFParameters) - { - KDFParameters p = (KDFParameters)param; - - shared = p.getSharedSecret(); - iv = p.getIV(); - } - else if (param instanceof ISO18033KDFParameters) - { - ISO18033KDFParameters p = (ISO18033KDFParameters)param; - - shared = p.getSeed(); - iv = null; - } - else - { - throw new IllegalArgumentException("KDF parameters required for KDF2Generator"); - } - } - - /** - * return the underlying digest. - */ - public Digest getDigest() - { - return digest; - } - - /** - * fill len bytes of the output buffer with bytes generated from - * the derivation function. - * - * @throws IllegalArgumentException if the size of the request will cause an overflow. - * @throws DataLengthException if the out buffer is too small. - */ - public int generateBytes( - byte[] out, - int outOff, - int len) - throws DataLengthException, IllegalArgumentException - { - if ((out.length - len) < outOff) - { - throw new DataLengthException("output buffer too small"); - } - - long oBytes = len; - int outLen = digest.getDigestSize(); - - // - // this is at odds with the standard implementation, the - // maximum value should be hBits * (2^32 - 1) where hBits - // is the digest output size in bits. We can't have an - // array with a long index at the moment... - // - if (oBytes > ((2L << 32) - 1)) - { - throw new IllegalArgumentException("Output length too large"); - } - - int cThreshold = (int)((oBytes + outLen - 1) / outLen); - - byte[] dig = null; - - dig = new byte[digest.getDigestSize()]; - - int counter = counterStart; - - for (int i = 0; i < cThreshold; i++) - { - digest.update(shared, 0, shared.length); - - digest.update((byte)(counter >> 24)); - digest.update((byte)(counter >> 16)); - digest.update((byte)(counter >> 8)); - digest.update((byte)counter); - - if (iv != null) - { - digest.update(iv, 0, iv.length); - } - - digest.doFinal(dig, 0); - - if (len > outLen) - { - System.arraycopy(dig, 0, out, outOff, outLen); - outOff += outLen; - len -= outLen; - } - else - { - System.arraycopy(dig, 0, out, outOff, len); - } - - counter++; - } - - digest.reset(); - - return len; - } -} diff --git a/src/org/bouncycastle/crypto/generators/DESKeyGenerator.java b/src/org/bouncycastle/crypto/generators/DESKeyGenerator.java deleted file mode 100644 index 7111118..0000000 --- a/src/org/bouncycastle/crypto/generators/DESKeyGenerator.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.CipherKeyGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.DESParameters; - -public class DESKeyGenerator - extends CipherKeyGenerator -{ - /** - * initialise the key generator - if strength is set to zero - * the key generated will be 64 bits in size, otherwise - * strength can be 64 or 56 bits (if you don't count the parity bits). - * - * @param param the parameters to be used for key generation - */ - public void init( - KeyGenerationParameters param) - { - super.init(param); - - if (strength == 0 || strength == (56 / 8)) - { - strength = DESParameters.DES_KEY_LENGTH; - } - else if (strength != DESParameters.DES_KEY_LENGTH) - { - throw new IllegalArgumentException("DES key must be " - + (DESParameters.DES_KEY_LENGTH * 8) - + " bits long."); - } - } - - public byte[] generateKey() - { - byte[] newKey = new byte[DESParameters.DES_KEY_LENGTH]; - - do - { - random.nextBytes(newKey); - - DESParameters.setOddParity(newKey); - } - while (DESParameters.isWeakKey(newKey, 0)); - - return newKey; - } -} diff --git a/src/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java b/src/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java deleted file mode 100644 index 3cab983..0000000 --- a/src/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.DESedeParameters; - -public class DESedeKeyGenerator - extends DESKeyGenerator -{ - /** - * initialise the key generator - if strength is set to zero - * the key generated will be 192 bits in size, otherwise - * strength can be 128 or 192 (or 112 or 168 if you don't count - * parity bits), depending on whether you wish to do 2-key or 3-key - * triple DES. - * - * @param param the parameters to be used for key generation - */ - public void init( - KeyGenerationParameters param) - { - this.random = param.getRandom(); - this.strength = (param.getStrength() + 7) / 8; - - if (strength == 0 || strength == (168 / 8)) - { - strength = DESedeParameters.DES_EDE_KEY_LENGTH; - } - else if (strength == (112 / 8)) - { - strength = 2 * DESedeParameters.DES_KEY_LENGTH; - } - else if (strength != DESedeParameters.DES_EDE_KEY_LENGTH - && strength != (2 * DESedeParameters.DES_KEY_LENGTH)) - { - throw new IllegalArgumentException("DESede key must be " - + (DESedeParameters.DES_EDE_KEY_LENGTH * 8) + " or " - + (2 * 8 * DESedeParameters.DES_KEY_LENGTH) - + " bits long."); - } - } - - public byte[] generateKey() - { - byte[] newKey = new byte[strength]; - - do - { - random.nextBytes(newKey); - - DESedeParameters.setOddParity(newKey); - } - while (DESedeParameters.isWeakKey(newKey, 0, newKey.length)); - - return newKey; - } -} diff --git a/src/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java deleted file mode 100644 index 269d33b..0000000 --- a/src/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.DHKeyGenerationParameters; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; - -import javabc.BigInteger; - -/** - * a basic Diffie-Hellman key pair generator. - * - * This generates keys consistent for use with the basic algorithm for - * Diffie-Hellman. - */ -public class DHBasicKeyPairGenerator - implements AsymmetricCipherKeyPairGenerator -{ - private DHKeyGenerationParameters param; - - public void init( - KeyGenerationParameters param) - { - this.param = (DHKeyGenerationParameters)param; - } - - public AsymmetricCipherKeyPair generateKeyPair() - { - DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE; - DHParameters dhp = param.getParameters(); - - BigInteger x = helper.calculatePrivate(dhp, param.getRandom()); - BigInteger y = helper.calculatePublic(dhp, x); - - return new AsymmetricCipherKeyPair( - new DHPublicKeyParameters(y, dhp), - new DHPrivateKeyParameters(x, dhp)); - } -} diff --git a/src/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java b/src/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java deleted file mode 100644 index b749b16..0000000 --- a/src/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.util.BigIntegers; - -class DHKeyGeneratorHelper -{ - static final DHKeyGeneratorHelper INSTANCE = new DHKeyGeneratorHelper(); - - private static final BigInteger ONE = BigInteger.valueOf(1); - private static final BigInteger TWO = BigInteger.valueOf(2); - - private DHKeyGeneratorHelper() - { - } - - BigInteger calculatePrivate(DHParameters dhParams, SecureRandom random) - { - BigInteger p = dhParams.getP(); - int limit = dhParams.getL(); - - if (limit != 0) - { - return new BigInteger(limit, random).setBit(limit - 1); - } - - BigInteger min = TWO; - int m = dhParams.getM(); - if (m != 0) - { - min = ONE.shiftLeft(m - 1); - } - - BigInteger max = p.subtract(TWO); - BigInteger q = dhParams.getQ(); - if (q != null) - { - max = q.subtract(TWO); - } - - return BigIntegers.createRandomInRange(min, max, random); - } - - BigInteger calculatePublic(DHParameters dhParams, BigInteger x) - { - return dhParams.getG().modPow(x, dhParams.getP()); - } -} diff --git a/src/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java deleted file mode 100644 index 4b3c87e..0000000 --- a/src/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.DHKeyGenerationParameters; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; - -import javabc.BigInteger; - -/** - * a Diffie-Hellman key pair generator. - * - * This generates keys consistent for use in the MTI/A0 key agreement protocol - * as described in "Handbook of Applied Cryptography", Pages 516-519. - */ -public class DHKeyPairGenerator - implements AsymmetricCipherKeyPairGenerator -{ - private DHKeyGenerationParameters param; - - public void init( - KeyGenerationParameters param) - { - this.param = (DHKeyGenerationParameters)param; - } - - public AsymmetricCipherKeyPair generateKeyPair() - { - DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE; - DHParameters dhp = param.getParameters(); - - BigInteger x = helper.calculatePrivate(dhp, param.getRandom()); - BigInteger y = helper.calculatePublic(dhp, x); - - return new AsymmetricCipherKeyPair( - new DHPublicKeyParameters(y, dhp), - new DHPrivateKeyParameters(x, dhp)); - } -} diff --git a/src/org/bouncycastle/crypto/generators/DHParametersGenerator.java b/src/org/bouncycastle/crypto/generators/DHParametersGenerator.java deleted file mode 100644 index 508ff74..0000000 --- a/src/org/bouncycastle/crypto/generators/DHParametersGenerator.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.params.DHParameters; - -import javabc.BigInteger; -import javabc.SecureRandom; - -public class DHParametersGenerator -{ - private int size; - private int certainty; - private SecureRandom random; - - private static final BigInteger TWO = BigInteger.valueOf(2); - - /** - * Initialise the parameters generator. - * - * @param size bit length for the prime p - * @param certainty level of certainty for the prime number tests - * @param random a source of randomness - */ - public void init( - int size, - int certainty, - SecureRandom random) - { - this.size = size; - this.certainty = certainty; - this.random = random; - } - - /** - * which generates the p and g values from the given parameters, - * returning the DHParameters object. - *

        - * Note: can take a while... - */ - public DHParameters generateParameters() - { - // - // find a safe prime p where p = 2*q + 1, where p and q are prime. - // - BigInteger[] safePrimes = DHParametersHelper.generateSafePrimes(size, certainty, random); - - BigInteger p = safePrimes[0]; - BigInteger q = safePrimes[1]; - BigInteger g = DHParametersHelper.selectGenerator(p, q, random); - - return new DHParameters(p, g, q, TWO, null); - } -} diff --git a/src/org/bouncycastle/crypto/generators/DHParametersHelper.java b/src/org/bouncycastle/crypto/generators/DHParametersHelper.java deleted file mode 100644 index 834f2a3..0000000 --- a/src/org/bouncycastle/crypto/generators/DHParametersHelper.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.util.BigIntegers; - -class DHParametersHelper -{ - private static final BigInteger ONE = BigInteger.valueOf(1); - private static final BigInteger TWO = BigInteger.valueOf(2); - - /* - * Finds a pair of prime BigInteger's {p, q: p = 2q + 1} - * - * (see: Handbook of Applied Cryptography 4.86) - */ - static BigInteger[] generateSafePrimes(int size, int certainty, SecureRandom random) - { - BigInteger p, q; - int qLength = size - 1; - - for (;;) - { - q = new BigInteger(qLength, 2, random); - - // p <- 2q + 1 - p = q.shiftLeft(1).add(ONE); - - if (p.isProbablePrime(certainty) && (certainty <= 2 || q.isProbablePrime(certainty))) - { - break; - } - } - - return new BigInteger[] { p, q }; - } - - /* - * Select a high order element of the multiplicative group Zp* - * - * p and q must be s.t. p = 2*q + 1, where p and q are prime (see generateSafePrimes) - */ - static BigInteger selectGenerator(BigInteger p, BigInteger q, SecureRandom random) - { - BigInteger pMinusTwo = p.subtract(TWO); - BigInteger g; - - /* - * (see: Handbook of Applied Cryptography 4.80) - */ -// do -// { -// g = BigIntegers.createRandomInRange(TWO, pMinusTwo, random); -// } -// while (g.modPow(TWO, p).equals(ONE) || g.modPow(q, p).equals(ONE)); - - - /* - * RFC 2631 2.2.1.2 (and see: Handbook of Applied Cryptography 4.81) - */ - do - { - BigInteger h = BigIntegers.createRandomInRange(TWO, pMinusTwo, random); - - g = h.modPow(TWO, p); - } - while (g.equals(ONE)); - - - return g; - } -} diff --git a/src/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java deleted file mode 100644 index 6fa8115..0000000 --- a/src/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.DSAKeyGenerationParameters; -import org.bouncycastle.crypto.params.DSAParameters; -import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; -import org.bouncycastle.crypto.params.DSAPublicKeyParameters; -import org.bouncycastle.util.BigIntegers; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * a DSA key pair generator. - * - * This generates DSA keys in line with the method described - * in FIPS 186-3 B.1 FFC Key Pair Generation. - */ -public class DSAKeyPairGenerator - implements AsymmetricCipherKeyPairGenerator -{ - private static final BigInteger ONE = BigInteger.valueOf(1); - - private DSAKeyGenerationParameters param; - - public void init( - KeyGenerationParameters param) - { - this.param = (DSAKeyGenerationParameters)param; - } - - public AsymmetricCipherKeyPair generateKeyPair() - { - DSAParameters dsaParams = param.getParameters(); - - BigInteger x = generatePrivateKey(dsaParams.getQ(), param.getRandom()); - BigInteger y = calculatePublicKey(dsaParams.getP(), dsaParams.getG(), x); - - return new AsymmetricCipherKeyPair( - new DSAPublicKeyParameters(y, dsaParams), - new DSAPrivateKeyParameters(x, dsaParams)); - } - - private static BigInteger generatePrivateKey(BigInteger q, SecureRandom random) - { - // TODO Prefer this method? (change test cases that used fixed random) - // B.1.1 Key Pair Generation Using Extra Random Bits -// BigInteger c = new BigInteger(q.bitLength() + 64, random); -// return c.mod(q.subtract(ONE)).add(ONE); - - // B.1.2 Key Pair Generation by Testing Candidates - return BigIntegers.createRandomInRange(ONE, q.subtract(ONE), random); - } - - private static BigInteger calculatePublicKey(BigInteger p, BigInteger g, BigInteger x) - { - return g.modPow(x, p); - } -} diff --git a/src/org/bouncycastle/crypto/generators/DSAParametersGenerator.java b/src/org/bouncycastle/crypto/generators/DSAParametersGenerator.java deleted file mode 100644 index 3d5fd68..0000000 --- a/src/org/bouncycastle/crypto/generators/DSAParametersGenerator.java +++ /dev/null @@ -1,335 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.digests.SHA256Digest; -import org.bouncycastle.crypto.params.DSAParameters; -import org.bouncycastle.crypto.params.DSAValidationParameters; -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.BigIntegers; - -import javabc.BigInteger; -import javabc.SecureRandom; - -// TODO Update javadoc to mention FIPS 186-3 when done -/** - * generate suitable parameters for DSA, in line with FIPS 186-2. - */ -public class DSAParametersGenerator -{ - private int L, N; - private int certainty; - private SecureRandom random; - - private static final BigInteger ZERO = BigInteger.valueOf(0); - private static final BigInteger ONE = BigInteger.valueOf(1); - private static final BigInteger TWO = BigInteger.valueOf(2); - - /** - * initialise the key generator. - * - * @param size size of the key (range 2^512 -> 2^1024 - 64 bit increments) - * @param certainty measure of robustness of prime (for FIPS 186-2 compliance this should be at least 80). - * @param random random byte source. - */ - public void init( - int size, - int certainty, - SecureRandom random) - { - init(size, getDefaultN(size), certainty, random); - } - - // TODO Make public to enable support for DSA keys > 1024 bits - private void init( - int L, - int N, - int certainty, - SecureRandom random) - { - // TODO Check that the (L, N) pair is in the list of acceptable (L, N pairs) (see Section 4.2) - // TODO Should we enforce the minimum 'certainty' values as per C.3 Table C.1? - - this.L = L; - this.N = N; - this.certainty = certainty; - this.random = random; - } - - /** - * which generates the p and g values from the given parameters, - * returning the DSAParameters object. - *

        - * Note: can take a while... - */ - public DSAParameters generateParameters() - { - return L > 1024 - ? generateParameters_FIPS186_3() - : generateParameters_FIPS186_2(); - } - - private DSAParameters generateParameters_FIPS186_2() - { - byte[] seed = new byte[20]; - byte[] part1 = new byte[20]; - byte[] part2 = new byte[20]; - byte[] u = new byte[20]; - SHA1Digest sha1 = new SHA1Digest(); - int n = (L - 1) / 160; - byte[] w = new byte[L / 8]; - - for (;;) - { - random.nextBytes(seed); - - hash(sha1, seed, part1); - System.arraycopy(seed, 0, part2, 0, seed.length); - inc(part2); - hash(sha1, part2, part2); - - for (int i = 0; i != u.length; i++) - { - u[i] = (byte)(part1[i] ^ part2[i]); - } - - u[0] |= (byte)0x80; - u[19] |= (byte)0x01; - - BigInteger q = new BigInteger(1, u); - - if (!q.isProbablePrime(certainty)) - { - continue; - } - - byte[] offset = Arrays.clone(seed); - inc(offset); - - for (int counter = 0; counter < 4096; ++counter) - { - for (int k = 0; k < n; k++) - { - inc(offset); - hash(sha1, offset, part1); - System.arraycopy(part1, 0, w, w.length - (k + 1) * part1.length, part1.length); - } - - inc(offset); - hash(sha1, offset, part1); - System.arraycopy(part1, part1.length - ((w.length - (n) * part1.length)), w, 0, w.length - n * part1.length); - - w[0] |= (byte)0x80; - - BigInteger x = new BigInteger(1, w); - - BigInteger c = x.mod(q.shiftLeft(1)); - - BigInteger p = x.subtract(c.subtract(ONE)); - - if (p.bitLength() != L) - { - continue; - } - - if (p.isProbablePrime(certainty)) - { - BigInteger g = calculateGenerator_FIPS186_2(p, q, random); - - return new DSAParameters(p, q, g, new DSAValidationParameters(seed, counter)); - } - } - } - } - - private static BigInteger calculateGenerator_FIPS186_2(BigInteger p, BigInteger q, SecureRandom r) - { - BigInteger e = p.subtract(ONE).divide(q); - BigInteger pSub2 = p.subtract(TWO); - - for (;;) - { - BigInteger h = BigIntegers.createRandomInRange(TWO, pSub2, r); - BigInteger g = h.modPow(e, p); - if (g.bitLength() > 1) - { - return g; - } - } - } - - /** - * generate suitable parameters for DSA, in line with - * FIPS 186-3 A.1 Generation of the FFC Primes p and q. - */ - private DSAParameters generateParameters_FIPS186_3() - { -// A.1.1.2 Generation of the Probable Primes p and q Using an Approved Hash Function - // FIXME This should be configurable (digest size in bits must be >= N) - Digest d = new SHA256Digest(); - int outlen = d.getDigestSize() * 8; - -// 1. Check that the (L, N) pair is in the list of acceptable (L, N pairs) (see Section 4.2). If -// the pair is not in the list, then return INVALID. - // Note: checked at initialisation - -// 2. If (seedlen < N), then return INVALID. - // FIXME This should be configurable (must be >= N) - int seedlen = N; - byte[] seed = new byte[seedlen / 8]; - - int n = (L - 1) / outlen; - - int b = (L - 1) % outlen; - - byte[] output = new byte[d.getDigestSize()]; - for (;;) - { -// 5. Get an arbitrary sequence of seedlen bits as the domain_parameter_seed. - random.nextBytes(seed); - -// 6. U = Hash (domain_parameter_seed) mod 2^(N–1). - hash(d, seed, output); - BigInteger U = new BigInteger(1, output).mod(ONE.shiftLeft(N - 1)); - -// 7. q = 2^(N–1) + U + 1 – ( U mod 2). - BigInteger q = ONE.shiftLeft(N - 1).add(U).add(ONE).subtract(U.mod(TWO)); - -// 8. Test whether or not q is prime as specified in Appendix C.3. - // TODO Review C.3 for primality checking - if (!q.isProbablePrime(certainty)) - { -// 9. If q is not a prime, then go to step 5. - continue; - } - -// 10. offset = 1. - // Note: 'offset' value managed incrementally - byte[] offset = Arrays.clone(seed); - -// 11. For counter = 0 to (4L – 1) do - int counterLimit = 4 * L; - for (int counter = 0; counter < counterLimit; ++counter) - { -// 11.1 For j = 0 to n do -// Vj = Hash ((domain_parameter_seed + offset + j) mod 2^seedlen). -// 11.2 W = V0 + (V1 ∗ 2^outlen) + ... + (V^(n–1) ∗ 2^((n–1) ∗ outlen)) + ((Vn mod 2^b) ∗ 2^(n ∗ outlen)). - // TODO Assemble w as a byte array - BigInteger W = ZERO; - for (int j = 0, exp = 0; j <= n; ++j, exp += outlen) - { - inc(offset); - hash(d, offset, output); - - BigInteger Vj = new BigInteger(1, output); - if (j == n) - { - Vj = Vj.mod(ONE.shiftLeft(b)); - } - - W = W.add(Vj.shiftLeft(exp)); - } - -// 11.3 X = W + 2^(L–1). Comment: 0 ≤ W < 2L–1; hence, 2L–1 ≤ X < 2L. - BigInteger X = W.add(ONE.shiftLeft(L - 1)); - -// 11.4 c = X mod 2q. - BigInteger c = X.mod(q.shiftLeft(1)); - -// 11.5 p = X - (c - 1). Comment: p ≡ 1 (mod 2q). - BigInteger p = X.subtract(c.subtract(ONE)); - -// 11.6 If (p < 2^(L - 1)), then go to step 11.9 - if (p.bitLength() != L) - { - continue; - } - -// 11.7 Test whether or not p is prime as specified in Appendix C.3. - // TODO Review C.3 for primality checking - if (p.isProbablePrime(certainty)) - { -// 11.8 If p is determined to be prime, then return VALID and the values of p, q and -// (optionally) the values of domain_parameter_seed and counter. - // TODO Make configurable (8-bit unsigned)? -// int index = 1; -// BigInteger g = calculateGenerator_FIPS186_3_Verifiable(d, p, q, seed, index); -// if (g != null) -// { -// // TODO Should 'index' be a part of the validation parameters? -// return new DSAParameters(p, q, g, new DSAValidationParameters(seed, counter)); -// } - - BigInteger g = calculateGenerator_FIPS186_3_Unverifiable(p, q, random); - return new DSAParameters(p, q, g, new DSAValidationParameters(seed, counter)); - } - -// 11.9 offset = offset + n + 1. Comment: Increment offset; then, as part of -// the loop in step 11, increment counter; if -// counter < 4L, repeat steps 11.1 through 11.8. - // Note: 'offset' value already incremented in inner loop - } -// 12. Go to step 5. - } - } - - private static BigInteger calculateGenerator_FIPS186_3_Unverifiable(BigInteger p, BigInteger q, - SecureRandom r) - { - return calculateGenerator_FIPS186_2(p, q, r); - } - -// private static BigInteger calculateGenerator_FIPS186_3_Verifiable(Digest d, BigInteger p, BigInteger q, -// byte[] seed, int index) -// { -//// A.2.3 Verifiable Canonical Generation of the Generator g -// BigInteger e = p.subtract(ONE).divide(q); -// byte[] ggen = Hex.decode("6767656E"); -// -// // 7. U = domain_parameter_seed || "ggen" || index || count. -// byte[] U = new byte[seed.length + ggen.length + 1 + 2]; -// System.arraycopy(seed, 0, U, 0, seed.length); -// System.arraycopy(ggen, 0, U, seed.length, ggen.length); -// U[U.length - 3] = (byte)index; -// -// byte[] w = new byte[d.getDigestSize()]; -// for (int count = 1; count < (1 << 16); ++count) -// { -// inc(U); -// hash(d, U, w); -// BigInteger W = new BigInteger(1, w); -// BigInteger g = W.modPow(e, p); -// if (g.compareTo(TWO) >= 0) -// { -// return g; -// } -// } -// -// return null; -// } - - private static void hash(Digest d, byte[] input, byte[] output) - { - d.update(input, 0, input.length); - d.doFinal(output, 0); - } - - private static int getDefaultN(int L) - { - return L > 1024 ? 256 : 160; - } - - private static void inc(byte[] buf) - { - for (int i = buf.length - 1; i >= 0; --i) - { - byte b = (byte)((buf[i] + 1) & 0xff); - buf[i] = b; - - if (b != 0) - { - break; - } - } - } -} diff --git a/src/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java deleted file mode 100644 index afc94e6..0000000 --- a/src/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.ECDomainParameters; -import org.bouncycastle.crypto.params.ECKeyGenerationParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.math.ec.ECConstants; -import org.bouncycastle.math.ec.ECPoint; - -public class ECKeyPairGenerator - implements AsymmetricCipherKeyPairGenerator, ECConstants -{ - ECDomainParameters params; - SecureRandom random; - - public void init( - KeyGenerationParameters param) - { - ECKeyGenerationParameters ecP = (ECKeyGenerationParameters)param; - - this.random = ecP.getRandom(); - this.params = ecP.getDomainParameters(); - } - - /** - * Given the domain parameters this routine generates an EC key - * pair in accordance with X9.62 section 5.2.1 pages 26, 27. - */ - public AsymmetricCipherKeyPair generateKeyPair() - { - BigInteger n = params.getN(); - int nBitLength = n.bitLength(); - BigInteger d; - - do - { - d = new BigInteger(nBitLength, random); - } - while (d.equals(ZERO) || (d.compareTo(n) >= 0)); - - ECPoint Q = params.getG().multiply(d); - - return new AsymmetricCipherKeyPair( - new ECPublicKeyParameters(Q, params), - new ECPrivateKeyParameters(d, params)); - } -} diff --git a/src/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java deleted file mode 100644 index 7aba2e1..0000000 --- a/src/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.ElGamalKeyGenerationParameters; -import org.bouncycastle.crypto.params.ElGamalParameters; -import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; -import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; - -/** - * a ElGamal key pair generator. - *

        - * This generates keys consistent for use with ElGamal as described in - * page 164 of "Handbook of Applied Cryptography". - */ -public class ElGamalKeyPairGenerator - implements AsymmetricCipherKeyPairGenerator -{ - private ElGamalKeyGenerationParameters param; - - public void init( - KeyGenerationParameters param) - { - this.param = (ElGamalKeyGenerationParameters)param; - } - - public AsymmetricCipherKeyPair generateKeyPair() - { - DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE; - ElGamalParameters egp = param.getParameters(); - DHParameters dhp = new DHParameters(egp.getP(), egp.getG(), null, egp.getL()); - - BigInteger x = helper.calculatePrivate(dhp, param.getRandom()); - BigInteger y = helper.calculatePublic(dhp, x); - - return new AsymmetricCipherKeyPair( - new ElGamalPublicKeyParameters(y, egp), - new ElGamalPrivateKeyParameters(x, egp)); - } -} diff --git a/src/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java b/src/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java deleted file mode 100644 index 1981ca2..0000000 --- a/src/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.params.ElGamalParameters; - -import javabc.BigInteger; -import javabc.SecureRandom; - -public class ElGamalParametersGenerator -{ - private int size; - private int certainty; - private SecureRandom random; - - public void init( - int size, - int certainty, - SecureRandom random) - { - this.size = size; - this.certainty = certainty; - this.random = random; - } - - /** - * which generates the p and g values from the given parameters, - * returning the ElGamalParameters object. - *

        - * Note: can take a while... - */ - public ElGamalParameters generateParameters() - { - // - // find a safe prime p where p = 2*q + 1, where p and q are prime. - // - BigInteger[] safePrimes = DHParametersHelper.generateSafePrimes(size, certainty, random); - - BigInteger p = safePrimes[0]; - BigInteger q = safePrimes[1]; - BigInteger g = DHParametersHelper.selectGenerator(p, q, random); - - return new ElGamalParameters(p, g); - } -} diff --git a/src/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java deleted file mode 100644 index c49b4e0..0000000 --- a/src/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.GOST3410KeyGenerationParameters; -import org.bouncycastle.crypto.params.GOST3410Parameters; -import org.bouncycastle.crypto.params.GOST3410PrivateKeyParameters; -import org.bouncycastle.crypto.params.GOST3410PublicKeyParameters; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * a GOST3410 key pair generator. - * This generates GOST3410 keys in line with the method described - * in GOST R 34.10-94. - */ -public class GOST3410KeyPairGenerator - implements AsymmetricCipherKeyPairGenerator - { - private static final BigInteger ZERO = BigInteger.valueOf(0); - - private GOST3410KeyGenerationParameters param; - - public void init( - KeyGenerationParameters param) - { - this.param = (GOST3410KeyGenerationParameters)param; - } - - public AsymmetricCipherKeyPair generateKeyPair() - { - BigInteger p, q, a, x, y; - GOST3410Parameters GOST3410Params = param.getParameters(); - SecureRandom random = param.getRandom(); - - q = GOST3410Params.getQ(); - p = GOST3410Params.getP(); - a = GOST3410Params.getA(); - - do - { - x = new BigInteger(256, random); - } - while (x.equals(ZERO) || x.compareTo(q) >= 0); - - // - // calculate the public key. - // - y = a.modPow(x, p); - - return new AsymmetricCipherKeyPair( - new GOST3410PublicKeyParameters(y, GOST3410Params), - new GOST3410PrivateKeyParameters(x, GOST3410Params)); - } - } diff --git a/src/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java b/src/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java deleted file mode 100644 index 49e3b0b..0000000 --- a/src/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java +++ /dev/null @@ -1,541 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.params.GOST3410Parameters; -import org.bouncycastle.crypto.params.GOST3410ValidationParameters; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * generate suitable parameters for GOST3410. - */ -public class GOST3410ParametersGenerator -{ - private int size; - private int typeproc; - private SecureRandom init_random; - - private static final BigInteger ONE = BigInteger.valueOf(1); - private static final BigInteger TWO = BigInteger.valueOf(2); - - /** - * initialise the key generator. - * - * @param size size of the key - * @param typeproc type procedure A,B = 1; A',B' - else - * @param random random byte source. - */ - public void init( - int size, - int typeproc, - SecureRandom random) - { - this.size = size; - this.typeproc = typeproc; - this.init_random = random; - } - - //Procedure A - private int procedure_A(int x0, int c, BigInteger[] pq, int size) - { - //Verify and perform condition: 065536) - { - x0 = init_random.nextInt()/32768; - } - - while((c<0 || c>65536) || (c/2==0)) - { - c = init_random.nextInt()/32768 + 1; - } - - BigInteger C = new BigInteger(Integer.toString(c)); - BigInteger constA16 = new BigInteger("19381"); - - //step1 - BigInteger[] y = new BigInteger[1]; // begin length = 1 - y[0] = new BigInteger(Integer.toString(x0)); - - //step 2 - int[] t = new int[1]; // t - orders; begin length = 1 - t[0] = size; - int s = 0; - for (int i=0; t[i]>=17; i++) - { - // extension array t - int tmp_t[] = new int[t.length + 1]; /////////////// - System.arraycopy(t,0,tmp_t,0,t.length); // extension - t = new int[tmp_t.length]; // array t - System.arraycopy(tmp_t, 0, t, 0, tmp_t.length); /////////////// - - t[i+1] = t[i]/2; - s = i+1; - } - - //step3 - BigInteger p[] = new BigInteger[s+1]; - p[s] = new BigInteger("8003",16); //set min prime number length 16 bit - - int m = s-1; //step4 - - for (int i=0; i=0) - { - break; //step 14 - } - else - { - pq[0] = p[0]; - pq[1] = p[1]; - return y[0].intValue(); //return for procedure B step 2 - } - } - } - return y[0].intValue(); - } - - //Procedure A' - private long procedure_Aa(long x0, long c, BigInteger[] pq, int size) - { - //Verify and perform condition: 04294967296L) - { - x0 = init_random.nextInt()*2; - } - - while((c<0 || c>4294967296L) || (c/2==0)) - { - c = init_random.nextInt()*2+1; - } - - BigInteger C = new BigInteger(Long.toString(c)); - BigInteger constA32 = new BigInteger("97781173"); - - //step1 - BigInteger[] y = new BigInteger[1]; // begin length = 1 - y[0] = new BigInteger(Long.toString(x0)); - - //step 2 - int[] t = new int[1]; // t - orders; begin length = 1 - t[0] = size; - int s = 0; - for (int i=0; t[i]>=33; i++) - { - // extension array t - int tmp_t[] = new int[t.length + 1]; /////////////// - System.arraycopy(t,0,tmp_t,0,t.length); // extension - t = new int[tmp_t.length]; // array t - System.arraycopy(tmp_t, 0, t, 0, tmp_t.length); /////////////// - - t[i+1] = t[i]/2; - s = i+1; - } - - //step3 - BigInteger p[] = new BigInteger[s+1]; - p[s] = new BigInteger("8000000B",16); //set min prime number length 32 bit - - int m = s-1; //step4 - - for (int i=0; i=0) - { - break; //step 14 - } - else - { - pq[0] = p[0]; - pq[1] = p[1]; - return y[0].longValue(); //return for procedure B' step 2 - } - } - } - return y[0].longValue(); - } - - //Procedure B - private void procedure_B(int x0, int c, BigInteger[] pq) - { - //Verify and perform condition: 065536) - { - x0 = init_random.nextInt()/32768; - } - - while((c<0 || c>65536) || (c/2==0)) - { - c = init_random.nextInt()/32768 + 1; - } - - BigInteger [] qp = new BigInteger[2]; - BigInteger q = null, Q = null, p = null; - BigInteger C = new BigInteger(Integer.toString(c)); - BigInteger constA16 = new BigInteger("19381"); - - //step1 - x0 = procedure_A(x0, c, qp, 256); - q = qp[0]; - - //step2 - x0 = procedure_A(x0, c, qp, 512); - Q = qp[0]; - - BigInteger[] y = new BigInteger[65]; - y[0] = new BigInteger(Integer.toString(x0)); - - int tp = 1024; - - step3: for(;;) - { - //step 3 - for (int j=0; j<64; j++) - { - y[j+1] = (y[j].multiply(constA16).add(C)).mod(TWO.pow(16)); - } - - //step 4 - BigInteger Y = new BigInteger("0"); - - for (int j=0; j<64; j++) - { - Y = Y.add(y[j].multiply(TWO.pow(16*j))); - } - - y[0] = y[64]; //step 5 - - //step 6 - BigInteger N = TWO.pow(tp-1).divide(q.multiply(Q)). - add((TWO.pow(tp-1).multiply(Y)). - divide(q.multiply(Q).multiply(TWO.pow(1024)))); - - if (N.mod(TWO).compareTo(ONE)==0) - { - N = N.add(ONE); - } - - int k = 0; //step 7 - - step8: for(;;) - { - //step 11 - p = q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))).add(ONE); - - if (p.compareTo(TWO.pow(tp))==1) - { - continue step3; //step 9 - } - - //step10 - if ((TWO.modPow(q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)==0) && - (TWO.modPow(q.multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)!=0)) - { - pq[0] = p; - pq[1] = q; - return; - } - else - { - k += 2; - continue step8; - } - } - } - } - - //Procedure B' - private void procedure_Bb(long x0, long c, BigInteger[] pq) - { - //Verify and perform condition: 04294967296L) - { - x0 = init_random.nextInt()*2; - } - - while((c<0 || c>4294967296L) || (c/2==0)) - { - c = init_random.nextInt()*2+1; - } - - BigInteger [] qp = new BigInteger[2]; - BigInteger q = null, Q = null, p = null; - BigInteger C = new BigInteger(Long.toString(c)); - BigInteger constA32 = new BigInteger("97781173"); - - //step1 - x0 = procedure_Aa(x0, c, qp, 256); - q = qp[0]; - - //step2 - x0 = procedure_Aa(x0, c, qp, 512); - Q = qp[0]; - - BigInteger[] y = new BigInteger[33]; - y[0] = new BigInteger(Long.toString(x0)); - - int tp = 1024; - - step3: for(;;) - { - //step 3 - for (int j=0; j<32; j++) - { - y[j+1] = (y[j].multiply(constA32).add(C)).mod(TWO.pow(32)); - } - - //step 4 - BigInteger Y = new BigInteger("0"); - for (int j=0; j<32; j++) - { - Y = Y.add(y[j].multiply(TWO.pow(32*j))); - } - - y[0] = y[32]; //step 5 - - //step 6 - BigInteger N = TWO.pow(tp-1).divide(q.multiply(Q)). - add((TWO.pow(tp-1).multiply(Y)). - divide(q.multiply(Q).multiply(TWO.pow(1024)))); - - if (N.mod(TWO).compareTo(ONE)==0) - { - N = N.add(ONE); - } - - int k = 0; //step 7 - - step8: for(;;) - { - //step 11 - p = q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))).add(ONE); - - if (p.compareTo(TWO.pow(tp))==1) - { - continue step3; //step 9 - } - - //step10 - if ((TWO.modPow(q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)==0) && - (TWO.modPow(q.multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)!=0)) - { - pq[0] = p; - pq[1] = q; - return; - } - else - { - k += 2; - continue step8; - } - } - } - } - - - /** - * Procedure C - * procedure generates the a value from the given p,q, - * returning the a value. - */ - private BigInteger procedure_C(BigInteger p, BigInteger q) - { - BigInteger pSub1 = p.subtract(ONE); - BigInteger pSub1DivQ = pSub1.divide(q); - int length = p.bitLength(); - - for(;;) - { - BigInteger d = new BigInteger(length, init_random); - - // 1 < d < p-1 - if (d.compareTo(ONE) > 0 && d.compareTo(pSub1) < 0) - { - BigInteger a = d.modPow(pSub1DivQ, p); - - if (a.compareTo(ONE) != 0) - { - return a; - } - } - } - } - - /** - * which generates the p , q and a values from the given parameters, - * returning the GOST3410Parameters object. - */ - public GOST3410Parameters generateParameters() - { - BigInteger [] pq = new BigInteger[2]; - BigInteger q = null, p = null, a = null; - - int x0, c; - long x0L, cL; - - if (typeproc==1) - { - x0 = init_random.nextInt(); - c = init_random.nextInt(); - - switch(size) - { - case 512: - procedure_A(x0, c, pq, 512); - break; - case 1024: - procedure_B(x0, c, pq); - break; - default: - throw new IllegalArgumentException("Ooops! key size 512 or 1024 bit."); - } - p = pq[0]; q = pq[1]; - a = procedure_C(p, q); - //System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16)); - //System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a); - return new GOST3410Parameters(p, q, a, new GOST3410ValidationParameters(x0, c)); - } - else - { - x0L = init_random.nextLong(); - cL = init_random.nextLong(); - - switch(size) - { - case 512: - procedure_Aa(x0L, cL, pq, 512); - break; - case 1024: - procedure_Bb(x0L, cL, pq); - break; - default: - throw new IllegalStateException("Ooops! key size 512 or 1024 bit."); - } - p = pq[0]; q = pq[1]; - a = procedure_C(p, q); - //System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16)); - //System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a); - return new GOST3410Parameters(p, q, a, new GOST3410ValidationParameters(x0L, cL)); - } - } -} diff --git a/src/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java b/src/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java deleted file mode 100644 index 7789b7b..0000000 --- a/src/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.Digest; - -/** - * KDF1 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 - *
        - * This implementation is based on ISO 18033/IEEE P1363a. - */ -public class KDF1BytesGenerator - extends BaseKDFBytesGenerator -{ - /** - * Construct a KDF1 byte generator. - *

        - * @param digest the digest to be used as the source of derived keys. - */ - public KDF1BytesGenerator( - Digest digest) - { - super(0, digest); - } -} diff --git a/src/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java b/src/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java deleted file mode 100644 index ac0c64a..0000000 --- a/src/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.Digest; - -/** - * KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 - *
        - * This implementation is based on IEEE P1363/ISO 18033. - */ -public class KDF2BytesGenerator - extends BaseKDFBytesGenerator -{ - /** - * Construct a KDF2 bytes generator. Generates key material - * according to IEEE P1363 or ISO 18033 depending on the initialisation. - *

        - * @param digest the digest to be used as the source of derived keys. - */ - public KDF2BytesGenerator( - Digest digest) - { - super(1, digest); - } -} diff --git a/src/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java b/src/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java deleted file mode 100644 index e93c0d7..0000000 --- a/src/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.DerivationFunction; -import org.bouncycastle.crypto.DerivationParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.params.MGFParameters; - -/** - * Generator for MGF1 as defined in PKCS 1v2 - */ -public class MGF1BytesGenerator - implements DerivationFunction -{ - private Digest digest; - private byte[] seed; - private int hLen; - - /** - * @param digest the digest to be used as the source of generated bytes - */ - public MGF1BytesGenerator( - Digest digest) - { - this.digest = digest; - this.hLen = digest.getDigestSize(); - } - - public void init( - DerivationParameters param) - { - if (!(param instanceof MGFParameters)) - { - throw new IllegalArgumentException("MGF parameters required for MGF1Generator"); - } - - MGFParameters p = (MGFParameters)param; - - seed = p.getSeed(); - } - - /** - * return the underlying digest. - */ - public Digest getDigest() - { - return digest; - } - - /** - * int to octet string. - */ - private void ItoOSP( - int i, - byte[] sp) - { - sp[0] = (byte)(i >>> 24); - sp[1] = (byte)(i >>> 16); - sp[2] = (byte)(i >>> 8); - sp[3] = (byte)(i >>> 0); - } - - /** - * fill len bytes of the output buffer with bytes generated from - * the derivation function. - * - * @throws DataLengthException if the out buffer is too small. - */ - public int generateBytes( - byte[] out, - int outOff, - int len) - throws DataLengthException, IllegalArgumentException - { - if ((out.length - len) < outOff) - { - throw new DataLengthException("output buffer too small"); - } - - byte[] hashBuf = new byte[hLen]; - byte[] C = new byte[4]; - int counter = 0; - - digest.reset(); - - if (len > hLen) - { - do - { - ItoOSP(counter, C); - - digest.update(seed, 0, seed.length); - digest.update(C, 0, C.length); - digest.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, out, outOff + counter * hLen, hLen); - } - while (++counter < (len / hLen)); - } - - if ((counter * hLen) < len) - { - ItoOSP(counter, C); - - digest.update(seed, 0, seed.length); - digest.update(C, 0, C.length); - digest.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, out, outOff + counter * hLen, len - (counter * hLen)); - } - - return len; - } -} diff --git a/src/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java deleted file mode 100644 index 6700cf3..0000000 --- a/src/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java +++ /dev/null @@ -1,365 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.NaccacheSternKeyGenerationParameters; -import org.bouncycastle.crypto.params.NaccacheSternKeyParameters; -import org.bouncycastle.crypto.params.NaccacheSternPrivateKeyParameters; - -import javabc.BigInteger; -import javabc.SecureRandom; -import java.util.Vector; - -/** - * Key generation parameters for NaccacheStern cipher. For details on this cipher, please see - * - * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf - */ -public class NaccacheSternKeyPairGenerator - implements AsymmetricCipherKeyPairGenerator -{ - - private static int[] smallPrimes = - { - 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, - 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, - 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, - 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, - 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, - 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, - 541, 547, 557 - }; - - private NaccacheSternKeyGenerationParameters param; - - private static final BigInteger ONE = BigInteger.valueOf(1); // JDK 1.1 compatibility - - /* - * (non-Javadoc) - * - * @see org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator#init(org.bouncycastle.crypto.KeyGenerationParameters) - */ - public void init(KeyGenerationParameters param) - { - this.param = (NaccacheSternKeyGenerationParameters)param; - } - - /* - * (non-Javadoc) - * - * @see org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator#generateKeyPair() - */ - public AsymmetricCipherKeyPair generateKeyPair() - { - int strength = param.getStrength(); - SecureRandom rand = param.getRandom(); - int certainty = param.getCertainty(); - boolean debug = param.isDebug(); - - if (debug) - { - System.out.println("Fetching first " + param.getCntSmallPrimes() + " primes."); - } - - Vector smallPrimes = findFirstPrimes(param.getCntSmallPrimes()); - smallPrimes = permuteList(smallPrimes, rand); - - BigInteger u = ONE; - BigInteger v = ONE; - - for (int i = 0; i < smallPrimes.size() / 2; i++) - { - u = u.multiply((BigInteger)smallPrimes.elementAt(i)); - } - for (int i = smallPrimes.size() / 2; i < smallPrimes.size(); i++) - { - v = v.multiply((BigInteger)smallPrimes.elementAt(i)); - } - - BigInteger sigma = u.multiply(v); - - // n = (2 a u p_ + 1 ) ( 2 b v q_ + 1) - // -> |n| = strength - // |2| = 1 in bits - // -> |a| * |b| = |n| - |u| - |v| - |p_| - |q_| - |2| -|2| - // remainingStrength = strength - sigma.bitLength() - p_.bitLength() - - // q_.bitLength() - 1 -1 - int remainingStrength = strength - sigma.bitLength() - 48; - BigInteger a = generatePrime(remainingStrength / 2 + 1, certainty, rand); - BigInteger b = generatePrime(remainingStrength / 2 + 1, certainty, rand); - - BigInteger p_; - BigInteger q_; - BigInteger p; - BigInteger q; - long tries = 0; - if (debug) - { - System.out.println("generating p and q"); - } - - BigInteger _2au = a.multiply(u).shiftLeft(1); - BigInteger _2bv = b.multiply(v).shiftLeft(1); - - for (;;) - { - tries++; - - p_ = generatePrime(24, certainty, rand); - - p = p_.multiply(_2au).add(ONE); - - if (!p.isProbablePrime(certainty)) - { - continue; - } - - for (;;) - { - q_ = generatePrime(24, certainty, rand); - - if (p_.equals(q_)) - { - continue; - } - - q = q_.multiply(_2bv).add(ONE); - - if (q.isProbablePrime(certainty)) - { - break; - } - } - - if (!sigma.gcd(p_.multiply(q_)).equals(ONE)) - { - // System.out.println("sigma.gcd(p_.mult(q_)) != 1!\n p_: " + p_ - // +"\n q_: "+ q_ ); - continue; - } - - if (p.multiply(q).bitLength() < strength) - { - if (debug) - { - System.out.println("key size too small. Should be " + strength + " but is actually " - + p.multiply(q).bitLength()); - } - continue; - } - break; - } - - if (debug) - { - System.out.println("needed " + tries + " tries to generate p and q."); - } - - BigInteger n = p.multiply(q); - BigInteger phi_n = p.subtract(ONE).multiply(q.subtract(ONE)); - BigInteger g; - tries = 0; - if (debug) - { - System.out.println("generating g"); - } - for (;;) - { - - Vector gParts = new Vector(); - for (int ind = 0; ind != smallPrimes.size(); ind++) - { - BigInteger i = (BigInteger)smallPrimes.elementAt(ind); - BigInteger e = phi_n.divide(i); - - for (;;) - { - tries++; - g = new BigInteger(strength, certainty, rand); - if (g.modPow(e, n).equals(ONE)) - { - continue; - } - gParts.addElement(g); - break; - } - } - g = ONE; - for (int i = 0; i < smallPrimes.size(); i++) - { - g = g.multiply(((BigInteger)gParts.elementAt(i)).modPow(sigma.divide((BigInteger)smallPrimes.elementAt(i)), n)).mod(n); - } - - // make sure that g is not divisible by p_i or q_i - boolean divisible = false; - for (int i = 0; i < smallPrimes.size(); i++) - { - if (g.modPow(phi_n.divide((BigInteger)smallPrimes.elementAt(i)), n).equals(ONE)) - { - if (debug) - { - System.out.println("g has order phi(n)/" + smallPrimes.elementAt(i) + "\n g: " + g); - } - divisible = true; - break; - } - } - - if (divisible) - { - continue; - } - - // make sure that g has order > phi_n/4 - - if (g.modPow(phi_n.divide(BigInteger.valueOf(4)), n).equals(ONE)) - { - if (debug) - { - System.out.println("g has order phi(n)/4\n g:" + g); - } - continue; - } - - if (g.modPow(phi_n.divide(p_), n).equals(ONE)) - { - if (debug) - { - System.out.println("g has order phi(n)/p'\n g: " + g); - } - continue; - } - if (g.modPow(phi_n.divide(q_), n).equals(ONE)) - { - if (debug) - { - System.out.println("g has order phi(n)/q'\n g: " + g); - } - continue; - } - if (g.modPow(phi_n.divide(a), n).equals(ONE)) - { - if (debug) - { - System.out.println("g has order phi(n)/a\n g: " + g); - } - continue; - } - if (g.modPow(phi_n.divide(b), n).equals(ONE)) - { - if (debug) - { - System.out.println("g has order phi(n)/b\n g: " + g); - } - continue; - } - break; - } - if (debug) - { - System.out.println("needed " + tries + " tries to generate g"); - System.out.println(); - System.out.println("found new NaccacheStern cipher variables:"); - System.out.println("smallPrimes: " + smallPrimes); - System.out.println("sigma:...... " + sigma + " (" + sigma.bitLength() + " bits)"); - System.out.println("a:.......... " + a); - System.out.println("b:.......... " + b); - System.out.println("p':......... " + p_); - System.out.println("q':......... " + q_); - System.out.println("p:.......... " + p); - System.out.println("q:.......... " + q); - System.out.println("n:.......... " + n); - System.out.println("phi(n):..... " + phi_n); - System.out.println("g:.......... " + g); - System.out.println(); - } - - return new AsymmetricCipherKeyPair(new NaccacheSternKeyParameters(false, g, n, sigma.bitLength()), - new NaccacheSternPrivateKeyParameters(g, n, sigma.bitLength(), smallPrimes, phi_n)); - } - - private static BigInteger generatePrime( - int bitLength, - int certainty, - SecureRandom rand) - { - BigInteger p_ = new BigInteger(bitLength, certainty, rand); - while (p_.bitLength() != bitLength) - { - p_ = new BigInteger(bitLength, certainty, rand); - } - return p_; - } - - /** - * Generates a permuted ArrayList from the original one. The original List - * is not modified - * - * @param arr - * the ArrayList to be permuted - * @param rand - * the source of Randomness for permutation - * @return a new ArrayList with the permuted elements. - */ - private static Vector permuteList( - Vector arr, - SecureRandom rand) - { - Vector retval = new Vector(); - Vector tmp = new Vector(); - for (int i = 0; i < arr.size(); i++) - { - tmp.addElement(arr.elementAt(i)); - } - retval.addElement(tmp.elementAt(0)); - tmp.removeElementAt(0); - while (tmp.size() != 0) - { - retval.insertElementAt(tmp.elementAt(0), getInt(rand, retval.size() + 1)); - tmp.removeElementAt(0); - } - return retval; - } - - private static int getInt( - SecureRandom rand, - int n) - { - if ((n & -n) == n) - { - return (int)((n * (long)(rand.nextInt() & 0x7fffffff)) >> 31); - } - - int bits, val; - do - { - bits = rand.nextInt() & 0x7fffffff; - val = bits % n; - } - while (bits - val + (n-1) < 0); - - return val; - } - - /** - * Finds the first 'count' primes starting with 3 - * - * @param count - * the number of primes to find - * @return a vector containing the found primes as Integer - */ - private static Vector findFirstPrimes( - int count) - { - Vector primes = new Vector(count); - - for (int i = 0; i != count; i++) - { - primes.addElement(BigInteger.valueOf(smallPrimes[i])); - } - - return primes; - } - -} diff --git a/src/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java b/src/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java deleted file mode 100644 index 8a4d28a..0000000 --- a/src/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.PBEParametersGenerator; -import org.bouncycastle.crypto.digests.MD5Digest; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * Generator for PBE derived keys and ivs as usd by OpenSSL. - *

        - * The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an - * iteration count of 1. - *

        - */ -public class OpenSSLPBEParametersGenerator - extends PBEParametersGenerator -{ - private Digest digest = new MD5Digest(); - - /** - * Construct a OpenSSL Parameters generator. - */ - public OpenSSLPBEParametersGenerator() - { - } - - /** - * Initialise - note the iteration count for this algorithm is fixed at 1. - * - * @param password password to use. - * @param salt salt to use. - */ - public void init( - byte[] password, - byte[] salt) - { - super.init(password, salt, 1); - } - - /** - * the derived key function, the ith hash of the password and the salt. - */ - private byte[] generateDerivedKey( - int bytesNeeded) - { - byte[] buf = new byte[digest.getDigestSize()]; - byte[] key = new byte[bytesNeeded]; - int offset = 0; - - for (;;) - { - digest.update(password, 0, password.length); - digest.update(salt, 0, salt.length); - - digest.doFinal(buf, 0); - - int len = (bytesNeeded > buf.length) ? buf.length : bytesNeeded; - System.arraycopy(buf, 0, key, offset, len); - offset += len; - - // check if we need any more - bytesNeeded -= len; - if (bytesNeeded == 0) - { - break; - } - - // do another round - digest.reset(); - digest.update(buf, 0, buf.length); - } - - return key; - } - - /** - * Generate a key parameter derived from the password, salt, and iteration - * count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - * @exception IllegalArgumentException if the key length larger than the base hash size. - */ - public CipherParameters generateDerivedParameters( - int keySize) - { - keySize = keySize / 8; - - byte[] dKey = generateDerivedKey(keySize); - - return new KeyParameter(dKey, 0, keySize); - } - - /** - * Generate a key with initialisation vector parameter derived from - * the password, salt, and iteration count we are currently initialised - * with. - * - * @param keySize the size of the key we want (in bits) - * @param ivSize the size of the iv we want (in bits) - * @return a ParametersWithIV object. - * @exception IllegalArgumentException if keySize + ivSize is larger than the base hash size. - */ - public CipherParameters generateDerivedParameters( - int keySize, - int ivSize) - { - keySize = keySize / 8; - ivSize = ivSize / 8; - - byte[] dKey = generateDerivedKey(keySize + ivSize); - - return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize); - } - - /** - * Generate a key parameter for use with a MAC derived from the password, - * salt, and iteration count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - * @exception IllegalArgumentException if the key length larger than the base hash size. - */ - public CipherParameters generateDerivedMacParameters( - int keySize) - { - return generateDerivedParameters(keySize); - } -} diff --git a/src/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java b/src/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java deleted file mode 100644 index 8fb1cc8..0000000 --- a/src/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java +++ /dev/null @@ -1,221 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.ExtendedDigest; -import org.bouncycastle.crypto.PBEParametersGenerator; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * Generator for PBE derived keys and ivs as defined by PKCS 12 V1.0. - *

        - * The document this implementation is based on can be found at - * - * RSA's PKCS12 Page - */ -public class PKCS12ParametersGenerator - extends PBEParametersGenerator -{ - public static final int KEY_MATERIAL = 1; - public static final int IV_MATERIAL = 2; - public static final int MAC_MATERIAL = 3; - - private Digest digest; - - private int u; - private int v; - - /** - * Construct a PKCS 12 Parameters generator. This constructor will - * accept any digest which also implements ExtendedDigest. - * - * @param digest the digest to be used as the source of derived keys. - * @exception IllegalArgumentException if an unknown digest is passed in. - */ - public PKCS12ParametersGenerator( - Digest digest) - { - this.digest = digest; - if (digest instanceof ExtendedDigest) - { - u = digest.getDigestSize(); - v = ((ExtendedDigest)digest).getByteLength(); - } - else - { - throw new IllegalArgumentException("Digest " + digest.getAlgorithmName() + " unsupported"); - } - } - - /** - * add a + b + 1, returning the result in a. The a value is treated - * as a BigInteger of length (b.length * 8) bits. The result is - * modulo 2^b.length in case of overflow. - */ - private void adjust( - byte[] a, - int aOff, - byte[] b) - { - int x = (b[b.length - 1] & 0xff) + (a[aOff + b.length - 1] & 0xff) + 1; - - a[aOff + b.length - 1] = (byte)x; - x >>>= 8; - - for (int i = b.length - 2; i >= 0; i--) - { - x += (b[i] & 0xff) + (a[aOff + i] & 0xff); - a[aOff + i] = (byte)x; - x >>>= 8; - } - } - - /** - * generation of a derived key ala PKCS12 V1.0. - */ - private byte[] generateDerivedKey( - int idByte, - int n) - { - byte[] D = new byte[v]; - byte[] dKey = new byte[n]; - - for (int i = 0; i != D.length; i++) - { - D[i] = (byte)idByte; - } - - byte[] S; - - if ((salt != null) && (salt.length != 0)) - { - S = new byte[v * ((salt.length + v - 1) / v)]; - - for (int i = 0; i != S.length; i++) - { - S[i] = salt[i % salt.length]; - } - } - else - { - S = new byte[0]; - } - - byte[] P; - - if ((password != null) && (password.length != 0)) - { - P = new byte[v * ((password.length + v - 1) / v)]; - - for (int i = 0; i != P.length; i++) - { - P[i] = password[i % password.length]; - } - } - else - { - P = new byte[0]; - } - - byte[] I = new byte[S.length + P.length]; - - System.arraycopy(S, 0, I, 0, S.length); - System.arraycopy(P, 0, I, S.length, P.length); - - byte[] B = new byte[v]; - int c = (n + u - 1) / u; - - for (int i = 1; i <= c; i++) - { - byte[] A = new byte[u]; - - digest.update(D, 0, D.length); - digest.update(I, 0, I.length); - digest.doFinal(A, 0); - for (int j = 1; j < iterationCount; j++) - { - digest.update(A, 0, A.length); - digest.doFinal(A, 0); - } - - for (int j = 0; j != B.length; j++) - { - B[j] = A[j % A.length]; - } - - for (int j = 0; j != I.length / v; j++) - { - adjust(I, j * v, B); - } - - if (i == c) - { - System.arraycopy(A, 0, dKey, (i - 1) * u, dKey.length - ((i - 1) * u)); - } - else - { - System.arraycopy(A, 0, dKey, (i - 1) * u, A.length); - } - } - - return dKey; - } - - /** - * Generate a key parameter derived from the password, salt, and iteration - * count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - */ - public CipherParameters generateDerivedParameters( - int keySize) - { - keySize = keySize / 8; - - byte[] dKey = generateDerivedKey(KEY_MATERIAL, keySize); - - return new KeyParameter(dKey, 0, keySize); - } - - /** - * Generate a key with initialisation vector parameter derived from - * the password, salt, and iteration count we are currently initialised - * with. - * - * @param keySize the size of the key we want (in bits) - * @param ivSize the size of the iv we want (in bits) - * @return a ParametersWithIV object. - */ - public CipherParameters generateDerivedParameters( - int keySize, - int ivSize) - { - keySize = keySize / 8; - ivSize = ivSize / 8; - - byte[] dKey = generateDerivedKey(KEY_MATERIAL, keySize); - - byte[] iv = generateDerivedKey(IV_MATERIAL, ivSize); - - return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), iv, 0, ivSize); - } - - /** - * Generate a key parameter for use with a MAC derived from the password, - * salt, and iteration count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - */ - public CipherParameters generateDerivedMacParameters( - int keySize) - { - keySize = keySize / 8; - - byte[] dKey = generateDerivedKey(MAC_MATERIAL, keySize); - - return new KeyParameter(dKey, 0, keySize); - } -} diff --git a/src/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java b/src/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java deleted file mode 100644 index 1c62ecc..0000000 --- a/src/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.PBEParametersGenerator; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * Generator for PBE derived keys and ivs as defined by PKCS 5 V2.0 Scheme 1. - * Note this generator is limited to the size of the hash produced by the - * digest used to drive it. - *

        - * The document this implementation is based on can be found at - * - * RSA's PKCS5 Page - */ -public class PKCS5S1ParametersGenerator - extends PBEParametersGenerator -{ - private Digest digest; - - /** - * Construct a PKCS 5 Scheme 1 Parameters generator. - * - * @param digest the digest to be used as the source of derived keys. - */ - public PKCS5S1ParametersGenerator( - Digest digest) - { - this.digest = digest; - } - - /** - * the derived key function, the ith hash of the password and the salt. - */ - private byte[] generateDerivedKey() - { - byte[] digestBytes = new byte[digest.getDigestSize()]; - - digest.update(password, 0, password.length); - digest.update(salt, 0, salt.length); - - digest.doFinal(digestBytes, 0); - for (int i = 1; i < iterationCount; i++) - { - digest.update(digestBytes, 0, digestBytes.length); - digest.doFinal(digestBytes, 0); - } - - return digestBytes; - } - - /** - * Generate a key parameter derived from the password, salt, and iteration - * count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - * @exception IllegalArgumentException if the key length larger than the base hash size. - */ - public CipherParameters generateDerivedParameters( - int keySize) - { - keySize = keySize / 8; - - if (keySize > digest.getDigestSize()) - { - throw new IllegalArgumentException( - "Can't generate a derived key " + keySize + " bytes long."); - } - - byte[] dKey = generateDerivedKey(); - - return new KeyParameter(dKey, 0, keySize); - } - - /** - * Generate a key with initialisation vector parameter derived from - * the password, salt, and iteration count we are currently initialised - * with. - * - * @param keySize the size of the key we want (in bits) - * @param ivSize the size of the iv we want (in bits) - * @return a ParametersWithIV object. - * @exception IllegalArgumentException if keySize + ivSize is larger than the base hash size. - */ - public CipherParameters generateDerivedParameters( - int keySize, - int ivSize) - { - keySize = keySize / 8; - ivSize = ivSize / 8; - - if ((keySize + ivSize) > digest.getDigestSize()) - { - throw new IllegalArgumentException( - "Can't generate a derived key " + (keySize + ivSize) + " bytes long."); - } - - byte[] dKey = generateDerivedKey(); - - return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize); - } - - /** - * Generate a key parameter for use with a MAC derived from the password, - * salt, and iteration count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - * @exception IllegalArgumentException if the key length larger than the base hash size. - */ - public CipherParameters generateDerivedMacParameters( - int keySize) - { - return generateDerivedParameters(keySize); - } -} diff --git a/src/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java b/src/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java deleted file mode 100644 index a717332..0000000 --- a/src/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.PBEParametersGenerator; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.macs.HMac; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * Generator for PBE derived keys and ivs as defined by PKCS 5 V2.0 Scheme 2. - * This generator uses a SHA-1 HMac as the calculation function. - *

        - * The document this implementation is based on can be found at - * - * RSA's PKCS5 Page - */ -public class PKCS5S2ParametersGenerator - extends PBEParametersGenerator -{ - private Mac hMac; - - /** - * construct a PKCS5 Scheme 2 Parameters generator. - */ - public PKCS5S2ParametersGenerator() - { - this(new SHA1Digest()); - } - - public PKCS5S2ParametersGenerator(Digest digest) - { - hMac = new HMac(digest); - } - - private void F( - byte[] P, - byte[] S, - int c, - byte[] iBuf, - byte[] out, - int outOff) - { - byte[] state = new byte[hMac.getMacSize()]; - CipherParameters param = new KeyParameter(P); - - hMac.init(param); - - if (S != null) - { - hMac.update(S, 0, S.length); - } - - hMac.update(iBuf, 0, iBuf.length); - - hMac.doFinal(state, 0); - - System.arraycopy(state, 0, out, outOff, state.length); - - if (c == 0) - { - throw new IllegalArgumentException("iteration count must be at least 1."); - } - - for (int count = 1; count < c; count++) - { - hMac.init(param); - hMac.update(state, 0, state.length); - hMac.doFinal(state, 0); - - for (int j = 0; j != state.length; j++) - { - out[outOff + j] ^= state[j]; - } - } - } - - private void intToOctet( - byte[] buf, - int i) - { - buf[0] = (byte)(i >>> 24); - buf[1] = (byte)(i >>> 16); - buf[2] = (byte)(i >>> 8); - buf[3] = (byte)i; - } - - private byte[] generateDerivedKey( - int dkLen) - { - int hLen = hMac.getMacSize(); - int l = (dkLen + hLen - 1) / hLen; - byte[] iBuf = new byte[4]; - byte[] out = new byte[l * hLen]; - - for (int i = 1; i <= l; i++) - { - intToOctet(iBuf, i); - - F(password, salt, iterationCount, iBuf, out, (i - 1) * hLen); - } - - return out; - } - - /** - * Generate a key parameter derived from the password, salt, and iteration - * count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - */ - public CipherParameters generateDerivedParameters( - int keySize) - { - keySize = keySize / 8; - - byte[] dKey = generateDerivedKey(keySize); - - return new KeyParameter(dKey, 0, keySize); - } - - /** - * Generate a key with initialisation vector parameter derived from - * the password, salt, and iteration count we are currently initialised - * with. - * - * @param keySize the size of the key we want (in bits) - * @param ivSize the size of the iv we want (in bits) - * @return a ParametersWithIV object. - */ - public CipherParameters generateDerivedParameters( - int keySize, - int ivSize) - { - keySize = keySize / 8; - ivSize = ivSize / 8; - - byte[] dKey = generateDerivedKey(keySize + ivSize); - - return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize); - } - - /** - * Generate a key parameter for use with a MAC derived from the password, - * salt, and iteration count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - */ - public CipherParameters generateDerivedMacParameters( - int keySize) - { - return generateDerivedParameters(keySize); - } -} diff --git a/src/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java b/src/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java deleted file mode 100644 index 92d5df7..0000000 --- a/src/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSAKeyParameters; -import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * Generate a random factor suitable for use with RSA blind signatures - * as outlined in Chaum's blinding and unblinding as outlined in - * "Handbook of Applied Cryptography", page 475. - */ -public class RSABlindingFactorGenerator -{ - private static BigInteger ZERO = BigInteger.valueOf(0); - private static BigInteger ONE = BigInteger.valueOf(1); - - private RSAKeyParameters key; - private SecureRandom random; - - /** - * Initialise the factor generator - * - * @param param the necessary RSA key parameters. - */ - public void init( - CipherParameters param) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - key = (RSAKeyParameters)rParam.getParameters(); - random = rParam.getRandom(); - } - else - { - key = (RSAKeyParameters)param; - random = new SecureRandom(); - } - - if (key instanceof RSAPrivateCrtKeyParameters) - { - throw new IllegalArgumentException("generator requires RSA public key"); - } - } - - /** - * Generate a suitable blind factor for the public key the generator was initialised with. - * - * @return a random blind factor - */ - public BigInteger generateBlindingFactor() - { - if (key == null) - { - throw new IllegalStateException("generator not initialised"); - } - - BigInteger m = key.getModulus(); - int length = m.bitLength() - 1; // must be less than m.bitLength() - BigInteger factor; - BigInteger gcd; - - do - { - factor = new BigInteger(length, random); - gcd = factor.gcd(m); - } - while (factor.equals(ZERO) || factor.equals(ONE) || !gcd.equals(ONE)); - - return factor; - } -} diff --git a/src/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java b/src/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java deleted file mode 100644 index 728f6ff..0000000 --- a/src/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; -import org.bouncycastle.crypto.KeyGenerationParameters; -import org.bouncycastle.crypto.params.RSAKeyGenerationParameters; -import org.bouncycastle.crypto.params.RSAKeyParameters; -import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; - -import javabc.BigInteger; - -/** - * an RSA key pair generator. - */ -public class RSAKeyPairGenerator - implements AsymmetricCipherKeyPairGenerator -{ - private static final BigInteger ONE = BigInteger.valueOf(1); - - private RSAKeyGenerationParameters param; - - public void init( - KeyGenerationParameters param) - { - this.param = (RSAKeyGenerationParameters)param; - } - - public AsymmetricCipherKeyPair generateKeyPair() - { - BigInteger p, q, n, d, e, pSub1, qSub1, phi; - - // - // p and q values should have a length of half the strength in bits - // - int strength = param.getStrength(); - int pbitlength = (strength + 1) / 2; - int qbitlength = strength - pbitlength; - int mindiffbits = strength / 3; - - e = param.getPublicExponent(); - - // TODO Consider generating safe primes for p, q (see DHParametersHelper.generateSafePrimes) - // (then p-1 and q-1 will not consist of only small factors - see "Pollard's algorithm") - - // - // generate p, prime and (p-1) relatively prime to e - // - for (;;) - { - p = new BigInteger(pbitlength, 1, param.getRandom()); - - if (p.mod(e).equals(ONE)) - { - continue; - } - - if (!p.isProbablePrime(param.getCertainty())) - { - continue; - } - - if (e.gcd(p.subtract(ONE)).equals(ONE)) - { - break; - } - } - - // - // generate a modulus of the required length - // - for (;;) - { - // generate q, prime and (q-1) relatively prime to e, - // and not equal to p - // - for (;;) - { - q = new BigInteger(qbitlength, 1, param.getRandom()); - - if (q.subtract(p).abs().bitLength() < mindiffbits) - { - continue; - } - - if (q.mod(e).equals(ONE)) - { - continue; - } - - if (!q.isProbablePrime(param.getCertainty())) - { - continue; - } - - if (e.gcd(q.subtract(ONE)).equals(ONE)) - { - break; - } - } - - // - // calculate the modulus - // - n = p.multiply(q); - - if (n.bitLength() == param.getStrength()) - { - break; - } - - // - // if we get here our primes aren't big enough, make the largest - // of the two p and try again - // - p = p.max(q); - } - - if (p.compareTo(q) < 0) - { - phi = p; - p = q; - q = phi; - } - - pSub1 = p.subtract(ONE); - qSub1 = q.subtract(ONE); - phi = pSub1.multiply(qSub1); - - // - // calculate the private exponent - // - d = e.modInverse(phi); - - // - // calculate the CRT factors - // - BigInteger dP, dQ, qInv; - - dP = d.remainder(pSub1); - dQ = d.remainder(qSub1); - qInv = q.modInverse(p); - - return new AsymmetricCipherKeyPair( - new RSAKeyParameters(false, n, e), - new RSAPrivateCrtKeyParameters(n, e, d, p, q, dP, dQ, qInv)); - } -} diff --git a/src/org/bouncycastle/crypto/generators/SCrypt.java b/src/org/bouncycastle/crypto/generators/SCrypt.java deleted file mode 100644 index da22fa4..0000000 --- a/src/org/bouncycastle/crypto/generators/SCrypt.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.bouncycastle.crypto.generators; - -import org.bouncycastle.crypto.PBEParametersGenerator; -import org.bouncycastle.crypto.digests.SHA256Digest; -import org.bouncycastle.crypto.engines.Salsa20Engine; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.util.Pack; -import org.bouncycastle.util.Arrays; - -public class SCrypt -{ - // TODO Validate arguments - public static byte[] generate(byte[] P, byte[] S, int N, int r, int p, int dkLen) - { - return MFcrypt(P, S, N, r, p, dkLen); - } - - private static byte[] MFcrypt(byte[] P, byte[] S, int N, int r, int p, int dkLen) - { - int MFLenBytes = r * 128; - byte[] bytes = SingleIterationPBKDF2(P, S, p * MFLenBytes); - - int[] B = null; - - try - { - int BLen = bytes.length >>> 2; - B = new int[BLen]; - - Pack.littleEndianToInt(bytes, 0, B); - - int MFLenWords = MFLenBytes >>> 2; - for (int BOff = 0; BOff < BLen; BOff += MFLenWords) - { - // TODO These can be done in parallel threads - SMix(B, BOff, N, r); - } - - Pack.intToLittleEndian(B, bytes, 0); - - return SingleIterationPBKDF2(P, bytes, dkLen); - } - finally - { - Clear(bytes); - Clear(B); - } - } - - private static byte[] SingleIterationPBKDF2(byte[] P, byte[] S, int dkLen) - { - PBEParametersGenerator pGen = new PKCS5S2ParametersGenerator(new SHA256Digest()); - pGen.init(P, S, 1); - KeyParameter key = (KeyParameter) pGen.generateDerivedMacParameters(dkLen * 8); - return key.getKey(); - } - - private static void SMix(int[] B, int BOff, int N, int r) - { - int BCount = r * 32; - - int[] blockX1 = new int[16]; - int[] blockX2 = new int[16]; - int[] blockY = new int[BCount]; - - int[] X = new int[BCount]; - int[][] V = new int[N][]; - - try - { - System.arraycopy(B, BOff, X, 0, BCount); - - for (int i = 0; i < N; ++i) - { - V[i] = Arrays.clone(X); - BlockMix(X, blockX1, blockX2, blockY, r); - } - - int mask = N - 1; - for (int i = 0; i < N; ++i) - { - int j = X[BCount - 16] & mask; - Xor(X, V[j], 0, X); - BlockMix(X, blockX1, blockX2, blockY, r); - } - - System.arraycopy(X, 0, B, BOff, BCount); - } - finally - { - ClearAll(V); - ClearAll(new int[][]{ X, blockX1, blockX2, blockY }); - } - } - - private static void BlockMix(int[] B, int[] X1, int[] X2, int[] Y, int r) - { - System.arraycopy(B, B.length - 16, X1, 0, 16); - - int BOff = 0, YOff = 0, halfLen = B.length >>> 1; - - for (int i = 2 * r; i > 0; --i) - { - Xor(X1, B, BOff, X2); - - Salsa20Engine.salsaCore(8, X2, X1); - System.arraycopy(X1, 0, Y, YOff, 16); - - YOff = halfLen + BOff - YOff; - BOff += 16; - } - - System.arraycopy(Y, 0, B, 0, Y.length); - } - - private static void Xor(int[] a, int[] b, int bOff, int[] output) - { - for (int i = output.length - 1; i >= 0; --i) - { - output[i] = a[i] ^ b[bOff + i]; - } - } - - private static void Clear(byte[] array) - { - if (array != null) - { - Arrays.fill(array, (byte)0); - } - } - - private static void Clear(int[] array) - { - if (array != null) - { - Arrays.fill(array, 0); - } - } - - private static void ClearAll(int[][] arrays) - { - for (int i = 0; i < arrays.length; ++i) - { - Clear(arrays[i]); - } - } -} diff --git a/src/org/bouncycastle/crypto/generators/package.html b/src/org/bouncycastle/crypto/generators/package.html deleted file mode 100644 index 9d73ce3..0000000 --- a/src/org/bouncycastle/crypto/generators/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Generators for keys, key pairs and password based encryption algorithms. - - diff --git a/src/org/bouncycastle/crypto/io/CipherInputStream.java b/src/org/bouncycastle/crypto/io/CipherInputStream.java deleted file mode 100644 index 2eb8664..0000000 --- a/src/org/bouncycastle/crypto/io/CipherInputStream.java +++ /dev/null @@ -1,244 +0,0 @@ -package org.bouncycastle.crypto.io; - -import javabc.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.crypto.BufferedBlockCipher; -import org.bouncycastle.crypto.StreamCipher; - -/** - * A CipherInputStream is composed of an InputStream and a BufferedBlockCipher so - * that read() methods return data that are read in from the - * underlying InputStream but have been additionally processed by the - * Cipher. The Cipher must be fully initialized before being used by - * a CipherInputStream. - *

        - * For example, if the Cipher is initialized for decryption, the - * CipherInputStream will attempt to read in data and decrypt them, - * before returning the decrypted data. - */ -public class CipherInputStream - extends FilterInputStream -{ - private BufferedBlockCipher bufferedBlockCipher; - private StreamCipher streamCipher; - - private byte[] buf; - private byte[] inBuf; - - private int bufOff; - private int maxBuf; - private boolean finalized; - - private static final int INPUT_BUF_SIZE = 2048; - - /** - * Constructs a CipherInputStream from an InputStream and a - * BufferedBlockCipher. - */ - public CipherInputStream( - InputStream is, - BufferedBlockCipher cipher) - { - super(is); - - this.bufferedBlockCipher = cipher; - - buf = new byte[cipher.getOutputSize(INPUT_BUF_SIZE)]; - inBuf = new byte[INPUT_BUF_SIZE]; - } - - public CipherInputStream( - InputStream is, - StreamCipher cipher) - { - super(is); - - this.streamCipher = cipher; - - buf = new byte[INPUT_BUF_SIZE]; - inBuf = new byte[INPUT_BUF_SIZE]; - } - - /** - * grab the next chunk of input from the underlying input stream - */ - private int nextChunk() - throws IOException - { - int available = super.available(); - - // must always try to read 1 byte! - // some buggy InputStreams return < 0! - if (available <= 0) - { - available = 1; - } - - if (available > inBuf.length) - { - available = super.read(inBuf, 0, inBuf.length); - } - else - { - available = super.read(inBuf, 0, available); - } - - if (available < 0) - { - if (finalized) - { - return -1; - } - - try - { - if (bufferedBlockCipher != null) - { - maxBuf = bufferedBlockCipher.doFinal(buf, 0); - } - else - { - maxBuf = 0; // a stream cipher - } - } - catch (Exception e) - { - throw new IOException("error processing stream: " + e.toString()); - } - - bufOff = 0; - - finalized = true; - - if (bufOff == maxBuf) - { - return -1; - } - } - else - { - bufOff = 0; - - try - { - if (bufferedBlockCipher != null) - { - maxBuf = bufferedBlockCipher.processBytes(inBuf, 0, available, buf, 0); - } - else - { - streamCipher.processBytes(inBuf, 0, available, buf, 0); - maxBuf = available; - } - } - catch (Exception e) - { - throw new IOException("error processing stream: " + e.toString()); - } - - if (maxBuf == 0) // not enough bytes read for first block... - { - return nextChunk(); - } - } - - return maxBuf; - } - - public int read() - throws IOException - { - if (bufOff == maxBuf) - { - if (nextChunk() < 0) - { - return -1; - } - } - - return buf[bufOff++] & 0xff; - } - - public int read( - byte[] b) - throws IOException - { - return read(b, 0, b.length); - } - - public int read( - byte[] b, - int off, - int len) - throws IOException - { - if (bufOff == maxBuf) - { - if (nextChunk() < 0) - { - return -1; - } - } - - int available = maxBuf - bufOff; - - if (len > available) - { - System.arraycopy(buf, bufOff, b, off, available); - bufOff = maxBuf; - - return available; - } - else - { - System.arraycopy(buf, bufOff, b, off, len); - bufOff += len; - - return len; - } - } - - public long skip( - long n) - throws IOException - { - if (n <= 0) - { - return 0; - } - - int available = maxBuf - bufOff; - - if (n > available) - { - bufOff = maxBuf; - - return available; - } - else - { - bufOff += (int)n; - - return (int)n; - } - } - - public int available() - throws IOException - { - return maxBuf - bufOff; - } - - public void close() - throws IOException - { - super.close(); - } - - public boolean markSupported() - { - return false; - } -} diff --git a/src/org/bouncycastle/crypto/io/CipherOutputStream.java b/src/org/bouncycastle/crypto/io/CipherOutputStream.java deleted file mode 100644 index c286e20..0000000 --- a/src/org/bouncycastle/crypto/io/CipherOutputStream.java +++ /dev/null @@ -1,188 +0,0 @@ -package org.bouncycastle.crypto.io; - -import javabc.FilterOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -import org.bouncycastle.crypto.BufferedBlockCipher; -import org.bouncycastle.crypto.StreamCipher; - -public class CipherOutputStream - extends FilterOutputStream -{ - private BufferedBlockCipher bufferedBlockCipher; - private StreamCipher streamCipher; - - private byte[] oneByte = new byte[1]; - private byte[] buf; - - /** - * Constructs a CipherOutputStream from an OutputStream and a - * BufferedBlockCipher. - */ - public CipherOutputStream( - OutputStream os, - BufferedBlockCipher cipher) - { - super(os); - this.bufferedBlockCipher = cipher; - this.buf = new byte[cipher.getBlockSize()]; - } - - /** - * Constructs a CipherOutputStream from an OutputStream and a - * BufferedBlockCipher. - */ - public CipherOutputStream( - OutputStream os, - StreamCipher cipher) - { - super(os); - this.streamCipher = cipher; - } - - /** - * Writes the specified byte to this output stream. - * - * @param b the byte. - * @exception java.io.IOException if an I/O error occurs. - */ - public void write( - int b) - throws IOException - { - oneByte[0] = (byte)b; - - if (bufferedBlockCipher != null) - { - int len = bufferedBlockCipher.processBytes(oneByte, 0, 1, buf, 0); - - if (len != 0) - { - out.write(buf, 0, len); - } - } - else - { - out.write(streamCipher.returnByte((byte)b)); - } - } - - /** - * Writes b.length bytes from the specified byte array - * to this output stream. - *

        - * The write method of - * CipherOutputStream calls the write - * method of three arguments with the three arguments - * b, 0, and b.length. - * - * @param b the data. - * @exception java.io.IOException if an I/O error occurs. - * @see #write(byte[], int, int) - */ - public void write( - byte[] b) - throws IOException - { - write(b, 0, b.length); - } - - /** - * Writes len bytes from the specified byte array - * starting at offset off to this output stream. - * - * @param b the data. - * @param off the start offset in the data. - * @param len the number of bytes to write. - * @exception java.io.IOException if an I/O error occurs. - */ - public void write( - byte[] b, - int off, - int len) - throws IOException - { - if (bufferedBlockCipher != null) - { - byte[] buf = new byte[bufferedBlockCipher.getOutputSize(len)]; - - int outLen = bufferedBlockCipher.processBytes(b, off, len, buf, 0); - - if (outLen != 0) - { - out.write(buf, 0, outLen); - } - } - else - { - byte[] buf = new byte[len]; - - streamCipher.processBytes(b, off, len, buf, 0); - - out.write(buf, 0, len); - } - } - - /** - * Flushes this output stream by forcing any buffered output bytes - * that have already been processed by the encapsulated cipher object - * to be written out. - * - *

        - * Any bytes buffered by the encapsulated cipher - * and waiting to be processed by it will not be written out. For example, - * if the encapsulated cipher is a block cipher, and the total number of - * bytes written using one of the write methods is less than - * the cipher's block size, no bytes will be written out. - * - * @exception java.io.IOException if an I/O error occurs. - */ - public void flush() - throws IOException - { - super.flush(); - } - - /** - * Closes this output stream and releases any system resources - * associated with this stream. - *

        - * This method invokes the doFinal method of the encapsulated - * cipher object, which causes any bytes buffered by the encapsulated - * cipher to be processed. The result is written out by calling the - * flush method of this output stream. - *

        - * This method resets the encapsulated cipher object to its initial state - * and calls the close method of the underlying output - * stream. - * - * @exception java.io.IOException if an I/O error occurs. - */ - public void close() - throws IOException - { - try - { - if (bufferedBlockCipher != null) - { - byte[] buf = new byte[bufferedBlockCipher.getOutputSize(0)]; - - int outLen = bufferedBlockCipher.doFinal(buf, 0); - - if (outLen != 0) - { - out.write(buf, 0, outLen); - } - } - } - catch (Exception e) - { - throw new IOException("Error closing stream: " + e.toString()); - } - - flush(); - - super.close(); - } -} diff --git a/src/org/bouncycastle/crypto/io/DigestInputStream.java b/src/org/bouncycastle/crypto/io/DigestInputStream.java deleted file mode 100644 index c02ae1a..0000000 --- a/src/org/bouncycastle/crypto/io/DigestInputStream.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bouncycastle.crypto.io; - -import javabc.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.crypto.Digest; - -public class DigestInputStream - extends FilterInputStream -{ - protected Digest digest; - - public DigestInputStream( - InputStream stream, - Digest digest) - { - super(stream); - this.digest = digest; - } - - public int read() - throws IOException - { - int b = in.read(); - - if (b >= 0) - { - digest.update((byte)b); - } - return b; - } - - public int read( - byte[] b, - int off, - int len) - throws IOException - { - int n = in.read(b, off, len); - if (n > 0) - { - digest.update(b, off, n); - } - return n; - } - - public Digest getDigest() - { - return digest; - } -} diff --git a/src/org/bouncycastle/crypto/io/DigestOutputStream.java b/src/org/bouncycastle/crypto/io/DigestOutputStream.java deleted file mode 100644 index 23c7e53..0000000 --- a/src/org/bouncycastle/crypto/io/DigestOutputStream.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bouncycastle.crypto.io; - -import java.io.IOException; -import java.io.OutputStream; - -import org.bouncycastle.crypto.Digest; - -public class DigestOutputStream - extends OutputStream -{ - protected Digest digest; - - public DigestOutputStream( - Digest Digest) - { - this.digest = Digest; - } - - public void write(int b) - throws IOException - { - digest.update((byte)b); - } - - public void write( - byte[] b, - int off, - int len) - throws IOException - { - digest.update(b, off, len); - } - - public byte[] getDigest() - { - byte[] res = new byte[digest.getDigestSize()]; - - digest.doFinal(res, 0); - - return res; - } -} diff --git a/src/org/bouncycastle/crypto/io/MacInputStream.java b/src/org/bouncycastle/crypto/io/MacInputStream.java deleted file mode 100644 index 31f4116..0000000 --- a/src/org/bouncycastle/crypto/io/MacInputStream.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bouncycastle.crypto.io; - -import javabc.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.crypto.Mac; - -public class MacInputStream - extends FilterInputStream -{ - protected Mac mac; - - public MacInputStream( - InputStream stream, - Mac mac) - { - super(stream); - this.mac = mac; - } - - public int read() - throws IOException - { - int b = in.read(); - - if (b >= 0) - { - mac.update((byte)b); - } - return b; - } - - public int read( - byte[] b, - int off, - int len) - throws IOException - { - int n = in.read(b, off, len); - if (n >= 0) - { - mac.update(b, off, n); - } - return n; - } - - public Mac getMac() - { - return mac; - } -} diff --git a/src/org/bouncycastle/crypto/io/MacOutputStream.java b/src/org/bouncycastle/crypto/io/MacOutputStream.java deleted file mode 100644 index 0f0e7db..0000000 --- a/src/org/bouncycastle/crypto/io/MacOutputStream.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bouncycastle.crypto.io; - -import java.io.IOException; -import java.io.OutputStream; - -import org.bouncycastle.crypto.Mac; - -public class MacOutputStream - extends OutputStream -{ - protected Mac mac; - - public MacOutputStream( - Mac mac) - { - this.mac = mac; - } - - public void write(int b) - throws IOException - { - mac.update((byte)b); - } - - public void write( - byte[] b, - int off, - int len) - throws IOException - { - mac.update(b, off, len); - } - - public byte[] getMac() - { - byte[] res = new byte[mac.getMacSize()]; - - mac.doFinal(res, 0); - - return res; - } -} diff --git a/src/org/bouncycastle/crypto/io/SignerInputStream.java b/src/org/bouncycastle/crypto/io/SignerInputStream.java deleted file mode 100644 index 7fac9a8..0000000 --- a/src/org/bouncycastle/crypto/io/SignerInputStream.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bouncycastle.crypto.io; - -import javabc.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.crypto.Signer; - -public class SignerInputStream - extends FilterInputStream -{ - protected Signer signer; - - public SignerInputStream( - InputStream stream, - Signer signer) - { - super(stream); - this.signer = signer; - } - - public int read() - throws IOException - { - int b = in.read(); - - if (b >= 0) - { - signer.update((byte)b); - } - return b; - } - - public int read( - byte[] b, - int off, - int len) - throws IOException - { - int n = in.read(b, off, len); - if (n > 0) - { - signer.update(b, off, n); - } - return n; - } - - public Signer getSigner() - { - return signer; - } -} diff --git a/src/org/bouncycastle/crypto/io/SignerOutputStream.java b/src/org/bouncycastle/crypto/io/SignerOutputStream.java deleted file mode 100644 index 1c21b5d..0000000 --- a/src/org/bouncycastle/crypto/io/SignerOutputStream.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bouncycastle.crypto.io; - -import java.io.IOException; -import java.io.OutputStream; - -import org.bouncycastle.crypto.Signer; - -public class SignerOutputStream - extends OutputStream -{ - protected Signer signer; - - public SignerOutputStream( - Signer Signer) - { - this.signer = Signer; - } - - public void write(int b) - throws IOException - { - signer.update((byte)b); - } - - public void write( - byte[] b, - int off, - int len) - throws IOException - { - signer.update(b, off, len); - } - - public Signer getSigner() - { - return signer; - } -} diff --git a/src/org/bouncycastle/crypto/io/package.html b/src/org/bouncycastle/crypto/io/package.html deleted file mode 100644 index f2c9e40..0000000 --- a/src/org/bouncycastle/crypto/io/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Classes for doing "enhanced" I/O with Digests and MACs. - - diff --git a/src/org/bouncycastle/crypto/macs/BlockCipherMac.java b/src/org/bouncycastle/crypto/macs/BlockCipherMac.java deleted file mode 100644 index 6de39a8..0000000 --- a/src/org/bouncycastle/crypto/macs/BlockCipherMac.java +++ /dev/null @@ -1,174 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.modes.CBCBlockCipher; - -public class BlockCipherMac - implements Mac -{ - private byte[] mac; - - private byte[] buf; - private int bufOff; - private BlockCipher cipher; - - private int macSize; - - /** - * create a standard MAC based on a block cipher. This will produce an - * authentication code half the length of the block size of the cipher. - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @deprecated use CBCBlockCipherMac - */ - public BlockCipherMac( - BlockCipher cipher) - { - this(cipher, (cipher.getBlockSize() * 8) / 2); - } - - /** - * create a standard MAC based on a block cipher with the size of the - * MAC been given in bits. - *

        - * Note: the size of the MAC must be at least 16 bits (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. - * @deprecated use CBCBlockCipherMac - */ - public BlockCipherMac( - BlockCipher cipher, - int macSizeInBits) - { - if ((macSizeInBits % 8) != 0) - { - throw new IllegalArgumentException("MAC size must be multiple of 8"); - } - - this.cipher = new CBCBlockCipher(cipher); - this.macSize = macSizeInBits / 8; - - mac = new byte[cipher.getBlockSize()]; - - buf = new byte[cipher.getBlockSize()]; - bufOff = 0; - } - - public String getAlgorithmName() - { - return cipher.getAlgorithmName(); - } - - public void init( - CipherParameters params) - { - reset(); - - cipher.init(true, params); - } - - public int getMacSize() - { - return macSize; - } - - public void update( - byte in) - { - if (bufOff == buf.length) - { - cipher.processBlock(buf, 0, mac, 0); - bufOff = 0; - } - - buf[bufOff++] = in; - } - - public void update( - byte[] in, - int inOff, - int len) - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = cipher.getBlockSize(); - int resultLen = 0; - int gapLen = blockSize - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += cipher.processBlock(buf, 0, mac, 0); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > blockSize) - { - resultLen += cipher.processBlock(in, inOff, mac, 0); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - public int doFinal( - byte[] out, - int outOff) - { - int blockSize = cipher.getBlockSize(); - - // - // pad with zeroes - // - while (bufOff < blockSize) - { - buf[bufOff] = 0; - bufOff++; - } - - cipher.processBlock(buf, 0, mac, 0); - - System.arraycopy(mac, 0, out, outOff, macSize); - - reset(); - - return macSize; - } - - /** - * Reset the mac generator. - */ - public void reset() - { - /* - * clean the buffer. - */ - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - - bufOff = 0; - - /* - * reset the underlying cipher. - */ - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java b/src/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java deleted file mode 100644 index 9bf6cb0..0000000 --- a/src/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java +++ /dev/null @@ -1,229 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.paddings.BlockCipherPadding; - -/** - * standard CBC Block Cipher MAC - if no padding is specified the default of - * pad of zeroes is used. - */ -public class CBCBlockCipherMac - implements Mac -{ - private byte[] mac; - - private byte[] buf; - private int bufOff; - private BlockCipher cipher; - private BlockCipherPadding padding; - - private int macSize; - - /** - * create a standard MAC based on a CBC block cipher. This will produce an - * authentication code half the length of the block size of the cipher. - * - * @param cipher the cipher to be used as the basis of the MAC generation. - */ - public CBCBlockCipherMac( - BlockCipher cipher) - { - this(cipher, (cipher.getBlockSize() * 8) / 2, null); - } - - /** - * create a standard MAC based on a CBC block cipher. This will produce an - * authentication code half the length of the block size of the cipher. - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param padding the padding to be used to complete the last block. - */ - public CBCBlockCipherMac( - BlockCipher cipher, - BlockCipherPadding padding) - { - this(cipher, (cipher.getBlockSize() * 8) / 2, padding); - } - - /** - * create a standard MAC based on a block cipher with the size of the - * MAC been given in bits. This class uses CBC mode as the basis for the - * MAC generation. - *

        - * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), - * or 16 bits if being used as a data authenticator (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. - */ - public CBCBlockCipherMac( - BlockCipher cipher, - int macSizeInBits) - { - this(cipher, macSizeInBits, null); - } - - /** - * create a standard MAC based on a block cipher with the size of the - * MAC been given in bits. This class uses CBC mode as the basis for the - * MAC generation. - *

        - * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), - * or 16 bits if being used as a data authenticator (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. - * @param padding the padding to be used to complete the last block. - */ - public CBCBlockCipherMac( - BlockCipher cipher, - int macSizeInBits, - BlockCipherPadding padding) - { - if ((macSizeInBits % 8) != 0) - { - throw new IllegalArgumentException("MAC size must be multiple of 8"); - } - - this.cipher = new CBCBlockCipher(cipher); - this.padding = padding; - this.macSize = macSizeInBits / 8; - - mac = new byte[cipher.getBlockSize()]; - - buf = new byte[cipher.getBlockSize()]; - bufOff = 0; - } - - public String getAlgorithmName() - { - return cipher.getAlgorithmName(); - } - - public void init( - CipherParameters params) - { - reset(); - - cipher.init(true, params); - } - - public int getMacSize() - { - return macSize; - } - - public void update( - byte in) - { - if (bufOff == buf.length) - { - cipher.processBlock(buf, 0, mac, 0); - bufOff = 0; - } - - buf[bufOff++] = in; - } - - public void update( - byte[] in, - int inOff, - int len) - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = cipher.getBlockSize(); - int gapLen = blockSize - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - cipher.processBlock(buf, 0, mac, 0); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > blockSize) - { - cipher.processBlock(in, inOff, mac, 0); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - public int doFinal( - byte[] out, - int outOff) - { - int blockSize = cipher.getBlockSize(); - - if (padding == null) - { - // - // pad with zeroes - // - while (bufOff < blockSize) - { - buf[bufOff] = 0; - bufOff++; - } - } - else - { - if (bufOff == blockSize) - { - cipher.processBlock(buf, 0, mac, 0); - bufOff = 0; - } - - padding.addPadding(buf, bufOff); - } - - cipher.processBlock(buf, 0, mac, 0); - - System.arraycopy(mac, 0, out, outOff, macSize); - - reset(); - - return macSize; - } - - /** - * Reset the mac generator. - */ - public void reset() - { - /* - * clean the buffer. - */ - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - - bufOff = 0; - - /* - * reset the underlying cipher. - */ - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java b/src/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java deleted file mode 100644 index d7ad612..0000000 --- a/src/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java +++ /dev/null @@ -1,388 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.paddings.BlockCipherPadding; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. - */ -class MacCFBBlockCipher -{ - private byte[] IV; - private byte[] cfbV; - private byte[] cfbOutV; - - private int blockSize; - private BlockCipher cipher = null; - - /** - * Basic constructor. - * - * @param cipher the block cipher to be used as the basis of the - * feedback mode. - * @param blockSize the block size in bits (note: a multiple of 8) - */ - public MacCFBBlockCipher( - BlockCipher cipher, - int bitBlockSize) - { - this.cipher = cipher; - this.blockSize = bitBlockSize / 8; - - this.IV = new byte[cipher.getBlockSize()]; - this.cfbV = new byte[cipher.getBlockSize()]; - this.cfbOutV = new byte[cipher.getBlockSize()]; - } - - /** - * Initialise the cipher and, possibly, the initialisation vector (IV). - * If an IV isn't passed as part of the parameter, the IV will be all zeros. - * An IV which is too short is handled in FIPS compliant fashion. - * - * @param param the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - CipherParameters params) - throws IllegalArgumentException - { - if (params instanceof ParametersWithIV) - { - ParametersWithIV ivParam = (ParametersWithIV)params; - byte[] iv = ivParam.getIV(); - - if (iv.length < IV.length) - { - System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); - } - else - { - System.arraycopy(iv, 0, IV, 0, IV.length); - } - - reset(); - - cipher.init(true, ivParam.getParameters()); - } - else - { - reset(); - - cipher.init(true, params); - } - } - - /** - * return the algorithm name and mode. - * - * @return the name of the underlying algorithm followed by "/CFB" - * and the block size in bits. - */ - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/CFB" + (blockSize * 8); - } - - /** - * return the block size we are operating at. - * - * @return the block size we are operating at (in bytes). - */ - public int getBlockSize() - { - return blockSize; - } - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - cipher.processBlock(cfbV, 0, cfbOutV, 0); - - // - // XOR the cfbV with the plaintext producing the cipher text - // - for (int i = 0; i < blockSize; i++) - { - out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]); - } - - // - // change over the input block. - // - System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length - blockSize); - System.arraycopy(out, outOff, cfbV, cfbV.length - blockSize, blockSize); - - return blockSize; - } - - /** - * reset the chaining vector back to the IV and reset the underlying - * cipher. - */ - public void reset() - { - System.arraycopy(IV, 0, cfbV, 0, IV.length); - - cipher.reset(); - } - - void getMacBlock( - byte[] mac) - { - cipher.processBlock(cfbV, 0, mac, 0); - } -} - -public class CFBBlockCipherMac - implements Mac -{ - private byte[] mac; - - private byte[] buf; - private int bufOff; - private MacCFBBlockCipher cipher; - private BlockCipherPadding padding = null; - - - private int macSize; - - /** - * create a standard MAC based on a CFB block cipher. This will produce an - * authentication code half the length of the block size of the cipher, with - * the CFB mode set to 8 bits. - * - * @param cipher the cipher to be used as the basis of the MAC generation. - */ - public CFBBlockCipherMac( - BlockCipher cipher) - { - this(cipher, 8, (cipher.getBlockSize() * 8) / 2, null); - } - - /** - * create a standard MAC based on a CFB block cipher. This will produce an - * authentication code half the length of the block size of the cipher, with - * the CFB mode set to 8 bits. - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param padding the padding to be used. - */ - public CFBBlockCipherMac( - BlockCipher cipher, - BlockCipherPadding padding) - { - this(cipher, 8, (cipher.getBlockSize() * 8) / 2, padding); - } - - /** - * create a standard MAC based on a block cipher with the size of the - * MAC been given in bits. This class uses CFB mode as the basis for the - * MAC generation. - *

        - * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), - * or 16 bits if being used as a data authenticator (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param cfbBitSize the size of an output block produced by the CFB mode. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. - */ - public CFBBlockCipherMac( - BlockCipher cipher, - int cfbBitSize, - int macSizeInBits) - { - this(cipher, cfbBitSize, macSizeInBits, null); - } - - /** - * create a standard MAC based on a block cipher with the size of the - * MAC been given in bits. This class uses CFB mode as the basis for the - * MAC generation. - *

        - * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), - * or 16 bits if being used as a data authenticator (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param cfbBitSize the size of an output block produced by the CFB mode. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. - * @param padding a padding to be used. - */ - public CFBBlockCipherMac( - BlockCipher cipher, - int cfbBitSize, - int macSizeInBits, - BlockCipherPadding padding) - { - if ((macSizeInBits % 8) != 0) - { - throw new IllegalArgumentException("MAC size must be multiple of 8"); - } - - mac = new byte[cipher.getBlockSize()]; - - this.cipher = new MacCFBBlockCipher(cipher, cfbBitSize); - this.padding = padding; - this.macSize = macSizeInBits / 8; - - buf = new byte[this.cipher.getBlockSize()]; - bufOff = 0; - } - - public String getAlgorithmName() - { - return cipher.getAlgorithmName(); - } - - public void init( - CipherParameters params) - { - reset(); - - cipher.init(params); - } - - public int getMacSize() - { - return macSize; - } - - public void update( - byte in) - { - if (bufOff == buf.length) - { - cipher.processBlock(buf, 0, mac, 0); - bufOff = 0; - } - - buf[bufOff++] = in; - } - - public void update( - byte[] in, - int inOff, - int len) - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = cipher.getBlockSize(); - int resultLen = 0; - int gapLen = blockSize - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += cipher.processBlock(buf, 0, mac, 0); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > blockSize) - { - resultLen += cipher.processBlock(in, inOff, mac, 0); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - public int doFinal( - byte[] out, - int outOff) - { - int blockSize = cipher.getBlockSize(); - - // - // pad with zeroes - // - if (this.padding == null) - { - while (bufOff < blockSize) - { - buf[bufOff] = 0; - bufOff++; - } - } - else - { - padding.addPadding(buf, bufOff); - } - - cipher.processBlock(buf, 0, mac, 0); - - cipher.getMacBlock(mac); - - System.arraycopy(mac, 0, out, outOff, macSize); - - reset(); - - return macSize; - } - - /** - * Reset the mac generator. - */ - public void reset() - { - /* - * clean the buffer. - */ - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - - bufOff = 0; - - /* - * reset the underlying cipher. - */ - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/macs/CMac.java b/src/org/bouncycastle/crypto/macs/CMac.java deleted file mode 100644 index c5bc504..0000000 --- a/src/org/bouncycastle/crypto/macs/CMac.java +++ /dev/null @@ -1,237 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.paddings.ISO7816d4Padding; - -/** - * CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html - *

        - * CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC - *

        - * CMAC is a NIST recomendation - see - * csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf - *

        - * CMAC/OMAC1 is a blockcipher-based message authentication code designed and - * analyzed by Tetsu Iwata and Kaoru Kurosawa. - *

        - * CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message - * Authentication Code). OMAC stands for One-Key CBC MAC. - *

        - * It supports 128- or 64-bits block ciphers, with any key size, and returns - * a MAC with dimension less or equal to the block size of the underlying - * cipher. - *

        - */ -public class CMac implements Mac -{ - private static final byte CONSTANT_128 = (byte)0x87; - private static final byte CONSTANT_64 = (byte)0x1b; - - private byte[] ZEROES; - - private byte[] mac; - - private byte[] buf; - private int bufOff; - private BlockCipher cipher; - - private int macSize; - - private byte[] L, Lu, Lu2; - - /** - * create a standard MAC based on a CBC block cipher (64 or 128 bit block). - * This will produce an authentication code the length of the block size - * of the cipher. - * - * @param cipher the cipher to be used as the basis of the MAC generation. - */ - public CMac(BlockCipher cipher) - { - this(cipher, cipher.getBlockSize() * 8); - } - - /** - * create a standard MAC based on a block cipher with the size of the - * MAC been given in bits. - *

        - * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), - * or 16 bits if being used as a data authenticator (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8 and <= 128. - */ - public CMac(BlockCipher cipher, int macSizeInBits) - { - if ((macSizeInBits % 8) != 0) - { - throw new IllegalArgumentException("MAC size must be multiple of 8"); - } - - if (macSizeInBits > (cipher.getBlockSize() * 8)) - { - throw new IllegalArgumentException( - "MAC size must be less or equal to " - + (cipher.getBlockSize() * 8)); - } - - if (cipher.getBlockSize() != 8 && cipher.getBlockSize() != 16) - { - throw new IllegalArgumentException( - "Block size must be either 64 or 128 bits"); - } - - this.cipher = new CBCBlockCipher(cipher); - this.macSize = macSizeInBits / 8; - - mac = new byte[cipher.getBlockSize()]; - - buf = new byte[cipher.getBlockSize()]; - - ZEROES = new byte[cipher.getBlockSize()]; - - bufOff = 0; - } - - public String getAlgorithmName() - { - return cipher.getAlgorithmName(); - } - - private byte[] doubleLu(byte[] in) - { - int FirstBit = (in[0] & 0xFF) >> 7; - byte[] ret = new byte[in.length]; - for (int i = 0; i < in.length - 1; i++) - { - ret[i] = (byte)((in[i] << 1) + ((in[i + 1] & 0xFF) >> 7)); - } - ret[in.length - 1] = (byte)(in[in.length - 1] << 1); - if (FirstBit == 1) - { - ret[in.length - 1] ^= in.length == 16 ? CONSTANT_128 : CONSTANT_64; - } - return ret; - } - - public void init(CipherParameters params) - { - reset(); - - cipher.init(true, params); - - //initializes the L, Lu, Lu2 numbers - L = new byte[ZEROES.length]; - cipher.processBlock(ZEROES, 0, L, 0); - Lu = doubleLu(L); - Lu2 = doubleLu(Lu); - - cipher.init(true, params); - } - - public int getMacSize() - { - return macSize; - } - - public void update(byte in) - { - if (bufOff == buf.length) - { - cipher.processBlock(buf, 0, mac, 0); - bufOff = 0; - } - - buf[bufOff++] = in; - } - - public void update(byte[] in, int inOff, int len) - { - if (len < 0) - { - throw new IllegalArgumentException( - "Can't have a negative input length!"); - } - - int blockSize = cipher.getBlockSize(); - int gapLen = blockSize - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - cipher.processBlock(buf, 0, mac, 0); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > blockSize) - { - cipher.processBlock(in, inOff, mac, 0); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - public int doFinal(byte[] out, int outOff) - { - int blockSize = cipher.getBlockSize(); - - byte[] lu; - if (bufOff == blockSize) - { - lu = Lu; - } - else - { - new ISO7816d4Padding().addPadding(buf, bufOff); - lu = Lu2; - } - - for (int i = 0; i < mac.length; i++) - { - buf[i] ^= lu[i]; - } - - cipher.processBlock(buf, 0, mac, 0); - - System.arraycopy(mac, 0, out, outOff, macSize); - - reset(); - - return macSize; - } - - /** - * Reset the mac generator. - */ - public void reset() - { - /* - * clean the buffer. - */ - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - - bufOff = 0; - - /* - * reset the underlying cipher. - */ - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/macs/GOST28147Mac.java b/src/org/bouncycastle/crypto/macs/GOST28147Mac.java deleted file mode 100644 index b71975b..0000000 --- a/src/org/bouncycastle/crypto/macs/GOST28147Mac.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithSBox; - -/** - * implementation of GOST 28147-89 MAC - */ -public class GOST28147Mac - implements Mac -{ - private int blockSize = 8; - private int macSize = 4; - private int bufOff; - private byte[] buf; - private byte[] mac; - private boolean firstStep = true; - private int[] workingKey = null; - - // - // This is default S-box - E_A. - private byte S[] = { - 0x9,0x6,0x3,0x2,0x8,0xB,0x1,0x7,0xA,0x4,0xE,0xF,0xC,0x0,0xD,0x5, - 0x3,0x7,0xE,0x9,0x8,0xA,0xF,0x0,0x5,0x2,0x6,0xC,0xB,0x4,0xD,0x1, - 0xE,0x4,0x6,0x2,0xB,0x3,0xD,0x8,0xC,0xF,0x5,0xA,0x0,0x7,0x1,0x9, - 0xE,0x7,0xA,0xC,0xD,0x1,0x3,0x9,0x0,0x2,0xB,0x4,0xF,0x8,0x5,0x6, - 0xB,0x5,0x1,0x9,0x8,0xD,0xF,0x0,0xE,0x4,0x2,0x3,0xC,0x7,0xA,0x6, - 0x3,0xA,0xD,0xC,0x1,0x2,0x0,0xB,0x7,0x5,0x9,0x4,0x8,0xF,0xE,0x6, - 0x1,0xD,0x2,0x9,0x7,0xA,0x6,0x0,0x8,0xC,0x4,0x5,0xF,0x3,0xB,0xE, - 0xB,0xA,0xF,0x5,0x0,0xC,0xE,0x8,0x6,0x2,0x3,0x9,0x1,0x7,0xD,0x4 - }; - - public GOST28147Mac() - { - mac = new byte[blockSize]; - - buf = new byte[blockSize]; - bufOff = 0; - } - - private int[] generateWorkingKey( - byte[] userKey) - { - if (userKey.length != 32) - { - throw new IllegalArgumentException("Key length invalid. Key needs to be 32 byte - 256 bit!!!"); - } - - int key[] = new int[8]; - for(int i=0; i!=8; i++) - { - key[i] = bytesToint(userKey,i*4); - } - - return key; - } - - public void init( - CipherParameters params) - throws IllegalArgumentException - { - reset(); - buf = new byte[blockSize]; - if (params instanceof ParametersWithSBox) - { - ParametersWithSBox param = (ParametersWithSBox)params; - - // - // Set the S-Box - // - System.arraycopy(param.getSBox(), 0, this.S, 0, param.getSBox().length); - - // - // set key if there is one - // - if (param.getParameters() != null) - { - workingKey = generateWorkingKey(((KeyParameter)param.getParameters()).getKey()); - } - } - else if (params instanceof KeyParameter) - { - workingKey = generateWorkingKey(((KeyParameter)params).getKey()); - } - else - { - throw new IllegalArgumentException("invalid parameter passed to GOST28147 init - " + params.getClass().getName()); - } - } - - public String getAlgorithmName() - { - return "GOST28147Mac"; - } - - public int getMacSize() - { - return macSize; - } - - private int gost28147_mainStep(int n1, int key) - { - int cm = (key + n1); // CM1 - - // S-box replacing - - int om = S[ 0 + ((cm >> (0 * 4)) & 0xF)] << (0 * 4); - om += S[ 16 + ((cm >> (1 * 4)) & 0xF)] << (1 * 4); - om += S[ 32 + ((cm >> (2 * 4)) & 0xF)] << (2 * 4); - om += S[ 48 + ((cm >> (3 * 4)) & 0xF)] << (3 * 4); - om += S[ 64 + ((cm >> (4 * 4)) & 0xF)] << (4 * 4); - om += S[ 80 + ((cm >> (5 * 4)) & 0xF)] << (5 * 4); - om += S[ 96 + ((cm >> (6 * 4)) & 0xF)] << (6 * 4); - om += S[112 + ((cm >> (7 * 4)) & 0xF)] << (7 * 4); - - return om << 11 | om >>> (32-11); // 11-leftshift - } - - private void gost28147MacFunc( - int[] workingKey, - byte[] in, - int inOff, - byte[] out, - int outOff) - { - int N1, N2, tmp; //tmp -> for saving N1 - N1 = bytesToint(in, inOff); - N2 = bytesToint(in, inOff + 4); - - for(int k = 0; k < 2; k++) // 1-16 steps - { - for(int j = 0; j < 8; j++) - { - tmp = N1; - N1 = N2 ^ gost28147_mainStep(N1, workingKey[j]); // CM2 - N2 = tmp; - } - } - - intTobytes(N1, out, outOff); - intTobytes(N2, out, outOff + 4); - } - - //array of bytes to type int - private int bytesToint( - byte[] in, - int inOff) - { - return ((in[inOff + 3] << 24) & 0xff000000) + ((in[inOff + 2] << 16) & 0xff0000) + - ((in[inOff + 1] << 8) & 0xff00) + (in[inOff] & 0xff); - } - - //int to array of bytes - private void intTobytes( - int num, - byte[] out, - int outOff) - { - out[outOff + 3] = (byte)(num >>> 24); - out[outOff + 2] = (byte)(num >>> 16); - out[outOff + 1] = (byte)(num >>> 8); - out[outOff] = (byte)num; - } - - private byte[] CM5func(byte[] buf, int bufOff, byte[] mac) - { - byte[] sum = new byte[buf.length - bufOff]; - - System.arraycopy(buf, bufOff, sum, 0, mac.length); - - for (int i = 0; i != mac.length; i++) - { - sum[i] = (byte)(sum[i] ^ mac[i]); - } - - return sum; - } - - public void update(byte in) - throws IllegalStateException - { - if (bufOff == buf.length) - { - byte[] sumbuf = new byte[buf.length]; - System.arraycopy(buf, 0, sumbuf, 0, mac.length); - - if (firstStep) - { - firstStep = false; - } - else - { - sumbuf = CM5func(buf, 0, mac); - } - - gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); - bufOff = 0; - } - - buf[bufOff++] = in; - } - - public void update(byte[] in, int inOff, int len) - throws DataLengthException, IllegalStateException - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int gapLen = blockSize - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - byte[] sumbuf = new byte[buf.length]; - System.arraycopy(buf, 0, sumbuf, 0, mac.length); - - if (firstStep) - { - firstStep = false; - } - else - { - sumbuf = CM5func(buf, 0, mac); - } - - gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > blockSize) - { - sumbuf = CM5func(in, inOff, mac); - gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - public int doFinal(byte[] out, int outOff) - throws DataLengthException, IllegalStateException - { - //padding with zero - while (bufOff < blockSize) - { - buf[bufOff] = 0; - bufOff++; - } - - byte[] sumbuf = new byte[buf.length]; - System.arraycopy(buf, 0, sumbuf, 0, mac.length); - - if (firstStep) - { - firstStep = false; - } - else - { - sumbuf = CM5func(buf, 0, mac); - } - - gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); - - System.arraycopy(mac, (mac.length/2)-macSize, out, outOff, macSize); - - reset(); - - return macSize; - } - - public void reset() - { - /* - * clean the buffer. - */ - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - - bufOff = 0; - - firstStep = true; - } -} diff --git a/src/org/bouncycastle/crypto/macs/HMac.java b/src/org/bouncycastle/crypto/macs/HMac.java deleted file mode 100644 index 0bd4d39..0000000 --- a/src/org/bouncycastle/crypto/macs/HMac.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import java.util.Hashtable; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.ExtendedDigest; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * HMAC implementation based on RFC2104 - * - * H(K XOR opad, H(K XOR ipad, text)) - */ -public class HMac - implements Mac -{ - private final static byte IPAD = (byte)0x36; - private final static byte OPAD = (byte)0x5C; - - private Digest digest; - private int digestSize; - private int blockLength; - - private byte[] inputPad; - private byte[] outputPad; - - private static Hashtable blockLengths; - - static - { - blockLengths = new Hashtable(); - - blockLengths.put("GOST3411", new Integer(32)); - - blockLengths.put("MD2", new Integer(16)); - blockLengths.put("MD4", new Integer(64)); - blockLengths.put("MD5", new Integer(64)); - - blockLengths.put("RIPEMD128", new Integer(64)); - blockLengths.put("RIPEMD160", new Integer(64)); - - blockLengths.put("SHA-1", new Integer(64)); - blockLengths.put("SHA-224", new Integer(64)); - blockLengths.put("SHA-256", new Integer(64)); - blockLengths.put("SHA-384", new Integer(128)); - blockLengths.put("SHA-512", new Integer(128)); - - blockLengths.put("Tiger", new Integer(64)); - blockLengths.put("Whirlpool", new Integer(64)); - } - - private static int getByteLength( - Digest digest) - { - if (digest instanceof ExtendedDigest) - { - return ((ExtendedDigest)digest).getByteLength(); - } - - Integer b = (Integer)blockLengths.get(digest.getAlgorithmName()); - - if (b == null) - { - throw new IllegalArgumentException("unknown digest passed: " + digest.getAlgorithmName()); - } - - return b.intValue(); - } - - /** - * Base constructor for one of the standard digest algorithms that the - * byteLength of the algorithm is know for. - * - * @param digest the digest. - */ - public HMac( - Digest digest) - { - this(digest, getByteLength(digest)); - } - - private HMac( - Digest digest, - int byteLength) - { - this.digest = digest; - digestSize = digest.getDigestSize(); - - this.blockLength = byteLength; - - inputPad = new byte[blockLength]; - outputPad = new byte[blockLength]; - } - - public String getAlgorithmName() - { - return digest.getAlgorithmName() + "/HMAC"; - } - - public Digest getUnderlyingDigest() - { - return digest; - } - - public void init( - CipherParameters params) - { - digest.reset(); - - byte[] key = ((KeyParameter)params).getKey(); - - if (key.length > blockLength) - { - digest.update(key, 0, key.length); - digest.doFinal(inputPad, 0); - for (int i = digestSize; i < inputPad.length; i++) - { - inputPad[i] = 0; - } - } - else - { - System.arraycopy(key, 0, inputPad, 0, key.length); - for (int i = key.length; i < inputPad.length; i++) - { - inputPad[i] = 0; - } - } - - outputPad = new byte[inputPad.length]; - System.arraycopy(inputPad, 0, outputPad, 0, inputPad.length); - - for (int i = 0; i < inputPad.length; i++) - { - inputPad[i] ^= IPAD; - } - - for (int i = 0; i < outputPad.length; i++) - { - outputPad[i] ^= OPAD; - } - - digest.update(inputPad, 0, inputPad.length); - } - - public int getMacSize() - { - return digestSize; - } - - public void update( - byte in) - { - digest.update(in); - } - - public void update( - byte[] in, - int inOff, - int len) - { - digest.update(in, inOff, len); - } - - public int doFinal( - byte[] out, - int outOff) - { - byte[] tmp = new byte[digestSize]; - digest.doFinal(tmp, 0); - - digest.update(outputPad, 0, outputPad.length); - digest.update(tmp, 0, tmp.length); - - int len = digest.doFinal(out, outOff); - - reset(); - - return len; - } - - /** - * Reset the mac generator. - */ - public void reset() - { - /* - * reset the underlying digest. - */ - digest.reset(); - - /* - * reinitialize the digest. - */ - digest.update(inputPad, 0, inputPad.length); - } -} diff --git a/src/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java b/src/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java deleted file mode 100644 index 330b39e..0000000 --- a/src/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java +++ /dev/null @@ -1,305 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.engines.DESEngine; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.paddings.BlockCipherPadding; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * DES based CBC Block Cipher MAC according to ISO9797, algorithm 3 (ANSI X9.19 Retail MAC) - * - * This could as well be derived from CBCBlockCipherMac, but then the property mac in the base - * class must be changed to protected - */ - -public class ISO9797Alg3Mac - implements Mac -{ - private byte[] mac; - - private byte[] buf; - private int bufOff; - private BlockCipher cipher; - private BlockCipherPadding padding; - - private int macSize; - private KeyParameter lastKey2; - private KeyParameter lastKey3; - - /** - * create a Retail-MAC based on a CBC block cipher. This will produce an - * authentication code of the length of the block size of the cipher. - * - * @param cipher the cipher to be used as the basis of the MAC generation. This must - * be DESEngine. - */ - public ISO9797Alg3Mac( - BlockCipher cipher) - { - this(cipher, cipher.getBlockSize() * 8, null); - } - - /** - * create a Retail-MAC based on a CBC block cipher. This will produce an - * authentication code of the length of the block size of the cipher. - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param padding the padding to be used to complete the last block. - */ - public ISO9797Alg3Mac( - BlockCipher cipher, - BlockCipherPadding padding) - { - this(cipher, cipher.getBlockSize() * 8, padding); - } - - /** - * create a Retail-MAC based on a block cipher with the size of the - * MAC been given in bits. This class uses single DES CBC mode as the basis for the - * MAC generation. - *

        - * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), - * or 16 bits if being used as a data authenticator (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. - */ - public ISO9797Alg3Mac( - BlockCipher cipher, - int macSizeInBits) - { - this(cipher, macSizeInBits, null); - } - - /** - * create a standard MAC based on a block cipher with the size of the - * MAC been given in bits. This class uses single DES CBC mode as the basis for the - * MAC generation. The final block is decrypted and then encrypted using the - * middle and right part of the key. - *

        - * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), - * or 16 bits if being used as a data authenticator (FIPS Publication 113), - * and in general should be less than the size of the block cipher as it reduces - * the chance of an exhaustive attack (see Handbook of Applied Cryptography). - * - * @param cipher the cipher to be used as the basis of the MAC generation. - * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. - * @param padding the padding to be used to complete the last block. - */ - public ISO9797Alg3Mac( - BlockCipher cipher, - int macSizeInBits, - BlockCipherPadding padding) - { - if ((macSizeInBits % 8) != 0) - { - throw new IllegalArgumentException("MAC size must be multiple of 8"); - } - - if (!(cipher instanceof DESEngine)) - { - throw new IllegalArgumentException("cipher must be instance of DESEngine"); - } - - this.cipher = new CBCBlockCipher(cipher); - this.padding = padding; - this.macSize = macSizeInBits / 8; - - mac = new byte[cipher.getBlockSize()]; - - buf = new byte[cipher.getBlockSize()]; - bufOff = 0; - } - - public String getAlgorithmName() - { - return "ISO9797Alg3"; - } - - public void init(CipherParameters params) - { - reset(); - - if (!(params instanceof KeyParameter || params instanceof ParametersWithIV)) - { - throw new IllegalArgumentException( - "params must be an instance of KeyParameter or ParametersWithIV"); - } - - // KeyParameter must contain a double or triple length DES key, - // however the underlying cipher is a single DES. The middle and - // right key are used only in the final step. - - KeyParameter kp; - - if (params instanceof KeyParameter) - { - kp = (KeyParameter)params; - } - else - { - kp = (KeyParameter)((ParametersWithIV)params).getParameters(); - } - - KeyParameter key1; - byte[] keyvalue = kp.getKey(); - - if (keyvalue.length == 16) - { // Double length DES key - key1 = new KeyParameter(keyvalue, 0, 8); - this.lastKey2 = new KeyParameter(keyvalue, 8, 8); - this.lastKey3 = key1; - } - else if (keyvalue.length == 24) - { // Triple length DES key - key1 = new KeyParameter(keyvalue, 0, 8); - this.lastKey2 = new KeyParameter(keyvalue, 8, 8); - this.lastKey3 = new KeyParameter(keyvalue, 16, 8); - } - else - { - throw new IllegalArgumentException( - "Key must be either 112 or 168 bit long"); - } - - if (params instanceof ParametersWithIV) - { - cipher.init(true, new ParametersWithIV(key1, ((ParametersWithIV)params).getIV())); - } - else - { - cipher.init(true, key1); - } - } - - public int getMacSize() - { - return macSize; - } - - public void update( - byte in) - { - if (bufOff == buf.length) - { - cipher.processBlock(buf, 0, mac, 0); - bufOff = 0; - } - - buf[bufOff++] = in; - } - - - public void update( - byte[] in, - int inOff, - int len) - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = cipher.getBlockSize(); - int resultLen = 0; - int gapLen = blockSize - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += cipher.processBlock(buf, 0, mac, 0); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > blockSize) - { - resultLen += cipher.processBlock(in, inOff, mac, 0); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - public int doFinal( - byte[] out, - int outOff) - { - int blockSize = cipher.getBlockSize(); - - if (padding == null) - { - // - // pad with zeroes - // - while (bufOff < blockSize) - { - buf[bufOff] = 0; - bufOff++; - } - } - else - { - if (bufOff == blockSize) - { - cipher.processBlock(buf, 0, mac, 0); - bufOff = 0; - } - - padding.addPadding(buf, bufOff); - } - - cipher.processBlock(buf, 0, mac, 0); - - // Added to code from base class - DESEngine deseng = new DESEngine(); - - deseng.init(false, this.lastKey2); - deseng.processBlock(mac, 0, mac, 0); - - deseng.init(true, this.lastKey3); - deseng.processBlock(mac, 0, mac, 0); - // **** - - System.arraycopy(mac, 0, out, outOff, macSize); - - reset(); - - return macSize; - } - - - /** - * Reset the mac generator. - */ - public void reset() - { - /* - * clean the buffer. - */ - for (int i = 0; i < buf.length; i++) - { - buf[i] = 0; - } - - bufOff = 0; - - /* - * reset the underlying cipher. - */ - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/macs/OldHMac.java b/src/org/bouncycastle/crypto/macs/OldHMac.java deleted file mode 100644 index 7463afd..0000000 --- a/src/org/bouncycastle/crypto/macs/OldHMac.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.params.KeyParameter; - -/** - * HMAC implementation based on RFC2104 - * - * H(K XOR opad, H(K XOR ipad, text)) - */ -public class OldHMac -implements Mac -{ - private final static int BLOCK_LENGTH = 64; - - private final static byte IPAD = (byte)0x36; - private final static byte OPAD = (byte)0x5C; - - private Digest digest; - private int digestSize; - private byte[] inputPad = new byte[BLOCK_LENGTH]; - private byte[] outputPad = new byte[BLOCK_LENGTH]; - - /** - * @deprecated uses incorrect pad for SHA-512 and SHA-384 use HMac. - */ - public OldHMac( - Digest digest) - { - this.digest = digest; - digestSize = digest.getDigestSize(); - } - - public String getAlgorithmName() - { - return digest.getAlgorithmName() + "/HMAC"; - } - - public Digest getUnderlyingDigest() - { - return digest; - } - - public void init( - CipherParameters params) - { - digest.reset(); - - byte[] key = ((KeyParameter)params).getKey(); - - if (key.length > BLOCK_LENGTH) - { - digest.update(key, 0, key.length); - digest.doFinal(inputPad, 0); - for (int i = digestSize; i < inputPad.length; i++) - { - inputPad[i] = 0; - } - } - else - { - System.arraycopy(key, 0, inputPad, 0, key.length); - for (int i = key.length; i < inputPad.length; i++) - { - inputPad[i] = 0; - } - } - - outputPad = new byte[inputPad.length]; - System.arraycopy(inputPad, 0, outputPad, 0, inputPad.length); - - for (int i = 0; i < inputPad.length; i++) - { - inputPad[i] ^= IPAD; - } - - for (int i = 0; i < outputPad.length; i++) - { - outputPad[i] ^= OPAD; - } - - digest.update(inputPad, 0, inputPad.length); - } - - public int getMacSize() - { - return digestSize; - } - - public void update( - byte in) - { - digest.update(in); - } - - public void update( - byte[] in, - int inOff, - int len) - { - digest.update(in, inOff, len); - } - - public int doFinal( - byte[] out, - int outOff) - { - byte[] tmp = new byte[digestSize]; - digest.doFinal(tmp, 0); - - digest.update(outputPad, 0, outputPad.length); - digest.update(tmp, 0, tmp.length); - - int len = digest.doFinal(out, outOff); - - reset(); - - return len; - } - - /** - * Reset the mac generator. - */ - public void reset() - { - /* - * reset the underlying digest. - */ - digest.reset(); - - /* - * reinitialize the digest. - */ - digest.update(inputPad, 0, inputPad.length); - } -} diff --git a/src/org/bouncycastle/crypto/macs/VMPCMac.java b/src/org/bouncycastle/crypto/macs/VMPCMac.java deleted file mode 100644 index 58d06d0..0000000 --- a/src/org/bouncycastle/crypto/macs/VMPCMac.java +++ /dev/null @@ -1,186 +0,0 @@ -package org.bouncycastle.crypto.macs; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; - -public class VMPCMac implements Mac -{ - private byte g; - - private byte n = 0; - private byte[] P = null; - private byte s = 0; - - private byte[] T; - private byte[] workingIV; - - private byte[] workingKey; - - private byte x1, x2, x3, x4; - - public int doFinal(byte[] out, int outOff) - throws DataLengthException, IllegalStateException - { - // Execute the Post-Processing Phase - for (int r = 1; r < 25; r++) - { - s = P[(s + P[n & 0xff]) & 0xff]; - - x4 = P[(x4 + x3 + r) & 0xff]; - x3 = P[(x3 + x2 + r) & 0xff]; - x2 = P[(x2 + x1 + r) & 0xff]; - x1 = P[(x1 + s + r) & 0xff]; - T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1); - T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2); - T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3); - T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4); - g = (byte) ((g + 4) & 0x1f); - - byte temp = P[n & 0xff]; - P[n & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - n = (byte) ((n + 1) & 0xff); - } - - // Input T to the IV-phase of the VMPC KSA - for (int m = 0; m < 768; m++) - { - s = P[(s + P[m & 0xff] + T[m & 0x1f]) & 0xff]; - byte temp = P[m & 0xff]; - P[m & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - } - - // Store 20 new outputs of the VMPC Stream Cipher in table M - byte[] M = new byte[20]; - for (int i = 0; i < 20; i++) - { - s = P[(s + P[i & 0xff]) & 0xff]; - M[i] = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]; - - byte temp = P[i & 0xff]; - P[i & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - } - - System.arraycopy(M, 0, out, outOff, M.length); - reset(); - - return M.length; - } - - public String getAlgorithmName() - { - return "VMPC-MAC"; - } - - public int getMacSize() - { - return 20; - } - - public void init(CipherParameters params) throws IllegalArgumentException - { - if (!(params instanceof ParametersWithIV)) - { - throw new IllegalArgumentException( - "VMPC-MAC Init parameters must include an IV"); - } - - ParametersWithIV ivParams = (ParametersWithIV) params; - KeyParameter key = (KeyParameter) ivParams.getParameters(); - - if (!(ivParams.getParameters() instanceof KeyParameter)) - { - throw new IllegalArgumentException( - "VMPC-MAC Init parameters must include a key"); - } - - this.workingIV = ivParams.getIV(); - - if (workingIV == null || workingIV.length < 1 || workingIV.length > 768) - { - throw new IllegalArgumentException( - "VMPC-MAC requires 1 to 768 bytes of IV"); - } - - this.workingKey = key.getKey(); - - reset(); - - } - - private void initKey(byte[] keyBytes, byte[] ivBytes) - { - s = 0; - P = new byte[256]; - for (int i = 0; i < 256; i++) - { - P[i] = (byte) i; - } - for (int m = 0; m < 768; m++) - { - s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.length]) & 0xff]; - byte temp = P[m & 0xff]; - P[m & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - } - for (int m = 0; m < 768; m++) - { - s = P[(s + P[m & 0xff] + ivBytes[m % ivBytes.length]) & 0xff]; - byte temp = P[m & 0xff]; - P[m & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - } - n = 0; - } - - public void reset() - { - initKey(this.workingKey, this.workingIV); - g = x1 = x2 = x3 = x4 = n = 0; - T = new byte[32]; - for (int i = 0; i < 32; i++) - { - T[i] = 0; - } - } - - public void update(byte in) throws IllegalStateException - { - s = P[(s + P[n & 0xff]) & 0xff]; - byte c = (byte) (in ^ P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]); - - x4 = P[(x4 + x3) & 0xff]; - x3 = P[(x3 + x2) & 0xff]; - x2 = P[(x2 + x1) & 0xff]; - x1 = P[(x1 + s + c) & 0xff]; - T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1); - T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2); - T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3); - T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4); - g = (byte) ((g + 4) & 0x1f); - - byte temp = P[n & 0xff]; - P[n & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - n = (byte) ((n + 1) & 0xff); - } - - public void update(byte[] in, int inOff, int len) - throws DataLengthException, IllegalStateException - { - if ((inOff + len) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - for (int i = 0; i < len; i++) - { - update(in[i]); - } - } -} diff --git a/src/org/bouncycastle/crypto/macs/package.html b/src/org/bouncycastle/crypto/macs/package.html deleted file mode 100644 index 0b1f86d..0000000 --- a/src/org/bouncycastle/crypto/macs/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Classes for creating MACs and HMACs. - - diff --git a/src/org/bouncycastle/crypto/modes/AEADBlockCipher.java b/src/org/bouncycastle/crypto/modes/AEADBlockCipher.java deleted file mode 100644 index 3c3bf34..0000000 --- a/src/org/bouncycastle/crypto/modes/AEADBlockCipher.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A block cipher mode that includes authenticated encryption with a streaming mode and optional associated data. - * @see org.bouncycastle.crypto.params.AEADParameters - */ -public interface AEADBlockCipher -{ - /** - * initialise the underlying cipher. Parameter can either be an AEADParameters or a ParametersWithIV object. - * - * @param forEncryption true if we are setting up for encryption, false otherwise. - * @param params the necessary parameters for the underlying cipher to be initialised. - * @exception IllegalArgumentException if the params argument is inappropriate. - */ - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException; - - /** - * Return the name of the algorithm. - * - * @return the algorithm name. - */ - public String getAlgorithmName(); - - /** - * return the cipher this object wraps. - * - * @return the cipher this object wraps. - */ - public BlockCipher getUnderlyingCipher(); - - /** - * encrypt/decrypt a single byte. - * - * @param in the byte to be processed. - * @param out the output buffer the processed byte goes into. - * @param outOff the offset into the output byte array the processed data starts at. - * @return the number of bytes written to out. - * @exception DataLengthException if the output buffer is too small. - */ - public int processByte(byte in, byte[] out, int outOff) - throws DataLengthException; - - /** - * process a block of bytes from in putting the result into out. - * - * @param in the input byte array. - * @param inOff the offset into the in array where the data to be processed starts. - * @param len the number of bytes to be processed. - * @param out the output buffer the processed bytes go into. - * @param outOff the offset into the output byte array the processed data starts at. - * @return the number of bytes written to out. - * @exception DataLengthException if the output buffer is too small. - */ - public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) - throws DataLengthException; - - /** - * Finish the operation either appending or verifying the MAC at the end of the data. - * - * @param out space for any resulting output data. - * @param outOff offset into out to start copying the data at. - * @return number of bytes written into out. - * @throws IllegalStateException if the cipher is in an inappropriate state. - * @throws org.bouncycastle.crypto.InvalidCipherTextException if the MAC fails to match. - */ - public int doFinal(byte[] out, int outOff) - throws IllegalStateException, InvalidCipherTextException; - - /** - * Return the value of the MAC associated with the last stream processed. - * - * @return MAC for plaintext data. - */ - public byte[] getMac(); - - /** - * return the size of the output buffer required for a processBytes - * an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to processBytes - * with len bytes of input. - */ - public int getUpdateOutputSize(int len); - - /** - * return the size of the output buffer required for a processBytes plus a - * doFinal with an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to processBytes and doFinal - * with len bytes of input. - */ - public int getOutputSize(int len); - - /** - * Reset the cipher. After resetting the cipher is in the same state - * as it was after the last init (if there was one). - */ - public void reset(); -} diff --git a/src/org/bouncycastle/crypto/modes/CBCBlockCipher.java b/src/org/bouncycastle/crypto/modes/CBCBlockCipher.java deleted file mode 100644 index 1219f6d..0000000 --- a/src/org/bouncycastle/crypto/modes/CBCBlockCipher.java +++ /dev/null @@ -1,253 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.util.Arrays; - -/** - * implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. - */ -public class CBCBlockCipher - implements BlockCipher -{ - private byte[] IV; - private byte[] cbcV; - private byte[] cbcNextV; - - private int blockSize; - private BlockCipher cipher = null; - private boolean encrypting; - - /** - * Basic constructor. - * - * @param cipher the block cipher to be used as the basis of chaining. - */ - public CBCBlockCipher( - BlockCipher cipher) - { - this.cipher = cipher; - this.blockSize = cipher.getBlockSize(); - - this.IV = new byte[blockSize]; - this.cbcV = new byte[blockSize]; - this.cbcNextV = new byte[blockSize]; - } - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * Initialise the cipher and, possibly, the initialisation vector (IV). - * If an IV isn't passed as part of the parameter, the IV will be all zeros. - * - * @param encrypting if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean encrypting, - CipherParameters params) - throws IllegalArgumentException - { - boolean oldEncrypting = this.encrypting; - - this.encrypting = encrypting; - - if (params instanceof ParametersWithIV) - { - ParametersWithIV ivParam = (ParametersWithIV)params; - byte[] iv = ivParam.getIV(); - - if (iv.length != blockSize) - { - throw new IllegalArgumentException("initialisation vector must be the same length as block size"); - } - - System.arraycopy(iv, 0, IV, 0, iv.length); - - reset(); - - // if null it's an IV changed only. - if (ivParam.getParameters() != null) - { - cipher.init(encrypting, ivParam.getParameters()); - } - else if (oldEncrypting != encrypting) - { - throw new IllegalArgumentException("cannot change encrypting state without providing key."); - } - } - else - { - reset(); - - // if it;s null key is to be reused. - if (params != null) - { - cipher.init(encrypting, params); - } - else if (oldEncrypting != encrypting) - { - throw new IllegalArgumentException("cannot change encrypting state without providing key."); - } - } - } - - /** - * return the algorithm name and mode. - * - * @return the name of the underlying algorithm followed by "/CBC". - */ - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/CBC"; - } - - /** - * return the block size of the underlying cipher. - * - * @return the block size of the underlying cipher. - */ - public int getBlockSize() - { - return cipher.getBlockSize(); - } - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - return (encrypting) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); - } - - /** - * reset the chaining vector back to the IV and reset the underlying - * cipher. - */ - public void reset() - { - System.arraycopy(IV, 0, cbcV, 0, IV.length); - Arrays.fill(cbcNextV, (byte)0); - - cipher.reset(); - } - - /** - * Do the appropriate chaining step for CBC mode encryption. - * - * @param in the array containing the data to be encrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int encryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - /* - * XOR the cbcV and the input, - * then encrypt the cbcV - */ - for (int i = 0; i < blockSize; i++) - { - cbcV[i] ^= in[inOff + i]; - } - - int length = cipher.processBlock(cbcV, 0, out, outOff); - - /* - * copy ciphertext to cbcV - */ - System.arraycopy(out, outOff, cbcV, 0, cbcV.length); - - return length; - } - - /** - * Do the appropriate chaining step for CBC mode decryption. - * - * @param in the array containing the data to be decrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the decrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int decryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - System.arraycopy(in, inOff, cbcNextV, 0, blockSize); - - int length = cipher.processBlock(in, inOff, out, outOff); - - /* - * XOR the cbcV and the output - */ - for (int i = 0; i < blockSize; i++) - { - out[outOff + i] ^= cbcV[i]; - } - - /* - * swap the back up buffer into next position - */ - byte[] tmp; - - tmp = cbcV; - cbcV = cbcNextV; - cbcNextV = tmp; - - return length; - } -} diff --git a/src/org/bouncycastle/crypto/modes/CCMBlockCipher.java b/src/org/bouncycastle/crypto/modes/CCMBlockCipher.java deleted file mode 100644 index bedc3d1..0000000 --- a/src/org/bouncycastle/crypto/modes/CCMBlockCipher.java +++ /dev/null @@ -1,338 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import java.io.ByteArrayOutputStream; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.macs.CBCBlockCipherMac; -import org.bouncycastle.crypto.params.AEADParameters; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.util.Arrays; - -/** - * Implements the Counter with Cipher Block Chaining mode (CCM) detailed in - * NIST Special Publication 800-38C. - *

        - * Note: this mode is a packet mode - it needs all the data up front. - */ -public class CCMBlockCipher - implements AEADBlockCipher -{ - private BlockCipher cipher; - private int blockSize; - private boolean forEncryption; - private byte[] nonce; - private byte[] associatedText; - private int macSize; - private CipherParameters keyParam; - private byte[] macBlock; - private ByteArrayOutputStream data = new ByteArrayOutputStream(); - - /** - * Basic constructor. - * - * @param c the block cipher to be used. - */ - public CCMBlockCipher(BlockCipher c) - { - this.cipher = c; - this.blockSize = c.getBlockSize(); - this.macBlock = new byte[blockSize]; - - if (blockSize != 16) - { - throw new IllegalArgumentException("cipher required with a block size of 16."); - } - } - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException - { - this.forEncryption = forEncryption; - - if (params instanceof AEADParameters) - { - AEADParameters param = (AEADParameters)params; - - nonce = param.getNonce(); - associatedText = param.getAssociatedText(); - macSize = param.getMacSize() / 8; - keyParam = param.getKey(); - } - else if (params instanceof ParametersWithIV) - { - ParametersWithIV param = (ParametersWithIV)params; - - nonce = param.getIV(); - associatedText = null; - macSize = macBlock.length / 2; - keyParam = param.getParameters(); - } - else - { - throw new IllegalArgumentException("invalid parameters passed to CCM"); - } - } - - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/CCM"; - } - - public int processByte(byte in, byte[] out, int outOff) - throws DataLengthException, IllegalStateException - { - data.write(in); - - return 0; - } - - public int processBytes(byte[] in, int inOff, int inLen, byte[] out, int outOff) - throws DataLengthException, IllegalStateException - { - data.write(in, inOff, inLen); - - return 0; - } - - public int doFinal(byte[] out, int outOff) - throws IllegalStateException, InvalidCipherTextException - { - byte[] text = data.toByteArray(); - byte[] enc = processPacket(text, 0, text.length); - - System.arraycopy(enc, 0, out, outOff, enc.length); - - reset(); - - return enc.length; - } - - public void reset() - { - cipher.reset(); - data.reset(); - } - - /** - * Returns a byte array containing the mac calculated as part of the - * last encrypt or decrypt operation. - * - * @return the last mac calculated. - */ - public byte[] getMac() - { - byte[] mac = new byte[macSize]; - - System.arraycopy(macBlock, 0, mac, 0, mac.length); - - return mac; - } - - public int getUpdateOutputSize(int len) - { - return 0; - } - - public int getOutputSize(int len) - { - if (forEncryption) - { - return data.size() + len + macSize; - } - else - { - return data.size() + len - macSize; - } - } - - public byte[] processPacket(byte[] in, int inOff, int inLen) - throws IllegalStateException, InvalidCipherTextException - { - if (keyParam == null) - { - throw new IllegalStateException("CCM cipher unitialized."); - } - - BlockCipher ctrCipher = new SICBlockCipher(cipher); - byte[] iv = new byte[blockSize]; - byte[] out; - - iv[0] = (byte)(((15 - nonce.length) - 1) & 0x7); - - System.arraycopy(nonce, 0, iv, 1, nonce.length); - - ctrCipher.init(forEncryption, new ParametersWithIV(keyParam, iv)); - - if (forEncryption) - { - int index = inOff; - int outOff = 0; - - out = new byte[inLen + macSize]; - - calculateMac(in, inOff, inLen, macBlock); - - ctrCipher.processBlock(macBlock, 0, macBlock, 0); // S0 - - while (index < inLen - blockSize) // S1... - { - ctrCipher.processBlock(in, index, out, outOff); - outOff += blockSize; - index += blockSize; - } - - byte[] block = new byte[blockSize]; - - System.arraycopy(in, index, block, 0, inLen - index); - - ctrCipher.processBlock(block, 0, block, 0); - - System.arraycopy(block, 0, out, outOff, inLen - index); - - outOff += inLen - index; - - System.arraycopy(macBlock, 0, out, outOff, out.length - outOff); - } - else - { - int index = inOff; - int outOff = 0; - - out = new byte[inLen - macSize]; - - System.arraycopy(in, inOff + inLen - macSize, macBlock, 0, macSize); - - ctrCipher.processBlock(macBlock, 0, macBlock, 0); - - for (int i = macSize; i != macBlock.length; i++) - { - macBlock[i] = 0; - } - - while (outOff < out.length - blockSize) - { - ctrCipher.processBlock(in, index, out, outOff); - outOff += blockSize; - index += blockSize; - } - - byte[] block = new byte[blockSize]; - - System.arraycopy(in, index, block, 0, out.length - outOff); - - ctrCipher.processBlock(block, 0, block, 0); - - System.arraycopy(block, 0, out, outOff, out.length - outOff); - - byte[] calculatedMacBlock = new byte[blockSize]; - - calculateMac(out, 0, out.length, calculatedMacBlock); - - if (!Arrays.constantTimeAreEqual(macBlock, calculatedMacBlock)) - { - throw new InvalidCipherTextException("mac check in CCM failed"); - } - } - - return out; - } - - private int calculateMac(byte[] data, int dataOff, int dataLen, byte[] macBlock) - { - Mac cMac = new CBCBlockCipherMac(cipher, macSize * 8); - - cMac.init(keyParam); - - // - // build b0 - // - byte[] b0 = new byte[16]; - - if (hasAssociatedText()) - { - b0[0] |= 0x40; - } - - b0[0] |= (((cMac.getMacSize() - 2) / 2) & 0x7) << 3; - - b0[0] |= ((15 - nonce.length) - 1) & 0x7; - - System.arraycopy(nonce, 0, b0, 1, nonce.length); - - int q = dataLen; - int count = 1; - while (q > 0) - { - b0[b0.length - count] = (byte)(q & 0xff); - q >>>= 8; - count++; - } - - cMac.update(b0, 0, b0.length); - - // - // process associated text - // - if (hasAssociatedText()) - { - int extra; - - if (associatedText.length < ((1 << 16) - (1 << 8))) - { - cMac.update((byte)(associatedText.length >> 8)); - cMac.update((byte)associatedText.length); - - extra = 2; - } - else // can't go any higher than 2^32 - { - cMac.update((byte)0xff); - cMac.update((byte)0xfe); - cMac.update((byte)(associatedText.length >> 24)); - cMac.update((byte)(associatedText.length >> 16)); - cMac.update((byte)(associatedText.length >> 8)); - cMac.update((byte)associatedText.length); - - extra = 6; - } - - cMac.update(associatedText, 0, associatedText.length); - - extra = (extra + associatedText.length) % 16; - if (extra != 0) - { - for (int i = 0; i != 16 - extra; i++) - { - cMac.update((byte)0x00); - } - } - } - - // - // add the text - // - cMac.update(data, dataOff, dataLen); - - return cMac.doFinal(macBlock, 0); - } - - private boolean hasAssociatedText() - { - return associatedText != null && associatedText.length != 0; - } -} diff --git a/src/org/bouncycastle/crypto/modes/CFBBlockCipher.java b/src/org/bouncycastle/crypto/modes/CFBBlockCipher.java deleted file mode 100644 index 0af49f4..0000000 --- a/src/org/bouncycastle/crypto/modes/CFBBlockCipher.java +++ /dev/null @@ -1,254 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. - */ -public class CFBBlockCipher - implements BlockCipher -{ - private byte[] IV; - private byte[] cfbV; - private byte[] cfbOutV; - - private int blockSize; - private BlockCipher cipher = null; - private boolean encrypting; - - /** - * Basic constructor. - * - * @param cipher the block cipher to be used as the basis of the - * feedback mode. - * @param bitBlockSize the block size in bits (note: a multiple of 8) - */ - public CFBBlockCipher( - BlockCipher cipher, - int bitBlockSize) - { - this.cipher = cipher; - this.blockSize = bitBlockSize / 8; - - this.IV = new byte[cipher.getBlockSize()]; - this.cfbV = new byte[cipher.getBlockSize()]; - this.cfbOutV = new byte[cipher.getBlockSize()]; - } - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * Initialise the cipher and, possibly, the initialisation vector (IV). - * If an IV isn't passed as part of the parameter, the IV will be all zeros. - * An IV which is too short is handled in FIPS compliant fashion. - * - * @param encrypting if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean encrypting, - CipherParameters params) - throws IllegalArgumentException - { - this.encrypting = encrypting; - - if (params instanceof ParametersWithIV) - { - ParametersWithIV ivParam = (ParametersWithIV)params; - byte[] iv = ivParam.getIV(); - - if (iv.length < IV.length) - { - // prepend the supplied IV with zeros (per FIPS PUB 81) - System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); - for (int i = 0; i < IV.length - iv.length; i++) - { - IV[i] = 0; - } - } - else - { - System.arraycopy(iv, 0, IV, 0, IV.length); - } - - reset(); - - // if null it's an IV changed only. - if (ivParam.getParameters() != null) - { - cipher.init(true, ivParam.getParameters()); - } - } - else - { - reset(); - - cipher.init(true, params); - } - } - - /** - * return the algorithm name and mode. - * - * @return the name of the underlying algorithm followed by "/CFB" - * and the block size in bits. - */ - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/CFB" + (blockSize * 8); - } - - /** - * return the block size we are operating at. - * - * @return the block size we are operating at (in bytes). - */ - public int getBlockSize() - { - return blockSize; - } - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - return (encrypting) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); - } - - /** - * Do the appropriate processing for CFB mode encryption. - * - * @param in the array containing the data to be encrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int encryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - cipher.processBlock(cfbV, 0, cfbOutV, 0); - - // - // XOR the cfbV with the plaintext producing the ciphertext - // - for (int i = 0; i < blockSize; i++) - { - out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]); - } - - // - // change over the input block. - // - System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length - blockSize); - System.arraycopy(out, outOff, cfbV, cfbV.length - blockSize, blockSize); - - return blockSize; - } - - /** - * Do the appropriate processing for CFB mode decryption. - * - * @param in the array containing the data to be decrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int decryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - cipher.processBlock(cfbV, 0, cfbOutV, 0); - - // - // change over the input block. - // - System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length - blockSize); - System.arraycopy(in, inOff, cfbV, cfbV.length - blockSize, blockSize); - - // - // XOR the cfbV with the ciphertext producing the plaintext - // - for (int i = 0; i < blockSize; i++) - { - out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]); - } - - return blockSize; - } - - /** - * reset the chaining vector back to the IV and reset the underlying - * cipher. - */ - public void reset() - { - System.arraycopy(IV, 0, cfbV, 0, IV.length); - - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/modes/CTSBlockCipher.java b/src/org/bouncycastle/crypto/modes/CTSBlockCipher.java deleted file mode 100644 index b8e5b61..0000000 --- a/src/org/bouncycastle/crypto/modes/CTSBlockCipher.java +++ /dev/null @@ -1,265 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.BufferedBlockCipher; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A Cipher Text Stealing (CTS) mode cipher. CTS allows block ciphers to - * be used to produce cipher text which is the same length as the plain text. - */ -public class CTSBlockCipher - extends BufferedBlockCipher -{ - private int blockSize; - - /** - * Create a buffered block cipher that uses Cipher Text Stealing - * - * @param cipher the underlying block cipher this buffering object wraps. - */ - public CTSBlockCipher( - BlockCipher cipher) - { - if ((cipher instanceof OFBBlockCipher) || (cipher instanceof CFBBlockCipher)) - { - throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers"); - } - - this.cipher = cipher; - - blockSize = cipher.getBlockSize(); - - buf = new byte[blockSize * 2]; - bufOff = 0; - } - - /** - * return the size of the output buffer required for an update - * an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to update - * with len bytes of input. - */ - public int getUpdateOutputSize( - int len) - { - int total = len + bufOff; - int leftOver = total % buf.length; - - if (leftOver == 0) - { - return total - buf.length; - } - - return total - leftOver; - } - - /** - * return the size of the output buffer required for an update plus a - * doFinal with an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to update and doFinal - * with len bytes of input. - */ - public int getOutputSize( - int len) - { - return len + bufOff; - } - - /** - * process a single byte, producing an output block if neccessary. - * - * @param in the input byte. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processByte( - byte in, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - int resultLen = 0; - - if (bufOff == buf.length) - { - resultLen = cipher.processBlock(buf, 0, out, outOff); - System.arraycopy(buf, blockSize, buf, 0, blockSize); - - bufOff = blockSize; - } - - buf[bufOff++] = in; - - return resultLen; - } - - /** - * process an array of bytes, producing output if necessary. - * - * @param in the input byte array. - * @param inOff the offset at which the input data starts. - * @param len the number of bytes to be copied out of the input array. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = getBlockSize(); - int length = getUpdateOutputSize(len); - - if (length > 0) - { - if ((outOff + length) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - } - - int resultLen = 0; - int gapLen = buf.length - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += cipher.processBlock(buf, 0, out, outOff); - System.arraycopy(buf, blockSize, buf, 0, blockSize); - - bufOff = blockSize; - - len -= gapLen; - inOff += gapLen; - - while (len > blockSize) - { - System.arraycopy(in, inOff, buf, bufOff, blockSize); - resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); - System.arraycopy(buf, blockSize, buf, 0, blockSize); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - - return resultLen; - } - - /** - * Process the last block in the buffer. - * - * @param out the array the block currently being held is copied into. - * @param outOff the offset at which the copying starts. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there is insufficient space in out for - * the output. - * @exception IllegalStateException if the underlying cipher is not - * initialised. - * @exception InvalidCipherTextException if cipher text decrypts wrongly (in - * case the exception will never get thrown). - */ - public int doFinal( - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException, InvalidCipherTextException - { - if (bufOff + outOff > out.length) - { - throw new DataLengthException("output buffer to small in doFinal"); - } - - int blockSize = cipher.getBlockSize(); - int len = bufOff - blockSize; - byte[] block = new byte[blockSize]; - - if (forEncryption) - { - cipher.processBlock(buf, 0, block, 0); - - if (bufOff < blockSize) - { - throw new DataLengthException("need at least one block of input for CTS"); - } - - for (int i = bufOff; i != buf.length; i++) - { - buf[i] = block[i - blockSize]; - } - - for (int i = blockSize; i != bufOff; i++) - { - buf[i] ^= block[i - blockSize]; - } - - if (cipher instanceof CBCBlockCipher) - { - BlockCipher c = ((CBCBlockCipher)cipher).getUnderlyingCipher(); - - c.processBlock(buf, blockSize, out, outOff); - } - else - { - cipher.processBlock(buf, blockSize, out, outOff); - } - - System.arraycopy(block, 0, out, outOff + blockSize, len); - } - else - { - byte[] lastBlock = new byte[blockSize]; - - if (cipher instanceof CBCBlockCipher) - { - BlockCipher c = ((CBCBlockCipher)cipher).getUnderlyingCipher(); - - c.processBlock(buf, 0, block, 0); - } - else - { - cipher.processBlock(buf, 0, block, 0); - } - - for (int i = blockSize; i != bufOff; i++) - { - lastBlock[i - blockSize] = (byte)(block[i - blockSize] ^ buf[i]); - } - - System.arraycopy(buf, blockSize, block, 0, len); - - cipher.processBlock(block, 0, out, outOff); - System.arraycopy(lastBlock, 0, out, outOff + blockSize, len); - } - - int offset = bufOff; - - reset(); - - return offset; - } -} diff --git a/src/org/bouncycastle/crypto/modes/EAXBlockCipher.java b/src/org/bouncycastle/crypto/modes/EAXBlockCipher.java deleted file mode 100644 index 327026e..0000000 --- a/src/org/bouncycastle/crypto/modes/EAXBlockCipher.java +++ /dev/null @@ -1,304 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.macs.CMac; -import org.bouncycastle.crypto.params.AEADParameters; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.util.Arrays; - -/** - * A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and - * Efficiency - by M. Bellare, P. Rogaway, D. Wagner. - * - * http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf - * - * EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block - * cipher to encrypt and authenticate data. It's on-line (the length of a - * message isn't needed to begin processing it), has good performances, it's - * simple and provably secure (provided the underlying block cipher is secure). - * - * Of course, this implementations is NOT thread-safe. - */ -public class EAXBlockCipher - implements AEADBlockCipher -{ - private static final byte nTAG = 0x0; - - private static final byte hTAG = 0x1; - - private static final byte cTAG = 0x2; - - private SICBlockCipher cipher; - - private boolean forEncryption; - - private int blockSize; - - private Mac mac; - - private byte[] nonceMac; - private byte[] associatedTextMac; - private byte[] macBlock; - - private int macSize; - private byte[] bufBlock; - private int bufOff; - - /** - * Constructor that accepts an instance of a block cipher engine. - * - * @param cipher the engine to use - */ - public EAXBlockCipher(BlockCipher cipher) - { - blockSize = cipher.getBlockSize(); - mac = new CMac(cipher); - macBlock = new byte[blockSize]; - bufBlock = new byte[blockSize * 2]; - associatedTextMac = new byte[mac.getMacSize()]; - nonceMac = new byte[mac.getMacSize()]; - this.cipher = new SICBlockCipher(cipher); - } - - public String getAlgorithmName() - { - return cipher.getUnderlyingCipher().getAlgorithmName() + "/EAX"; - } - - public BlockCipher getUnderlyingCipher() - { - return cipher.getUnderlyingCipher(); - } - - public int getBlockSize() - { - return cipher.getBlockSize(); - } - - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException - { - this.forEncryption = forEncryption; - - byte[] nonce, associatedText; - CipherParameters keyParam; - - if (params instanceof AEADParameters) - { - AEADParameters param = (AEADParameters)params; - - nonce = param.getNonce(); - associatedText = param.getAssociatedText(); - macSize = param.getMacSize() / 8; - keyParam = param.getKey(); - } - else if (params instanceof ParametersWithIV) - { - ParametersWithIV param = (ParametersWithIV)params; - - nonce = param.getIV(); - associatedText = new byte[0]; - macSize = mac.getMacSize() / 2; - keyParam = param.getParameters(); - } - else - { - throw new IllegalArgumentException("invalid parameters passed to EAX"); - } - - byte[] tag = new byte[blockSize]; - - mac.init(keyParam); - tag[blockSize - 1] = hTAG; - mac.update(tag, 0, blockSize); - mac.update(associatedText, 0, associatedText.length); - mac.doFinal(associatedTextMac, 0); - - tag[blockSize - 1] = nTAG; - mac.update(tag, 0, blockSize); - mac.update(nonce, 0, nonce.length); - mac.doFinal(nonceMac, 0); - - tag[blockSize - 1] = cTAG; - mac.update(tag, 0, blockSize); - - cipher.init(true, new ParametersWithIV(keyParam, nonceMac)); - } - - private void calculateMac() - { - byte[] outC = new byte[blockSize]; - mac.doFinal(outC, 0); - - for (int i = 0; i < macBlock.length; i++) - { - macBlock[i] = (byte)(nonceMac[i] ^ associatedTextMac[i] ^ outC[i]); - } - } - - public void reset() - { - reset(true); - } - - private void reset( - boolean clearMac) - { - cipher.reset(); - mac.reset(); - - bufOff = 0; - Arrays.fill(bufBlock, (byte)0); - - if (clearMac) - { - Arrays.fill(macBlock, (byte)0); - } - - byte[] tag = new byte[blockSize]; - tag[blockSize - 1] = cTAG; - mac.update(tag, 0, blockSize); - } - - public int processByte(byte in, byte[] out, int outOff) - throws DataLengthException - { - return process(in, out, outOff); - } - - public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) - throws DataLengthException - { - int resultLen = 0; - - for (int i = 0; i != len; i++) - { - resultLen += process(in[inOff + i], out, outOff + resultLen); - } - - return resultLen; - } - - public int doFinal(byte[] out, int outOff) - throws IllegalStateException, InvalidCipherTextException - { - int extra = bufOff; - byte[] tmp = new byte[bufBlock.length]; - - bufOff = 0; - - if (forEncryption) - { - cipher.processBlock(bufBlock, 0, tmp, 0); - cipher.processBlock(bufBlock, blockSize, tmp, blockSize); - - System.arraycopy(tmp, 0, out, outOff, extra); - - mac.update(tmp, 0, extra); - - calculateMac(); - - System.arraycopy(macBlock, 0, out, outOff + extra, macSize); - - reset(false); - - return extra + macSize; - } - else - { - if (extra > macSize) - { - mac.update(bufBlock, 0, extra - macSize); - - cipher.processBlock(bufBlock, 0, tmp, 0); - cipher.processBlock(bufBlock, blockSize, tmp, blockSize); - - System.arraycopy(tmp, 0, out, outOff, extra - macSize); - } - - calculateMac(); - - if (!verifyMac(bufBlock, extra - macSize)) - { - throw new InvalidCipherTextException("mac check in EAX failed"); - } - - reset(false); - - return extra - macSize; - } - } - - public byte[] getMac() - { - byte[] mac = new byte[macSize]; - - System.arraycopy(macBlock, 0, mac, 0, macSize); - - return mac; - } - - public int getUpdateOutputSize(int len) - { - return ((len + bufOff) / blockSize) * blockSize; - } - - public int getOutputSize(int len) - { - if (forEncryption) - { - return len + bufOff + macSize; - } - else - { - return len + bufOff - macSize; - } - } - - private int process(byte b, byte[] out, int outOff) - { - bufBlock[bufOff++] = b; - - if (bufOff == bufBlock.length) - { - int size; - - if (forEncryption) - { - size = cipher.processBlock(bufBlock, 0, out, outOff); - - mac.update(out, outOff, blockSize); - } - else - { - mac.update(bufBlock, 0, blockSize); - - size = cipher.processBlock(bufBlock, 0, out, outOff); - } - - bufOff = blockSize; - System.arraycopy(bufBlock, blockSize, bufBlock, 0, blockSize); - - return size; - } - - return 0; - } - - private boolean verifyMac(byte[] mac, int off) - { - for (int i = 0; i < macSize; i++) - { - if (macBlock[i] != mac[off + i]) - { - return false; - } - } - - return true; - } -} diff --git a/src/org/bouncycastle/crypto/modes/GCMBlockCipher.java b/src/org/bouncycastle/crypto/modes/GCMBlockCipher.java deleted file mode 100644 index 7c98efa..0000000 --- a/src/org/bouncycastle/crypto/modes/GCMBlockCipher.java +++ /dev/null @@ -1,421 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.modes.gcm.GCMMultiplier; -import org.bouncycastle.crypto.modes.gcm.Tables8kGCMMultiplier; -import org.bouncycastle.crypto.params.AEADParameters; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.crypto.util.Pack; -import org.bouncycastle.util.Arrays; - -/** - * Implements the Galois/Counter mode (GCM) detailed in - * NIST Special Publication 800-38D. - */ -public class GCMBlockCipher - implements AEADBlockCipher -{ - private static final int BLOCK_SIZE = 16; - private static final byte[] ZEROES = new byte[BLOCK_SIZE]; - - // not final due to a compiler bug - private BlockCipher cipher; - private GCMMultiplier multiplier; - - // These fields are set by init and not modified by processing - private boolean forEncryption; - private int macSize; - private byte[] nonce; - private byte[] A; - private byte[] H; - private byte[] initS; - private byte[] J0; - - // These fields are modified during processing - private byte[] bufBlock; - private byte[] macBlock; - private byte[] S; - private byte[] counter; - private int bufOff; - private long totalLength; - - public GCMBlockCipher(BlockCipher c) - { - this(c, null); - } - - public GCMBlockCipher(BlockCipher c, GCMMultiplier m) - { - if (c.getBlockSize() != BLOCK_SIZE) - { - throw new IllegalArgumentException( - "cipher required with a block size of " + BLOCK_SIZE + "."); - } - - if (m == null) - { - // TODO Consider a static property specifying default multiplier - m = new Tables8kGCMMultiplier(); - } - - this.cipher = c; - this.multiplier = m; - } - - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/GCM"; - } - - public void init(boolean forEncryption, CipherParameters params) - throws IllegalArgumentException - { - this.forEncryption = forEncryption; - this.macBlock = null; - - KeyParameter keyParam; - - if (params instanceof AEADParameters) - { - AEADParameters param = (AEADParameters)params; - - nonce = param.getNonce(); - A = param.getAssociatedText(); - - int macSizeBits = param.getMacSize(); - if (macSizeBits < 96 || macSizeBits > 128 || macSizeBits % 8 != 0) - { - throw new IllegalArgumentException("Invalid value for MAC size: " + macSizeBits); - } - - macSize = macSizeBits / 8; - keyParam = param.getKey(); - } - else if (params instanceof ParametersWithIV) - { - ParametersWithIV param = (ParametersWithIV)params; - - nonce = param.getIV(); - A = null; - macSize = 16; - keyParam = (KeyParameter)param.getParameters(); - } - else - { - throw new IllegalArgumentException("invalid parameters passed to GCM"); - } - - int bufLength = forEncryption ? BLOCK_SIZE : (BLOCK_SIZE + macSize); - this.bufBlock = new byte[bufLength]; - - if (nonce == null || nonce.length < 1) - { - throw new IllegalArgumentException("IV must be at least 1 byte"); - } - - if (A == null) - { - // Avoid lots of null checks - A = new byte[0]; - } - - // Cipher always used in forward mode - // if keyParam is null we're reusing the last key. - if (keyParam != null) - { - cipher.init(true, keyParam); - } - - // TODO This should be configurable by init parameters - // (but must be 16 if nonce length not 12) (BLOCK_SIZE?) -// this.tagLength = 16; - - this.H = new byte[BLOCK_SIZE]; - cipher.processBlock(ZEROES, 0, H, 0); - multiplier.init(H); - - this.initS = gHASH(A); - - if (nonce.length == 12) - { - this.J0 = new byte[16]; - System.arraycopy(nonce, 0, J0, 0, nonce.length); - this.J0[15] = 0x01; - } - else - { - this.J0 = gHASH(nonce); - byte[] X = new byte[16]; - packLength((long)nonce.length * 8, X, 8); - xor(this.J0, X); - multiplier.multiplyH(this.J0); - } - - this.S = Arrays.clone(initS); - this.counter = Arrays.clone(J0); - this.bufOff = 0; - this.totalLength = 0; - } - - public byte[] getMac() - { - return Arrays.clone(macBlock); - } - - public int getOutputSize(int len) - { - if (forEncryption) - { - return len + bufOff + macSize; - } - - return len + bufOff - macSize; - } - - public int getUpdateOutputSize(int len) - { - return ((len + bufOff) / BLOCK_SIZE) * BLOCK_SIZE; - } - - public int processByte(byte in, byte[] out, int outOff) - throws DataLengthException - { - return process(in, out, outOff); - } - - public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) - throws DataLengthException - { - int resultLen = 0; - - for (int i = 0; i != len; i++) - { -// resultLen += process(in[inOff + i], out, outOff + resultLen); - bufBlock[bufOff++] = in[inOff + i]; - - if (bufOff == bufBlock.length) - { - gCTRBlock(bufBlock, BLOCK_SIZE, out, outOff + resultLen); - if (!forEncryption) - { - System.arraycopy(bufBlock, BLOCK_SIZE, bufBlock, 0, macSize); - } -// bufOff = 0; - bufOff = bufBlock.length - BLOCK_SIZE; -// return bufBlock.Length; - resultLen += BLOCK_SIZE; - } - } - - return resultLen; - } - - private int process(byte in, byte[] out, int outOff) - throws DataLengthException - { - bufBlock[bufOff++] = in; - - if (bufOff == bufBlock.length) - { - gCTRBlock(bufBlock, BLOCK_SIZE, out, outOff); - if (!forEncryption) - { - System.arraycopy(bufBlock, BLOCK_SIZE, bufBlock, 0, macSize); - } -// bufOff = 0; - bufOff = bufBlock.length - BLOCK_SIZE; -// return bufBlock.length; - return BLOCK_SIZE; - } - - return 0; - } - - public int doFinal(byte[] out, int outOff) - throws IllegalStateException, InvalidCipherTextException - { - int extra = bufOff; - if (!forEncryption) - { - if (extra < macSize) - { - throw new InvalidCipherTextException("data too short"); - } - extra -= macSize; - } - - if (extra > 0) - { - byte[] tmp = new byte[BLOCK_SIZE]; - System.arraycopy(bufBlock, 0, tmp, 0, extra); - gCTRBlock(tmp, extra, out, outOff); - } - - // Final gHASH - byte[] X = new byte[16]; - packLength((long)A.length * 8, X, 0); - packLength(totalLength * 8, X, 8); - - xor(S, X); - multiplier.multiplyH(S); - - // TODO Fix this if tagLength becomes configurable - // T = MSBt(GCTRk(J0,S)) - byte[] tag = new byte[BLOCK_SIZE]; - cipher.processBlock(J0, 0, tag, 0); - xor(tag, S); - - int resultLen = extra; - - // We place into macBlock our calculated value for T - this.macBlock = new byte[macSize]; - System.arraycopy(tag, 0, macBlock, 0, macSize); - - if (forEncryption) - { - // Append T to the message - System.arraycopy(macBlock, 0, out, outOff + bufOff, macSize); - resultLen += macSize; - } - else - { - // Retrieve the T value from the message and compare to calculated one - byte[] msgMac = new byte[macSize]; - System.arraycopy(bufBlock, extra, msgMac, 0, macSize); - if (!Arrays.constantTimeAreEqual(this.macBlock, msgMac)) - { - throw new InvalidCipherTextException("mac check in GCM failed"); - } - } - - reset(false); - - return resultLen; - } - - public void reset() - { - reset(true); - } - - private void reset( - boolean clearMac) - { - S = Arrays.clone(initS); - counter = Arrays.clone(J0); - bufOff = 0; - totalLength = 0; - - if (bufBlock != null) - { - Arrays.fill(bufBlock, (byte)0); - } - - if (clearMac) - { - macBlock = null; - } - - cipher.reset(); - } - - private void gCTRBlock(byte[] buf, int bufCount, byte[] out, int outOff) - { -// inc(counter); - for (int i = 15; i >= 12; --i) - { - byte b = (byte)((counter[i] + 1) & 0xff); - counter[i] = b; - - if (b != 0) - { - break; - } - } - - byte[] tmp = new byte[BLOCK_SIZE]; - cipher.processBlock(counter, 0, tmp, 0); - - byte[] hashBytes; - if (forEncryption) - { - System.arraycopy(ZEROES, bufCount, tmp, bufCount, BLOCK_SIZE - bufCount); - hashBytes = tmp; - } - else - { - hashBytes = buf; - } - - for (int i = bufCount - 1; i >= 0; --i) - { - tmp[i] ^= buf[i]; - out[outOff + i] = tmp[i]; - } - -// gHASHBlock(hashBytes); - xor(S, hashBytes); - multiplier.multiplyH(S); - - totalLength += bufCount; - } - - private byte[] gHASH(byte[] b) - { - byte[] Y = new byte[16]; - - for (int pos = 0; pos < b.length; pos += 16) - { - byte[] X = new byte[16]; - int num = Math.min(b.length - pos, 16); - System.arraycopy(b, pos, X, 0, num); - xor(Y, X); - multiplier.multiplyH(Y); - } - - return Y; - } - -// private void gHASHBlock(byte[] block) -// { -// xor(S, block); -// multiplier.multiplyH(S); -// } - -// private static void inc(byte[] block) -// { -// for (int i = 15; i >= 12; --i) -// { -// byte b = (byte)((block[i] + 1) & 0xff); -// block[i] = b; -// -// if (b != 0) -// { -// break; -// } -// } -// } - - private static void xor(byte[] block, byte[] val) - { - for (int i = 15; i >= 0; --i) - { - block[i] ^= val[i]; - } - } - - private static void packLength(long count, byte[] bs, int off) - { - Pack.intToBigEndian((int)(count >>> 32), bs, off); - Pack.intToBigEndian((int)count, bs, off + 4); - } -} diff --git a/src/org/bouncycastle/crypto/modes/GOFBBlockCipher.java b/src/org/bouncycastle/crypto/modes/GOFBBlockCipher.java deleted file mode 100644 index 1178974..0000000 --- a/src/org/bouncycastle/crypto/modes/GOFBBlockCipher.java +++ /dev/null @@ -1,234 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * implements the GOST 28147 OFB counter mode (GCTR). - */ -public class GOFBBlockCipher - implements BlockCipher -{ - private byte[] IV; - private byte[] ofbV; - private byte[] ofbOutV; - - private final int blockSize; - private final BlockCipher cipher; - - boolean firstStep = true; - int N3; - int N4; - static final int C1 = 16843012; //00000001000000010000000100000100 - static final int C2 = 16843009; //00000001000000010000000100000001 - - - /** - * Basic constructor. - * - * @param cipher the block cipher to be used as the basis of the - * counter mode (must have a 64 bit block size). - */ - public GOFBBlockCipher( - BlockCipher cipher) - { - this.cipher = cipher; - this.blockSize = cipher.getBlockSize(); - - if (blockSize != 8) - { - throw new IllegalArgumentException("GCTR only for 64 bit block ciphers"); - } - - this.IV = new byte[cipher.getBlockSize()]; - this.ofbV = new byte[cipher.getBlockSize()]; - this.ofbOutV = new byte[cipher.getBlockSize()]; - } - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * Initialise the cipher and, possibly, the initialisation vector (IV). - * If an IV isn't passed as part of the parameter, the IV will be all zeros. - * An IV which is too short is handled in FIPS compliant fashion. - * - * @param encrypting if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean encrypting, //ignored by this CTR mode - CipherParameters params) - throws IllegalArgumentException - { - firstStep = true; - N3 = 0; - N4 = 0; - - if (params instanceof ParametersWithIV) - { - ParametersWithIV ivParam = (ParametersWithIV)params; - byte[] iv = ivParam.getIV(); - - if (iv.length < IV.length) - { - // prepend the supplied IV with zeros (per FIPS PUB 81) - System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); - for (int i = 0; i < IV.length - iv.length; i++) - { - IV[i] = 0; - } - } - else - { - System.arraycopy(iv, 0, IV, 0, IV.length); - } - - reset(); - - // if params is null we reuse the current working key. - if (ivParam.getParameters() != null) - { - cipher.init(true, ivParam.getParameters()); - } - } - else - { - reset(); - - // if params is null we reuse the current working key. - if (params != null) - { - cipher.init(true, params); - } - } - } - - /** - * return the algorithm name and mode. - * - * @return the name of the underlying algorithm followed by "/GCTR" - * and the block size in bits - */ - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/GCTR"; - } - - - /** - * return the block size we are operating at (in bytes). - * - * @return the block size we are operating at (in bytes). - */ - public int getBlockSize() - { - return blockSize; - } - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (firstStep) - { - firstStep = false; - cipher.processBlock(ofbV, 0, ofbOutV, 0); - N3 = bytesToint(ofbOutV, 0); - N4 = bytesToint(ofbOutV, 4); - } - N3 += C2; - N4 += C1; - intTobytes(N3, ofbV, 0); - intTobytes(N4, ofbV, 4); - - cipher.processBlock(ofbV, 0, ofbOutV, 0); - - // - // XOR the ofbV with the plaintext producing the cipher text (and - // the next input block). - // - for (int i = 0; i < blockSize; i++) - { - out[outOff + i] = (byte)(ofbOutV[i] ^ in[inOff + i]); - } - - // - // change over the input block. - // - System.arraycopy(ofbV, blockSize, ofbV, 0, ofbV.length - blockSize); - System.arraycopy(ofbOutV, 0, ofbV, ofbV.length - blockSize, blockSize); - - return blockSize; - } - - /** - * reset the feedback vector back to the IV and reset the underlying - * cipher. - */ - public void reset() - { - System.arraycopy(IV, 0, ofbV, 0, IV.length); - - cipher.reset(); - } - - //array of bytes to type int - private int bytesToint( - byte[] in, - int inOff) - { - return ((in[inOff + 3] << 24) & 0xff000000) + ((in[inOff + 2] << 16) & 0xff0000) + - ((in[inOff + 1] << 8) & 0xff00) + (in[inOff] & 0xff); - } - - //int to array of bytes - private void intTobytes( - int num, - byte[] out, - int outOff) - { - out[outOff + 3] = (byte)(num >>> 24); - out[outOff + 2] = (byte)(num >>> 16); - out[outOff + 1] = (byte)(num >>> 8); - out[outOff] = (byte)num; - } -} diff --git a/src/org/bouncycastle/crypto/modes/OFBBlockCipher.java b/src/org/bouncycastle/crypto/modes/OFBBlockCipher.java deleted file mode 100644 index 728a2e7..0000000 --- a/src/org/bouncycastle/crypto/modes/OFBBlockCipher.java +++ /dev/null @@ -1,183 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * implements a Output-FeedBack (OFB) mode on top of a simple cipher. - */ -public class OFBBlockCipher - implements BlockCipher -{ - private byte[] IV; - private byte[] ofbV; - private byte[] ofbOutV; - - private final int blockSize; - private final BlockCipher cipher; - - /** - * Basic constructor. - * - * @param cipher the block cipher to be used as the basis of the - * feedback mode. - * @param blockSize the block size in bits (note: a multiple of 8) - */ - public OFBBlockCipher( - BlockCipher cipher, - int blockSize) - { - this.cipher = cipher; - this.blockSize = blockSize / 8; - - this.IV = new byte[cipher.getBlockSize()]; - this.ofbV = new byte[cipher.getBlockSize()]; - this.ofbOutV = new byte[cipher.getBlockSize()]; - } - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * Initialise the cipher and, possibly, the initialisation vector (IV). - * If an IV isn't passed as part of the parameter, the IV will be all zeros. - * An IV which is too short is handled in FIPS compliant fashion. - * - * @param encrypting if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean encrypting, //ignored by this OFB mode - CipherParameters params) - throws IllegalArgumentException - { - if (params instanceof ParametersWithIV) - { - ParametersWithIV ivParam = (ParametersWithIV)params; - byte[] iv = ivParam.getIV(); - - if (iv.length < IV.length) - { - // prepend the supplied IV with zeros (per FIPS PUB 81) - System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); - for (int i = 0; i < IV.length - iv.length; i++) - { - IV[i] = 0; - } - } - else - { - System.arraycopy(iv, 0, IV, 0, IV.length); - } - - reset(); - - // if null it's an IV changed only. - if (ivParam.getParameters() != null) - { - cipher.init(true, ivParam.getParameters()); - } - } - else - { - reset(); - - cipher.init(true, params); - } - } - - /** - * return the algorithm name and mode. - * - * @return the name of the underlying algorithm followed by "/OFB" - * and the block size in bits - */ - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/OFB" + (blockSize * 8); - } - - - /** - * return the block size we are operating at (in bytes). - * - * @return the block size we are operating at (in bytes). - */ - public int getBlockSize() - { - return blockSize; - } - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - cipher.processBlock(ofbV, 0, ofbOutV, 0); - - // - // XOR the ofbV with the plaintext producing the cipher text (and - // the next input block). - // - for (int i = 0; i < blockSize; i++) - { - out[outOff + i] = (byte)(ofbOutV[i] ^ in[inOff + i]); - } - - // - // change over the input block. - // - System.arraycopy(ofbV, blockSize, ofbV, 0, ofbV.length - blockSize); - System.arraycopy(ofbOutV, 0, ofbV, ofbV.length - blockSize, blockSize); - - return blockSize; - } - - /** - * reset the feedback vector back to the IV and reset the underlying - * cipher. - */ - public void reset() - { - System.arraycopy(IV, 0, ofbV, 0, IV.length); - - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java b/src/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java deleted file mode 100644 index e48731b..0000000 --- a/src/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java +++ /dev/null @@ -1,312 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; - -/** - * Implements OpenPGP's rather strange version of Cipher-FeedBack (CFB) mode - * on top of a simple cipher. This class assumes the IV has been prepended - * to the data stream already, and just accomodates the reset after - * (blockSize + 2) bytes have been read. - *

        - * For further info see RFC 2440. - */ -public class OpenPGPCFBBlockCipher - implements BlockCipher -{ - private byte[] IV; - private byte[] FR; - private byte[] FRE; - - private BlockCipher cipher; - - private int count; - private int blockSize; - private boolean forEncryption; - - /** - * Basic constructor. - * - * @param cipher the block cipher to be used as the basis of the - * feedback mode. - */ - public OpenPGPCFBBlockCipher( - BlockCipher cipher) - { - this.cipher = cipher; - - this.blockSize = cipher.getBlockSize(); - this.IV = new byte[blockSize]; - this.FR = new byte[blockSize]; - this.FRE = new byte[blockSize]; - } - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * return the algorithm name and mode. - * - * @return the name of the underlying algorithm followed by "/PGPCFB" - * and the block size in bits. - */ - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/OpenPGPCFB"; - } - - /** - * return the block size we are operating at. - * - * @return the block size we are operating at (in bytes). - */ - public int getBlockSize() - { - return cipher.getBlockSize(); - } - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - return (forEncryption) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); - } - - /** - * reset the chaining vector back to the IV and reset the underlying - * cipher. - */ - public void reset() - { - count = 0; - - System.arraycopy(IV, 0, FR, 0, FR.length); - - cipher.reset(); - } - - /** - * Initialise the cipher and, possibly, the initialisation vector (IV). - * If an IV isn't passed as part of the parameter, the IV will be all zeros. - * An IV which is too short is handled in FIPS compliant fashion. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - throws IllegalArgumentException - { - this.forEncryption = forEncryption; - - reset(); - - cipher.init(true, params); - } - - /** - * Encrypt one byte of data according to CFB mode. - * @param data the byte to encrypt - * @param blockOff offset in the current block - * @return the encrypted byte - */ - private byte encryptByte(byte data, int blockOff) - { - return (byte)(FRE[blockOff] ^ data); - } - - /** - * Do the appropriate processing for CFB IV mode encryption. - * - * @param in the array containing the data to be encrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int encryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (count > blockSize) - { - FR[blockSize - 2] = out[outOff] = encryptByte(in[inOff], blockSize - 2); - FR[blockSize - 1] = out[outOff + 1] = encryptByte(in[inOff + 1], blockSize - 1); - - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 2; n < blockSize; n++) - { - FR[n - 2] = out[outOff + n] = encryptByte(in[inOff + n], n - 2); - } - } - else if (count == 0) - { - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 0; n < blockSize; n++) - { - FR[n] = out[outOff + n] = encryptByte(in[inOff + n], n); - } - - count += blockSize; - } - else if (count == blockSize) - { - cipher.processBlock(FR, 0, FRE, 0); - - out[outOff] = encryptByte(in[inOff], 0); - out[outOff + 1] = encryptByte(in[inOff + 1], 1); - - // - // do reset - // - System.arraycopy(FR, 2, FR, 0, blockSize - 2); - System.arraycopy(out, outOff, FR, blockSize - 2, 2); - - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 2; n < blockSize; n++) - { - FR[n - 2] = out[outOff + n] = encryptByte(in[inOff + n], n - 2); - } - - count += blockSize; - } - - return blockSize; - } - - /** - * Do the appropriate processing for CFB IV mode decryption. - * - * @param in the array containing the data to be decrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int decryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (count > blockSize) - { - byte inVal = in[inOff]; - FR[blockSize - 2] = inVal; - out[outOff] = encryptByte(inVal, blockSize - 2); - - inVal = in[inOff + 1]; - FR[blockSize - 1] = inVal; - out[outOff + 1] = encryptByte(inVal, blockSize - 1); - - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 2; n < blockSize; n++) - { - inVal = in[inOff + n]; - FR[n - 2] = inVal; - out[outOff + n] = encryptByte(inVal, n - 2); - } - } - else if (count == 0) - { - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 0; n < blockSize; n++) - { - FR[n] = in[inOff + n]; - out[n] = encryptByte(in[inOff + n], n); - } - - count += blockSize; - } - else if (count == blockSize) - { - cipher.processBlock(FR, 0, FRE, 0); - - byte inVal1 = in[inOff]; - byte inVal2 = in[inOff + 1]; - out[outOff ] = encryptByte(inVal1, 0); - out[outOff + 1] = encryptByte(inVal2, 1); - - System.arraycopy(FR, 2, FR, 0, blockSize - 2); - - FR[blockSize - 2] = inVal1; - FR[blockSize - 1] = inVal2; - - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 2; n < blockSize; n++) - { - byte inVal = in[inOff + n]; - FR[n - 2] = inVal; - out[outOff + n] = encryptByte(inVal, n - 2); - } - - count += blockSize; - } - - return blockSize; - } -} diff --git a/src/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java b/src/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java deleted file mode 100644 index 18e612b..0000000 --- a/src/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java +++ /dev/null @@ -1,450 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * Implements OpenPGP's rather strange version of Cipher-FeedBack (CFB) mode on top of a simple cipher. For further info see RFC 2440. - */ -public class PGPCFBBlockCipher - implements BlockCipher -{ - private byte[] IV; - private byte[] FR; - private byte[] FRE; - private byte[] tmp; - - private BlockCipher cipher; - - private int count; - private int blockSize; - private boolean forEncryption; - - private boolean inlineIv; // if false we don't need to prepend an IV - - /** - * Basic constructor. - * - * @param cipher the block cipher to be used as the basis of the - * feedback mode. - * @param inlineIv if true this is for PGP CFB with a prepended iv. - */ - public PGPCFBBlockCipher( - BlockCipher cipher, - boolean inlineIv) - { - this.cipher = cipher; - this.inlineIv = inlineIv; - - this.blockSize = cipher.getBlockSize(); - this.IV = new byte[blockSize]; - this.FR = new byte[blockSize]; - this.FRE = new byte[blockSize]; - this.tmp = new byte[blockSize]; - } - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - /** - * return the algorithm name and mode. - * - * @return the name of the underlying algorithm followed by "/PGPCFB" - * and the block size in bits. - */ - public String getAlgorithmName() - { - if (inlineIv) - { - return cipher.getAlgorithmName() + "/PGPCFBwithIV"; - } - else - { - return cipher.getAlgorithmName() + "/PGPCFB"; - } - } - - /** - * return the block size we are operating at. - * - * @return the block size we are operating at (in bytes). - */ - public int getBlockSize() - { - return cipher.getBlockSize(); - } - - /** - * Process one block of input from the array in and write it to - * the out array. - * - * @param in the array containing the input data. - * @param inOff offset into the in array the data starts at. - * @param out the array the output data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - public int processBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if (inlineIv) - { - return (forEncryption) ? encryptBlockWithIV(in, inOff, out, outOff) : decryptBlockWithIV(in, inOff, out, outOff); - } - else - { - return (forEncryption) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); - } - } - - /** - * reset the chaining vector back to the IV and reset the underlying - * cipher. - */ - public void reset() - { - count = 0; - - for (int i = 0; i != FR.length; i++) - { - if (inlineIv) - { - FR[i] = 0; - } - else - { - FR[i] = IV[i]; // if simple mode, key is IV (even if this is zero) - } - } - - cipher.reset(); - } - - /** - * Initialise the cipher and, possibly, the initialisation vector (IV). - * If an IV isn't passed as part of the parameter, the IV will be all zeros. - * An IV which is too short is handled in FIPS compliant fashion. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - throws IllegalArgumentException - { - this.forEncryption = forEncryption; - - if (params instanceof ParametersWithIV) - { - ParametersWithIV ivParam = (ParametersWithIV)params; - byte[] iv = ivParam.getIV(); - - if (iv.length < IV.length) - { - // prepend the supplied IV with zeros (per FIPS PUB 81) - System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); - for (int i = 0; i < IV.length - iv.length; i++) - { - IV[i] = 0; - } - } - else - { - System.arraycopy(iv, 0, IV, 0, IV.length); - } - - reset(); - - cipher.init(true, ivParam.getParameters()); - } - else - { - reset(); - - cipher.init(true, params); - } - } - - /** - * Encrypt one byte of data according to CFB mode. - * @param data the byte to encrypt - * @param blockOff where am i in the current block, determines when to resync the block - * @returns the encrypted byte - */ - private byte encryptByte(byte data, int blockOff) - { - return (byte)(FRE[blockOff] ^ data); - } - - /** - * Do the appropriate processing for CFB IV mode encryption. - * - * @param in the array containing the data to be encrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int encryptBlockWithIV( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (count == 0) - { - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 0; n < blockSize; n++) - { - out[outOff + n] = encryptByte(IV[n], n); - } - - System.arraycopy(out, outOff, FR, 0, blockSize); - - cipher.processBlock(FR, 0, FRE, 0); - - out[outOff + blockSize] = encryptByte(IV[blockSize - 2], 0); - out[outOff + blockSize + 1] = encryptByte(IV[blockSize - 1], 1); - - System.arraycopy(out, outOff + 2, FR, 0, blockSize); - - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 0; n < blockSize; n++) - { - out[outOff + blockSize + 2 + n] = encryptByte(in[inOff + n], n); - } - - System.arraycopy(out, outOff + blockSize + 2, FR, 0, blockSize); - - count += 2 * blockSize + 2; - - return 2 * blockSize + 2; - } - else if (count >= blockSize + 2) - { - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 0; n < blockSize; n++) - { - out[outOff + n] = encryptByte(in[inOff + n], n); - } - - System.arraycopy(out, outOff, FR, 0, blockSize); - } - - return blockSize; - } - - /** - * Do the appropriate processing for CFB IV mode decryption. - * - * @param in the array containing the data to be decrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int decryptBlockWithIV( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - if (count == 0) - { - for (int n = 0; n < blockSize; n++) - { - FR[n] = in[inOff + n]; - } - - cipher.processBlock(FR, 0, FRE, 0); - - count += blockSize; - - return 0; - } - else if (count == blockSize) - { - // copy in buffer so that this mode works if in and out are the same - System.arraycopy(in, inOff, tmp, 0, blockSize); - - System.arraycopy(FR, 2, FR, 0, blockSize - 2); - - FR[blockSize - 2] = tmp[0]; - FR[blockSize - 1] = tmp[1]; - - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 0; n < blockSize - 2; n++) - { - out[outOff + n] = encryptByte(tmp[n + 2], n); - } - - System.arraycopy(tmp, 2, FR, 0, blockSize - 2); - - count += 2; - - return blockSize - 2; - } - else if (count >= blockSize + 2) - { - // copy in buffer so that this mode works if in and out are the same - System.arraycopy(in, inOff, tmp, 0, blockSize); - - out[outOff + 0] = encryptByte(tmp[0], blockSize - 2); - out[outOff + 1] = encryptByte(tmp[1], blockSize - 1); - - System.arraycopy(tmp, 0, FR, blockSize - 2, 2); - - cipher.processBlock(FR, 0, FRE, 0); - - for (int n = 0; n < blockSize - 2; n++) - { - out[outOff + n + 2] = encryptByte(tmp[n + 2], n); - } - - System.arraycopy(tmp, 2, FR, 0, blockSize - 2); - - } - - return blockSize; - } - - /** - * Do the appropriate processing for CFB mode encryption. - * - * @param in the array containing the data to be encrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int encryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - cipher.processBlock(FR, 0, FRE, 0); - for (int n = 0; n < blockSize; n++) - { - out[outOff + n] = encryptByte(in[inOff + n], n); - } - - for (int n = 0; n < blockSize; n++) - { - FR[n] = out[outOff + n]; - } - - return blockSize; - - } - - /** - * Do the appropriate processing for CFB mode decryption. - * - * @param in the array containing the data to be decrypted. - * @param inOff offset into the in array the data starts at. - * @param out the array the encrypted data will be copied into. - * @param outOff the offset into the out array the output will start at. - * @exception DataLengthException if there isn't enough data in in, or - * space in out. - * @exception IllegalStateException if the cipher isn't initialised. - * @return the number of bytes processed and produced. - */ - private int decryptBlock( - byte[] in, - int inOff, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if ((inOff + blockSize) > in.length) - { - throw new DataLengthException("input buffer too short"); - } - - if ((outOff + blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - cipher.processBlock(FR, 0, FRE, 0); - for (int n = 0; n < blockSize; n++) - { - out[outOff + n] = encryptByte(in[inOff + n], n); - } - - for (int n = 0; n < blockSize; n++) - { - FR[n] = in[inOff + n]; - } - - return blockSize; - - } -} diff --git a/src/org/bouncycastle/crypto/modes/PaddedBlockCipher.java b/src/org/bouncycastle/crypto/modes/PaddedBlockCipher.java deleted file mode 100644 index f15ed67..0000000 --- a/src/org/bouncycastle/crypto/modes/PaddedBlockCipher.java +++ /dev/null @@ -1,253 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.BufferedBlockCipher; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A wrapper class that allows block ciphers to be used to process data in - * a piecemeal fashion with PKCS5/PKCS7 padding. The PaddedBlockCipher - * outputs a block only when the buffer is full and more data is being added, - * or on a doFinal (unless the current block in the buffer is a pad block). - * The padding mechanism used is the one outlined in PKCS5/PKCS7. - * - * @deprecated use org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher instead. - */ -public class PaddedBlockCipher - extends BufferedBlockCipher -{ - /** - * Create a buffered block cipher with, or without, padding. - * - * @param cipher the underlying block cipher this buffering object wraps. - */ - public PaddedBlockCipher( - BlockCipher cipher) - { - this.cipher = cipher; - - buf = new byte[cipher.getBlockSize()]; - bufOff = 0; - } - - /** - * return the size of the output buffer required for an update plus a - * doFinal with an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to update and doFinal - * with len bytes of input. - */ - public int getOutputSize( - int len) - { - int total = len + bufOff; - int leftOver = total % buf.length; - - if (leftOver == 0) - { - if (forEncryption) - { - return total + buf.length; - } - - return total; - } - - return total - leftOver + buf.length; - } - - /** - * return the size of the output buffer required for an update - * an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to update - * with len bytes of input. - */ - public int getUpdateOutputSize( - int len) - { - int total = len + bufOff; - int leftOver = total % buf.length; - - if (leftOver == 0) - { - return total - buf.length; - } - - return total - leftOver; - } - - /** - * process a single byte, producing an output block if neccessary. - * - * @param in the input byte. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processByte( - byte in, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - int resultLen = 0; - - if (bufOff == buf.length) - { - resultLen = cipher.processBlock(buf, 0, out, outOff); - bufOff = 0; - } - - buf[bufOff++] = in; - - return resultLen; - } - - /** - * process an array of bytes, producing output if necessary. - * - * @param in the input byte array. - * @param inOff the offset at which the input data starts. - * @param len the number of bytes to be copied out of the input array. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = getBlockSize(); - int length = getUpdateOutputSize(len); - - if (length > 0) - { - if ((outOff + length) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - } - - int resultLen = 0; - int gapLen = buf.length - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += cipher.processBlock(buf, 0, out, outOff); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > buf.length) - { - resultLen += cipher.processBlock(in, inOff, out, outOff + resultLen); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - - return resultLen; - } - - /** - * Process the last block in the buffer. If the buffer is currently - * full and padding needs to be added a call to doFinal will produce - * 2 * getBlockSize() bytes. - * - * @param out the array the block currently being held is copied into. - * @param outOff the offset at which the copying starts. - * @exception DataLengthException if there is insufficient space in out for - * the output or we are decrypting and the input is not block size aligned. - * @exception IllegalStateException if the underlying cipher is not - * initialised. - * @exception InvalidCipherTextException if padding is expected and not found. - */ - public int doFinal( - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException, InvalidCipherTextException - { - int blockSize = cipher.getBlockSize(); - int resultLen = 0; - - if (forEncryption) - { - if (bufOff == blockSize) - { - if ((outOff + 2 * blockSize) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - - resultLen = cipher.processBlock(buf, 0, out, outOff); - bufOff = 0; - } - - // - // add PKCS7 padding - // - byte code = (byte)(blockSize - bufOff); - - while (bufOff < blockSize) - { - buf[bufOff] = code; - bufOff++; - } - - resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); - } - else - { - if (bufOff == blockSize) - { - resultLen = cipher.processBlock(buf, 0, buf, 0); - bufOff = 0; - } - else - { - throw new DataLengthException("last block incomplete in decryption"); - } - - // - // remove PKCS7 padding - // - int count = buf[blockSize - 1] & 0xff; - - if ((count < 0) || (count > blockSize)) - { - throw new InvalidCipherTextException("pad block corrupted"); - } - - resultLen -= count; - - System.arraycopy(buf, 0, out, outOff, resultLen); - } - - reset(); - - return resultLen; - } -} diff --git a/src/org/bouncycastle/crypto/modes/SICBlockCipher.java b/src/org/bouncycastle/crypto/modes/SICBlockCipher.java deleted file mode 100644 index af9f18d..0000000 --- a/src/org/bouncycastle/crypto/modes/SICBlockCipher.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.bouncycastle.crypto.modes; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.params.ParametersWithIV; - -/** - * Implements the Segmented Integer Counter (SIC) mode on top of a simple - * block cipher. This mode is also known as CTR mode. - */ -public class SICBlockCipher implements BlockCipher -{ - private final BlockCipher cipher; - private final int blockSize; - - private byte[] IV; - private byte[] counter; - private byte[] counterOut; - - - /** - * Basic constructor. - * - * @param c the block cipher to be used. - */ - public SICBlockCipher(BlockCipher c) - { - this.cipher = c; - this.blockSize = cipher.getBlockSize(); - this.IV = new byte[blockSize]; - this.counter = new byte[blockSize]; - this.counterOut = new byte[blockSize]; - } - - - /** - * return the underlying block cipher that we are wrapping. - * - * @return the underlying block cipher that we are wrapping. - */ - public BlockCipher getUnderlyingCipher() - { - return cipher; - } - - - public void init( - boolean forEncryption, //ignored by this CTR mode - CipherParameters params) - throws IllegalArgumentException - { - if (params instanceof ParametersWithIV) - { - ParametersWithIV ivParam = (ParametersWithIV)params; - byte[] iv = ivParam.getIV(); - System.arraycopy(iv, 0, IV, 0, IV.length); - - reset(); - - // if null it's an IV changed only. - if (ivParam.getParameters() != null) - { - cipher.init(true, ivParam.getParameters()); - } - } - else - { - throw new IllegalArgumentException("SIC mode requires ParametersWithIV"); - } - } - - public String getAlgorithmName() - { - return cipher.getAlgorithmName() + "/SIC"; - } - - public int getBlockSize() - { - return cipher.getBlockSize(); - } - - - public int processBlock(byte[] in, int inOff, byte[] out, int outOff) - throws DataLengthException, IllegalStateException - { - cipher.processBlock(counter, 0, counterOut, 0); - - // - // XOR the counterOut with the plaintext producing the cipher text - // - for (int i = 0; i < counterOut.length; i++) - { - out[outOff + i] = (byte)(counterOut[i] ^ in[inOff + i]); - } - - int carry = 1; - - for (int i = counter.length - 1; i >= 0; i--) - { - int x = (counter[i] & 0xff) + carry; - - if (x > 0xff) - { - carry = 1; - } - else - { - carry = 0; - } - - counter[i] = (byte)x; - } - - return counter.length; - } - - - public void reset() - { - System.arraycopy(IV, 0, counter, 0, counter.length); - cipher.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java b/src/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java deleted file mode 100644 index f2be2fc..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -import org.bouncycastle.util.Arrays; - -public class BasicGCMExponentiator implements GCMExponentiator -{ - private byte[] x; - - public void init(byte[] x) - { - this.x = Arrays.clone(x); - } - - public void exponentiateX(long pow, byte[] output) - { - // Initial value is little-endian 1 - byte[] y = GCMUtil.oneAsBytes(); - - if (pow > 0) - { - byte[] powX = Arrays.clone(x); - do - { - if ((pow & 1L) != 0) - { - GCMUtil.multiply(y, powX); - } - GCMUtil.multiply(powX, powX); - pow >>>= 1; - } - while (pow > 0); - } - - System.arraycopy(y, 0, output, 0, 16); - } -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java b/src/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java deleted file mode 100644 index a98d5b2..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -import org.bouncycastle.util.Arrays; - -public class BasicGCMMultiplier implements GCMMultiplier -{ - private byte[] H; - - public void init(byte[] H) - { - this.H = Arrays.clone(H); - } - - public void multiplyH(byte[] x) - { - GCMUtil.multiply(x, H); - } -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java b/src/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java deleted file mode 100644 index e1cc5c7..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -public interface GCMExponentiator -{ - void init(byte[] x); - void exponentiateX(long pow, byte[] output); -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java b/src/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java deleted file mode 100644 index f52f610..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -public interface GCMMultiplier -{ - void init(byte[] H); - void multiplyH(byte[] x); -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/GCMUtil.java b/src/org/bouncycastle/crypto/modes/gcm/GCMUtil.java deleted file mode 100644 index ce02be4..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/GCMUtil.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -import org.bouncycastle.crypto.util.Pack; -import org.bouncycastle.util.Arrays; - -abstract class GCMUtil -{ - static byte[] oneAsBytes() - { - byte[] tmp = new byte[16]; - tmp[0] = (byte)0x80; - return tmp; - } - - static int[] oneAsInts() - { - int[] tmp = new int[4]; - tmp[0] = 0x80000000; - return tmp; - } - - static int[] asInts(byte[] bs) - { - int[] us = new int[4]; - us[0] = Pack.bigEndianToInt(bs, 0); - us[1] = Pack.bigEndianToInt(bs, 4); - us[2] = Pack.bigEndianToInt(bs, 8); - us[3] = Pack.bigEndianToInt(bs, 12); - return us; - } - - static void multiply(byte[] block, byte[] val) - { - byte[] tmp = Arrays.clone(block); - byte[] c = new byte[16]; - - for (int i = 0; i < 16; ++i) - { - byte bits = val[i]; - for (int j = 7; j >= 0; --j) - { - if ((bits & (1 << j)) != 0) - { - xor(c, tmp); - } - - boolean lsb = (tmp[15] & 1) != 0; - shiftRight(tmp); - if (lsb) - { - // R = new byte[]{ 0xe1, ... }; -// GCMUtil.xor(v, R); - tmp[0] ^= (byte)0xe1; - } - } - } - - System.arraycopy(c, 0, block, 0, 16); - } - - // P is the value with only bit i=1 set - static void multiplyP(int[] x) - { - boolean lsb = (x[3] & 1) != 0; - shiftRight(x); - if (lsb) - { - // R = new int[]{ 0xe1000000, 0, 0, 0 }; -// xor(v, R); - x[0] ^= 0xe1000000; - } - } - - static void multiplyP8(int[] x) - { -// for (int i = 8; i != 0; --i) -// { -// multiplyP(x); -// } - - int lsw = x[3]; - shiftRightN(x, 8); - for (int i = 7; i >= 0; --i) - { - if ((lsw & (1 << i)) != 0) - { - x[0] ^= (0xe1000000 >>> (7 - i)); - } - } - } - - static void shiftRight(byte[] block) - { - int i = 0; - int bit = 0; - for (;;) - { - int b = block[i] & 0xff; - block[i] = (byte) ((b >>> 1) | bit); - if (++i == 16) - { - break; - } - bit = (b & 1) << 7; - } - } - - static void shiftRight(int[] block) - { - int i = 0; - int bit = 0; - for (;;) - { - int b = block[i]; - block[i] = (b >>> 1) | bit; - if (++i == 4) - { - break; - } - bit = b << 31; - } - } - - static void shiftRightN(int[] block, int n) - { - int i = 0; - int bits = 0; - for (;;) - { - int b = block[i]; - block[i] = (b >>> n) | bits; - if (++i == 4) - { - break; - } - bits = b << (32 - n); - } - } - - static void xor(byte[] block, byte[] val) - { - for (int i = 15; i >= 0; --i) - { - block[i] ^= val[i]; - } - } - - static void xor(int[] block, int[] val) - { - for (int i = 3; i >= 0; --i) - { - block[i] ^= val[i]; - } - } -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java b/src/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java deleted file mode 100644 index ca07597..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -import org.bouncycastle.util.Arrays; - -public class Tables1kGCMExponentiator implements GCMExponentiator -{ - // A lookup table of the power-of-two powers of 'x' - byte[][] lookupPowX2 = new byte[64][]; - - public void init(byte[] x) - { - lookupPowX2[0] = GCMUtil.oneAsBytes(); - lookupPowX2[1] = Arrays.clone(x); - - for (int i = 2; i != 64; ++i) - { - byte[] tmp = Arrays.clone(lookupPowX2[i - 1]); - GCMUtil.multiply(tmp, tmp); - lookupPowX2[i] = tmp; - } - } - - public void exponentiateX(long pow, byte[] output) - { - byte[] y = GCMUtil.oneAsBytes(); - int powX2 = 1; - - while (pow > 0) - { - if ((pow & 1L) != 0) - { - GCMUtil.multiply(y, lookupPowX2[powX2]); - } - ++powX2; - pow >>>= 1; - } - - System.arraycopy(y, 0, output, 0, 16); - } -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java b/src/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java deleted file mode 100644 index 92a1074..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -import org.bouncycastle.crypto.util.Pack; - -public class Tables64kGCMMultiplier - implements GCMMultiplier -{ - private final int[][][] M = new int[16][][]; - public Tables64kGCMMultiplier() { - // workaround for Windows Phone - for(int iter = 0 ; iter < M.length ; iter++) { - M[iter] = new int[256][]; - } - } - - public void init(byte[] H) - { - M[0][0] = new int[4]; - M[0][128] = GCMUtil.asInts(H); - for (int j = 64; j >= 1; j >>= 1) - { - int[] tmp = new int[4]; - System.arraycopy(M[0][j + j], 0, tmp, 0, 4); - - GCMUtil.multiplyP(tmp); - M[0][j] = tmp; - } - - int i = 0; - for (;;) - { - for (int j = 2; j < 256; j += j) - { - for (int k = 1; k < j; ++k) - { - int[] tmp = new int[4]; - System.arraycopy(M[i][j], 0, tmp, 0, 4); - - GCMUtil.xor(tmp, M[i][k]); - M[i][j + k] = tmp; - } - } - - if (++i == 16) - { - return; - } - - M[i][0] = new int[4]; - for (int j = 128; j > 0; j >>= 1) - { - int[] tmp = new int[4]; - System.arraycopy(M[i - 1][j], 0, tmp, 0, 4); - - GCMUtil.multiplyP8(tmp); - M[i][j] = tmp; - } - } - } - - public void multiplyH(byte[] x) - { -// assert x.Length == 16; - - int[] z = new int[4]; - for (int i = 15; i >= 0; --i) - { -// GCMUtil.xor(z, M[i][x[i] & 0xff]); - int[] m = M[i][x[i] & 0xff]; - z[0] ^= m[0]; - z[1] ^= m[1]; - z[2] ^= m[2]; - z[3] ^= m[3]; - } - - Pack.intToBigEndian(z, x, 0); - } -} diff --git a/src/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java b/src/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java deleted file mode 100644 index 0366073..0000000 --- a/src/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.bouncycastle.crypto.modes.gcm; - -import org.bouncycastle.crypto.util.Pack; - -public class Tables8kGCMMultiplier implements GCMMultiplier -{ - private final int[][][] M = new int[32][][]; - - public Tables8kGCMMultiplier() { - // workaround for Windows Phone - for(int iter = 0 ; iter < M.length ; iter++) { - M[iter] = new int[16][]; - } - } - - public void init(byte[] H) - { - M[0][0] = new int[4]; - M[1][0] = new int[4]; - M[1][8] = GCMUtil.asInts(H); - - for (int j = 4; j >= 1; j >>= 1) - { - int[] tmp = new int[4]; - System.arraycopy(M[1][j + j], 0, tmp, 0, 4); - - GCMUtil.multiplyP(tmp); - M[1][j] = tmp; - } - - { - int[] tmp = new int[4]; - System.arraycopy(M[1][1], 0, tmp, 0, 4); - - GCMUtil.multiplyP(tmp); - M[0][8] = tmp; - } - - for (int j = 4; j >= 1; j >>= 1) - { - int[] tmp = new int[4]; - System.arraycopy(M[0][j + j], 0, tmp, 0, 4); - - GCMUtil.multiplyP(tmp); - M[0][j] = tmp; - } - - int i = 0; - for (;;) - { - for (int j = 2; j < 16; j += j) - { - for (int k = 1; k < j; ++k) - { - int[] tmp = new int[4]; - System.arraycopy(M[i][j], 0, tmp, 0, 4); - - GCMUtil.xor(tmp, M[i][k]); - M[i][j + k] = tmp; - } - } - - if (++i == 32) - { - return; - } - - if (i > 1) - { - M[i][0] = new int[4]; - for(int j = 8; j > 0; j >>= 1) - { - int[] tmp = new int[4]; - System.arraycopy(M[i - 2][j], 0, tmp, 0, 4); - - GCMUtil.multiplyP8(tmp); - M[i][j] = tmp; - } - } - } - } - - public void multiplyH(byte[] x) - { -// assert x.Length == 16; - - int[] z = new int[4]; - for (int i = 15; i >= 0; --i) - { -// GCMUtil.xor(z, M[i + i][x[i] & 0x0f]); - int[] m = M[i + i][x[i] & 0x0f]; - z[0] ^= m[0]; - z[1] ^= m[1]; - z[2] ^= m[2]; - z[3] ^= m[3]; -// GCMUtil.xor(z, M[i + i + 1][(x[i] & 0xf0) >>> 4]); - m = M[i + i + 1][(x[i] & 0xf0) >>> 4]; - z[0] ^= m[0]; - z[1] ^= m[1]; - z[2] ^= m[2]; - z[3] ^= m[3]; - } - - Pack.intToBigEndian(z, x, 0); - } -} diff --git a/src/org/bouncycastle/crypto/modes/package.html b/src/org/bouncycastle/crypto/modes/package.html deleted file mode 100644 index 5402df4..0000000 --- a/src/org/bouncycastle/crypto/modes/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Modes for symmetric ciphers. - - diff --git a/src/org/bouncycastle/crypto/package.html b/src/org/bouncycastle/crypto/package.html deleted file mode 100644 index ee5487f..0000000 --- a/src/org/bouncycastle/crypto/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Base classes for the lightweight API. - - diff --git a/src/org/bouncycastle/crypto/paddings/BlockCipherPadding.java b/src/org/bouncycastle/crypto/paddings/BlockCipherPadding.java deleted file mode 100644 index b80bd21..0000000 --- a/src/org/bouncycastle/crypto/paddings/BlockCipherPadding.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * Block cipher padders are expected to conform to this interface - */ -public interface BlockCipherPadding -{ - /** - * Initialise the padder. - * - * @param random the source of randomness for the padding, if required. - */ - public void init(SecureRandom random) - throws IllegalArgumentException; - - /** - * Return the name of the algorithm the cipher implements. - * - * @return the name of the algorithm the cipher implements. - */ - public String getPaddingName(); - - /** - * add the pad bytes to the passed in block, returning the - * number of bytes added. - *

        - * Note: this assumes that the last block of plain text is always - * passed to it inside in. i.e. if inOff is zero, indicating the - * entire block is to be overwritten with padding the value of in - * should be the same as the last block of plain text. The reason - * for this is that some modes such as "trailing bit compliment" - * base the padding on the last byte of plain text. - *

        - */ - public int addPadding(byte[] in, int inOff); - - /** - * return the number of pad bytes present in the block. - * @exception InvalidCipherTextException if the padding is badly formed - * or invalid. - */ - public int padCount(byte[] in) - throws InvalidCipherTextException; -} diff --git a/src/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java b/src/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java deleted file mode 100644 index f4dfe53..0000000 --- a/src/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A padder that adds ISO10126-2 padding to a block. - */ -public class ISO10126d2Padding - implements BlockCipherPadding -{ - SecureRandom random; - - /** - * Initialise the padder. - * - * @param random a SecureRandom if available. - */ - public void init(SecureRandom random) - throws IllegalArgumentException - { - if (random != null) - { - this.random = random; - } - else - { - this.random = new SecureRandom(); - } - } - - /** - * Return the name of the algorithm the padder implements. - * - * @return the name of the algorithm the padder implements. - */ - public String getPaddingName() - { - return "ISO10126-2"; - } - - /** - * add the pad bytes to the passed in block, returning the - * number of bytes added. - */ - public int addPadding( - byte[] in, - int inOff) - { - byte code = (byte)(in.length - inOff); - - while (inOff < (in.length - 1)) - { - in[inOff] = (byte)random.nextInt(); - inOff++; - } - - in[inOff] = code; - - return code; - } - - /** - * return the number of pad bytes present in the block. - */ - public int padCount(byte[] in) - throws InvalidCipherTextException - { - int count = in[in.length - 1] & 0xff; - - if (count > in.length) - { - throw new InvalidCipherTextException("pad block corrupted"); - } - - return count; - } -} diff --git a/src/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java b/src/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java deleted file mode 100644 index 3e39331..0000000 --- a/src/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A padder that adds the padding according to the scheme referenced in - * ISO 7814-4 - scheme 2 from ISO 9797-1. The first byte is 0x80, rest is 0x00 - */ -public class ISO7816d4Padding - implements BlockCipherPadding -{ - /** - * Initialise the padder. - * - * @param random - a SecureRandom if available. - */ - public void init(SecureRandom random) - throws IllegalArgumentException - { - // nothing to do. - } - - /** - * Return the name of the algorithm the padder implements. - * - * @return the name of the algorithm the padder implements. - */ - public String getPaddingName() - { - return "ISO7816-4"; - } - - /** - * add the pad bytes to the passed in block, returning the - * number of bytes added. - */ - public int addPadding( - byte[] in, - int inOff) - { - int added = (in.length - inOff); - - in [inOff]= (byte) 0x80; - inOff ++; - - while (inOff < in.length) - { - in[inOff] = (byte) 0; - inOff++; - } - - return added; - } - - /** - * return the number of pad bytes present in the block. - */ - public int padCount(byte[] in) - throws InvalidCipherTextException - { - int count = in.length - 1; - - while (count > 0 && in[count] == 0) - { - count--; - } - - if (in[count] != (byte)0x80) - { - throw new InvalidCipherTextException("pad block corrupted"); - } - - return in.length - count; - } -} diff --git a/src/org/bouncycastle/crypto/paddings/PKCS7Padding.java b/src/org/bouncycastle/crypto/paddings/PKCS7Padding.java deleted file mode 100644 index a38953f..0000000 --- a/src/org/bouncycastle/crypto/paddings/PKCS7Padding.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A padder that adds PKCS7/PKCS5 padding to a block. - */ -public class PKCS7Padding - implements BlockCipherPadding -{ - /** - * Initialise the padder. - * - * @param random - a SecureRandom if available. - */ - public void init(SecureRandom random) - throws IllegalArgumentException - { - // nothing to do. - } - - /** - * Return the name of the algorithm the padder implements. - * - * @return the name of the algorithm the padder implements. - */ - public String getPaddingName() - { - return "PKCS7"; - } - - /** - * add the pad bytes to the passed in block, returning the - * number of bytes added. - */ - public int addPadding( - byte[] in, - int inOff) - { - byte code = (byte)(in.length - inOff); - - while (inOff < in.length) - { - in[inOff] = code; - inOff++; - } - - return code; - } - - /** - * return the number of pad bytes present in the block. - */ - public int padCount(byte[] in) - throws InvalidCipherTextException - { - int count = in[in.length - 1] & 0xff; - - if (count > in.length || count == 0) - { - throw new InvalidCipherTextException("pad block corrupted"); - } - - for (int i = 1; i <= count; i++) - { - if (in[in.length - i] != count) - { - throw new InvalidCipherTextException("pad block corrupted"); - } - } - - return count; - } -} diff --git a/src/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java b/src/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java deleted file mode 100644 index ec412b9..0000000 --- a/src/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.BufferedBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -/** - * A wrapper class that allows block ciphers to be used to process data in - * a piecemeal fashion with padding. The PaddedBufferedBlockCipher - * outputs a block only when the buffer is full and more data is being added, - * or on a doFinal (unless the current block in the buffer is a pad block). - * The default padding mechanism used is the one outlined in PKCS5/PKCS7. - */ -public class PaddedBufferedBlockCipher - extends BufferedBlockCipher -{ - BlockCipherPadding padding; - - /** - * Create a buffered block cipher with the desired padding. - * - * @param cipher the underlying block cipher this buffering object wraps. - * @param padding the padding type. - */ - public PaddedBufferedBlockCipher( - BlockCipher cipher, - BlockCipherPadding padding) - { - this.cipher = cipher; - this.padding = padding; - - buf = new byte[cipher.getBlockSize()]; - bufOff = 0; - } - - /** - * Create a buffered block cipher PKCS7 padding - * - * @param cipher the underlying block cipher this buffering object wraps. - */ - public PaddedBufferedBlockCipher( - BlockCipher cipher) - { - this(cipher, new PKCS7Padding()); - } - - /** - * initialise the cipher. - * - * @param forEncryption if true the cipher is initialised for - * encryption, if false for decryption. - * @param params the key and other data required by the cipher. - * @exception IllegalArgumentException if the params argument is - * inappropriate. - */ - public void init( - boolean forEncryption, - CipherParameters params) - throws IllegalArgumentException - { - this.forEncryption = forEncryption; - - reset(); - - if (params instanceof ParametersWithRandom) - { - ParametersWithRandom p = (ParametersWithRandom)params; - - padding.init(p.getRandom()); - - cipher.init(forEncryption, p.getParameters()); - } - else - { - padding.init(null); - - cipher.init(forEncryption, params); - } - } - - /** - * return the minimum size of the output buffer required for an update - * plus a doFinal with an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to update and doFinal - * with len bytes of input. - */ - public int getOutputSize( - int len) - { - int total = len + bufOff; - int leftOver = total % buf.length; - - if (leftOver == 0) - { - if (forEncryption) - { - return total + buf.length; - } - - return total; - } - - return total - leftOver + buf.length; - } - - /** - * return the size of the output buffer required for an update - * an input of len bytes. - * - * @param len the length of the input. - * @return the space required to accommodate a call to update - * with len bytes of input. - */ - public int getUpdateOutputSize( - int len) - { - int total = len + bufOff; - int leftOver = total % buf.length; - - if (leftOver == 0) - { - return total - buf.length; - } - - return total - leftOver; - } - - /** - * process a single byte, producing an output block if neccessary. - * - * @param in the input byte. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processByte( - byte in, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - int resultLen = 0; - - if (bufOff == buf.length) - { - resultLen = cipher.processBlock(buf, 0, out, outOff); - bufOff = 0; - } - - buf[bufOff++] = in; - - return resultLen; - } - - /** - * process an array of bytes, producing output if necessary. - * - * @param in the input byte array. - * @param inOff the offset at which the input data starts. - * @param len the number of bytes to be copied out of the input array. - * @param out the space for any output that might be produced. - * @param outOff the offset from which the output will be copied. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there isn't enough space in out. - * @exception IllegalStateException if the cipher isn't initialised. - */ - public int processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int blockSize = getBlockSize(); - int length = getUpdateOutputSize(len); - - if (length > 0) - { - if ((outOff + length) > out.length) - { - throw new DataLengthException("output buffer too short"); - } - } - - int resultLen = 0; - int gapLen = buf.length - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += cipher.processBlock(buf, 0, out, outOff); - - bufOff = 0; - len -= gapLen; - inOff += gapLen; - - while (len > buf.length) - { - resultLen += cipher.processBlock(in, inOff, out, outOff + resultLen); - - len -= blockSize; - inOff += blockSize; - } - } - - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - - return resultLen; - } - - /** - * Process the last block in the buffer. If the buffer is currently - * full and padding needs to be added a call to doFinal will produce - * 2 * getBlockSize() bytes. - * - * @param out the array the block currently being held is copied into. - * @param outOff the offset at which the copying starts. - * @return the number of output bytes copied to out. - * @exception DataLengthException if there is insufficient space in out for - * the output or we are decrypting and the input is not block size aligned. - * @exception IllegalStateException if the underlying cipher is not - * initialised. - * @exception InvalidCipherTextException if padding is expected and not found. - */ - public int doFinal( - byte[] out, - int outOff) - throws DataLengthException, IllegalStateException, InvalidCipherTextException - { - int blockSize = cipher.getBlockSize(); - int resultLen = 0; - - if (forEncryption) - { - if (bufOff == blockSize) - { - if ((outOff + 2 * blockSize) > out.length) - { - reset(); - - throw new DataLengthException("output buffer too short"); - } - - resultLen = cipher.processBlock(buf, 0, out, outOff); - bufOff = 0; - } - - padding.addPadding(buf, bufOff); - - resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); - - reset(); - } - else - { - if (bufOff == blockSize) - { - resultLen = cipher.processBlock(buf, 0, buf, 0); - bufOff = 0; - } - else - { - reset(); - - throw new DataLengthException("last block incomplete in decryption"); - } - - try - { - resultLen -= padding.padCount(buf); - - System.arraycopy(buf, 0, out, outOff, resultLen); - } - finally - { - reset(); - } - } - - return resultLen; - } -} diff --git a/src/org/bouncycastle/crypto/paddings/TBCPadding.java b/src/org/bouncycastle/crypto/paddings/TBCPadding.java deleted file mode 100644 index eddd5ad..0000000 --- a/src/org/bouncycastle/crypto/paddings/TBCPadding.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A padder that adds Trailing-Bit-Compliment padding to a block. - *

        - * This padding pads the block out with the compliment of the last bit - * of the plain text. - *

        - */ -public class TBCPadding - implements BlockCipherPadding -{ - /** - * Initialise the padder. - * - * @param random - a SecureRandom if available. - */ - public void init(SecureRandom random) - throws IllegalArgumentException - { - // nothing to do. - } - - /** - * Return the name of the algorithm the padder implements. - * - * @return the name of the algorithm the padder implements. - */ - public String getPaddingName() - { - return "TBC"; - } - - /** - * add the pad bytes to the passed in block, returning the - * number of bytes added. - *

        - * Note: this assumes that the last block of plain text is always - * passed to it inside in. i.e. if inOff is zero, indicating the - * entire block is to be overwritten with padding the value of in - * should be the same as the last block of plain text. - *

        - */ - public int addPadding( - byte[] in, - int inOff) - { - int count = in.length - inOff; - byte code; - - if (inOff > 0) - { - code = (byte)((in[inOff - 1] & 0x01) == 0 ? 0xff : 0x00); - } - else - { - code = (byte)((in[in.length - 1] & 0x01) == 0 ? 0xff : 0x00); - } - - while (inOff < in.length) - { - in[inOff] = code; - inOff++; - } - - return count; - } - - /** - * return the number of pad bytes present in the block. - */ - public int padCount(byte[] in) - throws InvalidCipherTextException - { - byte code = in[in.length - 1]; - - int index = in.length - 1; - while (index > 0 && in[index - 1] == code) - { - index--; - } - - return in.length - index; - } -} diff --git a/src/org/bouncycastle/crypto/paddings/X923Padding.java b/src/org/bouncycastle/crypto/paddings/X923Padding.java deleted file mode 100644 index d213220..0000000 --- a/src/org/bouncycastle/crypto/paddings/X923Padding.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A padder that adds X9.23 padding to a block - if a SecureRandom is - * passed in random padding is assumed, otherwise padding with zeros is used. - */ -public class X923Padding - implements BlockCipherPadding -{ - SecureRandom random = null; - - /** - * Initialise the padder. - * - * @param random a SecureRandom if one is available. - */ - public void init(SecureRandom random) - throws IllegalArgumentException - { - this.random = random; - } - - /** - * Return the name of the algorithm the padder implements. - * - * @return the name of the algorithm the padder implements. - */ - public String getPaddingName() - { - return "X9.23"; - } - - /** - * add the pad bytes to the passed in block, returning the - * number of bytes added. - */ - public int addPadding( - byte[] in, - int inOff) - { - byte code = (byte)(in.length - inOff); - - while (inOff < in.length - 1) - { - if (random == null) - { - in[inOff] = 0; - } - else - { - in[inOff] = (byte)random.nextInt(); - } - inOff++; - } - - in[inOff] = code; - - return code; - } - - /** - * return the number of pad bytes present in the block. - */ - public int padCount(byte[] in) - throws InvalidCipherTextException - { - int count = in[in.length - 1] & 0xff; - - if (count > in.length) - { - throw new InvalidCipherTextException("pad block corrupted"); - } - - return count; - } -} diff --git a/src/org/bouncycastle/crypto/paddings/ZeroBytePadding.java b/src/org/bouncycastle/crypto/paddings/ZeroBytePadding.java deleted file mode 100644 index 4ba8da5..0000000 --- a/src/org/bouncycastle/crypto/paddings/ZeroBytePadding.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.bouncycastle.crypto.paddings; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.InvalidCipherTextException; - -/** - * A padder that adds NULL byte padding to a block. - */ -public class ZeroBytePadding - implements BlockCipherPadding -{ - /** - * Initialise the padder. - * - * @param random - a SecureRandom if available. - */ - public void init(SecureRandom random) - throws IllegalArgumentException - { - // nothing to do. - } - - /** - * Return the name of the algorithm the padder implements. - * - * @return the name of the algorithm the padder implements. - */ - public String getPaddingName() - { - return "ZeroByte"; - } - - /** - * add the pad bytes to the passed in block, returning the - * number of bytes added. - */ - public int addPadding( - byte[] in, - int inOff) - { - int added = (in.length - inOff); - - while (inOff < in.length) - { - in[inOff] = (byte) 0; - inOff++; - } - - return added; - } - - /** - * return the number of pad bytes present in the block. - */ - public int padCount(byte[] in) - throws InvalidCipherTextException - { - int count = in.length; - - while (count > 0) - { - if (in[count - 1] != 0) - { - break; - } - - count--; - } - - return in.length - count; - } -} diff --git a/src/org/bouncycastle/crypto/paddings/package.html b/src/org/bouncycastle/crypto/paddings/package.html deleted file mode 100644 index 2b82e60..0000000 --- a/src/org/bouncycastle/crypto/paddings/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Paddings for symmetric ciphers. - - diff --git a/src/org/bouncycastle/crypto/params/AEADParameters.java b/src/org/bouncycastle/crypto/params/AEADParameters.java deleted file mode 100644 index b60ef40..0000000 --- a/src/org/bouncycastle/crypto/params/AEADParameters.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class AEADParameters - implements CipherParameters -{ - private byte[] associatedText; - private byte[] nonce; - private KeyParameter key; - private int macSize; - - /** - * Base constructor. - * - * @param key key to be used by underlying cipher - * @param macSize macSize in bits - * @param nonce nonce to be used - * @param associatedText associated text, if any - */ - public AEADParameters(KeyParameter key, int macSize, byte[] nonce, byte[] associatedText) - { - this.key = key; - this.nonce = nonce; - this.macSize = macSize; - this.associatedText = associatedText; - } - - public KeyParameter getKey() - { - return key; - } - - public int getMacSize() - { - return macSize; - } - - public byte[] getAssociatedText() - { - return associatedText; - } - - public byte[] getNonce() - { - return nonce; - } -} diff --git a/src/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java b/src/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java deleted file mode 100644 index 03ba725..0000000 --- a/src/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class AsymmetricKeyParameter - implements CipherParameters -{ - boolean privateKey; - - public AsymmetricKeyParameter( - boolean privateKey) - { - this.privateKey = privateKey; - } - - public boolean isPrivate() - { - return privateKey; - } -} diff --git a/src/org/bouncycastle/crypto/params/CCMParameters.java b/src/org/bouncycastle/crypto/params/CCMParameters.java deleted file mode 100644 index 520062c..0000000 --- a/src/org/bouncycastle/crypto/params/CCMParameters.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.crypto.params; - -public class CCMParameters - extends AEADParameters -{ - /** - * Base constructor. - * - * @param key key to be used by underlying cipher - * @param macSize macSize in bits - * @param nonce nonce to be used - * @param associatedText associated text, if any - */ - public CCMParameters(KeyParameter key, int macSize, byte[] nonce, byte[] associatedText) - { - super(key, macSize, nonce, associatedText); - } -} diff --git a/src/org/bouncycastle/crypto/params/DESParameters.java b/src/org/bouncycastle/crypto/params/DESParameters.java deleted file mode 100644 index 5bee360..0000000 --- a/src/org/bouncycastle/crypto/params/DESParameters.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.bouncycastle.crypto.params; - -public class DESParameters - extends KeyParameter -{ - public DESParameters( - byte[] key) - { - super(key); - - if (isWeakKey(key, 0)) - { - throw new IllegalArgumentException("attempt to create weak DES key"); - } - } - - /* - * DES Key length in bytes. - */ - static public final int DES_KEY_LENGTH = 8; - - /* - * Table of weak and semi-weak keys taken from Schneier pp281 - */ - static private final int N_DES_WEAK_KEYS = 16; - - static private byte[] DES_weak_keys = - { - /* weak keys */ - (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01, (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01, - (byte)0x1f,(byte)0x1f,(byte)0x1f,(byte)0x1f, (byte)0x0e,(byte)0x0e,(byte)0x0e,(byte)0x0e, - (byte)0xe0,(byte)0xe0,(byte)0xe0,(byte)0xe0, (byte)0xf1,(byte)0xf1,(byte)0xf1,(byte)0xf1, - (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe, (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe, - - /* semi-weak keys */ - (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe, (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe, - (byte)0x1f,(byte)0xe0,(byte)0x1f,(byte)0xe0, (byte)0x0e,(byte)0xf1,(byte)0x0e,(byte)0xf1, - (byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xe0, (byte)0x01,(byte)0xf1,(byte)0x01,(byte)0xf1, - (byte)0x1f,(byte)0xfe,(byte)0x1f,(byte)0xfe, (byte)0x0e,(byte)0xfe,(byte)0x0e,(byte)0xfe, - (byte)0x01,(byte)0x1f,(byte)0x01,(byte)0x1f, (byte)0x01,(byte)0x0e,(byte)0x01,(byte)0x0e, - (byte)0xe0,(byte)0xfe,(byte)0xe0,(byte)0xfe, (byte)0xf1,(byte)0xfe,(byte)0xf1,(byte)0xfe, - (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01, (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01, - (byte)0xe0,(byte)0x1f,(byte)0xe0,(byte)0x1f, (byte)0xf1,(byte)0x0e,(byte)0xf1,(byte)0x0e, - (byte)0xe0,(byte)0x01,(byte)0xe0,(byte)0x01, (byte)0xf1,(byte)0x01,(byte)0xf1,(byte)0x01, - (byte)0xfe,(byte)0x1f,(byte)0xfe,(byte)0x1f, (byte)0xfe,(byte)0x0e,(byte)0xfe,(byte)0x0e, - (byte)0x1f,(byte)0x01,(byte)0x1f,(byte)0x01, (byte)0x0e,(byte)0x01,(byte)0x0e,(byte)0x01, - (byte)0xfe,(byte)0xe0,(byte)0xfe,(byte)0xe0, (byte)0xfe,(byte)0xf1,(byte)0xfe,(byte)0xf1 - }; - - /** - * DES has 16 weak keys. This method will check - * if the given DES key material is weak or semi-weak. - * Key material that is too short is regarded as weak. - *

        - * See "Applied - * Cryptography" by Bruce Schneier for more information. - * - * @return true if the given DES key material is weak or semi-weak, - * false otherwise. - */ - public static boolean isWeakKey( - byte[] key, - int offset) - { - if (key.length - offset < DES_KEY_LENGTH) - { - throw new IllegalArgumentException("key material too short."); - } - - nextkey: for (int i = 0; i < N_DES_WEAK_KEYS; i++) - { - for (int j = 0; j < DES_KEY_LENGTH; j++) - { - if (key[j + offset] != DES_weak_keys[i * DES_KEY_LENGTH + j]) - { - continue nextkey; - } - } - - return true; - } - return false; - } - - /** - * DES Keys use the LSB as the odd parity bit. This can - * be used to check for corrupt keys. - * - * @param bytes the byte array to set the parity on. - */ - public static void setOddParity( - byte[] bytes) - { - for (int i = 0; i < bytes.length; i++) - { - int b = bytes[i]; - bytes[i] = (byte)((b & 0xfe) | - ((((b >> 1) ^ - (b >> 2) ^ - (b >> 3) ^ - (b >> 4) ^ - (b >> 5) ^ - (b >> 6) ^ - (b >> 7)) ^ 0x01) & 0x01)); - } - } -} diff --git a/src/org/bouncycastle/crypto/params/DESedeParameters.java b/src/org/bouncycastle/crypto/params/DESedeParameters.java deleted file mode 100644 index 3a4bbfc..0000000 --- a/src/org/bouncycastle/crypto/params/DESedeParameters.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bouncycastle.crypto.params; - -public class DESedeParameters - extends DESParameters -{ - /* - * DES-EDE Key length in bytes. - */ - static public final int DES_EDE_KEY_LENGTH = 24; - - public DESedeParameters( - byte[] key) - { - super(key); - - if (isWeakKey(key, 0, key.length)) - { - throw new IllegalArgumentException("attempt to create weak DESede key"); - } - } - - /** - * return true if the passed in key is a DES-EDE weak key. - * - * @param key bytes making up the key - * @param offset offset into the byte array the key starts at - * @param length number of bytes making up the key - */ - public static boolean isWeakKey( - byte[] key, - int offset, - int length) - { - for (int i = offset; i < length; i += DES_KEY_LENGTH) - { - if (DESParameters.isWeakKey(key, i)) - { - return true; - } - } - - return false; - } - - /** - * return true if the passed in key is a DES-EDE weak key. - * - * @param key bytes making up the key - * @param offset offset into the byte array the key starts at - */ - public static boolean isWeakKey( - byte[] key, - int offset) - { - return isWeakKey(key, offset, key.length - offset); - } -} diff --git a/src/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java b/src/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java deleted file mode 100644 index 873f06e..0000000 --- a/src/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.KeyGenerationParameters; - -public class DHKeyGenerationParameters - extends KeyGenerationParameters -{ - private DHParameters params; - - public DHKeyGenerationParameters( - SecureRandom random, - DHParameters params) - { - super(random, getStrength(params)); - - this.params = params; - } - - public DHParameters getParameters() - { - return params; - } - - static int getStrength(DHParameters params) - { - return params.getL() != 0 ? params.getL() : params.getP().bitLength(); - } -} diff --git a/src/org/bouncycastle/crypto/params/DHKeyParameters.java b/src/org/bouncycastle/crypto/params/DHKeyParameters.java deleted file mode 100644 index e686f35..0000000 --- a/src/org/bouncycastle/crypto/params/DHKeyParameters.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.bouncycastle.crypto.params; - - -public class DHKeyParameters - extends AsymmetricKeyParameter -{ - private DHParameters params; - - protected DHKeyParameters( - boolean isPrivate, - DHParameters params) - { - super(isPrivate); - - this.params = params; - } - - public DHParameters getParameters() - { - return params; - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof DHKeyParameters)) - { - return false; - } - - DHKeyParameters dhKey = (DHKeyParameters)obj; - - if (params == null) - { - return dhKey.getParameters() == null; - } - else - { - return params.equals(dhKey.getParameters()); - } - } - - public int hashCode() - { - int code = isPrivate() ? 0 : 1; - - if (params != null) - { - code ^= params.hashCode(); - } - - return code; - } -} diff --git a/src/org/bouncycastle/crypto/params/DHParameters.java b/src/org/bouncycastle/crypto/params/DHParameters.java deleted file mode 100644 index 0917fbf..0000000 --- a/src/org/bouncycastle/crypto/params/DHParameters.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.CipherParameters; - -public class DHParameters - implements CipherParameters -{ - private static final int DEFAULT_MINIMUM_LENGTH = 160; - - // not final due to compiler bug in "simpler" JDKs - private BigInteger g; - private BigInteger p; - private BigInteger q; - private BigInteger j; - private int m; - private int l; - private DHValidationParameters validation; - - private static int getDefaultMParam( - int lParam) - { - if (lParam == 0) - { - return DEFAULT_MINIMUM_LENGTH; - } - - return lParam < DEFAULT_MINIMUM_LENGTH ? lParam : DEFAULT_MINIMUM_LENGTH; - } - - public DHParameters( - BigInteger p, - BigInteger g) - { - this(p, g, null, 0); - } - - public DHParameters( - BigInteger p, - BigInteger g, - BigInteger q) - { - this(p, g, q, 0); - } - - public DHParameters( - BigInteger p, - BigInteger g, - BigInteger q, - int l) - { - this(p, g, q, getDefaultMParam(l), l, null, null); - } - - public DHParameters( - BigInteger p, - BigInteger g, - BigInteger q, - int m, - int l) - { - this(p, g, q, m, l, null, null); - } - - public DHParameters( - BigInteger p, - BigInteger g, - BigInteger q, - BigInteger j, - DHValidationParameters validation) - { - this(p, g, q, DEFAULT_MINIMUM_LENGTH, 0, j, validation); - } - - public DHParameters( - BigInteger p, - BigInteger g, - BigInteger q, - int m, - int l, - BigInteger j, - DHValidationParameters validation) - { - if (l != 0) - { - BigInteger bigL = BigInteger.valueOf(2L ^ (l - 1)); - if (bigL.compareTo(p) == 1) - { - throw new IllegalArgumentException("when l value specified, it must satisfy 2^(l-1) <= p"); - } - if (l < m) - { - throw new IllegalArgumentException("when l value specified, it may not be less than m value"); - } - } - - this.g = g; - this.p = p; - this.q = q; - this.m = m; - this.l = l; - this.j = j; - this.validation = validation; - } - - public BigInteger getP() - { - return p; - } - - public BigInteger getG() - { - return g; - } - - public BigInteger getQ() - { - return q; - } - - /** - * Return the subgroup factor J. - * - * @return subgroup factor - */ - public BigInteger getJ() - { - return j; - } - - /** - * Return the minimum length of the private value. - * - * @return the minimum length of the private value in bits. - */ - public int getM() - { - return m; - } - - /** - * Return the private value length in bits - if set, zero otherwise - * - * @return the private value length in bits, zero otherwise. - */ - public int getL() - { - return l; - } - - public DHValidationParameters getValidationParameters() - { - return validation; - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof DHParameters)) - { - return false; - } - - DHParameters pm = (DHParameters)obj; - - if (this.getQ() != null) - { - if (!this.getQ().equals(pm.getQ())) - { - return false; - } - } - else - { - if (pm.getQ() != null) - { - return false; - } - } - - return pm.getP().equals(p) && pm.getG().equals(g); - } - - public int hashCode() - { - return getP().hashCode() ^ getG().hashCode() ^ (getQ() != null ? getQ().hashCode() : 0); - } -} diff --git a/src/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java b/src/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java deleted file mode 100644 index dbd7f7d..0000000 --- a/src/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class DHPrivateKeyParameters - extends DHKeyParameters -{ - private BigInteger x; - - public DHPrivateKeyParameters( - BigInteger x, - DHParameters params) - { - super(true, params); - - this.x = x; - } - - public BigInteger getX() - { - return x; - } - - public int hashCode() - { - return x.hashCode() ^ super.hashCode(); - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof DHPrivateKeyParameters)) - { - return false; - } - - DHPrivateKeyParameters other = (DHPrivateKeyParameters)obj; - - return other.getX().equals(this.x) && super.equals(obj); - } -} diff --git a/src/org/bouncycastle/crypto/params/DHPublicKeyParameters.java b/src/org/bouncycastle/crypto/params/DHPublicKeyParameters.java deleted file mode 100644 index dc0e258..0000000 --- a/src/org/bouncycastle/crypto/params/DHPublicKeyParameters.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class DHPublicKeyParameters - extends DHKeyParameters -{ - private BigInteger y; - - public DHPublicKeyParameters( - BigInteger y, - DHParameters params) - { - super(false, params); - - this.y = y; - } - - public BigInteger getY() - { - return y; - } - - public int hashCode() - { - return y.hashCode() ^ super.hashCode(); - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof DHPublicKeyParameters)) - { - return false; - } - - DHPublicKeyParameters other = (DHPublicKeyParameters)obj; - - return other.getY().equals(y) && super.equals(obj); - } -} diff --git a/src/org/bouncycastle/crypto/params/DHValidationParameters.java b/src/org/bouncycastle/crypto/params/DHValidationParameters.java deleted file mode 100644 index b22f7a0..0000000 --- a/src/org/bouncycastle/crypto/params/DHValidationParameters.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.util.Arrays; - -public class DHValidationParameters -{ - private byte[] seed; - private int counter; - - public DHValidationParameters( - byte[] seed, - int counter) - { - this.seed = seed; - this.counter = counter; - } - - public int getCounter() - { - return counter; - } - - public byte[] getSeed() - { - return seed; - } - - public boolean equals( - Object o) - { - if (!(o instanceof DHValidationParameters)) - { - return false; - } - - DHValidationParameters other = (DHValidationParameters)o; - - if (other.counter != this.counter) - { - return false; - } - - return Arrays.areEqual(this.seed, other.seed); - } - - public int hashCode() - { - return counter ^ Arrays.hashCode(seed); - } -} diff --git a/src/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java b/src/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java deleted file mode 100644 index f212739..0000000 --- a/src/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.KeyGenerationParameters; - -public class DSAKeyGenerationParameters - extends KeyGenerationParameters -{ - private DSAParameters params; - - public DSAKeyGenerationParameters( - SecureRandom random, - DSAParameters params) - { - super(random, params.getP().bitLength() - 1); - - this.params = params; - } - - public DSAParameters getParameters() - { - return params; - } -} diff --git a/src/org/bouncycastle/crypto/params/DSAKeyParameters.java b/src/org/bouncycastle/crypto/params/DSAKeyParameters.java deleted file mode 100644 index 11bb9d9..0000000 --- a/src/org/bouncycastle/crypto/params/DSAKeyParameters.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bouncycastle.crypto.params; - -public class DSAKeyParameters - extends AsymmetricKeyParameter -{ - private DSAParameters params; - - public DSAKeyParameters( - boolean isPrivate, - DSAParameters params) - { - super(isPrivate); - - this.params = params; - } - - public DSAParameters getParameters() - { - return params; - } -} diff --git a/src/org/bouncycastle/crypto/params/DSAParameters.java b/src/org/bouncycastle/crypto/params/DSAParameters.java deleted file mode 100644 index d79372f..0000000 --- a/src/org/bouncycastle/crypto/params/DSAParameters.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.CipherParameters; - -public class DSAParameters - implements CipherParameters -{ - private BigInteger g; - private BigInteger q; - private BigInteger p; - private DSAValidationParameters validation; - - public DSAParameters( - BigInteger p, - BigInteger q, - BigInteger g) - { - this.g = g; - this.p = p; - this.q = q; - } - - public DSAParameters( - BigInteger p, - BigInteger q, - BigInteger g, - DSAValidationParameters params) - { - this.g = g; - this.p = p; - this.q = q; - this.validation = params; - } - - public BigInteger getP() - { - return p; - } - - public BigInteger getQ() - { - return q; - } - - public BigInteger getG() - { - return g; - } - - public DSAValidationParameters getValidationParameters() - { - return validation; - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof DSAParameters)) - { - return false; - } - - DSAParameters pm = (DSAParameters)obj; - - return (pm.getP().equals(p) && pm.getQ().equals(q) && pm.getG().equals(g)); - } - - public int hashCode() - { - return getP().hashCode() ^ getQ().hashCode() ^ getG().hashCode(); - } -} diff --git a/src/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java b/src/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java deleted file mode 100644 index b985422..0000000 --- a/src/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class DSAPrivateKeyParameters - extends DSAKeyParameters -{ - private BigInteger x; - - public DSAPrivateKeyParameters( - BigInteger x, - DSAParameters params) - { - super(true, params); - - this.x = x; - } - - public BigInteger getX() - { - return x; - } -} diff --git a/src/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java b/src/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java deleted file mode 100644 index 238b083..0000000 --- a/src/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class DSAPublicKeyParameters - extends DSAKeyParameters -{ - private BigInteger y; - - public DSAPublicKeyParameters( - BigInteger y, - DSAParameters params) - { - super(false, params); - - this.y = y; - } - - public BigInteger getY() - { - return y; - } -} diff --git a/src/org/bouncycastle/crypto/params/DSAValidationParameters.java b/src/org/bouncycastle/crypto/params/DSAValidationParameters.java deleted file mode 100644 index 1cc4b93..0000000 --- a/src/org/bouncycastle/crypto/params/DSAValidationParameters.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.util.Arrays; - -public class DSAValidationParameters -{ - private byte[] seed; - private int counter; - - public DSAValidationParameters( - byte[] seed, - int counter) - { - this.seed = seed; - this.counter = counter; - } - - public int getCounter() - { - return counter; - } - - public byte[] getSeed() - { - return seed; - } - - public int hashCode() - { - return counter ^ Arrays.hashCode(seed); - } - - public boolean equals( - Object o) - { - if (!(o instanceof DSAValidationParameters)) - { - return false; - } - - DSAValidationParameters other = (DSAValidationParameters)o; - - if (other.counter != this.counter) - { - return false; - } - - return Arrays.areEqual(this.seed, other.seed); - } -} diff --git a/src/org/bouncycastle/crypto/params/ECDomainParameters.java b/src/org/bouncycastle/crypto/params/ECDomainParameters.java deleted file mode 100644 index e6bae75..0000000 --- a/src/org/bouncycastle/crypto/params/ECDomainParameters.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -import org.bouncycastle.math.ec.ECConstants; -import org.bouncycastle.math.ec.ECCurve; -import org.bouncycastle.math.ec.ECPoint; - -public class ECDomainParameters - implements ECConstants -{ - ECCurve curve; - byte[] seed; - ECPoint G; - BigInteger n; - BigInteger h; - - public ECDomainParameters( - ECCurve curve, - ECPoint G, - BigInteger n) - { - this.curve = curve; - this.G = G; - this.n = n; - this.h = ONE; - this.seed = null; - } - - public ECDomainParameters( - ECCurve curve, - ECPoint G, - BigInteger n, - BigInteger h) - { - this.curve = curve; - this.G = G; - this.n = n; - this.h = h; - this.seed = null; - } - - public ECDomainParameters( - ECCurve curve, - ECPoint G, - BigInteger n, - BigInteger h, - byte[] seed) - { - this.curve = curve; - this.G = G; - this.n = n; - this.h = h; - this.seed = seed; - } - - public ECCurve getCurve() - { - return curve; - } - - public ECPoint getG() - { - return G; - } - - public BigInteger getN() - { - return n; - } - - public BigInteger getH() - { - return h; - } - - public byte[] getSeed() - { - return seed; - } -} diff --git a/src/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java b/src/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java deleted file mode 100644 index eaa5c0a..0000000 --- a/src/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.KeyGenerationParameters; - -public class ECKeyGenerationParameters - extends KeyGenerationParameters -{ - private ECDomainParameters domainParams; - - public ECKeyGenerationParameters( - ECDomainParameters domainParams, - SecureRandom random) - { - super(random, domainParams.getN().bitLength()); - - this.domainParams = domainParams; - } - - public ECDomainParameters getDomainParameters() - { - return domainParams; - } -} diff --git a/src/org/bouncycastle/crypto/params/ECKeyParameters.java b/src/org/bouncycastle/crypto/params/ECKeyParameters.java deleted file mode 100644 index 19825c5..0000000 --- a/src/org/bouncycastle/crypto/params/ECKeyParameters.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bouncycastle.crypto.params; - -public class ECKeyParameters - extends AsymmetricKeyParameter -{ - ECDomainParameters params; - - protected ECKeyParameters( - boolean isPrivate, - ECDomainParameters params) - { - super(isPrivate); - - this.params = params; - } - - public ECDomainParameters getParameters() - { - return params; - } -} diff --git a/src/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java b/src/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java deleted file mode 100644 index e8501d6..0000000 --- a/src/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class ECPrivateKeyParameters - extends ECKeyParameters -{ - BigInteger d; - - public ECPrivateKeyParameters( - BigInteger d, - ECDomainParameters params) - { - super(true, params); - this.d = d; - } - - public BigInteger getD() - { - return d; - } -} diff --git a/src/org/bouncycastle/crypto/params/ECPublicKeyParameters.java b/src/org/bouncycastle/crypto/params/ECPublicKeyParameters.java deleted file mode 100644 index 5fbea19..0000000 --- a/src/org/bouncycastle/crypto/params/ECPublicKeyParameters.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.math.ec.ECPoint; - -public class ECPublicKeyParameters - extends ECKeyParameters -{ - ECPoint Q; - - public ECPublicKeyParameters( - ECPoint Q, - ECDomainParameters params) - { - super(false, params); - this.Q = Q; - } - - public ECPoint getQ() - { - return Q; - } -} diff --git a/src/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java b/src/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java deleted file mode 100644 index fef0fb5..0000000 --- a/src/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.KeyGenerationParameters; - -public class ElGamalKeyGenerationParameters - extends KeyGenerationParameters -{ - private ElGamalParameters params; - - public ElGamalKeyGenerationParameters( - SecureRandom random, - ElGamalParameters params) - { - super(random, getStrength(params)); - - this.params = params; - } - - public ElGamalParameters getParameters() - { - return params; - } - - static int getStrength(ElGamalParameters params) - { - return params.getL() != 0 ? params.getL() : params.getP().bitLength(); - } -} diff --git a/src/org/bouncycastle/crypto/params/ElGamalKeyParameters.java b/src/org/bouncycastle/crypto/params/ElGamalKeyParameters.java deleted file mode 100644 index 7250693..0000000 --- a/src/org/bouncycastle/crypto/params/ElGamalKeyParameters.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bouncycastle.crypto.params; - - -public class ElGamalKeyParameters - extends AsymmetricKeyParameter -{ - private ElGamalParameters params; - - protected ElGamalKeyParameters( - boolean isPrivate, - ElGamalParameters params) - { - super(isPrivate); - - this.params = params; - } - - public ElGamalParameters getParameters() - { - return params; - } - - public int hashCode() - { - return (params != null) ? params.hashCode() : 0; - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof ElGamalKeyParameters)) - { - return false; - } - - ElGamalKeyParameters dhKey = (ElGamalKeyParameters)obj; - - if (params == null) - { - return dhKey.getParameters() == null; - } - else - { - return params.equals(dhKey.getParameters()); - } - } -} diff --git a/src/org/bouncycastle/crypto/params/ElGamalParameters.java b/src/org/bouncycastle/crypto/params/ElGamalParameters.java deleted file mode 100644 index 512dec6..0000000 --- a/src/org/bouncycastle/crypto/params/ElGamalParameters.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.CipherParameters; - -public class ElGamalParameters - implements CipherParameters -{ - private BigInteger g; - private BigInteger p; - private int l; - - public ElGamalParameters( - BigInteger p, - BigInteger g) - { - this(p, g, 0); - } - - public ElGamalParameters( - BigInteger p, - BigInteger g, - int l) - { - this.g = g; - this.p = p; - this.l = l; - } - - public BigInteger getP() - { - return p; - } - - /** - * return the generator - g - */ - public BigInteger getG() - { - return g; - } - - /** - * return private value limit - l - */ - public int getL() - { - return l; - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof ElGamalParameters)) - { - return false; - } - - ElGamalParameters pm = (ElGamalParameters)obj; - - return pm.getP().equals(p) && pm.getG().equals(g) && pm.getL() == l; - } - - public int hashCode() - { - return (getP().hashCode() ^ getG().hashCode()) + l; - } -} diff --git a/src/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java b/src/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java deleted file mode 100644 index 46df30e..0000000 --- a/src/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class ElGamalPrivateKeyParameters - extends ElGamalKeyParameters -{ - private BigInteger x; - - public ElGamalPrivateKeyParameters( - BigInteger x, - ElGamalParameters params) - { - super(true, params); - - this.x = x; - } - - public BigInteger getX() - { - return x; - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof ElGamalPrivateKeyParameters)) - { - return false; - } - - ElGamalPrivateKeyParameters pKey = (ElGamalPrivateKeyParameters)obj; - - if (!pKey.getX().equals(x)) - { - return false; - } - - return super.equals(obj); - } - - public int hashCode() - { - return getX().hashCode(); - } -} diff --git a/src/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java b/src/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java deleted file mode 100644 index b06b0f5..0000000 --- a/src/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class ElGamalPublicKeyParameters - extends ElGamalKeyParameters -{ - private BigInteger y; - - public ElGamalPublicKeyParameters( - BigInteger y, - ElGamalParameters params) - { - super(false, params); - - this.y = y; - } - - public BigInteger getY() - { - return y; - } - - public int hashCode() - { - return y.hashCode() ^ super.hashCode(); - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof ElGamalPublicKeyParameters)) - { - return false; - } - - ElGamalPublicKeyParameters other = (ElGamalPublicKeyParameters)obj; - - return other.getY().equals(y) && super.equals(obj); - } -} diff --git a/src/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java b/src/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java deleted file mode 100644 index 0dc6f10..0000000 --- a/src/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.KeyGenerationParameters; - -import javabc.SecureRandom; - -public class GOST3410KeyGenerationParameters - extends KeyGenerationParameters -{ - private GOST3410Parameters params; - - public GOST3410KeyGenerationParameters( - SecureRandom random, - GOST3410Parameters params) - { - super(random, params.getP().bitLength() - 1); - - this.params = params; - } - - public GOST3410Parameters getParameters() - { - return params; - } -} diff --git a/src/org/bouncycastle/crypto/params/GOST3410KeyParameters.java b/src/org/bouncycastle/crypto/params/GOST3410KeyParameters.java deleted file mode 100644 index 6716924..0000000 --- a/src/org/bouncycastle/crypto/params/GOST3410KeyParameters.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bouncycastle.crypto.params; - -public class GOST3410KeyParameters - extends AsymmetricKeyParameter -{ - private GOST3410Parameters params; - - public GOST3410KeyParameters( - boolean isPrivate, - GOST3410Parameters params) - { - super(isPrivate); - - this.params = params; - } - - public GOST3410Parameters getParameters() - { - return params; - } -} diff --git a/src/org/bouncycastle/crypto/params/GOST3410Parameters.java b/src/org/bouncycastle/crypto/params/GOST3410Parameters.java deleted file mode 100644 index d55cad5..0000000 --- a/src/org/bouncycastle/crypto/params/GOST3410Parameters.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -import javabc.BigInteger; - -public class GOST3410Parameters - implements CipherParameters -{ - private BigInteger p; - private BigInteger q; - private BigInteger a; - private GOST3410ValidationParameters validation; - - public GOST3410Parameters( - BigInteger p, - BigInteger q, - BigInteger a) - { - this.p = p; - this.q = q; - this.a = a; - } - - public GOST3410Parameters( - BigInteger p, - BigInteger q, - BigInteger a, - GOST3410ValidationParameters params) - { - this.a = a; - this.p = p; - this.q = q; - this.validation = params; - } - - public BigInteger getP() - { - return p; - } - - public BigInteger getQ() - { - return q; - } - - public BigInteger getA() - { - return a; - } - - public GOST3410ValidationParameters getValidationParameters() - { - return validation; - } - - public int hashCode() - { - return p.hashCode() ^ q.hashCode() ^ a.hashCode(); - } - - public boolean equals( - Object obj) - { - if (!(obj instanceof GOST3410Parameters)) - { - return false; - } - - GOST3410Parameters pm = (GOST3410Parameters)obj; - - return (pm.getP().equals(p) && pm.getQ().equals(q) && pm.getA().equals(a)); - } -} diff --git a/src/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java b/src/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java deleted file mode 100644 index df9f6f7..0000000 --- a/src/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class GOST3410PrivateKeyParameters - extends GOST3410KeyParameters -{ - private BigInteger x; - - public GOST3410PrivateKeyParameters( - BigInteger x, - GOST3410Parameters params) - { - super(true, params); - - this.x = x; - } - - public BigInteger getX() - { - return x; - } -} diff --git a/src/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java b/src/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java deleted file mode 100644 index 4ea66df..0000000 --- a/src/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class GOST3410PublicKeyParameters - extends GOST3410KeyParameters -{ - private BigInteger y; - - public GOST3410PublicKeyParameters( - BigInteger y, - GOST3410Parameters params) - { - super(false, params); - - this.y = y; - } - - public BigInteger getY() - { - return y; - } -} diff --git a/src/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java b/src/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java deleted file mode 100644 index c2a4fb5..0000000 --- a/src/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.bouncycastle.crypto.params; - -public class GOST3410ValidationParameters -{ - private int x0; - private int c; - private long x0L; - private long cL; - - - public GOST3410ValidationParameters( - int x0, - int c) - { - this.x0 = x0; - this.c = c; - } - - public GOST3410ValidationParameters( - long x0L, - long cL) - { - this.x0L = x0L; - this.cL = cL; - } - - public int getC() - { - return c; - } - - public int getX0() - { - return x0; - } - - public long getCL() - { - return cL; - } - - public long getX0L() - { - return x0L; - } - - public boolean equals( - Object o) - { - if (!(o instanceof GOST3410ValidationParameters)) - { - return false; - } - - GOST3410ValidationParameters other = (GOST3410ValidationParameters)o; - - if (other.c != this.c) - { - return false; - } - - if (other.x0 != this.x0) - { - return false; - } - - if (other.cL != this.cL) - { - return false; - } - - if (other.x0L != this.x0L) - { - return false; - } - - return true; - } - - public int hashCode() - { - return x0 ^ c ^ (int) x0L ^ (int)(x0L >> 32) ^ (int) cL ^ (int)(cL >> 32); - } -} diff --git a/src/org/bouncycastle/crypto/params/IESParameters.java b/src/org/bouncycastle/crypto/params/IESParameters.java deleted file mode 100644 index 0600b34..0000000 --- a/src/org/bouncycastle/crypto/params/IESParameters.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -/** - * parameters for using an integrated cipher in stream mode. - */ -public class IESParameters - implements CipherParameters -{ - private byte[] derivation; - private byte[] encoding; - private int macKeySize; - - /** - * @param derivation the derivation parameter for the KDF function. - * @param encoding the encoding parameter for the KDF function. - * @param macKeySize the size of the MAC key (in bits). - */ - public IESParameters( - byte[] derivation, - byte[] encoding, - int macKeySize) - { - this.derivation = derivation; - this.encoding = encoding; - this.macKeySize = macKeySize; - } - - public byte[] getDerivationV() - { - return derivation; - } - - public byte[] getEncodingV() - { - return encoding; - } - - public int getMacKeySize() - { - return macKeySize; - } -} diff --git a/src/org/bouncycastle/crypto/params/IESWithCipherParameters.java b/src/org/bouncycastle/crypto/params/IESWithCipherParameters.java deleted file mode 100644 index ef61b2c..0000000 --- a/src/org/bouncycastle/crypto/params/IESWithCipherParameters.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bouncycastle.crypto.params; - - -public class IESWithCipherParameters - extends IESParameters -{ - private int cipherKeySize; - - /** - * @param derivation the derivation parameter for the KDF function. - * @param encoding the encoding parameter for the KDF function. - * @param macKeySize the size of the MAC key (in bits). - * @param cipherKeySize the size of the associated Cipher key (in bits). - */ - public IESWithCipherParameters( - byte[] derivation, - byte[] encoding, - int macKeySize, - int cipherKeySize) - { - super(derivation, encoding, macKeySize); - - this.cipherKeySize = cipherKeySize; - } - - public int getCipherKeySize() - { - return cipherKeySize; - } -} diff --git a/src/org/bouncycastle/crypto/params/ISO18033KDFParameters.java b/src/org/bouncycastle/crypto/params/ISO18033KDFParameters.java deleted file mode 100644 index 8dffe2e..0000000 --- a/src/org/bouncycastle/crypto/params/ISO18033KDFParameters.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.DerivationParameters; - -/** - * parameters for Key derivation functions for ISO-18033 - */ -public class ISO18033KDFParameters - implements DerivationParameters -{ - byte[] seed; - - public ISO18033KDFParameters( - byte[] seed) - { - this.seed = seed; - } - - public byte[] getSeed() - { - return seed; - } -} diff --git a/src/org/bouncycastle/crypto/params/KDFParameters.java b/src/org/bouncycastle/crypto/params/KDFParameters.java deleted file mode 100644 index f3bac64..0000000 --- a/src/org/bouncycastle/crypto/params/KDFParameters.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.DerivationParameters; - -/** - * parameters for Key derivation functions for IEEE P1363a - */ -public class KDFParameters - implements DerivationParameters -{ - byte[] iv; - byte[] shared; - - public KDFParameters( - byte[] shared, - byte[] iv) - { - this.shared = shared; - this.iv = iv; - } - - public byte[] getSharedSecret() - { - return shared; - } - - public byte[] getIV() - { - return iv; - } -} diff --git a/src/org/bouncycastle/crypto/params/KeyParameter.java b/src/org/bouncycastle/crypto/params/KeyParameter.java deleted file mode 100644 index 5c4fe0e..0000000 --- a/src/org/bouncycastle/crypto/params/KeyParameter.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class KeyParameter - implements CipherParameters -{ - private byte[] key; - - public KeyParameter( - byte[] key) - { - this(key, 0, key.length); - } - - public KeyParameter( - byte[] key, - int keyOff, - int keyLen) - { - this.key = new byte[keyLen]; - - System.arraycopy(key, keyOff, this.key, 0, keyLen); - } - - public byte[] getKey() - { - return key; - } -} diff --git a/src/org/bouncycastle/crypto/params/MGFParameters.java b/src/org/bouncycastle/crypto/params/MGFParameters.java deleted file mode 100644 index 847bd98..0000000 --- a/src/org/bouncycastle/crypto/params/MGFParameters.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.DerivationParameters; - -/** - * parameters for mask derivation functions. - */ -public class MGFParameters - implements DerivationParameters -{ - byte[] seed; - - public MGFParameters( - byte[] seed) - { - this(seed, 0, seed.length); - } - - public MGFParameters( - byte[] seed, - int off, - int len) - { - this.seed = new byte[len]; - System.arraycopy(seed, off, this.seed, 0, len); - } - - public byte[] getSeed() - { - return seed; - } -} diff --git a/src/org/bouncycastle/crypto/params/MQVPrivateParameters.java b/src/org/bouncycastle/crypto/params/MQVPrivateParameters.java deleted file mode 100644 index 832c07f..0000000 --- a/src/org/bouncycastle/crypto/params/MQVPrivateParameters.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class MQVPrivateParameters - implements CipherParameters -{ - private ECPrivateKeyParameters staticPrivateKey; - private ECPrivateKeyParameters ephemeralPrivateKey; - private ECPublicKeyParameters ephemeralPublicKey; - - public MQVPrivateParameters( - ECPrivateKeyParameters staticPrivateKey, - ECPrivateKeyParameters ephemeralPrivateKey) - { - this(staticPrivateKey, ephemeralPrivateKey, null); - } - - public MQVPrivateParameters( - ECPrivateKeyParameters staticPrivateKey, - ECPrivateKeyParameters ephemeralPrivateKey, - ECPublicKeyParameters ephemeralPublicKey) - { - this.staticPrivateKey = staticPrivateKey; - this.ephemeralPrivateKey = ephemeralPrivateKey; - this.ephemeralPublicKey = ephemeralPublicKey; - } - - public ECPrivateKeyParameters getStaticPrivateKey() - { - return staticPrivateKey; - } - - public ECPrivateKeyParameters getEphemeralPrivateKey() - { - return ephemeralPrivateKey; - } - - public ECPublicKeyParameters getEphemeralPublicKey() - { - return ephemeralPublicKey; - } -} diff --git a/src/org/bouncycastle/crypto/params/MQVPublicParameters.java b/src/org/bouncycastle/crypto/params/MQVPublicParameters.java deleted file mode 100644 index b3b2467..0000000 --- a/src/org/bouncycastle/crypto/params/MQVPublicParameters.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class MQVPublicParameters - implements CipherParameters -{ - private ECPublicKeyParameters staticPublicKey; - private ECPublicKeyParameters ephemeralPublicKey; - - public MQVPublicParameters( - ECPublicKeyParameters staticPublicKey, - ECPublicKeyParameters ephemeralPublicKey) - { - this.staticPublicKey = staticPublicKey; - this.ephemeralPublicKey = ephemeralPublicKey; - } - - public ECPublicKeyParameters getStaticPublicKey() - { - return staticPublicKey; - } - - public ECPublicKeyParameters getEphemeralPublicKey() - { - return ephemeralPublicKey; - } -} diff --git a/src/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java b/src/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java deleted file mode 100644 index 68bc254..0000000 --- a/src/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.KeyGenerationParameters; - -/** - * Parameters for NaccacheStern public private key generation. For details on - * this cipher, please see - * - * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf - */ -public class NaccacheSternKeyGenerationParameters extends KeyGenerationParameters -{ - - // private BigInteger publicExponent; - private int certainty; - - private int cntSmallPrimes; - - private boolean debug = false; - - /** - * Parameters for generating a NaccacheStern KeyPair. - * - * @param random - * The source of randomness - * @param strength - * The desired strength of the Key in Bits - * @param certainty - * the probability that the generated primes are not really prime - * as integer: 2^(-certainty) is then the probability - * @param cntSmallPrimes - * How many small key factors are desired - */ - public NaccacheSternKeyGenerationParameters(SecureRandom random, int strength, int certainty, int cntSmallPrimes) - { - this(random, strength, certainty, cntSmallPrimes, false); - } - - /** - * Parameters for a NaccacheStern KeyPair. - * - * @param random - * The source of randomness - * @param strength - * The desired strength of the Key in Bits - * @param certainty - * the probability that the generated primes are not really prime - * as integer: 2^(-certainty) is then the probability - * @param cntSmallPrimes - * How many small key factors are desired - * @param debug - * Turn debugging on or off (reveals secret information, use with - * caution) - */ - public NaccacheSternKeyGenerationParameters(SecureRandom random, - int strength, int certainty, int cntSmallPrimes, boolean debug) - { - super(random, strength); - - this.certainty = certainty; - if (cntSmallPrimes % 2 == 1) - { - throw new IllegalArgumentException("cntSmallPrimes must be a multiple of 2"); - } - if (cntSmallPrimes < 30) - { - throw new IllegalArgumentException("cntSmallPrimes must be >= 30 for security reasons"); - } - this.cntSmallPrimes = cntSmallPrimes; - - this.debug = debug; - } - - /** - * @return Returns the certainty. - */ - public int getCertainty() - { - return certainty; - } - - /** - * @return Returns the cntSmallPrimes. - */ - public int getCntSmallPrimes() - { - return cntSmallPrimes; - } - - public boolean isDebug() - { - return debug; - } - -} diff --git a/src/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java b/src/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java deleted file mode 100644 index c075d60..0000000 --- a/src/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -/** - * Public key parameters for NaccacheStern cipher. For details on this cipher, - * please see - * - * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf - */ -public class NaccacheSternKeyParameters extends AsymmetricKeyParameter -{ - - private BigInteger g, n; - - int lowerSigmaBound; - - /** - * @param privateKey - */ - public NaccacheSternKeyParameters(boolean privateKey, BigInteger g, BigInteger n, int lowerSigmaBound) - { - super(privateKey); - this.g = g; - this.n = n; - this.lowerSigmaBound = lowerSigmaBound; - } - - /** - * @return Returns the g. - */ - public BigInteger getG() - { - return g; - } - - /** - * @return Returns the lowerSigmaBound. - */ - public int getLowerSigmaBound() - { - return lowerSigmaBound; - } - - /** - * @return Returns the n. - */ - public BigInteger getModulus() - { - return n; - } - -} diff --git a/src/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java b/src/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java deleted file mode 100644 index f91eb8a..0000000 --- a/src/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; -import java.util.Vector; - -/** - * Private key parameters for NaccacheStern cipher. For details on this cipher, - * please see - * - * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf - */ -public class NaccacheSternPrivateKeyParameters extends NaccacheSternKeyParameters -{ - private BigInteger phi_n; - private Vector smallPrimes; - - /** - * Constructs a NaccacheSternPrivateKey - * - * @param g - * the public enryption parameter g - * @param n - * the public modulus n = p*q - * @param lowerSigmaBound - * the public lower sigma bound up to which data can be encrypted - * @param smallPrimes - * the small primes, of which sigma is constructed in the right - * order - * @param phi_n - * the private modulus phi(n) = (p-1)(q-1) - */ - public NaccacheSternPrivateKeyParameters(BigInteger g, BigInteger n, - int lowerSigmaBound, Vector smallPrimes, - BigInteger phi_n) - { - super(true, g, n, lowerSigmaBound); - this.smallPrimes = smallPrimes; - this.phi_n = phi_n; - } - - public BigInteger getPhi_n() - { - return phi_n; - } - - public Vector getSmallPrimes() - { - return smallPrimes; - } -} diff --git a/src/org/bouncycastle/crypto/params/ParametersWithIV.java b/src/org/bouncycastle/crypto/params/ParametersWithIV.java deleted file mode 100644 index 4a1e6e9..0000000 --- a/src/org/bouncycastle/crypto/params/ParametersWithIV.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class ParametersWithIV - implements CipherParameters -{ - private byte[] iv; - private CipherParameters parameters; - - public ParametersWithIV( - CipherParameters parameters, - byte[] iv) - { - this(parameters, iv, 0, iv.length); - } - - public ParametersWithIV( - CipherParameters parameters, - byte[] iv, - int ivOff, - int ivLen) - { - this.iv = new byte[ivLen]; - this.parameters = parameters; - - System.arraycopy(iv, ivOff, this.iv, 0, ivLen); - } - - public byte[] getIV() - { - return iv; - } - - public CipherParameters getParameters() - { - return parameters; - } -} diff --git a/src/org/bouncycastle/crypto/params/ParametersWithRandom.java b/src/org/bouncycastle/crypto/params/ParametersWithRandom.java deleted file mode 100644 index d5510ed..0000000 --- a/src/org/bouncycastle/crypto/params/ParametersWithRandom.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -import javabc.SecureRandom; - -public class ParametersWithRandom - implements CipherParameters -{ - private SecureRandom random; - private CipherParameters parameters; - - public ParametersWithRandom( - CipherParameters parameters, - SecureRandom random) - { - this.random = random; - this.parameters = parameters; - } - - public ParametersWithRandom( - CipherParameters parameters) - { - this(parameters, new SecureRandom()); - } - - public SecureRandom getRandom() - { - return random; - } - - public CipherParameters getParameters() - { - return parameters; - } -} diff --git a/src/org/bouncycastle/crypto/params/ParametersWithSBox.java b/src/org/bouncycastle/crypto/params/ParametersWithSBox.java deleted file mode 100644 index b226a9d..0000000 --- a/src/org/bouncycastle/crypto/params/ParametersWithSBox.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class ParametersWithSBox - implements CipherParameters -{ - private CipherParameters parameters; - private byte[] sBox; - - public ParametersWithSBox( - CipherParameters parameters, - byte[] sBox) - { - this.parameters = parameters; - this.sBox = sBox; - } - - public byte[] getSBox() - { - return sBox; - } - - public CipherParameters getParameters() - { - return parameters; - } -} diff --git a/src/org/bouncycastle/crypto/params/ParametersWithSalt.java b/src/org/bouncycastle/crypto/params/ParametersWithSalt.java deleted file mode 100644 index 73765dd..0000000 --- a/src/org/bouncycastle/crypto/params/ParametersWithSalt.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -/** - * Cipher parameters with a fixed salt value associated with them. - */ -public class ParametersWithSalt - implements CipherParameters -{ - private byte[] salt; - private CipherParameters parameters; - - public ParametersWithSalt( - CipherParameters parameters, - byte[] salt) - { - this(parameters, salt, 0, salt.length); - } - - public ParametersWithSalt( - CipherParameters parameters, - byte[] salt, - int saltOff, - int saltLen) - { - this.salt = new byte[saltLen]; - this.parameters = parameters; - - System.arraycopy(salt, saltOff, this.salt, 0, saltLen); - } - - public byte[] getSalt() - { - return salt; - } - - public CipherParameters getParameters() - { - return parameters; - } -} diff --git a/src/org/bouncycastle/crypto/params/RC2Parameters.java b/src/org/bouncycastle/crypto/params/RC2Parameters.java deleted file mode 100644 index dc33ec5..0000000 --- a/src/org/bouncycastle/crypto/params/RC2Parameters.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class RC2Parameters - implements CipherParameters -{ - private byte[] key; - private int bits; - - public RC2Parameters( - byte[] key) - { - this(key, (key.length > 128) ? 1024 : (key.length * 8)); - } - - public RC2Parameters( - byte[] key, - int bits) - { - this.key = new byte[key.length]; - this.bits = bits; - - System.arraycopy(key, 0, this.key, 0, key.length); - } - - public byte[] getKey() - { - return key; - } - - public int getEffectiveKeyBits() - { - return bits; - } -} diff --git a/src/org/bouncycastle/crypto/params/RC5Parameters.java b/src/org/bouncycastle/crypto/params/RC5Parameters.java deleted file mode 100644 index 6cbd57f..0000000 --- a/src/org/bouncycastle/crypto/params/RC5Parameters.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -public class RC5Parameters - implements CipherParameters -{ - private byte[] key; - private int rounds; - - public RC5Parameters( - byte[] key, - int rounds) - { - if (key.length > 255) - { - throw new IllegalArgumentException("RC5 key length can be no greater than 255"); - } - - this.key = new byte[key.length]; - this.rounds = rounds; - - System.arraycopy(key, 0, this.key, 0, key.length); - } - - public byte[] getKey() - { - return key; - } - - public int getRounds() - { - return rounds; - } -} diff --git a/src/org/bouncycastle/crypto/params/RSABlindingParameters.java b/src/org/bouncycastle/crypto/params/RSABlindingParameters.java deleted file mode 100644 index 2fafacb..0000000 --- a/src/org/bouncycastle/crypto/params/RSABlindingParameters.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.bouncycastle.crypto.params; - -import org.bouncycastle.crypto.CipherParameters; - -import javabc.BigInteger; - -public class RSABlindingParameters - implements CipherParameters -{ - private RSAKeyParameters publicKey; - private BigInteger blindingFactor; - - public RSABlindingParameters( - RSAKeyParameters publicKey, - BigInteger blindingFactor) - { - if (publicKey instanceof RSAPrivateCrtKeyParameters) - { - throw new IllegalArgumentException("RSA parameters should be for a public key"); - } - - this.publicKey = publicKey; - this.blindingFactor = blindingFactor; - } - - public RSAKeyParameters getPublicKey() - { - return publicKey; - } - - public BigInteger getBlindingFactor() - { - return blindingFactor; - } -} diff --git a/src/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java b/src/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java deleted file mode 100644 index fd9b1c8..0000000 --- a/src/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.KeyGenerationParameters; - -public class RSAKeyGenerationParameters - extends KeyGenerationParameters -{ - private BigInteger publicExponent; - private int certainty; - - public RSAKeyGenerationParameters( - BigInteger publicExponent, - SecureRandom random, - int strength, - int certainty) - { - super(random, strength); - - if (strength < 12) - { - throw new IllegalArgumentException("key strength too small"); - } - - // - // public exponent cannot be even - // - if (!publicExponent.testBit(0)) - { - throw new IllegalArgumentException("public exponent cannot be even"); - } - - this.publicExponent = publicExponent; - this.certainty = certainty; - } - - public BigInteger getPublicExponent() - { - return publicExponent; - } - - public int getCertainty() - { - return certainty; - } -} diff --git a/src/org/bouncycastle/crypto/params/RSAKeyParameters.java b/src/org/bouncycastle/crypto/params/RSAKeyParameters.java deleted file mode 100644 index 591f2a5..0000000 --- a/src/org/bouncycastle/crypto/params/RSAKeyParameters.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class RSAKeyParameters - extends AsymmetricKeyParameter -{ - private BigInteger modulus; - private BigInteger exponent; - - public RSAKeyParameters( - boolean isPrivate, - BigInteger modulus, - BigInteger exponent) - { - super(isPrivate); - - this.modulus = modulus; - this.exponent = exponent; - } - - public BigInteger getModulus() - { - return modulus; - } - - public BigInteger getExponent() - { - return exponent; - } -} diff --git a/src/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java b/src/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java deleted file mode 100644 index d97cd3e..0000000 --- a/src/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.bouncycastle.crypto.params; - -import javabc.BigInteger; - -public class RSAPrivateCrtKeyParameters - extends RSAKeyParameters -{ - private BigInteger e; - private BigInteger p; - private BigInteger q; - private BigInteger dP; - private BigInteger dQ; - private BigInteger qInv; - - /** - * - */ - public RSAPrivateCrtKeyParameters( - BigInteger modulus, - BigInteger publicExponent, - BigInteger privateExponent, - BigInteger p, - BigInteger q, - BigInteger dP, - BigInteger dQ, - BigInteger qInv) - { - super(true, modulus, privateExponent); - - this.e = publicExponent; - this.p = p; - this.q = q; - this.dP = dP; - this.dQ = dQ; - this.qInv = qInv; - } - - public BigInteger getPublicExponent() - { - return e; - } - - public BigInteger getP() - { - return p; - } - - public BigInteger getQ() - { - return q; - } - - public BigInteger getDP() - { - return dP; - } - - public BigInteger getDQ() - { - return dQ; - } - - public BigInteger getQInv() - { - return qInv; - } -} diff --git a/src/org/bouncycastle/crypto/params/package.html b/src/org/bouncycastle/crypto/params/package.html deleted file mode 100644 index 4e00a75..0000000 --- a/src/org/bouncycastle/crypto/params/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Classes for parameter objects for ciphers and generators. - - diff --git a/src/org/bouncycastle/crypto/prng/DigestRandomGenerator.java b/src/org/bouncycastle/crypto/prng/DigestRandomGenerator.java deleted file mode 100644 index f36b62c..0000000 --- a/src/org/bouncycastle/crypto/prng/DigestRandomGenerator.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.bouncycastle.crypto.prng; - -import org.bouncycastle.crypto.Digest; - -/** - * Random generation based on the digest with counter. Calling addSeedMaterial will - * always increase the entropy of the hash. - *

        - * Internal access to the digest is synchronized so a single one of these can be shared. - *

        - */ -public class DigestRandomGenerator - implements RandomGenerator -{ - private static long CYCLE_COUNT = 10; - - private long stateCounter; - private long seedCounter; - private Digest digest; - private byte[] state; - private byte[] seed; - - // public constructors - public DigestRandomGenerator( - Digest digest) - { - this.digest = digest; - - this.seed = new byte[digest.getDigestSize()]; - this.seedCounter = 1; - - this.state = new byte[digest.getDigestSize()]; - this.stateCounter = 1; - } - - public void addSeedMaterial(byte[] inSeed) - { - synchronized (this) - { - digestUpdate(inSeed); - digestUpdate(seed); - digestDoFinal(seed); - } - } - - public void addSeedMaterial(long rSeed) - { - synchronized (this) - { - digestAddCounter(rSeed); - digestUpdate(seed); - - digestDoFinal(seed); - } - } - - public void nextBytes(byte[] bytes) - { - nextBytes(bytes, 0, bytes.length); - } - - public void nextBytes(byte[] bytes, int start, int len) - { - synchronized (this) - { - int stateOff = 0; - - generateState(); - - int end = start + len; - for (int i = start; i != end; i++) - { - if (stateOff == state.length) - { - generateState(); - stateOff = 0; - } - bytes[i] = state[stateOff++]; - } - } - } - - private void cycleSeed() - { - digestUpdate(seed); - digestAddCounter(seedCounter++); - - digestDoFinal(seed); - } - - private void generateState() - { - digestAddCounter(stateCounter++); - digestUpdate(state); - digestUpdate(seed); - - digestDoFinal(state); - - if ((stateCounter % CYCLE_COUNT) == 0) - { - cycleSeed(); - } - } - - private void digestAddCounter(long seed) - { - for (int i = 0; i != 8; i++) - { - digest.update((byte)seed); - seed >>>= 8; - } - } - - private void digestUpdate(byte[] inSeed) - { - digest.update(inSeed, 0, inSeed.length); - } - - private void digestDoFinal(byte[] result) - { - digest.doFinal(result, 0); - } -} diff --git a/src/org/bouncycastle/crypto/prng/RandomGenerator.java b/src/org/bouncycastle/crypto/prng/RandomGenerator.java deleted file mode 100644 index 47ff68e..0000000 --- a/src/org/bouncycastle/crypto/prng/RandomGenerator.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.bouncycastle.crypto.prng; - -/** - * Generic interface for objects generating random bytes. - */ -public interface RandomGenerator -{ - /** - * Add more seed material to the generator. - * - * @param seed a byte array to be mixed into the generator's state. - */ - void addSeedMaterial(byte[] seed); - - /** - * Add more seed material to the generator. - * - * @param seed a long value to be mixed into the generator's state. - */ - void addSeedMaterial(long seed); - - /** - * Fill bytes with random values. - * - * @param bytes byte array to be filled. - */ - void nextBytes(byte[] bytes); - - /** - * Fill part of bytes with random values. - * - * @param bytes byte array to be filled. - * @param start index to start filling at. - * @param len length of segment to fill. - */ - void nextBytes(byte[] bytes, int start, int len); - -} diff --git a/src/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java b/src/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java deleted file mode 100644 index fbb2639..0000000 --- a/src/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.bouncycastle.crypto.prng; - -/** - * Takes bytes generated by an underling RandomGenerator and reverses the order in - * each small window (of configurable size). - *

        - * Access to internals is synchronized so a single one of these can be shared. - *

        - */ -public class ReversedWindowGenerator - implements RandomGenerator -{ - private final RandomGenerator generator; - - private byte[] window; - private int windowCount; - - public ReversedWindowGenerator( - RandomGenerator generator, - int windowSize) - { - if (generator == null) - { - throw new IllegalArgumentException("generator cannot be null"); - } - if (windowSize < 2) - { - throw new IllegalArgumentException("windowSize must be at least 2"); - } - - this.generator = generator; - this.window = new byte[windowSize]; - } - - /** - * Add more seed material to the generator. - * - * @param seed a byte array to be mixed into the generator's state. - */ - public void addSeedMaterial( - byte[] seed) - { - synchronized (this) - { - windowCount = 0; - generator.addSeedMaterial(seed); - } - } - - /** - * Add more seed material to the generator. - * - * @param seed a long value to be mixed into the generator's state. - */ - public void addSeedMaterial( - long seed) - { - synchronized (this) - { - windowCount = 0; - generator.addSeedMaterial(seed); - } - } - - /** - * Fill bytes with random values. - * - * @param bytes byte array to be filled. - */ - public void nextBytes( - byte[] bytes) - { - doNextBytes(bytes, 0, bytes.length); - } - - /** - * Fill part of bytes with random values. - * - * @param bytes byte array to be filled. - * @param start index to start filling at. - * @param len length of segment to fill. - */ - public void nextBytes( - byte[] bytes, - int start, - int len) - { - doNextBytes(bytes, start, len); - } - - private void doNextBytes( - byte[] bytes, - int start, - int len) - { - synchronized (this) - { - int done = 0; - while (done < len) - { - if (windowCount < 1) - { - generator.nextBytes(window, 0, window.length); - windowCount = window.length; - } - - bytes[start + done++] = window[--windowCount]; - } - } - } -} diff --git a/src/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java b/src/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java deleted file mode 100644 index 6b2d5ec..0000000 --- a/src/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java +++ /dev/null @@ -1,95 +0,0 @@ -package org.bouncycastle.crypto.prng; - -/** - * A thread based seed generator - one source of randomness. - *

        - * Based on an idea from Marcus Lippert. - *

        - */ -public class ThreadedSeedGenerator -{ - private class SeedGenerator - implements Runnable - { - private volatile int counter = 0; - private volatile boolean stop = false; - - public void run() - { - while (!this.stop) - { - this.counter++; - } - - } - - public byte[] generateSeed( - int numbytes, - boolean fast) - { - Thread t = new Thread(this); - byte[] result = new byte[numbytes]; - this.counter = 0; - this.stop = false; - int last = 0; - int end; - - t.start(); - if(fast) - { - end = numbytes; - } - else - { - end = numbytes * 8; - } - for (int i = 0; i < end; i++) - { - while (this.counter == last) - { - try - { - Thread.sleep(1); - } - catch (InterruptedException e) - { - // ignore - } - } - last = this.counter; - if (fast) - { - result[i] = (byte) (last & 0xff); - } - else - { - int bytepos = i/8; - result[bytepos] = (byte) ((result[bytepos] << 1) | (last & 1)); - } - - } - stop = true; - return result; - } - } - - /** - * Generate seed bytes. Set fast to false for best quality. - *

        - * If fast is set to true, the code should be round about 8 times faster when - * generating a long sequence of random bytes. 20 bytes of random values using - * the fast mode take less than half a second on a Nokia e70. If fast is set to false, - * it takes round about 2500 ms. - *

        - * @param numBytes the number of bytes to generate - * @param fast true if fast mode should be used - */ - public byte[] generateSeed( - int numBytes, - boolean fast) - { - SeedGenerator gen = new SeedGenerator(); - - return gen.generateSeed(numBytes, fast); - } -} diff --git a/src/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java b/src/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java deleted file mode 100644 index d218e97..0000000 --- a/src/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.bouncycastle.crypto.prng; - -public class VMPCRandomGenerator implements RandomGenerator -{ - private byte n = 0; - - /** - * Permutation generated by code: - * // First 1850 fractional digit of Pi number. - * byte[] key = new BigInteger("14159265358979323846...5068006422512520511").toByteArray(); - * s = 0; - * P = new byte[256]; - * for (int i = 0; i < 256; i++) { - * P[i] = (byte) i; - * } - * for (int m = 0; m < 768; m++) { - * s = P[(s + P[m & 0xff] + key[m % key.length]) & 0xff]; - * byte temp = P[m & 0xff]; - * P[m & 0xff] = P[s & 0xff]; - * P[s & 0xff] = temp; - * } - */ - private byte[] P = - { - (byte) 0xbb, (byte) 0x2c, (byte) 0x62, (byte) 0x7f, - (byte) 0xb5, (byte) 0xaa, (byte) 0xd4, (byte) 0x0d, (byte) 0x81, - (byte) 0xfe, (byte) 0xb2, (byte) 0x82, (byte) 0xcb, (byte) 0xa0, - (byte) 0xa1, (byte) 0x08, (byte) 0x18, (byte) 0x71, (byte) 0x56, - (byte) 0xe8, (byte) 0x49, (byte) 0x02, (byte) 0x10, (byte) 0xc4, - (byte) 0xde, (byte) 0x35, (byte) 0xa5, (byte) 0xec, (byte) 0x80, - (byte) 0x12, (byte) 0xb8, (byte) 0x69, (byte) 0xda, (byte) 0x2f, - (byte) 0x75, (byte) 0xcc, (byte) 0xa2, (byte) 0x09, (byte) 0x36, - (byte) 0x03, (byte) 0x61, (byte) 0x2d, (byte) 0xfd, (byte) 0xe0, - (byte) 0xdd, (byte) 0x05, (byte) 0x43, (byte) 0x90, (byte) 0xad, - (byte) 0xc8, (byte) 0xe1, (byte) 0xaf, (byte) 0x57, (byte) 0x9b, - (byte) 0x4c, (byte) 0xd8, (byte) 0x51, (byte) 0xae, (byte) 0x50, - (byte) 0x85, (byte) 0x3c, (byte) 0x0a, (byte) 0xe4, (byte) 0xf3, - (byte) 0x9c, (byte) 0x26, (byte) 0x23, (byte) 0x53, (byte) 0xc9, - (byte) 0x83, (byte) 0x97, (byte) 0x46, (byte) 0xb1, (byte) 0x99, - (byte) 0x64, (byte) 0x31, (byte) 0x77, (byte) 0xd5, (byte) 0x1d, - (byte) 0xd6, (byte) 0x78, (byte) 0xbd, (byte) 0x5e, (byte) 0xb0, - (byte) 0x8a, (byte) 0x22, (byte) 0x38, (byte) 0xf8, (byte) 0x68, - (byte) 0x2b, (byte) 0x2a, (byte) 0xc5, (byte) 0xd3, (byte) 0xf7, - (byte) 0xbc, (byte) 0x6f, (byte) 0xdf, (byte) 0x04, (byte) 0xe5, - (byte) 0x95, (byte) 0x3e, (byte) 0x25, (byte) 0x86, (byte) 0xa6, - (byte) 0x0b, (byte) 0x8f, (byte) 0xf1, (byte) 0x24, (byte) 0x0e, - (byte) 0xd7, (byte) 0x40, (byte) 0xb3, (byte) 0xcf, (byte) 0x7e, - (byte) 0x06, (byte) 0x15, (byte) 0x9a, (byte) 0x4d, (byte) 0x1c, - (byte) 0xa3, (byte) 0xdb, (byte) 0x32, (byte) 0x92, (byte) 0x58, - (byte) 0x11, (byte) 0x27, (byte) 0xf4, (byte) 0x59, (byte) 0xd0, - (byte) 0x4e, (byte) 0x6a, (byte) 0x17, (byte) 0x5b, (byte) 0xac, - (byte) 0xff, (byte) 0x07, (byte) 0xc0, (byte) 0x65, (byte) 0x79, - (byte) 0xfc, (byte) 0xc7, (byte) 0xcd, (byte) 0x76, (byte) 0x42, - (byte) 0x5d, (byte) 0xe7, (byte) 0x3a, (byte) 0x34, (byte) 0x7a, - (byte) 0x30, (byte) 0x28, (byte) 0x0f, (byte) 0x73, (byte) 0x01, - (byte) 0xf9, (byte) 0xd1, (byte) 0xd2, (byte) 0x19, (byte) 0xe9, - (byte) 0x91, (byte) 0xb9, (byte) 0x5a, (byte) 0xed, (byte) 0x41, - (byte) 0x6d, (byte) 0xb4, (byte) 0xc3, (byte) 0x9e, (byte) 0xbf, - (byte) 0x63, (byte) 0xfa, (byte) 0x1f, (byte) 0x33, (byte) 0x60, - (byte) 0x47, (byte) 0x89, (byte) 0xf0, (byte) 0x96, (byte) 0x1a, - (byte) 0x5f, (byte) 0x93, (byte) 0x3d, (byte) 0x37, (byte) 0x4b, - (byte) 0xd9, (byte) 0xa8, (byte) 0xc1, (byte) 0x1b, (byte) 0xf6, - (byte) 0x39, (byte) 0x8b, (byte) 0xb7, (byte) 0x0c, (byte) 0x20, - (byte) 0xce, (byte) 0x88, (byte) 0x6e, (byte) 0xb6, (byte) 0x74, - (byte) 0x8e, (byte) 0x8d, (byte) 0x16, (byte) 0x29, (byte) 0xf2, - (byte) 0x87, (byte) 0xf5, (byte) 0xeb, (byte) 0x70, (byte) 0xe3, - (byte) 0xfb, (byte) 0x55, (byte) 0x9f, (byte) 0xc6, (byte) 0x44, - (byte) 0x4a, (byte) 0x45, (byte) 0x7d, (byte) 0xe2, (byte) 0x6b, - (byte) 0x5c, (byte) 0x6c, (byte) 0x66, (byte) 0xa9, (byte) 0x8c, - (byte) 0xee, (byte) 0x84, (byte) 0x13, (byte) 0xa7, (byte) 0x1e, - (byte) 0x9d, (byte) 0xdc, (byte) 0x67, (byte) 0x48, (byte) 0xba, - (byte) 0x2e, (byte) 0xe6, (byte) 0xa4, (byte) 0xab, (byte) 0x7c, - (byte) 0x94, (byte) 0x00, (byte) 0x21, (byte) 0xef, (byte) 0xea, - (byte) 0xbe, (byte) 0xca, (byte) 0x72, (byte) 0x4f, (byte) 0x52, - (byte) 0x98, (byte) 0x3f, (byte) 0xc2, (byte) 0x14, (byte) 0x7b, - (byte) 0x3b, (byte) 0x54 }; - - /** - * Value generated in the same way as {@link VMPCRandomGenerator#P}; - */ - private byte s = (byte) 0xbe; - - public VMPCRandomGenerator() - { - } - - public void addSeedMaterial(byte[] seed) - { - for (int m = 0; m < seed.length; m++) - { - s = P[(s + P[n & 0xff] + seed[m]) & 0xff]; - byte temp = P[n & 0xff]; - P[n & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - n = (byte) ((n + 1) & 0xff); - } - } - - public void addSeedMaterial(long seed) - { - byte[] s = new byte[4]; - s[3] = (byte) (seed & 0x000000ff); - s[2] = (byte) ((seed & 0x0000ff00) >> 8); - s[1] = (byte) ((seed & 0x00ff0000) >> 16); - s[0] = (byte) ((seed & 0xff000000) >> 24); - addSeedMaterial(s); - } - - public void nextBytes(byte[] bytes) - { - nextBytes(bytes, 0, bytes.length); - } - - public void nextBytes(byte[] bytes, int start, int len) - { - synchronized (P) - { - int end = start + len; - for (int i = start; i != end; i++) - { - s = P[(s + P[n & 0xff]) & 0xff]; - bytes[i] = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]; - byte temp = P[n & 0xff]; - P[n & 0xff] = P[s & 0xff]; - P[s & 0xff] = temp; - n = (byte) ((n + 1) & 0xff); - } - } - } - -} diff --git a/src/org/bouncycastle/crypto/prng/package.html b/src/org/bouncycastle/crypto/prng/package.html deleted file mode 100644 index 99525fb..0000000 --- a/src/org/bouncycastle/crypto/prng/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Lightweight psuedo-random number generators. - - diff --git a/src/org/bouncycastle/crypto/signers/DSADigestSigner.java b/src/org/bouncycastle/crypto/signers/DSADigestSigner.java deleted file mode 100644 index 9d6c2e2..0000000 --- a/src/org/bouncycastle/crypto/signers/DSADigestSigner.java +++ /dev/null @@ -1,163 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import java.io.IOException; -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERInteger; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -public class DSADigestSigner - implements Signer -{ - private final Digest digest; - private final DSA dsaSigner; - private boolean forSigning; - - public DSADigestSigner( - DSA signer, - Digest digest) - { - this.digest = digest; - this.dsaSigner = signer; - } - - public void init( - boolean forSigning, - CipherParameters parameters) - { - this.forSigning = forSigning; - - AsymmetricKeyParameter k; - - if (parameters instanceof ParametersWithRandom) - { - k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).getParameters(); - } - else - { - k = (AsymmetricKeyParameter)parameters; - } - - if (forSigning && !k.isPrivate()) - { - throw new IllegalArgumentException("Signing Requires Private Key."); - } - - if (!forSigning && k.isPrivate()) - { - throw new IllegalArgumentException("Verification Requires Public Key."); - } - - reset(); - - dsaSigner.init(forSigning, parameters); - } - - /** - * update the internal digest with the byte b - */ - public void update( - byte input) - { - digest.update(input); - } - - /** - * update the internal digest with the byte array in - */ - public void update( - byte[] input, - int inOff, - int length) - { - digest.update(input, inOff, length); - } - - /** - * Generate a signature for the message we've been loaded with using - * the key we were initialised with. - */ - public byte[] generateSignature() - { - if (!forSigning) - { - throw new IllegalStateException("DSADigestSigner not initialised for signature generation."); - } - - byte[] hash = new byte[digest.getDigestSize()]; - digest.doFinal(hash, 0); - - BigInteger[] sig = dsaSigner.generateSignature(hash); - - try - { - return derEncode(sig[0], sig[1]); - } - catch (IOException e) - { - throw new IllegalStateException("unable to encode signature"); - } - } - - public boolean verifySignature( - byte[] signature) - { - if (forSigning) - { - throw new IllegalStateException("DSADigestSigner not initialised for verification"); - } - - byte[] hash = new byte[digest.getDigestSize()]; - digest.doFinal(hash, 0); - - try - { - BigInteger[] sig = derDecode(signature); - return dsaSigner.verifySignature(hash, sig[0], sig[1]); - } - catch (IOException e) - { - return false; - } - } - - public void reset() - { - digest.reset(); - } - - private byte[] derEncode( - BigInteger r, - BigInteger s) - throws IOException - { - ASN1EncodableVector v = new ASN1EncodableVector(); - v.add(new DERInteger(r)); - v.add(new DERInteger(s)); - - return new DERSequence(v).getEncoded(ASN1Encoding.DER); - } - - private BigInteger[] derDecode( - byte[] encoding) - throws IOException - { - ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(encoding); - - return new BigInteger[] - { - ((DERInteger)s.getObjectAt(0)).getValue(), - ((DERInteger)s.getObjectAt(1)).getValue() - }; - } -} diff --git a/src/org/bouncycastle/crypto/signers/DSASigner.java b/src/org/bouncycastle/crypto/signers/DSASigner.java deleted file mode 100644 index 6d6add9..0000000 --- a/src/org/bouncycastle/crypto/signers/DSASigner.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.params.DSAKeyParameters; -import org.bouncycastle.crypto.params.DSAParameters; -import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; -import org.bouncycastle.crypto.params.DSAPublicKeyParameters; -import org.bouncycastle.crypto.params.ParametersWithRandom; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * The Digital Signature Algorithm - as described in "Handbook of Applied - * Cryptography", pages 452 - 453. - */ -public class DSASigner - implements DSA -{ - DSAKeyParameters key; - - SecureRandom random; - - public void init( - boolean forSigning, - CipherParameters param) - { - if (forSigning) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - this.key = (DSAPrivateKeyParameters)rParam.getParameters(); - } - else - { - this.random = new SecureRandom(); - this.key = (DSAPrivateKeyParameters)param; - } - } - else - { - this.key = (DSAPublicKeyParameters)param; - } - } - - /** - * generate a signature for the given message using the key we were - * initialised with. For conventional DSA the message should be a SHA-1 - * hash of the message of interest. - * - * @param message the message that will be verified later. - */ - public BigInteger[] generateSignature( - byte[] message) - { - DSAParameters params = key.getParameters(); - BigInteger m = calculateE(params.getQ(), message); - BigInteger k; - int qBitLength = params.getQ().bitLength(); - - do - { - k = new BigInteger(qBitLength, random); - } - while (k.compareTo(params.getQ()) >= 0); - - BigInteger r = params.getG().modPow(k, params.getP()).mod(params.getQ()); - - k = k.modInverse(params.getQ()).multiply( - m.add(((DSAPrivateKeyParameters)key).getX().multiply(r))); - - BigInteger s = k.mod(params.getQ()); - - BigInteger[] res = new BigInteger[2]; - - res[0] = r; - res[1] = s; - - return res; - } - - /** - * return true if the value r and s represent a DSA signature for - * the passed in message for standard DSA the message should be a - * SHA-1 hash of the real message to be verified. - */ - public boolean verifySignature( - byte[] message, - BigInteger r, - BigInteger s) - { - DSAParameters params = key.getParameters(); - BigInteger m = calculateE(params.getQ(), message); - BigInteger zero = BigInteger.valueOf(0); - - if (zero.compareTo(r) >= 0 || params.getQ().compareTo(r) <= 0) - { - return false; - } - - if (zero.compareTo(s) >= 0 || params.getQ().compareTo(s) <= 0) - { - return false; - } - - BigInteger w = s.modInverse(params.getQ()); - - BigInteger u1 = m.multiply(w).mod(params.getQ()); - BigInteger u2 = r.multiply(w).mod(params.getQ()); - - u1 = params.getG().modPow(u1, params.getP()); - u2 = ((DSAPublicKeyParameters)key).getY().modPow(u2, params.getP()); - - BigInteger v = u1.multiply(u2).mod(params.getP()).mod(params.getQ()); - - return v.equals(r); - } - - private BigInteger calculateE(BigInteger n, byte[] message) - { - if (n.bitLength() >= message.length * 8) - { - return new BigInteger(1, message); - } - else - { - byte[] trunc = new byte[n.bitLength() / 8]; - - System.arraycopy(message, 0, trunc, 0, trunc.length); - - return new BigInteger(1, trunc); - } - } -} diff --git a/src/org/bouncycastle/crypto/signers/ECDSASigner.java b/src/org/bouncycastle/crypto/signers/ECDSASigner.java deleted file mode 100644 index 22d670c..0000000 --- a/src/org/bouncycastle/crypto/signers/ECDSASigner.java +++ /dev/null @@ -1,163 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.params.ECKeyParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.math.ec.ECAlgorithms; -import org.bouncycastle.math.ec.ECConstants; -import org.bouncycastle.math.ec.ECPoint; - -/** - * EC-DSA as described in X9.62 - */ -public class ECDSASigner - implements ECConstants, DSA -{ - ECKeyParameters key; - - SecureRandom random; - - public void init( - boolean forSigning, - CipherParameters param) - { - if (forSigning) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - this.key = (ECPrivateKeyParameters)rParam.getParameters(); - } - else - { - this.random = new SecureRandom(); - this.key = (ECPrivateKeyParameters)param; - } - } - else - { - this.key = (ECPublicKeyParameters)param; - } - } - - // 5.3 pg 28 - /** - * generate a signature for the given message using the key we were - * initialised with. For conventional DSA the message should be a SHA-1 - * hash of the message of interest. - * - * @param message the message that will be verified later. - */ - public BigInteger[] generateSignature( - byte[] message) - { - BigInteger n = key.getParameters().getN(); - BigInteger e = calculateE(n, message); - BigInteger r = null; - BigInteger s = null; - - // 5.3.2 - do // generate s - { - BigInteger k = null; - int nBitLength = n.bitLength(); - - do // generate r - { - do - { - k = new BigInteger(nBitLength, random); - } - while (k.equals(ZERO) || k.compareTo(n) >= 0); - - ECPoint p = key.getParameters().getG().multiply(k); - - // 5.3.3 - BigInteger x = p.getX().toBigInteger(); - - r = x.mod(n); - } - while (r.equals(ZERO)); - - BigInteger d = ((ECPrivateKeyParameters)key).getD(); - - s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n); - } - while (s.equals(ZERO)); - - BigInteger[] res = new BigInteger[2]; - - res[0] = r; - res[1] = s; - - return res; - } - - // 5.4 pg 29 - /** - * return true if the value r and s represent a DSA signature for - * the passed in message (for standard DSA the message should be - * a SHA-1 hash of the real message to be verified). - */ - public boolean verifySignature( - byte[] message, - BigInteger r, - BigInteger s) - { - BigInteger n = key.getParameters().getN(); - BigInteger e = calculateE(n, message); - - // r in the range [1,n-1] - if (r.compareTo(ONE) < 0 || r.compareTo(n) >= 0) - { - return false; - } - - // s in the range [1,n-1] - if (s.compareTo(ONE) < 0 || s.compareTo(n) >= 0) - { - return false; - } - - BigInteger c = s.modInverse(n); - - BigInteger u1 = e.multiply(c).mod(n); - BigInteger u2 = r.multiply(c).mod(n); - - ECPoint G = key.getParameters().getG(); - ECPoint Q = ((ECPublicKeyParameters)key).getQ(); - - ECPoint point = ECAlgorithms.sumOfTwoMultiplies(G, u1, Q, u2); - - BigInteger v = point.getX().toBigInteger().mod(n); - - return v.equals(r); - } - - private BigInteger calculateE(BigInteger n, byte[] message) - { - int log2n = n.bitLength(); - int messageBitLength = message.length * 8; - - if (log2n >= messageBitLength) - { - return new BigInteger(1, message); - } - else - { - BigInteger trunc = new BigInteger(1, message); - - trunc = trunc.shiftRight(messageBitLength - log2n); - - return trunc; - } - } -} diff --git a/src/org/bouncycastle/crypto/signers/ECGOST3410Signer.java b/src/org/bouncycastle/crypto/signers/ECGOST3410Signer.java deleted file mode 100644 index fe1e44a..0000000 --- a/src/org/bouncycastle/crypto/signers/ECGOST3410Signer.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.params.ECKeyParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.math.ec.ECAlgorithms; -import org.bouncycastle.math.ec.ECConstants; -import org.bouncycastle.math.ec.ECPoint; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * GOST R 34.10-2001 Signature Algorithm - */ -public class ECGOST3410Signer - implements DSA -{ - ECKeyParameters key; - - SecureRandom random; - - public void init( - boolean forSigning, - CipherParameters param) - { - if (forSigning) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - this.key = (ECPrivateKeyParameters)rParam.getParameters(); - } - else - { - this.random = new SecureRandom(); - this.key = (ECPrivateKeyParameters)param; - } - } - else - { - this.key = (ECPublicKeyParameters)param; - } - } - - /** - * generate a signature for the given message using the key we were - * initialised with. For conventional GOST3410 the message should be a GOST3411 - * hash of the message of interest. - * - * @param message the message that will be verified later. - */ - public BigInteger[] generateSignature( - byte[] message) - { - byte[] mRev = new byte[message.length]; // conversion is little-endian - for (int i = 0; i != mRev.length; i++) - { - mRev[i] = message[mRev.length - 1 - i]; - } - - BigInteger e = new BigInteger(1, mRev); - BigInteger n = key.getParameters().getN(); - - BigInteger r = null; - BigInteger s = null; - - do // generate s - { - BigInteger k = null; - - do // generate r - { - do - { - k = new BigInteger(n.bitLength(), random); - } - while (k.equals(ECConstants.ZERO)); - - ECPoint p = key.getParameters().getG().multiply(k); - - BigInteger x = p.getX().toBigInteger(); - - r = x.mod(n); - } - while (r.equals(ECConstants.ZERO)); - - BigInteger d = ((ECPrivateKeyParameters)key).getD(); - - s = (k.multiply(e)).add(d.multiply(r)).mod(n); - } - while (s.equals(ECConstants.ZERO)); - - BigInteger[] res = new BigInteger[2]; - - res[0] = r; - res[1] = s; - - return res; - } - - /** - * return true if the value r and s represent a GOST3410 signature for - * the passed in message (for standard GOST3410 the message should be - * a GOST3411 hash of the real message to be verified). - */ - public boolean verifySignature( - byte[] message, - BigInteger r, - BigInteger s) - { - byte[] mRev = new byte[message.length]; // conversion is little-endian - for (int i = 0; i != mRev.length; i++) - { - mRev[i] = message[mRev.length - 1 - i]; - } - - BigInteger e = new BigInteger(1, mRev); - BigInteger n = key.getParameters().getN(); - - // r in the range [1,n-1] - if (r.compareTo(ECConstants.ONE) < 0 || r.compareTo(n) >= 0) - { - return false; - } - - // s in the range [1,n-1] - if (s.compareTo(ECConstants.ONE) < 0 || s.compareTo(n) >= 0) - { - return false; - } - - BigInteger v = e.modInverse(n); - - BigInteger z1 = s.multiply(v).mod(n); - BigInteger z2 = (n.subtract(r)).multiply(v).mod(n); - - ECPoint G = key.getParameters().getG(); // P - ECPoint Q = ((ECPublicKeyParameters)key).getQ(); - - ECPoint point = ECAlgorithms.sumOfTwoMultiplies(G, z1, Q, z2); - - BigInteger R = point.getX().toBigInteger().mod(n); - - return R.equals(r); - } -} diff --git a/src/org/bouncycastle/crypto/signers/ECNRSigner.java b/src/org/bouncycastle/crypto/signers/ECNRSigner.java deleted file mode 100644 index 496f22e..0000000 --- a/src/org/bouncycastle/crypto/signers/ECNRSigner.java +++ /dev/null @@ -1,182 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.generators.ECKeyPairGenerator; -import org.bouncycastle.crypto.params.ECKeyGenerationParameters; -import org.bouncycastle.crypto.params.ECKeyParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.math.ec.ECAlgorithms; -import org.bouncycastle.math.ec.ECConstants; -import org.bouncycastle.math.ec.ECPoint; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * EC-NR as described in IEEE 1363-2000 - */ -public class ECNRSigner - implements DSA -{ - private boolean forSigning; - private ECKeyParameters key; - private SecureRandom random; - - public void init( - boolean forSigning, - CipherParameters param) - { - this.forSigning = forSigning; - - if (forSigning) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - this.key = (ECPrivateKeyParameters)rParam.getParameters(); - } - else - { - this.random = new SecureRandom(); - this.key = (ECPrivateKeyParameters)param; - } - } - else - { - this.key = (ECPublicKeyParameters)param; - } - } - - // Section 7.2.5 ECSP-NR, pg 34 - /** - * generate a signature for the given message using the key we were - * initialised with. Generally, the order of the curve should be at - * least as long as the hash of the message of interest, and with - * ECNR it *must* be at least as long. - * - * @param digest the digest to be signed. - * @exception DataLengthException if the digest is longer than the key allows - */ - public BigInteger[] generateSignature( - byte[] digest) - { - if (! this.forSigning) - { - throw new IllegalStateException("not initialised for signing"); - } - - BigInteger n = ((ECPrivateKeyParameters)this.key).getParameters().getN(); - int nBitLength = n.bitLength(); - - BigInteger e = new BigInteger(1, digest); - int eBitLength = e.bitLength(); - - ECPrivateKeyParameters privKey = (ECPrivateKeyParameters)key; - - if (eBitLength > nBitLength) - { - throw new DataLengthException("input too large for ECNR key."); - } - - BigInteger r = null; - BigInteger s = null; - - AsymmetricCipherKeyPair tempPair; - do // generate r - { - // generate another, but very temporary, key pair using - // the same EC parameters - ECKeyPairGenerator keyGen = new ECKeyPairGenerator(); - - keyGen.init(new ECKeyGenerationParameters(privKey.getParameters(), this.random)); - - tempPair = keyGen.generateKeyPair(); - - // BigInteger Vx = tempPair.getPublic().getW().getAffineX(); - ECPublicKeyParameters V = (ECPublicKeyParameters)tempPair.getPublic(); // get temp's public key - BigInteger Vx = V.getQ().getX().toBigInteger(); // get the point's x coordinate - - r = Vx.add(e).mod(n); - } - while (r.equals(ECConstants.ZERO)); - - // generate s - BigInteger x = privKey.getD(); // private key value - BigInteger u = ((ECPrivateKeyParameters)tempPair.getPrivate()).getD(); // temp's private key value - s = u.subtract(r.multiply(x)).mod(n); - - BigInteger[] res = new BigInteger[2]; - res[0] = r; - res[1] = s; - - return res; - } - - // Section 7.2.6 ECVP-NR, pg 35 - /** - * return true if the value r and s represent a signature for the - * message passed in. Generally, the order of the curve should be at - * least as long as the hash of the message of interest, and with - * ECNR, it *must* be at least as long. But just in case the signer - * applied mod(n) to the longer digest, this implementation will - * apply mod(n) during verification. - * - * @param digest the digest to be verified. - * @param r the r value of the signature. - * @param s the s value of the signature. - * @exception DataLengthException if the digest is longer than the key allows - */ - public boolean verifySignature( - byte[] digest, - BigInteger r, - BigInteger s) - { - if (this.forSigning) - { - throw new IllegalStateException("not initialised for verifying"); - } - - ECPublicKeyParameters pubKey = (ECPublicKeyParameters)key; - BigInteger n = pubKey.getParameters().getN(); - int nBitLength = n.bitLength(); - - BigInteger e = new BigInteger(1, digest); - int eBitLength = e.bitLength(); - - if (eBitLength > nBitLength) - { - throw new DataLengthException("input too large for ECNR key."); - } - - // r in the range [1,n-1] - if (r.compareTo(ECConstants.ONE) < 0 || r.compareTo(n) >= 0) - { - return false; - } - - // s in the range [0,n-1] NB: ECNR spec says 0 - if (s.compareTo(ECConstants.ZERO) < 0 || s.compareTo(n) >= 0) - { - return false; - } - - // compute P = sG + rW - - ECPoint G = pubKey.getParameters().getG(); - ECPoint W = pubKey.getQ(); - // calculate P using Bouncy math - ECPoint P = ECAlgorithms.sumOfTwoMultiplies(G, s, W, r); - - BigInteger x = P.getX().toBigInteger(); - BigInteger t = r.subtract(x).mod(n); - - return t.equals(e); - } -} diff --git a/src/org/bouncycastle/crypto/signers/GOST3410Signer.java b/src/org/bouncycastle/crypto/signers/GOST3410Signer.java deleted file mode 100644 index bd9dd1e..0000000 --- a/src/org/bouncycastle/crypto/signers/GOST3410Signer.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.params.*; - -import javabc.SecureRandom; -import javabc.BigInteger; - -/** - * GOST R 34.10-94 Signature Algorithm - */ -public class GOST3410Signer - implements DSA -{ - GOST3410KeyParameters key; - - SecureRandom random; - - public void init( - boolean forSigning, - CipherParameters param) - { - if (forSigning) - { - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom rParam = (ParametersWithRandom)param; - - this.random = rParam.getRandom(); - this.key = (GOST3410PrivateKeyParameters)rParam.getParameters(); - } - else - { - this.random = new SecureRandom(); - this.key = (GOST3410PrivateKeyParameters)param; - } - } - else - { - this.key = (GOST3410PublicKeyParameters)param; - } - } - - /** - * generate a signature for the given message using the key we were - * initialised with. For conventional GOST3410 the message should be a GOST3411 - * hash of the message of interest. - * - * @param message the message that will be verified later. - */ - public BigInteger[] generateSignature( - byte[] message) - { - byte[] mRev = new byte[message.length]; // conversion is little-endian - for (int i = 0; i != mRev.length; i++) - { - mRev[i] = message[mRev.length - 1 - i]; - } - - BigInteger m = new BigInteger(1, mRev); - GOST3410Parameters params = key.getParameters(); - BigInteger k; - - do - { - k = new BigInteger(params.getQ().bitLength(), random); - } - while (k.compareTo(params.getQ()) >= 0); - - BigInteger r = params.getA().modPow(k, params.getP()).mod(params.getQ()); - - BigInteger s = k.multiply(m). - add(((GOST3410PrivateKeyParameters)key).getX().multiply(r)). - mod(params.getQ()); - - BigInteger[] res = new BigInteger[2]; - - res[0] = r; - res[1] = s; - - return res; - } - - /** - * return true if the value r and s represent a GOST3410 signature for - * the passed in message for standard GOST3410 the message should be a - * GOST3411 hash of the real message to be verified. - */ - public boolean verifySignature( - byte[] message, - BigInteger r, - BigInteger s) - { - byte[] mRev = new byte[message.length]; // conversion is little-endian - for (int i = 0; i != mRev.length; i++) - { - mRev[i] = message[mRev.length - 1 - i]; - } - - BigInteger m = new BigInteger(1, mRev); - GOST3410Parameters params = key.getParameters(); - BigInteger zero = BigInteger.valueOf(0); - - if (zero.compareTo(r) >= 0 || params.getQ().compareTo(r) <= 0) - { - return false; - } - - if (zero.compareTo(s) >= 0 || params.getQ().compareTo(s) <= 0) - { - return false; - } - - BigInteger v = m.modPow(params.getQ().subtract(new BigInteger("2")),params.getQ()); - - BigInteger z1 = s.multiply(v).mod(params.getQ()); - BigInteger z2 = (params.getQ().subtract(r)).multiply(v).mod(params.getQ()); - - z1 = params.getA().modPow(z1, params.getP()); - z2 = ((GOST3410PublicKeyParameters)key).getY().modPow(z2, params.getP()); - - BigInteger u = z1.multiply(z2).mod(params.getP()).mod(params.getQ()); - - return u.equals(r); - } -} diff --git a/src/org/bouncycastle/crypto/signers/GenericSigner.java b/src/org/bouncycastle/crypto/signers/GenericSigner.java deleted file mode 100644 index 6819e14..0000000 --- a/src/org/bouncycastle/crypto/signers/GenericSigner.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.util.Arrays; - -public class GenericSigner - implements Signer -{ - private final AsymmetricBlockCipher engine; - private final Digest digest; - private boolean forSigning; - - public GenericSigner( - AsymmetricBlockCipher engine, - Digest digest) - { - this.engine = engine; - this.digest = digest; - } - - /** - * initialise the signer for signing or verification. - * - * @param forSigning - * true if for signing, false otherwise - * @param parameters - * necessary parameters. - */ - public void init( - boolean forSigning, - CipherParameters parameters) - { - this.forSigning = forSigning; - AsymmetricKeyParameter k; - - if (parameters instanceof ParametersWithRandom) - { - k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).getParameters(); - } - else - { - k = (AsymmetricKeyParameter)parameters; - } - - if (forSigning && !k.isPrivate()) - { - throw new IllegalArgumentException("signing requires private key"); - } - - if (!forSigning && k.isPrivate()) - { - throw new IllegalArgumentException("verification requires public key"); - } - - reset(); - - engine.init(forSigning, parameters); - } - - /** - * update the internal digest with the byte b - */ - public void update( - byte input) - { - digest.update(input); - } - - /** - * update the internal digest with the byte array in - */ - public void update( - byte[] input, - int inOff, - int length) - { - digest.update(input, inOff, length); - } - - /** - * Generate a signature for the message we've been loaded with using the key - * we were initialised with. - */ - public byte[] generateSignature() - throws CryptoException, DataLengthException - { - if (!forSigning) - { - throw new IllegalStateException("GenericSigner not initialised for signature generation."); - } - - byte[] hash = new byte[digest.getDigestSize()]; - digest.doFinal(hash, 0); - - return engine.processBlock(hash, 0, hash.length); - } - - /** - * return true if the internal state represents the signature described in - * the passed in array. - */ - public boolean verifySignature( - byte[] signature) - { - if (forSigning) - { - throw new IllegalStateException("GenericSigner not initialised for verification"); - } - - byte[] hash = new byte[digest.getDigestSize()]; - digest.doFinal(hash, 0); - - try - { - byte[] sig = engine.processBlock(signature, 0, signature.length); - - return Arrays.constantTimeAreEqual(sig, hash); - } - catch (Exception e) - { - return false; - } - } - - public void reset() - { - digest.reset(); - } -} diff --git a/src/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java b/src/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java deleted file mode 100644 index dbb9ab8..0000000 --- a/src/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java +++ /dev/null @@ -1,621 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.SignerWithRecovery; -import org.bouncycastle.crypto.digests.RIPEMD128Digest; -import org.bouncycastle.crypto.digests.RIPEMD160Digest; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.ParametersWithSalt; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -/** - * ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). - *

        - * Note: the usual length for the salt is the length of the hash - * function used in bytes. - */ -public class ISO9796d2PSSSigner - implements SignerWithRecovery -{ - static final public int TRAILER_IMPLICIT = 0xBC; - static final public int TRAILER_RIPEMD160 = 0x31CC; - static final public int TRAILER_RIPEMD128 = 0x32CC; - static final public int TRAILER_SHA1 = 0x33CC; - - private Digest digest; - private AsymmetricBlockCipher cipher; - - private SecureRandom random; - private byte[] standardSalt; - - private int hLen; - private int trailer; - private int keyBits; - private byte[] block; - private byte[] mBuf; - private int messageLength; - private int saltLength; - private boolean fullMessage; - private byte[] recoveredMessage; - - /** - * Generate a signer for the with either implicit or explicit trailers - * for ISO9796-2, scheme 2 or 3. - * - * @param cipher base cipher to use for signature creation/verification - * @param digest digest to use. - * @param saltLength length of salt in bytes. - * @param implicit whether or not the trailer is implicit or gives the hash. - */ - public ISO9796d2PSSSigner( - AsymmetricBlockCipher cipher, - Digest digest, - int saltLength, - boolean implicit) - { - this.cipher = cipher; - this.digest = digest; - this.hLen = digest.getDigestSize(); - this.saltLength = saltLength; - - if (implicit) - { - trailer = TRAILER_IMPLICIT; - } - else - { - if (digest instanceof SHA1Digest) - { - trailer = TRAILER_SHA1; - } - else if (digest instanceof RIPEMD160Digest) - { - trailer = TRAILER_RIPEMD160; - } - else if (digest instanceof RIPEMD128Digest) - { - trailer = TRAILER_RIPEMD128; - } - else - { - throw new IllegalArgumentException("no valid trailer for digest"); - } - } - } - - /** - * Constructor for a signer with an explicit digest trailer. - * - * @param cipher cipher to use. - * @param digest digest to sign with. - * @param saltLength length of salt in bytes. - */ - public ISO9796d2PSSSigner( - AsymmetricBlockCipher cipher, - Digest digest, - int saltLength) - { - this(cipher, digest, saltLength, false); - } - - /** - * Initialise the signer. - * - * @param forSigning true if for signing, false if for verification. - * @param param parameters for signature generation/verification. If the - * parameters are for generation they should be a ParametersWithRandom, - * a ParametersWithSalt, or just an RSAKeyParameters object. If RSAKeyParameters - * are passed in a SecureRandom will be created. - * @exception IllegalArgumentException if wrong parameter type or a fixed - * salt is passed in which is the wrong length. - */ - public void init( - boolean forSigning, - CipherParameters param) - { - RSAKeyParameters kParam; - int lengthOfSalt = saltLength; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom p = (ParametersWithRandom)param; - - kParam = (RSAKeyParameters)p.getParameters(); - if (forSigning) - { - random = p.getRandom(); - } - } - else if (param instanceof ParametersWithSalt) - { - ParametersWithSalt p = (ParametersWithSalt)param; - - kParam = (RSAKeyParameters)p.getParameters(); - standardSalt = p.getSalt(); - lengthOfSalt = standardSalt.length; - if (standardSalt.length != saltLength) - { - throw new IllegalArgumentException("Fixed salt is of wrong length"); - } - } - else - { - kParam = (RSAKeyParameters)param; - if (forSigning) - { - random = new SecureRandom(); - } - } - - cipher.init(forSigning, kParam); - - keyBits = kParam.getModulus().bitLength(); - - block = new byte[(keyBits + 7) / 8]; - - if (trailer == TRAILER_IMPLICIT) - { - mBuf = new byte[block.length - digest.getDigestSize() - lengthOfSalt - 1 - 1]; - } - else - { - mBuf = new byte[block.length - digest.getDigestSize() - lengthOfSalt - 1 - 2]; - } - - reset(); - } - - /** - * compare two byte arrays - constant time - */ - private boolean isSameAs( - byte[] a, - byte[] b) - { - boolean isOkay = true; - - if (messageLength != b.length) - { - isOkay = false; - } - - for (int i = 0; i != b.length; i++) - { - if (a[i] != b[i]) - { - isOkay = false; - } - } - - return isOkay; - } - - /** - * clear possible sensitive data - */ - private void clearBlock( - byte[] block) - { - for (int i = 0; i != block.length; i++) - { - block[i] = 0; - } - } - - public void updateWithRecoveredMessage(byte[] signature) - throws InvalidCipherTextException - { - throw new RuntimeException("not implemented"); // TODO: - } - - /** - * update the internal digest with the byte b - */ - public void update( - byte b) - { - if (messageLength < mBuf.length) - { - mBuf[messageLength++] = b; - } - else - { - digest.update(b); - } - } - - /** - * update the internal digest with the byte array in - */ - public void update( - byte[] in, - int off, - int len) - { - while (len > 0 && messageLength < mBuf.length) - { - this.update(in[off]); - off++; - len--; - } - - if (len > 0) - { - digest.update(in, off, len); - } - } - - /** - * reset the internal state - */ - public void reset() - { - digest.reset(); - messageLength = 0; - if (mBuf != null) - { - clearBlock(mBuf); - } - if (recoveredMessage != null) - { - clearBlock(recoveredMessage); - recoveredMessage = null; - } - fullMessage = false; - } - - /** - * generate a signature for the loaded message using the key we were - * initialised with. - */ - public byte[] generateSignature() - throws CryptoException - { - int digSize = digest.getDigestSize(); - - byte[] m2Hash = new byte[digSize]; - - digest.doFinal(m2Hash, 0); - - byte[] C = new byte[8]; - LtoOSP(messageLength * 8, C); - - digest.update(C, 0, C.length); - - digest.update(mBuf, 0, messageLength); - - digest.update(m2Hash, 0, m2Hash.length); - - byte[] salt; - - if (standardSalt != null) - { - salt = standardSalt; - } - else - { - salt = new byte[saltLength]; - random.nextBytes(salt); - } - - digest.update(salt, 0, salt.length); - - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - int tLength = 2; - if (trailer == TRAILER_IMPLICIT) - { - tLength = 1; - } - - int off = block.length - messageLength - salt.length - hLen - tLength - 1; - - block[off] = 0x01; - - System.arraycopy(mBuf, 0, block, off + 1, messageLength); - System.arraycopy(salt, 0, block, off + 1 + messageLength, salt.length); - - byte[] dbMask = maskGeneratorFunction1(hash, 0, hash.length, block.length - hLen - tLength); - for (int i = 0; i != dbMask.length; i++) - { - block[i] ^= dbMask[i]; - } - - System.arraycopy(hash, 0, block, block.length - hLen - tLength, hLen); - - if (trailer == TRAILER_IMPLICIT) - { - block[block.length - 1] = (byte)TRAILER_IMPLICIT; - } - else - { - block[block.length - 2] = (byte)(trailer >>> 8); - block[block.length - 1] = (byte)trailer; - } - - block[0] &= 0x7f; - - byte[] b = cipher.processBlock(block, 0, block.length); - - clearBlock(mBuf); - clearBlock(block); - messageLength = 0; - - return b; - } - - /** - * return true if the signature represents a ISO9796-2 signature - * for the passed in message. - */ - public boolean verifySignature( - byte[] signature) - { - byte[] block; - - try - { - block = cipher.processBlock(signature, 0, signature.length); - } - catch (Exception e) - { - return false; - } - - // - // adjust block size for leading zeroes if necessary - // - if (block.length < (keyBits + 7) / 8) - { - byte[] tmp = new byte[(keyBits + 7) / 8]; - - System.arraycopy(block, 0, tmp, tmp.length - block.length, block.length); - clearBlock(block); - block = tmp; - } - - int tLength; - - if (((block[block.length - 1] & 0xFF) ^ 0xBC) == 0) - { - tLength = 1; - } - else - { - int sigTrail = ((block[block.length - 2] & 0xFF) << 8) | (block[block.length - 1] & 0xFF); - - switch (sigTrail) - { - case TRAILER_RIPEMD160: - if (!(digest instanceof RIPEMD160Digest)) - { - throw new IllegalStateException("signer should be initialised with RIPEMD160"); - } - break; - case TRAILER_SHA1: - if (!(digest instanceof SHA1Digest)) - { - throw new IllegalStateException("signer should be initialised with SHA1"); - } - break; - case TRAILER_RIPEMD128: - if (!(digest instanceof RIPEMD128Digest)) - { - throw new IllegalStateException("signer should be initialised with RIPEMD128"); - } - break; - default: - throw new IllegalArgumentException("unrecognised hash in signature"); - } - - tLength = 2; - } - - // - // calculate H(m2) - // - byte[] m2Hash = new byte[hLen]; - digest.doFinal(m2Hash, 0); - - // - // remove the mask - // - byte[] dbMask = maskGeneratorFunction1(block, block.length - hLen - tLength, hLen, block.length - hLen - tLength); - for (int i = 0; i != dbMask.length; i++) - { - block[i] ^= dbMask[i]; - } - - block[0] &= 0x7f; - - // - // find out how much padding we've got - // - int mStart = 0; - for (; mStart != block.length; mStart++) - { - if (block[mStart] == 0x01) - { - break; - } - } - - mStart++; - - if (mStart >= block.length) - { - clearBlock(block); - return false; - } - - fullMessage = (mStart > 1); - - recoveredMessage = new byte[dbMask.length - mStart - saltLength]; - - System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); - - // - // check the hashes - // - byte[] C = new byte[8]; - LtoOSP(recoveredMessage.length * 8, C); - - digest.update(C, 0, C.length); - - if (recoveredMessage.length != 0) - { - digest.update(recoveredMessage, 0, recoveredMessage.length); - } - - digest.update(m2Hash, 0, m2Hash.length); - - // Update for the salt - digest.update(block, mStart + recoveredMessage.length, saltLength); - - byte[] hash = new byte[digest.getDigestSize()]; - digest.doFinal(hash, 0); - - int off = block.length - tLength - hash.length; - - boolean isOkay = true; - - for (int i = 0; i != hash.length; i++) - { - if (hash[i] != block[off + i]) - { - isOkay = false; - } - } - - clearBlock(block); - clearBlock(hash); - - if (!isOkay) - { - fullMessage = false; - clearBlock(recoveredMessage); - return false; - } - - // - // if they've input a message check what we've recovered against - // what was input. - // - if (messageLength != 0) - { - if (!isSameAs(mBuf, recoveredMessage)) - { - clearBlock(mBuf); - return false; - } - - messageLength = 0; - } - - clearBlock(mBuf); - return true; - } - - /** - * Return true if the full message was recoveredMessage. - * - * @return true on full message recovery, false otherwise, or if not sure. - * @see org.bouncycastle.crypto.SignerWithRecovery#hasFullMessage() - */ - public boolean hasFullMessage() - { - return fullMessage; - } - - /** - * Return a reference to the recoveredMessage message. - * - * @return the full/partial recoveredMessage message. - * @see org.bouncycastle.crypto.SignerWithRecovery#getRecoveredMessage() - */ - public byte[] getRecoveredMessage() - { - return recoveredMessage; - } - - /** - * int to octet string. - */ - private void ItoOSP( - int i, - byte[] sp) - { - sp[0] = (byte)(i >>> 24); - sp[1] = (byte)(i >>> 16); - sp[2] = (byte)(i >>> 8); - sp[3] = (byte)(i >>> 0); - } - - /** - * long to octet string. - */ - private void LtoOSP( - long l, - byte[] sp) - { - sp[0] = (byte)(l >>> 56); - sp[1] = (byte)(l >>> 48); - sp[2] = (byte)(l >>> 40); - sp[3] = (byte)(l >>> 32); - sp[4] = (byte)(l >>> 24); - sp[5] = (byte)(l >>> 16); - sp[6] = (byte)(l >>> 8); - sp[7] = (byte)(l >>> 0); - } - /** - * mask generator function, as described in PKCS1v2. - */ - private byte[] maskGeneratorFunction1( - byte[] Z, - int zOff, - int zLen, - int length) - { - byte[] mask = new byte[length]; - byte[] hashBuf = new byte[hLen]; - byte[] C = new byte[4]; - int counter = 0; - - digest.reset(); - - while (counter < (length / hLen)) - { - ItoOSP(counter, C); - - digest.update(Z, zOff, zLen); - digest.update(C, 0, C.length); - digest.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, mask, counter * hLen, hLen); - - counter++; - } - - if ((counter * hLen) < length) - { - ItoOSP(counter, C); - - digest.update(Z, zOff, zLen); - digest.update(C, 0, C.length); - digest.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, mask, counter * hLen, mask.length - (counter * hLen)); - } - - return mask; - } -} diff --git a/src/org/bouncycastle/crypto/signers/ISO9796d2Signer.java b/src/org/bouncycastle/crypto/signers/ISO9796d2Signer.java deleted file mode 100644 index 9aab4ff..0000000 --- a/src/org/bouncycastle/crypto/signers/ISO9796d2Signer.java +++ /dev/null @@ -1,614 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import java.util.Hashtable; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.SignerWithRecovery; -import org.bouncycastle.crypto.params.RSAKeyParameters; -import org.bouncycastle.util.Arrays; - -/** - * ISO9796-2 - mechanism using a hash function with recovery (scheme 1) - */ -public class ISO9796d2Signer - implements SignerWithRecovery -{ - static final public int TRAILER_IMPLICIT = 0xBC; - static final public int TRAILER_RIPEMD160 = 0x31CC; - static final public int TRAILER_RIPEMD128 = 0x32CC; - static final public int TRAILER_SHA1 = 0x33CC; - static final public int TRAILER_SHA256 = 0x34CC; - static final public int TRAILER_SHA512 = 0x35CC; - static final public int TRAILER_SHA384 = 0x36CC; - static final public int TRAILER_WHIRLPOOL = 0x37CC; - - private static Hashtable trailerMap = new Hashtable(); - - static - { - trailerMap.put("RIPEMD128", new Integer(TRAILER_RIPEMD128)); - trailerMap.put("RIPEMD160", new Integer(TRAILER_RIPEMD160)); - - trailerMap.put("SHA-1", new Integer(TRAILER_SHA1)); - trailerMap.put("SHA-256", new Integer(TRAILER_SHA256)); - trailerMap.put("SHA-384", new Integer(TRAILER_SHA384)); - trailerMap.put("SHA-512", new Integer(TRAILER_SHA512)); - - trailerMap.put("Whirlpool", new Integer(TRAILER_WHIRLPOOL)); - } - - private Digest digest; - private AsymmetricBlockCipher cipher; - - private int trailer; - private int keyBits; - private byte[] block; - private byte[] mBuf; - private int messageLength; - private boolean fullMessage; - private byte[] recoveredMessage; - - private byte[] preSig; - private byte[] preBlock; - - /** - * Generate a signer for the with either implicit or explicit trailers - * for ISO9796-2. - * - * @param cipher base cipher to use for signature creation/verification - * @param digest digest to use. - * @param implicit whether or not the trailer is implicit or gives the hash. - */ - public ISO9796d2Signer( - AsymmetricBlockCipher cipher, - Digest digest, - boolean implicit) - { - this.cipher = cipher; - this.digest = digest; - - if (implicit) - { - trailer = TRAILER_IMPLICIT; - } - else - { - Integer trailerObj = (Integer)trailerMap.get(digest.getAlgorithmName()); - - if (trailerObj != null) - { - trailer = trailerObj.intValue(); - } - else - { - throw new IllegalArgumentException("no valid trailer for digest"); - } - } - } - - /** - * Constructor for a signer with an explicit digest trailer. - * - * @param cipher cipher to use. - * @param digest digest to sign with. - */ - public ISO9796d2Signer( - AsymmetricBlockCipher cipher, - Digest digest) - { - this(cipher, digest, false); - } - - public void init( - boolean forSigning, - CipherParameters param) - { - RSAKeyParameters kParam = (RSAKeyParameters)param; - - cipher.init(forSigning, kParam); - - keyBits = kParam.getModulus().bitLength(); - - block = new byte[(keyBits + 7) / 8]; - - if (trailer == TRAILER_IMPLICIT) - { - mBuf = new byte[block.length - digest.getDigestSize() - 2]; - } - else - { - mBuf = new byte[block.length - digest.getDigestSize() - 3]; - } - - reset(); - } - - /** - * compare two byte arrays - constant time - */ - private boolean isSameAs( - byte[] a, - byte[] b) - { - boolean isOkay = true; - - if (messageLength > mBuf.length) - { - if (mBuf.length > b.length) - { - isOkay = false; - } - - for (int i = 0; i != mBuf.length; i++) - { - if (a[i] != b[i]) - { - isOkay = false; - } - } - } - else - { - if (messageLength != b.length) - { - isOkay = false; - } - - for (int i = 0; i != b.length; i++) - { - if (a[i] != b[i]) - { - isOkay = false; - } - } - } - - return isOkay; - } - - /** - * clear possible sensitive data - */ - private void clearBlock( - byte[] block) - { - for (int i = 0; i != block.length; i++) - { - block[i] = 0; - } - } - - public void updateWithRecoveredMessage(byte[] signature) - throws InvalidCipherTextException - { - byte[] block = cipher.processBlock(signature, 0, signature.length); - - if (((block[0] & 0xC0) ^ 0x40) != 0) - { - throw new InvalidCipherTextException("malformed signature"); - } - - if (((block[block.length - 1] & 0xF) ^ 0xC) != 0) - { - throw new InvalidCipherTextException("malformed signature"); - } - - int delta = 0; - - if (((block[block.length - 1] & 0xFF) ^ 0xBC) == 0) - { - delta = 1; - } - else - { - int sigTrail = ((block[block.length - 2] & 0xFF) << 8) | (block[block.length - 1] & 0xFF); - Integer trailerObj = (Integer)trailerMap.get(digest.getAlgorithmName()); - - if (trailerObj != null) - { - if (sigTrail != trailerObj.intValue()) - { - throw new IllegalStateException("signer initialised with wrong digest for trailer " + sigTrail); - } - } - else - { - throw new IllegalArgumentException("unrecognised hash in signature"); - } - - delta = 2; - } - - // - // find out how much padding we've got - // - int mStart = 0; - - for (mStart = 0; mStart != block.length; mStart++) - { - if (((block[mStart] & 0x0f) ^ 0x0a) == 0) - { - break; - } - } - - mStart++; - - int off = block.length - delta - digest.getDigestSize(); - - // - // there must be at least one byte of message string - // - if ((off - mStart) <= 0) - { - throw new InvalidCipherTextException("malformed block"); - } - - // - // if we contain the whole message as well, check the hash of that. - // - if ((block[0] & 0x20) == 0) - { - fullMessage = true; - - recoveredMessage = new byte[off - mStart]; - System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); - } - else - { - fullMessage = false; - - recoveredMessage = new byte[off - mStart]; - System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); - } - - preSig = signature; - preBlock = block; - - digest.update(recoveredMessage, 0, recoveredMessage.length); - messageLength = recoveredMessage.length; - } - - /** - * update the internal digest with the byte b - */ - public void update( - byte b) - { - digest.update(b); - - if (preSig == null && messageLength < mBuf.length) - { - mBuf[messageLength] = b; - } - - messageLength++; - } - - /** - * update the internal digest with the byte array in - */ - public void update( - byte[] in, - int off, - int len) - { - digest.update(in, off, len); - - if (preSig == null && messageLength < mBuf.length) - { - for (int i = 0; i < len && (i + messageLength) < mBuf.length; i++) - { - mBuf[messageLength + i] = in[off + i]; - } - } - - messageLength += len; - } - - /** - * reset the internal state - */ - public void reset() - { - digest.reset(); - messageLength = 0; - clearBlock(mBuf); - - if (recoveredMessage != null) - { - clearBlock(recoveredMessage); - } - - recoveredMessage = null; - fullMessage = false; - } - - /** - * generate a signature for the loaded message using the key we were - * initialised with. - */ - public byte[] generateSignature() - throws CryptoException - { - int digSize = digest.getDigestSize(); - - int t = 0; - int delta = 0; - - if (trailer == TRAILER_IMPLICIT) - { - t = 8; - delta = block.length - digSize - 1; - digest.doFinal(block, delta); - block[block.length - 1] = (byte)TRAILER_IMPLICIT; - } - else - { - t = 16; - delta = block.length - digSize - 2; - digest.doFinal(block, delta); - block[block.length - 2] = (byte)(trailer >>> 8); - block[block.length - 1] = (byte)trailer; - } - - byte header = 0; - int x = (digSize + messageLength) * 8 + t + 4 - keyBits; - - if (x > 0) - { - int mR = messageLength - ((x + 7) / 8); - header = 0x60; - - delta -= mR; - - System.arraycopy(mBuf, 0, block, delta, mR); - } - else - { - header = 0x40; - delta -= messageLength; - - System.arraycopy(mBuf, 0, block, delta, messageLength); - } - - if ((delta - 1) > 0) - { - for (int i = delta - 1; i != 0; i--) - { - block[i] = (byte)0xbb; - } - block[delta - 1] ^= (byte)0x01; - block[0] = (byte)0x0b; - block[0] |= header; - } - else - { - block[0] = (byte)0x0a; - block[0] |= header; - } - - byte[] b = cipher.processBlock(block, 0, block.length); - - clearBlock(mBuf); - clearBlock(block); - - return b; - } - - /** - * return true if the signature represents a ISO9796-2 signature - * for the passed in message. - */ - public boolean verifySignature( - byte[] signature) - { - byte[] block = null; - boolean updateWithRecoveredCalled; - - if (preSig == null) - { - updateWithRecoveredCalled = false; - try - { - block = cipher.processBlock(signature, 0, signature.length); - } - catch (Exception e) - { - return false; - } - } - else - { - if (!Arrays.areEqual(preSig, signature)) - { - throw new IllegalStateException("updateWithRecoveredMessage called on different signature"); - } - - updateWithRecoveredCalled = true; - block = preBlock; - - preSig = null; - preBlock = null; - } - - if (((block[0] & 0xC0) ^ 0x40) != 0) - { - return returnFalse(block); - } - - if (((block[block.length - 1] & 0xF) ^ 0xC) != 0) - { - return returnFalse(block); - } - - int delta = 0; - - if (((block[block.length - 1] & 0xFF) ^ 0xBC) == 0) - { - delta = 1; - } - else - { - int sigTrail = ((block[block.length - 2] & 0xFF) << 8) | (block[block.length - 1] & 0xFF); - Integer trailerObj = (Integer)trailerMap.get(digest.getAlgorithmName()); - - if (trailerObj != null) - { - if (sigTrail != trailerObj.intValue()) - { - throw new IllegalStateException("signer initialised with wrong digest for trailer " + sigTrail); - } - } - else - { - throw new IllegalArgumentException("unrecognised hash in signature"); - } - - delta = 2; - } - - // - // find out how much padding we've got - // - int mStart = 0; - - for (mStart = 0; mStart != block.length; mStart++) - { - if (((block[mStart] & 0x0f) ^ 0x0a) == 0) - { - break; - } - } - - mStart++; - - // - // check the hashes - // - byte[] hash = new byte[digest.getDigestSize()]; - - int off = block.length - delta - hash.length; - - // - // there must be at least one byte of message string - // - if ((off - mStart) <= 0) - { - return returnFalse(block); - } - - // - // if we contain the whole message as well, check the hash of that. - // - if ((block[0] & 0x20) == 0) - { - fullMessage = true; - - // check right number of bytes passed in. - if (messageLength > off - mStart) - { - return returnFalse(block); - } - - digest.reset(); - digest.update(block, mStart, off - mStart); - digest.doFinal(hash, 0); - - boolean isOkay = true; - - for (int i = 0; i != hash.length; i++) - { - block[off + i] ^= hash[i]; - if (block[off + i] != 0) - { - isOkay = false; - } - } - - if (!isOkay) - { - return returnFalse(block); - } - - recoveredMessage = new byte[off - mStart]; - System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); - } - else - { - fullMessage = false; - - digest.doFinal(hash, 0); - - boolean isOkay = true; - - for (int i = 0; i != hash.length; i++) - { - block[off + i] ^= hash[i]; - if (block[off + i] != 0) - { - isOkay = false; - } - } - - if (!isOkay) - { - return returnFalse(block); - } - - recoveredMessage = new byte[off - mStart]; - System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); - } - - // - // if they've input a message check what we've recovered against - // what was input. - // - if (messageLength != 0 && !updateWithRecoveredCalled) - { - if (!isSameAs(mBuf, recoveredMessage)) - { - return returnFalse(block); - } - } - - clearBlock(mBuf); - clearBlock(block); - - return true; - } - - private boolean returnFalse(byte[] block) - { - clearBlock(mBuf); - clearBlock(block); - - return false; - } - - /** - * Return true if the full message was recoveredMessage. - * - * @return true on full message recovery, false otherwise. - * @see org.bouncycastle.crypto.SignerWithRecovery#hasFullMessage() - */ - public boolean hasFullMessage() - { - return fullMessage; - } - - /** - * Return a reference to the recoveredMessage message. - * - * @return the full/partial recoveredMessage message. - * @see org.bouncycastle.crypto.SignerWithRecovery#getRecoveredMessage() - */ - public byte[] getRecoveredMessage() - { - return recoveredMessage; - } -} diff --git a/src/org/bouncycastle/crypto/signers/PSSSigner.java b/src/org/bouncycastle/crypto/signers/PSSSigner.java deleted file mode 100644 index 8501f70..0000000 --- a/src/org/bouncycastle/crypto/signers/PSSSigner.java +++ /dev/null @@ -1,348 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSABlindingParameters; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -/** - * RSA-PSS as described in PKCS# 1 v 2.1. - *

        - * Note: the usual value for the salt length is the number of - * bytes in the hash function. - */ -public class PSSSigner - implements Signer -{ - static final public byte TRAILER_IMPLICIT = (byte)0xBC; - - private Digest contentDigest; - private Digest mgfDigest; - private AsymmetricBlockCipher cipher; - private SecureRandom random; - - private int hLen; - private int mgfhLen; - private int sLen; - private int emBits; - private byte[] salt; - private byte[] mDash; - private byte[] block; - private byte trailer; - - /** - * basic constructor - * - * @param cipher the asymmetric cipher to use. - * @param digest the digest to use. - * @param sLen the length of the salt to use (in bytes). - */ - public PSSSigner( - AsymmetricBlockCipher cipher, - Digest digest, - int sLen) - { - this(cipher, digest, sLen, TRAILER_IMPLICIT); - } - - public PSSSigner( - AsymmetricBlockCipher cipher, - Digest contentDigest, - Digest mgfDigest, - int sLen) - { - this(cipher, contentDigest, mgfDigest, sLen, TRAILER_IMPLICIT); - } - - public PSSSigner( - AsymmetricBlockCipher cipher, - Digest digest, - int sLen, - byte trailer) - { - this(cipher, digest, digest, sLen, trailer); - } - - public PSSSigner( - AsymmetricBlockCipher cipher, - Digest contentDigest, - Digest mgfDigest, - int sLen, - byte trailer) - { - this.cipher = cipher; - this.contentDigest = contentDigest; - this.mgfDigest = mgfDigest; - this.hLen = contentDigest.getDigestSize(); - this.mgfhLen = mgfDigest.getDigestSize(); - this.sLen = sLen; - this.salt = new byte[sLen]; - this.mDash = new byte[8 + sLen + hLen]; - this.trailer = trailer; - } - - public void init( - boolean forSigning, - CipherParameters param) - { - CipherParameters params; - - if (param instanceof ParametersWithRandom) - { - ParametersWithRandom p = (ParametersWithRandom)param; - - params = p.getParameters(); - random = p.getRandom(); - } - else - { - params = param; - if (forSigning) - { - random = new SecureRandom(); - } - } - - cipher.init(forSigning, params); - - RSAKeyParameters kParam; - - if (params instanceof RSABlindingParameters) - { - kParam = ((RSABlindingParameters)params).getPublicKey(); - } - else - { - kParam = (RSAKeyParameters)params; - } - - emBits = kParam.getModulus().bitLength() - 1; - - if (emBits < (8 * hLen + 8 * sLen + 9)) - { - throw new IllegalArgumentException("key too small for specified hash and salt lengths"); - } - - block = new byte[(emBits + 7) / 8]; - - reset(); - } - - /** - * clear possible sensitive data - */ - private void clearBlock( - byte[] block) - { - for (int i = 0; i != block.length; i++) - { - block[i] = 0; - } - } - - /** - * update the internal digest with the byte b - */ - public void update( - byte b) - { - contentDigest.update(b); - } - - /** - * update the internal digest with the byte array in - */ - public void update( - byte[] in, - int off, - int len) - { - contentDigest.update(in, off, len); - } - - /** - * reset the internal state - */ - public void reset() - { - contentDigest.reset(); - } - - /** - * generate a signature for the message we've been loaded with using - * the key we were initialised with. - */ - public byte[] generateSignature() - throws CryptoException, DataLengthException - { - contentDigest.doFinal(mDash, mDash.length - hLen - sLen); - - if (sLen != 0) - { - random.nextBytes(salt); - - System.arraycopy(salt, 0, mDash, mDash.length - sLen, sLen); - } - - byte[] h = new byte[hLen]; - - contentDigest.update(mDash, 0, mDash.length); - - contentDigest.doFinal(h, 0); - - block[block.length - sLen - 1 - hLen - 1] = 0x01; - System.arraycopy(salt, 0, block, block.length - sLen - hLen - 1, sLen); - - byte[] dbMask = maskGeneratorFunction1(h, 0, h.length, block.length - hLen - 1); - for (int i = 0; i != dbMask.length; i++) - { - block[i] ^= dbMask[i]; - } - - block[0] &= (0xff >> ((block.length * 8) - emBits)); - - System.arraycopy(h, 0, block, block.length - hLen - 1, hLen); - - block[block.length - 1] = trailer; - - byte[] b = cipher.processBlock(block, 0, block.length); - - clearBlock(block); - - return b; - } - - /** - * return true if the internal state represents the signature described - * in the passed in array. - */ - public boolean verifySignature( - byte[] signature) - { - contentDigest.doFinal(mDash, mDash.length - hLen - sLen); - - try - { - byte[] b = cipher.processBlock(signature, 0, signature.length); - System.arraycopy(b, 0, block, block.length - b.length, b.length); - } - catch (Exception e) - { - return false; - } - - if (block[block.length - 1] != trailer) - { - clearBlock(block); - return false; - } - - byte[] dbMask = maskGeneratorFunction1(block, block.length - hLen - 1, hLen, block.length - hLen - 1); - - for (int i = 0; i != dbMask.length; i++) - { - block[i] ^= dbMask[i]; - } - - block[0] &= (0xff >> ((block.length * 8) - emBits)); - - for (int i = 0; i != block.length - hLen - sLen - 2; i++) - { - if (block[i] != 0) - { - clearBlock(block); - return false; - } - } - - if (block[block.length - hLen - sLen - 2] != 0x01) - { - clearBlock(block); - return false; - } - - System.arraycopy(block, block.length - sLen - hLen - 1, mDash, mDash.length - sLen, sLen); - - contentDigest.update(mDash, 0, mDash.length); - contentDigest.doFinal(mDash, mDash.length - hLen); - - for (int i = block.length - hLen - 1, j = mDash.length - hLen; - j != mDash.length; i++, j++) - { - if ((block[i] ^ mDash[j]) != 0) - { - clearBlock(mDash); - clearBlock(block); - return false; - } - } - - clearBlock(mDash); - clearBlock(block); - - return true; - } - - /** - * int to octet string. - */ - private void ItoOSP( - int i, - byte[] sp) - { - sp[0] = (byte)(i >>> 24); - sp[1] = (byte)(i >>> 16); - sp[2] = (byte)(i >>> 8); - sp[3] = (byte)(i >>> 0); - } - - /** - * mask generator function, as described in PKCS1v2. - */ - private byte[] maskGeneratorFunction1( - byte[] Z, - int zOff, - int zLen, - int length) - { - byte[] mask = new byte[length]; - byte[] hashBuf = new byte[mgfhLen]; - byte[] C = new byte[4]; - int counter = 0; - - mgfDigest.reset(); - - while (counter < (length / mgfhLen)) - { - ItoOSP(counter, C); - - mgfDigest.update(Z, zOff, zLen); - mgfDigest.update(C, 0, C.length); - mgfDigest.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, mask, counter * mgfhLen, mgfhLen); - - counter++; - } - - if ((counter * mgfhLen) < length) - { - ItoOSP(counter, C); - - mgfDigest.update(Z, zOff, zLen); - mgfDigest.update(C, 0, C.length); - mgfDigest.doFinal(hashBuf, 0); - - System.arraycopy(hashBuf, 0, mask, counter * mgfhLen, mask.length - (counter * mgfhLen)); - } - - return mask; - } -} diff --git a/src/org/bouncycastle/crypto/signers/RSADigestSigner.java b/src/org/bouncycastle/crypto/signers/RSADigestSigner.java deleted file mode 100644 index c1ae411..0000000 --- a/src/org/bouncycastle/crypto/signers/RSADigestSigner.java +++ /dev/null @@ -1,223 +0,0 @@ -package org.bouncycastle.crypto.signers; - -import java.io.IOException; -import java.util.Hashtable; - -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; -import org.bouncycastle.asn1.x509.DigestInfo; -import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; -import org.bouncycastle.crypto.AsymmetricBlockCipher; -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.DataLengthException; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.encodings.PKCS1Encoding; -import org.bouncycastle.crypto.engines.RSABlindedEngine; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.util.Arrays; - -public class RSADigestSigner - implements Signer -{ - private final AsymmetricBlockCipher rsaEngine = new PKCS1Encoding(new RSABlindedEngine()); - private final AlgorithmIdentifier algId; - private final Digest digest; - private boolean forSigning; - - private static final Hashtable oidMap = new Hashtable(); - - /* - * Load OID table. - */ - static - { - - oidMap.put("SHA-1", X509ObjectIdentifiers.id_SHA1); - - oidMap.put("MD2", PKCSObjectIdentifiers.md2); - oidMap.put("MD4", PKCSObjectIdentifiers.md4); - oidMap.put("MD5", PKCSObjectIdentifiers.md5); - } - - public RSADigestSigner( - Digest digest) - { - this.digest = digest; - - algId = new AlgorithmIdentifier((ASN1ObjectIdentifier)oidMap.get(digest.getAlgorithmName()), DERNull.INSTANCE); - } - - /** - * @deprecated - */ - public String getAlgorithmName() - { - return digest.getAlgorithmName() + "withRSA"; - } - - /** - * initialise the signer for signing or verification. - * - * @param forSigning - * true if for signing, false otherwise - * @param parameters - * necessary parameters. - */ - public void init( - boolean forSigning, - CipherParameters parameters) - { - this.forSigning = forSigning; - AsymmetricKeyParameter k; - - if (parameters instanceof ParametersWithRandom) - { - k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).getParameters(); - } - else - { - k = (AsymmetricKeyParameter)parameters; - } - - if (forSigning && !k.isPrivate()) - { - throw new IllegalArgumentException("signing requires private key"); - } - - if (!forSigning && k.isPrivate()) - { - throw new IllegalArgumentException("verification requires public key"); - } - - reset(); - - rsaEngine.init(forSigning, parameters); - } - - /** - * update the internal digest with the byte b - */ - public void update( - byte input) - { - digest.update(input); - } - - /** - * update the internal digest with the byte array in - */ - public void update( - byte[] input, - int inOff, - int length) - { - digest.update(input, inOff, length); - } - - /** - * Generate a signature for the message we've been loaded with using the key - * we were initialised with. - */ - public byte[] generateSignature() - throws CryptoException, DataLengthException - { - if (!forSigning) - { - throw new IllegalStateException("RSADigestSigner not initialised for signature generation."); - } - - byte[] hash = new byte[digest.getDigestSize()]; - digest.doFinal(hash, 0); - - try - { - byte[] data = derEncode(hash); - return rsaEngine.processBlock(data, 0, data.length); - } - catch (IOException e) - { - throw new CryptoException("unable to encode signature: " + e.getMessage(), e); - } - } - - /** - * return true if the internal state represents the signature described in - * the passed in array. - */ - public boolean verifySignature( - byte[] signature) - { - if (forSigning) - { - throw new IllegalStateException("RSADigestSigner not initialised for verification"); - } - - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - byte[] sig; - byte[] expected; - - try - { - sig = rsaEngine.processBlock(signature, 0, signature.length); - expected = derEncode(hash); - } - catch (Exception e) - { - return false; - } - - if (sig.length == expected.length) - { - return Arrays.constantTimeAreEqual(sig, expected); - } - else if (sig.length == expected.length - 2) // NULL left out - { - int sigOffset = sig.length - hash.length - 2; - int expectedOffset = expected.length - hash.length - 2; - - expected[1] -= 2; // adjust lengths - expected[3] -= 2; - - int nonEqual = 0; - - for (int i = 0; i < hash.length; i++) - { - nonEqual |= (sig[sigOffset + i] ^ expected[expectedOffset + i]); - } - - for (int i = 0; i < sigOffset; i++) - { - nonEqual |= (sig[i] ^ expected[i]); // check header less NULL - } - - return nonEqual == 0; - } - else - { - return false; - } - } - - public void reset() - { - digest.reset(); - } - - private byte[] derEncode( - byte[] hash) - throws IOException - { - DigestInfo dInfo = new DigestInfo(algId, hash); - - return dInfo.getEncoded(ASN1Encoding.DER); - } -} diff --git a/src/org/bouncycastle/crypto/signers/package.html b/src/org/bouncycastle/crypto/signers/package.html deleted file mode 100644 index 151d3d5..0000000 --- a/src/org/bouncycastle/crypto/signers/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Basic signers. - - diff --git a/src/org/bouncycastle/crypto/tls/AlertDescription.java b/src/org/bouncycastle/crypto/tls/AlertDescription.java deleted file mode 100644 index e562ff9..0000000 --- a/src/org/bouncycastle/crypto/tls/AlertDescription.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 2246 7.2 - */ -public class AlertDescription -{ - public static final short close_notify = 0; - public static final short unexpected_message = 10; - public static final short bad_record_mac = 20; - public static final short decryption_failed = 21; - public static final short record_overflow = 22; - public static final short decompression_failure = 30; - public static final short handshake_failure = 40; - /* no_certificate(41) is specific to SSLv3 */ - public static final short no_certificate = 41; - public static final short bad_certificate = 42; - public static final short unsupported_certificate = 43; - public static final short certificate_revoked = 44; - public static final short certificate_expired = 45; - public static final short certificate_unknown = 46; - public static final short illegal_parameter = 47; - public static final short unknown_ca = 48; - public static final short access_denied = 49; - public static final short decode_error = 50; - public static final short decrypt_error = 51; - public static final short export_restriction = 60; - public static final short protocol_version = 70; - public static final short insufficient_security = 71; - public static final short internal_error = 80; - public static final short user_canceled = 90; - public static final short no_renegotiation = 100; - - /* - * RFC 3546 - */ - public static final short unsupported_extension = 110; - public static final short certificate_unobtainable = 111; - public static final short unrecognized_name = 112; - public static final short bad_certificate_status_response = 113; - public static final short bad_certificate_hash_value = 114; - - /* - * RFC 4279 - */ - public static final short unknown_psk_identity = 115; -} diff --git a/src/org/bouncycastle/crypto/tls/AlertLevel.java b/src/org/bouncycastle/crypto/tls/AlertLevel.java deleted file mode 100644 index b0b131d..0000000 --- a/src/org/bouncycastle/crypto/tls/AlertLevel.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 2246 7.2 - */ -public class AlertLevel -{ - public static final short warning = 1; - public static final short fatal = 2; -} diff --git a/src/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java b/src/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java deleted file mode 100644 index 42fc818..0000000 --- a/src/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import org.bouncycastle.asn1.x509.X509CertificateStructure; - -/** - * A certificate verifyer, that will always return true. - * - *

        - * DO NOT USE THIS FILE UNLESS YOU KNOW EXACTLY WHAT YOU ARE DOING.
        - * 
        - * - * @deprecated Perform certificate verification in TlsAuthentication implementation - */ -public class AlwaysValidVerifyer implements CertificateVerifyer -{ - /** - * Return true. - * - * @see org.bouncycastle.crypto.tls.CertificateVerifyer#isValid(org.bouncycastle.asn1.x509.X509CertificateStructure[]) - */ - public boolean isValid(X509CertificateStructure[] certs) - { - return true; - } -} diff --git a/src/org/bouncycastle/crypto/tls/ByteQueue.java b/src/org/bouncycastle/crypto/tls/ByteQueue.java deleted file mode 100644 index f017897..0000000 --- a/src/org/bouncycastle/crypto/tls/ByteQueue.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * A queue for bytes. This file could be more optimized. - */ -public class ByteQueue -{ - /** - * @return The smallest number which can be written as 2^x which is bigger than i. - */ - public static final int nextTwoPow(int i) - { - /* - * This code is based of a lot of code I found on the Internet which mostly - * referenced a book called "Hacking delight". - */ - i |= (i >> 1); - i |= (i >> 2); - i |= (i >> 4); - i |= (i >> 8); - i |= (i >> 16); - return i + 1; - } - - /** - * The initial size for our buffer. - */ - private static final int INITBUFSIZE = 1024; - - /** - * The buffer where we store our data. - */ - private byte[] databuf = new byte[ByteQueue.INITBUFSIZE]; - - /** - * How many bytes at the beginning of the buffer are skipped. - */ - private int skipped = 0; - - /** - * How many bytes in the buffer are valid data. - */ - private int available = 0; - - /** - * Read data from the buffer. - * - * @param buf The buffer where the read data will be copied to. - * @param offset How many bytes to skip at the beginning of buf. - * @param len How many bytes to read at all. - * @param skip How many bytes from our data to skip. - */ - public void read(byte[] buf, int offset, int len, int skip) - { - if ((available - skip) < len) - { - throw new TlsRuntimeException("Not enough data to read"); - } - if ((buf.length - offset) < len) - { - throw new TlsRuntimeException("Buffer size of " + buf.length - + " is too small for a read of " + len + " bytes"); - } - System.arraycopy(databuf, skipped + skip, buf, offset, len); - return; - } - - /** - * Add some data to our buffer. - * - * @param data A byte-array to read data from. - * @param offset How many bytes to skip at the beginning of the array. - * @param len How many bytes to read from the array. - */ - public void addData(byte[] data, int offset, int len) - { - if ((skipped + available + len) > databuf.length) - { - byte[] tmp = new byte[ByteQueue.nextTwoPow(data.length)]; - System.arraycopy(databuf, skipped, tmp, 0, available); - skipped = 0; - databuf = tmp; - } - System.arraycopy(data, offset, databuf, skipped + available, len); - available += len; - } - - /** - * Remove some bytes from our data from the beginning. - * - * @param i How many bytes to remove. - */ - public void removeData(int i) - { - if (i > available) - { - throw new TlsRuntimeException("Cannot remove " + i + " bytes, only got " + available); - } - - /* - * Skip the data. - */ - available -= i; - skipped += i; - - /* - * If more than half of our data is skipped, we will move the data in the buffer. - */ - if (skipped > (databuf.length / 2)) - { - System.arraycopy(databuf, skipped, databuf, 0, available); - skipped = 0; - } - } - - /** - * @return The number of bytes which are available in this buffer. - */ - public int size() - { - return available; - } -} diff --git a/src/org/bouncycastle/crypto/tls/Certificate.java b/src/org/bouncycastle/crypto/tls/Certificate.java deleted file mode 100644 index c9c118f..0000000 --- a/src/org/bouncycastle/crypto/tls/Certificate.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Encoding; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.x509.X509CertificateStructure; - -/** - * A representation for a certificate chain as used by a tls server. - */ -public class Certificate -{ - public static final Certificate EMPTY_CHAIN = new Certificate(new X509CertificateStructure[0]); - - /** - * The certificates. - */ - protected X509CertificateStructure[] certs; - - /** - * Parse the ServerCertificate message. - * - * @param is The stream where to parse from. - * @return A Certificate object with the certs, the server has sended. - * @throws IOException If something goes wrong during parsing. - */ - protected static Certificate parse(InputStream is) throws IOException - { - X509CertificateStructure[] certs; - int left = TlsUtils.readUint24(is); - if (left == 0) - { - return EMPTY_CHAIN; - } - Vector tmp = new Vector(); - while (left > 0) - { - int size = TlsUtils.readUint24(is); - left -= 3 + size; - byte[] buf = new byte[size]; - TlsUtils.readFully(buf, is); - ByteArrayInputStream bis = new ByteArrayInputStream(buf); - ASN1InputStream ais = new ASN1InputStream(bis); - ASN1Primitive o = ais.readObject(); - tmp.addElement(X509CertificateStructure.getInstance(o)); - if (bis.available() > 0) - { - throw new IllegalArgumentException( - "Sorry, there is garbage data left after the certificate"); - } - } - certs = new X509CertificateStructure[tmp.size()]; - for (int i = 0; i < tmp.size(); i++) - { - certs[i] = (X509CertificateStructure)tmp.elementAt(i); - } - return new Certificate(certs); - } - - /** - * Encodes version of the ClientCertificate message - * - * @param os stream to write the message to - * @throws IOException If something goes wrong - */ - protected void encode(OutputStream os) throws IOException - { - Vector encCerts = new Vector(); - int totalSize = 0; - for (int i = 0; i < this.certs.length; ++i) - { - byte[] encCert = certs[i].getEncoded(ASN1Encoding.DER); - encCerts.addElement(encCert); - totalSize += encCert.length + 3; - } - - TlsUtils.writeUint24(totalSize, os); - - for (int i = 0; i < encCerts.size(); ++i) - { - byte[] encCert = (byte[])encCerts.elementAt(i); - TlsUtils.writeOpaque24(encCert, os); - } - } - - /** - * Private constructor from a cert array. - * - * @param certs The certs the chain should contain. - */ - public Certificate(X509CertificateStructure[] certs) - { - if (certs == null) - { - throw new IllegalArgumentException("'certs' cannot be null"); - } - - this.certs = certs; - } - - /** - * @return An array which contains the certs, this chain contains. - */ - public X509CertificateStructure[] getCerts() - { - X509CertificateStructure[] result = new X509CertificateStructure[certs.length]; - System.arraycopy(certs, 0, result, 0, certs.length); - return result; - } - - public boolean isEmpty() - { - return certs.length == 0; - } -} diff --git a/src/org/bouncycastle/crypto/tls/CertificateRequest.java b/src/org/bouncycastle/crypto/tls/CertificateRequest.java deleted file mode 100644 index 294fe28..0000000 --- a/src/org/bouncycastle/crypto/tls/CertificateRequest.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.util.Vector; - -public class CertificateRequest -{ - private short[] certificateTypes; - private Vector certificateAuthorities; - - public CertificateRequest(short[] certificateTypes, Vector certificateAuthorities) - { - this.certificateTypes = certificateTypes; - this.certificateAuthorities = certificateAuthorities; - } - - public short[] getCertificateTypes() - { - return certificateTypes; - } - - /** - * @return Vector of X500Name - */ - public Vector getCertificateAuthorities() - { - return certificateAuthorities; - } -} diff --git a/src/org/bouncycastle/crypto/tls/CertificateVerifyer.java b/src/org/bouncycastle/crypto/tls/CertificateVerifyer.java deleted file mode 100644 index e3902d4..0000000 --- a/src/org/bouncycastle/crypto/tls/CertificateVerifyer.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import org.bouncycastle.asn1.x509.X509CertificateStructure; - -/** - * This should be implemented by any class which can find out, if a given certificate - * chain is being accepted by an client. - * - * @deprecated Perform certificate verification in TlsAuthentication implementation - */ -public interface CertificateVerifyer -{ - /** - * @param certs The certs, which are part of the chain. - * @return True, if the chain is accepted, false otherwise. - */ - public boolean isValid(X509CertificateStructure[] certs); -} diff --git a/src/org/bouncycastle/crypto/tls/CipherSuite.java b/src/org/bouncycastle/crypto/tls/CipherSuite.java deleted file mode 100644 index 114ca45..0000000 --- a/src/org/bouncycastle/crypto/tls/CipherSuite.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 2246 A.5 - */ -public class CipherSuite -{ - public static final int TLS_NULL_WITH_NULL_NULL = 0x0000; - public static final int TLS_RSA_WITH_NULL_MD5 = 0x0001; - public static final int TLS_RSA_WITH_NULL_SHA = 0x0002; - public static final int TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x0003; - public static final int TLS_RSA_WITH_RC4_128_MD5 = 0x0004; - public static final int TLS_RSA_WITH_RC4_128_SHA = 0x0005; - public static final int TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x0006; - public static final int TLS_RSA_WITH_IDEA_CBC_SHA = 0x0007; - public static final int TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0008; - public static final int TLS_RSA_WITH_DES_CBC_SHA = 0x0009; - public static final int TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A; - public static final int TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x000B; - public static final int TLS_DH_DSS_WITH_DES_CBC_SHA = 0x000C; - public static final int TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x000D; - public static final int TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x000E; - public static final int TLS_DH_RSA_WITH_DES_CBC_SHA = 0x000F; - public static final int TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x0010; - public static final int TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0011; - public static final int TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x0012; - public static final int TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x0013; - public static final int TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0014; - public static final int TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x0015; - public static final int TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016; - public static final int TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x0017; - public static final int TLS_DH_anon_WITH_RC4_128_MD5 = 0x0018; - public static final int TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x0019; - public static final int TLS_DH_anon_WITH_DES_CBC_SHA = 0x001A; - public static final int TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x001B; - - /* - * RFC 3268 - */ - public static final int TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F; - public static final int TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x0030; - public static final int TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x0031; - public static final int TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032; - public static final int TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033; - public static final int TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x0034; - public static final int TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035; - public static final int TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x0036; - public static final int TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x0037; - public static final int TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038; - public static final int TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039; - public static final int TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x003A; - - /* - * RFC 4279 - */ - public static final int TLS_PSK_WITH_RC4_128_SHA = 0x008A; - public static final int TLS_PSK_WITH_3DES_EDE_CBC_SHA = 0x008B; - public static final int TLS_PSK_WITH_AES_128_CBC_SHA = 0x008C; - public static final int TLS_PSK_WITH_AES_256_CBC_SHA = 0x008D; - public static final int TLS_DHE_PSK_WITH_RC4_128_SHA = 0x008E; - public static final int TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA = 0x008F; - public static final int TLS_DHE_PSK_WITH_AES_128_CBC_SHA = 0x0090; - public static final int TLS_DHE_PSK_WITH_AES_256_CBC_SHA = 0x0091; - public static final int TLS_RSA_PSK_WITH_RC4_128_SHA = 0x0092; - public static final int TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA = 0x0093; - public static final int TLS_RSA_PSK_WITH_AES_128_CBC_SHA = 0x0094; - public static final int TLS_RSA_PSK_WITH_AES_256_CBC_SHA = 0x0095; - - /* - * RFC 4492 - */ - public static final int TLS_ECDH_ECDSA_WITH_NULL_SHA = 0xC001; - public static final int TLS_ECDH_ECDSA_WITH_RC4_128_SHA = 0xC002; - public static final int TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA = 0xC003; - public static final int TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = 0xC004; - public static final int TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = 0xC005; - public static final int TLS_ECDHE_ECDSA_WITH_NULL_SHA = 0xC006; - public static final int TLS_ECDHE_ECDSA_WITH_RC4_128_SHA = 0xC007; - public static final int TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA = 0xC008; - public static final int TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009; - public static final int TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A; - public static final int TLS_ECDH_RSA_WITH_NULL_SHA = 0xC00B; - public static final int TLS_ECDH_RSA_WITH_RC4_128_SHA = 0xC00C; - public static final int TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA = 0xC00D; - public static final int TLS_ECDH_RSA_WITH_AES_128_CBC_SHA = 0xC00E; - public static final int TLS_ECDH_RSA_WITH_AES_256_CBC_SHA = 0xC00F; - public static final int TLS_ECDHE_RSA_WITH_NULL_SHA = 0xC010; - public static final int TLS_ECDHE_RSA_WITH_RC4_128_SHA = 0xC011; - public static final int TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA = 0xC012; - public static final int TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013; - public static final int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014; - public static final int TLS_ECDH_anon_WITH_NULL_SHA = 0xC015; - public static final int TLS_ECDH_anon_WITH_RC4_128_SHA = 0xC016; - public static final int TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA = 0xC017; - public static final int TLS_ECDH_anon_WITH_AES_128_CBC_SHA = 0xC018; - public static final int TLS_ECDH_anon_WITH_AES_256_CBC_SHA = 0xC019; - - /* - * RFC 5054 - */ - public static final int TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0xC01A; - public static final int TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0xC01B; - public static final int TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA = 0xC01C; - public static final int TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0xC01D; - public static final int TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0xC01E; - public static final int TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA = 0xC01F; - public static final int TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0xC020; - public static final int TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0xC021; - public static final int TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA = 0xC022; - - /* - * RFC 5289 - */ - public static final int TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023; - public static final int TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024; - public static final int TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC025; - public static final int TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC026; - public static final int TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027; - public static final int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028; - public static final int TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = 0xC029; - public static final int TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = 0xC02A; - public static final int TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B; - public static final int TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C; - public static final int TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02D; - public static final int TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02E; - public static final int TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F; - public static final int TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030; - public static final int TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = 0xC031; - public static final int TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = 0xC032; - - /* - * RFC 5746 - */ - public static final int TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF; -} diff --git a/src/org/bouncycastle/crypto/tls/ClientCertificateType.java b/src/org/bouncycastle/crypto/tls/ClientCertificateType.java deleted file mode 100644 index 57dcd0d..0000000 --- a/src/org/bouncycastle/crypto/tls/ClientCertificateType.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 2246 7.4.4 - */ -public class ClientCertificateType -{ - public static final short rsa_sign = 1; - public static final short dss_sign = 2; - public static final short rsa_fixed_dh = 3; - public static final short dss_fixed_dh = 4; - - /* - * RFC 4492 5.5 - */ - public static final short ecdsa_sign = 64; - public static final short rsa_fixed_ecdh = 65; - public static final short ecdsa_fixed_ecdh = 66; -} diff --git a/src/org/bouncycastle/crypto/tls/CombinedHash.java b/src/org/bouncycastle/crypto/tls/CombinedHash.java deleted file mode 100644 index d4db1bd..0000000 --- a/src/org/bouncycastle/crypto/tls/CombinedHash.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.digests.MD5Digest; -import org.bouncycastle.crypto.digests.SHA1Digest; - -/** - * A combined hash, which implements md5(m) || sha1(m). - */ -class CombinedHash implements Digest -{ - protected TlsClientContext context; - protected MD5Digest md5; - protected SHA1Digest sha1; - - CombinedHash() - { - this.md5 = new MD5Digest(); - this.sha1 = new SHA1Digest(); - } - - CombinedHash(TlsClientContext context) - { - this.context = context; - this.md5 = new MD5Digest(); - this.sha1 = new SHA1Digest(); - } - - CombinedHash(CombinedHash t) - { - this.context = t.context; - this.md5 = new MD5Digest(t.md5); - this.sha1 = new SHA1Digest(t.sha1); - } - - /** - * @see org.bouncycastle.crypto.Digest#getAlgorithmName() - */ - public String getAlgorithmName() - { - return md5.getAlgorithmName() + " and " + sha1.getAlgorithmName(); - } - - /** - * @see org.bouncycastle.crypto.Digest#getDigestSize() - */ - public int getDigestSize() - { - return 16 + 20; - } - - /** - * @see org.bouncycastle.crypto.Digest#update(byte) - */ - public void update(byte in) - { - md5.update(in); - sha1.update(in); - } - - /** - * @see org.bouncycastle.crypto.Digest#update(byte[],int,int) - */ - public void update(byte[] in, int inOff, int len) - { - md5.update(in, inOff, len); - sha1.update(in, inOff, len); - } - - /** - * @see org.bouncycastle.crypto.Digest#doFinal(byte[],int) - */ - public int doFinal(byte[] out, int outOff) - { - if (context != null) - { - boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (!isTls) - { - ssl3Complete(md5, SSL3Mac.MD5_IPAD, SSL3Mac.MD5_OPAD); - ssl3Complete(sha1, SSL3Mac.SHA1_IPAD, SSL3Mac.SHA1_OPAD); - } - } - - int i1 = md5.doFinal(out, outOff); - int i2 = sha1.doFinal(out, outOff + 16); - return i1 + i2; - } - - /** - * @see org.bouncycastle.crypto.Digest#reset() - */ - public void reset() - { - md5.reset(); - sha1.reset(); - } - - protected void ssl3Complete(Digest d, byte[] ipad, byte[] opad) - { - byte[] secret = context.getSecurityParameters().masterSecret; - - d.update(secret, 0, secret.length); - d.update(ipad, 0, ipad.length); - - byte[] tmp = new byte[d.getDigestSize()]; - d.doFinal(tmp, 0); - - d.update(secret, 0, secret.length); - d.update(opad, 0, opad.length); - d.update(tmp, 0, tmp.length); - } -} diff --git a/src/org/bouncycastle/crypto/tls/CompressionMethod.java b/src/org/bouncycastle/crypto/tls/CompressionMethod.java deleted file mode 100644 index 50be7a3..0000000 --- a/src/org/bouncycastle/crypto/tls/CompressionMethod.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 2246 6.1 - */ -public class CompressionMethod -{ - public static final short NULL = 0; - - /* - * RFC 3749 2 - */ - public static final short DEFLATE = 1; - - /* - * Values from 224 decimal (0xE0) through 255 decimal (0xFF) - * inclusive are reserved for private use. - */ -} diff --git a/src/org/bouncycastle/crypto/tls/ContentType.java b/src/org/bouncycastle/crypto/tls/ContentType.java deleted file mode 100644 index d814eac..0000000 --- a/src/org/bouncycastle/crypto/tls/ContentType.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 2246 6.2.1 - */ -public class ContentType -{ - public static final short change_cipher_spec = 20; - public static final short alert = 21; - public static final short handshake = 22; - public static final short application_data = 23; -} diff --git a/src/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java b/src/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java deleted file mode 100644 index a91a53c..0000000 --- a/src/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import javabc.BigInteger; - -import org.bouncycastle.crypto.BasicAgreement; -import org.bouncycastle.crypto.agreement.DHBasicAgreement; -import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.util.BigIntegers; - -public class DefaultTlsAgreementCredentials implements TlsAgreementCredentials -{ - protected Certificate clientCert; - protected AsymmetricKeyParameter clientPrivateKey; - - protected BasicAgreement basicAgreement; - - public DefaultTlsAgreementCredentials(Certificate clientCertificate, AsymmetricKeyParameter clientPrivateKey) - { - if (clientCertificate == null) - { - throw new IllegalArgumentException("'clientCertificate' cannot be null"); - } - if (clientCertificate.certs.length == 0) - { - throw new IllegalArgumentException("'clientCertificate' cannot be empty"); - } - if (clientPrivateKey == null) - { - throw new IllegalArgumentException("'clientPrivateKey' cannot be null"); - } - if (!clientPrivateKey.isPrivate()) - { - throw new IllegalArgumentException("'clientPrivateKey' must be private"); - } - - if (clientPrivateKey instanceof DHPrivateKeyParameters) - { - basicAgreement = new DHBasicAgreement(); - } - else if (clientPrivateKey instanceof ECPrivateKeyParameters) - { - basicAgreement = new ECDHBasicAgreement(); - } - else - { - throw new IllegalArgumentException("'clientPrivateKey' type not supported: " - + clientPrivateKey.getClass().getName()); - } - - this.clientCert = clientCertificate; - this.clientPrivateKey = clientPrivateKey; - } - - public Certificate getCertificate() - { - return clientCert; - } - - public byte[] generateAgreement(AsymmetricKeyParameter serverPublicKey) - { - basicAgreement.init(clientPrivateKey); - BigInteger agreementValue = basicAgreement.calculateAgreement(serverPublicKey); - return BigIntegers.asUnsignedByteArray(agreementValue); - } -} diff --git a/src/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java b/src/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java deleted file mode 100644 index cdf1f73..0000000 --- a/src/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.digests.MD5Digest; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.digests.SHA256Digest; -import org.bouncycastle.crypto.digests.SHA384Digest; -import org.bouncycastle.crypto.engines.AESFastEngine; -import org.bouncycastle.crypto.engines.DESedeEngine; -import org.bouncycastle.crypto.modes.CBCBlockCipher; - -public class DefaultTlsCipherFactory implements TlsCipherFactory -{ - public TlsCipher createCipher(TlsClientContext context, int encryptionAlgorithm, int digestAlgorithm) throws IOException - { - switch (encryptionAlgorithm) - { - case EncryptionAlgorithm._3DES_EDE_CBC: - return createDESedeCipher(context, 24, digestAlgorithm); - case EncryptionAlgorithm.AES_128_CBC: - return createAESCipher(context, 16, digestAlgorithm); - case EncryptionAlgorithm.AES_256_CBC: - return createAESCipher(context, 32, digestAlgorithm); - default: - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - protected TlsCipher createAESCipher(TlsClientContext context, int cipherKeySize, int digestAlgorithm) throws IOException - { - return new TlsBlockCipher(context, createAESBlockCipher(), - createAESBlockCipher(), createDigest(digestAlgorithm), createDigest(digestAlgorithm), cipherKeySize); - } - - protected TlsCipher createDESedeCipher(TlsClientContext context, int cipherKeySize, int digestAlgorithm) throws IOException - { - return new TlsBlockCipher(context, createDESedeBlockCipher(), - createDESedeBlockCipher(), createDigest(digestAlgorithm), createDigest(digestAlgorithm), cipherKeySize); - } - - protected BlockCipher createAESBlockCipher() - { - return new CBCBlockCipher(new AESFastEngine()); - } - - protected BlockCipher createDESedeBlockCipher() - { - return new CBCBlockCipher(new DESedeEngine()); - } - - protected Digest createDigest(int digestAlgorithm) throws IOException - { - switch (digestAlgorithm) - { - case DigestAlgorithm.MD5: - return new MD5Digest(); - case DigestAlgorithm.SHA: - return new SHA1Digest(); - case DigestAlgorithm.SHA256: - return new SHA256Digest(); - case DigestAlgorithm.SHA384: - return new SHA384Digest(); - default: - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } -} diff --git a/src/org/bouncycastle/crypto/tls/DefaultTlsClient.java b/src/org/bouncycastle/crypto/tls/DefaultTlsClient.java deleted file mode 100644 index 9e41e37..0000000 --- a/src/org/bouncycastle/crypto/tls/DefaultTlsClient.java +++ /dev/null @@ -1,251 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.util.Hashtable; - -public abstract class DefaultTlsClient implements TlsClient -{ - protected TlsCipherFactory cipherFactory; - - protected TlsClientContext context; - - protected int selectedCipherSuite; - protected int selectedCompressionMethod; - - public DefaultTlsClient() - { - this(new DefaultTlsCipherFactory()); - } - - public DefaultTlsClient(TlsCipherFactory cipherFactory) - { - this.cipherFactory = cipherFactory; - } - - public void init(TlsClientContext context) - { - this.context = context; - } - - public ProtocolVersion getClientVersion() - { - return ProtocolVersion.TLSv10; - } - - public int[] getCipherSuites() - { - return new int[] { - CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, - CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, - CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA, - }; - } - - public Hashtable getClientExtensions() - { - return null; - } - - public short[] getCompressionMethods() - { - return new short[] { CompressionMethod.NULL }; - } - - public void notifyServerVersion(ProtocolVersion serverVersion) throws IOException - { - if (!ProtocolVersion.TLSv10.equals(serverVersion)) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - - public void notifySessionID(byte[] sessionID) - { - // Currently ignored - } - - public void notifySelectedCipherSuite(int selectedCipherSuite) - { - this.selectedCipherSuite = selectedCipherSuite; - } - - public void notifySelectedCompressionMethod(short selectedCompressionMethod) - { - this.selectedCompressionMethod = selectedCompressionMethod; - } - - public void notifySecureRenegotiation(boolean secureRenegotiation) throws IOException - { - if (!secureRenegotiation) - { - /* - * RFC 5746 3.4. If the extension is not present, the server does not support - * secure renegotiation; set secure_renegotiation flag to FALSE. In this case, - * some clients may want to terminate the handshake instead of continuing; see - * Section 4.1 for discussion. - */ -// throw new TlsFatalAlert(AlertDescription.handshake_failure); - } - } - - public void processServerExtensions(Hashtable serverExtensions) - { - } - - public TlsKeyExchange getKeyExchange() throws IOException - { - switch (selectedCipherSuite) - { - case CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA: - return createRSAKeyExchange(); - - case CipherSuite.TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA: - return createDHKeyExchange(KeyExchangeAlgorithm.DH_DSS); - - case CipherSuite.TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA: - return createDHKeyExchange(KeyExchangeAlgorithm.DH_RSA); - - case CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA: - return createDHEKeyExchange(KeyExchangeAlgorithm.DHE_DSS); - - case CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA: - return createDHEKeyExchange(KeyExchangeAlgorithm.DHE_RSA); - - case CipherSuite.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: - return createECDHKeyExchange(KeyExchangeAlgorithm.ECDH_ECDSA); - - case CipherSuite.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: - return createECDHEKeyExchange(KeyExchangeAlgorithm.ECDHE_ECDSA); - - case CipherSuite.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: - return createECDHKeyExchange(KeyExchangeAlgorithm.ECDH_RSA); - - case CipherSuite.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: - return createECDHEKeyExchange(KeyExchangeAlgorithm.ECDHE_RSA); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected cipher suite was in the list of client-offered cipher - * suites, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public TlsCompression getCompression() throws IOException - { - switch (selectedCompressionMethod) - { - case CompressionMethod.NULL: - return new TlsNullCompression(); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected compression method was in the list of client-offered compression - * methods, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public TlsCipher getCipher() throws IOException - { - switch (selectedCipherSuite) - { - case CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm._3DES_EDE_CBC, DigestAlgorithm.SHA); - - case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_128_CBC, DigestAlgorithm.SHA); - - case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_256_CBC, DigestAlgorithm.SHA); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected cipher suite was in the list of client-offered cipher - * suites, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - protected TlsKeyExchange createDHKeyExchange(int keyExchange) - { - return new TlsDHKeyExchange(context, keyExchange); - } - - protected TlsKeyExchange createDHEKeyExchange(int keyExchange) - { - return new TlsDHEKeyExchange(context, keyExchange); - } - - protected TlsKeyExchange createECDHKeyExchange(int keyExchange) - { - return new TlsECDHKeyExchange(context, keyExchange); - } - - protected TlsKeyExchange createECDHEKeyExchange(int keyExchange) - { - return new TlsECDHEKeyExchange(context, keyExchange); - } - - protected TlsKeyExchange createRSAKeyExchange() - { - return new TlsRSAKeyExchange(context); - } -} diff --git a/src/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java b/src/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java deleted file mode 100644 index b26a18a..0000000 --- a/src/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -public class DefaultTlsSignerCredentials implements TlsSignerCredentials -{ - protected TlsClientContext context; - protected Certificate clientCert; - protected AsymmetricKeyParameter clientPrivateKey; - - protected TlsSigner clientSigner; - - public DefaultTlsSignerCredentials(TlsClientContext context, Certificate clientCertificate, - AsymmetricKeyParameter clientPrivateKey) - { - if (clientCertificate == null) - { - throw new IllegalArgumentException("'clientCertificate' cannot be null"); - } - if (clientCertificate.certs.length == 0) - { - throw new IllegalArgumentException("'clientCertificate' cannot be empty"); - } - if (clientPrivateKey == null) - { - throw new IllegalArgumentException("'clientPrivateKey' cannot be null"); - } - if (!clientPrivateKey.isPrivate()) - { - throw new IllegalArgumentException("'clientPrivateKey' must be private"); - } - - if (clientPrivateKey instanceof RSAKeyParameters) - { - clientSigner = new TlsRSASigner(); - } - else if (clientPrivateKey instanceof DSAPrivateKeyParameters) - { - clientSigner = new TlsDSSSigner(); - } - else if (clientPrivateKey instanceof ECPrivateKeyParameters) - { - clientSigner = new TlsECDSASigner(); - } - else - { - throw new IllegalArgumentException("'clientPrivateKey' type not supported: " - + clientPrivateKey.getClass().getName()); - } - - this.context = context; - this.clientCert = clientCertificate; - this.clientPrivateKey = clientPrivateKey; - } - - public Certificate getCertificate() - { - return clientCert; - } - - public byte[] generateCertificateSignature(byte[] md5andsha1) throws IOException - { - try - { - return clientSigner.calculateRawSignature(context.getSecureRandom(), clientPrivateKey, - md5andsha1); - } - catch (CryptoException e) - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } -} diff --git a/src/org/bouncycastle/crypto/tls/DigestAlgorithm.java b/src/org/bouncycastle/crypto/tls/DigestAlgorithm.java deleted file mode 100644 index 25f4631..0000000 --- a/src/org/bouncycastle/crypto/tls/DigestAlgorithm.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.crypto.tls; - -public class DigestAlgorithm -{ - /* - * Note that the values here are implementation-specific and arbitrary. - * It is recommended not to depend on the particular values (e.g. serialization). - */ - public static final int NULL = 0; - public static final int MD5 = 1; - public static final int SHA = 2; - - /* - * RFC 5289 - */ - public static final int SHA256 = 3; - public static final int SHA384 = 4; -} diff --git a/src/org/bouncycastle/crypto/tls/ECCurveType.java b/src/org/bouncycastle/crypto/tls/ECCurveType.java deleted file mode 100644 index 0b6542f..0000000 --- a/src/org/bouncycastle/crypto/tls/ECCurveType.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 4492 5.4 - */ -public class ECCurveType -{ - /** - * Indicates the elliptic curve domain parameters are conveyed verbosely, and the - * underlying finite field is a prime field. - */ - public static final short explicit_prime = 1; - - /** - * Indicates the elliptic curve domain parameters are conveyed verbosely, and the - * underlying finite field is a characteristic-2 field. - */ - public static final short explicit_char2 = 2; - - /** - * Indicates that a named curve is used. This option SHOULD be used when applicable. - */ - public static final short named_curve = 3; - - /* - * Values 248 through 255 are reserved for private use. - */ -} diff --git a/src/org/bouncycastle/crypto/tls/ECPointFormat.java b/src/org/bouncycastle/crypto/tls/ECPointFormat.java deleted file mode 100644 index 969d42e..0000000 --- a/src/org/bouncycastle/crypto/tls/ECPointFormat.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 4492 5.1.2 - */ -public class ECPointFormat -{ - public static final short uncompressed = 0; - public static final short ansiX962_compressed_prime = 1; - public static final short ansiX962_compressed_char2 = 2; - - /* - * reserved (248..255) - */ -} diff --git a/src/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java b/src/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java deleted file mode 100644 index 4d8fa68..0000000 --- a/src/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bouncycastle.crypto.tls; - -public class EncryptionAlgorithm -{ - /* - * Note that the values here are implementation-specific and arbitrary. - * It is recommended not to depend on the particular values (e.g. serialization). - */ - public static final int NULL = 0; - public static final int RC4_40 = 1; - public static final int RC4_128 = 2; - public static final int RC2_CBC_40 = 3; - public static final int IDEA_CBC = 4; - public static final int DES40_CBC = 5; - public static final int DES_CBC = 6; - public static final int _3DES_EDE_CBC = 7; - - /* - * RFC 3268 - */ - public static final int AES_128_CBC = 8; - public static final int AES_256_CBC = 9; - - /* - * RFC 5289 - */ - public static final int AES_128_GCM = 10; - public static final int AES_256_GCM = 11; -} diff --git a/src/org/bouncycastle/crypto/tls/ExtensionType.java b/src/org/bouncycastle/crypto/tls/ExtensionType.java deleted file mode 100644 index 204f92a..0000000 --- a/src/org/bouncycastle/crypto/tls/ExtensionType.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 4366 2.3 - */ -public class ExtensionType -{ - public static final int server_name = 0; - public static final int max_fragment_length = 1; - public static final int client_certificate_url = 2; - public static final int trusted_ca_keys = 3; - public static final int truncated_hmac = 4; - public static final int status_request = 5; - - /* - * RFC 4492 - */ - public static final int elliptic_curves = 10; - public static final int ec_point_formats = 11; - - /* - * RFC 5054 2.8.1 - */ - public static final int srp = 12; - - /* - * RFC 5746 6 - */ - public static final int renegotiation_info = 0xff01; -} diff --git a/src/org/bouncycastle/crypto/tls/HandshakeType.java b/src/org/bouncycastle/crypto/tls/HandshakeType.java deleted file mode 100644 index 14e271d..0000000 --- a/src/org/bouncycastle/crypto/tls/HandshakeType.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * RFC 2246 7.4 - */ -public class HandshakeType -{ - public static final short hello_request = 0; - public static final short client_hello = 1; - public static final short server_hello = 2; - public static final short certificate = 11; - public static final short server_key_exchange = 12; - public static final short certificate_request = 13; - public static final short server_hello_done = 14; - public static final short certificate_verify = 15; - public static final short client_key_exchange = 16; - public static final short finished = 20; -} diff --git a/src/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java b/src/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java deleted file mode 100644 index 6415663..0000000 --- a/src/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.bouncycastle.crypto.tls; - -public class KeyExchangeAlgorithm -{ - /* - * Note that the values here are implementation-specific and arbitrary. - * It is recommended not to depend on the particular values (e.g. serialization). - */ - public static final int NULL = 0; - public static final int RSA = 1; - public static final int RSA_EXPORT = 2; - public static final int DHE_DSS = 3; - public static final int DHE_DSS_EXPORT = 4; - public static final int DHE_RSA = 5; - public static final int DHE_RSA_EXPORT = 6; - public static final int DH_DSS = 7; - public static final int DH_DSS_EXPORT = 8; - public static final int DH_RSA = 9; - public static final int DH_RSA_EXPORT = 10; - public static final int DH_anon = 11; - public static final int DH_anon_EXPORT = 12; - public static final int PSK = 13; - public static final int DHE_PSK = 14; - public static final int RSA_PSK = 15; - public static final int ECDH_ECDSA = 16; - public static final int ECDHE_ECDSA = 17; - public static final int ECDH_RSA = 18; - public static final int ECDHE_RSA = 19; - public static final int ECDH_anon = 20; - public static final int SRP = 21; - public static final int SRP_DSS = 22; - public static final int SRP_RSA = 23; -} diff --git a/src/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java b/src/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java deleted file mode 100644 index 75e7474..0000000 --- a/src/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -/** - * A temporary class to wrap old CertificateVerifyer stuff for new TlsAuthentication - * - * @deprecated - */ -public class LegacyTlsAuthentication implements TlsAuthentication -{ - protected CertificateVerifyer verifyer; - - public LegacyTlsAuthentication(CertificateVerifyer verifyer) - { - this.verifyer = verifyer; - } - - public void notifyServerCertificate(Certificate serverCertificate) throws IOException - { - if (!this.verifyer.isValid(serverCertificate.getCerts())) - { - throw new TlsFatalAlert(AlertDescription.user_canceled); - } - } - - public TlsCredentials getClientCredentials(CertificateRequest certificateRequest) - throws IOException - { - return null; - } -} diff --git a/src/org/bouncycastle/crypto/tls/LegacyTlsClient.java b/src/org/bouncycastle/crypto/tls/LegacyTlsClient.java deleted file mode 100644 index 2af98b8..0000000 --- a/src/org/bouncycastle/crypto/tls/LegacyTlsClient.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -/** - * A temporary class to use LegacyTlsAuthentication - * - * @deprecated - */ -public class LegacyTlsClient extends DefaultTlsClient -{ - /** @deprecated */ - protected CertificateVerifyer verifyer; - - /** - * @deprecated - */ - public LegacyTlsClient(CertificateVerifyer verifyer) - { - super(); - - this.verifyer = verifyer; - } - - public TlsAuthentication getAuthentication() throws IOException - { - return new LegacyTlsAuthentication(verifyer); - } -} diff --git a/src/org/bouncycastle/crypto/tls/NamedCurve.java b/src/org/bouncycastle/crypto/tls/NamedCurve.java deleted file mode 100644 index bebabcb..0000000 --- a/src/org/bouncycastle/crypto/tls/NamedCurve.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import org.bouncycastle.asn1.sec.SECNamedCurves; -import org.bouncycastle.asn1.x9.X9ECParameters; -import org.bouncycastle.crypto.params.ECDomainParameters; - -/** - * RFC 4492 5.1.1 - * - * The named curves defined here are those specified in SEC 2 [13]. Note that many of - * these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 - * through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the - * client supports arbitrary prime and characteristic-2 curves, respectively (the curve - * parameters must be encoded explicitly in ECParameters). - */ -public class NamedCurve -{ - public static final int sect163k1 = 1; - public static final int sect163r1 = 2; - public static final int sect163r2 = 3; - public static final int sect193r1 = 4; - public static final int sect193r2 = 5; - public static final int sect233k1 = 6; - public static final int sect233r1 = 7; - public static final int sect239k1 = 8; - public static final int sect283k1 = 9; - public static final int sect283r1 = 10; - public static final int sect409k1 = 11; - public static final int sect409r1 = 12; - public static final int sect571k1 = 13; - public static final int sect571r1 = 14; - public static final int secp160k1 = 15; - public static final int secp160r1 = 16; - public static final int secp160r2 = 17; - public static final int secp192k1 = 18; - public static final int secp192r1 = 19; - public static final int secp224k1 = 20; - public static final int secp224r1 = 21; - public static final int secp256k1 = 22; - public static final int secp256r1 = 23; - public static final int secp384r1 = 24; - public static final int secp521r1 = 25; - - /* - * reserved (0xFE00..0xFEFF) - */ - - public static final int arbitrary_explicit_prime_curves = 0xFF01; - public static final int arbitrary_explicit_char2_curves = 0xFF02; - - private static final String[] curveNames = new String[] { - "sect163k1", - "sect163r1", - "sect163r2", - "sect193r1", - "sect193r2", - "sect233k1", - "sect233r1", - "sect239k1", - "sect283k1", - "sect283r1", - "sect409k1", - "sect409r1", - "sect571k1", - "sect571r1", - "secp160k1", - "secp160r1", - "secp160r2", - "secp192k1", - "secp192r1", - "secp224k1", - "secp224r1", - "secp256k1", - "secp256r1", - "secp384r1", - "secp521r1", }; - - static ECDomainParameters getECParameters(int namedCurve) - { - int index = namedCurve - 1; - if (index < 0 || index >= curveNames.length) - { - return null; - } - - String curveName = curveNames[index]; - - // Lazily created the first time a particular curve is accessed - X9ECParameters ecP = SECNamedCurves.getByName(curveName); - - if (ecP == null) - { - return null; - } - - // It's a bit inefficient to do this conversion every time - return new ECDomainParameters(ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), - ecP.getSeed()); - } -} diff --git a/src/org/bouncycastle/crypto/tls/PSKTlsClient.java b/src/org/bouncycastle/crypto/tls/PSKTlsClient.java deleted file mode 100644 index 57043cc..0000000 --- a/src/org/bouncycastle/crypto/tls/PSKTlsClient.java +++ /dev/null @@ -1,192 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.util.Hashtable; - -public class PSKTlsClient implements TlsClient -{ - protected TlsCipherFactory cipherFactory; - protected TlsPSKIdentity pskIdentity; - - protected TlsClientContext context; - - protected int selectedCompressionMethod; - protected int selectedCipherSuite; - - public PSKTlsClient(TlsPSKIdentity pskIdentity) - { - this(new DefaultTlsCipherFactory(), pskIdentity); - } - - public PSKTlsClient(TlsCipherFactory cipherFactory, TlsPSKIdentity pskIdentity) - { - this.cipherFactory = cipherFactory; - this.pskIdentity = pskIdentity; - } - - public ProtocolVersion getClientVersion() - { - return ProtocolVersion.TLSv10; - } - - public void init(TlsClientContext context) - { - this.context = context; - } - - public int[] getCipherSuites() - { - return new int[] { - CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, - CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, - CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA, }; - } - - public Hashtable getClientExtensions() throws IOException - { - return null; - } - - public short[] getCompressionMethods() - { - return new short[] { CompressionMethod.NULL }; - } - - public void notifyServerVersion(ProtocolVersion serverVersion) throws IOException - { - if (!ProtocolVersion.TLSv10.equals(serverVersion)) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - - public void notifySessionID(byte[] sessionID) - { - // Currently ignored - } - - public void notifySelectedCipherSuite(int selectedCipherSuite) - { - this.selectedCipherSuite = selectedCipherSuite; - } - - public void notifySelectedCompressionMethod(short selectedCompressionMethod) - { - this.selectedCompressionMethod = selectedCompressionMethod; - } - - public void notifySecureRenegotiation(boolean secureRenegotiation) throws IOException - { - if (!secureRenegotiation) - { - /* - * RFC 5746 3.4. If the extension is not present, the server does not support - * secure renegotiation; set secure_renegotiation flag to FALSE. In this case, - * some clients may want to terminate the handshake instead of continuing; see - * Section 4.1 for discussion. - */ -// throw new TlsFatalAlert(AlertDescription.handshake_failure); - } - } - - public void processServerExtensions(Hashtable serverExtensions) - { - } - - public TlsKeyExchange getKeyExchange() throws IOException - { - switch (selectedCipherSuite) - { - case CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA: - return createPSKKeyExchange(KeyExchangeAlgorithm.PSK); - - case CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA: - return createPSKKeyExchange(KeyExchangeAlgorithm.RSA_PSK); - - case CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA: - return createPSKKeyExchange(KeyExchangeAlgorithm.DHE_PSK); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected cipher suite was in the list of client-offered cipher - * suites, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public TlsAuthentication getAuthentication() throws IOException - { - return null; - } - - public TlsCompression getCompression() throws IOException - { - switch (selectedCompressionMethod) - { - case CompressionMethod.NULL: - return new TlsNullCompression(); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected compression method was in the list of client-offered compression - * methods, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public TlsCipher getCipher() throws IOException - { - switch (selectedCipherSuite) - { - case CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm._3DES_EDE_CBC, - DigestAlgorithm.SHA); - - case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_128_CBC, - DigestAlgorithm.SHA); - - case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_256_CBC, - DigestAlgorithm.SHA); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected cipher suite was in the list of client-offered cipher - * suites, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - protected TlsKeyExchange createPSKKeyExchange(int keyExchange) - { - return new TlsPSKKeyExchange(context, keyExchange, pskIdentity); - } -} diff --git a/src/org/bouncycastle/crypto/tls/ProtocolVersion.java b/src/org/bouncycastle/crypto/tls/ProtocolVersion.java deleted file mode 100644 index e7f1557..0000000 --- a/src/org/bouncycastle/crypto/tls/ProtocolVersion.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -public class ProtocolVersion -{ - public static final ProtocolVersion SSLv3 = new ProtocolVersion(0x0300); - public static final ProtocolVersion TLSv10 = new ProtocolVersion(0x0301); - public static final ProtocolVersion TLSv11 = new ProtocolVersion(0x0302); - public static final ProtocolVersion TLSv12 = new ProtocolVersion(0x0303); - - private int version; - - private ProtocolVersion(int v) - { - version = v & 0xffff; - } - - public int getFullVersion() - { - return version; - } - - public int getMajorVersion() - { - return version >> 8; - } - - public int getMinorVersion() - { - return version & 0xff; - } - - public boolean equals(Object obj) - { - return this == obj; - } - - public int hashCode() - { - return version; - } - - public static ProtocolVersion get(int major, int minor) throws IOException - { - switch (major) - { - case 3: - switch (minor) - { - case 0: - return SSLv3; - case 1: - return TLSv10; - case 2: - return TLSv11; - case 3: - return TLSv12; - } - } - - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } -} diff --git a/src/org/bouncycastle/crypto/tls/RecordStream.java b/src/org/bouncycastle/crypto/tls/RecordStream.java deleted file mode 100644 index fe5ca2f..0000000 --- a/src/org/bouncycastle/crypto/tls/RecordStream.java +++ /dev/null @@ -1,191 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.bouncycastle.crypto.Digest; - -/** - * An implementation of the TLS 1.0 record layer, allowing downgrade to SSLv3. - */ -class RecordStream -{ - private TlsProtocolHandler handler; - private InputStream is; - private OutputStream os; - private TlsCompression readCompression = null; - private TlsCompression writeCompression = null; - private TlsCipher readCipher = null; - private TlsCipher writeCipher = null; - private ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - - private TlsClientContext context = null; - private CombinedHash hash = null; - - RecordStream(TlsProtocolHandler handler, InputStream is, OutputStream os) - { - this.handler = handler; - this.is = is; - this.os = os; - this.readCompression = new TlsNullCompression(); - this.writeCompression = this.readCompression; - this.readCipher = new TlsNullCipher(); - this.writeCipher = this.readCipher; - } - - void init(TlsClientContext context) - { - this.context = context; - this.hash = new CombinedHash(context); - } - - void clientCipherSpecDecided(TlsCompression tlsCompression, TlsCipher tlsCipher) - { - this.writeCompression = tlsCompression; - this.writeCipher = tlsCipher; - } - - void serverClientSpecReceived() - { - this.readCompression = this.writeCompression; - this.readCipher = this.writeCipher; - } - - public void readData() throws IOException - { - short type = TlsUtils.readUint8(is); - - // TODO In light of versioning and SSLv3, what should we expect here? - ProtocolVersion expectedVersion = ProtocolVersion.TLSv10; //context.getServerVersion(); - if (!expectedVersion.equals(TlsUtils.readVersion(is))) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - - int size = TlsUtils.readUint16(is); - byte[] buf = decodeAndVerify(type, is, size); - handler.processData(type, buf, 0, buf.length); - } - - protected byte[] decodeAndVerify(short type, InputStream is, int len) throws IOException - { - byte[] buf = new byte[len]; - TlsUtils.readFully(buf, is); - byte[] decoded = readCipher.decodeCiphertext(type, buf, 0, buf.length); - - OutputStream cOut = readCompression.decompress(buffer); - - if (cOut == buffer) - { - return decoded; - } - - cOut.write(decoded, 0, decoded.length); - cOut.flush(); - return getBufferContents(); - } - - protected void writeMessage(short type, byte[] message, int offset, int len) throws IOException - { - if (type == ContentType.handshake) - { - updateHandshakeData(message, offset, len); - } - - OutputStream cOut = writeCompression.compress(buffer); - - byte[] ciphertext; - if (cOut == buffer) - { - ciphertext = writeCipher.encodePlaintext(type, message, offset, len); - } - else - { - cOut.write(message, offset, len); - cOut.flush(); - byte[] compressed = getBufferContents(); - ciphertext = writeCipher.encodePlaintext(type, compressed, 0, compressed.length); - } - - byte[] writeMessage = new byte[ciphertext.length + 5]; - TlsUtils.writeUint8(type, writeMessage, 0); - // TODO In light of versioning, what should we send here? -// TlsUtils.writeVersion(context.getServerVersion(), writeMessage, 1); - TlsUtils.writeVersion(ProtocolVersion.TLSv10, writeMessage, 1); - TlsUtils.writeUint16(ciphertext.length, writeMessage, 3); - System.arraycopy(ciphertext, 0, writeMessage, 5, ciphertext.length); - os.write(writeMessage); - os.flush(); - } - - void updateHandshakeData(byte[] message, int offset, int len) - { - hash.update(message, offset, len); - } - - /** - * 'sender' only relevant to SSLv3 - */ - byte[] getCurrentHash(byte[] sender) - { - Digest d = new CombinedHash(hash); - - boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (!isTls) - { - if (sender != null) - { - d.update(sender, 0, sender.length); - } - } - - return doFinal(d); - } - - protected void close() throws IOException - { - IOException e = null; - try - { - is.close(); - } - catch (IOException ex) - { - e = ex; - } - try - { - os.close(); - } - catch (IOException ex) - { - e = ex; - } - if (e != null) - { - throw e; - } - } - - protected void flush() throws IOException - { - os.flush(); - } - - private byte[] getBufferContents() - { - byte[] contents = buffer.toByteArray(); - buffer.reset(); - return contents; - } - - private static byte[] doFinal(Digest d) - { - byte[] bs = new byte[d.getDigestSize()]; - d.doFinal(bs, 0); - return bs; - } -} diff --git a/src/org/bouncycastle/crypto/tls/SRPTlsClient.java b/src/org/bouncycastle/crypto/tls/SRPTlsClient.java deleted file mode 100644 index f4f27c4..0000000 --- a/src/org/bouncycastle/crypto/tls/SRPTlsClient.java +++ /dev/null @@ -1,201 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Hashtable; - -import org.bouncycastle.util.Arrays; - -public abstract class SRPTlsClient implements TlsClient -{ - public static final Integer EXT_SRP = new Integer(ExtensionType.srp); - - protected TlsCipherFactory cipherFactory; - protected byte[] identity; - protected byte[] password; - - protected TlsClientContext context; - - protected int selectedCompressionMethod; - protected int selectedCipherSuite; - - public SRPTlsClient(byte[] identity, byte[] password) - { - this(new DefaultTlsCipherFactory(), identity, password); - } - - public SRPTlsClient(TlsCipherFactory cipherFactory, byte[] identity, byte[] password) - { - this.cipherFactory = cipherFactory; - this.identity = Arrays.clone(identity); - this.password = Arrays.clone(password); - } - - public void init(TlsClientContext context) - { - this.context = context; - } - - public ProtocolVersion getClientVersion() - { - return ProtocolVersion.TLSv10; - } - - public int[] getCipherSuites() - { - return new int[] { - CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, - CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, - CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA, - CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA, - CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA, }; - } - - public Hashtable getClientExtensions() throws IOException - { - Hashtable clientExtensions = new Hashtable(); - - ByteArrayOutputStream srpData = new ByteArrayOutputStream(); - TlsUtils.writeOpaque8(this.identity, srpData); - clientExtensions.put(EXT_SRP, srpData.toByteArray()); - - return clientExtensions; - } - - public short[] getCompressionMethods() - { - return new short[] { CompressionMethod.NULL }; - } - - public void notifyServerVersion(ProtocolVersion serverVersion) throws IOException - { - if (!ProtocolVersion.TLSv10.equals(serverVersion)) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - - public void notifySessionID(byte[] sessionID) - { - // Currently ignored - } - - public void notifySelectedCipherSuite(int selectedCipherSuite) - { - this.selectedCipherSuite = selectedCipherSuite; - } - - public void notifySelectedCompressionMethod(short selectedCompressionMethod) - { - this.selectedCompressionMethod = selectedCompressionMethod; - } - - public void notifySecureRenegotiation(boolean secureRenegotiation) throws IOException - { - if (!secureRenegotiation) - { - /* - * RFC 5746 3.4. If the extension is not present, the server does not support - * secure renegotiation; set secure_renegotiation flag to FALSE. In this case, - * some clients may want to terminate the handshake instead of continuing; see - * Section 4.1 for discussion. - */ -// throw new TlsFatalAlert(AlertDescription.handshake_failure); - } - } - - public void processServerExtensions(Hashtable serverExtensions) - { - // There is no server response for the SRP extension - } - - public TlsKeyExchange getKeyExchange() throws IOException - { - switch (selectedCipherSuite) - { - case CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA: - return createSRPKeyExchange(KeyExchangeAlgorithm.SRP); - - case CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA: - return createSRPKeyExchange(KeyExchangeAlgorithm.SRP_RSA); - - case CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA: - return createSRPKeyExchange(KeyExchangeAlgorithm.SRP_DSS); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected cipher suite was in the list of client-offered cipher - * suites, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public TlsCompression getCompression() throws IOException - { - switch (selectedCompressionMethod) - { - case CompressionMethod.NULL: - return new TlsNullCompression(); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected compression method was in the list of client-offered compression - * methods, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public TlsCipher getCipher() throws IOException - { - switch (selectedCipherSuite) - { - case CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm._3DES_EDE_CBC, - DigestAlgorithm.SHA); - - case CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_128_CBC, - DigestAlgorithm.SHA); - - case CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA: - case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA: - return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_256_CBC, - DigestAlgorithm.SHA); - - default: - /* - * Note: internal error here; the TlsProtocolHandler verifies that the - * server-selected cipher suite was in the list of client-offered cipher - * suites, so if we now can't produce an implementation, we shouldn't have - * offered it! - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - protected TlsKeyExchange createSRPKeyExchange(int keyExchange) - { - return new TlsSRPKeyExchange(context, keyExchange, identity, password); - } -} diff --git a/src/org/bouncycastle/crypto/tls/SSL3Mac.java b/src/org/bouncycastle/crypto/tls/SSL3Mac.java deleted file mode 100644 index 63e33fd..0000000 --- a/src/org/bouncycastle/crypto/tls/SSL3Mac.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import org.bouncycastle.crypto.CipherParameters; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.util.Arrays; - -/** - * HMAC implementation based on original internet draft for HMAC (RFC 2104) - * - * The difference is that padding is concatentated versus XORed with the key - * - * H(K + opad, H(K + ipad, text)) - */ -public class SSL3Mac implements Mac -{ - private final static byte IPAD = (byte)0x36; - private final static byte OPAD = (byte)0x5C; - - static final byte[] MD5_IPAD = genPad(IPAD, 48); - static final byte[] MD5_OPAD = genPad(OPAD, 48); - static final byte[] SHA1_IPAD = genPad(IPAD, 40); - static final byte[] SHA1_OPAD = genPad(OPAD, 40); - - private Digest digest; - - private byte[] secret; - private byte[] ipad, opad; - - /** - * Base constructor for one of the standard digest algorithms that the byteLength of - * the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. - * - * @param digest the digest. - */ - public SSL3Mac(Digest digest) - { - this.digest = digest; - - if (digest.getDigestSize() == 20) - { - this.ipad = SHA1_IPAD; - this.opad = SHA1_OPAD; - } - else - { - this.ipad = MD5_IPAD; - this.opad = MD5_OPAD; - } - } - - public String getAlgorithmName() - { - return digest.getAlgorithmName() + "/SSL3MAC"; - } - - public Digest getUnderlyingDigest() - { - return digest; - } - - public void init(CipherParameters params) - { - secret = Arrays.clone(((KeyParameter)params).getKey()); - - reset(); - } - - public int getMacSize() - { - return digest.getDigestSize(); - } - - public void update(byte in) - { - digest.update(in); - } - - public void update(byte[] in, int inOff, int len) - { - digest.update(in, inOff, len); - } - - public int doFinal(byte[] out, int outOff) - { - byte[] tmp = new byte[digest.getDigestSize()]; - digest.doFinal(tmp, 0); - - digest.update(secret, 0, secret.length); - digest.update(opad, 0, opad.length); - digest.update(tmp, 0, tmp.length); - - int len = digest.doFinal(out, outOff); - - reset(); - - return len; - } - - /** - * Reset the mac generator. - */ - public void reset() - { - digest.reset(); - digest.update(secret, 0, secret.length); - digest.update(ipad, 0, ipad.length); - } - - private static byte[] genPad(byte b, int count) - { - byte[] padding = new byte[count]; - Arrays.fill(padding, b); - return padding; - } -} diff --git a/src/org/bouncycastle/crypto/tls/SecurityParameters.java b/src/org/bouncycastle/crypto/tls/SecurityParameters.java deleted file mode 100644 index b3c433d..0000000 --- a/src/org/bouncycastle/crypto/tls/SecurityParameters.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.crypto.tls; - -public class SecurityParameters -{ - byte[] clientRandom = null; - byte[] serverRandom = null; - byte[] masterSecret = null; - - public byte[] getClientRandom() - { - return clientRandom; - } - - public byte[] getServerRandom() - { - return serverRandom; - } - - public byte[] getMasterSecret() - { - return masterSecret; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java b/src/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java deleted file mode 100644 index 9e70ed0..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; - -public interface TlsAgreementCredentials extends TlsCredentials -{ - byte[] generateAgreement(AsymmetricKeyParameter serverPublicKey) throws IOException; -} diff --git a/src/org/bouncycastle/crypto/tls/TlsAuthentication.java b/src/org/bouncycastle/crypto/tls/TlsAuthentication.java deleted file mode 100644 index e280009..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsAuthentication.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -public interface TlsAuthentication -{ - /** - * Called by the protocol handler to report the server certificate - * Note: this method is responsible for certificate verification and validation - * - * @param serverCertificate the server certificate received - * @throws IOException - */ - void notifyServerCertificate(Certificate serverCertificate) throws IOException; - - /** - * Return client credentials in response to server's certificate request - * - * @param certificateRequest details of the certificate request - * @return a TlsCredentials object or null for no client authentication - * @throws IOException - */ - TlsCredentials getClientCredentials(CertificateRequest certificateRequest) throws IOException; -} diff --git a/src/org/bouncycastle/crypto/tls/TlsBlockCipher.java b/src/org/bouncycastle/crypto/tls/TlsBlockCipher.java deleted file mode 100644 index dd1a963..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsBlockCipher.java +++ /dev/null @@ -1,240 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.util.Arrays; - -/** - * A generic TLS 1.0 / SSLv3 block cipher. - * This can be used for AES or 3DES for example. - */ -public class TlsBlockCipher implements TlsCipher -{ - protected TlsClientContext context; - - protected BlockCipher encryptCipher; - protected BlockCipher decryptCipher; - - protected TlsMac writeMac; - protected TlsMac readMac; - - public TlsMac getWriteMac() - { - return writeMac; - } - - public TlsMac getReadMac() - { - return readMac; - } - - public TlsBlockCipher(TlsClientContext context, BlockCipher encryptCipher, - BlockCipher decryptCipher, Digest writeDigest, Digest readDigest, int cipherKeySize) - { - this.context = context; - this.encryptCipher = encryptCipher; - this.decryptCipher = decryptCipher; - - int key_block_size = (2 * cipherKeySize) + writeDigest.getDigestSize() - + readDigest.getDigestSize() + encryptCipher.getBlockSize() - + decryptCipher.getBlockSize(); - - byte[] key_block = TlsUtils.calculateKeyBlock(context, key_block_size); - - int offset = 0; - - // Init MACs - writeMac = new TlsMac(context, writeDigest, key_block, offset, writeDigest.getDigestSize()); - offset += writeDigest.getDigestSize(); - readMac = new TlsMac(context, readDigest, key_block, offset, readDigest.getDigestSize()); - offset += readDigest.getDigestSize(); - - // Init Ciphers - this.initCipher(true, encryptCipher, key_block, cipherKeySize, offset, offset - + (cipherKeySize * 2)); - offset += cipherKeySize; - this.initCipher(false, decryptCipher, key_block, cipherKeySize, offset, offset - + cipherKeySize + encryptCipher.getBlockSize()); - - } - - protected void initCipher(boolean forEncryption, BlockCipher cipher, byte[] key_block, - int key_size, int key_offset, int iv_offset) - { - KeyParameter key_parameter = new KeyParameter(key_block, key_offset, key_size); - ParametersWithIV parameters_with_iv = new ParametersWithIV(key_parameter, key_block, - iv_offset, cipher.getBlockSize()); - cipher.init(forEncryption, parameters_with_iv); - } - - public byte[] encodePlaintext(short type, byte[] plaintext, int offset, int len) - { - int blocksize = encryptCipher.getBlockSize(); - int minPaddingSize = blocksize - ((len + writeMac.getSize() + 1) % blocksize); - int paddingSize = minPaddingSize; - - boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (isTls) - { - // Add a random number of extra blocks worth of padding - int maxExtraPadBlocks = (255 - minPaddingSize) / blocksize; - int actualExtraPadBlocks = chooseExtraPadBlocks(context.getSecureRandom(), maxExtraPadBlocks); - paddingSize += (actualExtraPadBlocks * blocksize); - } - - int totalsize = len + writeMac.getSize() + paddingSize + 1; - byte[] outbuf = new byte[totalsize]; - System.arraycopy(plaintext, offset, outbuf, 0, len); - byte[] mac = writeMac.calculateMac(type, plaintext, offset, len); - System.arraycopy(mac, 0, outbuf, len, mac.length); - int paddoffset = len + mac.length; - for (int i = 0; i <= paddingSize; i++) - { - outbuf[i + paddoffset] = (byte)paddingSize; - } - for (int i = 0; i < totalsize; i += blocksize) - { - encryptCipher.processBlock(outbuf, i, outbuf, i); - } - return outbuf; - } - - public byte[] decodeCiphertext(short type, byte[] ciphertext, int offset, int len) - throws IOException - { - // TODO TLS 1.1 (RFC 4346) introduces an explicit IV - - int minLength = readMac.getSize() + 1; - int blocksize = decryptCipher.getBlockSize(); - boolean decrypterror = false; - - /* - * ciphertext must be at least (macsize + 1) bytes long - */ - if (len < minLength) - { - throw new TlsFatalAlert(AlertDescription.decode_error); - } - - /* - * ciphertext must be a multiple of blocksize - */ - if (len % blocksize != 0) - { - throw new TlsFatalAlert(AlertDescription.decryption_failed); - } - - /* - * Decrypt all the ciphertext using the blockcipher - */ - for (int i = 0; i < len; i += blocksize) - { - decryptCipher.processBlock(ciphertext, i + offset, ciphertext, i + offset); - } - - /* - * Check if padding is correct - */ - int lastByteOffset = offset + len - 1; - - byte paddingsizebyte = ciphertext[lastByteOffset]; - - // Note: interpret as unsigned byte - int paddingsize = paddingsizebyte & 0xff; - - boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - int maxPaddingSize = len - minLength; - if (!isTls) - { - maxPaddingSize = Math.min(maxPaddingSize, blocksize); - } - - if (paddingsize > maxPaddingSize) - { - decrypterror = true; - paddingsize = 0; - } - else if (isTls) - { - /* - * Now, check all the padding-bytes (constant-time comparison). - * (Skipped for SSLv3, where the padding may be anything) - */ - byte diff = 0; - for (int i = lastByteOffset - paddingsize; i < lastByteOffset; ++i) - { - diff |= (ciphertext[i] ^ paddingsizebyte); - } - if (diff != 0) - { - /* Wrong padding */ - decrypterror = true; - paddingsize = 0; - } - } - - /* - * We now don't care if padding verification has failed or not, we will calculate - * the mac to give an attacker no kind of timing profile he can use to find out if - * mac verification failed or padding verification failed. - */ - int plaintextlength = len - minLength - paddingsize; - byte[] calculatedMac = readMac.calculateMac(type, ciphertext, offset, plaintextlength); - - /* - * Check all bytes in the mac (constant-time comparison). - */ - byte[] decryptedMac = new byte[calculatedMac.length]; - System.arraycopy(ciphertext, offset + plaintextlength, decryptedMac, 0, - calculatedMac.length); - - if (!Arrays.constantTimeAreEqual(calculatedMac, decryptedMac)) - { - decrypterror = true; - } - - /* - * Now, it is safe to fail. - */ - if (decrypterror) - { - throw new TlsFatalAlert(AlertDescription.bad_record_mac); - } - - byte[] plaintext = new byte[plaintextlength]; - System.arraycopy(ciphertext, offset, plaintext, 0, plaintextlength); - return plaintext; - } - - protected int chooseExtraPadBlocks(SecureRandom r, int max) - { -// return r.nextInt(max + 1); - - int x = r.nextInt(); - int n = lowestBitSet(x); - return Math.min(n, max); - } - - protected int lowestBitSet(int x) - { - if (x == 0) - { - return 32; - } - - int n = 0; - while ((x & 1) == 0) - { - ++n; - x >>= 1; - } - return n; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsCipher.java b/src/org/bouncycastle/crypto/tls/TlsCipher.java deleted file mode 100644 index 559914b..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsCipher.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -public interface TlsCipher -{ - byte[] encodePlaintext(short type, byte[] plaintext, int offset, int len) throws IOException; - - byte[] decodeCiphertext(short type, byte[] ciphertext, int offset, int len) throws IOException; -} diff --git a/src/org/bouncycastle/crypto/tls/TlsCipherFactory.java b/src/org/bouncycastle/crypto/tls/TlsCipherFactory.java deleted file mode 100644 index 77ea8f3..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsCipherFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -public interface TlsCipherFactory -{ - /** - * See enumeration classes EncryptionAlgorithm and DigestAlgorithm for appropriate argument values - */ - TlsCipher createCipher(TlsClientContext context, int encryptionAlgorithm, int digestAlgorithm) throws IOException; -} diff --git a/src/org/bouncycastle/crypto/tls/TlsClient.java b/src/org/bouncycastle/crypto/tls/TlsClient.java deleted file mode 100644 index ca39b65..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsClient.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.util.Hashtable; - -public interface TlsClient -{ - void init(TlsClientContext context); - - ProtocolVersion getClientVersion(); - - int[] getCipherSuites(); - - short[] getCompressionMethods(); - - // Hashtable is (Integer -> byte[]) - Hashtable getClientExtensions() throws IOException; - - void notifyServerVersion(ProtocolVersion selectedVersion) throws IOException; - - void notifySessionID(byte[] sessionID); - - void notifySelectedCipherSuite(int selectedCipherSuite); - - void notifySelectedCompressionMethod(short selectedCompressionMethod); - - void notifySecureRenegotiation(boolean secureNegotiation) throws IOException; - - // Hashtable is (Integer -> byte[]) - void processServerExtensions(Hashtable serverExtensions); - - TlsKeyExchange getKeyExchange() throws IOException; - - TlsAuthentication getAuthentication() throws IOException; - - TlsCompression getCompression() throws IOException; - - TlsCipher getCipher() throws IOException; -} diff --git a/src/org/bouncycastle/crypto/tls/TlsClientContext.java b/src/org/bouncycastle/crypto/tls/TlsClientContext.java deleted file mode 100644 index 4e5776b..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsClientContext.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import javabc.SecureRandom; - -public interface TlsClientContext -{ - SecureRandom getSecureRandom(); - - SecurityParameters getSecurityParameters(); - - ProtocolVersion getClientVersion(); - - ProtocolVersion getServerVersion(); - - Object getUserObject(); - - void setUserObject(Object userObject); -} diff --git a/src/org/bouncycastle/crypto/tls/TlsClientContextImpl.java b/src/org/bouncycastle/crypto/tls/TlsClientContextImpl.java deleted file mode 100644 index 0f1a15f..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsClientContextImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import javabc.SecureRandom; - -class TlsClientContextImpl implements TlsClientContext -{ - private SecureRandom secureRandom; - private SecurityParameters securityParameters; - - private ProtocolVersion clientVersion = null; - private ProtocolVersion serverVersion = null; - private Object userObject = null; - - TlsClientContextImpl(SecureRandom secureRandom, SecurityParameters securityParameters) - { - this.secureRandom = secureRandom; - this.securityParameters = securityParameters; - } - - public SecureRandom getSecureRandom() - { - return secureRandom; - } - - public SecurityParameters getSecurityParameters() - { - return securityParameters; - } - - public ProtocolVersion getClientVersion() - { - return clientVersion; - } - - public void setClientVersion(ProtocolVersion clientVersion) - { - this.clientVersion = clientVersion; - } - - public ProtocolVersion getServerVersion() - { - return serverVersion; - } - - public void setServerVersion(ProtocolVersion serverVersion) - { - this.serverVersion = serverVersion; - } - - public Object getUserObject() - { - return userObject; - } - - public void setUserObject(Object userObject) - { - this.userObject = userObject; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsCompression.java b/src/org/bouncycastle/crypto/tls/TlsCompression.java deleted file mode 100644 index cdeb7e3..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsCompression.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.OutputStream; - -public interface TlsCompression -{ - OutputStream compress(OutputStream output); - - OutputStream decompress(OutputStream output); -} diff --git a/src/org/bouncycastle/crypto/tls/TlsCredentials.java b/src/org/bouncycastle/crypto/tls/TlsCredentials.java deleted file mode 100644 index b8a8747..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsCredentials.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.bouncycastle.crypto.tls; - -public interface TlsCredentials -{ - Certificate getCertificate(); -} diff --git a/src/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java deleted file mode 100644 index 4235e93..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; -import javabc.BigInteger; - -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.io.SignerInputStream; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; - -class TlsDHEKeyExchange extends TlsDHKeyExchange -{ - TlsDHEKeyExchange(TlsClientContext context, int keyExchange) - { - super(context, keyExchange); - } - - public void skipServerKeyExchange() throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void processServerKeyExchange(InputStream is) - throws IOException - { - SecurityParameters securityParameters = context.getSecurityParameters(); - - Signer signer = initSigner(tlsSigner, securityParameters); - InputStream sigIn = new SignerInputStream(is, signer); - - byte[] pBytes = TlsUtils.readOpaque16(sigIn); - byte[] gBytes = TlsUtils.readOpaque16(sigIn); - byte[] YsBytes = TlsUtils.readOpaque16(sigIn); - - byte[] sigByte = TlsUtils.readOpaque16(is); - if (!signer.verifySignature(sigByte)) - { - throw new TlsFatalAlert(AlertDescription.bad_certificate); - } - - BigInteger p = new BigInteger(1, pBytes); - BigInteger g = new BigInteger(1, gBytes); - BigInteger Ys = new BigInteger(1, YsBytes); - - this.dhAgreeServerPublicKey = validateDHPublicKey(new DHPublicKeyParameters(Ys, - new DHParameters(p, g))); - } - - protected Signer initSigner(TlsSigner tlsSigner, SecurityParameters securityParameters) - { - Signer signer = tlsSigner.createVerifyer(this.serverPublicKey); - signer.update(securityParameters.clientRandom, 0, securityParameters.clientRandom.length); - signer.update(securityParameters.serverRandom, 0, securityParameters.serverRandom.length); - return signer; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java deleted file mode 100644 index 4dfa67d..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import javabc.BigInteger; - -import org.bouncycastle.asn1.x509.KeyUsage; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.asn1.x509.X509CertificateStructure; -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; -import org.bouncycastle.crypto.util.PublicKeyFactory; - -/** - * TLS 1.0 DH key exchange. - */ -class TlsDHKeyExchange implements TlsKeyExchange -{ - protected static final BigInteger ONE = BigInteger.valueOf(1); - protected static final BigInteger TWO = BigInteger.valueOf(2); - - protected TlsClientContext context; - protected int keyExchange; - protected TlsSigner tlsSigner; - - protected AsymmetricKeyParameter serverPublicKey = null; - protected DHPublicKeyParameters dhAgreeServerPublicKey = null; - protected TlsAgreementCredentials agreementCredentials; - protected DHPrivateKeyParameters dhAgreeClientPrivateKey = null; - - TlsDHKeyExchange(TlsClientContext context, int keyExchange) - { - switch (keyExchange) - { - case KeyExchangeAlgorithm.DH_RSA: - case KeyExchangeAlgorithm.DH_DSS: - this.tlsSigner = null; - break; - case KeyExchangeAlgorithm.DHE_RSA: - this.tlsSigner = new TlsRSASigner(); - break; - case KeyExchangeAlgorithm.DHE_DSS: - this.tlsSigner = new TlsDSSSigner(); - break; - default: - throw new IllegalArgumentException("unsupported key exchange algorithm"); - } - - this.context = context; - this.keyExchange = keyExchange; - } - - public void skipServerCertificate() throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void processServerCertificate(Certificate serverCertificate) throws IOException - { - X509CertificateStructure x509Cert = serverCertificate.certs[0]; - SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); - - try - { - this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); - } - catch (RuntimeException e) - { - throw new TlsFatalAlert(AlertDescription.unsupported_certificate); - } - - if (tlsSigner == null) - { - try - { - this.dhAgreeServerPublicKey = validateDHPublicKey((DHPublicKeyParameters)this.serverPublicKey); - } - catch (ClassCastException e) - { - throw new TlsFatalAlert(AlertDescription.certificate_unknown); - } - - TlsUtils.validateKeyUsage(x509Cert, KeyUsage.keyAgreement); - } - else - { - if (!tlsSigner.isValidPublicKey(this.serverPublicKey)) - { - throw new TlsFatalAlert(AlertDescription.certificate_unknown); - } - - TlsUtils.validateKeyUsage(x509Cert, KeyUsage.digitalSignature); - } - - // TODO - /* - * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the - * signing algorithm for the certificate must be the same as the algorithm for the - * certificate key." - */ - } - - public void skipServerKeyExchange() throws IOException - { - // OK - } - - public void processServerKeyExchange(InputStream is) - throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void validateCertificateRequest(CertificateRequest certificateRequest) - throws IOException - { - short[] types = certificateRequest.getCertificateTypes(); - for (int i = 0; i < types.length; ++i) - { - switch (types[i]) - { - case ClientCertificateType.rsa_sign: - case ClientCertificateType.dss_sign: - case ClientCertificateType.rsa_fixed_dh: - case ClientCertificateType.dss_fixed_dh: - case ClientCertificateType.ecdsa_sign: - break; - default: - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - } - - public void skipClientCredentials() throws IOException - { - this.agreementCredentials = null; - } - - public void processClientCredentials(TlsCredentials clientCredentials) throws IOException - { - if (clientCredentials instanceof TlsAgreementCredentials) - { - // TODO Validate client cert has matching parameters (see 'areCompatibleParameters')? - - this.agreementCredentials = (TlsAgreementCredentials)clientCredentials; - } - else if (clientCredentials instanceof TlsSignerCredentials) - { - // OK - } - else - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public void generateClientKeyExchange(OutputStream os) throws IOException - { - /* - * RFC 2246 7.4.7.2 If the client certificate already contains a suitable - * Diffie-Hellman key, then Yc is implicit and does not need to be sent again. In - * this case, the Client Key Exchange message will be sent, but will be empty. - */ - if (agreementCredentials == null) - { - generateEphemeralClientKeyExchange(dhAgreeServerPublicKey.getParameters(), os); - } - } - - public byte[] generatePremasterSecret() throws IOException - { - if (agreementCredentials != null) - { - return agreementCredentials.generateAgreement(dhAgreeServerPublicKey); - } - - return calculateDHBasicAgreement(dhAgreeServerPublicKey, dhAgreeClientPrivateKey); - } - - protected boolean areCompatibleParameters(DHParameters a, DHParameters b) - { - return a.getP().equals(b.getP()) && a.getG().equals(b.getG()); - } - - protected byte[] calculateDHBasicAgreement(DHPublicKeyParameters publicKey, - DHPrivateKeyParameters privateKey) - { - return TlsDHUtils.calculateDHBasicAgreement(publicKey, privateKey); - } - - protected AsymmetricCipherKeyPair generateDHKeyPair(DHParameters dhParams) - { - return TlsDHUtils.generateDHKeyPair(context.getSecureRandom(), dhParams); - } - - protected void generateEphemeralClientKeyExchange(DHParameters dhParams, OutputStream os) - throws IOException - { - this.dhAgreeClientPrivateKey = TlsDHUtils.generateEphemeralClientKeyExchange(context.getSecureRandom(), dhParams, os); - } - - protected DHPublicKeyParameters validateDHPublicKey(DHPublicKeyParameters key) - throws IOException - { - return TlsDHUtils.validateDHPublicKey(key); - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsDHUtils.java b/src/org/bouncycastle/crypto/tls/TlsDHUtils.java deleted file mode 100644 index 30e3c65..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsDHUtils.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.OutputStream; -import javabc.BigInteger; -import javabc.SecureRandom; - -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.agreement.DHBasicAgreement; -import org.bouncycastle.crypto.generators.DHBasicKeyPairGenerator; -import org.bouncycastle.crypto.params.DHKeyGenerationParameters; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; -import org.bouncycastle.util.BigIntegers; - -public class TlsDHUtils -{ - static final BigInteger ONE = BigInteger.valueOf(1); - static final BigInteger TWO = BigInteger.valueOf(2); - - public static byte[] calculateDHBasicAgreement(DHPublicKeyParameters publicKey, - DHPrivateKeyParameters privateKey) - { - DHBasicAgreement dhAgree = new DHBasicAgreement(); - dhAgree.init(privateKey); - BigInteger agreement = dhAgree.calculateAgreement(publicKey); - return BigIntegers.asUnsignedByteArray(agreement); - } - - public static AsymmetricCipherKeyPair generateDHKeyPair(SecureRandom random, DHParameters dhParams) - { - DHBasicKeyPairGenerator dhGen = new DHBasicKeyPairGenerator(); - dhGen.init(new DHKeyGenerationParameters(random, dhParams)); - return dhGen.generateKeyPair(); - } - - public static DHPrivateKeyParameters generateEphemeralClientKeyExchange(SecureRandom random, DHParameters dhParams, OutputStream os) - throws IOException - { - AsymmetricCipherKeyPair dhAgreeClientKeyPair = generateDHKeyPair(random, dhParams); - DHPrivateKeyParameters dhAgreeClientPrivateKey = (DHPrivateKeyParameters)dhAgreeClientKeyPair.getPrivate(); - - BigInteger Yc = ((DHPublicKeyParameters)dhAgreeClientKeyPair.getPublic()).getY(); - byte[] keData = BigIntegers.asUnsignedByteArray(Yc); - TlsUtils.writeOpaque16(keData, os); - - return dhAgreeClientPrivateKey; - } - - public static DHPublicKeyParameters validateDHPublicKey(DHPublicKeyParameters key) - throws IOException - { - BigInteger Y = key.getY(); - DHParameters params = key.getParameters(); - BigInteger p = params.getP(); - BigInteger g = params.getG(); - - if (!p.isProbablePrime(2)) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - if (g.compareTo(TWO) < 0 || g.compareTo(p.subtract(TWO)) > 0) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - if (Y.compareTo(TWO) < 0 || Y.compareTo(p.subtract(ONE)) > 0) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - - // TODO See RFC 2631 for more discussion of Diffie-Hellman validation - - return key; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsDSASigner.java b/src/org/bouncycastle/crypto/tls/TlsDSASigner.java deleted file mode 100644 index 8e5687a..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsDSASigner.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.digests.NullDigest; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.signers.DSADigestSigner; - -abstract class TlsDSASigner implements TlsSigner -{ - public byte[] calculateRawSignature(SecureRandom secureRandom, AsymmetricKeyParameter privateKey, byte[] md5andsha1) - throws CryptoException - { - // Note: Only use the SHA1 part of the hash - Signer signer = new DSADigestSigner(createDSAImpl(), new NullDigest()); - signer.init(true, new ParametersWithRandom(privateKey, secureRandom)); - signer.update(md5andsha1, 16, 20); - return signer.generateSignature(); - } - - public Signer createVerifyer(AsymmetricKeyParameter publicKey) - { - Signer verifyer = new DSADigestSigner(createDSAImpl(), new SHA1Digest()); - verifyer.init(false, publicKey); - return verifyer; - } - - protected abstract DSA createDSAImpl(); -} diff --git a/src/org/bouncycastle/crypto/tls/TlsDSSSigner.java b/src/org/bouncycastle/crypto/tls/TlsDSSSigner.java deleted file mode 100644 index 5a2400b..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsDSSSigner.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.DSAPublicKeyParameters; -import org.bouncycastle.crypto.signers.DSASigner; - -class TlsDSSSigner extends TlsDSASigner -{ - public boolean isValidPublicKey(AsymmetricKeyParameter publicKey) - { - return publicKey instanceof DSAPublicKeyParameters; - } - - protected DSA createDSAImpl() - { - return new DSASigner(); - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java deleted file mode 100644 index ee3d5a8..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; - -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.io.SignerInputStream; -import org.bouncycastle.crypto.params.ECDomainParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.math.ec.ECPoint; - -/** - * ECDHE key exchange (see RFC 4492) - */ -class TlsECDHEKeyExchange extends TlsECDHKeyExchange -{ - TlsECDHEKeyExchange(TlsClientContext context, int keyExchange) - { - super(context, keyExchange); - } - - public void skipServerKeyExchange() throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void processServerKeyExchange(InputStream is) - throws IOException - { - SecurityParameters securityParameters = context.getSecurityParameters(); - - Signer signer = initSigner(tlsSigner, securityParameters); - InputStream sigIn = new SignerInputStream(is, signer); - - short curveType = TlsUtils.readUint8(sigIn); - ECDomainParameters curve_params; - - // Currently, we only support named curves - if (curveType == ECCurveType.named_curve) - { - int namedCurve = TlsUtils.readUint16(sigIn); - - // TODO Check namedCurve is one we offered? - - curve_params = NamedCurve.getECParameters(namedCurve); - } - else - { - // TODO Add support for explicit curve parameters (read from sigIn) - - throw new TlsFatalAlert(AlertDescription.handshake_failure); - } - - byte[] publicBytes = TlsUtils.readOpaque8(sigIn); - - byte[] sigByte = TlsUtils.readOpaque16(is); - if (!signer.verifySignature(sigByte)) - { - throw new TlsFatalAlert(AlertDescription.bad_certificate); - } - - // TODO Check curve_params not null - - ECPoint Q = curve_params.getCurve().decodePoint(publicBytes); - - this.ecAgreeServerPublicKey = validateECPublicKey(new ECPublicKeyParameters(Q, curve_params)); - } - - public void validateCertificateRequest(CertificateRequest certificateRequest) - throws IOException - { - /* - * RFC 4492 3. [...] The ECDSA_fixed_ECDH and RSA_fixed_ECDH mechanisms are usable - * with ECDH_ECDSA and ECDH_RSA. Their use with ECDHE_ECDSA and ECDHE_RSA is - * prohibited because the use of a long-term ECDH client key would jeopardize the - * forward secrecy property of these algorithms. - */ - short[] types = certificateRequest.getCertificateTypes(); - for (int i = 0; i < types.length; ++i) - { - switch (types[i]) - { - case ClientCertificateType.rsa_sign: - case ClientCertificateType.dss_sign: - case ClientCertificateType.ecdsa_sign: - break; - default: - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - } - - public void processClientCredentials(TlsCredentials clientCredentials) throws IOException - { - if (clientCredentials instanceof TlsSignerCredentials) - { - // OK - } - else - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - protected Signer initSigner(TlsSigner tlsSigner, SecurityParameters securityParameters) - { - Signer signer = tlsSigner.createVerifyer(this.serverPublicKey); - signer.update(securityParameters.clientRandom, 0, securityParameters.clientRandom.length); - signer.update(securityParameters.serverRandom, 0, securityParameters.serverRandom.length); - return signer; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java deleted file mode 100644 index 5a95910..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java +++ /dev/null @@ -1,240 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import javabc.BigInteger; - -import org.bouncycastle.asn1.x509.KeyUsage; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.asn1.x509.X509CertificateStructure; -import org.bouncycastle.crypto.AsymmetricCipherKeyPair; -import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; -import org.bouncycastle.crypto.generators.ECKeyPairGenerator; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ECDomainParameters; -import org.bouncycastle.crypto.params.ECKeyGenerationParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.util.PublicKeyFactory; -import org.bouncycastle.util.BigIntegers; - -/** - * ECDH key exchange (see RFC 4492) - */ -class TlsECDHKeyExchange implements TlsKeyExchange -{ - protected TlsClientContext context; - protected int keyExchange; - protected TlsSigner tlsSigner; - - protected AsymmetricKeyParameter serverPublicKey; - protected ECPublicKeyParameters ecAgreeServerPublicKey; - protected TlsAgreementCredentials agreementCredentials; - protected ECPrivateKeyParameters ecAgreeClientPrivateKey = null; - - TlsECDHKeyExchange(TlsClientContext context, int keyExchange) - { - switch (keyExchange) - { - case KeyExchangeAlgorithm.ECDHE_RSA: - this.tlsSigner = new TlsRSASigner(); - break; - case KeyExchangeAlgorithm.ECDHE_ECDSA: - this.tlsSigner = new TlsECDSASigner(); - break; - case KeyExchangeAlgorithm.ECDH_RSA: - case KeyExchangeAlgorithm.ECDH_ECDSA: - this.tlsSigner = null; - break; - default: - throw new IllegalArgumentException("unsupported key exchange algorithm"); - } - - this.context = context; - this.keyExchange = keyExchange; - } - - public void skipServerCertificate() throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void processServerCertificate(Certificate serverCertificate) throws IOException - { - X509CertificateStructure x509Cert = serverCertificate.certs[0]; - SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); - - try - { - this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); - } - catch (RuntimeException e) - { - throw new TlsFatalAlert(AlertDescription.unsupported_certificate); - } - - if (tlsSigner == null) - { - try - { - this.ecAgreeServerPublicKey = validateECPublicKey((ECPublicKeyParameters)this.serverPublicKey); - } - catch (ClassCastException e) - { - throw new TlsFatalAlert(AlertDescription.certificate_unknown); - } - - TlsUtils.validateKeyUsage(x509Cert, KeyUsage.keyAgreement); - } - else - { - if (!tlsSigner.isValidPublicKey(this.serverPublicKey)) - { - throw new TlsFatalAlert(AlertDescription.certificate_unknown); - } - - TlsUtils.validateKeyUsage(x509Cert, KeyUsage.digitalSignature); - } - - // TODO - /* - * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the - * signing algorithm for the certificate must be the same as the algorithm for the - * certificate key." - */ - } - - public void skipServerKeyExchange() throws IOException - { - // do nothing - } - - public void processServerKeyExchange(InputStream is) - throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void validateCertificateRequest(CertificateRequest certificateRequest) - throws IOException - { - /* - * RFC 4492 3. [...] The ECDSA_fixed_ECDH and RSA_fixed_ECDH mechanisms are usable - * with ECDH_ECDSA and ECDH_RSA. Their use with ECDHE_ECDSA and ECDHE_RSA is - * prohibited because the use of a long-term ECDH client key would jeopardize the - * forward secrecy property of these algorithms. - */ - short[] types = certificateRequest.getCertificateTypes(); - for (int i = 0; i < types.length; ++i) - { - switch (types[i]) - { - case ClientCertificateType.rsa_sign: - case ClientCertificateType.dss_sign: - case ClientCertificateType.ecdsa_sign: - case ClientCertificateType.rsa_fixed_ecdh: - case ClientCertificateType.ecdsa_fixed_ecdh: - break; - default: - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - } - - public void skipClientCredentials() throws IOException - { - this.agreementCredentials = null; - } - - public void processClientCredentials(TlsCredentials clientCredentials) throws IOException - { - if (clientCredentials instanceof TlsAgreementCredentials) - { - // TODO Validate client cert has matching parameters (see 'areOnSameCurve')? - - this.agreementCredentials = (TlsAgreementCredentials)clientCredentials; - } - else if (clientCredentials instanceof TlsSignerCredentials) - { - // OK - } - else - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public void generateClientKeyExchange(OutputStream os) throws IOException - { - if (agreementCredentials == null) - { - generateEphemeralClientKeyExchange(ecAgreeServerPublicKey.getParameters(), os); - } - } - - public byte[] generatePremasterSecret() throws IOException - { - if (agreementCredentials != null) - { - return agreementCredentials.generateAgreement(ecAgreeServerPublicKey); - } - - return calculateECDHBasicAgreement(ecAgreeServerPublicKey, ecAgreeClientPrivateKey); - } - - protected boolean areOnSameCurve(ECDomainParameters a, ECDomainParameters b) - { - // TODO Move to ECDomainParameters.equals() or other utility method? - return a.getCurve().equals(b.getCurve()) && a.getG().equals(b.getG()) - && a.getN().equals(b.getN()) && a.getH().equals(b.getH()); - } - - protected byte[] externalizeKey(ECPublicKeyParameters keyParameters) throws IOException - { - // TODO Add support for compressed encoding and SPF extension - - /* - * RFC 4492 5.7. ...an elliptic curve point in uncompressed or compressed format. - * Here, the format MUST conform to what the server has requested through a - * Supported Point Formats Extension if this extension was used, and MUST be - * uncompressed if this extension was not used. - */ - return keyParameters.getQ().getEncoded(); - } - - protected AsymmetricCipherKeyPair generateECKeyPair(ECDomainParameters ecParams) - { - ECKeyPairGenerator keyPairGenerator = new ECKeyPairGenerator(); - ECKeyGenerationParameters keyGenerationParameters = new ECKeyGenerationParameters(ecParams, - context.getSecureRandom()); - keyPairGenerator.init(keyGenerationParameters); - return keyPairGenerator.generateKeyPair(); - } - - protected void generateEphemeralClientKeyExchange(ECDomainParameters ecParams, OutputStream os) - throws IOException - { - AsymmetricCipherKeyPair ecAgreeClientKeyPair = generateECKeyPair(ecParams); - this.ecAgreeClientPrivateKey = (ECPrivateKeyParameters)ecAgreeClientKeyPair.getPrivate(); - - byte[] keData = externalizeKey((ECPublicKeyParameters)ecAgreeClientKeyPair.getPublic()); - TlsUtils.writeOpaque8(keData, os); - } - - protected byte[] calculateECDHBasicAgreement(ECPublicKeyParameters publicKey, - ECPrivateKeyParameters privateKey) - { - ECDHBasicAgreement basicAgreement = new ECDHBasicAgreement(); - basicAgreement.init(privateKey); - BigInteger agreement = basicAgreement.calculateAgreement(publicKey); - return BigIntegers.asUnsignedByteArray(agreement); - } - - protected ECPublicKeyParameters validateECPublicKey(ECPublicKeyParameters key) - throws IOException - { - // TODO Check RFC 4492 for validation - return key; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsECDSASigner.java b/src/org/bouncycastle/crypto/tls/TlsECDSASigner.java deleted file mode 100644 index a01f925..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsECDSASigner.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import org.bouncycastle.crypto.DSA; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.signers.ECDSASigner; - -class TlsECDSASigner extends TlsDSASigner -{ - public boolean isValidPublicKey(AsymmetricKeyParameter publicKey) - { - return publicKey instanceof ECPublicKeyParameters; - } - - protected DSA createDSAImpl() - { - return new ECDSASigner(); - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsFatalAlert.java b/src/org/bouncycastle/crypto/tls/TlsFatalAlert.java deleted file mode 100644 index 3380dee..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsFatalAlert.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -public class TlsFatalAlert extends IOException -{ - private static final long serialVersionUID = 3584313123679111168L; - - private short alertDescription; - - public TlsFatalAlert(short alertDescription) - { - this.alertDescription = alertDescription; - } - - public short getAlertDescription() - { - return alertDescription; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsInputStream.java b/src/org/bouncycastle/crypto/tls/TlsInputStream.java deleted file mode 100644 index d4914ee..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsInputStream.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; - -/** - * An InputStream for an TLS 1.0 connection. - */ -class TlsInputStream extends InputStream -{ - private byte[] buf = new byte[1]; - private TlsProtocolHandler handler = null; - - TlsInputStream(TlsProtocolHandler handler) - { - this.handler = handler; - } - - public int read(byte[] buf, int offset, int len) throws IOException - { - return this.handler.readApplicationData(buf, offset, len); - } - - public int read() throws IOException - { - if (this.read(buf) < 0) - { - return -1; - } - return buf[0] & 0xff; - } - - public void close() throws IOException - { - handler.close(); - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsKeyExchange.java deleted file mode 100644 index c0f3fc2..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsKeyExchange.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -/** - * A generic interface for key exchange implementations in TLS 1.0. - */ -public interface TlsKeyExchange -{ - void skipServerCertificate() throws IOException; - - void processServerCertificate(Certificate serverCertificate) throws IOException; - - void skipServerKeyExchange() throws IOException; - - void processServerKeyExchange(InputStream is) - throws IOException; - - void validateCertificateRequest(CertificateRequest certificateRequest) throws IOException; - - void skipClientCredentials() throws IOException; - - void processClientCredentials(TlsCredentials clientCredentials) throws IOException; - - void generateClientKeyExchange(OutputStream os) throws IOException; - - byte[] generatePremasterSecret() throws IOException; -} diff --git a/src/org/bouncycastle/crypto/tls/TlsMac.java b/src/org/bouncycastle/crypto/tls/TlsMac.java deleted file mode 100644 index f3890da..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsMac.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.Mac; -import org.bouncycastle.crypto.macs.HMac; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.util.Arrays; - -/** - * A generic TLS MAC implementation, which can be used with any kind of Digest to act as - * an HMAC. - */ -public class TlsMac -{ - protected TlsClientContext context; - protected long seqNo; - protected byte[] secret; - protected Mac mac; - - /** - * Generate a new instance of an TlsMac. - * - * @param context the TLS client context - * @param digest The digest to use. - * @param key_block A byte-array where the key for this mac is located. - * @param offset The number of bytes to skip, before the key starts in the buffer. - * @param len The length of the key. - */ - public TlsMac(TlsClientContext context, Digest digest, byte[] key_block, int offset, int len) - { - this.context = context; - this.seqNo = 0; - - KeyParameter param = new KeyParameter(key_block, offset, len); - - this.secret = Arrays.clone(param.getKey()); - - boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (isTls) - { - this.mac = new HMac(digest); - } - else - { - this.mac = new SSL3Mac(digest); - } - - this.mac.init(param); - } - - /** - * @return the MAC write secret - */ - public byte[] getMACSecret() - { - return this.secret; - } - - /** - * @return the current write sequence number - */ - public long getSequenceNumber() - { - return this.seqNo; - } - - /** - * Increment the current write sequence number - */ - public void incSequenceNumber() - { - this.seqNo++; - } - - /** - * @return The Keysize of the mac. - */ - public int getSize() - { - return mac.getMacSize(); - } - - /** - * Calculate the mac for some given data. - *

        - * TlsMac will keep track of the sequence number internally. - * - * @param type The message type of the message. - * @param message A byte-buffer containing the message. - * @param offset The number of bytes to skip, before the message starts. - * @param len The length of the message. - * @return A new byte-buffer containing the mac value. - */ - public byte[] calculateMac(short type, byte[] message, int offset, int len) - { - ProtocolVersion serverVersion = context.getServerVersion(); - boolean isTls = serverVersion.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - ByteArrayOutputStream bosMac = new ByteArrayOutputStream(isTls ? 13 : 11); - try - { - TlsUtils.writeUint64(seqNo++, bosMac); - TlsUtils.writeUint8(type, bosMac); - - if (isTls) - { - TlsUtils.writeVersion(serverVersion, bosMac); - } - - TlsUtils.writeUint16(len, bosMac); - } - catch (IOException e) - { - // This should never happen - throw new IllegalStateException("Internal error during mac calculation"); - } - - byte[] macHeader = bosMac.toByteArray(); - mac.update(macHeader, 0, macHeader.length); - mac.update(message, offset, len); - - byte[] result = new byte[mac.getMacSize()]; - mac.doFinal(result, 0); - return result; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsNullCipher.java b/src/org/bouncycastle/crypto/tls/TlsNullCipher.java deleted file mode 100644 index 9e706a5..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsNullCipher.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bouncycastle.crypto.tls; - -/** - * A NULL CipherSuite in java, this should only be used during handshake. - */ -public class TlsNullCipher implements TlsCipher -{ - public byte[] encodePlaintext(short type, byte[] plaintext, int offset, int len) - { - return copyData(plaintext, offset, len); - } - - public byte[] decodeCiphertext(short type, byte[] ciphertext, int offset, int len) - { - return copyData(ciphertext, offset, len); - } - - protected byte[] copyData(byte[] text, int offset, int len) - { - byte[] result = new byte[len]; - System.arraycopy(text, offset, result, 0, len); - return result; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsNullCompression.java b/src/org/bouncycastle/crypto/tls/TlsNullCompression.java deleted file mode 100644 index 9381044..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsNullCompression.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.OutputStream; - -public class TlsNullCompression implements TlsCompression -{ - public OutputStream compress(OutputStream output) - { - return output; - } - - public OutputStream decompress(OutputStream output) - { - return output; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsOutputStream.java b/src/org/bouncycastle/crypto/tls/TlsOutputStream.java deleted file mode 100644 index 6eab662..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsOutputStream.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * An OutputStream for an TLS connection. - */ -class TlsOutputStream extends OutputStream -{ - private byte[] buf = new byte[1]; - private TlsProtocolHandler handler; - - TlsOutputStream(TlsProtocolHandler handler) - { - this.handler = handler; - } - - public void write(byte buf[], int offset, int len) throws IOException - { - this.handler.writeData(buf, offset, len); - } - - public void write(int arg0) throws IOException - { - buf[0] = (byte)arg0; - this.write(buf, 0, 1); - } - - public void close() throws IOException - { - handler.close(); - } - - public void flush() throws IOException - { - handler.flush(); - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsPSKIdentity.java b/src/org/bouncycastle/crypto/tls/TlsPSKIdentity.java deleted file mode 100644 index 4d5f73b..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsPSKIdentity.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bouncycastle.crypto.tls; - -public interface TlsPSKIdentity -{ - void skipIdentityHint(); - - void notifyIdentityHint(byte[] psk_identity_hint); - - byte[] getPSKIdentity(); - - byte[] getPSK(); -} diff --git a/src/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java deleted file mode 100644 index b2ecc98..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import javabc.BigInteger; - -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -class TlsPSKKeyExchange implements TlsKeyExchange -{ - protected TlsClientContext context; - protected int keyExchange; - protected TlsPSKIdentity pskIdentity; - - protected byte[] psk_identity_hint = null; - - protected DHPublicKeyParameters dhAgreeServerPublicKey = null; - protected DHPrivateKeyParameters dhAgreeClientPrivateKey = null; - - protected RSAKeyParameters rsaServerPublicKey = null; - protected byte[] premasterSecret; - - TlsPSKKeyExchange(TlsClientContext context, int keyExchange, TlsPSKIdentity pskIdentity) - { - switch (keyExchange) - { - case KeyExchangeAlgorithm.PSK: - case KeyExchangeAlgorithm.RSA_PSK: - case KeyExchangeAlgorithm.DHE_PSK: - break; - default: - throw new IllegalArgumentException("unsupported key exchange algorithm"); - } - - this.context = context; - this.keyExchange = keyExchange; - this.pskIdentity = pskIdentity; - } - - public void skipServerCertificate() throws IOException - { - // OK - } - - public void processServerCertificate(Certificate serverCertificate) throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void skipServerKeyExchange() throws IOException - { - this.psk_identity_hint = new byte[0]; - } - - public void processServerKeyExchange(InputStream is) throws IOException - { - this.psk_identity_hint = TlsUtils.readOpaque16(is); - - if (this.keyExchange == KeyExchangeAlgorithm.DHE_PSK) - { - byte[] pBytes = TlsUtils.readOpaque16(is); - byte[] gBytes = TlsUtils.readOpaque16(is); - byte[] YsBytes = TlsUtils.readOpaque16(is); - - BigInteger p = new BigInteger(1, pBytes); - BigInteger g = new BigInteger(1, gBytes); - BigInteger Ys = new BigInteger(1, YsBytes); - - this.dhAgreeServerPublicKey = TlsDHUtils.validateDHPublicKey(new DHPublicKeyParameters(Ys, - new DHParameters(p, g))); - } - else if (this.psk_identity_hint.length == 0) - { - // TODO Should we enforce that this message should have been skipped if hint is empty? -// throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - } - - public void validateCertificateRequest(CertificateRequest certificateRequest) - throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void skipClientCredentials() throws IOException - { - // OK - } - - public void processClientCredentials(TlsCredentials clientCredentials) throws IOException - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - - public void generateClientKeyExchange(OutputStream os) throws IOException - { - if (psk_identity_hint == null || psk_identity_hint.length == 0) - { - pskIdentity.skipIdentityHint(); - } - else - { - pskIdentity.notifyIdentityHint(psk_identity_hint); - } - - byte[] psk_identity = pskIdentity.getPSKIdentity(); - - TlsUtils.writeOpaque16(psk_identity, os); - - if (this.keyExchange == KeyExchangeAlgorithm.RSA_PSK) - { - this.premasterSecret = TlsRSAUtils.generateEncryptedPreMasterSecret(context, - this.rsaServerPublicKey, os); - } - else if (this.keyExchange == KeyExchangeAlgorithm.DHE_PSK) - { - this.dhAgreeClientPrivateKey = TlsDHUtils.generateEphemeralClientKeyExchange( - context.getSecureRandom(), dhAgreeServerPublicKey.getParameters(), os); - } - } - - public byte[] generatePremasterSecret() throws IOException - { - byte[] psk = pskIdentity.getPSK(); - byte[] other_secret = generateOtherSecret(psk.length); - - ByteArrayOutputStream buf = new ByteArrayOutputStream(4 + other_secret.length + psk.length); - TlsUtils.writeOpaque16(other_secret, buf); - TlsUtils.writeOpaque16(psk, buf); - return buf.toByteArray(); - } - - protected byte[] generateOtherSecret(int pskLength) - { - if (this.keyExchange == KeyExchangeAlgorithm.DHE_PSK) - { - return TlsDHUtils.calculateDHBasicAgreement(dhAgreeServerPublicKey, dhAgreeClientPrivateKey); - } - - if (this.keyExchange == KeyExchangeAlgorithm.RSA_PSK) - { - return this.premasterSecret; - } - - return new byte[pskLength]; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsProtocolHandler.java b/src/org/bouncycastle/crypto/tls/TlsProtocolHandler.java deleted file mode 100644 index 99eb3bc..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsProtocolHandler.java +++ /dev/null @@ -1,1259 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import javabc.SecureRandom; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Vector; - -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.crypto.prng.ThreadedSeedGenerator; -import org.bouncycastle.util.Arrays; - -/** - * An implementation of all high level protocols in TLS 1.0. - */ -public class TlsProtocolHandler -{ - private static final Integer EXT_RenegotiationInfo = new Integer(ExtensionType.renegotiation_info); - - /* - * Our Connection states - */ - private static final short CS_CLIENT_HELLO_SEND = 1; - private static final short CS_SERVER_HELLO_RECEIVED = 2; - private static final short CS_SERVER_CERTIFICATE_RECEIVED = 3; - private static final short CS_SERVER_KEY_EXCHANGE_RECEIVED = 4; - private static final short CS_CERTIFICATE_REQUEST_RECEIVED = 5; - private static final short CS_SERVER_HELLO_DONE_RECEIVED = 6; - private static final short CS_CLIENT_KEY_EXCHANGE_SEND = 7; - private static final short CS_CERTIFICATE_VERIFY_SEND = 8; - private static final short CS_CLIENT_CHANGE_CIPHER_SPEC_SEND = 9; - private static final short CS_CLIENT_FINISHED_SEND = 10; - private static final short CS_SERVER_CHANGE_CIPHER_SPEC_RECEIVED = 11; - private static final short CS_DONE = 12; - - private static final byte[] emptybuf = new byte[0]; - - private static final String TLS_ERROR_MESSAGE = "Internal TLS error, this could be an attack"; - - /* - * Queues for data from some protocols. - */ - private ByteQueue applicationDataQueue = new ByteQueue(); - private ByteQueue changeCipherSpecQueue = new ByteQueue(); - private ByteQueue alertQueue = new ByteQueue(); - private ByteQueue handshakeQueue = new ByteQueue(); - - /* - * The Record Stream we use - */ - private RecordStream rs; - private SecureRandom random; - - private TlsInputStream tlsInputStream = null; - private TlsOutputStream tlsOutputStream = null; - - private boolean closed = false; - private boolean failedWithError = false; - private boolean appDataReady = false; - private Hashtable clientExtensions; - - private SecurityParameters securityParameters = null; - - private TlsClientContextImpl tlsClientContext = null; - private TlsClient tlsClient = null; - private int[] offeredCipherSuites = null; - private short[] offeredCompressionMethods = null; - private TlsKeyExchange keyExchange = null; - private TlsAuthentication authentication = null; - private CertificateRequest certificateRequest = null; - - private short connection_state = 0; - - private static SecureRandom createSecureRandom() - { - /* - * We use our threaded seed generator to generate a good random seed. If the user - * has a better random seed, he should use the constructor with a SecureRandom. - */ - ThreadedSeedGenerator tsg = new ThreadedSeedGenerator(); - SecureRandom random = new SecureRandom(); - - /* - * Hopefully, 20 bytes in fast mode are good enough. - */ - random.setSeed(tsg.generateSeed(20, true)); - - return random; - } - - public TlsProtocolHandler(InputStream is, OutputStream os) - { - this(is, os, createSecureRandom()); - } - - public TlsProtocolHandler(InputStream is, OutputStream os, SecureRandom sr) - { - this.rs = new RecordStream(this, is, os); - this.random = sr; - } - - protected void processData(short protocol, byte[] buf, int offset, int len) throws IOException - { - /* - * Have a look at the protocol type, and add it to the correct queue. - */ - switch (protocol) - { - case ContentType.change_cipher_spec: - changeCipherSpecQueue.addData(buf, offset, len); - processChangeCipherSpec(); - break; - case ContentType.alert: - alertQueue.addData(buf, offset, len); - processAlert(); - break; - case ContentType.handshake: - handshakeQueue.addData(buf, offset, len); - processHandshake(); - break; - case ContentType.application_data: - if (!appDataReady) - { - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - } - applicationDataQueue.addData(buf, offset, len); - processApplicationData(); - break; - default: - /* - * Uh, we don't know this protocol. - * - * RFC2246 defines on page 13, that we should ignore this. - */ - } - } - - private void processHandshake() throws IOException - { - boolean read; - do - { - read = false; - /* - * We need the first 4 bytes, they contain type and length of the message. - */ - if (handshakeQueue.size() >= 4) - { - byte[] beginning = new byte[4]; - handshakeQueue.read(beginning, 0, 4, 0); - ByteArrayInputStream bis = new ByteArrayInputStream(beginning); - short type = TlsUtils.readUint8(bis); - int len = TlsUtils.readUint24(bis); - - /* - * Check if we have enough bytes in the buffer to read the full message. - */ - if (handshakeQueue.size() >= (len + 4)) - { - /* - * Read the message. - */ - byte[] buf = new byte[len]; - handshakeQueue.read(buf, 0, len, 4); - handshakeQueue.removeData(len + 4); - - /* - * RFC 2246 7.4.9. The value handshake_messages includes all handshake - * messages starting at client hello up to, but not including, this - * finished message. [..] Note: [Also,] Hello Request messages are - * omitted from handshake hashes. - */ - switch (type) - { - case HandshakeType.hello_request: - case HandshakeType.finished: - break; - default: - rs.updateHandshakeData(beginning, 0, 4); - rs.updateHandshakeData(buf, 0, len); - break; - } - - /* - * Now, parse the message. - */ - processHandshakeMessage(type, buf); - read = true; - } - } - } - while (read); - } - - private void processHandshakeMessage(short type, byte[] buf) throws IOException - { - ByteArrayInputStream is = new ByteArrayInputStream(buf); - - switch (type) - { - case HandshakeType.certificate: - { - switch (connection_state) - { - case CS_SERVER_HELLO_RECEIVED: - { - // Parse the Certificate message and send to cipher suite - - Certificate serverCertificate = Certificate.parse(is); - - assertEmpty(is); - - this.keyExchange.processServerCertificate(serverCertificate); - - this.authentication = tlsClient.getAuthentication(); - this.authentication.notifyServerCertificate(serverCertificate); - - break; - } - default: - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - } - - connection_state = CS_SERVER_CERTIFICATE_RECEIVED; - break; - } - case HandshakeType.finished: - switch (connection_state) - { - case CS_SERVER_CHANGE_CIPHER_SPEC_RECEIVED: - /* - * Read the checksum from the finished message, it has always 12 - * bytes for TLS 1.0 and 36 for SSLv3. - */ - boolean isTls = tlsClientContext.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - int checksumLength = isTls ? 12 : 36; - byte[] serverVerifyData = new byte[checksumLength]; - TlsUtils.readFully(serverVerifyData, is); - - assertEmpty(is); - - /* - * Calculate our own checksum. - */ - byte[] expectedServerVerifyData = TlsUtils.calculateVerifyData(tlsClientContext, - "server finished", rs.getCurrentHash(TlsUtils.SSL_SERVER)); - - /* - * Compare both checksums. - */ - if (!Arrays.constantTimeAreEqual(expectedServerVerifyData, serverVerifyData)) - { - /* - * Wrong checksum in the finished message. - */ - this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); - } - - connection_state = CS_DONE; - - /* - * We are now ready to receive application data. - */ - this.appDataReady = true; - break; - default: - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - } - break; - case HandshakeType.server_hello: - switch (connection_state) - { - case CS_CLIENT_HELLO_SEND: - /* - * Read the server hello message - */ - ProtocolVersion server_version = TlsUtils.readVersion(is); - ProtocolVersion client_version = this.tlsClientContext.getClientVersion(); - if (server_version.getFullVersion() > client_version.getFullVersion()) - { - this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); - } - - this.tlsClientContext.setServerVersion(server_version); - this.tlsClient.notifyServerVersion(server_version); - - /* - * Read the server random - */ - securityParameters.serverRandom = new byte[32]; - TlsUtils.readFully(securityParameters.serverRandom, is); - - byte[] sessionID = TlsUtils.readOpaque8(is); - if (sessionID.length > 32) - { - this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); - } - - this.tlsClient.notifySessionID(sessionID); - - /* - * Find out which CipherSuite the server has chosen and check that - * it was one of the offered ones. - */ - int selectedCipherSuite = TlsUtils.readUint16(is); - if (!arrayContains(offeredCipherSuites, selectedCipherSuite) - || selectedCipherSuite == CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV) - { - this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); - } - - this.tlsClient.notifySelectedCipherSuite(selectedCipherSuite); - - /* - * Find out which CompressionMethod the server has chosen and check that - * it was one of the offered ones. - */ - short selectedCompressionMethod = TlsUtils.readUint8(is); - if (!arrayContains(offeredCompressionMethods, selectedCompressionMethod)) - { - this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); - } - - this.tlsClient.notifySelectedCompressionMethod(selectedCompressionMethod); - - /* - * RFC3546 2.2 The extended server hello message format MAY be - * sent in place of the server hello message when the client has - * requested extended functionality via the extended client hello - * message specified in Section 2.1. ... Note that the extended - * server hello message is only sent in response to an extended - * client hello message. This prevents the possibility that the - * extended server hello message could "break" existing TLS 1.0 - * clients. - */ - - /* - * TODO RFC 3546 2.3 If [...] the older session is resumed, then - * the server MUST ignore extensions appearing in the client - * hello, and send a server hello containing no extensions. - */ - - // Integer -> byte[] - Hashtable serverExtensions = new Hashtable(); - - if (is.available() > 0) - { - // Process extensions from extended server hello - byte[] extBytes = TlsUtils.readOpaque16(is); - - ByteArrayInputStream ext = new ByteArrayInputStream(extBytes); - while (ext.available() > 0) - { - Integer extType = new Integer(TlsUtils.readUint16(ext)); - byte[] extValue = TlsUtils.readOpaque16(ext); - - /* - * RFC 5746 Note that sending a "renegotiation_info" - * extension in response to a ClientHello containing only - * the SCSV is an explicit exception to the prohibition in - * RFC 5246, Section 7.4.1.4, on the server sending - * unsolicited extensions and is only allowed because the - * client is signaling its willingness to receive the - * extension via the TLS_EMPTY_RENEGOTIATION_INFO_SCSV - * SCSV. TLS implementations MUST continue to comply with - * Section 7.4.1.4 for all other extensions. - */ - - if (!extType.equals(EXT_RenegotiationInfo) - && clientExtensions.get(extType) == null) - { - /* - * RFC 3546 2.3 Note that for all extension types - * (including those defined in future), the extension - * type MUST NOT appear in the extended server hello - * unless the same extension type appeared in the - * corresponding client hello. Thus clients MUST abort - * the handshake if they receive an extension type in - * the extended server hello that they did not request - * in the associated (extended) client hello. - */ - this.failWithError(AlertLevel.fatal, - AlertDescription.unsupported_extension); - } - - if (serverExtensions.containsKey(extType)) - { - /* - * RFC 3546 2.3 Also note that when multiple - * extensions of different types are present in the - * extended client hello or the extended server hello, - * the extensions may appear in any order. There MUST - * NOT be more than one extension of the same type. - */ - this.failWithError(AlertLevel.fatal, - AlertDescription.illegal_parameter); - } - - serverExtensions.put(extType, extValue); - } - } - - assertEmpty(is); - - /* - * RFC 5746 3.4. When a ServerHello is received, the client MUST - * check if it includes the "renegotiation_info" extension: - */ - { - boolean secure_negotiation = serverExtensions.containsKey(EXT_RenegotiationInfo); - - /* - * If the extension is present, set the secure_renegotiation - * flag to TRUE. The client MUST then verify that the length - * of the "renegotiated_connection" field is zero, and if it - * is not, MUST abort the handshake (by sending a fatal - * handshake_failure alert). - */ - if (secure_negotiation) - { - byte[] renegExtValue = (byte[])serverExtensions.get(EXT_RenegotiationInfo); - - if (!Arrays.constantTimeAreEqual(renegExtValue, - createRenegotiationInfo(emptybuf))) - { - this.failWithError(AlertLevel.fatal, - AlertDescription.handshake_failure); - } - } - - tlsClient.notifySecureRenegotiation(secure_negotiation); - } - - if (clientExtensions != null) - { - tlsClient.processServerExtensions(serverExtensions); - } - - this.keyExchange = tlsClient.getKeyExchange(); - - connection_state = CS_SERVER_HELLO_RECEIVED; - break; - default: - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - } - break; - case HandshakeType.server_hello_done: - switch (connection_state) - { - case CS_SERVER_HELLO_RECEIVED: - - // There was no server certificate message; check it's OK - this.keyExchange.skipServerCertificate(); - this.authentication = null; - - // NB: Fall through to next case label - - case CS_SERVER_CERTIFICATE_RECEIVED: - - // There was no server key exchange message; check it's OK - this.keyExchange.skipServerKeyExchange(); - - // NB: Fall through to next case label - - case CS_SERVER_KEY_EXCHANGE_RECEIVED: - case CS_CERTIFICATE_REQUEST_RECEIVED: - - assertEmpty(is); - - connection_state = CS_SERVER_HELLO_DONE_RECEIVED; - - TlsCredentials clientCreds = null; - if (certificateRequest == null) - { - this.keyExchange.skipClientCredentials(); - } - else - { - clientCreds = this.authentication.getClientCredentials(certificateRequest); - - if (clientCreds == null) - { - this.keyExchange.skipClientCredentials(); - - boolean isTls = tlsClientContext.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (isTls) - { - sendClientCertificate(Certificate.EMPTY_CHAIN); - } - else - { - sendAlert(AlertLevel.warning, AlertDescription.no_certificate); - } - } - else - { - this.keyExchange.processClientCredentials(clientCreds); - - sendClientCertificate(clientCreds.getCertificate()); - } - } - - /* - * Send the client key exchange message, depending on the key - * exchange we are using in our CipherSuite. - */ - sendClientKeyExchange(); - - connection_state = CS_CLIENT_KEY_EXCHANGE_SEND; - - /* - * Calculate the master_secret - */ - byte[] pms = this.keyExchange.generatePremasterSecret(); - - securityParameters.masterSecret = TlsUtils.calculateMasterSecret( - this.tlsClientContext, pms); - - // TODO Is there a way to ensure the data is really overwritten? - /* - * RFC 2246 8.1. The pre_master_secret should be deleted from - * memory once the master_secret has been computed. - */ - Arrays.fill(pms, (byte)0); - - if (clientCreds != null && clientCreds instanceof TlsSignerCredentials) - { - TlsSignerCredentials signerCreds = (TlsSignerCredentials)clientCreds; - byte[] md5andsha1 = rs.getCurrentHash(null); - byte[] clientCertificateSignature = signerCreds.generateCertificateSignature( - md5andsha1); - sendCertificateVerify(clientCertificateSignature); - - connection_state = CS_CERTIFICATE_VERIFY_SEND; - } - - /* - * Now, we send change cipher state - */ - byte[] cmessage = new byte[1]; - cmessage[0] = 1; - rs.writeMessage(ContentType.change_cipher_spec, cmessage, 0, - cmessage.length); - - connection_state = CS_CLIENT_CHANGE_CIPHER_SPEC_SEND; - - /* - * Initialize our cipher suite - */ - rs.clientCipherSpecDecided(tlsClient.getCompression(), tlsClient.getCipher()); - - /* - * Send our finished message. - */ - byte[] clientVerifyData = TlsUtils.calculateVerifyData(tlsClientContext, - "client finished", rs.getCurrentHash(TlsUtils.SSL_CLIENT)); - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - TlsUtils.writeUint8(HandshakeType.finished, bos); - TlsUtils.writeOpaque24(clientVerifyData, bos); - byte[] message = bos.toByteArray(); - - rs.writeMessage(ContentType.handshake, message, 0, message.length); - - this.connection_state = CS_CLIENT_FINISHED_SEND; - break; - default: - this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); - } - break; - case HandshakeType.server_key_exchange: - { - switch (connection_state) - { - case CS_SERVER_HELLO_RECEIVED: - - // There was no server certificate message; check it's OK - this.keyExchange.skipServerCertificate(); - this.authentication = null; - - // NB: Fall through to next case label - - case CS_SERVER_CERTIFICATE_RECEIVED: - - this.keyExchange.processServerKeyExchange(is); - - assertEmpty(is); - break; - - default: - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - } - - this.connection_state = CS_SERVER_KEY_EXCHANGE_RECEIVED; - break; - } - case HandshakeType.certificate_request: - { - switch (connection_state) - { - case CS_SERVER_CERTIFICATE_RECEIVED: - - // There was no server key exchange message; check it's OK - this.keyExchange.skipServerKeyExchange(); - - // NB: Fall through to next case label - - case CS_SERVER_KEY_EXCHANGE_RECEIVED: - { - if (this.authentication == null) - { - /* - * RFC 2246 7.4.4. It is a fatal handshake_failure alert - * for an anonymous server to request client identification. - */ - this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); - } - - int numTypes = TlsUtils.readUint8(is); - short[] certificateTypes = new short[numTypes]; - for (int i = 0; i < numTypes; ++i) - { - certificateTypes[i] = TlsUtils.readUint8(is); - } - - byte[] authorities = TlsUtils.readOpaque16(is); - - assertEmpty(is); - - Vector authorityDNs = new Vector(); - - ByteArrayInputStream bis = new ByteArrayInputStream(authorities); - while (bis.available() > 0) - { - byte[] dnBytes = TlsUtils.readOpaque16(bis); - authorityDNs.addElement(X500Name.getInstance(ASN1Primitive.fromByteArray(dnBytes))); - } - - this.certificateRequest = new CertificateRequest(certificateTypes, - authorityDNs); - this.keyExchange.validateCertificateRequest(this.certificateRequest); - - break; - } - default: - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - } - - this.connection_state = CS_CERTIFICATE_REQUEST_RECEIVED; - break; - } - case HandshakeType.hello_request: - /* - * RFC 2246 7.4.1.1 Hello request This message will be ignored by the - * client if the client is currently negotiating a session. This message - * may be ignored by the client if it does not wish to renegotiate a - * session, or the client may, if it wishes, respond with a - * no_renegotiation alert. - */ - if (connection_state == CS_DONE) - { - // Renegotiation not supported yet - sendAlert(AlertLevel.warning, AlertDescription.no_renegotiation); - } - break; - case HandshakeType.client_key_exchange: - case HandshakeType.certificate_verify: - case HandshakeType.client_hello: - default: - // We do not support this! - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - break; - } - } - - private void processApplicationData() - { - /* - * There is nothing we need to do here. - * - * This function could be used for callbacks when application data arrives in the - * future. - */ - } - - private void processAlert() throws IOException - { - while (alertQueue.size() >= 2) - { - /* - * An alert is always 2 bytes. Read the alert. - */ - byte[] tmp = new byte[2]; - alertQueue.read(tmp, 0, 2, 0); - alertQueue.removeData(2); - short level = tmp[0]; - short description = tmp[1]; - if (level == AlertLevel.fatal) - { - /* - * This is a fatal error. - */ - this.failedWithError = true; - this.closed = true; - /* - * Now try to close the stream, ignore errors. - */ - try - { - rs.close(); - } - catch (Exception e) - { - - } - throw new IOException(TLS_ERROR_MESSAGE); - } - else - { - /* - * This is just a warning. - */ - if (description == AlertDescription.close_notify) - { - /* - * Close notify - */ - this.failWithError(AlertLevel.warning, AlertDescription.close_notify); - } - /* - * If it is just a warning, we continue. - */ - } - } - } - - /** - * This method is called, when a change cipher spec message is received. - * - * @throws IOException If the message has an invalid content or the handshake is not - * in the correct state. - */ - private void processChangeCipherSpec() throws IOException - { - while (changeCipherSpecQueue.size() > 0) - { - /* - * A change cipher spec message is only one byte with the value 1. - */ - byte[] b = new byte[1]; - changeCipherSpecQueue.read(b, 0, 1, 0); - changeCipherSpecQueue.removeData(1); - if (b[0] != 1) - { - /* - * This should never happen. - */ - this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); - } - - /* - * Check if we are in the correct connection state. - */ - if (this.connection_state != CS_CLIENT_FINISHED_SEND) - { - this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); - } - - rs.serverClientSpecReceived(); - - this.connection_state = CS_SERVER_CHANGE_CIPHER_SPEC_RECEIVED; - } - } - - private void sendClientCertificate(Certificate clientCert) throws IOException - { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - TlsUtils.writeUint8(HandshakeType.certificate, bos); - - // Reserve space for length - TlsUtils.writeUint24(0, bos); - - clientCert.encode(bos); - byte[] message = bos.toByteArray(); - - // Patch actual length back in - TlsUtils.writeUint24(message.length - 4, message, 1); - - rs.writeMessage(ContentType.handshake, message, 0, message.length); - } - - private void sendClientKeyExchange() throws IOException - { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - TlsUtils.writeUint8(HandshakeType.client_key_exchange, bos); - - // Reserve space for length - TlsUtils.writeUint24(0, bos); - - this.keyExchange.generateClientKeyExchange(bos); - byte[] message = bos.toByteArray(); - - // Patch actual length back in - TlsUtils.writeUint24(message.length - 4, message, 1); - - rs.writeMessage(ContentType.handshake, message, 0, message.length); - } - - private void sendCertificateVerify(byte[] data) throws IOException - { - /* - * Send signature of handshake messages so far to prove we are the owner of the - * cert See RFC 2246 sections 4.7, 7.4.3 and 7.4.8 - */ - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - TlsUtils.writeUint8(HandshakeType.certificate_verify, bos); - TlsUtils.writeUint24(data.length + 2, bos); - TlsUtils.writeOpaque16(data, bos); - byte[] message = bos.toByteArray(); - - rs.writeMessage(ContentType.handshake, message, 0, message.length); - } - - /** - * Connects to the remote system. - * - * @param verifyer Will be used when a certificate is received to verify that this - * certificate is accepted by the client. - * @throws IOException If handshake was not successful. - * - * @deprecated use version taking TlsClient - */ - public void connect(CertificateVerifyer verifyer) throws IOException - { - this.connect(new LegacyTlsClient(verifyer)); - } - - /** - * Connects to the remote system using client authentication - * - * @param tlsClient - * @throws IOException If handshake was not successful. - */ - public void connect(TlsClient tlsClient) throws IOException - { - if (tlsClient == null) - { - throw new IllegalArgumentException("'tlsClient' cannot be null"); - } - if (this.tlsClient != null) - { - throw new IllegalStateException("connect can only be called once"); - } - - /* - * Send Client hello - * - * First, generate some random data. - */ - this.securityParameters = new SecurityParameters(); - this.securityParameters.clientRandom = new byte[32]; - random.nextBytes(securityParameters.clientRandom); - TlsUtils.writeGMTUnixTime(securityParameters.clientRandom, 0); - - this.tlsClientContext = new TlsClientContextImpl(random, securityParameters); - - this.rs.init(tlsClientContext); - - this.tlsClient = tlsClient; - this.tlsClient.init(tlsClientContext); - - ByteArrayOutputStream os = new ByteArrayOutputStream(); - - ProtocolVersion client_version = this.tlsClient.getClientVersion(); - this.tlsClientContext.setClientVersion(client_version); - // TODO For SSLv3 support, server version needs to be set to ProtocolVersion.SSLv3 - this.tlsClientContext.setServerVersion(client_version); - TlsUtils.writeVersion(client_version, os); - - os.write(securityParameters.clientRandom); - - /* - * Length of Session id - */ - TlsUtils.writeUint8((short)0, os); - - /* - * Cipher suites - */ - this.offeredCipherSuites = this.tlsClient.getCipherSuites(); - - // Integer -> byte[] - this.clientExtensions = this.tlsClient.getClientExtensions(); - - // Cipher Suites (and SCSV) - { - /* - * RFC 5746 3.4. The client MUST include either an empty "renegotiation_info" - * extension, or the TLS_EMPTY_RENEGOTIATION_INFO_SCSV signaling cipher suite - * value in the ClientHello. Including both is NOT RECOMMENDED. - */ - boolean noRenegExt = clientExtensions == null - || clientExtensions.get(EXT_RenegotiationInfo) == null; - - int count = offeredCipherSuites.length; - if (noRenegExt) - { - // Note: 1 extra slot for TLS_EMPTY_RENEGOTIATION_INFO_SCSV - ++count; - } - - TlsUtils.writeUint16(2 * count, os); - TlsUtils.writeUint16Array(offeredCipherSuites, os); - - if (noRenegExt) - { - TlsUtils.writeUint16(CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV, os); - } - } - - // Compression methods - this.offeredCompressionMethods = this.tlsClient.getCompressionMethods(); - - TlsUtils.writeUint8((short)offeredCompressionMethods.length, os); - TlsUtils.writeUint8Array(offeredCompressionMethods, os); - - // Extensions - if (clientExtensions != null) - { - ByteArrayOutputStream ext = new ByteArrayOutputStream(); - - Enumeration keys = clientExtensions.keys(); - while (keys.hasMoreElements()) - { - Integer extType = (Integer)keys.nextElement(); - writeExtension(ext, extType, (byte[])clientExtensions.get(extType)); - } - - TlsUtils.writeOpaque16(ext.toByteArray(), os); - } - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - TlsUtils.writeUint8(HandshakeType.client_hello, bos); - TlsUtils.writeUint24(os.size(), bos); - bos.write(os.toByteArray()); - byte[] message = bos.toByteArray(); - - safeWriteMessage(ContentType.handshake, message, 0, message.length); - - connection_state = CS_CLIENT_HELLO_SEND; - - /* - * We will now read data, until we have completed the handshake. - */ - while (connection_state != CS_DONE) - { - safeReadData(); - } - - this.tlsInputStream = new TlsInputStream(this); - this.tlsOutputStream = new TlsOutputStream(this); - } - - /** - * Read data from the network. The method will return immediately, if there is still - * some data left in the buffer, or block until some application data has been read - * from the network. - * - * @param buf The buffer where the data will be copied to. - * @param offset The position where the data will be placed in the buffer. - * @param len The maximum number of bytes to read. - * @return The number of bytes read. - * @throws IOException If something goes wrong during reading data. - */ - protected int readApplicationData(byte[] buf, int offset, int len) throws IOException - { - while (applicationDataQueue.size() == 0) - { - /* - * We need to read some data. - */ - if (this.closed) - { - if (this.failedWithError) - { - /* - * Something went terribly wrong, we should throw an IOException - */ - throw new IOException(TLS_ERROR_MESSAGE); - } - - /* - * Connection has been closed, there is no more data to read. - */ - return -1; - } - - safeReadData(); - } - len = Math.min(len, applicationDataQueue.size()); - applicationDataQueue.read(buf, offset, len, 0); - applicationDataQueue.removeData(len); - return len; - } - - private void safeReadData() throws IOException - { - try - { - rs.readData(); - } - catch (TlsFatalAlert e) - { - if (!this.closed) - { - this.failWithError(AlertLevel.fatal, e.getAlertDescription()); - } - throw e; - } - catch (IOException e) - { - if (!this.closed) - { - this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); - } - throw e; - } - catch (RuntimeException e) - { - if (!this.closed) - { - this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); - } - throw e; - } - } - - private void safeWriteMessage(short type, byte[] buf, int offset, int len) throws IOException - { - try - { - rs.writeMessage(type, buf, offset, len); - } - catch (TlsFatalAlert e) - { - if (!this.closed) - { - this.failWithError(AlertLevel.fatal, e.getAlertDescription()); - } - throw e; - } - catch (IOException e) - { - if (!closed) - { - this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); - } - throw e; - } - catch (RuntimeException e) - { - if (!closed) - { - this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); - } - throw e; - } - } - - /** - * Send some application data to the remote system. - *

        - * The method will handle fragmentation internally. - * - * @param buf The buffer with the data. - * @param offset The position in the buffer where the data is placed. - * @param len The length of the data. - * @throws IOException If something goes wrong during sending. - */ - protected void writeData(byte[] buf, int offset, int len) throws IOException - { - if (this.closed) - { - if (this.failedWithError) - { - throw new IOException(TLS_ERROR_MESSAGE); - } - - throw new IOException("Sorry, connection has been closed, you cannot write more data"); - } - - /* - * Protect against known IV attack! - * - * DO NOT REMOVE THIS LINE, EXCEPT YOU KNOW EXACTLY WHAT YOU ARE DOING HERE. - */ - safeWriteMessage(ContentType.application_data, emptybuf, 0, 0); - - do - { - /* - * We are only allowed to write fragments up to 2^14 bytes. - */ - int toWrite = Math.min(len, 1 << 14); - - safeWriteMessage(ContentType.application_data, buf, offset, toWrite); - - offset += toWrite; - len -= toWrite; - } - while (len > 0); - - } - - /** - * @return An OutputStream which can be used to send data. - */ - public OutputStream getOutputStream() - { - return this.tlsOutputStream; - } - - /** - * @return An InputStream which can be used to read data. - */ - public InputStream getInputStream() - { - return this.tlsInputStream; - } - - /** - * Terminate this connection with an alert. - *

        - * Can be used for normal closure too. - * - * @param alertLevel The level of the alert, an be AlertLevel.fatal or AL_warning. - * @param alertDescription The exact alert message. - * @throws IOException If alert was fatal. - */ - private void failWithError(short alertLevel, short alertDescription) throws IOException - { - /* - * Check if the connection is still open. - */ - if (!closed) - { - /* - * Prepare the message - */ - this.closed = true; - - if (alertLevel == AlertLevel.fatal) - { - /* - * This is a fatal message. - */ - this.failedWithError = true; - } - sendAlert(alertLevel, alertDescription); - rs.close(); - if (alertLevel == AlertLevel.fatal) - { - throw new IOException(TLS_ERROR_MESSAGE); - } - } - else - { - throw new IOException(TLS_ERROR_MESSAGE); - } - } - - private void sendAlert(short alertLevel, short alertDescription) throws IOException - { - byte[] error = new byte[2]; - error[0] = (byte)alertLevel; - error[1] = (byte)alertDescription; - - rs.writeMessage(ContentType.alert, error, 0, 2); - } - - /** - * Closes this connection. - * - * @throws IOException If something goes wrong during closing. - */ - public void close() throws IOException - { - if (!closed) - { - this.failWithError(AlertLevel.warning, AlertDescription.close_notify); - } - } - - /** - * Make sure the InputStream is now empty. Fail otherwise. - * - * @param is The InputStream to check. - * @throws IOException If is is not empty. - */ - protected void assertEmpty(ByteArrayInputStream is) throws IOException - { - if (is.available() > 0) - { - throw new TlsFatalAlert(AlertDescription.decode_error); - } - } - - protected void flush() throws IOException - { - rs.flush(); - } - - private static boolean arrayContains(short[] a, short n) - { - for (int i = 0; i < a.length; ++i) - { - if (a[i] == n) - { - return true; - } - } - return false; - } - - private static boolean arrayContains(int[] a, int n) - { - for (int i = 0; i < a.length; ++i) - { - if (a[i] == n) - { - return true; - } - } - return false; - } - - private static byte[] createRenegotiationInfo(byte[] renegotiated_connection) - throws IOException - { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - TlsUtils.writeOpaque8(renegotiated_connection, buf); - return buf.toByteArray(); - } - - private static void writeExtension(OutputStream output, Integer extType, byte[] extValue) - throws IOException - { - TlsUtils.writeUint16(extType.intValue(), output); - TlsUtils.writeOpaque16(extValue, output); - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java deleted file mode 100644 index 828f9a8..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.bouncycastle.asn1.x509.KeyUsage; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.asn1.x509.X509CertificateStructure; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.RSAKeyParameters; -import org.bouncycastle.crypto.util.PublicKeyFactory; - -/** - * TLS 1.0 and SSLv3 RSA key exchange. - */ -class TlsRSAKeyExchange implements TlsKeyExchange -{ - protected TlsClientContext context; - - protected AsymmetricKeyParameter serverPublicKey = null; - - protected RSAKeyParameters rsaServerPublicKey = null; - - protected byte[] premasterSecret; - - TlsRSAKeyExchange(TlsClientContext context) - { - this.context = context; - } - - public void skipServerCertificate() throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void processServerCertificate(Certificate serverCertificate) throws IOException - { - X509CertificateStructure x509Cert = serverCertificate.certs[0]; - SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); - - try - { - this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); - } - catch (RuntimeException e) - { - throw new TlsFatalAlert(AlertDescription.unsupported_certificate); - } - - // Sanity check the PublicKeyFactory - if (this.serverPublicKey.isPrivate()) - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - - this.rsaServerPublicKey = validateRSAPublicKey((RSAKeyParameters)this.serverPublicKey); - - TlsUtils.validateKeyUsage(x509Cert, KeyUsage.keyEncipherment); - - // TODO - /* - * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the - * signing algorithm for the certificate must be the same as the algorithm for the - * certificate key." - */ - } - - public void skipServerKeyExchange() throws IOException - { - // OK - } - - public void processServerKeyExchange(InputStream is) - throws IOException - { - // TODO - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void validateCertificateRequest(CertificateRequest certificateRequest) - throws IOException - { - short[] types = certificateRequest.getCertificateTypes(); - for (int i = 0; i < types.length; ++i) - { - switch (types[i]) - { - case ClientCertificateType.rsa_sign: - case ClientCertificateType.dss_sign: - case ClientCertificateType.ecdsa_sign: - break; - default: - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - } - - public void skipClientCredentials() throws IOException - { - // OK - } - - public void processClientCredentials(TlsCredentials clientCredentials) throws IOException - { - if (!(clientCredentials instanceof TlsSignerCredentials)) - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - } - - public void generateClientKeyExchange(OutputStream os) throws IOException - { - this.premasterSecret = TlsRSAUtils.generateEncryptedPreMasterSecret(context, - this.rsaServerPublicKey, os); - } - - public byte[] generatePremasterSecret() throws IOException - { - byte[] tmp = this.premasterSecret; - this.premasterSecret = null; - return tmp; - } - - // Would be needed to process RSA_EXPORT server key exchange -// protected void processRSAServerKeyExchange(InputStream is, Signer signer) throws IOException -// { -// InputStream sigIn = is; -// if (signer != null) -// { -// sigIn = new SignerInputStream(is, signer); -// } -// -// byte[] modulusBytes = TlsUtils.readOpaque16(sigIn); -// byte[] exponentBytes = TlsUtils.readOpaque16(sigIn); -// -// if (signer != null) -// { -// byte[] sigByte = TlsUtils.readOpaque16(is); -// -// if (!signer.verifySignature(sigByte)) -// { -// handler.failWithError(AlertLevel.fatal, AlertDescription.bad_certificate); -// } -// } -// -// BigInteger modulus = new BigInteger(1, modulusBytes); -// BigInteger exponent = new BigInteger(1, exponentBytes); -// -// this.rsaServerPublicKey = validateRSAPublicKey(new RSAKeyParameters(false, modulus, -// exponent)); -// } - - protected RSAKeyParameters validateRSAPublicKey(RSAKeyParameters key) throws IOException - { - // TODO What is the minimum bit length required? -// key.getModulus().bitLength(); - - if (!key.getExponent().isProbablePrime(2)) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - - return key; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsRSASigner.java b/src/org/bouncycastle/crypto/tls/TlsRSASigner.java deleted file mode 100644 index 51f06ad..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsRSASigner.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.digests.NullDigest; -import org.bouncycastle.crypto.encodings.PKCS1Encoding; -import org.bouncycastle.crypto.engines.RSABlindedEngine; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSAKeyParameters; -import org.bouncycastle.crypto.signers.GenericSigner; - -class TlsRSASigner implements TlsSigner -{ - public byte[] calculateRawSignature(SecureRandom random, AsymmetricKeyParameter privateKey, byte[] md5andsha1) - throws CryptoException - { - Signer sig = new GenericSigner(new PKCS1Encoding(new RSABlindedEngine()), new NullDigest()); - sig.init(true, new ParametersWithRandom(privateKey, random)); - sig.update(md5andsha1, 0, md5andsha1.length); - return sig.generateSignature(); - } - - public Signer createVerifyer(AsymmetricKeyParameter publicKey) - { - Signer s = new GenericSigner(new PKCS1Encoding(new RSABlindedEngine()), new CombinedHash()); - s.init(false, publicKey); - return s; - } - - public boolean isValidPublicKey(AsymmetricKeyParameter publicKey) - { - return publicKey instanceof RSAKeyParameters && !publicKey.isPrivate(); - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsRSAUtils.java b/src/org/bouncycastle/crypto/tls/TlsRSAUtils.java deleted file mode 100644 index dde5936..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsRSAUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.OutputStream; - -import org.bouncycastle.crypto.InvalidCipherTextException; -import org.bouncycastle.crypto.encodings.PKCS1Encoding; -import org.bouncycastle.crypto.engines.RSABlindedEngine; -import org.bouncycastle.crypto.params.ParametersWithRandom; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -public class TlsRSAUtils -{ - public static byte[] generateEncryptedPreMasterSecret(TlsClientContext context, - RSAKeyParameters rsaServerPublicKey, OutputStream os) throws IOException - { - /* - * Choose a PremasterSecret and send it encrypted to the server - */ - byte[] premasterSecret = new byte[48]; - context.getSecureRandom().nextBytes(premasterSecret); - TlsUtils.writeVersion(context.getClientVersion(), premasterSecret, 0); - - PKCS1Encoding encoding = new PKCS1Encoding(new RSABlindedEngine()); - encoding.init(true, new ParametersWithRandom(rsaServerPublicKey, context.getSecureRandom())); - - try - { - boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - byte[] keData = encoding.processBlock(premasterSecret, 0, premasterSecret.length); - - if (isTls) - { - TlsUtils.writeOpaque16(keData, os); - } - else - { - os.write(keData); - } - } - catch (InvalidCipherTextException e) - { - /* - * This should never happen, only during decryption. - */ - throw new TlsFatalAlert(AlertDescription.internal_error); - } - - return premasterSecret; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsRuntimeException.java b/src/org/bouncycastle/crypto/tls/TlsRuntimeException.java deleted file mode 100644 index b516035..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsRuntimeException.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bouncycastle.crypto.tls; - -public class TlsRuntimeException extends RuntimeException -{ - private static final long serialVersionUID = 1928023487348344086L; - - Throwable e; - - public TlsRuntimeException(String message, Throwable e) - { - super(message); - - this.e = e; - } - - public TlsRuntimeException(String message) - { - super(message); - } - - public Throwable getCause() - { - return e; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java b/src/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java deleted file mode 100644 index 876c297..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java +++ /dev/null @@ -1,203 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import javabc.BigInteger; - -import org.bouncycastle.asn1.x509.KeyUsage; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.asn1.x509.X509CertificateStructure; -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.agreement.srp.SRP6Client; -import org.bouncycastle.crypto.agreement.srp.SRP6Util; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.io.SignerInputStream; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.util.PublicKeyFactory; -import org.bouncycastle.util.BigIntegers; - -/** - * TLS 1.1 SRP key exchange. - */ -class TlsSRPKeyExchange implements TlsKeyExchange -{ - protected TlsClientContext context; - protected int keyExchange; - protected TlsSigner tlsSigner; - protected byte[] identity; - protected byte[] password; - - protected AsymmetricKeyParameter serverPublicKey = null; - - protected byte[] s = null; - protected BigInteger B = null; - protected SRP6Client srpClient = new SRP6Client(); - - TlsSRPKeyExchange(TlsClientContext context, int keyExchange, byte[] identity, byte[] password) - { - switch (keyExchange) - { - case KeyExchangeAlgorithm.SRP: - this.tlsSigner = null; - break; - case KeyExchangeAlgorithm.SRP_RSA: - this.tlsSigner = new TlsRSASigner(); - break; - case KeyExchangeAlgorithm.SRP_DSS: - this.tlsSigner = new TlsDSSSigner(); - break; - default: - throw new IllegalArgumentException("unsupported key exchange algorithm"); - } - - this.context = context; - this.keyExchange = keyExchange; - this.identity = identity; - this.password = password; - } - - public void skipServerCertificate() throws IOException - { - if (tlsSigner != null) - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - } - - public void processServerCertificate(Certificate serverCertificate) throws IOException - { - if (tlsSigner == null) - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - X509CertificateStructure x509Cert = serverCertificate.certs[0]; - SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); - - try - { - this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); - } - catch (RuntimeException e) - { - throw new TlsFatalAlert(AlertDescription.unsupported_certificate); - } - - if (!tlsSigner.isValidPublicKey(this.serverPublicKey)) - { - throw new TlsFatalAlert(AlertDescription.certificate_unknown); - } - - TlsUtils.validateKeyUsage(x509Cert, KeyUsage.digitalSignature); - - // TODO - /* - * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the - * signing algorithm for the certificate must be the same as the algorithm for the - * certificate key." - */ - } - - public void skipServerKeyExchange() throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void processServerKeyExchange(InputStream is) throws IOException - { - SecurityParameters securityParameters = context.getSecurityParameters(); - - InputStream sigIn = is; - Signer signer = null; - - if (tlsSigner != null) - { - signer = initSigner(tlsSigner, securityParameters); - sigIn = new SignerInputStream(is, signer); - } - - byte[] NBytes = TlsUtils.readOpaque16(sigIn); - byte[] gBytes = TlsUtils.readOpaque16(sigIn); - byte[] sBytes = TlsUtils.readOpaque8(sigIn); - byte[] BBytes = TlsUtils.readOpaque16(sigIn); - - if (signer != null) - { - byte[] sigByte = TlsUtils.readOpaque16(is); - - if (!signer.verifySignature(sigByte)) - { - throw new TlsFatalAlert(AlertDescription.bad_certificate); - } - } - - BigInteger N = new BigInteger(1, NBytes); - BigInteger g = new BigInteger(1, gBytes); - - // TODO Validate group parameters (see RFC 5054) -// handler.failWithError(AlertLevel.fatal, AlertDescription.insufficient_security); - - this.s = sBytes; - - /* - * RFC 5054 2.5.3: The client MUST abort the handshake with an "illegal_parameter" - * alert if B % N = 0. - */ - try - { - this.B = SRP6Util.validatePublicValue(N, new BigInteger(1, BBytes)); - } - catch (CryptoException e) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - - this.srpClient.init(N, g, new SHA1Digest(), context.getSecureRandom()); - } - - public void validateCertificateRequest(CertificateRequest certificateRequest) - throws IOException - { - throw new TlsFatalAlert(AlertDescription.unexpected_message); - } - - public void skipClientCredentials() throws IOException - { - // OK - } - - public void processClientCredentials(TlsCredentials clientCredentials) throws IOException - { - throw new TlsFatalAlert(AlertDescription.internal_error); - } - - public void generateClientKeyExchange(OutputStream os) throws IOException - { - byte[] keData = BigIntegers.asUnsignedByteArray(srpClient.generateClientCredentials(s, - this.identity, this.password)); - TlsUtils.writeOpaque16(keData, os); - } - - public byte[] generatePremasterSecret() throws IOException - { - try - { - // TODO Check if this needs to be a fixed size - return BigIntegers.asUnsignedByteArray(srpClient.calculateSecret(B)); - } - catch (CryptoException e) - { - throw new TlsFatalAlert(AlertDescription.illegal_parameter); - } - } - - protected Signer initSigner(TlsSigner tlsSigner, SecurityParameters securityParameters) - { - Signer signer = tlsSigner.createVerifyer(this.serverPublicKey); - signer.update(securityParameters.clientRandom, 0, securityParameters.clientRandom.length); - signer.update(securityParameters.serverRandom, 0, securityParameters.serverRandom.length); - return signer; - } -} diff --git a/src/org/bouncycastle/crypto/tls/TlsSigner.java b/src/org/bouncycastle/crypto/tls/TlsSigner.java deleted file mode 100644 index 91c91de..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsSigner.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import javabc.SecureRandom; - -import org.bouncycastle.crypto.CryptoException; -import org.bouncycastle.crypto.Signer; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; - -interface TlsSigner -{ - byte[] calculateRawSignature(SecureRandom random, AsymmetricKeyParameter privateKey, byte[] md5andsha1) - throws CryptoException; - - Signer createVerifyer(AsymmetricKeyParameter publicKey); - - boolean isValidPublicKey(AsymmetricKeyParameter publicKey); -} diff --git a/src/org/bouncycastle/crypto/tls/TlsSignerCredentials.java b/src/org/bouncycastle/crypto/tls/TlsSignerCredentials.java deleted file mode 100644 index f0e5ac9..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsSignerCredentials.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.IOException; - -public interface TlsSignerCredentials extends TlsCredentials -{ - byte[] generateCertificateSignature(byte[] md5andsha1) throws IOException; -} diff --git a/src/org/bouncycastle/crypto/tls/TlsUtils.java b/src/org/bouncycastle/crypto/tls/TlsUtils.java deleted file mode 100644 index 59482a5..0000000 --- a/src/org/bouncycastle/crypto/tls/TlsUtils.java +++ /dev/null @@ -1,438 +0,0 @@ -package org.bouncycastle.crypto.tls; - -import java.io.EOFException; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.bouncycastle.asn1.DERBitString; -import org.bouncycastle.asn1.x509.KeyUsage; -import org.bouncycastle.asn1.x509.X509CertificateStructure; -import org.bouncycastle.asn1.x509.X509Extension; -import org.bouncycastle.asn1.x509.X509Extensions; -import org.bouncycastle.crypto.Digest; -import org.bouncycastle.crypto.digests.MD5Digest; -import org.bouncycastle.crypto.digests.SHA1Digest; -import org.bouncycastle.crypto.macs.HMac; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.util.Arrays; -import org.bouncycastle.util.Strings; -import org.bouncycastle.util.io.Streams; - -/** - * Some helper fuctions for MicroTLS. - */ -public class TlsUtils -{ - protected static void writeUint8(short i, OutputStream os) throws IOException - { - os.write(i); - } - - protected static void writeUint8(short i, byte[] buf, int offset) - { - buf[offset] = (byte)i; - } - - protected static void writeUint16(int i, OutputStream os) throws IOException - { - os.write(i >> 8); - os.write(i); - } - - protected static void writeUint16(int i, byte[] buf, int offset) - { - buf[offset] = (byte)(i >> 8); - buf[offset + 1] = (byte)i; - } - - protected static void writeUint24(int i, OutputStream os) throws IOException - { - os.write(i >> 16); - os.write(i >> 8); - os.write(i); - } - - protected static void writeUint24(int i, byte[] buf, int offset) - { - buf[offset] = (byte)(i >> 16); - buf[offset + 1] = (byte)(i >> 8); - buf[offset + 2] = (byte)(i); - } - - protected static void writeUint32(long i, OutputStream os) throws IOException - { - os.write((int)(i >> 24)); - os.write((int)(i >> 16)); - os.write((int)(i >> 8)); - os.write((int)(i)); - } - - protected static void writeUint32(long i, byte[] buf, int offset) - { - buf[offset] = (byte)(i >> 24); - buf[offset + 1] = (byte)(i >> 16); - buf[offset + 2] = (byte)(i >> 8); - buf[offset + 3] = (byte)(i); - } - - protected static void writeUint64(long i, OutputStream os) throws IOException - { - os.write((int)(i >> 56)); - os.write((int)(i >> 48)); - os.write((int)(i >> 40)); - os.write((int)(i >> 32)); - os.write((int)(i >> 24)); - os.write((int)(i >> 16)); - os.write((int)(i >> 8)); - os.write((int)(i)); - } - - - protected static void writeUint64(long i, byte[] buf, int offset) - { - buf[offset] = (byte)(i >> 56); - buf[offset + 1] = (byte)(i >> 48); - buf[offset + 2] = (byte)(i >> 40); - buf[offset + 3] = (byte)(i >> 32); - buf[offset + 4] = (byte)(i >> 24); - buf[offset + 5] = (byte)(i >> 16); - buf[offset + 6] = (byte)(i >> 8); - buf[offset + 7] = (byte)(i); - } - - protected static void writeOpaque8(byte[] buf, OutputStream os) throws IOException - { - writeUint8((short)buf.length, os); - os.write(buf); - } - - protected static void writeOpaque16(byte[] buf, OutputStream os) throws IOException - { - writeUint16(buf.length, os); - os.write(buf); - } - - protected static void writeOpaque24(byte[] buf, OutputStream os) throws IOException - { - writeUint24(buf.length, os); - os.write(buf); - } - - protected static void writeUint8Array(short[] uints, OutputStream os) throws IOException - { - for (int i = 0; i < uints.length; ++i) - { - writeUint8(uints[i], os); - } - } - - protected static void writeUint16Array(int[] uints, OutputStream os) throws IOException - { - for (int i = 0; i < uints.length; ++i) - { - writeUint16(uints[i], os); - } - } - - protected static short readUint8(InputStream is) throws IOException - { - int i = is.read(); - if (i == -1) - { - throw new EOFException(); - } - return (short)i; - } - - protected static int readUint16(InputStream is) throws IOException - { - int i1 = is.read(); - int i2 = is.read(); - if ((i1 | i2) < 0) - { - throw new EOFException(); - } - return i1 << 8 | i2; - } - - protected static int readUint24(InputStream is) throws IOException - { - int i1 = is.read(); - int i2 = is.read(); - int i3 = is.read(); - if ((i1 | i2 | i3) < 0) - { - throw new EOFException(); - } - return (i1 << 16) | (i2 << 8) | i3; - } - - protected static long readUint32(InputStream is) throws IOException - { - int i1 = is.read(); - int i2 = is.read(); - int i3 = is.read(); - int i4 = is.read(); - if ((i1 | i2 | i3 | i4) < 0) - { - throw new EOFException(); - } - return (((long)i1) << 24) | (((long)i2) << 16) | (((long)i3) << 8) | ((long)i4); - } - - protected static void readFully(byte[] buf, InputStream is) throws IOException - { - if (Streams.readFully(is, buf) != buf.length) - { - throw new EOFException(); - } - } - - protected static byte[] readOpaque8(InputStream is) throws IOException - { - short length = readUint8(is); - byte[] value = new byte[length]; - readFully(value, is); - return value; - } - - protected static byte[] readOpaque16(InputStream is) throws IOException - { - int length = readUint16(is); - byte[] value = new byte[length]; - readFully(value, is); - return value; - } - - static ProtocolVersion readVersion(byte[] buf) throws IOException - { - return ProtocolVersion.get(buf[0], buf[1]); - } - - static ProtocolVersion readVersion(InputStream is) throws IOException - { - int i1 = is.read(); - int i2 = is.read(); - return ProtocolVersion.get(i1, i2); - } - - protected static void writeGMTUnixTime(byte[] buf, int offset) - { - int t = (int)(System.currentTimeMillis() / 1000L); - buf[offset] = (byte)(t >> 24); - buf[offset + 1] = (byte)(t >> 16); - buf[offset + 2] = (byte)(t >> 8); - buf[offset + 3] = (byte)t; - } - - static void writeVersion(ProtocolVersion version, OutputStream os) throws IOException - { - os.write(version.getMajorVersion()); - os.write(version.getMinorVersion()); - } - - static void writeVersion(ProtocolVersion version, byte[] buf, int offset) throws IOException - { - buf[offset] = (byte)version.getMajorVersion(); - buf[offset + 1] = (byte)version.getMinorVersion(); - } - - private static void hmac_hash(Digest digest, byte[] secret, byte[] seed, byte[] out) - { - HMac mac = new HMac(digest); - KeyParameter param = new KeyParameter(secret); - byte[] a = seed; - int size = digest.getDigestSize(); - int iterations = (out.length + size - 1) / size; - byte[] buf = new byte[mac.getMacSize()]; - byte[] buf2 = new byte[mac.getMacSize()]; - for (int i = 0; i < iterations; i++) - { - mac.init(param); - mac.update(a, 0, a.length); - mac.doFinal(buf, 0); - a = buf; - mac.init(param); - mac.update(a, 0, a.length); - mac.update(seed, 0, seed.length); - mac.doFinal(buf2, 0); - System.arraycopy(buf2, 0, out, (size * i), Math.min(size, out.length - (size * i))); - } - } - - protected static byte[] PRF(byte[] secret, String asciiLabel, byte[] seed, int size) - { - byte[] label = Strings.toByteArray(asciiLabel); - - int s_half = (secret.length + 1) / 2; - byte[] s1 = new byte[s_half]; - byte[] s2 = new byte[s_half]; - System.arraycopy(secret, 0, s1, 0, s_half); - System.arraycopy(secret, secret.length - s_half, s2, 0, s_half); - - byte[] ls = concat(label, seed); - - byte[] buf = new byte[size]; - byte[] prf = new byte[size]; - hmac_hash(new MD5Digest(), s1, ls, prf); - hmac_hash(new SHA1Digest(), s2, ls, buf); - for (int i = 0; i < size; i++) - { - buf[i] ^= prf[i]; - } - return buf; - } - - static byte[] PRF_1_2(Digest digest, byte[] secret, String asciiLabel, byte[] seed, int size) - { - byte[] label = Strings.toByteArray(asciiLabel); - byte[] labelSeed = concat(label, seed); - - byte[] buf = new byte[size]; - hmac_hash(digest, secret, labelSeed, buf); - return buf; - } - - static byte[] concat(byte[] a, byte[] b) - { - byte[] c = new byte[a.length + b.length]; - System.arraycopy(a, 0, c, 0, a.length); - System.arraycopy(b, 0, c, a.length, b.length); - return c; - } - - static void validateKeyUsage(X509CertificateStructure c, int keyUsageBits) throws IOException - { - X509Extensions exts = c.getTBSCertificate().getExtensions(); - if (exts != null) - { - X509Extension ext = exts.getExtension(X509Extension.keyUsage); - if (ext != null) - { - DERBitString ku = KeyUsage.getInstance(ext); - int bits = ku.getBytes()[0] & 0xff; - if ((bits & keyUsageBits) != keyUsageBits) - { - throw new TlsFatalAlert(AlertDescription.certificate_unknown); - } - } - } - } - - static byte[] calculateKeyBlock(TlsClientContext context, int size) - { - ProtocolVersion pv = context.getServerVersion(); - SecurityParameters sp = context.getSecurityParameters(); - byte[] random = concat(sp.serverRandom, sp.clientRandom); - - boolean isTls = pv.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (isTls) - { - return PRF(sp.masterSecret, "key expansion", random, size); - } - - Digest md5 = new MD5Digest(); - Digest sha1 = new SHA1Digest(); - int md5Size = md5.getDigestSize(); - byte[] shatmp = new byte[sha1.getDigestSize()]; - byte[] tmp = new byte[size + md5Size]; - - int i = 0, pos = 0; - while (pos < size) - { - byte[] ssl3Const = SSL3_CONST[i]; - - sha1.update(ssl3Const, 0, ssl3Const.length); - sha1.update(sp.masterSecret, 0, sp.masterSecret.length); - sha1.update(random, 0, random.length); - sha1.doFinal(shatmp, 0); - - md5.update(sp.masterSecret, 0, sp.masterSecret.length); - md5.update(shatmp, 0, shatmp.length); - md5.doFinal(tmp, pos); - - pos += md5Size; - ++i; - } - - byte rval[] = new byte[size]; - System.arraycopy(tmp, 0, rval, 0, size); - return rval; - } - - static byte[] calculateMasterSecret(TlsClientContext context, byte[] pms) - { - ProtocolVersion pv = context.getServerVersion(); - SecurityParameters sp = context.getSecurityParameters(); - byte[] random = concat(sp.clientRandom, sp.serverRandom); - - boolean isTls = pv.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (isTls) - { - return PRF(pms, "master secret", random, 48); - } - - Digest md5 = new MD5Digest(); - Digest sha1 = new SHA1Digest(); - int md5Size = md5.getDigestSize(); - byte[] shatmp = new byte[sha1.getDigestSize()]; - - byte[] rval = new byte[md5Size * 3]; - int pos = 0; - - for (int i = 0; i < 3; ++i) - { - byte[] ssl3Const = SSL3_CONST[i]; - - sha1.update(ssl3Const, 0, ssl3Const.length); - sha1.update(pms, 0, pms.length); - sha1.update(random, 0, random.length); - sha1.doFinal(shatmp, 0); - - md5.update(pms, 0, pms.length); - md5.update(shatmp, 0, shatmp.length); - md5.doFinal(rval, pos); - - pos += md5Size; - } - - return rval; - } - - static byte[] calculateVerifyData(TlsClientContext context, String asciiLabel, byte[] handshakeHash) - { - ProtocolVersion pv = context.getServerVersion(); - SecurityParameters sp = context.getSecurityParameters(); - - boolean isTls = pv.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); - - if (isTls) - { - return PRF(sp.masterSecret, asciiLabel, handshakeHash, 12); - } - - return handshakeHash; - } - - static final byte[] SSL_CLIENT = { 0x43, 0x4C, 0x4E, 0x54 }; - static final byte[] SSL_SERVER = { 0x53, 0x52, 0x56, 0x52 }; - - // SSL3 magic mix constants ("A", "BB", "CCC", ...) - static final byte[][] SSL3_CONST = genConst(); - - private static byte[][] genConst() - { - int n = 10; - byte[][] arr = new byte[n][]; - for (int i = 0; i < n; i++) - { - byte[] b = new byte[i + 1]; - Arrays.fill(b, (byte)('A' + i)); - arr[i] = b; - } - return arr; - } -} diff --git a/src/org/bouncycastle/crypto/tls/package.html b/src/org/bouncycastle/crypto/tls/package.html deleted file mode 100644 index ee59f8a..0000000 --- a/src/org/bouncycastle/crypto/tls/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -A lightweight TLS API. - - diff --git a/src/org/bouncycastle/crypto/util/Pack.java b/src/org/bouncycastle/crypto/util/Pack.java deleted file mode 100644 index 857b765..0000000 --- a/src/org/bouncycastle/crypto/util/Pack.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.bouncycastle.crypto.util; - -public abstract class Pack -{ - public static int bigEndianToInt(byte[] bs, int off) - { - int n = bs[ off] << 24; - n |= (bs[++off] & 0xff) << 16; - n |= (bs[++off] & 0xff) << 8; - n |= (bs[++off] & 0xff); - return n; - } - - public static void bigEndianToInt(byte[] bs, int off, int[] ns) - { - for (int i = 0; i < ns.length; ++i) - { - ns[i] = bigEndianToInt(bs, off); - off += 4; - } - } - - public static void intToBigEndian(int n, byte[] bs, int off) - { - bs[ off] = (byte)(n >>> 24); - bs[++off] = (byte)(n >>> 16); - bs[++off] = (byte)(n >>> 8); - bs[++off] = (byte)(n ); - } - - public static void intToBigEndian(int[] ns, byte[] bs, int off) - { - for (int i = 0; i < ns.length; ++i) - { - intToBigEndian(ns[i], bs, off); - off += 4; - } - } - - public static long bigEndianToLong(byte[] bs, int off) - { - int hi = bigEndianToInt(bs, off); - int lo = bigEndianToInt(bs, off + 4); - return ((long)(hi & 0xffffffffL) << 32) | (long)(lo & 0xffffffffL); - } - - public static void longToBigEndian(long n, byte[] bs, int off) - { - intToBigEndian((int)(n >>> 32), bs, off); - intToBigEndian((int)(n & 0xffffffffL), bs, off + 4); - } - - public static int littleEndianToInt(byte[] bs, int off) - { - int n = bs[ off] & 0xff; - n |= (bs[++off] & 0xff) << 8; - n |= (bs[++off] & 0xff) << 16; - n |= bs[++off] << 24; - return n; - } - - public static void littleEndianToInt(byte[] bs, int off, int[] ns) - { - for (int i = 0; i < ns.length; ++i) - { - ns[i] = littleEndianToInt(bs, off); - off += 4; - } - } - - public static void intToLittleEndian(int n, byte[] bs, int off) - { - bs[ off] = (byte)(n ); - bs[++off] = (byte)(n >>> 8); - bs[++off] = (byte)(n >>> 16); - bs[++off] = (byte)(n >>> 24); - } - - public static void intToLittleEndian(int[] ns, byte[] bs, int off) - { - for (int i = 0; i < ns.length; ++i) - { - intToLittleEndian(ns[i], bs, off); - off += 4; - } - } - - public static long littleEndianToLong(byte[] bs, int off) - { - int lo = littleEndianToInt(bs, off); - int hi = littleEndianToInt(bs, off + 4); - return ((long)(hi & 0xffffffffL) << 32) | (long)(lo & 0xffffffffL); - } - - public static void longToLittleEndian(long n, byte[] bs, int off) - { - intToLittleEndian((int)(n & 0xffffffffL), bs, off); - intToLittleEndian((int)(n >>> 32), bs, off + 4); - } -} diff --git a/src/org/bouncycastle/crypto/util/PrivateKeyFactory.java b/src/org/bouncycastle/crypto/util/PrivateKeyFactory.java deleted file mode 100644 index c2d7d88..0000000 --- a/src/org/bouncycastle/crypto/util/PrivateKeyFactory.java +++ /dev/null @@ -1,159 +0,0 @@ -package org.bouncycastle.crypto.util; - -import java.io.IOException; -import java.io.InputStream; -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERInteger; -import org.bouncycastle.asn1.oiw.ElGamalParameter; -import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; -import org.bouncycastle.asn1.pkcs.DHParameter; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; -import org.bouncycastle.asn1.pkcs.RSAPrivateKey; -import org.bouncycastle.asn1.sec.ECPrivateKey; -import org.bouncycastle.asn1.sec.SECNamedCurves; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; -import org.bouncycastle.asn1.x509.DSAParameter; -import org.bouncycastle.asn1.x9.X962NamedCurves; -import org.bouncycastle.asn1.x9.X962Parameters; -import org.bouncycastle.asn1.x9.X9ECParameters; -import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPrivateKeyParameters; -import org.bouncycastle.crypto.params.DSAParameters; -import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; -import org.bouncycastle.crypto.params.ECDomainParameters; -import org.bouncycastle.crypto.params.ECPrivateKeyParameters; -import org.bouncycastle.crypto.params.ElGamalParameters; -import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; -import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; - -/** - * Factory for creating private key objects from PKCS8 PrivateKeyInfo objects. - */ -public class PrivateKeyFactory -{ - /** - * Create a private key parameter from a PKCS8 PrivateKeyInfo encoding. - * - * @param privateKeyInfoData the PrivateKeyInfo encoding - * @return a suitable private key parameter - * @throws IOException on an error decoding the key - */ - public static AsymmetricKeyParameter createKey(byte[] privateKeyInfoData) throws IOException - { - return createKey(PrivateKeyInfo.getInstance(ASN1Primitive.fromByteArray(privateKeyInfoData))); - } - - /** - * Create a private key parameter from a PKCS8 PrivateKeyInfo encoding read from a - * stream. - * - * @param inStr the stream to read the PrivateKeyInfo encoding from - * @return a suitable private key parameter - * @throws IOException on an error decoding the key - */ - public static AsymmetricKeyParameter createKey(InputStream inStr) throws IOException - { - return createKey(PrivateKeyInfo.getInstance(new ASN1InputStream(inStr).readObject())); - } - - /** - * Create a private key parameter from the passed in PKCS8 PrivateKeyInfo object. - * - * @param keyInfo the PrivateKeyInfo object containing the key material - * @return a suitable private key parameter - * @throws IOException on an error decoding the key - */ - public static AsymmetricKeyParameter createKey(PrivateKeyInfo keyInfo) throws IOException - { - AlgorithmIdentifier algId = keyInfo.getPrivateKeyAlgorithm(); - - if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.rsaEncryption)) - { - RSAPrivateKey keyStructure = RSAPrivateKey.getInstance(keyInfo.parsePrivateKey()); - - return new RSAPrivateCrtKeyParameters(keyStructure.getModulus(), - keyStructure.getPublicExponent(), keyStructure.getPrivateExponent(), - keyStructure.getPrime1(), keyStructure.getPrime2(), keyStructure.getExponent1(), - keyStructure.getExponent2(), keyStructure.getCoefficient()); - } - // TODO? -// else if (algId.getObjectId().equals(X9ObjectIdentifiers.dhpublicnumber)) - else if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.dhKeyAgreement)) - { - DHParameter params = DHParameter.getInstance(algId.getParameters()); - DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); - - BigInteger lVal = params.getL(); - int l = lVal == null ? 0 : lVal.intValue(); - DHParameters dhParams = new DHParameters(params.getP(), params.getG(), null, l); - - return new DHPrivateKeyParameters(derX.getValue(), dhParams); - } - else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) - { - ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); - DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); - - return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters( - params.getP(), params.getG())); - } - else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa)) - { - DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); - ASN1Encodable de = algId.getParameters(); - - DSAParameters parameters = null; - if (de != null) - { - DSAParameter params = DSAParameter.getInstance(de.toASN1Primitive()); - parameters = new DSAParameters(params.getP(), params.getQ(), params.getG()); - } - - return new DSAPrivateKeyParameters(derX.getValue(), parameters); - } - else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_ecPublicKey)) - { - X962Parameters params = new X962Parameters((ASN1Primitive)algId.getParameters()); - - X9ECParameters x9; - if (params.isNamedCurve()) - { - ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters()); - x9 = X962NamedCurves.getByOID(oid); - - if (x9 == null) - { - x9 = SECNamedCurves.getByOID(oid); - - } - } - else - { - x9 = X9ECParameters.getInstance(params.getParameters()); - } - - ECPrivateKey ec = ECPrivateKey.getInstance(keyInfo.parsePrivateKey()); - BigInteger d = ec.getKey(); - - // TODO We lose any named parameters here - - ECDomainParameters dParams = new ECDomainParameters( - x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed()); - - return new ECPrivateKeyParameters(d, dParams); - } - else - { - throw new RuntimeException("algorithm identifier in key not recognised"); - } - } -} diff --git a/src/org/bouncycastle/crypto/util/PublicKeyFactory.java b/src/org/bouncycastle/crypto/util/PublicKeyFactory.java deleted file mode 100644 index b720a8d..0000000 --- a/src/org/bouncycastle/crypto/util/PublicKeyFactory.java +++ /dev/null @@ -1,196 +0,0 @@ -package org.bouncycastle.crypto.util; - -import java.io.IOException; -import java.io.InputStream; -import javabc.BigInteger; - -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.ASN1ObjectIdentifier; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERInteger; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.oiw.ElGamalParameter; -import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; -import org.bouncycastle.asn1.pkcs.DHParameter; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.pkcs.RSAPublicKey; -import org.bouncycastle.asn1.sec.SECNamedCurves; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; -import org.bouncycastle.asn1.x509.DSAParameter; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; -import org.bouncycastle.asn1.x9.DHDomainParameters; -import org.bouncycastle.asn1.x9.DHPublicKey; -import org.bouncycastle.asn1.x9.DHValidationParms; -import org.bouncycastle.asn1.x9.X962NamedCurves; -import org.bouncycastle.asn1.x9.X962Parameters; -import org.bouncycastle.asn1.x9.X9ECParameters; -import org.bouncycastle.asn1.x9.X9ECPoint; -import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; -import org.bouncycastle.crypto.params.AsymmetricKeyParameter; -import org.bouncycastle.crypto.params.DHParameters; -import org.bouncycastle.crypto.params.DHPublicKeyParameters; -import org.bouncycastle.crypto.params.DHValidationParameters; -import org.bouncycastle.crypto.params.DSAParameters; -import org.bouncycastle.crypto.params.DSAPublicKeyParameters; -import org.bouncycastle.crypto.params.ECDomainParameters; -import org.bouncycastle.crypto.params.ECPublicKeyParameters; -import org.bouncycastle.crypto.params.ElGamalParameters; -import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; -import org.bouncycastle.crypto.params.RSAKeyParameters; - -/** - * Factory to create asymmetric public key parameters for asymmetric ciphers from range of - * ASN.1 encoded SubjectPublicKeyInfo objects. - */ -public class PublicKeyFactory -{ - /** - * Create a public key from a SubjectPublicKeyInfo encoding - * - * @param keyInfoData the SubjectPublicKeyInfo encoding - * @return the appropriate key parameter - * @throws IOException on an error decoding the key - */ - public static AsymmetricKeyParameter createKey(byte[] keyInfoData) throws IOException - { - return createKey(SubjectPublicKeyInfo.getInstance(ASN1Primitive.fromByteArray(keyInfoData))); - } - - /** - * Create a public key from a SubjectPublicKeyInfo encoding read from a stream - * - * @param inStr the stream to read the SubjectPublicKeyInfo encoding from - * @return the appropriate key parameter - * @throws IOException on an error decoding the key - */ - public static AsymmetricKeyParameter createKey(InputStream inStr) throws IOException - { - return createKey(SubjectPublicKeyInfo.getInstance(new ASN1InputStream(inStr).readObject())); - } - - /** - * Create a public key from the passed in SubjectPublicKeyInfo - * - * @param keyInfo the SubjectPublicKeyInfo containing the key data - * @return the appropriate key parameter - * @throws IOException on an error decoding the key - */ - public static AsymmetricKeyParameter createKey(SubjectPublicKeyInfo keyInfo) throws IOException - { - AlgorithmIdentifier algId = keyInfo.getAlgorithm(); - - if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.rsaEncryption) - || algId.getAlgorithm().equals(X509ObjectIdentifiers.id_ea_rsa)) - { - RSAPublicKey pubKey = RSAPublicKey.getInstance(keyInfo.parsePublicKey()); - - return new RSAKeyParameters(false, pubKey.getModulus(), pubKey.getPublicExponent()); - } - else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.dhpublicnumber)) - { - DHPublicKey dhPublicKey = DHPublicKey.getInstance(keyInfo.parsePublicKey()); - - BigInteger y = dhPublicKey.getY().getValue(); - - DHDomainParameters dhParams = DHDomainParameters.getInstance(algId.getParameters()); - - BigInteger p = dhParams.getP().getValue(); - BigInteger g = dhParams.getG().getValue(); - BigInteger q = dhParams.getQ().getValue(); - - BigInteger j = null; - if (dhParams.getJ() != null) - { - j = dhParams.getJ().getValue(); - } - - DHValidationParameters validation = null; - DHValidationParms dhValidationParms = dhParams.getValidationParms(); - if (dhValidationParms != null) - { - byte[] seed = dhValidationParms.getSeed().getBytes(); - BigInteger pgenCounter = dhValidationParms.getPgenCounter().getValue(); - - // TODO Check pgenCounter size? - - validation = new DHValidationParameters(seed, pgenCounter.intValue()); - } - - return new DHPublicKeyParameters(y, new DHParameters(p, g, q, j, validation)); - } - else if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.dhKeyAgreement)) - { - DHParameter params = DHParameter.getInstance(algId.getParameters()); - DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); - - BigInteger lVal = params.getL(); - int l = lVal == null ? 0 : lVal.intValue(); - DHParameters dhParams = new DHParameters(params.getP(), params.getG(), null, l); - - return new DHPublicKeyParameters(derY.getValue(), dhParams); - } - else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) - { - ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); - DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); - - return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters( - params.getP(), params.getG())); - } - else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa) - || algId.getAlgorithm().equals(OIWObjectIdentifiers.dsaWithSHA1)) - { - DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); - ASN1Encodable de = algId.getParameters(); - - DSAParameters parameters = null; - if (de != null) - { - DSAParameter params = DSAParameter.getInstance(de.toASN1Primitive()); - parameters = new DSAParameters(params.getP(), params.getQ(), params.getG()); - } - - return new DSAPublicKeyParameters(derY.getValue(), parameters); - } - else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_ecPublicKey)) - { - X962Parameters params = new X962Parameters( - (ASN1Primitive)algId.getParameters()); - - X9ECParameters x9; - if (params.isNamedCurve()) - { - ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)params.getParameters(); - x9 = X962NamedCurves.getByOID(oid); - - if (x9 == null) - { - x9 = SECNamedCurves.getByOID(oid); - - } - } - else - { - x9 = X9ECParameters.getInstance(params.getParameters()); - } - - ASN1OctetString key = new DEROctetString(keyInfo.getPublicKeyData().getBytes()); - X9ECPoint derQ = new X9ECPoint(x9.getCurve(), key); - - // TODO We lose any named parameters here - - ECDomainParameters dParams = new ECDomainParameters( - x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed()); - - return new ECPublicKeyParameters(derQ.getPoint(), dParams); - } - else - { - throw new RuntimeException("algorithm identifier in key not recognised"); - } - } -} diff --git a/src/org/bouncycastle/crypto/util/package.html b/src/org/bouncycastle/crypto/util/package.html deleted file mode 100644 index 787b892..0000000 --- a/src/org/bouncycastle/crypto/util/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Some general utility/conversion classes. - - diff --git a/src/org/bouncycastle/math/ec/ECAlgorithms.java b/src/org/bouncycastle/math/ec/ECAlgorithms.java deleted file mode 100644 index cc4cc29..0000000 --- a/src/org/bouncycastle/math/ec/ECAlgorithms.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -public class ECAlgorithms -{ - public static ECPoint sumOfTwoMultiplies(ECPoint P, BigInteger a, - ECPoint Q, BigInteger b) - { - ECCurve c = P.getCurve(); - if (!c.equals(Q.getCurve())) - { - throw new IllegalArgumentException("P and Q must be on same curve"); - } - - // Point multiplication for Koblitz curves (using WTNAF) beats Shamir's trick - if (c instanceof ECCurve.F2m) - { - ECCurve.F2m f2mCurve = (ECCurve.F2m)c; - if (f2mCurve.isKoblitz()) - { - return P.multiply(a).add(Q.multiply(b)); - } - } - - return implShamirsTrick(P, a, Q, b); - } - - /* - * "Shamir's Trick", originally due to E. G. Straus - * (Addition chains of vectors. American Mathematical Monthly, - * 71(7):806-808, Aug./Sept. 1964) - *

        -     * Input: The points P, Q, scalar k = (km?, ... , k1, k0)
        -     * and scalar l = (lm?, ... , l1, l0).
        -     * Output: R = k * P + l * Q.
        -     * 1: Z <- P + Q
        -     * 2: R <- O
        -     * 3: for i from m-1 down to 0 do
        -     * 4:        R <- R + R        {point doubling}
        -     * 5:        if (ki = 1) and (li = 0) then R <- R + P end if
        -     * 6:        if (ki = 0) and (li = 1) then R <- R + Q end if
        -     * 7:        if (ki = 1) and (li = 1) then R <- R + Z end if
        -     * 8: end for
        -     * 9: return R
        -     * 
        - */ - public static ECPoint shamirsTrick(ECPoint P, BigInteger k, - ECPoint Q, BigInteger l) - { - if (!P.getCurve().equals(Q.getCurve())) - { - throw new IllegalArgumentException("P and Q must be on same curve"); - } - - return implShamirsTrick(P, k, Q, l); - } - - private static ECPoint implShamirsTrick(ECPoint P, BigInteger k, - ECPoint Q, BigInteger l) - { - int m = Math.max(k.bitLength(), l.bitLength()); - ECPoint Z = P.add(Q); - ECPoint R = P.getCurve().getInfinity(); - - for (int i = m - 1; i >= 0; --i) - { - R = R.twice(); - - if (k.testBit(i)) - { - if (l.testBit(i)) - { - R = R.add(Z); - } - else - { - R = R.add(P); - } - } - else - { - if (l.testBit(i)) - { - R = R.add(Q); - } - } - } - - return R; - } -} diff --git a/src/org/bouncycastle/math/ec/ECConstants.java b/src/org/bouncycastle/math/ec/ECConstants.java deleted file mode 100644 index c0c5bbe..0000000 --- a/src/org/bouncycastle/math/ec/ECConstants.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -public interface ECConstants -{ - public static final BigInteger ZERO = BigInteger.valueOf(0); - public static final BigInteger ONE = BigInteger.valueOf(1); - public static final BigInteger TWO = BigInteger.valueOf(2); - public static final BigInteger THREE = BigInteger.valueOf(3); - public static final BigInteger FOUR = BigInteger.valueOf(4); -} diff --git a/src/org/bouncycastle/math/ec/ECCurve.java b/src/org/bouncycastle/math/ec/ECCurve.java deleted file mode 100644 index 5a74e54..0000000 --- a/src/org/bouncycastle/math/ec/ECCurve.java +++ /dev/null @@ -1,668 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; -import java.util.Random; - -/** - * base class for an elliptic curve - */ -public abstract class ECCurve -{ - ECFieldElement a, b; - - public abstract int getFieldSize(); - - public abstract ECFieldElement fromBigInteger(BigInteger x); - - public abstract ECPoint createPoint(BigInteger x, BigInteger y, boolean withCompression); - - public abstract ECPoint decodePoint(byte[] encoded); - - public abstract ECPoint getInfinity(); - - public ECFieldElement getA() - { - return a; - } - - public ECFieldElement getB() - { - return b; - } - - /** - * Elliptic curve over Fp - */ - public static class Fp extends ECCurve - { - BigInteger q; - ECPoint.Fp infinity; - - public Fp(BigInteger q, BigInteger a, BigInteger b) - { - this.q = q; - this.a = fromBigInteger(a); - this.b = fromBigInteger(b); - this.infinity = new ECPoint.Fp(this, null, null); - } - - public BigInteger getQ() - { - return q; - } - - public int getFieldSize() - { - return q.bitLength(); - } - - public ECFieldElement fromBigInteger(BigInteger x) - { - return new ECFieldElement.Fp(this.q, x); - } - - public ECPoint createPoint(BigInteger x, BigInteger y, boolean withCompression) - { - return new ECPoint.Fp(this, fromBigInteger(x), fromBigInteger(y), withCompression); - } - - /** - * Decode a point on this curve from its ASN.1 encoding. The different - * encodings are taken account of, including point compression for - * Fp (X9.62 s 4.2.1 pg 17). - * @return The decoded point. - */ - public ECPoint decodePoint(byte[] encoded) - { - ECPoint p = null; - - switch (encoded[0]) - { - // infinity - case 0x00: - if (encoded.length > 1) - { - throw new RuntimeException("Invalid point encoding"); - } - p = getInfinity(); - break; - // compressed - case 0x02: - case 0x03: - int ytilde = encoded[0] & 1; - byte[] i = new byte[encoded.length - 1]; - - System.arraycopy(encoded, 1, i, 0, i.length); - - ECFieldElement x = new ECFieldElement.Fp(this.q, new BigInteger(1, i)); - ECFieldElement alpha = x.multiply(x.square().add(a)).add(b); - ECFieldElement beta = alpha.sqrt(); - - // - // if we can't find a sqrt we haven't got a point on the - // curve - run! - // - if (beta == null) - { - throw new RuntimeException("Invalid point compression"); - } - - int bit0 = (beta.toBigInteger().testBit(0) ? 1 : 0); - - if (bit0 == ytilde) - { - p = new ECPoint.Fp(this, x, beta, true); - } - else - { - p = new ECPoint.Fp(this, x, - new ECFieldElement.Fp(this.q, q.subtract(beta.toBigInteger())), true); - } - break; - // uncompressed - case 0x04: - // hybrid - case 0x06: - case 0x07: - byte[] xEnc = new byte[(encoded.length - 1) / 2]; - byte[] yEnc = new byte[(encoded.length - 1) / 2]; - - System.arraycopy(encoded, 1, xEnc, 0, xEnc.length); - System.arraycopy(encoded, xEnc.length + 1, yEnc, 0, yEnc.length); - - p = new ECPoint.Fp(this, - new ECFieldElement.Fp(this.q, new BigInteger(1, xEnc)), - new ECFieldElement.Fp(this.q, new BigInteger(1, yEnc))); - break; - default: - throw new RuntimeException("Invalid point encoding 0x" + Integer.toString(encoded[0], 16)); - } - - return p; - } - - public ECPoint getInfinity() - { - return infinity; - } - - public boolean equals( - Object anObject) - { - if (anObject == this) - { - return true; - } - - if (!(anObject instanceof ECCurve.Fp)) - { - return false; - } - - ECCurve.Fp other = (ECCurve.Fp) anObject; - - return this.q.equals(other.q) - && a.equals(other.a) && b.equals(other.b); - } - - public int hashCode() - { - return a.hashCode() ^ b.hashCode() ^ q.hashCode(); - } - } - - /** - * Elliptic curves over F2m. The Weierstrass equation is given by - * y2 + xy = x3 + ax2 + b. - */ - public static class F2m extends ECCurve - { - /** - * The exponent m of F2m. - */ - private int m; // can't be final - JDK 1.1 - - /** - * TPB: The integer k where xm + - * xk + 1 represents the reduction polynomial - * f(z).
        - * PPB: The integer k1 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - private int k1; // can't be final - JDK 1.1 - - /** - * TPB: Always set to 0
        - * PPB: The integer k2 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - private int k2; // can't be final - JDK 1.1 - - /** - * TPB: Always set to 0
        - * PPB: The integer k3 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - private int k3; // can't be final - JDK 1.1 - - /** - * The order of the base point of the curve. - */ - private BigInteger n; // can't be final - JDK 1.1 - - /** - * The cofactor of the curve. - */ - private BigInteger h; // can't be final - JDK 1.1 - - /** - * The point at infinity on this curve. - */ - private ECPoint.F2m infinity; // can't be final - JDK 1.1 - - /** - * The parameter μ of the elliptic curve if this is - * a Koblitz curve. - */ - private byte mu = 0; - - /** - * The auxiliary values s0 and - * s1 used for partial modular reduction for - * Koblitz curves. - */ - private BigInteger[] si = null; - - /** - * Constructor for Trinomial Polynomial Basis (TPB). - * @param m The exponent m of - * F2m. - * @param k The integer k where xm + - * xk + 1 represents the reduction - * polynomial f(z). - * @param a The coefficient a in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - * @param b The coefficient b in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - */ - public F2m( - int m, - int k, - BigInteger a, - BigInteger b) - { - this(m, k, 0, 0, a, b, null, null); - } - - /** - * Constructor for Trinomial Polynomial Basis (TPB). - * @param m The exponent m of - * F2m. - * @param k The integer k where xm + - * xk + 1 represents the reduction - * polynomial f(z). - * @param a The coefficient a in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - * @param b The coefficient b in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - * @param n The order of the main subgroup of the elliptic curve. - * @param h The cofactor of the elliptic curve, i.e. - * #Ea(F2m) = h * n. - */ - public F2m( - int m, - int k, - BigInteger a, - BigInteger b, - BigInteger n, - BigInteger h) - { - this(m, k, 0, 0, a, b, n, h); - } - - /** - * Constructor for Pentanomial Polynomial Basis (PPB). - * @param m The exponent m of - * F2m. - * @param k1 The integer k1 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k2 The integer k2 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k3 The integer k3 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param a The coefficient a in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - * @param b The coefficient b in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - */ - public F2m( - int m, - int k1, - int k2, - int k3, - BigInteger a, - BigInteger b) - { - this(m, k1, k2, k3, a, b, null, null); - } - - /** - * Constructor for Pentanomial Polynomial Basis (PPB). - * @param m The exponent m of - * F2m. - * @param k1 The integer k1 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k2 The integer k2 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k3 The integer k3 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param a The coefficient a in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - * @param b The coefficient b in the Weierstrass equation - * for non-supersingular elliptic curves over - * F2m. - * @param n The order of the main subgroup of the elliptic curve. - * @param h The cofactor of the elliptic curve, i.e. - * #Ea(F2m) = h * n. - */ - public F2m( - int m, - int k1, - int k2, - int k3, - BigInteger a, - BigInteger b, - BigInteger n, - BigInteger h) - { - this.m = m; - this.k1 = k1; - this.k2 = k2; - this.k3 = k3; - this.n = n; - this.h = h; - - if (k1 == 0) - { - throw new IllegalArgumentException("k1 must be > 0"); - } - - if (k2 == 0) - { - if (k3 != 0) - { - throw new IllegalArgumentException("k3 must be 0 if k2 == 0"); - } - } - else - { - if (k2 <= k1) - { - throw new IllegalArgumentException("k2 must be > k1"); - } - - if (k3 <= k2) - { - throw new IllegalArgumentException("k3 must be > k2"); - } - } - - this.a = fromBigInteger(a); - this.b = fromBigInteger(b); - this.infinity = new ECPoint.F2m(this, null, null); - } - - public int getFieldSize() - { - return m; - } - - public ECFieldElement fromBigInteger(BigInteger x) - { - return new ECFieldElement.F2m(this.m, this.k1, this.k2, this.k3, x); - } - - public ECPoint createPoint(BigInteger x, BigInteger y, boolean withCompression) - { - return new ECPoint.F2m(this, fromBigInteger(x), fromBigInteger(y), withCompression); - } - - /* (non-Javadoc) - * @see org.bouncycastle.math.ec.ECCurve#decodePoint(byte[]) - */ - public ECPoint decodePoint(byte[] encoded) - { - ECPoint p = null; - - switch (encoded[0]) - { - // infinity - case 0x00: - if (encoded.length > 1) - { - throw new RuntimeException("Invalid point encoding"); - } - p = getInfinity(); - break; - // compressed - case 0x02: - case 0x03: - byte[] enc = new byte[encoded.length - 1]; - System.arraycopy(encoded, 1, enc, 0, enc.length); - if (encoded[0] == 0x02) - { - p = decompressPoint(enc, 0); - } - else - { - p = decompressPoint(enc, 1); - } - break; - // uncompressed - case 0x04: - // hybrid - case 0x06: - case 0x07: - byte[] xEnc = new byte[(encoded.length - 1) / 2]; - byte[] yEnc = new byte[(encoded.length - 1) / 2]; - - System.arraycopy(encoded, 1, xEnc, 0, xEnc.length); - System.arraycopy(encoded, xEnc.length + 1, yEnc, 0, yEnc.length); - - p = new ECPoint.F2m(this, - new ECFieldElement.F2m(this.m, this.k1, this.k2, this.k3, - new BigInteger(1, xEnc)), - new ECFieldElement.F2m(this.m, this.k1, this.k2, this.k3, - new BigInteger(1, yEnc)), false); - break; - - default: - throw new RuntimeException("Invalid point encoding 0x" + Integer.toString(encoded[0], 16)); - } - - return p; - } - - public ECPoint getInfinity() - { - return infinity; - } - - /** - * Returns true if this is a Koblitz curve (ABC curve). - * @return true if this is a Koblitz curve (ABC curve), false otherwise - */ - public boolean isKoblitz() - { - return ((n != null) && (h != null) && - ((a.toBigInteger().equals(ECConstants.ZERO)) || - (a.toBigInteger().equals(ECConstants.ONE))) && - (b.toBigInteger().equals(ECConstants.ONE))); - } - - /** - * Returns the parameter μ of the elliptic curve. - * @return μ of the elliptic curve. - * @throws IllegalArgumentException if the given ECCurve is not a - * Koblitz curve. - */ - synchronized byte getMu() - { - if (mu == 0) - { - mu = Tnaf.getMu(this); - } - return mu; - } - - /** - * @return the auxiliary values s0 and - * s1 used for partial modular reduction for - * Koblitz curves. - */ - synchronized BigInteger[] getSi() - { - if (si == null) - { - si = Tnaf.getSi(this); - } - return si; - } - - /** - * Decompresses a compressed point P = (xp, yp) (X9.62 s 4.2.2). - * - * @param xEnc - * The encoding of field element xp. - * @param ypBit - * ~yp, an indication bit for the decompression of yp. - * @return the decompressed point. - */ - private ECPoint decompressPoint( - byte[] xEnc, - int ypBit) - { - ECFieldElement xp = new ECFieldElement.F2m( - this.m, this.k1, this.k2, this.k3, new BigInteger(1, xEnc)); - ECFieldElement yp = null; - if (xp.toBigInteger().equals(ECConstants.ZERO)) - { - yp = (ECFieldElement.F2m)b; - for (int i = 0; i < m - 1; i++) - { - yp = yp.square(); - } - } - else - { - ECFieldElement beta = xp.add(a).add( - b.multiply(xp.square().invert())); - ECFieldElement z = solveQuadradicEquation(beta); - if (z == null) - { - throw new RuntimeException("Invalid point compression"); - } - int zBit = 0; - if (z.toBigInteger().testBit(0)) - { - zBit = 1; - } - if (zBit != ypBit) - { - z = z.add(new ECFieldElement.F2m(this.m, this.k1, this.k2, - this.k3, ECConstants.ONE)); - } - yp = xp.multiply(z); - } - - return new ECPoint.F2m(this, xp, yp); - } - - /** - * Solves a quadratic equation z2 + z = beta(X9.62 - * D.1.6) The other solution is z + 1. - * - * @param beta - * The value to solve the qradratic equation for. - * @return the solution for z2 + z = beta or - * null if no solution exists. - */ - private ECFieldElement solveQuadradicEquation(ECFieldElement beta) - { - ECFieldElement zeroElement = new ECFieldElement.F2m( - this.m, this.k1, this.k2, this.k3, ECConstants.ZERO); - - if (beta.toBigInteger().equals(ECConstants.ZERO)) - { - return zeroElement; - } - - ECFieldElement z = null; - ECFieldElement gamma = zeroElement; - - Random rand = new Random(); - do - { - ECFieldElement t = new ECFieldElement.F2m(this.m, this.k1, - this.k2, this.k3, new BigInteger(m, rand)); - z = zeroElement; - ECFieldElement w = beta; - for (int i = 1; i <= m - 1; i++) - { - ECFieldElement w2 = w.square(); - z = z.square().add(w2.multiply(t)); - w = w2.add(beta); - } - if (!w.toBigInteger().equals(ECConstants.ZERO)) - { - return null; - } - gamma = z.square().add(z); - } - while (gamma.toBigInteger().equals(ECConstants.ZERO)); - - return z; - } - - public boolean equals( - Object anObject) - { - if (anObject == this) - { - return true; - } - - if (!(anObject instanceof ECCurve.F2m)) - { - return false; - } - - ECCurve.F2m other = (ECCurve.F2m)anObject; - - return (this.m == other.m) && (this.k1 == other.k1) - && (this.k2 == other.k2) && (this.k3 == other.k3) - && a.equals(other.a) && b.equals(other.b); - } - - public int hashCode() - { - return this.a.hashCode() ^ this.b.hashCode() ^ m ^ k1 ^ k2 ^ k3; - } - - public int getM() - { - return m; - } - - /** - * Return true if curve uses a Trinomial basis. - * - * @return true if curve Trinomial, false otherwise. - */ - public boolean isTrinomial() - { - return k2 == 0 && k3 == 0; - } - - public int getK1() - { - return k1; - } - - public int getK2() - { - return k2; - } - - public int getK3() - { - return k3; - } - - public BigInteger getN() - { - return n; - } - - public BigInteger getH() - { - return h; - } - } -} diff --git a/src/org/bouncycastle/math/ec/ECFieldElement.java b/src/org/bouncycastle/math/ec/ECFieldElement.java deleted file mode 100644 index 5f9d80d..0000000 --- a/src/org/bouncycastle/math/ec/ECFieldElement.java +++ /dev/null @@ -1,1196 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; -import java.util.Random; - -public abstract class ECFieldElement - implements ECConstants -{ - - public abstract BigInteger toBigInteger(); - public abstract String getFieldName(); - public abstract int getFieldSize(); - public abstract ECFieldElement add(ECFieldElement b); - public abstract ECFieldElement subtract(ECFieldElement b); - public abstract ECFieldElement multiply(ECFieldElement b); - public abstract ECFieldElement divide(ECFieldElement b); - public abstract ECFieldElement negate(); - public abstract ECFieldElement square(); - public abstract ECFieldElement invert(); - public abstract ECFieldElement sqrt(); - - public String toString() - { - return this.toBigInteger().toString(2); - } - - public static class Fp extends ECFieldElement - { - BigInteger x; - - BigInteger q; - - public Fp(BigInteger q, BigInteger x) - { - this.x = x; - - if (x.compareTo(q) >= 0) - { - throw new IllegalArgumentException("x value too large in field element"); - } - - this.q = q; - } - - public BigInteger toBigInteger() - { - return x; - } - - /** - * return the field name for this field. - * - * @return the string "Fp". - */ - public String getFieldName() - { - return "Fp"; - } - - public int getFieldSize() - { - return q.bitLength(); - } - - public BigInteger getQ() - { - return q; - } - - public ECFieldElement add(ECFieldElement b) - { - return new Fp(q, x.add(b.toBigInteger()).mod(q)); - } - - public ECFieldElement subtract(ECFieldElement b) - { - return new Fp(q, x.subtract(b.toBigInteger()).mod(q)); - } - - public ECFieldElement multiply(ECFieldElement b) - { - return new Fp(q, x.multiply(b.toBigInteger()).mod(q)); - } - - public ECFieldElement divide(ECFieldElement b) - { - return new Fp(q, x.multiply(b.toBigInteger().modInverse(q)).mod(q)); - } - - public ECFieldElement negate() - { - return new Fp(q, x.negate().mod(q)); - } - - public ECFieldElement square() - { - return new Fp(q, x.multiply(x).mod(q)); - } - - public ECFieldElement invert() - { - return new Fp(q, x.modInverse(q)); - } - - // D.1.4 91 - /** - * return a sqrt root - the routine verifies that the calculation - * returns the right value - if none exists it returns null. - */ - public ECFieldElement sqrt() - { - if (!q.testBit(0)) - { - throw new RuntimeException("not done yet"); - } - - // note: even though this class implements ECConstants don't be tempted to - // remove the explicit declaration, some J2ME environments don't cope. - // p mod 4 == 3 - if (q.testBit(1)) - { - // z = g^(u+1) + p, p = 4u + 3 - ECFieldElement z = new Fp(q, x.modPow(q.shiftRight(2).add(ECConstants.ONE), q)); - - return z.square().equals(this) ? z : null; - } - - // p mod 4 == 1 - BigInteger qMinusOne = q.subtract(ECConstants.ONE); - - BigInteger legendreExponent = qMinusOne.shiftRight(1); - if (!(x.modPow(legendreExponent, q).equals(ECConstants.ONE))) - { - return null; - } - - BigInteger u = qMinusOne.shiftRight(2); - BigInteger k = u.shiftLeft(1).add(ECConstants.ONE); - - BigInteger Q = this.x; - BigInteger fourQ = Q.shiftLeft(2).mod(q); - - BigInteger U, V; - Random rand = new Random(); - do - { - BigInteger P; - do - { - P = new BigInteger(q.bitLength(), rand); - } - while (P.compareTo(q) >= 0 - || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, q).equals(qMinusOne))); - - BigInteger[] result = lucasSequence(q, P, Q, k); - U = result[0]; - V = result[1]; - - if (V.multiply(V).mod(q).equals(fourQ)) - { - // Integer division by 2, mod q - if (V.testBit(0)) - { - V = V.add(q); - } - - V = V.shiftRight(1); - - //assert V.multiply(V).mod(q).equals(x); - - return new ECFieldElement.Fp(q, V); - } - } - while (U.equals(ECConstants.ONE) || U.equals(qMinusOne)); - - return null; - -// BigInteger qMinusOne = q.subtract(ECConstants.ONE); -// BigInteger legendreExponent = qMinusOne.shiftRight(1); //divide(ECConstants.TWO); -// if (!(x.modPow(legendreExponent, q).equals(ECConstants.ONE))) -// { -// return null; -// } -// -// Random rand = new Random(); -// BigInteger fourX = x.shiftLeft(2); -// -// BigInteger r; -// do -// { -// r = new BigInteger(q.bitLength(), rand); -// } -// while (r.compareTo(q) >= 0 -// || !(r.multiply(r).subtract(fourX).modPow(legendreExponent, q).equals(qMinusOne))); -// -// BigInteger n1 = qMinusOne.shiftRight(2); //.divide(ECConstants.FOUR); -// BigInteger n2 = n1.add(ECConstants.ONE); //q.add(ECConstants.THREE).divide(ECConstants.FOUR); -// -// BigInteger wOne = WOne(r, x, q); -// BigInteger wSum = W(n1, wOne, q).add(W(n2, wOne, q)).mod(q); -// BigInteger twoR = r.shiftLeft(1); //ECConstants.TWO.multiply(r); -// -// BigInteger root = twoR.modPow(q.subtract(ECConstants.TWO), q) -// .multiply(x).mod(q) -// .multiply(wSum).mod(q); -// -// return new Fp(q, root); - } - -// private static BigInteger W(BigInteger n, BigInteger wOne, BigInteger p) -// { -// if (n.equals(ECConstants.ONE)) -// { -// return wOne; -// } -// boolean isEven = !n.testBit(0); -// n = n.shiftRight(1);//divide(ECConstants.TWO); -// if (isEven) -// { -// BigInteger w = W(n, wOne, p); -// return w.multiply(w).subtract(ECConstants.TWO).mod(p); -// } -// BigInteger w1 = W(n.add(ECConstants.ONE), wOne, p); -// BigInteger w2 = W(n, wOne, p); -// return w1.multiply(w2).subtract(wOne).mod(p); -// } -// -// private BigInteger WOne(BigInteger r, BigInteger x, BigInteger p) -// { -// return r.multiply(r).multiply(x.modPow(q.subtract(ECConstants.TWO), q)).subtract(ECConstants.TWO).mod(p); -// } - - private static BigInteger[] lucasSequence( - BigInteger p, - BigInteger P, - BigInteger Q, - BigInteger k) - { - int n = k.bitLength(); - int s = k.getLowestSetBit(); - - BigInteger Uh = ECConstants.ONE; - BigInteger Vl = ECConstants.TWO; - BigInteger Vh = P; - BigInteger Ql = ECConstants.ONE; - BigInteger Qh = ECConstants.ONE; - - for (int j = n - 1; j >= s + 1; --j) - { - Ql = Ql.multiply(Qh).mod(p); - - if (k.testBit(j)) - { - Qh = Ql.multiply(Q).mod(p); - Uh = Uh.multiply(Vh).mod(p); - Vl = Vh.multiply(Vl).subtract(P.multiply(Ql)).mod(p); - Vh = Vh.multiply(Vh).subtract(Qh.shiftLeft(1)).mod(p); - } - else - { - Qh = Ql; - Uh = Uh.multiply(Vl).subtract(Ql).mod(p); - Vh = Vh.multiply(Vl).subtract(P.multiply(Ql)).mod(p); - Vl = Vl.multiply(Vl).subtract(Ql.shiftLeft(1)).mod(p); - } - } - - Ql = Ql.multiply(Qh).mod(p); - Qh = Ql.multiply(Q).mod(p); - Uh = Uh.multiply(Vl).subtract(Ql).mod(p); - Vl = Vh.multiply(Vl).subtract(P.multiply(Ql)).mod(p); - Ql = Ql.multiply(Qh).mod(p); - - for (int j = 1; j <= s; ++j) - { - Uh = Uh.multiply(Vl).mod(p); - Vl = Vl.multiply(Vl).subtract(Ql.shiftLeft(1)).mod(p); - Ql = Ql.multiply(Ql).mod(p); - } - - return new BigInteger[]{ Uh, Vl }; - } - - public boolean equals(Object other) - { - if (other == this) - { - return true; - } - - if (!(other instanceof ECFieldElement.Fp)) - { - return false; - } - - ECFieldElement.Fp o = (ECFieldElement.Fp)other; - return q.equals(o.q) && x.equals(o.x); - } - - public int hashCode() - { - return q.hashCode() ^ x.hashCode(); - } - } - -// /** -// * Class representing the Elements of the finite field -// * F2m in polynomial basis (PB) -// * representation. Both trinomial (TPB) and pentanomial (PPB) polynomial -// * basis representations are supported. Gaussian normal basis (GNB) -// * representation is not supported. -// */ -// public static class F2m extends ECFieldElement -// { -// BigInteger x; -// -// /** -// * Indicates gaussian normal basis representation (GNB). Number chosen -// * according to X9.62. GNB is not implemented at present. -// */ -// public static final int GNB = 1; -// -// /** -// * Indicates trinomial basis representation (TPB). Number chosen -// * according to X9.62. -// */ -// public static final int TPB = 2; -// -// /** -// * Indicates pentanomial basis representation (PPB). Number chosen -// * according to X9.62. -// */ -// public static final int PPB = 3; -// -// /** -// * TPB or PPB. -// */ -// private int representation; -// -// /** -// * The exponent m of F2m. -// */ -// private int m; -// -// /** -// * TPB: The integer k where xm + -// * xk + 1 represents the reduction polynomial -// * f(z).
        -// * PPB: The integer k1 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z).
        -// */ -// private int k1; -// -// /** -// * TPB: Always set to 0
        -// * PPB: The integer k2 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z).
        -// */ -// private int k2; -// -// /** -// * TPB: Always set to 0
        -// * PPB: The integer k3 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z).
        -// */ -// private int k3; -// -// /** -// * Constructor for PPB. -// * @param m The exponent m of -// * F2m. -// * @param k1 The integer k1 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z). -// * @param k2 The integer k2 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z). -// * @param k3 The integer k3 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z). -// * @param x The BigInteger representing the value of the field element. -// */ -// public F2m( -// int m, -// int k1, -// int k2, -// int k3, -// BigInteger x) -// { -//// super(x); -// this.x = x; -// -// if ((k2 == 0) && (k3 == 0)) -// { -// this.representation = TPB; -// } -// else -// { -// if (k2 >= k3) -// { -// throw new IllegalArgumentException( -// "k2 must be smaller than k3"); -// } -// if (k2 <= 0) -// { -// throw new IllegalArgumentException( -// "k2 must be larger than 0"); -// } -// this.representation = PPB; -// } -// -// if (x.signum() < 0) -// { -// throw new IllegalArgumentException("x value cannot be negative"); -// } -// -// this.m = m; -// this.k1 = k1; -// this.k2 = k2; -// this.k3 = k3; -// } -// -// /** -// * Constructor for TPB. -// * @param m The exponent m of -// * F2m. -// * @param k The integer k where xm + -// * xk + 1 represents the reduction -// * polynomial f(z). -// * @param x The BigInteger representing the value of the field element. -// */ -// public F2m(int m, int k, BigInteger x) -// { -// // Set k1 to k, and set k2 and k3 to 0 -// this(m, k, 0, 0, x); -// } -// -// public BigInteger toBigInteger() -// { -// return x; -// } -// -// public String getFieldName() -// { -// return "F2m"; -// } -// -// public int getFieldSize() -// { -// return m; -// } -// -// /** -// * Checks, if the ECFieldElements a and b -// * are elements of the same field F2m -// * (having the same representation). -// * @param a field element. -// * @param b field element to be compared. -// * @throws IllegalArgumentException if a and b -// * are not elements of the same field -// * F2m (having the same -// * representation). -// */ -// public static void checkFieldElements( -// ECFieldElement a, -// ECFieldElement b) -// { -// if ((!(a instanceof F2m)) || (!(b instanceof F2m))) -// { -// throw new IllegalArgumentException("Field elements are not " -// + "both instances of ECFieldElement.F2m"); -// } -// -// if ((a.toBigInteger().signum() < 0) || (b.toBigInteger().signum() < 0)) -// { -// throw new IllegalArgumentException( -// "x value may not be negative"); -// } -// -// ECFieldElement.F2m aF2m = (ECFieldElement.F2m)a; -// ECFieldElement.F2m bF2m = (ECFieldElement.F2m)b; -// -// if ((aF2m.m != bF2m.m) || (aF2m.k1 != bF2m.k1) -// || (aF2m.k2 != bF2m.k2) || (aF2m.k3 != bF2m.k3)) -// { -// throw new IllegalArgumentException("Field elements are not " -// + "elements of the same field F2m"); -// } -// -// if (aF2m.representation != bF2m.representation) -// { -// // Should never occur -// throw new IllegalArgumentException( -// "One of the field " -// + "elements are not elements has incorrect representation"); -// } -// } -// -// /** -// * Computes z * a(z) mod f(z), where f(z) is -// * the reduction polynomial of this. -// * @param a The polynomial a(z) to be multiplied by -// * z mod f(z). -// * @return z * a(z) mod f(z) -// */ -// private BigInteger multZModF(final BigInteger a) -// { -// // Left-shift of a(z) -// BigInteger az = a.shiftLeft(1); -// if (az.testBit(this.m)) -// { -// // If the coefficient of z^m in a(z) equals 1, reduction -// // modulo f(z) is performed: Add f(z) to to a(z): -// // Step 1: Unset mth coeffient of a(z) -// az = az.clearBit(this.m); -// -// // Step 2: Add r(z) to a(z), where r(z) is defined as -// // f(z) = z^m + r(z), and k1, k2, k3 are the positions of -// // the non-zero coefficients in r(z) -// az = az.flipBit(0); -// az = az.flipBit(this.k1); -// if (this.representation == PPB) -// { -// az = az.flipBit(this.k2); -// az = az.flipBit(this.k3); -// } -// } -// return az; -// } -// -// public ECFieldElement add(final ECFieldElement b) -// { -// // No check performed here for performance reasons. Instead the -// // elements involved are checked in ECPoint.F2m -// // checkFieldElements(this, b); -// if (b.toBigInteger().signum() == 0) -// { -// return this; -// } -// -// return new F2m(this.m, this.k1, this.k2, this.k3, this.x.xor(b.toBigInteger())); -// } -// -// public ECFieldElement subtract(final ECFieldElement b) -// { -// // Addition and subtraction are the same in F2m -// return add(b); -// } -// -// -// public ECFieldElement multiply(final ECFieldElement b) -// { -// // Left-to-right shift-and-add field multiplication in F2m -// // Input: Binary polynomials a(z) and b(z) of degree at most m-1 -// // Output: c(z) = a(z) * b(z) mod f(z) -// -// // No check performed here for performance reasons. Instead the -// // elements involved are checked in ECPoint.F2m -// // checkFieldElements(this, b); -// final BigInteger az = this.x; -// BigInteger bz = b.toBigInteger(); -// BigInteger cz; -// -// // Compute c(z) = a(z) * b(z) mod f(z) -// if (az.testBit(0)) -// { -// cz = bz; -// } -// else -// { -// cz = ECConstants.ZERO; -// } -// -// for (int i = 1; i < this.m; i++) -// { -// // b(z) := z * b(z) mod f(z) -// bz = multZModF(bz); -// -// if (az.testBit(i)) -// { -// // If the coefficient of x^i in a(z) equals 1, b(z) is added -// // to c(z) -// cz = cz.xor(bz); -// } -// } -// return new ECFieldElement.F2m(m, this.k1, this.k2, this.k3, cz); -// } -// -// -// public ECFieldElement divide(final ECFieldElement b) -// { -// // There may be more efficient implementations -// ECFieldElement bInv = b.invert(); -// return multiply(bInv); -// } -// -// public ECFieldElement negate() -// { -// // -x == x holds for all x in F2m -// return this; -// } -// -// public ECFieldElement square() -// { -// // Naive implementation, can probably be speeded up using modular -// // reduction -// return multiply(this); -// } -// -// public ECFieldElement invert() -// { -// // Inversion in F2m using the extended Euclidean algorithm -// // Input: A nonzero polynomial a(z) of degree at most m-1 -// // Output: a(z)^(-1) mod f(z) -// -// // u(z) := a(z) -// BigInteger uz = this.x; -// if (uz.signum() <= 0) -// { -// throw new ArithmeticException("x is zero or negative, " + -// "inversion is impossible"); -// } -// -// // v(z) := f(z) -// BigInteger vz = ECConstants.ZERO.setBit(m); -// vz = vz.setBit(0); -// vz = vz.setBit(this.k1); -// if (this.representation == PPB) -// { -// vz = vz.setBit(this.k2); -// vz = vz.setBit(this.k3); -// } -// -// // g1(z) := 1, g2(z) := 0 -// BigInteger g1z = ECConstants.ONE; -// BigInteger g2z = ECConstants.ZERO; -// -// // while u != 1 -// while (!(uz.equals(ECConstants.ZERO))) -// { -// // j := deg(u(z)) - deg(v(z)) -// int j = uz.bitLength() - vz.bitLength(); -// -// // If j < 0 then: u(z) <-> v(z), g1(z) <-> g2(z), j := -j -// if (j < 0) -// { -// final BigInteger uzCopy = uz; -// uz = vz; -// vz = uzCopy; -// -// final BigInteger g1zCopy = g1z; -// g1z = g2z; -// g2z = g1zCopy; -// -// j = -j; -// } -// -// // u(z) := u(z) + z^j * v(z) -// // Note, that no reduction modulo f(z) is required, because -// // deg(u(z) + z^j * v(z)) <= max(deg(u(z)), j + deg(v(z))) -// // = max(deg(u(z)), deg(u(z)) - deg(v(z)) + deg(v(z)) -// // = deg(u(z)) -// uz = uz.xor(vz.shiftLeft(j)); -// -// // g1(z) := g1(z) + z^j * g2(z) -// g1z = g1z.xor(g2z.shiftLeft(j)); -//// if (g1z.bitLength() > this.m) { -//// throw new ArithmeticException( -//// "deg(g1z) >= m, g1z = " + g1z.toString(2)); -//// } -// } -// return new ECFieldElement.F2m( -// this.m, this.k1, this.k2, this.k3, g2z); -// } -// -// public ECFieldElement sqrt() -// { -// throw new RuntimeException("Not implemented"); -// } -// -// /** -// * @return the representation of the field -// * F2m, either of -// * TPB (trinomial -// * basis representation) or -// * PPB (pentanomial -// * basis representation). -// */ -// public int getRepresentation() -// { -// return this.representation; -// } -// -// /** -// * @return the degree m of the reduction polynomial -// * f(z). -// */ -// public int getM() -// { -// return this.m; -// } -// -// /** -// * @return TPB: The integer k where xm + -// * xk + 1 represents the reduction polynomial -// * f(z).
        -// * PPB: The integer k1 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z).
        -// */ -// public int getK1() -// { -// return this.k1; -// } -// -// /** -// * @return TPB: Always returns 0
        -// * PPB: The integer k2 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z).
        -// */ -// public int getK2() -// { -// return this.k2; -// } -// -// /** -// * @return TPB: Always set to 0
        -// * PPB: The integer k3 where xm + -// * xk3 + xk2 + xk1 + 1 -// * represents the reduction polynomial f(z).
        -// */ -// public int getK3() -// { -// return this.k3; -// } -// -// public boolean equals(Object anObject) -// { -// if (anObject == this) -// { -// return true; -// } -// -// if (!(anObject instanceof ECFieldElement.F2m)) -// { -// return false; -// } -// -// ECFieldElement.F2m b = (ECFieldElement.F2m)anObject; -// -// return ((this.m == b.m) && (this.k1 == b.k1) && (this.k2 == b.k2) -// && (this.k3 == b.k3) -// && (this.representation == b.representation) -// && (this.x.equals(b.x))); -// } -// -// public int hashCode() -// { -// return x.hashCode() ^ m ^ k1 ^ k2 ^ k3; -// } -// } - - /** - * Class representing the Elements of the finite field - * F2m in polynomial basis (PB) - * representation. Both trinomial (TPB) and pentanomial (PPB) polynomial - * basis representations are supported. Gaussian normal basis (GNB) - * representation is not supported. - */ - public static class F2m extends ECFieldElement - { - /** - * Indicates gaussian normal basis representation (GNB). Number chosen - * according to X9.62. GNB is not implemented at present. - */ - public static final int GNB = 1; - - /** - * Indicates trinomial basis representation (TPB). Number chosen - * according to X9.62. - */ - public static final int TPB = 2; - - /** - * Indicates pentanomial basis representation (PPB). Number chosen - * according to X9.62. - */ - public static final int PPB = 3; - - /** - * TPB or PPB. - */ - private int representation; - - /** - * The exponent m of F2m. - */ - private int m; - - /** - * TPB: The integer k where xm + - * xk + 1 represents the reduction polynomial - * f(z).
        - * PPB: The integer k1 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - private int k1; - - /** - * TPB: Always set to 0
        - * PPB: The integer k2 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - private int k2; - - /** - * TPB: Always set to 0
        - * PPB: The integer k3 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - private int k3; - - /** - * The IntArray holding the bits. - */ - private IntArray x; - - /** - * The number of ints required to hold m bits. - */ - private int t; - - /** - * Constructor for PPB. - * @param m The exponent m of - * F2m. - * @param k1 The integer k1 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k2 The integer k2 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param k3 The integer k3 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z). - * @param x The BigInteger representing the value of the field element. - */ - public F2m( - int m, - int k1, - int k2, - int k3, - BigInteger x) - { - // t = m / 32 rounded up to the next integer - t = (m + 31) >> 5; - this.x = new IntArray(x, t); - - if ((k2 == 0) && (k3 == 0)) - { - this.representation = TPB; - } - else - { - if (k2 >= k3) - { - throw new IllegalArgumentException( - "k2 must be smaller than k3"); - } - if (k2 <= 0) - { - throw new IllegalArgumentException( - "k2 must be larger than 0"); - } - this.representation = PPB; - } - - if (x.signum() < 0) - { - throw new IllegalArgumentException("x value cannot be negative"); - } - - this.m = m; - this.k1 = k1; - this.k2 = k2; - this.k3 = k3; - } - - /** - * Constructor for TPB. - * @param m The exponent m of - * F2m. - * @param k The integer k where xm + - * xk + 1 represents the reduction - * polynomial f(z). - * @param x The BigInteger representing the value of the field element. - */ - public F2m(int m, int k, BigInteger x) - { - // Set k1 to k, and set k2 and k3 to 0 - this(m, k, 0, 0, x); - } - - private F2m(int m, int k1, int k2, int k3, IntArray x) - { - t = (m + 31) >> 5; - this.x = x; - this.m = m; - this.k1 = k1; - this.k2 = k2; - this.k3 = k3; - - if ((k2 == 0) && (k3 == 0)) - { - this.representation = TPB; - } - else - { - this.representation = PPB; - } - - } - - public BigInteger toBigInteger() - { - return x.toBigInteger(); - } - - public String getFieldName() - { - return "F2m"; - } - - public int getFieldSize() - { - return m; - } - - /** - * Checks, if the ECFieldElements a and b - * are elements of the same field F2m - * (having the same representation). - * @param a field element. - * @param b field element to be compared. - * @throws IllegalArgumentException if a and b - * are not elements of the same field - * F2m (having the same - * representation). - */ - public static void checkFieldElements( - ECFieldElement a, - ECFieldElement b) - { - if ((!(a instanceof F2m)) || (!(b instanceof F2m))) - { - throw new IllegalArgumentException("Field elements are not " - + "both instances of ECFieldElement.F2m"); - } - - ECFieldElement.F2m aF2m = (ECFieldElement.F2m)a; - ECFieldElement.F2m bF2m = (ECFieldElement.F2m)b; - - if ((aF2m.m != bF2m.m) || (aF2m.k1 != bF2m.k1) - || (aF2m.k2 != bF2m.k2) || (aF2m.k3 != bF2m.k3)) - { - throw new IllegalArgumentException("Field elements are not " - + "elements of the same field F2m"); - } - - if (aF2m.representation != bF2m.representation) - { - // Should never occur - throw new IllegalArgumentException( - "One of the field " - + "elements are not elements has incorrect representation"); - } - } - - public ECFieldElement add(final ECFieldElement b) - { - // No check performed here for performance reasons. Instead the - // elements involved are checked in ECPoint.F2m - // checkFieldElements(this, b); - IntArray iarrClone = (IntArray)this.x.clone(); - F2m bF2m = (F2m)b; - iarrClone.addShifted(bF2m.x, 0); - return new F2m(m, k1, k2, k3, iarrClone); - } - - public ECFieldElement subtract(final ECFieldElement b) - { - // Addition and subtraction are the same in F2m - return add(b); - } - - public ECFieldElement multiply(final ECFieldElement b) - { - // Right-to-left comb multiplication in the IntArray - // Input: Binary polynomials a(z) and b(z) of degree at most m-1 - // Output: c(z) = a(z) * b(z) mod f(z) - - // No check performed here for performance reasons. Instead the - // elements involved are checked in ECPoint.F2m - // checkFieldElements(this, b); - F2m bF2m = (F2m)b; - IntArray mult = x.multiply(bF2m.x, m); - mult.reduce(m, new int[]{k1, k2, k3}); - return new F2m(m, k1, k2, k3, mult); - } - - public ECFieldElement divide(final ECFieldElement b) - { - // There may be more efficient implementations - ECFieldElement bInv = b.invert(); - return multiply(bInv); - } - - public ECFieldElement negate() - { - // -x == x holds for all x in F2m - return this; - } - - public ECFieldElement square() - { - IntArray squared = x.square(m); - squared.reduce(m, new int[]{k1, k2, k3}); - return new F2m(m, k1, k2, k3, squared); - } - - - public ECFieldElement invert() - { - // Inversion in F2m using the extended Euclidean algorithm - // Input: A nonzero polynomial a(z) of degree at most m-1 - // Output: a(z)^(-1) mod f(z) - - // u(z) := a(z) - IntArray uz = (IntArray)this.x.clone(); - - // v(z) := f(z) - IntArray vz = new IntArray(t); - vz.setBit(m); - vz.setBit(0); - vz.setBit(this.k1); - if (this.representation == PPB) - { - vz.setBit(this.k2); - vz.setBit(this.k3); - } - - // g1(z) := 1, g2(z) := 0 - IntArray g1z = new IntArray(t); - g1z.setBit(0); - IntArray g2z = new IntArray(t); - - // while u != 0 - while (!uz.isZero()) -// while (uz.getUsedLength() > 0) -// while (uz.bitLength() > 1) - { - // j := deg(u(z)) - deg(v(z)) - int j = uz.bitLength() - vz.bitLength(); - - // If j < 0 then: u(z) <-> v(z), g1(z) <-> g2(z), j := -j - if (j < 0) - { - final IntArray uzCopy = uz; - uz = vz; - vz = uzCopy; - - final IntArray g1zCopy = g1z; - g1z = g2z; - g2z = g1zCopy; - - j = -j; - } - - // u(z) := u(z) + z^j * v(z) - // Note, that no reduction modulo f(z) is required, because - // deg(u(z) + z^j * v(z)) <= max(deg(u(z)), j + deg(v(z))) - // = max(deg(u(z)), deg(u(z)) - deg(v(z)) + deg(v(z)) - // = deg(u(z)) - // uz = uz.xor(vz.shiftLeft(j)); - // jInt = n / 32 - int jInt = j >> 5; - // jInt = n % 32 - int jBit = j & 0x1F; - IntArray vzShift = vz.shiftLeft(jBit); - uz.addShifted(vzShift, jInt); - - // g1(z) := g1(z) + z^j * g2(z) -// g1z = g1z.xor(g2z.shiftLeft(j)); - IntArray g2zShift = g2z.shiftLeft(jBit); - g1z.addShifted(g2zShift, jInt); - - } - return new ECFieldElement.F2m( - this.m, this.k1, this.k2, this.k3, g2z); - } - - public ECFieldElement sqrt() - { - throw new RuntimeException("Not implemented"); - } - - /** - * @return the representation of the field - * F2m, either of - * TPB (trinomial - * basis representation) or - * PPB (pentanomial - * basis representation). - */ - public int getRepresentation() - { - return this.representation; - } - - /** - * @return the degree m of the reduction polynomial - * f(z). - */ - public int getM() - { - return this.m; - } - - /** - * @return TPB: The integer k where xm + - * xk + 1 represents the reduction polynomial - * f(z).
        - * PPB: The integer k1 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - public int getK1() - { - return this.k1; - } - - /** - * @return TPB: Always returns 0
        - * PPB: The integer k2 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - public int getK2() - { - return this.k2; - } - - /** - * @return TPB: Always set to 0
        - * PPB: The integer k3 where xm + - * xk3 + xk2 + xk1 + 1 - * represents the reduction polynomial f(z).
        - */ - public int getK3() - { - return this.k3; - } - - public boolean equals(Object anObject) - { - if (anObject == this) - { - return true; - } - - if (!(anObject instanceof ECFieldElement.F2m)) - { - return false; - } - - ECFieldElement.F2m b = (ECFieldElement.F2m)anObject; - - return ((this.m == b.m) && (this.k1 == b.k1) && (this.k2 == b.k2) - && (this.k3 == b.k3) - && (this.representation == b.representation) - && (this.x.equals(b.x))); - } - - public int hashCode() - { - return x.hashCode() ^ m ^ k1 ^ k2 ^ k3; - } - } -} diff --git a/src/org/bouncycastle/math/ec/ECMultiplier.java b/src/org/bouncycastle/math/ec/ECMultiplier.java deleted file mode 100644 index 326b96e..0000000 --- a/src/org/bouncycastle/math/ec/ECMultiplier.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -/** - * Interface for classes encapsulating a point multiplication algorithm - * for ECPoints. - */ -interface ECMultiplier -{ - /** - * Multiplies the ECPoint p by k, i.e. - * p is added k times to itself. - * @param p The ECPoint to be multiplied. - * @param k The factor by which p i multiplied. - * @return p multiplied by k. - */ - ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo); -} diff --git a/src/org/bouncycastle/math/ec/ECPoint.java b/src/org/bouncycastle/math/ec/ECPoint.java deleted file mode 100644 index 390b7b2..0000000 --- a/src/org/bouncycastle/math/ec/ECPoint.java +++ /dev/null @@ -1,588 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -import org.bouncycastle.asn1.x9.X9IntegerConverter; - -/** - * base class for points on elliptic curves. - */ -public abstract class ECPoint -{ - ECCurve curve; - ECFieldElement x; - ECFieldElement y; - - protected boolean withCompression; - - protected ECMultiplier multiplier = null; - - protected PreCompInfo preCompInfo = null; - - private static X9IntegerConverter converter = new X9IntegerConverter(); - - protected ECPoint(ECCurve curve, ECFieldElement x, ECFieldElement y) - { - this.curve = curve; - this.x = x; - this.y = y; - } - - public ECCurve getCurve() - { - return curve; - } - - public ECFieldElement getX() - { - return x; - } - - public ECFieldElement getY() - { - return y; - } - - public boolean isInfinity() - { - return x == null && y == null; - } - - public boolean isCompressed() - { - return withCompression; - } - - public boolean equals( - Object other) - { - if (other == this) - { - return true; - } - - if (!(other instanceof ECPoint)) - { - return false; - } - - ECPoint o = (ECPoint)other; - - if (this.isInfinity()) - { - return o.isInfinity(); - } - - return x.equals(o.x) && y.equals(o.y); - } - - public int hashCode() - { - if (this.isInfinity()) - { - return 0; - } - - return x.hashCode() ^ y.hashCode(); - } - -// /** -// * Mainly for testing. Explicitly set the ECMultiplier. -// * @param multiplier The ECMultiplier to be used to multiply -// * this ECPoint. -// */ -// public void setECMultiplier(ECMultiplier multiplier) -// { -// this.multiplier = multiplier; -// } - - /** - * Sets the PreCompInfo. Used by ECMultipliers - * to save the precomputation for this ECPoint to store the - * precomputation result for use by subsequent multiplication. - * @param preCompInfo The values precomputed by the - * ECMultiplier. - */ - void setPreCompInfo(PreCompInfo preCompInfo) - { - this.preCompInfo = preCompInfo; - } - - public abstract byte[] getEncoded(); - - public abstract ECPoint add(ECPoint b); - public abstract ECPoint subtract(ECPoint b); - public abstract ECPoint negate(); - public abstract ECPoint twice(); - - /** - * Sets the default ECMultiplier, unless already set. - */ - synchronized void assertECMultiplier() - { - if (this.multiplier == null) - { - this.multiplier = new FpNafMultiplier(); - } - } - - /** - * Multiplies this ECPoint by the given number. - * @param k The multiplicator. - * @return k * this. - */ - public ECPoint multiply(BigInteger k) - { - if (k.signum() < 0) - { - throw new IllegalArgumentException("The multiplicator cannot be negative"); - } - - if (this.isInfinity()) - { - return this; - } - - if (k.signum() == 0) - { - return this.curve.getInfinity(); - } - - assertECMultiplier(); - return this.multiplier.multiply(this, k, preCompInfo); - } - - /** - * Elliptic curve points over Fp - */ - public static class Fp extends ECPoint - { - - /** - * Create a point which encodes with point compression. - * - * @param curve the curve to use - * @param x affine x co-ordinate - * @param y affine y co-ordinate - */ - public Fp(ECCurve curve, ECFieldElement x, ECFieldElement y) - { - this(curve, x, y, false); - } - - /** - * Create a point that encodes with or without point compresion. - * - * @param curve the curve to use - * @param x affine x co-ordinate - * @param y affine y co-ordinate - * @param withCompression if true encode with point compression - */ - public Fp(ECCurve curve, ECFieldElement x, ECFieldElement y, boolean withCompression) - { - super(curve, x, y); - - if ((x != null && y == null) || (x == null && y != null)) - { - throw new IllegalArgumentException("Exactly one of the field elements is null"); - } - - this.withCompression = withCompression; - } - - /** - * return the field element encoded with point compression. (S 4.3.6) - */ - public byte[] getEncoded() - { - if (this.isInfinity()) - { - return new byte[1]; - } - - int qLength = converter.getByteLength(x); - - if (withCompression) - { - byte PC; - - if (this.getY().toBigInteger().testBit(0)) - { - PC = 0x03; - } - else - { - PC = 0x02; - } - - byte[] X = converter.integerToBytes(this.getX().toBigInteger(), qLength); - byte[] PO = new byte[X.length + 1]; - - PO[0] = PC; - System.arraycopy(X, 0, PO, 1, X.length); - - return PO; - } - else - { - byte[] X = converter.integerToBytes(this.getX().toBigInteger(), qLength); - byte[] Y = converter.integerToBytes(this.getY().toBigInteger(), qLength); - byte[] PO = new byte[X.length + Y.length + 1]; - - PO[0] = 0x04; - System.arraycopy(X, 0, PO, 1, X.length); - System.arraycopy(Y, 0, PO, X.length + 1, Y.length); - - return PO; - } - } - - // B.3 pg 62 - public ECPoint add(ECPoint b) - { - if (this.isInfinity()) - { - return b; - } - - if (b.isInfinity()) - { - return this; - } - - // Check if b = this or b = -this - if (this.x.equals(b.x)) - { - if (this.y.equals(b.y)) - { - // this = b, i.e. this must be doubled - return this.twice(); - } - - // this = -b, i.e. the result is the point at infinity - return this.curve.getInfinity(); - } - - ECFieldElement gamma = b.y.subtract(this.y).divide(b.x.subtract(this.x)); - - ECFieldElement x3 = gamma.square().subtract(this.x).subtract(b.x); - ECFieldElement y3 = gamma.multiply(this.x.subtract(x3)).subtract(this.y); - - return new ECPoint.Fp(curve, x3, y3); - } - - // B.3 pg 62 - public ECPoint twice() - { - if (this.isInfinity()) - { - // Twice identity element (point at infinity) is identity - return this; - } - - if (this.y.toBigInteger().signum() == 0) - { - // if y1 == 0, then (x1, y1) == (x1, -y1) - // and hence this = -this and thus 2(x1, y1) == infinity - return this.curve.getInfinity(); - } - - ECFieldElement TWO = this.curve.fromBigInteger(BigInteger.valueOf(2)); - ECFieldElement THREE = this.curve.fromBigInteger(BigInteger.valueOf(3)); - ECFieldElement gamma = this.x.square().multiply(THREE).add(curve.a).divide(y.multiply(TWO)); - - ECFieldElement x3 = gamma.square().subtract(this.x.multiply(TWO)); - ECFieldElement y3 = gamma.multiply(this.x.subtract(x3)).subtract(this.y); - - return new ECPoint.Fp(curve, x3, y3, this.withCompression); - } - - // D.3.2 pg 102 (see Note:) - public ECPoint subtract(ECPoint b) - { - if (b.isInfinity()) - { - return this; - } - - // Add -b - return add(b.negate()); - } - - public ECPoint negate() - { - return new ECPoint.Fp(curve, this.x, this.y.negate(), this.withCompression); - } - - /** - * Sets the default ECMultiplier, unless already set. - */ - synchronized void assertECMultiplier() - { - if (this.multiplier == null) - { - this.multiplier = new WNafMultiplier(); - } - } - } - - /** - * Elliptic curve points over F2m - */ - public static class F2m extends ECPoint - { - /** - * @param curve base curve - * @param x x point - * @param y y point - */ - public F2m(ECCurve curve, ECFieldElement x, ECFieldElement y) - { - this(curve, x, y, false); - } - - /** - * @param curve base curve - * @param x x point - * @param y y point - * @param withCompression true if encode with point compression. - */ - public F2m(ECCurve curve, ECFieldElement x, ECFieldElement y, boolean withCompression) - { - super(curve, x, y); - - if ((x != null && y == null) || (x == null && y != null)) - { - throw new IllegalArgumentException("Exactly one of the field elements is null"); - } - - if (x != null) - { - // Check if x and y are elements of the same field - ECFieldElement.F2m.checkFieldElements(this.x, this.y); - - // Check if x and a are elements of the same field - if (curve != null) - { - ECFieldElement.F2m.checkFieldElements(this.x, this.curve.getA()); - } - } - - this.withCompression = withCompression; - } - - /* (non-Javadoc) - * @see org.bouncycastle.math.ec.ECPoint#getEncoded() - */ - public byte[] getEncoded() - { - if (this.isInfinity()) - { - return new byte[1]; - } - - int byteCount = converter.getByteLength(this.x); - byte[] X = converter.integerToBytes(this.getX().toBigInteger(), byteCount); - byte[] PO; - - if (withCompression) - { - // See X9.62 4.3.6 and 4.2.2 - PO = new byte[byteCount + 1]; - - PO[0] = 0x02; - // X9.62 4.2.2 and 4.3.6: - // if x = 0 then ypTilde := 0, else ypTilde is the rightmost - // bit of y * x^(-1) - // if ypTilde = 0, then PC := 02, else PC := 03 - // Note: PC === PO[0] - if (!(this.getX().toBigInteger().equals(ECConstants.ZERO))) - { - if (this.getY().multiply(this.getX().invert()) - .toBigInteger().testBit(0)) - { - // ypTilde = 1, hence PC = 03 - PO[0] = 0x03; - } - } - - System.arraycopy(X, 0, PO, 1, byteCount); - } - else - { - byte[] Y = converter.integerToBytes(this.getY().toBigInteger(), byteCount); - - PO = new byte[byteCount + byteCount + 1]; - - PO[0] = 0x04; - System.arraycopy(X, 0, PO, 1, byteCount); - System.arraycopy(Y, 0, PO, byteCount + 1, byteCount); - } - - return PO; - } - - /** - * Check, if two ECPoints can be added or subtracted. - * @param a The first ECPoint to check. - * @param b The second ECPoint to check. - * @throws IllegalArgumentException if a and b - * cannot be added. - */ - private static void checkPoints(ECPoint a, ECPoint b) - { - // Check, if points are on the same curve - if (!(a.curve.equals(b.curve))) - { - throw new IllegalArgumentException("Only points on the same " - + "curve can be added or subtracted"); - } - -// ECFieldElement.F2m.checkFieldElements(a.x, b.x); - } - - /* (non-Javadoc) - * @see org.bouncycastle.math.ec.ECPoint#add(org.bouncycastle.math.ec.ECPoint) - */ - public ECPoint add(ECPoint b) - { - checkPoints(this, b); - return addSimple((ECPoint.F2m)b); - } - - /** - * Adds another ECPoints.F2m to this without - * checking if both points are on the same curve. Used by multiplication - * algorithms, because there all points are a multiple of the same point - * and hence the checks can be omitted. - * @param b The other ECPoints.F2m to add to - * this. - * @return this + b - */ - public ECPoint.F2m addSimple(ECPoint.F2m b) - { - ECPoint.F2m other = b; - if (this.isInfinity()) - { - return other; - } - - if (other.isInfinity()) - { - return this; - } - - ECFieldElement.F2m x2 = (ECFieldElement.F2m)other.getX(); - ECFieldElement.F2m y2 = (ECFieldElement.F2m)other.getY(); - - // Check if other = this or other = -this - if (this.x.equals(x2)) - { - if (this.y.equals(y2)) - { - // this = other, i.e. this must be doubled - return (ECPoint.F2m)this.twice(); - } - - // this = -other, i.e. the result is the point at infinity - return (ECPoint.F2m)this.curve.getInfinity(); - } - - ECFieldElement.F2m lambda - = (ECFieldElement.F2m)(this.y.add(y2)).divide(this.x.add(x2)); - - ECFieldElement.F2m x3 - = (ECFieldElement.F2m)lambda.square().add(lambda).add(this.x).add(x2).add(this.curve.getA()); - - ECFieldElement.F2m y3 - = (ECFieldElement.F2m)lambda.multiply(this.x.add(x3)).add(x3).add(this.y); - - return new ECPoint.F2m(curve, x3, y3, withCompression); - } - - /* (non-Javadoc) - * @see org.bouncycastle.math.ec.ECPoint#subtract(org.bouncycastle.math.ec.ECPoint) - */ - public ECPoint subtract(ECPoint b) - { - checkPoints(this, b); - return subtractSimple((ECPoint.F2m)b); - } - - /** - * Subtracts another ECPoints.F2m from this - * without checking if both points are on the same curve. Used by - * multiplication algorithms, because there all points are a multiple - * of the same point and hence the checks can be omitted. - * @param b The other ECPoints.F2m to subtract from - * this. - * @return this - b - */ - public ECPoint.F2m subtractSimple(ECPoint.F2m b) - { - if (b.isInfinity()) - { - return this; - } - - // Add -b - return addSimple((ECPoint.F2m)b.negate()); - } - - /* (non-Javadoc) - * @see org.bouncycastle.math.ec.ECPoint#twice() - */ - public ECPoint twice() - { - if (this.isInfinity()) - { - // Twice identity element (point at infinity) is identity - return this; - } - - if (this.x.toBigInteger().signum() == 0) - { - // if x1 == 0, then (x1, y1) == (x1, x1 + y1) - // and hence this = -this and thus 2(x1, y1) == infinity - return this.curve.getInfinity(); - } - - ECFieldElement.F2m lambda - = (ECFieldElement.F2m)this.x.add(this.y.divide(this.x)); - - ECFieldElement.F2m x3 - = (ECFieldElement.F2m)lambda.square().add(lambda). - add(this.curve.getA()); - - ECFieldElement ONE = this.curve.fromBigInteger(ECConstants.ONE); - ECFieldElement.F2m y3 - = (ECFieldElement.F2m)this.x.square().add( - x3.multiply(lambda.add(ONE))); - - return new ECPoint.F2m(this.curve, x3, y3, withCompression); - } - - public ECPoint negate() - { - return new ECPoint.F2m(curve, this.getX(), this.getY().add(this.getX()), withCompression); - } - - /** - * Sets the appropriate ECMultiplier, unless already set. - */ - synchronized void assertECMultiplier() - { - if (this.multiplier == null) - { - if (((ECCurve.F2m)this.curve).isKoblitz()) - { - this.multiplier = new WTauNafMultiplier(); - } - else - { - this.multiplier = new WNafMultiplier(); - } - } - } - } -} diff --git a/src/org/bouncycastle/math/ec/FpNafMultiplier.java b/src/org/bouncycastle/math/ec/FpNafMultiplier.java deleted file mode 100644 index a3973de..0000000 --- a/src/org/bouncycastle/math/ec/FpNafMultiplier.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -/** - * Class implementing the NAF (Non-Adjacent Form) multiplication algorithm. - */ -class FpNafMultiplier implements ECMultiplier -{ - /** - * D.3.2 pg 101 - * @see org.bouncycastle.math.ec.ECMultiplier#multiply(org.bouncycastle.math.ec.ECPoint, java.math.BigInteger) - */ - public ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo) - { - // TODO Probably should try to add this - // BigInteger e = k.mod(n); // n == order of p - BigInteger e = k; - BigInteger h = e.multiply(BigInteger.valueOf(3)); - - ECPoint neg = p.negate(); - ECPoint R = p; - - for (int i = h.bitLength() - 2; i > 0; --i) - { - R = R.twice(); - - boolean hBit = h.testBit(i); - boolean eBit = e.testBit(i); - - if (hBit != eBit) - { - R = R.add(hBit ? p : neg); - } - } - - return R; - } -} diff --git a/src/org/bouncycastle/math/ec/IntArray.java b/src/org/bouncycastle/math/ec/IntArray.java deleted file mode 100644 index 02d1568..0000000 --- a/src/org/bouncycastle/math/ec/IntArray.java +++ /dev/null @@ -1,518 +0,0 @@ -package org.bouncycastle.math.ec; - -import org.bouncycastle.util.Arrays; - -import javabc.BigInteger; - -class IntArray -{ - // TODO make m fixed for the IntArray, and hence compute T once and for all - - private int[] m_ints; - - public IntArray(int intLen) - { - m_ints = new int[intLen]; - } - - public IntArray(int[] ints) - { - m_ints = ints; - } - - public IntArray(BigInteger bigInt) - { - this(bigInt, 0); - } - - public IntArray(BigInteger bigInt, int minIntLen) - { - if (bigInt.signum() == -1) - { - throw new IllegalArgumentException("Only positive Integers allowed"); - } - if (bigInt.equals(ECConstants.ZERO)) - { - m_ints = new int[] { 0 }; - return; - } - - byte[] barr = bigInt.toByteArray(); - int barrLen = barr.length; - int barrStart = 0; - if (barr[0] == 0) - { - // First byte is 0 to enforce highest (=sign) bit is zero. - // In this case ignore barr[0]. - barrLen--; - barrStart = 1; - } - int intLen = (barrLen + 3) / 4; - if (intLen < minIntLen) - { - m_ints = new int[minIntLen]; - } - else - { - m_ints = new int[intLen]; - } - - int iarrJ = intLen - 1; - int rem = barrLen % 4 + barrStart; - int temp = 0; - int barrI = barrStart; - if (barrStart < rem) - { - for (; barrI < rem; barrI++) - { - temp <<= 8; - int barrBarrI = barr[barrI]; - if (barrBarrI < 0) - { - barrBarrI += 256; - } - temp |= barrBarrI; - } - m_ints[iarrJ--] = temp; - } - - for (; iarrJ >= 0; iarrJ--) - { - temp = 0; - for (int i = 0; i < 4; i++) - { - temp <<= 8; - int barrBarrI = barr[barrI++]; - if (barrBarrI < 0) - { - barrBarrI += 256; - } - temp |= barrBarrI; - } - m_ints[iarrJ] = temp; - } - } - - public boolean isZero() - { - return m_ints.length == 0 - || (m_ints[0] == 0 && getUsedLength() == 0); - } - - public int getUsedLength() - { - int highestIntPos = m_ints.length; - - if (highestIntPos < 1) - { - return 0; - } - - // Check if first element will act as sentinel - if (m_ints[0] != 0) - { - while (m_ints[--highestIntPos] == 0) - { - } - return highestIntPos + 1; - } - - do - { - if (m_ints[--highestIntPos] != 0) - { - return highestIntPos + 1; - } - } - while (highestIntPos > 0); - - return 0; - } - - public int bitLength() - { - // JDK 1.5: see Integer.numberOfLeadingZeros() - int intLen = getUsedLength(); - if (intLen == 0) - { - return 0; - } - - int last = intLen - 1; - int highest = m_ints[last]; - int bits = (last << 5) + 1; - - // A couple of binary search steps - if ((highest & 0xffff0000) != 0) - { - if ((highest & 0xff000000) != 0) - { - bits += 24; - highest >>>= 24; - } - else - { - bits += 16; - highest >>>= 16; - } - } - else if (highest > 0x000000ff) - { - bits += 8; - highest >>>= 8; - } - - while (highest != 1) - { - ++bits; - highest >>>= 1; - } - - return bits; - } - - private int[] resizedInts(int newLen) - { - int[] newInts = new int[newLen]; - int oldLen = m_ints.length; - int copyLen = oldLen < newLen ? oldLen : newLen; - System.arraycopy(m_ints, 0, newInts, 0, copyLen); - return newInts; - } - - public BigInteger toBigInteger() - { - int usedLen = getUsedLength(); - if (usedLen == 0) - { - return ECConstants.ZERO; - } - - int highestInt = m_ints[usedLen - 1]; - byte[] temp = new byte[4]; - int barrI = 0; - boolean trailingZeroBytesDone = false; - for (int j = 3; j >= 0; j--) - { - byte thisByte = (byte) (highestInt >>> (8 * j)); - if (trailingZeroBytesDone || (thisByte != 0)) - { - trailingZeroBytesDone = true; - temp[barrI++] = thisByte; - } - } - - int barrLen = 4 * (usedLen - 1) + barrI; - byte[] barr = new byte[barrLen]; - for (int j = 0; j < barrI; j++) - { - barr[j] = temp[j]; - } - // Highest value int is done now - - for (int iarrJ = usedLen - 2; iarrJ >= 0; iarrJ--) - { - for (int j = 3; j >= 0; j--) - { - barr[barrI++] = (byte) (m_ints[iarrJ] >>> (8 * j)); - } - } - return new BigInteger(1, barr); - } - - public void shiftLeft() - { - int usedLen = getUsedLength(); - if (usedLen == 0) - { - return; - } - if (m_ints[usedLen - 1] < 0) - { - // highest bit of highest used byte is set, so shifting left will - // make the IntArray one byte longer - usedLen++; - if (usedLen > m_ints.length) - { - // make the m_ints one byte longer, because we need one more - // byte which is not available in m_ints - m_ints = resizedInts(m_ints.length + 1); - } - } - - boolean carry = false; - for (int i = 0; i < usedLen; i++) - { - // nextCarry is true if highest bit is set - boolean nextCarry = m_ints[i] < 0; - m_ints[i] <<= 1; - if (carry) - { - // set lowest bit - m_ints[i] |= 1; - } - carry = nextCarry; - } - } - - public IntArray shiftLeft(int n) - { - int usedLen = getUsedLength(); - if (usedLen == 0) - { - return this; - } - - if (n == 0) - { - return this; - } - - if (n > 31) - { - throw new IllegalArgumentException("shiftLeft() for max 31 bits " - + ", " + n + "bit shift is not possible"); - } - - int[] newInts = new int[usedLen + 1]; - - int nm32 = 32 - n; - newInts[0] = m_ints[0] << n; - for (int i = 1; i < usedLen; i++) - { - newInts[i] = (m_ints[i] << n) | (m_ints[i - 1] >>> nm32); - } - newInts[usedLen] = m_ints[usedLen - 1] >>> nm32; - - return new IntArray(newInts); - } - - public void addShifted(IntArray other, int shift) - { - int usedLenOther = other.getUsedLength(); - int newMinUsedLen = usedLenOther + shift; - if (newMinUsedLen > m_ints.length) - { - m_ints = resizedInts(newMinUsedLen); - //System.out.println("Resize required"); - } - - for (int i = 0; i < usedLenOther; i++) - { - m_ints[i + shift] ^= other.m_ints[i]; - } - } - - public int getLength() - { - return m_ints.length; - } - - public boolean testBit(int n) - { - // theInt = n / 32 - int theInt = n >> 5; - // theBit = n % 32 - int theBit = n & 0x1F; - int tester = 1 << theBit; - return ((m_ints[theInt] & tester) != 0); - } - - public void flipBit(int n) - { - // theInt = n / 32 - int theInt = n >> 5; - // theBit = n % 32 - int theBit = n & 0x1F; - int flipper = 1 << theBit; - m_ints[theInt] ^= flipper; - } - - public void setBit(int n) - { - // theInt = n / 32 - int theInt = n >> 5; - // theBit = n % 32 - int theBit = n & 0x1F; - int setter = 1 << theBit; - m_ints[theInt] |= setter; - } - - public IntArray multiply(IntArray other, int m) - { - // Lenght of c is 2m bits rounded up to the next int (32 bit) - int t = (m + 31) >> 5; - if (m_ints.length < t) - { - m_ints = resizedInts(t); - } - - IntArray b = new IntArray(other.resizedInts(other.getLength() + 1)); - IntArray c = new IntArray((m + m + 31) >> 5); - // IntArray c = new IntArray(t + t); - int testBit = 1; - for (int k = 0; k < 32; k++) - { - for (int j = 0; j < t; j++) - { - if ((m_ints[j] & testBit) != 0) - { - // The kth bit of m_ints[j] is set - c.addShifted(b, j); - } - } - testBit <<= 1; - b.shiftLeft(); - } - return c; - } - - // public IntArray multiplyLeftToRight(IntArray other, int m) { - // // Lenght of c is 2m bits rounded up to the next int (32 bit) - // int t = (m + 31) / 32; - // if (m_ints.length < t) { - // m_ints = resizedInts(t); - // } - // - // IntArray b = new IntArray(other.resizedInts(other.getLength() + 1)); - // IntArray c = new IntArray((m + m + 31) / 32); - // // IntArray c = new IntArray(t + t); - // int testBit = 1 << 31; - // for (int k = 31; k >= 0; k--) { - // for (int j = 0; j < t; j++) { - // if ((m_ints[j] & testBit) != 0) { - // // The kth bit of m_ints[j] is set - // c.addShifted(b, j); - // } - // } - // testBit >>>= 1; - // if (k > 0) { - // c.shiftLeft(); - // } - // } - // return c; - // } - - // TODO note, redPol.length must be 3 for TPB and 5 for PPB - public void reduce(int m, int[] redPol) - { - for (int i = m + m - 2; i >= m; i--) - { - if (testBit(i)) - { - int bit = i - m; - flipBit(bit); - flipBit(i); - int l = redPol.length; - while (--l >= 0) - { - flipBit(redPol[l] + bit); - } - } - } - m_ints = resizedInts((m + 31) >> 5); - } - - public IntArray square(int m) - { - // TODO make the table static final - final int[] table = { 0x0, 0x1, 0x4, 0x5, 0x10, 0x11, 0x14, 0x15, 0x40, - 0x41, 0x44, 0x45, 0x50, 0x51, 0x54, 0x55 }; - - int t = (m + 31) >> 5; - if (m_ints.length < t) - { - m_ints = resizedInts(t); - } - - IntArray c = new IntArray(t + t); - - // TODO twice the same code, put in separate private method - for (int i = 0; i < t; i++) - { - int v0 = 0; - for (int j = 0; j < 4; j++) - { - v0 = v0 >>> 8; - int u = (m_ints[i] >>> (j * 4)) & 0xF; - int w = table[u] << 24; - v0 |= w; - } - c.m_ints[i + i] = v0; - - v0 = 0; - int upper = m_ints[i] >>> 16; - for (int j = 0; j < 4; j++) - { - v0 = v0 >>> 8; - int u = (upper >>> (j * 4)) & 0xF; - int w = table[u] << 24; - v0 |= w; - } - c.m_ints[i + i + 1] = v0; - } - return c; - } - - public boolean equals(Object o) - { - if (!(o instanceof IntArray)) - { - return false; - } - IntArray other = (IntArray) o; - int usedLen = getUsedLength(); - if (other.getUsedLength() != usedLen) - { - return false; - } - for (int i = 0; i < usedLen; i++) - { - if (m_ints[i] != other.m_ints[i]) - { - return false; - } - } - return true; - } - - public int hashCode() - { - int usedLen = getUsedLength(); - int hash = 1; - for (int i = 0; i < usedLen; i++) - { - hash = hash * 31 + m_ints[i]; - } - return hash; - } - - public Object clone() - { - return new IntArray(Arrays.clone(m_ints)); - } - - public String toString() - { - int usedLen = getUsedLength(); - if (usedLen == 0) - { - return "0"; - } - - StringBuffer sb = new StringBuffer(Integer - .toBinaryString(m_ints[usedLen - 1])); - for (int iarrJ = usedLen - 2; iarrJ >= 0; iarrJ--) - { - String hexString = Integer.toBinaryString(m_ints[iarrJ]); - - // Add leading zeroes, except for highest significant int - for (int i = hexString.length(); i < 8; i++) - { - hexString = "0" + hexString; - } - sb.append(hexString); - } - return sb.toString(); - } -} diff --git a/src/org/bouncycastle/math/ec/PreCompInfo.java b/src/org/bouncycastle/math/ec/PreCompInfo.java deleted file mode 100644 index 804dcf7..0000000 --- a/src/org/bouncycastle/math/ec/PreCompInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bouncycastle.math.ec; - -/** - * Interface for classes storing precomputation data for multiplication - * algorithms. Used as a Memento (see GOF patterns) for - * WNafMultiplier. - */ -interface PreCompInfo -{ -} diff --git a/src/org/bouncycastle/math/ec/ReferenceMultiplier.java b/src/org/bouncycastle/math/ec/ReferenceMultiplier.java deleted file mode 100644 index e4f2728..0000000 --- a/src/org/bouncycastle/math/ec/ReferenceMultiplier.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -class ReferenceMultiplier implements ECMultiplier -{ - /** - * Simple shift-and-add multiplication. Serves as reference implementation - * to verify (possibly faster) implementations in - * {@link org.bouncycastle.math.ec.ECPoint ECPoint}. - * - * @param p The point to multiply. - * @param k The factor by which to multiply. - * @return The result of the point multiplication k * p. - */ - public ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo) - { - ECPoint q = p.getCurve().getInfinity(); - int t = k.bitLength(); - for (int i = 0; i < t; i++) - { - if (k.testBit(i)) - { - q = q.add(p); - } - p = p.twice(); - } - return q; - } -} diff --git a/src/org/bouncycastle/math/ec/SimpleBigDecimal.java b/src/org/bouncycastle/math/ec/SimpleBigDecimal.java deleted file mode 100644 index 929664b..0000000 --- a/src/org/bouncycastle/math/ec/SimpleBigDecimal.java +++ /dev/null @@ -1,253 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -/** - * Class representing a simple version of a big decimal. A - * SimpleBigDecimal is basically a - * {@link java.math.BigInteger BigInteger} with a few digits on the right of - * the decimal point. The number of (binary) digits on the right of the decimal - * point is called the scale of the SimpleBigDecimal. - * Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted - * automatically, but must be set manually. All SimpleBigDecimals - * taking part in the same arithmetic operation must have equal scale. The - * result of a multiplication of two SimpleBigDecimals returns a - * SimpleBigDecimal with double scale. - */ -class SimpleBigDecimal - //extends Number // not in J2ME - add compatibility class? -{ - private static final long serialVersionUID = 1L; - - private final BigInteger bigInt; - private final int scale; - - /** - * Returns a SimpleBigDecimal representing the same numerical - * value as value. - * @param value The value of the SimpleBigDecimal to be - * created. - * @param scale The scale of the SimpleBigDecimal to be - * created. - * @return The such created SimpleBigDecimal. - */ - public static SimpleBigDecimal getInstance(BigInteger value, int scale) - { - return new SimpleBigDecimal(value.shiftLeft(scale), scale); - } - - /** - * Constructor for SimpleBigDecimal. The value of the - * constructed SimpleBigDecimal equals bigInt / - * 2scale. - * @param bigInt The bigInt value parameter. - * @param scale The scale of the constructed SimpleBigDecimal. - */ - public SimpleBigDecimal(BigInteger bigInt, int scale) - { - if (scale < 0) - { - throw new IllegalArgumentException("scale may not be negative"); - } - - this.bigInt = bigInt; - this.scale = scale; - } - - private SimpleBigDecimal(SimpleBigDecimal limBigDec) - { - bigInt = limBigDec.bigInt; - scale = limBigDec.scale; - } - - private void checkScale(SimpleBigDecimal b) - { - if (scale != b.scale) - { - throw new IllegalArgumentException("Only SimpleBigDecimal of " + - "same scale allowed in arithmetic operations"); - } - } - - public SimpleBigDecimal adjustScale(int newScale) - { - if (newScale < 0) - { - throw new IllegalArgumentException("scale may not be negative"); - } - - if (newScale == scale) - { - return new SimpleBigDecimal(this); - } - - return new SimpleBigDecimal(bigInt.shiftLeft(newScale - scale), - newScale); - } - - public SimpleBigDecimal add(SimpleBigDecimal b) - { - checkScale(b); - return new SimpleBigDecimal(bigInt.add(b.bigInt), scale); - } - - public SimpleBigDecimal add(BigInteger b) - { - return new SimpleBigDecimal(bigInt.add(b.shiftLeft(scale)), scale); - } - - public SimpleBigDecimal negate() - { - return new SimpleBigDecimal(bigInt.negate(), scale); - } - - public SimpleBigDecimal subtract(SimpleBigDecimal b) - { - return add(b.negate()); - } - - public SimpleBigDecimal subtract(BigInteger b) - { - return new SimpleBigDecimal(bigInt.subtract(b.shiftLeft(scale)), - scale); - } - - public SimpleBigDecimal multiply(SimpleBigDecimal b) - { - checkScale(b); - return new SimpleBigDecimal(bigInt.multiply(b.bigInt), scale + scale); - } - - public SimpleBigDecimal multiply(BigInteger b) - { - return new SimpleBigDecimal(bigInt.multiply(b), scale); - } - - public SimpleBigDecimal divide(SimpleBigDecimal b) - { - checkScale(b); - BigInteger dividend = bigInt.shiftLeft(scale); - return new SimpleBigDecimal(dividend.divide(b.bigInt), scale); - } - - public SimpleBigDecimal divide(BigInteger b) - { - return new SimpleBigDecimal(bigInt.divide(b), scale); - } - - public SimpleBigDecimal shiftLeft(int n) - { - return new SimpleBigDecimal(bigInt.shiftLeft(n), scale); - } - - public int compareTo(SimpleBigDecimal val) - { - checkScale(val); - return bigInt.compareTo(val.bigInt); - } - - public int compareTo(BigInteger val) - { - return bigInt.compareTo(val.shiftLeft(scale)); - } - - public BigInteger floor() - { - return bigInt.shiftRight(scale); - } - - public BigInteger round() - { - SimpleBigDecimal oneHalf = new SimpleBigDecimal(ECConstants.ONE, 1); - return add(oneHalf.adjustScale(scale)).floor(); - } - - public int intValue() - { - return floor().intValue(); - } - - public long longValue() - { - return floor().longValue(); - } - /* NON-J2ME compliant. - public double doubleValue() - { - return Double.valueOf(toString()).doubleValue(); - } - - public float floatValue() - { - return Float.valueOf(toString()).floatValue(); - } - */ - public int getScale() - { - return scale; - } - - public String toString() - { - if (scale == 0) - { - return bigInt.toString(); - } - - BigInteger floorBigInt = floor(); - - BigInteger fract = bigInt.subtract(floorBigInt.shiftLeft(scale)); - if (bigInt.signum() == -1) - { - fract = ECConstants.ONE.shiftLeft(scale).subtract(fract); - } - - if ((floorBigInt.signum() == -1) && (!(fract.equals(ECConstants.ZERO)))) - { - floorBigInt = floorBigInt.add(ECConstants.ONE); - } - String leftOfPoint = floorBigInt.toString(); - - char[] fractCharArr = new char[scale]; - String fractStr = fract.toString(2); - int fractLen = fractStr.length(); - int zeroes = scale - fractLen; - for (int i = 0; i < zeroes; i++) - { - fractCharArr[i] = '0'; - } - for (int j = 0; j < fractLen; j++) - { - fractCharArr[zeroes + j] = fractStr.charAt(j); - } - String rightOfPoint = new String(fractCharArr); - - StringBuffer sb = new StringBuffer(leftOfPoint); - sb.append("."); - sb.append(rightOfPoint); - - return sb.toString(); - } - - public boolean equals(Object o) - { - if (this == o) - { - return true; - } - - if (!(o instanceof SimpleBigDecimal)) - { - return false; - } - - SimpleBigDecimal other = (SimpleBigDecimal)o; - return ((bigInt.equals(other.bigInt)) && (scale == other.scale)); - } - - public int hashCode() - { - return bigInt.hashCode() ^ scale; - } - -} diff --git a/src/org/bouncycastle/math/ec/Tnaf.java b/src/org/bouncycastle/math/ec/Tnaf.java deleted file mode 100644 index 9fedcf5..0000000 --- a/src/org/bouncycastle/math/ec/Tnaf.java +++ /dev/null @@ -1,844 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -/** - * Class holding methods for point multiplication based on the window - * τ-adic nonadjacent form (WTNAF). The algorithms are based on the - * paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" - * by Jerome A. Solinas. The paper first appeared in the Proceedings of - * Crypto 1997. - */ -class Tnaf -{ - private static final BigInteger MINUS_ONE = ECConstants.ONE.negate(); - private static final BigInteger MINUS_TWO = ECConstants.TWO.negate(); - private static final BigInteger MINUS_THREE = ECConstants.THREE.negate(); - - /** - * The window width of WTNAF. The standard value of 4 is slightly less - * than optimal for running time, but keeps space requirements for - * precomputation low. For typical curves, a value of 5 or 6 results in - * a better running time. When changing this value, the - * αu's must be computed differently, see - * e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, - * Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, - * p. 121-122 - */ - public static final byte WIDTH = 4; - - /** - * 24 - */ - public static final byte POW_2_WIDTH = 16; - - /** - * The αu's for a=0 as an array - * of ZTauElements. - */ - public static final ZTauElement[] alpha0 = { - null, - new ZTauElement(ECConstants.ONE, ECConstants.ZERO), null, - new ZTauElement(MINUS_THREE, MINUS_ONE), null, - new ZTauElement(MINUS_ONE, MINUS_ONE), null, - new ZTauElement(ECConstants.ONE, MINUS_ONE), null - }; - - /** - * The αu's for a=0 as an array - * of TNAFs. - */ - public static final byte[][] alpha0Tnaf = { - null, {1}, null, {-1, 0, 1}, null, {1, 0, 1}, null, {-1, 0, 0, 1} - }; - - /** - * The αu's for a=1 as an array - * of ZTauElements. - */ - public static final ZTauElement[] alpha1 = {null, - new ZTauElement(ECConstants.ONE, ECConstants.ZERO), null, - new ZTauElement(MINUS_THREE, ECConstants.ONE), null, - new ZTauElement(MINUS_ONE, ECConstants.ONE), null, - new ZTauElement(ECConstants.ONE, ECConstants.ONE), null - }; - - /** - * The αu's for a=1 as an array - * of TNAFs. - */ - public static final byte[][] alpha1Tnaf = { - null, {1}, null, {-1, 0, 1}, null, {1, 0, 1}, null, {-1, 0, 0, -1} - }; - - /** - * Computes the norm of an element λ of - * Z[τ]. - * @param mu The parameter μ of the elliptic curve. - * @param lambda The element λ of - * Z[τ]. - * @return The norm of λ. - */ - public static BigInteger norm(final byte mu, ZTauElement lambda) - { - BigInteger norm; - - // s1 = u^2 - BigInteger s1 = lambda.u.multiply(lambda.u); - - // s2 = u * v - BigInteger s2 = lambda.u.multiply(lambda.v); - - // s3 = 2 * v^2 - BigInteger s3 = lambda.v.multiply(lambda.v).shiftLeft(1); - - if (mu == 1) - { - norm = s1.add(s2).add(s3); - } - else if (mu == -1) - { - norm = s1.subtract(s2).add(s3); - } - else - { - throw new IllegalArgumentException("mu must be 1 or -1"); - } - - return norm; - } - - /** - * Computes the norm of an element λ of - * R[τ], where λ = u + vτ - * and u and u are real numbers (elements of - * R). - * @param mu The parameter μ of the elliptic curve. - * @param u The real part of the element λ of - * R[τ]. - * @param v The τ-adic part of the element - * λ of R[τ]. - * @return The norm of λ. - */ - public static SimpleBigDecimal norm(final byte mu, SimpleBigDecimal u, - SimpleBigDecimal v) - { - SimpleBigDecimal norm; - - // s1 = u^2 - SimpleBigDecimal s1 = u.multiply(u); - - // s2 = u * v - SimpleBigDecimal s2 = u.multiply(v); - - // s3 = 2 * v^2 - SimpleBigDecimal s3 = v.multiply(v).shiftLeft(1); - - if (mu == 1) - { - norm = s1.add(s2).add(s3); - } - else if (mu == -1) - { - norm = s1.subtract(s2).add(s3); - } - else - { - throw new IllegalArgumentException("mu must be 1 or -1"); - } - - return norm; - } - - /** - * Rounds an element λ of R[τ] - * to an element of Z[τ], such that their difference - * has minimal norm. λ is given as - * λ = λ0 + λ1τ. - * @param lambda0 The component λ0. - * @param lambda1 The component λ1. - * @param mu The parameter μ of the elliptic curve. Must - * equal 1 or -1. - * @return The rounded element of Z[τ]. - * @throws IllegalArgumentException if lambda0 and - * lambda1 do not have same scale. - */ - public static ZTauElement round(SimpleBigDecimal lambda0, - SimpleBigDecimal lambda1, byte mu) - { - int scale = lambda0.getScale(); - if (lambda1.getScale() != scale) - { - throw new IllegalArgumentException("lambda0 and lambda1 do not " + - "have same scale"); - } - - if (!((mu == 1) || (mu == -1))) - { - throw new IllegalArgumentException("mu must be 1 or -1"); - } - - BigInteger f0 = lambda0.round(); - BigInteger f1 = lambda1.round(); - - SimpleBigDecimal eta0 = lambda0.subtract(f0); - SimpleBigDecimal eta1 = lambda1.subtract(f1); - - // eta = 2*eta0 + mu*eta1 - SimpleBigDecimal eta = eta0.add(eta0); - if (mu == 1) - { - eta = eta.add(eta1); - } - else - { - // mu == -1 - eta = eta.subtract(eta1); - } - - // check1 = eta0 - 3*mu*eta1 - // check2 = eta0 + 4*mu*eta1 - SimpleBigDecimal threeEta1 = eta1.add(eta1).add(eta1); - SimpleBigDecimal fourEta1 = threeEta1.add(eta1); - SimpleBigDecimal check1; - SimpleBigDecimal check2; - if (mu == 1) - { - check1 = eta0.subtract(threeEta1); - check2 = eta0.add(fourEta1); - } - else - { - // mu == -1 - check1 = eta0.add(threeEta1); - check2 = eta0.subtract(fourEta1); - } - - byte h0 = 0; - byte h1 = 0; - - // if eta >= 1 - if (eta.compareTo(ECConstants.ONE) >= 0) - { - if (check1.compareTo(MINUS_ONE) < 0) - { - h1 = mu; - } - else - { - h0 = 1; - } - } - else - { - // eta < 1 - if (check2.compareTo(ECConstants.TWO) >= 0) - { - h1 = mu; - } - } - - // if eta < -1 - if (eta.compareTo(MINUS_ONE) < 0) - { - if (check1.compareTo(ECConstants.ONE) >= 0) - { - h1 = (byte)-mu; - } - else - { - h0 = -1; - } - } - else - { - // eta >= -1 - if (check2.compareTo(MINUS_TWO) < 0) - { - h1 = (byte)-mu; - } - } - - BigInteger q0 = f0.add(BigInteger.valueOf(h0)); - BigInteger q1 = f1.add(BigInteger.valueOf(h1)); - return new ZTauElement(q0, q1); - } - - /** - * Approximate division by n. For an integer - * k, the value λ = s k / n is - * computed to c bits of accuracy. - * @param k The parameter k. - * @param s The curve parameter s0 or - * s1. - * @param vm The Lucas Sequence element Vm. - * @param a The parameter a of the elliptic curve. - * @param m The bit length of the finite field - * Fm. - * @param c The number of bits of accuracy, i.e. the scale of the returned - * SimpleBigDecimal. - * @return The value λ = s k / n computed to - * c bits of accuracy. - */ - public static SimpleBigDecimal approximateDivisionByN(BigInteger k, - BigInteger s, BigInteger vm, byte a, int m, int c) - { - int _k = (m + 5)/2 + c; - BigInteger ns = k.shiftRight(m - _k - 2 + a); - - BigInteger gs = s.multiply(ns); - - BigInteger hs = gs.shiftRight(m); - - BigInteger js = vm.multiply(hs); - - BigInteger gsPlusJs = gs.add(js); - BigInteger ls = gsPlusJs.shiftRight(_k-c); - if (gsPlusJs.testBit(_k-c-1)) - { - // round up - ls = ls.add(ECConstants.ONE); - } - - return new SimpleBigDecimal(ls, c); - } - - /** - * Computes the τ-adic NAF (non-adjacent form) of an - * element λ of Z[τ]. - * @param mu The parameter μ of the elliptic curve. - * @param lambda The element λ of - * Z[τ]. - * @return The τ-adic NAF of λ. - */ - public static byte[] tauAdicNaf(byte mu, ZTauElement lambda) - { - if (!((mu == 1) || (mu == -1))) - { - throw new IllegalArgumentException("mu must be 1 or -1"); - } - - BigInteger norm = norm(mu, lambda); - - // Ceiling of log2 of the norm - int log2Norm = norm.bitLength(); - - // If length(TNAF) > 30, then length(TNAF) < log2Norm + 3.52 - int maxLength = log2Norm > 30 ? log2Norm + 4 : 34; - - // The array holding the TNAF - byte[] u = new byte[maxLength]; - int i = 0; - - // The actual length of the TNAF - int length = 0; - - BigInteger r0 = lambda.u; - BigInteger r1 = lambda.v; - - while(!((r0.equals(ECConstants.ZERO)) && (r1.equals(ECConstants.ZERO)))) - { - // If r0 is odd - if (r0.testBit(0)) - { - u[i] = (byte) ECConstants.TWO.subtract((r0.subtract(r1.shiftLeft(1))).mod(ECConstants.FOUR)).intValue(); - - // r0 = r0 - u[i] - if (u[i] == 1) - { - r0 = r0.clearBit(0); - } - else - { - // u[i] == -1 - r0 = r0.add(ECConstants.ONE); - } - length = i; - } - else - { - u[i] = 0; - } - - BigInteger t = r0; - BigInteger s = r0.shiftRight(1); - if (mu == 1) - { - r0 = r1.add(s); - } - else - { - // mu == -1 - r0 = r1.subtract(s); - } - - r1 = t.shiftRight(1).negate(); - i++; - } - - length++; - - // Reduce the TNAF array to its actual length - byte[] tnaf = new byte[length]; - System.arraycopy(u, 0, tnaf, 0, length); - return tnaf; - } - - /** - * Applies the operation τ() to an - * ECPoint.F2m. - * @param p The ECPoint.F2m to which τ() is applied. - * @return τ(p) - */ - public static ECPoint.F2m tau(ECPoint.F2m p) - { - if (p.isInfinity()) - { - return p; - } - - ECFieldElement x = p.getX(); - ECFieldElement y = p.getY(); - - return new ECPoint.F2m(p.getCurve(), x.square(), y.square(), p.isCompressed()); - } - - /** - * Returns the parameter μ of the elliptic curve. - * @param curve The elliptic curve from which to obtain μ. - * The curve must be a Koblitz curve, i.e. a equals - * 0 or 1 and b equals - * 1. - * @return μ of the elliptic curve. - * @throws IllegalArgumentException if the given ECCurve is not a Koblitz - * curve. - */ - public static byte getMu(ECCurve.F2m curve) - { - BigInteger a = curve.getA().toBigInteger(); - byte mu; - - if (a.equals(ECConstants.ZERO)) - { - mu = -1; - } - else if (a.equals(ECConstants.ONE)) - { - mu = 1; - } - else - { - throw new IllegalArgumentException("No Koblitz curve (ABC), " + - "TNAF multiplication not possible"); - } - return mu; - } - - /** - * Calculates the Lucas Sequence elements Uk-1 and - * Uk or Vk-1 and - * Vk. - * @param mu The parameter μ of the elliptic curve. - * @param k The index of the second element of the Lucas Sequence to be - * returned. - * @param doV If set to true, computes Vk-1 and - * Vk, otherwise Uk-1 and - * Uk. - * @return An array with 2 elements, containing Uk-1 - * and Uk or Vk-1 - * and Vk. - */ - public static BigInteger[] getLucas(byte mu, int k, boolean doV) - { - if (!((mu == 1) || (mu == -1))) - { - throw new IllegalArgumentException("mu must be 1 or -1"); - } - - BigInteger u0; - BigInteger u1; - BigInteger u2; - - if (doV) - { - u0 = ECConstants.TWO; - u1 = BigInteger.valueOf(mu); - } - else - { - u0 = ECConstants.ZERO; - u1 = ECConstants.ONE; - } - - for (int i = 1; i < k; i++) - { - // u2 = mu*u1 - 2*u0; - BigInteger s = null; - if (mu == 1) - { - s = u1; - } - else - { - // mu == -1 - s = u1.negate(); - } - - u2 = s.subtract(u0.shiftLeft(1)); - u0 = u1; - u1 = u2; -// System.out.println(i + ": " + u2); -// System.out.println(); - } - - BigInteger[] retVal = {u0, u1}; - return retVal; - } - - /** - * Computes the auxiliary value tw. If the width is - * 4, then for mu = 1, tw = 6 and for - * mu = -1, tw = 10 - * @param mu The parameter μ of the elliptic curve. - * @param w The window width of the WTNAF. - * @return the auxiliary value tw - */ - public static BigInteger getTw(byte mu, int w) - { - if (w == 4) - { - if (mu == 1) - { - return BigInteger.valueOf(6); - } - else - { - // mu == -1 - return BigInteger.valueOf(10); - } - } - else - { - // For w <> 4, the values must be computed - BigInteger[] us = getLucas(mu, w, false); - BigInteger twoToW = ECConstants.ZERO.setBit(w); - BigInteger u1invert = us[1].modInverse(twoToW); - BigInteger tw; - tw = ECConstants.TWO.multiply(us[0]).multiply(u1invert).mod(twoToW); -// System.out.println("mu = " + mu); -// System.out.println("tw = " + tw); - return tw; - } - } - - /** - * Computes the auxiliary values s0 and - * s1 used for partial modular reduction. - * @param curve The elliptic curve for which to compute - * s0 and s1. - * @throws IllegalArgumentException if curve is not a - * Koblitz curve (Anomalous Binary Curve, ABC). - */ - public static BigInteger[] getSi(ECCurve.F2m curve) - { - if (!curve.isKoblitz()) - { - throw new IllegalArgumentException("si is defined for Koblitz curves only"); - } - - int m = curve.getM(); - int a = curve.getA().toBigInteger().intValue(); - byte mu = curve.getMu(); - int h = curve.getH().intValue(); - int index = m + 3 - a; - BigInteger[] ui = getLucas(mu, index, false); - - BigInteger dividend0; - BigInteger dividend1; - if (mu == 1) - { - dividend0 = ECConstants.ONE.subtract(ui[1]); - dividend1 = ECConstants.ONE.subtract(ui[0]); - } - else if (mu == -1) - { - dividend0 = ECConstants.ONE.add(ui[1]); - dividend1 = ECConstants.ONE.add(ui[0]); - } - else - { - throw new IllegalArgumentException("mu must be 1 or -1"); - } - - BigInteger[] si = new BigInteger[2]; - - if (h == 2) - { - si[0] = dividend0.shiftRight(1); - si[1] = dividend1.shiftRight(1).negate(); - } - else if (h == 4) - { - si[0] = dividend0.shiftRight(2); - si[1] = dividend1.shiftRight(2).negate(); - } - else - { - throw new IllegalArgumentException("h (Cofactor) must be 2 or 4"); - } - - return si; - } - - /** - * Partial modular reduction modulo - * m - 1)/(τ - 1). - * @param k The integer to be reduced. - * @param m The bitlength of the underlying finite field. - * @param a The parameter a of the elliptic curve. - * @param s The auxiliary values s0 and - * s1. - * @param mu The parameter μ of the elliptic curve. - * @param c The precision (number of bits of accuracy) of the partial - * modular reduction. - * @return ρ := k partmod (τm - 1)/(τ - 1) - */ - public static ZTauElement partModReduction(BigInteger k, int m, byte a, - BigInteger[] s, byte mu, byte c) - { - // d0 = s[0] + mu*s[1]; mu is either 1 or -1 - BigInteger d0; - if (mu == 1) - { - d0 = s[0].add(s[1]); - } - else - { - d0 = s[0].subtract(s[1]); - } - - BigInteger[] v = getLucas(mu, m, true); - BigInteger vm = v[1]; - - SimpleBigDecimal lambda0 = approximateDivisionByN( - k, s[0], vm, a, m, c); - - SimpleBigDecimal lambda1 = approximateDivisionByN( - k, s[1], vm, a, m, c); - - ZTauElement q = round(lambda0, lambda1, mu); - - // r0 = n - d0*q0 - 2*s1*q1 - BigInteger r0 = k.subtract(d0.multiply(q.u)).subtract( - BigInteger.valueOf(2).multiply(s[1]).multiply(q.v)); - - // r1 = s1*q0 - s0*q1 - BigInteger r1 = s[1].multiply(q.u).subtract(s[0].multiply(q.v)); - - return new ZTauElement(r0, r1); - } - - /** - * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} - * by a BigInteger using the reduced τ-adic - * NAF (RTNAF) method. - * @param p The ECPoint.F2m to multiply. - * @param k The BigInteger by which to multiply p. - * @return k * p - */ - public static ECPoint.F2m multiplyRTnaf(ECPoint.F2m p, BigInteger k) - { - ECCurve.F2m curve = (ECCurve.F2m) p.getCurve(); - int m = curve.getM(); - byte a = (byte) curve.getA().toBigInteger().intValue(); - byte mu = curve.getMu(); - BigInteger[] s = curve.getSi(); - ZTauElement rho = partModReduction(k, m, a, s, mu, (byte)10); - - return multiplyTnaf(p, rho); - } - - /** - * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} - * by an element λ of Z[τ] - * using the τ-adic NAF (TNAF) method. - * @param p The ECPoint.F2m to multiply. - * @param lambda The element λ of - * Z[τ]. - * @return λ * p - */ - public static ECPoint.F2m multiplyTnaf(ECPoint.F2m p, ZTauElement lambda) - { - ECCurve.F2m curve = (ECCurve.F2m)p.getCurve(); - byte mu = curve.getMu(); - byte[] u = tauAdicNaf(mu, lambda); - - ECPoint.F2m q = multiplyFromTnaf(p, u); - - return q; - } - - /** - * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} - * by an element λ of Z[τ] - * using the τ-adic NAF (TNAF) method, given the TNAF - * of λ. - * @param p The ECPoint.F2m to multiply. - * @param u The the TNAF of λ.. - * @return λ * p - */ - public static ECPoint.F2m multiplyFromTnaf(ECPoint.F2m p, byte[] u) - { - ECCurve.F2m curve = (ECCurve.F2m)p.getCurve(); - ECPoint.F2m q = (ECPoint.F2m) curve.getInfinity(); - for (int i = u.length - 1; i >= 0; i--) - { - q = tau(q); - if (u[i] == 1) - { - q = (ECPoint.F2m)q.addSimple(p); - } - else if (u[i] == -1) - { - q = (ECPoint.F2m)q.subtractSimple(p); - } - } - return q; - } - - /** - * Computes the [τ]-adic window NAF of an element - * λ of Z[τ]. - * @param mu The parameter μ of the elliptic curve. - * @param lambda The element λ of - * Z[τ] of which to compute the - * [τ]-adic NAF. - * @param width The window width of the resulting WNAF. - * @param pow2w 2width. - * @param tw The auxiliary value tw. - * @param alpha The αu's for the window width. - * @return The [τ]-adic window NAF of - * λ. - */ - public static byte[] tauAdicWNaf(byte mu, ZTauElement lambda, - byte width, BigInteger pow2w, BigInteger tw, ZTauElement[] alpha) - { - if (!((mu == 1) || (mu == -1))) - { - throw new IllegalArgumentException("mu must be 1 or -1"); - } - - BigInteger norm = norm(mu, lambda); - - // Ceiling of log2 of the norm - int log2Norm = norm.bitLength(); - - // If length(TNAF) > 30, then length(TNAF) < log2Norm + 3.52 - int maxLength = log2Norm > 30 ? log2Norm + 4 + width : 34 + width; - - // The array holding the TNAF - byte[] u = new byte[maxLength]; - - // 2^(width - 1) - BigInteger pow2wMin1 = pow2w.shiftRight(1); - - // Split lambda into two BigIntegers to simplify calculations - BigInteger r0 = lambda.u; - BigInteger r1 = lambda.v; - int i = 0; - - // while lambda <> (0, 0) - while (!((r0.equals(ECConstants.ZERO))&&(r1.equals(ECConstants.ZERO)))) - { - // if r0 is odd - if (r0.testBit(0)) - { - // uUnMod = r0 + r1*tw mod 2^width - BigInteger uUnMod - = r0.add(r1.multiply(tw)).mod(pow2w); - - byte uLocal; - // if uUnMod >= 2^(width - 1) - if (uUnMod.compareTo(pow2wMin1) >= 0) - { - uLocal = (byte) uUnMod.subtract(pow2w).intValue(); - } - else - { - uLocal = (byte) uUnMod.intValue(); - } - // uLocal is now in [-2^(width-1), 2^(width-1)-1] - - u[i] = uLocal; - boolean s = true; - if (uLocal < 0) - { - s = false; - uLocal = (byte)-uLocal; - } - // uLocal is now >= 0 - - if (s) - { - r0 = r0.subtract(alpha[uLocal].u); - r1 = r1.subtract(alpha[uLocal].v); - } - else - { - r0 = r0.add(alpha[uLocal].u); - r1 = r1.add(alpha[uLocal].v); - } - } - else - { - u[i] = 0; - } - - BigInteger t = r0; - - if (mu == 1) - { - r0 = r1.add(r0.shiftRight(1)); - } - else - { - // mu == -1 - r0 = r1.subtract(r0.shiftRight(1)); - } - r1 = t.shiftRight(1).negate(); - i++; - } - return u; - } - - /** - * Does the precomputation for WTNAF multiplication. - * @param p The ECPoint for which to do the precomputation. - * @param a The parameter a of the elliptic curve. - * @return The precomputation array for p. - */ - public static ECPoint.F2m[] getPreComp(ECPoint.F2m p, byte a) - { - ECPoint.F2m[] pu; - pu = new ECPoint.F2m[16]; - pu[1] = p; - byte[][] alphaTnaf; - if (a == 0) - { - alphaTnaf = Tnaf.alpha0Tnaf; - } - else - { - // a == 1 - alphaTnaf = Tnaf.alpha1Tnaf; - } - - int precompLen = alphaTnaf.length; - for (int i = 3; i < precompLen; i = i + 2) - { - pu[i] = Tnaf.multiplyFromTnaf(p, alphaTnaf[i]); - } - - return pu; - } -} diff --git a/src/org/bouncycastle/math/ec/WNafMultiplier.java b/src/org/bouncycastle/math/ec/WNafMultiplier.java deleted file mode 100644 index a5fe84d..0000000 --- a/src/org/bouncycastle/math/ec/WNafMultiplier.java +++ /dev/null @@ -1,240 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -/** - * Class implementing the WNAF (Window Non-Adjacent Form) multiplication - * algorithm. - */ -class WNafMultiplier implements ECMultiplier -{ - /** - * Computes the Window NAF (non-adjacent Form) of an integer. - * @param width The width w of the Window NAF. The width is - * defined as the minimal number w, such that for any - * w consecutive digits in the resulting representation, at - * most one is non-zero. - * @param k The integer of which the Window NAF is computed. - * @return The Window NAF of the given width, such that the following holds: - * k = ∑i=0l-1 ki2i - * , where the ki denote the elements of the - * returned byte[]. - */ - public byte[] windowNaf(byte width, BigInteger k) - { - // The window NAF is at most 1 element longer than the binary - // representation of the integer k. byte can be used instead of short or - // int unless the window width is larger than 8. For larger width use - // short or int. However, a width of more than 8 is not efficient for - // m = log2(q) smaller than 2305 Bits. Note: Values for m larger than - // 1000 Bits are currently not used in practice. - byte[] wnaf = new byte[k.bitLength() + 1]; - - // 2^width as short and BigInteger - short pow2wB = (short)(1 << width); - BigInteger pow2wBI = BigInteger.valueOf(pow2wB); - - int i = 0; - - // The actual length of the WNAF - int length = 0; - - // while k >= 1 - while (k.signum() > 0) - { - // if k is odd - if (k.testBit(0)) - { - // k mod 2^width - BigInteger remainder = k.mod(pow2wBI); - - // if remainder > 2^(width - 1) - 1 - if (remainder.testBit(width - 1)) - { - wnaf[i] = (byte)(remainder.intValue() - pow2wB); - } - else - { - wnaf[i] = (byte)remainder.intValue(); - } - // wnaf[i] is now in [-2^(width-1), 2^(width-1)-1] - - k = k.subtract(BigInteger.valueOf(wnaf[i])); - length = i; - } - else - { - wnaf[i] = 0; - } - - // k = k/2 - k = k.shiftRight(1); - i++; - } - - length++; - - // Reduce the WNAF array to its actual length - byte[] wnafShort = new byte[length]; - System.arraycopy(wnaf, 0, wnafShort, 0, length); - return wnafShort; - } - - /** - * Multiplies this by an integer k using the - * Window NAF method. - * @param k The integer by which this is multiplied. - * @return A new ECPoint which equals this - * multiplied by k. - */ - public ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo) - { - WNafPreCompInfo wnafPreCompInfo; - - if ((preCompInfo != null) && (preCompInfo instanceof WNafPreCompInfo)) - { - wnafPreCompInfo = (WNafPreCompInfo)preCompInfo; - } - else - { - // Ignore empty PreCompInfo or PreCompInfo of incorrect type - wnafPreCompInfo = new WNafPreCompInfo(); - } - - // floor(log2(k)) - int m = k.bitLength(); - - // width of the Window NAF - byte width; - - // Required length of precomputation array - int reqPreCompLen; - - // Determine optimal width and corresponding length of precomputation - // array based on literature values - if (m < 13) - { - width = 2; - reqPreCompLen = 1; - } - else - { - if (m < 41) - { - width = 3; - reqPreCompLen = 2; - } - else - { - if (m < 121) - { - width = 4; - reqPreCompLen = 4; - } - else - { - if (m < 337) - { - width = 5; - reqPreCompLen = 8; - } - else - { - if (m < 897) - { - width = 6; - reqPreCompLen = 16; - } - else - { - if (m < 2305) - { - width = 7; - reqPreCompLen = 32; - } - else - { - width = 8; - reqPreCompLen = 127; - } - } - } - } - } - } - - // The length of the precomputation array - int preCompLen = 1; - - ECPoint[] preComp = wnafPreCompInfo.getPreComp(); - ECPoint twiceP = wnafPreCompInfo.getTwiceP(); - - // Check if the precomputed ECPoints already exist - if (preComp == null) - { - // Precomputation must be performed from scratch, create an empty - // precomputation array of desired length - preComp = new ECPoint[]{ p }; - } - else - { - // Take the already precomputed ECPoints to start with - preCompLen = preComp.length; - } - - if (twiceP == null) - { - // Compute twice(p) - twiceP = p.twice(); - } - - if (preCompLen < reqPreCompLen) - { - // Precomputation array must be made bigger, copy existing preComp - // array into the larger new preComp array - ECPoint[] oldPreComp = preComp; - preComp = new ECPoint[reqPreCompLen]; - System.arraycopy(oldPreComp, 0, preComp, 0, preCompLen); - - for (int i = preCompLen; i < reqPreCompLen; i++) - { - // Compute the new ECPoints for the precomputation array. - // The values 1, 3, 5, ..., 2^(width-1)-1 times p are - // computed - preComp[i] = twiceP.add(preComp[i - 1]); - } - } - - // Compute the Window NAF of the desired width - byte[] wnaf = windowNaf(width, k); - int l = wnaf.length; - - // Apply the Window NAF to p using the precomputed ECPoint values. - ECPoint q = p.getCurve().getInfinity(); - for (int i = l - 1; i >= 0; i--) - { - q = q.twice(); - - if (wnaf[i] != 0) - { - if (wnaf[i] > 0) - { - q = q.add(preComp[(wnaf[i] - 1)/2]); - } - else - { - // wnaf[i] < 0 - q = q.subtract(preComp[(-wnaf[i] - 1)/2]); - } - } - } - - // Set PreCompInfo in ECPoint, such that it is available for next - // multiplication. - wnafPreCompInfo.setPreComp(preComp); - wnafPreCompInfo.setTwiceP(twiceP); - p.setPreCompInfo(wnafPreCompInfo); - return q; - } - -} diff --git a/src/org/bouncycastle/math/ec/WNafPreCompInfo.java b/src/org/bouncycastle/math/ec/WNafPreCompInfo.java deleted file mode 100644 index fc0d5fe..0000000 --- a/src/org/bouncycastle/math/ec/WNafPreCompInfo.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.bouncycastle.math.ec; - -/** - * Class holding precomputation data for the WNAF (Window Non-Adjacent Form) - * algorithm. - */ -class WNafPreCompInfo implements PreCompInfo -{ - /** - * Array holding the precomputed ECPoints used for the Window - * NAF multiplication in - * {@link org.bouncycastle.math.ec.multiplier.WNafMultiplier.multiply() - * WNafMultiplier.multiply()}. - */ - private ECPoint[] preComp = null; - - /** - * Holds an ECPoint representing twice(this). Used for the - * Window NAF multiplication in - * {@link org.bouncycastle.math.ec.multiplier.WNafMultiplier.multiply() - * WNafMultiplier.multiply()}. - */ - private ECPoint twiceP = null; - - protected ECPoint[] getPreComp() - { - return preComp; - } - - protected void setPreComp(ECPoint[] preComp) - { - this.preComp = preComp; - } - - protected ECPoint getTwiceP() - { - return twiceP; - } - - protected void setTwiceP(ECPoint twiceThis) - { - this.twiceP = twiceThis; - } -} diff --git a/src/org/bouncycastle/math/ec/WTauNafMultiplier.java b/src/org/bouncycastle/math/ec/WTauNafMultiplier.java deleted file mode 100644 index ac82f62..0000000 --- a/src/org/bouncycastle/math/ec/WTauNafMultiplier.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -/** - * Class implementing the WTNAF (Window - * τ-adic Non-Adjacent Form) algorithm. - */ -class WTauNafMultiplier implements ECMultiplier -{ - /** - * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} - * by k using the reduced τ-adic NAF (RTNAF) - * method. - * @param p The ECPoint.F2m to multiply. - * @param k The integer by which to multiply k. - * @return p multiplied by k. - */ - public ECPoint multiply(ECPoint point, BigInteger k, PreCompInfo preCompInfo) - { - if (!(point instanceof ECPoint.F2m)) - { - throw new IllegalArgumentException("Only ECPoint.F2m can be " + - "used in WTauNafMultiplier"); - } - - ECPoint.F2m p = (ECPoint.F2m)point; - - ECCurve.F2m curve = (ECCurve.F2m) p.getCurve(); - int m = curve.getM(); - byte a = curve.getA().toBigInteger().byteValue(); - byte mu = curve.getMu(); - BigInteger[] s = curve.getSi(); - - ZTauElement rho = Tnaf.partModReduction(k, m, a, s, mu, (byte)10); - - return multiplyWTnaf(p, rho, preCompInfo, a, mu); - } - - /** - * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} - * by an element λ of Z[τ] using - * the τ-adic NAF (TNAF) method. - * @param p The ECPoint.F2m to multiply. - * @param lambda The element λ of - * Z[τ] of which to compute the - * [τ]-adic NAF. - * @return p multiplied by λ. - */ - private ECPoint.F2m multiplyWTnaf(ECPoint.F2m p, ZTauElement lambda, - PreCompInfo preCompInfo, byte a, byte mu) - { - ZTauElement[] alpha; - if (a == 0) - { - alpha = Tnaf.alpha0; - } - else - { - // a == 1 - alpha = Tnaf.alpha1; - } - - BigInteger tw = Tnaf.getTw(mu, Tnaf.WIDTH); - - byte[]u = Tnaf.tauAdicWNaf(mu, lambda, Tnaf.WIDTH, - BigInteger.valueOf(Tnaf.POW_2_WIDTH), tw, alpha); - - return multiplyFromWTnaf(p, u, preCompInfo); - } - - /** - * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} - * by an element λ of Z[τ] - * using the window τ-adic NAF (TNAF) method, given the - * WTNAF of λ. - * @param p The ECPoint.F2m to multiply. - * @param u The the WTNAF of λ.. - * @return λ * p - */ - private static ECPoint.F2m multiplyFromWTnaf(ECPoint.F2m p, byte[] u, - PreCompInfo preCompInfo) - { - ECCurve.F2m curve = (ECCurve.F2m)p.getCurve(); - byte a = curve.getA().toBigInteger().byteValue(); - - ECPoint.F2m[] pu; - if ((preCompInfo == null) || !(preCompInfo instanceof WTauNafPreCompInfo)) - { - pu = Tnaf.getPreComp(p, a); - p.setPreCompInfo(new WTauNafPreCompInfo(pu)); - } - else - { - pu = ((WTauNafPreCompInfo)preCompInfo).getPreComp(); - } - - // q = infinity - ECPoint.F2m q = (ECPoint.F2m) p.getCurve().getInfinity(); - for (int i = u.length - 1; i >= 0; i--) - { - q = Tnaf.tau(q); - if (u[i] != 0) - { - if (u[i] > 0) - { - q = q.addSimple(pu[u[i]]); - } - else - { - // u[i] < 0 - q = q.subtractSimple(pu[-u[i]]); - } - } - } - - return q; - } -} diff --git a/src/org/bouncycastle/math/ec/WTauNafPreCompInfo.java b/src/org/bouncycastle/math/ec/WTauNafPreCompInfo.java deleted file mode 100644 index d7c583f..0000000 --- a/src/org/bouncycastle/math/ec/WTauNafPreCompInfo.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.bouncycastle.math.ec; - -/** - * Class holding precomputation data for the WTNAF (Window - * τ-adic Non-Adjacent Form) algorithm. - */ -class WTauNafPreCompInfo implements PreCompInfo -{ - /** - * Array holding the precomputed ECPoint.F2ms used for the - * WTNAF multiplication in - * {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() - * WTauNafMultiplier.multiply()}. - */ - private ECPoint.F2m[] preComp = null; - - /** - * Constructor for WTauNafPreCompInfo - * @param preComp Array holding the precomputed ECPoint.F2ms - * used for the WTNAF multiplication in - * {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() - * WTauNafMultiplier.multiply()}. - */ - WTauNafPreCompInfo(ECPoint.F2m[] preComp) - { - this.preComp = preComp; - } - - /** - * @return the array holding the precomputed ECPoint.F2ms - * used for the WTNAF multiplication in - * {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() - * WTauNafMultiplier.multiply()}. - */ - protected ECPoint.F2m[] getPreComp() - { - return preComp; - } -} diff --git a/src/org/bouncycastle/math/ec/ZTauElement.java b/src/org/bouncycastle/math/ec/ZTauElement.java deleted file mode 100644 index d0cfc80..0000000 --- a/src/org/bouncycastle/math/ec/ZTauElement.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.bouncycastle.math.ec; - -import javabc.BigInteger; - -/** - * Class representing an element of Z[τ]. Let - * λ be an element of Z[τ]. Then - * λ is given as λ = u + vτ. The - * components u and v may be used directly, there - * are no accessor methods. - * Immutable class. - */ -class ZTauElement -{ - /** - * The "real" part of λ. - */ - public final BigInteger u; - - /** - * The "τ-adic" part of λ. - */ - public final BigInteger v; - - /** - * Constructor for an element λ of - * Z[τ]. - * @param u The "real" part of λ. - * @param v The "τ-adic" part of - * λ. - */ - public ZTauElement(BigInteger u, BigInteger v) - { - this.u = u; - this.v = v; - } -} diff --git a/src/org/bouncycastle/math/ec/package.html b/src/org/bouncycastle/math/ec/package.html deleted file mode 100644 index a02605b..0000000 --- a/src/org/bouncycastle/math/ec/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Math support for Elliptic Curve. - - diff --git a/src/org/bouncycastle/oiw/ElGamalParameter.java b/src/org/bouncycastle/oiw/ElGamalParameter.java deleted file mode 100644 index ca5ca5a..0000000 --- a/src/org/bouncycastle/oiw/ElGamalParameter.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.bouncycastle.asn1.oiw; - -import javabc.BigInteger; -import java.util.Enumeration; - -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1Integer; -import org.bouncycastle.asn1.ASN1Object; -import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.DERSequence; - -public class ElGamalParameter - extends ASN1Object -{ - ASN1Integer p, g; - - public ElGamalParameter( - BigInteger p, - BigInteger g) - { - this.p = new ASN1Integer(p); - this.g = new ASN1Integer(g); - } - - public ElGamalParameter( - ASN1Sequence seq) - { - Enumeration e = seq.getObjects(); - - p = (ASN1Integer)e.nextElement(); - g = (ASN1Integer)e.nextElement(); - } - - public BigInteger getP() - { - return p.getPositiveValue(); - } - - public BigInteger getG() - { - return g.getPositiveValue(); - } - - public ASN1Primitive toASN1Primitive() - { - ASN1EncodableVector v = new ASN1EncodableVector(); - - v.add(p); - v.add(g); - - return new DERSequence(v); - } -} diff --git a/src/org/bouncycastle/oiw/OIWObjectIdentifiers.java b/src/org/bouncycastle/oiw/OIWObjectIdentifiers.java deleted file mode 100644 index c8ce26b..0000000 --- a/src/org/bouncycastle/oiw/OIWObjectIdentifiers.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bouncycastle.asn1.oiw; - -import org.bouncycastle.asn1.ASN1ObjectIdentifier; - -public interface OIWObjectIdentifiers -{ - // id-SHA1 OBJECT IDENTIFIER ::= - // {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } // - static final ASN1ObjectIdentifier md4WithRSA = new ASN1ObjectIdentifier("1.3.14.3.2.2"); - static final ASN1ObjectIdentifier md5WithRSA = new ASN1ObjectIdentifier("1.3.14.3.2.3"); - static final ASN1ObjectIdentifier md4WithRSAEncryption = new ASN1ObjectIdentifier("1.3.14.3.2.4"); - - static final ASN1ObjectIdentifier desECB = new ASN1ObjectIdentifier("1.3.14.3.2.6"); - static final ASN1ObjectIdentifier desCBC = new ASN1ObjectIdentifier("1.3.14.3.2.7"); - static final ASN1ObjectIdentifier desOFB = new ASN1ObjectIdentifier("1.3.14.3.2.8"); - static final ASN1ObjectIdentifier desCFB = new ASN1ObjectIdentifier("1.3.14.3.2.9"); - - static final ASN1ObjectIdentifier desEDE = new ASN1ObjectIdentifier("1.3.14.3.2.17"); - - static final ASN1ObjectIdentifier idSHA1 = new ASN1ObjectIdentifier("1.3.14.3.2.26"); - - static final ASN1ObjectIdentifier dsaWithSHA1 = new ASN1ObjectIdentifier("1.3.14.3.2.27"); - - static final ASN1ObjectIdentifier sha1WithRSA = new ASN1ObjectIdentifier("1.3.14.3.2.29"); - - // ElGamal Algorithm OBJECT IDENTIFIER ::= - // {iso(1) identified-organization(3) oiw(14) dirservsig(7) algorithm(2) encryption(1) 1 } - // - static final ASN1ObjectIdentifier elGamalAlgorithm = new ASN1ObjectIdentifier("1.3.14.7.2.1.1"); - -} diff --git a/src/org/bouncycastle/oiw/package.html b/src/org/bouncycastle/oiw/package.html deleted file mode 100644 index 44eb2fe..0000000 --- a/src/org/bouncycastle/oiw/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Objects and OID for the support of ISO OIW. - - diff --git a/src/org/bouncycastle/util/Arrays.java b/src/org/bouncycastle/util/Arrays.java deleted file mode 100644 index a9b070b..0000000 --- a/src/org/bouncycastle/util/Arrays.java +++ /dev/null @@ -1,532 +0,0 @@ -package org.bouncycastle.util; - -import javabc.BigInteger; - -/** - * General array utilities. - */ -public final class Arrays -{ - private Arrays() - { - // static class, hide constructor - } - - public static boolean areEqual( - boolean[] a, - boolean[] b) - { - if (a == b) - { - return true; - } - - if (a == null || b == null) - { - return false; - } - - if (a.length != b.length) - { - return false; - } - - for (int i = 0; i != a.length; i++) - { - if (a[i] != b[i]) - { - return false; - } - } - - return true; - } - - public static boolean areEqual( - char[] a, - char[] b) - { - if (a == b) - { - return true; - } - - if (a == null || b == null) - { - return false; - } - - if (a.length != b.length) - { - return false; - } - - for (int i = 0; i != a.length; i++) - { - if (a[i] != b[i]) - { - return false; - } - } - - return true; - } - - public static boolean areEqual( - byte[] a, - byte[] b) - { - if (a == b) - { - return true; - } - - if (a == null || b == null) - { - return false; - } - - if (a.length != b.length) - { - return false; - } - - for (int i = 0; i != a.length; i++) - { - if (a[i] != b[i]) - { - return false; - } - } - - return true; - } - - /** - * A constant time equals comparison - does not terminate early if - * test will fail. - * - * @param a first array - * @param b second array - * @return true if arrays equal, false otherwise. - */ - public static boolean constantTimeAreEqual( - byte[] a, - byte[] b) - { - if (a == b) - { - return true; - } - - if (a == null || b == null) - { - return false; - } - - if (a.length != b.length) - { - return false; - } - - int nonEqual = 0; - - for (int i = 0; i != a.length; i++) - { - nonEqual |= (a[i] ^ b[i]); - } - - return nonEqual == 0; - } - - public static boolean areEqual( - int[] a, - int[] b) - { - if (a == b) - { - return true; - } - - if (a == null || b == null) - { - return false; - } - - if (a.length != b.length) - { - return false; - } - - for (int i = 0; i != a.length; i++) - { - if (a[i] != b[i]) - { - return false; - } - } - - return true; - } - - public static boolean areEqual( - long[] a, - long[] b) - { - if (a == b) - { - return true; - } - - if (a == null || b == null) - { - return false; - } - - if (a.length != b.length) - { - return false; - } - - for (int i = 0; i != a.length; i++) - { - if (a[i] != b[i]) - { - return false; - } - } - - return true; - } - - public static boolean areEqual( - BigInteger[] a, - BigInteger[] b) - { - if (a == b) - { - return true; - } - - if (a == null || b == null) - { - return false; - } - - if (a.length != b.length) - { - return false; - } - - for (int i = 0; i != a.length; i++) - { - if (!a[i].equals(b[i])) - { - return false; - } - } - - return true; - } - - public static void fill( - byte[] array, - byte value) - { - for (int i = 0; i < array.length; i++) - { - array[i] = value; - } - } - - public static void fill( - long[] array, - long value) - { - for (int i = 0; i < array.length; i++) - { - array[i] = value; - } - } - - public static void fill( - short[] array, - short value) - { - for (int i = 0; i < array.length; i++) - { - array[i] = value; - } - } - - public static void fill( - int[] array, - int value) - { - for (int i = 0; i < array.length; i++) - { - array[i] = value; - } - } - - public static int hashCode(byte[] data) - { - if (data == null) - { - return 0; - } - - int i = data.length; - int hc = i + 1; - - while (--i >= 0) - { - hc *= 257; - hc ^= data[i]; - } - - return hc; - } - - public static int hashCode(char[] data) - { - if (data == null) - { - return 0; - } - - int i = data.length; - int hc = i + 1; - - while (--i >= 0) - { - hc *= 257; - hc ^= data[i]; - } - - return hc; - } - - public static int hashCode(int[] data) - { - if (data == null) - { - return 0; - } - - int i = data.length; - int hc = i + 1; - - while (--i >= 0) - { - hc *= 257; - hc ^= data[i]; - } - - return hc; - } - - public static int hashCode(BigInteger[] data) - { - if (data == null) - { - return 0; - } - - int i = data.length; - int hc = i + 1; - - while (--i >= 0) - { - hc *= 257; - hc ^= data[i].hashCode(); - } - - return hc; - } - - public static byte[] clone(byte[] data) - { - if (data == null) - { - return null; - } - byte[] copy = new byte[data.length]; - - System.arraycopy(data, 0, copy, 0, data.length); - - return copy; - } - - public static int[] clone(int[] data) - { - if (data == null) - { - return null; - } - int[] copy = new int[data.length]; - - System.arraycopy(data, 0, copy, 0, data.length); - - return copy; - } - - public static BigInteger[] clone(BigInteger[] data) - { - if (data == null) - { - return null; - } - BigInteger[] copy = new BigInteger[data.length]; - - System.arraycopy(data, 0, copy, 0, data.length); - - return copy; - } - - public static byte[] copyOf(byte[] data, int newLength) - { - byte[] tmp = new byte[newLength]; - - if (newLength < data.length) - { - System.arraycopy(data, 0, tmp, 0, newLength); - } - else - { - System.arraycopy(data, 0, tmp, 0, data.length); - } - - return tmp; - } - - public static int[] copyOf(int[] data, int newLength) - { - int[] tmp = new int[newLength]; - - if (newLength < data.length) - { - System.arraycopy(data, 0, tmp, 0, newLength); - } - else - { - System.arraycopy(data, 0, tmp, 0, data.length); - } - - return tmp; - } - - public static long[] copyOf(long[] data, int newLength) - { - long[] tmp = new long[newLength]; - - if (newLength < data.length) - { - System.arraycopy(data, 0, tmp, 0, newLength); - } - else - { - System.arraycopy(data, 0, tmp, 0, data.length); - } - - return tmp; - } - - public static BigInteger[] copyOf(BigInteger[] data, int newLength) - { - BigInteger[] tmp = new BigInteger[newLength]; - - if (newLength < data.length) - { - System.arraycopy(data, 0, tmp, 0, newLength); - } - else - { - System.arraycopy(data, 0, tmp, 0, data.length); - } - - return tmp; - } - - public static byte[] copyOfRange(byte[] data, int from, int to) - { - int newLength = getLength(from, to); - - byte[] tmp = new byte[newLength]; - - if (data.length - from < newLength) - { - System.arraycopy(data, from, tmp, 0, data.length - from); - } - else - { - System.arraycopy(data, from, tmp, 0, newLength); - } - - return tmp; - } - - public static int[] copyOfRange(int[] data, int from, int to) - { - int newLength = getLength(from, to); - - int[] tmp = new int[newLength]; - - if (data.length - from < newLength) - { - System.arraycopy(data, from, tmp, 0, data.length - from); - } - else - { - System.arraycopy(data, from, tmp, 0, newLength); - } - - return tmp; - } - - public static long[] copyOfRange(long[] data, int from, int to) - { - int newLength = getLength(from, to); - - long[] tmp = new long[newLength]; - - if (data.length - from < newLength) - { - System.arraycopy(data, from, tmp, 0, data.length - from); - } - else - { - System.arraycopy(data, from, tmp, 0, newLength); - } - - return tmp; - } - - public static BigInteger[] copyOfRange(BigInteger[] data, int from, int to) - { - int newLength = getLength(from, to); - - BigInteger[] tmp = new BigInteger[newLength]; - - if (data.length - from < newLength) - { - System.arraycopy(data, from, tmp, 0, data.length - from); - } - else - { - System.arraycopy(data, from, tmp, 0, newLength); - } - - return tmp; - } - - private static int getLength(int from, int to) - { - int newLength = to - from; - if (newLength < 0) - { - throw new IllegalArgumentException(from + " > " + to); - } - return newLength; - } -} diff --git a/src/org/bouncycastle/util/BigIntegers.java b/src/org/bouncycastle/util/BigIntegers.java deleted file mode 100644 index 87bd1e1..0000000 --- a/src/org/bouncycastle/util/BigIntegers.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.bouncycastle.util; - -import javabc.BigInteger; -import javabc.SecureRandom; - -/** - * BigInteger utilities. - */ -public final class BigIntegers -{ - private static final int MAX_ITERATIONS = 1000; - private static final BigInteger ZERO = BigInteger.valueOf(0); - - /** - * Return the passed in value as an unsigned byte array. - * - * @param value value to be converted. - * @return a byte array without a leading zero byte if present in the signed encoding. - */ - public static byte[] asUnsignedByteArray( - BigInteger value) - { - byte[] bytes = value.toByteArray(); - - if (bytes[0] == 0) - { - byte[] tmp = new byte[bytes.length - 1]; - - System.arraycopy(bytes, 1, tmp, 0, tmp.length); - - return tmp; - } - - return bytes; - } - - /** - * Return a random BigInteger not less than 'min' and not greater than 'max' - * - * @param min the least value that may be generated - * @param max the greatest value that may be generated - * @param random the source of randomness - * @return a random BigInteger value in the range [min,max] - */ - public static BigInteger createRandomInRange( - BigInteger min, - BigInteger max, - SecureRandom random) - { - int cmp = min.compareTo(max); - if (cmp >= 0) - { - if (cmp > 0) - { - throw new IllegalArgumentException("'min' may not be greater than 'max'"); - } - - return min; - } - - if (min.bitLength() > max.bitLength() / 2) - { - return createRandomInRange(ZERO, max.subtract(min), random).add(min); - } - - for (int i = 0; i < MAX_ITERATIONS; ++i) - { - BigInteger x = new BigInteger(max.bitLength(), random); - if (x.compareTo(min) >= 0 && x.compareTo(max) <= 0) - { - return x; - } - } - - // fall back to a faster (restricted) method - return new BigInteger(max.subtract(min).bitLength() - 1, random).add(min); - } -} diff --git a/src/org/bouncycastle/util/CollectionStore.java b/src/org/bouncycastle/util/CollectionStore.java deleted file mode 100644 index 91aba14..0000000 --- a/src/org/bouncycastle/util/CollectionStore.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.bouncycastle.util; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -/** - * A simple collection backed store. - */ -public class CollectionStore - implements Store -{ - private Collection _local; - - /** - * Basic constructor. - * - * @param collection - initial contents for the store, this is copied. - */ - public CollectionStore( - Collection collection) - { - _local = new ArrayList(collection); - } - - /** - * Return the matches in the collection for the passed in selector. - * - * @param selector the selector to match against. - * @return a possibly empty collection of matching objects. - */ - public Collection getMatches(Selector selector) - { - if (selector == null) - { - return new ArrayList(_local); - } - else - { - List col = new ArrayList(); - Iterator iter = _local.iterator(); - - while (iter.hasNext()) - { - Object obj = iter.next(); - - if (selector.match(obj)) - { - col.add(obj); - } - } - - return col; - } - } -} diff --git a/src/org/bouncycastle/util/IPAddress.java b/src/org/bouncycastle/util/IPAddress.java deleted file mode 100644 index 9f5d1cb..0000000 --- a/src/org/bouncycastle/util/IPAddress.java +++ /dev/null @@ -1,188 +0,0 @@ -package org.bouncycastle.util; - -public class IPAddress -{ - /** - * Validate the given IPv4 or IPv6 address. - * - * @param address the IP address as a String. - * - * @return true if a valid address, false otherwise - */ - public static boolean isValid( - String address) - { - return isValidIPv4(address) || isValidIPv6(address); - } - - /** - * Validate the given IPv4 or IPv6 address and netmask. - * - * @param address the IP address as a String. - * - * @return true if a valid address with netmask, false otherwise - */ - public static boolean isValidWithNetMask( - String address) - { - return isValidIPv4WithNetmask(address) || isValidIPv6WithNetmask(address); - } - - /** - * Validate the given IPv4 address. - * - * @param address the IP address as a String. - * - * @return true if a valid IPv4 address, false otherwise - */ - public static boolean isValidIPv4( - String address) - { - if (address.length() == 0) - { - return false; - } - - int octet; - int octets = 0; - - String temp = address+"."; - - int pos; - int start = 0; - while (start < temp.length() - && (pos = temp.indexOf('.', start)) > start) - { - if (octets == 4) - { - return false; - } - try - { - octet = Integer.parseInt(temp.substring(start, pos)); - } - catch (NumberFormatException ex) - { - return false; - } - if (octet < 0 || octet > 255) - { - return false; - } - start = pos + 1; - octets++; - } - - return octets == 4; - } - - public static boolean isValidIPv4WithNetmask( - String address) - { - int index = address.indexOf("/"); - String mask = address.substring(index + 1); - - return (index > 0) && isValidIPv4(address.substring(0, index)) - && (isValidIPv4(mask) || isMaskValue(mask, 32)); - } - - public static boolean isValidIPv6WithNetmask( - String address) - { - int index = address.indexOf("/"); - String mask = address.substring(index + 1); - - return (index > 0) && (isValidIPv6(address.substring(0, index)) - && (isValidIPv6(mask) || isMaskValue(mask, 128))); - } - - private static boolean isMaskValue(String component, int size) - { - try - { - int value = Integer.parseInt(component); - - return value >= 0 && value <= size; - } - catch (NumberFormatException e) - { - return false; - } - } - - /** - * Validate the given IPv6 address. - * - * @param address the IP address as a String. - * - * @return true if a valid IPv4 address, false otherwise - */ - public static boolean isValidIPv6( - String address) - { - if (address.length() == 0) - { - return false; - } - - int octet; - int octets = 0; - - String temp = address + ":"; - boolean doubleColonFound = false; - int pos; - int start = 0; - while (start < temp.length() - && (pos = temp.indexOf(':', start)) >= start) - { - if (octets == 8) - { - return false; - } - - if (start != pos) - { - String value = temp.substring(start, pos); - - if (pos == (temp.length() - 1) && value.indexOf('.') > 0) - { - if (!isValidIPv4(value)) - { - return false; - } - - octets++; // add an extra one as address covers 2 words. - } - else - { - try - { - octet = Integer.parseInt(temp.substring(start, pos), 16); - } - catch (NumberFormatException ex) - { - return false; - } - if (octet < 0 || octet > 0xffff) - { - return false; - } - } - } - else - { - if (pos != 1 && pos != temp.length() - 1 && doubleColonFound) - { - return false; - } - doubleColonFound = true; - } - start = pos + 1; - octets++; - } - - return octets == 8 || doubleColonFound; - } -} - - diff --git a/src/org/bouncycastle/util/Selector.java b/src/org/bouncycastle/util/Selector.java deleted file mode 100644 index 79a1dd8..0000000 --- a/src/org/bouncycastle/util/Selector.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.bouncycastle.util; - -public interface Selector -{ - boolean match(Object obj); - - Object clone(); -} diff --git a/src/org/bouncycastle/util/Store.java b/src/org/bouncycastle/util/Store.java deleted file mode 100644 index b994c92..0000000 --- a/src/org/bouncycastle/util/Store.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.bouncycastle.util; - -import java.util.Collection; - -public interface Store -{ - Collection getMatches(Selector selector) - throws StoreException; -} diff --git a/src/org/bouncycastle/util/StoreException.java b/src/org/bouncycastle/util/StoreException.java deleted file mode 100644 index 5ea09e8..0000000 --- a/src/org/bouncycastle/util/StoreException.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.bouncycastle.util; - -public class StoreException - extends RuntimeException -{ - private Throwable _e; - - public StoreException(String s, Throwable e) - { - super(s); - _e = e; - } - - public Throwable getCause() - { - return _e; - } -} diff --git a/src/org/bouncycastle/util/Strings.java b/src/org/bouncycastle/util/Strings.java deleted file mode 100644 index 2111225..0000000 --- a/src/org/bouncycastle/util/Strings.java +++ /dev/null @@ -1,304 +0,0 @@ -package org.bouncycastle.util; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Vector; - - -public final class Strings -{ - public static String fromUTF8ByteArray(byte[] bytes) - { - int i = 0; - int length = 0; - - while (i < bytes.length) - { - length++; - if ((bytes[i] & 0xf0) == 0xf0) - { - // surrogate pair - length++; - i += 4; - } - else if ((bytes[i] & 0xe0) == 0xe0) - { - i += 3; - } - else if ((bytes[i] & 0xc0) == 0xc0) - { - i += 2; - } - else - { - i += 1; - } - } - - char[] cs = new char[length]; - - i = 0; - length = 0; - - while (i < bytes.length) - { - char ch; - - if ((bytes[i] & 0xf0) == 0xf0) - { - int codePoint = ((bytes[i] & 0x03) << 18) | ((bytes[i+1] & 0x3F) << 12) | ((bytes[i+2] & 0x3F) << 6) | (bytes[i+3] & 0x3F); - int U = codePoint - 0x10000; - char W1 = (char)(0xD800 | (U >> 10)); - char W2 = (char)(0xDC00 | (U & 0x3FF)); - cs[length++] = W1; - ch = W2; - i += 4; - } - else if ((bytes[i] & 0xe0) == 0xe0) - { - ch = (char)(((bytes[i] & 0x0f) << 12) - | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)); - i += 3; - } - else if ((bytes[i] & 0xd0) == 0xd0) - { - ch = (char)(((bytes[i] & 0x1f) << 6) | (bytes[i + 1] & 0x3f)); - i += 2; - } - else if ((bytes[i] & 0xc0) == 0xc0) - { - ch = (char)(((bytes[i] & 0x1f) << 6) | (bytes[i + 1] & 0x3f)); - i += 2; - } - else - { - ch = (char)(bytes[i] & 0xff); - i += 1; - } - - cs[length++] = ch; - } - - return new String(cs); - } - - public static byte[] toUTF8ByteArray(String string) - { - return toUTF8ByteArray(string.toCharArray()); - } - - public static byte[] toUTF8ByteArray(char[] string) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - try - { - toUTF8ByteArray(string, bOut); - } - catch (IOException e) - { - throw new IllegalStateException("cannot encode string to byte array!"); - } - - return bOut.toByteArray(); - } - - public static void toUTF8ByteArray(char[] string, OutputStream sOut) - throws IOException - { - char[] c = string; - int i = 0; - - while (i < c.length) - { - char ch = c[i]; - - if (ch < 0x0080) - { - sOut.write(ch); - } - else if (ch < 0x0800) - { - sOut.write(0xc0 | (ch >> 6)); - sOut.write(0x80 | (ch & 0x3f)); - } - // surrogate pair - else if (ch >= 0xD800 && ch <= 0xDFFF) - { - // in error - can only happen, if the Java String class has a - // bug. - if (i + 1 >= c.length) - { - throw new IllegalStateException("invalid UTF-16 codepoint"); - } - char W1 = ch; - ch = c[++i]; - char W2 = ch; - // in error - can only happen, if the Java String class has a - // bug. - if (W1 > 0xDBFF) - { - throw new IllegalStateException("invalid UTF-16 codepoint"); - } - int codePoint = (((W1 & 0x03FF) << 10) | (W2 & 0x03FF)) + 0x10000; - sOut.write(0xf0 | (codePoint >> 18)); - sOut.write(0x80 | ((codePoint >> 12) & 0x3F)); - sOut.write(0x80 | ((codePoint >> 6) & 0x3F)); - sOut.write(0x80 | (codePoint & 0x3F)); - } - else - { - sOut.write(0xe0 | (ch >> 12)); - sOut.write(0x80 | ((ch >> 6) & 0x3F)); - sOut.write(0x80 | (ch & 0x3F)); - } - - i++; - } - } - - /** - * A locale independent version of toUpperCase. - * - * @param string input to be converted - * @return a US Ascii uppercase version - */ - public static String toUpperCase(String string) - { - boolean changed = false; - char[] chars = string.toCharArray(); - - for (int i = 0; i != chars.length; i++) - { - char ch = chars[i]; - if ('a' <= ch && 'z' >= ch) - { - changed = true; - chars[i] = (char)(ch - 'a' + 'A'); - } - } - - if (changed) - { - return new String(chars); - } - - return string; - } - - /** - * A locale independent version of toLowerCase. - * - * @param string input to be converted - * @return a US ASCII lowercase version - */ - public static String toLowerCase(String string) - { - boolean changed = false; - char[] chars = string.toCharArray(); - - for (int i = 0; i != chars.length; i++) - { - char ch = chars[i]; - if ('A' <= ch && 'Z' >= ch) - { - changed = true; - chars[i] = (char)(ch - 'A' + 'a'); - } - } - - if (changed) - { - return new String(chars); - } - - return string; - } - - public static byte[] toByteArray(char[] chars) - { - byte[] bytes = new byte[chars.length]; - - for (int i = 0; i != bytes.length; i++) - { - bytes[i] = (byte)chars[i]; - } - - return bytes; - } - - public static byte[] toByteArray(String string) - { - byte[] bytes = new byte[string.length()]; - - for (int i = 0; i != bytes.length; i++) - { - char ch = string.charAt(i); - - bytes[i] = (byte)ch; - } - - return bytes; - } - - /** - * Convert an array of 8 bit characters into a string. - * - * @param bytes 8 bit characters. - * @return resulting String. - */ - public static String fromByteArray(byte[] bytes) - { - return new String(asCharArray(bytes)); - } - - /** - * Do a simple conversion of an array of 8 bit characters into a string. - * - * @param bytes 8 bit characters. - * @return resulting String. - */ - public static char[] asCharArray(byte[] bytes) - { - char[] chars = new char[bytes.length]; - - for (int i = 0; i != chars.length; i++) - { - chars[i] = (char)(bytes[i] & 0xff); - } - - return chars; - } - - public static String[] split(String input, char delimiter) - { - Vector v = new Vector(); - boolean moreTokens = true; - String subString; - - while (moreTokens) - { - int tokenLocation = input.indexOf(delimiter); - if (tokenLocation > 0) - { - subString = input.substring(0, tokenLocation); - v.addElement(subString); - input = input.substring(tokenLocation + 1); - } - else - { - moreTokens = false; - v.addElement(input); - } - } - - String[] res = new String[v.size()]; - - for (int i = 0; i != res.length; i++) - { - res[i] = (String)v.elementAt(i); - } - return res; - } -} diff --git a/src/org/bouncycastle/util/encoders/Base64.java b/src/org/bouncycastle/util/encoders/Base64.java deleted file mode 100644 index 93fed64..0000000 --- a/src/org/bouncycastle/util/encoders/Base64.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.bouncycastle.util.encoders; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -public class Base64 -{ - private static final Encoder encoder = new Base64Encoder(); - - /** - * encode the input data producing a base 64 encoded byte array. - * - * @return a byte array containing the base 64 encoded data. - */ - public static byte[] encode( - byte[] data) - { - int len = (data.length + 2) / 3 * 4; - ByteArrayOutputStream bOut = new ByteArrayOutputStream(len); - - try - { - encoder.encode(data, 0, data.length, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception encoding base64 string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * Encode the byte data to base 64 writing it to the given output stream. - * - * @return the number of bytes produced. - */ - public static int encode( - byte[] data, - OutputStream out) - throws IOException - { - return encoder.encode(data, 0, data.length, out); - } - - /** - * Encode the byte data to base 64 writing it to the given output stream. - * - * @return the number of bytes produced. - */ - public static int encode( - byte[] data, - int off, - int length, - OutputStream out) - throws IOException - { - return encoder.encode(data, off, length, out); - } - - /** - * decode the base 64 encoded input data. It is assumed the input data is valid. - * - * @return a byte array representing the decoded data. - */ - public static byte[] decode( - byte[] data) - { - int len = data.length / 4 * 3; - ByteArrayOutputStream bOut = new ByteArrayOutputStream(len); - - try - { - encoder.decode(data, 0, data.length, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception decoding base64 string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * decode the base 64 encoded String data - whitespace will be ignored. - * - * @return a byte array representing the decoded data. - */ - public static byte[] decode( - String data) - { - int len = data.length() / 4 * 3; - ByteArrayOutputStream bOut = new ByteArrayOutputStream(len); - - try - { - encoder.decode(data, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception decoding base64 string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * decode the base 64 encoded String data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public static int decode( - String data, - OutputStream out) - throws IOException - { - return encoder.decode(data, out); - } -} diff --git a/src/org/bouncycastle/util/encoders/Base64Encoder.java b/src/org/bouncycastle/util/encoders/Base64Encoder.java deleted file mode 100644 index 3edc068..0000000 --- a/src/org/bouncycastle/util/encoders/Base64Encoder.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.bouncycastle.util.encoders; - -import java.io.IOException; -import java.io.OutputStream; - -public class Base64Encoder - implements Encoder -{ - protected final byte[] encodingTable = - { - (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', - (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', - (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', - (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', - (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', - (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', - (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', - (byte)'v', - (byte)'w', (byte)'x', (byte)'y', (byte)'z', - (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', - (byte)'7', (byte)'8', (byte)'9', - (byte)'+', (byte)'/' - }; - - protected byte padding = (byte)'='; - - /* - * set up the decoding table. - */ - protected final byte[] decodingTable = new byte[128]; - - protected void initialiseDecodingTable() - { - for (int i = 0; i < encodingTable.length; i++) - { - decodingTable[encodingTable[i]] = (byte)i; - } - } - - public Base64Encoder() - { - initialiseDecodingTable(); - } - - /** - * encode the input data producing a base 64 output stream. - * - * @return the number of bytes produced. - */ - public int encode( - byte[] data, - int off, - int length, - OutputStream out) - throws IOException - { - int modulus = length % 3; - int dataLength = (length - modulus); - int a1, a2, a3; - - for (int i = off; i < off + dataLength; i += 3) - { - a1 = data[i] & 0xff; - a2 = data[i + 1] & 0xff; - a3 = data[i + 2] & 0xff; - - out.write(encodingTable[(a1 >>> 2) & 0x3f]); - out.write(encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f]); - out.write(encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f]); - out.write(encodingTable[a3 & 0x3f]); - } - - /* - * process the tail end. - */ - int b1, b2, b3; - int d1, d2; - - switch (modulus) - { - case 0: /* nothing left to do */ - break; - case 1: - d1 = data[off + dataLength] & 0xff; - b1 = (d1 >>> 2) & 0x3f; - b2 = (d1 << 4) & 0x3f; - - out.write(encodingTable[b1]); - out.write(encodingTable[b2]); - out.write(padding); - out.write(padding); - break; - case 2: - d1 = data[off + dataLength] & 0xff; - d2 = data[off + dataLength + 1] & 0xff; - - b1 = (d1 >>> 2) & 0x3f; - b2 = ((d1 << 4) | (d2 >>> 4)) & 0x3f; - b3 = (d2 << 2) & 0x3f; - - out.write(encodingTable[b1]); - out.write(encodingTable[b2]); - out.write(encodingTable[b3]); - out.write(padding); - break; - } - - return (dataLength / 3) * 4 + ((modulus == 0) ? 0 : 4); - } - - private boolean ignore( - char c) - { - return (c == '\n' || c =='\r' || c == '\t' || c == ' '); - } - - /** - * decode the base 64 encoded byte data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public int decode( - byte[] data, - int off, - int length, - OutputStream out) - throws IOException - { - byte b1, b2, b3, b4; - int outLen = 0; - - int end = off + length; - - while (end > off) - { - if (!ignore((char)data[end - 1])) - { - break; - } - - end--; - } - - int i = off; - int finish = end - 4; - - i = nextI(data, i, finish); - - while (i < finish) - { - b1 = decodingTable[data[i++]]; - - i = nextI(data, i, finish); - - b2 = decodingTable[data[i++]]; - - i = nextI(data, i, finish); - - b3 = decodingTable[data[i++]]; - - i = nextI(data, i, finish); - - b4 = decodingTable[data[i++]]; - - out.write((b1 << 2) | (b2 >> 4)); - out.write((b2 << 4) | (b3 >> 2)); - out.write((b3 << 6) | b4); - - outLen += 3; - - i = nextI(data, i, finish); - } - - outLen += decodeLastBlock(out, (char)data[end - 4], (char)data[end - 3], (char)data[end - 2], (char)data[end - 1]); - - return outLen; - } - - private int nextI(byte[] data, int i, int finish) - { - while ((i < finish) && ignore((char)data[i])) - { - i++; - } - return i; - } - - /** - * decode the base 64 encoded String data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public int decode( - String data, - OutputStream out) - throws IOException - { - byte b1, b2, b3, b4; - int length = 0; - - int end = data.length(); - - while (end > 0) - { - if (!ignore(data.charAt(end - 1))) - { - break; - } - - end--; - } - - int i = 0; - int finish = end - 4; - - i = nextI(data, i, finish); - - while (i < finish) - { - b1 = decodingTable[data.charAt(i++)]; - - i = nextI(data, i, finish); - - b2 = decodingTable[data.charAt(i++)]; - - i = nextI(data, i, finish); - - b3 = decodingTable[data.charAt(i++)]; - - i = nextI(data, i, finish); - - b4 = decodingTable[data.charAt(i++)]; - - out.write((b1 << 2) | (b2 >> 4)); - out.write((b2 << 4) | (b3 >> 2)); - out.write((b3 << 6) | b4); - - length += 3; - - i = nextI(data, i, finish); - } - - length += decodeLastBlock(out, data.charAt(end - 4), data.charAt(end - 3), data.charAt(end - 2), data.charAt(end - 1)); - - return length; - } - - private int decodeLastBlock(OutputStream out, char c1, char c2, char c3, char c4) - throws IOException - { - byte b1, b2, b3, b4; - - if (c3 == padding) - { - b1 = decodingTable[c1]; - b2 = decodingTable[c2]; - - out.write((b1 << 2) | (b2 >> 4)); - - return 1; - } - else if (c4 == padding) - { - b1 = decodingTable[c1]; - b2 = decodingTable[c2]; - b3 = decodingTable[c3]; - - out.write((b1 << 2) | (b2 >> 4)); - out.write((b2 << 4) | (b3 >> 2)); - - return 2; - } - else - { - b1 = decodingTable[c1]; - b2 = decodingTable[c2]; - b3 = decodingTable[c3]; - b4 = decodingTable[c4]; - - out.write((b1 << 2) | (b2 >> 4)); - out.write((b2 << 4) | (b3 >> 2)); - out.write((b3 << 6) | b4); - - return 3; - } - } - - private int nextI(String data, int i, int finish) - { - while ((i < finish) && ignore(data.charAt(i))) - { - i++; - } - return i; - } -} diff --git a/src/org/bouncycastle/util/encoders/BufferedDecoder.java b/src/org/bouncycastle/util/encoders/BufferedDecoder.java deleted file mode 100644 index 672430a..0000000 --- a/src/org/bouncycastle/util/encoders/BufferedDecoder.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bouncycastle.util.encoders; - - -/** - * a buffering class to allow translation from one format to another to - * be done in discrete chunks. - */ -public class BufferedDecoder -{ - protected byte[] buf; - protected int bufOff; - - protected Translator translator; - - /** - * @param translator the translator to use. - * @param bufSize amount of input to buffer for each chunk. - */ - public BufferedDecoder( - Translator translator, - int bufSize) - { - this.translator = translator; - - if ((bufSize % translator.getEncodedBlockSize()) != 0) - { - throw new IllegalArgumentException("buffer size not multiple of input block size"); - } - - buf = new byte[bufSize]; - bufOff = 0; - } - - public int processByte( - byte in, - byte[] out, - int outOff) - { - int resultLen = 0; - - buf[bufOff++] = in; - - if (bufOff == buf.length) - { - resultLen = translator.decode(buf, 0, buf.length, out, outOff); - bufOff = 0; - } - - return resultLen; - } - - public int processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int resultLen = 0; - int gapLen = buf.length - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += translator.decode(buf, 0, buf.length, out, outOff); - - bufOff = 0; - - len -= gapLen; - inOff += gapLen; - outOff += resultLen; - - int chunkSize = len - (len % buf.length); - - resultLen += translator.decode(in, inOff, chunkSize, out, outOff); - - len -= chunkSize; - inOff += chunkSize; - } - - if (len != 0) - { - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - return resultLen; - } -} diff --git a/src/org/bouncycastle/util/encoders/BufferedEncoder.java b/src/org/bouncycastle/util/encoders/BufferedEncoder.java deleted file mode 100644 index 107eee8..0000000 --- a/src/org/bouncycastle/util/encoders/BufferedEncoder.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.bouncycastle.util.encoders; - - -/** - * a buffering class to allow translation from one format to another to - * be done in discrete chunks. - */ -public class BufferedEncoder -{ - protected byte[] buf; - protected int bufOff; - - protected Translator translator; - - /** - * @param translator the translator to use. - * @param bufSize amount of input to buffer for each chunk. - */ - public BufferedEncoder( - Translator translator, - int bufSize) - { - this.translator = translator; - - if ((bufSize % translator.getEncodedBlockSize()) != 0) - { - throw new IllegalArgumentException("buffer size not multiple of input block size"); - } - - buf = new byte[bufSize]; - bufOff = 0; - } - - public int processByte( - byte in, - byte[] out, - int outOff) - { - int resultLen = 0; - - buf[bufOff++] = in; - - if (bufOff == buf.length) - { - resultLen = translator.encode(buf, 0, buf.length, out, outOff); - bufOff = 0; - } - - return resultLen; - } - - public int processBytes( - byte[] in, - int inOff, - int len, - byte[] out, - int outOff) - { - if (len < 0) - { - throw new IllegalArgumentException("Can't have a negative input length!"); - } - - int resultLen = 0; - int gapLen = buf.length - bufOff; - - if (len > gapLen) - { - System.arraycopy(in, inOff, buf, bufOff, gapLen); - - resultLen += translator.encode(buf, 0, buf.length, out, outOff); - - bufOff = 0; - - len -= gapLen; - inOff += gapLen; - outOff += resultLen; - - int chunkSize = len - (len % buf.length); - - resultLen += translator.encode(in, inOff, chunkSize, out, outOff); - - len -= chunkSize; - inOff += chunkSize; - } - - if (len != 0) - { - System.arraycopy(in, inOff, buf, bufOff, len); - - bufOff += len; - } - - return resultLen; - } -} diff --git a/src/org/bouncycastle/util/encoders/Encoder.java b/src/org/bouncycastle/util/encoders/Encoder.java deleted file mode 100644 index b066121..0000000 --- a/src/org/bouncycastle/util/encoders/Encoder.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.bouncycastle.util.encoders; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * Encode and decode byte arrays (typically from binary to 7-bit ASCII - * encodings). - */ -public interface Encoder -{ - int encode(byte[] data, int off, int length, OutputStream out) throws IOException; - - int decode(byte[] data, int off, int length, OutputStream out) throws IOException; - - int decode(String data, OutputStream out) throws IOException; -} diff --git a/src/org/bouncycastle/util/encoders/Hex.java b/src/org/bouncycastle/util/encoders/Hex.java deleted file mode 100644 index d69f773..0000000 --- a/src/org/bouncycastle/util/encoders/Hex.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.bouncycastle.util.encoders; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -public class Hex -{ - private static final Encoder encoder = new HexEncoder(); - - /** - * encode the input data producing a Hex encoded byte array. - * - * @return a byte array containing the Hex encoded data. - */ - public static byte[] encode( - byte[] data) - { - return encode(data, 0, data.length); - } - - /** - * encode the input data producing a Hex encoded byte array. - * - * @return a byte array containing the Hex encoded data. - */ - public static byte[] encode( - byte[] data, - int off, - int length) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - try - { - encoder.encode(data, off, length, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception encoding Hex string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * Hex encode the byte data writing it to the given output stream. - * - * @return the number of bytes produced. - */ - public static int encode( - byte[] data, - OutputStream out) - throws IOException - { - return encoder.encode(data, 0, data.length, out); - } - - /** - * Hex encode the byte data writing it to the given output stream. - * - * @return the number of bytes produced. - */ - public static int encode( - byte[] data, - int off, - int length, - OutputStream out) - throws IOException - { - return encoder.encode(data, off, length, out); - } - - /** - * decode the Hex encoded input data. It is assumed the input data is valid. - * - * @return a byte array representing the decoded data. - */ - public static byte[] decode( - byte[] data) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - try - { - encoder.decode(data, 0, data.length, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception decoding Hex string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * decode the Hex encoded String data - whitespace will be ignored. - * - * @return a byte array representing the decoded data. - */ - public static byte[] decode( - String data) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - try - { - encoder.decode(data, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception decoding Hex string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * decode the Hex encoded String data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public static int decode( - String data, - OutputStream out) - throws IOException - { - return encoder.decode(data, out); - } -} diff --git a/src/org/bouncycastle/util/encoders/HexEncoder.java b/src/org/bouncycastle/util/encoders/HexEncoder.java deleted file mode 100644 index 0dcae29..0000000 --- a/src/org/bouncycastle/util/encoders/HexEncoder.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.bouncycastle.util.encoders; - -import java.io.IOException; -import java.io.OutputStream; - -public class HexEncoder - implements Encoder -{ - protected final byte[] encodingTable = - { - (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', - (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f' - }; - - /* - * set up the decoding table. - */ - protected final byte[] decodingTable = new byte[128]; - - protected void initialiseDecodingTable() - { - for (int i = 0; i < encodingTable.length; i++) - { - decodingTable[encodingTable[i]] = (byte)i; - } - - decodingTable['A'] = decodingTable['a']; - decodingTable['B'] = decodingTable['b']; - decodingTable['C'] = decodingTable['c']; - decodingTable['D'] = decodingTable['d']; - decodingTable['E'] = decodingTable['e']; - decodingTable['F'] = decodingTable['f']; - } - - public HexEncoder() - { - initialiseDecodingTable(); - } - - /** - * encode the input data producing a Hex output stream. - * - * @return the number of bytes produced. - */ - public int encode( - byte[] data, - int off, - int length, - OutputStream out) - throws IOException - { - for (int i = off; i < (off + length); i++) - { - int v = data[i] & 0xff; - - out.write(encodingTable[(v >>> 4)]); - out.write(encodingTable[v & 0xf]); - } - - return length * 2; - } - - private boolean ignore( - char c) - { - return (c == '\n' || c =='\r' || c == '\t' || c == ' '); - } - - /** - * decode the Hex encoded byte data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public int decode( - byte[] data, - int off, - int length, - OutputStream out) - throws IOException - { - byte b1, b2; - int outLen = 0; - - int end = off + length; - - while (end > off) - { - if (!ignore((char)data[end - 1])) - { - break; - } - - end--; - } - - int i = off; - while (i < end) - { - while (i < end && ignore((char)data[i])) - { - i++; - } - - b1 = decodingTable[data[i++]]; - - while (i < end && ignore((char)data[i])) - { - i++; - } - - b2 = decodingTable[data[i++]]; - - out.write((b1 << 4) | b2); - - outLen++; - } - - return outLen; - } - - /** - * decode the Hex encoded String data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public int decode( - String data, - OutputStream out) - throws IOException - { - byte b1, b2; - int length = 0; - - int end = data.length(); - - while (end > 0) - { - if (!ignore(data.charAt(end - 1))) - { - break; - } - - end--; - } - - int i = 0; - while (i < end) - { - while (i < end && ignore(data.charAt(i))) - { - i++; - } - - b1 = decodingTable[data.charAt(i++)]; - - while (i < end && ignore(data.charAt(i))) - { - i++; - } - - b2 = decodingTable[data.charAt(i++)]; - - out.write((b1 << 4) | b2); - - length++; - } - - return length; - } -} diff --git a/src/org/bouncycastle/util/encoders/HexTranslator.java b/src/org/bouncycastle/util/encoders/HexTranslator.java deleted file mode 100644 index 3fff65a..0000000 --- a/src/org/bouncycastle/util/encoders/HexTranslator.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bouncycastle.util.encoders; - -/** - * Converters for going from hex to binary and back. Note: this class assumes ASCII processing. - */ -public class HexTranslator - implements Translator -{ - private static final byte[] hexTable = - { - (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', - (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f' - }; - - /** - * size of the output block on encoding produced by getDecodedBlockSize() - * bytes. - */ - public int getEncodedBlockSize() - { - return 2; - } - - public int encode( - byte[] in, - int inOff, - int length, - byte[] out, - int outOff) - { - for (int i = 0, j = 0; i < length; i++, j += 2) - { - out[outOff + j] = hexTable[(in[inOff] >> 4) & 0x0f]; - out[outOff + j + 1] = hexTable[in[inOff] & 0x0f]; - - inOff++; - } - - return length * 2; - } - - /** - * size of the output block on decoding produced by getEncodedBlockSize() - * bytes. - */ - public int getDecodedBlockSize() - { - return 1; - } - - public int decode( - byte[] in, - int inOff, - int length, - byte[] out, - int outOff) - { - int halfLength = length / 2; - byte left, right; - for (int i = 0; i < halfLength; i++) - { - left = in[inOff + i * 2]; - right = in[inOff + i * 2 + 1]; - - if (left < (byte)'a') - { - out[outOff] = (byte)((left - '0') << 4); - } - else - { - out[outOff] = (byte)((left - 'a' + 10) << 4); - } - if (right < (byte)'a') - { - out[outOff] += (byte)(right - '0'); - } - else - { - out[outOff] += (byte)(right - 'a' + 10); - } - - outOff++; - } - - return halfLength; - } -} diff --git a/src/org/bouncycastle/util/encoders/Translator.java b/src/org/bouncycastle/util/encoders/Translator.java deleted file mode 100644 index a3a0cb8..0000000 --- a/src/org/bouncycastle/util/encoders/Translator.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bouncycastle.util.encoders; - -/** - * general interface for an translator. - */ -public interface Translator -{ - /** - * size of the output block on encoding produced by getDecodedBlockSize() - * bytes. - */ - public int getEncodedBlockSize(); - - public int encode(byte[] in, int inOff, int length, byte[] out, int outOff); - - /** - * size of the output block on decoding produced by getEncodedBlockSize() - * bytes. - */ - public int getDecodedBlockSize(); - - public int decode(byte[] in, int inOff, int length, byte[] out, int outOff); -} diff --git a/src/org/bouncycastle/util/encoders/UrlBase64.java b/src/org/bouncycastle/util/encoders/UrlBase64.java deleted file mode 100644 index a22d94a..0000000 --- a/src/org/bouncycastle/util/encoders/UrlBase64.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.bouncycastle.util.encoders; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -/** - * Convert binary data to and from UrlBase64 encoding. This is identical to - * Base64 encoding, except that the padding character is "." and the other - * non-alphanumeric characters are "-" and "_" instead of "+" and "/". - *

        - * The purpose of UrlBase64 encoding is to provide a compact encoding of binary - * data that is safe for use as an URL parameter. Base64 encoding does not - * produce encoded values that are safe for use in URLs, since "/" can be - * interpreted as a path delimiter; "+" is the encoded form of a space; and - * "=" is used to separate a name from the corresponding value in an URL - * parameter. - */ -public class UrlBase64 -{ - private static final Encoder encoder = new UrlBase64Encoder(); - - /** - * Encode the input data producing a URL safe base 64 encoded byte array. - * - * @return a byte array containing the URL safe base 64 encoded data. - */ - public static byte[] encode( - byte[] data) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - try - { - encoder.encode(data, 0, data.length, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception encoding URL safe base64 string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * Encode the byte data writing it to the given output stream. - * - * @return the number of bytes produced. - */ - public static int encode( - byte[] data, - OutputStream out) - throws IOException - { - return encoder.encode(data, 0, data.length, out); - } - - /** - * Decode the URL safe base 64 encoded input data - white space will be ignored. - * - * @return a byte array representing the decoded data. - */ - public static byte[] decode( - byte[] data) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - try - { - encoder.decode(data, 0, data.length, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception decoding URL safe base64 string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * decode the URL safe base 64 encoded byte data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public static int decode( - byte[] data, - OutputStream out) - throws IOException - { - return encoder.decode(data, 0, data.length, out); - } - - /** - * decode the URL safe base 64 encoded String data - whitespace will be ignored. - * - * @return a byte array representing the decoded data. - */ - public static byte[] decode( - String data) - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - try - { - encoder.decode(data, bOut); - } - catch (IOException e) - { - throw new RuntimeException("exception decoding URL safe base64 string: " + e); - } - - return bOut.toByteArray(); - } - - /** - * Decode the URL safe base 64 encoded String data writing it to the given output stream, - * whitespace characters will be ignored. - * - * @return the number of bytes produced. - */ - public static int decode( - String data, - OutputStream out) - throws IOException - { - return encoder.decode(data, out); - } -} diff --git a/src/org/bouncycastle/util/encoders/UrlBase64Encoder.java b/src/org/bouncycastle/util/encoders/UrlBase64Encoder.java deleted file mode 100644 index a5fff5e..0000000 --- a/src/org/bouncycastle/util/encoders/UrlBase64Encoder.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.bouncycastle.util.encoders; - -/** - * Convert binary data to and from UrlBase64 encoding. This is identical to - * Base64 encoding, except that the padding character is "." and the other - * non-alphanumeric characters are "-" and "_" instead of "+" and "/". - *

        - * The purpose of UrlBase64 encoding is to provide a compact encoding of binary - * data that is safe for use as an URL parameter. Base64 encoding does not - * produce encoded values that are safe for use in URLs, since "/" can be - * interpreted as a path delimiter; "+" is the encoded form of a space; and - * "=" is used to separate a name from the corresponding value in an URL - * parameter. - */ -public class UrlBase64Encoder extends Base64Encoder -{ - public UrlBase64Encoder() - { - encodingTable[encodingTable.length - 2] = (byte) '-'; - encodingTable[encodingTable.length - 1] = (byte) '_'; - padding = (byte) '.'; - // we must re-create the decoding table with the new encoded values. - initialiseDecodingTable(); - } -} diff --git a/src/org/bouncycastle/util/encoders/package.html b/src/org/bouncycastle/util/encoders/package.html deleted file mode 100644 index 3be222b..0000000 --- a/src/org/bouncycastle/util/encoders/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Classes for producing and reading Base64 and Hex strings. - - diff --git a/src/org/bouncycastle/util/io/StreamOverflowException.java b/src/org/bouncycastle/util/io/StreamOverflowException.java deleted file mode 100644 index 01af8da..0000000 --- a/src/org/bouncycastle/util/io/StreamOverflowException.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.bouncycastle.util.io; - -import java.io.IOException; - -public class StreamOverflowException - extends IOException -{ - public StreamOverflowException(String msg) - { - super(msg); - } -} diff --git a/src/org/bouncycastle/util/io/Streams.java b/src/org/bouncycastle/util/io/Streams.java deleted file mode 100644 index 41560b5..0000000 --- a/src/org/bouncycastle/util/io/Streams.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.bouncycastle.util.io; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public final class Streams -{ - private static int BUFFER_SIZE = 512; - - public static void drain(InputStream inStr) - throws IOException - { - byte[] bs = new byte[BUFFER_SIZE]; - while (inStr.read(bs, 0, bs.length) >= 0) - { - } - } - - public static byte[] readAll(InputStream inStr) - throws IOException - { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - pipeAll(inStr, buf); - return buf.toByteArray(); - } - - public static byte[] readAllLimited(InputStream inStr, int limit) - throws IOException - { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - pipeAllLimited(inStr, limit, buf); - return buf.toByteArray(); - } - - public static int readFully(InputStream inStr, byte[] buf) - throws IOException - { - return readFully(inStr, buf, 0, buf.length); - } - - public static int readFully(InputStream inStr, byte[] buf, int off, int len) - throws IOException - { - int totalRead = 0; - while (totalRead < len) - { - int numRead = inStr.read(buf, off + totalRead, len - totalRead); - if (numRead < 0) - { - break; - } - totalRead += numRead; - } - return totalRead; - } - - public static void pipeAll(InputStream inStr, OutputStream outStr) - throws IOException - { - byte[] bs = new byte[BUFFER_SIZE]; - int numRead; - while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) - { - outStr.write(bs, 0, numRead); - } - } - - public static long pipeAllLimited(InputStream inStr, long limit, OutputStream outStr) - throws IOException - { - long total = 0; - byte[] bs = new byte[BUFFER_SIZE]; - int numRead; - while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) - { - total += numRead; - if (total > limit) - { - throw new StreamOverflowException("Data Overflow"); - } - outStr.write(bs, 0, numRead); - } - return total; - } -} diff --git a/src/org/bouncycastle/util/io/TeeInputStream.java b/src/org/bouncycastle/util/io/TeeInputStream.java deleted file mode 100644 index 9154246..0000000 --- a/src/org/bouncycastle/util/io/TeeInputStream.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.bouncycastle.util.io; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public class TeeInputStream - extends InputStream -{ - private final InputStream input; - private final OutputStream output; - - public TeeInputStream(InputStream input, OutputStream output) - { - this.input = input; - this.output = output; - } - - public int read(byte[] buf) - throws IOException - { - return read(buf, 0, buf.length); - } - - public int read(byte[] buf, int off, int len) - throws IOException - { - int i = input.read(buf, off, len); - - if (i > 0) - { - output.write(buf, off, i); - } - - return i; - } - - public int read() - throws IOException - { - int i = input.read(); - - if (i >= 0) - { - output.write(i); - } - - return i; - } - - public void close() - throws IOException - { - this.input.close(); - this.output.close(); - } - - public OutputStream getOutputStream() - { - return output; - } -} diff --git a/src/org/bouncycastle/util/io/TeeOutputStream.java b/src/org/bouncycastle/util/io/TeeOutputStream.java deleted file mode 100644 index a4919cd..0000000 --- a/src/org/bouncycastle/util/io/TeeOutputStream.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.bouncycastle.util.io; - -import java.io.IOException; -import java.io.OutputStream; - -public class TeeOutputStream - extends OutputStream -{ - private OutputStream output1; - private OutputStream output2; - - public TeeOutputStream(OutputStream output1, OutputStream output2) - { - this.output1 = output1; - this.output2 = output2; - } - - public void write(byte[] buf) - throws IOException - { - this.output1.write(buf); - this.output2.write(buf); - } - - public void write(byte[] buf, int off, int len) - throws IOException - { - this.output1.write(buf, off, len); - this.output2.write(buf, off, len); - } - - public void write(int b) - throws IOException - { - this.output1.write(b); - this.output2.write(b); - } - - public void flush() - throws IOException - { - this.output1.flush(); - this.output2.flush(); - } - - public void close() - throws IOException - { - this.output1.close(); - this.output2.close(); - } -} \ No newline at end of file From 0446762858de2d5a2a107d946d25d2e3dd48f630 Mon Sep 17 00:00:00 2001 From: Steve Hannah Date: Wed, 15 Sep 2021 03:15:45 -0700 Subject: [PATCH 3/4] Migrated project to Maven. --- .gitignore | 5 +- .idea/.gitignore | 3 + .idea/.name | 1 + .idea/compiler.xml | 33 + .idea/encodings.xml | 14 + .idea/jarRepositories.xml | 25 + ...om_codenameone_codenameone_core_7_0_26.xml | 13 + ..._codenameone_codenameone_core_7_0_8_b6.xml | 13 + ..._codenameone_codenameone_javase_7_0_26.xml | 13 + ...odenameone_codenameone_javase_7_0_8_b6.xml | 13 + .../Maven__com_jhlabs_filters_2_0_235_1.xml | 13 + ...aven__org_xerial_sqlite_jdbc_3_7_15_M1.xml | 13 + .idea/misc.xml | 11 + .idea/modules.xml | 18 + .idea/vcs.xml | 6 + android/bouncy-castle-android.iml | 15 + android/pom.xml | 119 + bouncy-castle.iml | 12 + common/bouncy-castle-common.iml | 16 + common/codenameone_library.properties | 4 + .../codenameone_library_appended.properties | 5 + .../codenameone_library_required.properties | 8 + common/manifest.properties | 2 + common/pom.xml | 290 ++ common/src/main/css/index.txt | 0 common/src/main/css/theme.css | 1 + .../codename1/crypto/EncryptedStorage.java | 154 + .../main/java/com/codenameone/MyLibrary.java | 7 + common/src/main/java/javabc/BigInteger.java | 2775 +++++++++++++++++ .../main/java/javabc/FilterInputStream.java | 61 + .../main/java/javabc/FilterOutputStream.java | 42 + common/src/main/java/javabc/SecureRandom.java | 141 + .../main/java/org/bouncycastle/LICENSE.java | 59 + .../asn1/ASN1ApplicationSpecificParser.java | 10 + .../org/bouncycastle/asn1/ASN1Boolean.java | 15 + .../org/bouncycastle/asn1/ASN1Choice.java | 14 + .../org/bouncycastle/asn1/ASN1Encodable.java | 6 + .../asn1/ASN1EncodableVector.java | 27 + .../org/bouncycastle/asn1/ASN1Encoding.java | 8 + .../org/bouncycastle/asn1/ASN1Enumerated.java | 22 + .../org/bouncycastle/asn1/ASN1Exception.java | 25 + .../asn1/ASN1GeneralizedTime.java | 27 + .../org/bouncycastle/asn1/ASN1Generator.java | 15 + .../bouncycastle/asn1/ASN1InputStream.java | 466 +++ .../org/bouncycastle/asn1/ASN1Integer.java | 22 + .../java/org/bouncycastle/asn1/ASN1Null.java | 64 + .../org/bouncycastle/asn1/ASN1Object.java | 97 + .../asn1/ASN1ObjectIdentifier.java | 37 + .../bouncycastle/asn1/ASN1OctetString.java | 146 + .../asn1/ASN1OctetStringParser.java | 9 + .../bouncycastle/asn1/ASN1OutputStream.java | 194 ++ .../asn1/ASN1ParsingException.java | 23 + .../org/bouncycastle/asn1/ASN1Primitive.java | 69 + .../org/bouncycastle/asn1/ASN1Sequence.java | 323 ++ .../bouncycastle/asn1/ASN1SequenceParser.java | 10 + .../java/org/bouncycastle/asn1/ASN1Set.java | 464 +++ .../org/bouncycastle/asn1/ASN1SetParser.java | 10 + .../bouncycastle/asn1/ASN1StreamParser.java | 247 ++ .../org/bouncycastle/asn1/ASN1String.java | 6 + .../bouncycastle/asn1/ASN1TaggedObject.java | 236 ++ .../asn1/ASN1TaggedObjectParser.java | 12 + .../org/bouncycastle/asn1/ASN1UTCTime.java | 22 + .../asn1/BERApplicationSpecific.java | 10 + .../asn1/BERApplicationSpecificParser.java | 41 + .../asn1/BERConstructedOctetString.java | 144 + .../org/bouncycastle/asn1/BERFactory.java | 17 + .../org/bouncycastle/asn1/BERGenerator.java | 100 + .../org/bouncycastle/asn1/BEROctetString.java | 168 + .../asn1/BEROctetStringGenerator.java | 102 + .../asn1/BEROctetStringParser.java | 41 + .../bouncycastle/asn1/BEROutputStream.java | 36 + .../org/bouncycastle/asn1/BERSequence.java | 73 + .../asn1/BERSequenceGenerator.java | 41 + .../bouncycastle/asn1/BERSequenceParser.java | 38 + .../java/org/bouncycastle/asn1/BERSet.java | 73 + .../org/bouncycastle/asn1/BERSetParser.java | 38 + .../bouncycastle/asn1/BERTaggedObject.java | 147 + .../asn1/BERTaggedObjectParser.java | 66 + .../java/org/bouncycastle/asn1/BERTags.java | 36 + .../asn1/ConstructedOctetStream.java | 111 + .../asn1/DERApplicationSpecific.java | 276 ++ .../org/bouncycastle/asn1/DERBMPString.java | 141 + .../org/bouncycastle/asn1/DERBitString.java | 312 ++ .../org/bouncycastle/asn1/DERBoolean.java | 166 + .../bouncycastle/asn1/DEREncodableVector.java | 18 + .../org/bouncycastle/asn1/DEREnumerated.java | 146 + .../org/bouncycastle/asn1/DERExternal.java | 294 ++ .../bouncycastle/asn1/DERExternalParser.java | 52 + .../org/bouncycastle/asn1/DERFactory.java | 31 + .../bouncycastle/asn1/DERGeneralString.java | 98 + .../bouncycastle/asn1/DERGeneralizedTime.java | 260 ++ .../org/bouncycastle/asn1/DERGenerator.java | 119 + .../org/bouncycastle/asn1/DERIA5String.java | 171 + .../org/bouncycastle/asn1/DERInteger.java | 136 + .../java/org/bouncycastle/asn1/DERNull.java | 35 + .../bouncycastle/asn1/DERNumericString.java | 174 ++ .../asn1/DERObjectIdentifier.java | 371 +++ .../org/bouncycastle/asn1/DEROctetString.java | 48 + .../asn1/DEROctetStringParser.java | 39 + .../bouncycastle/asn1/DEROutputStream.java | 41 + .../bouncycastle/asn1/DERPrintableString.java | 201 ++ .../org/bouncycastle/asn1/DERSequence.java | 98 + .../asn1/DERSequenceGenerator.java | 45 + .../bouncycastle/asn1/DERSequenceParser.java | 38 + .../java/org/bouncycastle/asn1/DERSet.java | 108 + .../org/bouncycastle/asn1/DERSetParser.java | 38 + .../org/bouncycastle/asn1/DERT61String.java | 123 + .../bouncycastle/asn1/DERTaggedObject.java | 118 + .../java/org/bouncycastle/asn1/DERTags.java | 9 + .../org/bouncycastle/asn1/DERUTCTime.java | 259 ++ .../org/bouncycastle/asn1/DERUTF8String.java | 120 + .../bouncycastle/asn1/DERUniversalString.java | 136 + .../bouncycastle/asn1/DERVisibleString.java | 123 + .../org/bouncycastle/asn1/DLOutputStream.java | 31 + .../org/bouncycastle/asn1/DLSequence.java | 98 + .../java/org/bouncycastle/asn1/DLSet.java | 101 + .../org/bouncycastle/asn1/DLTaggedObject.java | 112 + .../org/bouncycastle/asn1/DateFormatter.java | 272 ++ .../asn1/DefiniteLengthInputStream.java | 106 + .../asn1/InMemoryRepresentable.java | 9 + .../asn1/IndefiniteLengthInputStream.java | 111 + .../asn1/LazyConstructionEnumeration.java | 43 + .../asn1/LazyEncodedSequence.java | 109 + .../bouncycastle/asn1/LimitedInputStream.java | 32 + .../org/bouncycastle/asn1/OIDTokenizer.java | 48 + .../org/bouncycastle/asn1/StreamUtil.java | 88 + .../org/bouncycastle/asn1/pkcs/Attribute.java | 88 + .../asn1/pkcs/AuthenticatedSafe.java | 74 + .../org/bouncycastle/asn1/pkcs/CRLBag.java | 82 + .../org/bouncycastle/asn1/pkcs/CertBag.java | 66 + .../asn1/pkcs/CertificationRequest.java | 91 + .../asn1/pkcs/CertificationRequestInfo.java | 148 + .../bouncycastle/asn1/pkcs/ContentInfo.java | 102 + .../bouncycastle/asn1/pkcs/DHParameter.java | 104 + .../bouncycastle/asn1/pkcs/EncryptedData.java | 115 + .../asn1/pkcs/EncryptedPrivateKeyInfo.java | 86 + .../asn1/pkcs/EncryptionScheme.java | 55 + .../asn1/pkcs/IssuerAndSerialNumber.java | 85 + .../asn1/pkcs/KeyDerivationFunc.java | 23 + .../org/bouncycastle/asn1/pkcs/MacData.java | 106 + .../bouncycastle/asn1/pkcs/PBEParameter.java | 73 + .../asn1/pkcs/PBES2Algorithms.java | 77 + .../asn1/pkcs/PBES2Parameters.java | 71 + .../bouncycastle/asn1/pkcs/PBKDF2Params.java | 108 + .../asn1/pkcs/PKCS12PBEParams.java | 69 + .../asn1/pkcs/PKCSObjectIdentifiers.java | 257 ++ .../java/org/bouncycastle/asn1/pkcs/Pfx.java | 87 + .../asn1/pkcs/PrivateKeyInfo.java | 160 + .../asn1/pkcs/RC2CBCParameter.java | 93 + .../asn1/pkcs/RSAESOAEPparams.java | 151 + .../bouncycastle/asn1/pkcs/RSAPrivateKey.java | 187 ++ .../asn1/pkcs/RSAPrivateKeyStructure.java | 189 ++ .../bouncycastle/asn1/pkcs/RSAPublicKey.java | 95 + .../asn1/pkcs/RSASSAPSSparams.java | 172 + .../org/bouncycastle/asn1/pkcs/SafeBag.java | 96 + .../bouncycastle/asn1/pkcs/SignedData.java | 166 + .../bouncycastle/asn1/pkcs/SignerInfo.java | 178 ++ .../bouncycastle/asn1/sec/ECPrivateKey.java | 143 + .../asn1/sec/ECPrivateKeyStructure.java | 128 + .../bouncycastle/asn1/sec/SECNamedCurves.java | 1029 ++++++ .../asn1/sec/SECObjectIdentifiers.java | 50 + .../org/bouncycastle/asn1/util/ASN1Dump.java | 427 +++ .../org/bouncycastle/asn1/util/DERDump.java | 41 + .../asn1/x500/AttributeTypeAndValue.java | 72 + .../asn1/x500/DirectoryString.java | 125 + .../java/org/bouncycastle/asn1/x500/RDN.java | 119 + .../org/bouncycastle/asn1/x500/X500Name.java | 326 ++ .../asn1/x500/X500NameBuilder.java | 81 + .../bouncycastle/asn1/x500/X500NameStyle.java | 34 + .../asn1/x500/style/BCStrictStyle.java | 33 + .../bouncycastle/asn1/x500/style/BCStyle.java | 544 ++++ .../asn1/x500/style/IETFUtils.java | 301 ++ .../asn1/x500/style/RFC4519Style.java | 443 +++ .../asn1/x500/style/X500NameTokenizer.java | 99 + .../asn1/x509/AccessDescription.java | 98 + .../asn1/x509/AlgorithmIdentifier.java | 173 + .../bouncycastle/asn1/x509/AttCertIssuer.java | 91 + .../asn1/x509/AttCertValidityPeriod.java | 84 + .../org/bouncycastle/asn1/x509/Attribute.java | 93 + .../asn1/x509/AttributeCertificate.java | 94 + .../asn1/x509/AttributeCertificateInfo.java | 166 + .../asn1/x509/AuthorityInformationAccess.java | 101 + .../asn1/x509/AuthorityKeyIdentifier.java | 227 ++ .../asn1/x509/BasicConstraints.java | 158 + .../bouncycastle/asn1/x509/CRLDistPoint.java | 100 + .../org/bouncycastle/asn1/x509/CRLNumber.java | 54 + .../org/bouncycastle/asn1/x509/CRLReason.java | 150 + .../bouncycastle/asn1/x509/CertPolicyId.java | 20 + .../bouncycastle/asn1/x509/Certificate.java | 131 + .../asn1/x509/CertificateList.java | 127 + .../asn1/x509/CertificatePair.java | 169 + .../asn1/x509/CertificatePolicies.java | 99 + .../bouncycastle/asn1/x509/DSAParameter.java | 92 + .../bouncycastle/asn1/x509/DigestInfo.java | 86 + .../bouncycastle/asn1/x509/DisplayText.java | 165 + .../asn1/x509/DistributionPoint.java | 158 + .../asn1/x509/DistributionPointName.java | 138 + .../asn1/x509/ExtendedKeyUsage.java | 123 + .../org/bouncycastle/asn1/x509/Extension.java | 266 ++ .../bouncycastle/asn1/x509/Extensions.java | 214 ++ .../asn1/x509/ExtensionsGenerator.java | 94 + .../bouncycastle/asn1/x509/GeneralName.java | 439 +++ .../bouncycastle/asn1/x509/GeneralNames.java | 102 + .../asn1/x509/GeneralSubtree.java | 218 ++ .../org/bouncycastle/asn1/x509/Holder.java | 245 ++ .../asn1/x509/IetfAttrSyntax.java | 189 ++ .../bouncycastle/asn1/x509/IssuerSerial.java | 106 + .../asn1/x509/IssuingDistributionPoint.java | 274 ++ .../bouncycastle/asn1/x509/KeyPurposeId.java | 119 + .../org/bouncycastle/asn1/x509/KeyUsage.java | 77 + .../asn1/x509/NameConstraints.java | 118 + .../asn1/x509/NoticeReference.java | 170 + .../asn1/x509/ObjectDigestInfo.java | 191 ++ .../asn1/x509/PolicyInformation.java | 87 + .../asn1/x509/PolicyMappings.java | 82 + .../asn1/x509/PolicyQualifierId.java | 31 + .../asn1/x509/PolicyQualifierInfo.java | 114 + .../asn1/x509/PrivateKeyUsagePeriod.java | 84 + .../asn1/x509/RSAPublicKeyStructure.java | 98 + .../bouncycastle/asn1/x509/ReasonFlags.java | 85 + .../bouncycastle/asn1/x509/RoleSyntax.java | 237 ++ .../asn1/x509/SubjectDirectoryAttributes.java | 144 + .../asn1/x509/SubjectKeyIdentifier.java | 130 + .../asn1/x509/SubjectPublicKeyInfo.java | 155 + .../bouncycastle/asn1/x509/TBSCertList.java | 309 ++ .../asn1/x509/TBSCertificate.java | 192 ++ .../asn1/x509/TBSCertificateStructure.java | 194 ++ .../org/bouncycastle/asn1/x509/Target.java | 138 + .../asn1/x509/TargetInformation.java | 120 + .../org/bouncycastle/asn1/x509/Targets.java | 121 + .../java/org/bouncycastle/asn1/x509/Time.java | 122 + .../bouncycastle/asn1/x509/UserNotice.java | 132 + .../asn1/x509/V1TBSCertificateGenerator.java | 144 + .../V2AttributeCertificateInfoGenerator.java | 158 + .../org/bouncycastle/asn1/x509/V2Form.java | 130 + .../asn1/x509/V2TBSCertListGenerator.java | 281 ++ .../asn1/x509/V3TBSCertificateGenerator.java | 212 ++ .../asn1/x509/X509AttributeIdentifiers.java | 29 + .../asn1/x509/X509CertificateStructure.java | 129 + .../asn1/x509/X509DefaultEntryConverter.java | 65 + .../bouncycastle/asn1/x509/X509Extension.java | 248 ++ .../asn1/x509/X509Extensions.java | 487 +++ .../asn1/x509/X509ExtensionsGenerator.java | 117 + .../org/bouncycastle/asn1/x509/X509Name.java | 1280 ++++++++ .../asn1/x509/X509NameEntryConverter.java | 113 + .../asn1/x509/X509NameTokenizer.java | 99 + .../asn1/x509/X509ObjectIdentifiers.java | 67 + .../asn1/x509/qualified/BiometricData.java | 122 + .../qualified/ETSIQCObjectIdentifiers.java | 16 + .../x509/qualified/Iso4217CurrencyCode.java | 93 + .../asn1/x509/qualified/MonetaryValue.java | 92 + .../asn1/x509/qualified/QCStatement.java | 93 + .../qualified/RFC3739QCObjectIdentifiers.java | 14 + .../x509/qualified/SemanticsInformation.java | 131 + .../x509/qualified/TypeOfBiometricData.java | 90 + .../asn1/x509/sigi/NameOrPseudonym.java | 191 ++ .../asn1/x509/sigi/PersonalData.java | 214 ++ .../asn1/x509/sigi/SigIObjectIdentifiers.java | 45 + .../asn1/x9/DHDomainParameters.java | 139 + .../org/bouncycastle/asn1/x9/DHPublicKey.java | 52 + .../asn1/x9/DHValidationParms.java | 80 + .../bouncycastle/asn1/x9/KeySpecificInfo.java | 68 + .../org/bouncycastle/asn1/x9/OtherInfo.java | 96 + .../bouncycastle/asn1/x9/X962NamedCurves.java | 621 ++++ .../bouncycastle/asn1/x9/X962Parameters.java | 86 + .../org/bouncycastle/asn1/x9/X9Curve.java | 161 + .../bouncycastle/asn1/x9/X9ECParameters.java | 176 ++ .../asn1/x9/X9ECParametersHolder.java | 18 + .../org/bouncycastle/asn1/x9/X9ECPoint.java | 48 + .../bouncycastle/asn1/x9/X9FieldElement.java | 64 + .../org/bouncycastle/asn1/x9/X9FieldID.java | 109 + .../asn1/x9/X9IntegerConverter.java | 47 + .../asn1/x9/X9ObjectIdentifiers.java | 132 + .../crypto/AsymmetricBlockCipher.java | 45 + .../crypto/AsymmetricCipherKeyPair.java | 44 + .../AsymmetricCipherKeyPairGenerator.java | 22 + .../bouncycastle/crypto/BasicAgreement.java | 21 + .../org/bouncycastle/crypto/BlockCipher.java | 56 + .../crypto/BufferedAsymmetricBlockCipher.java | 171 + .../crypto/BufferedBlockCipher.java | 313 ++ .../crypto/CipherKeyGenerator.java | 38 + .../bouncycastle/crypto/CipherParameters.java | 8 + .../bouncycastle/crypto/CryptoException.java | 48 + .../java/org/bouncycastle/crypto/DSA.java | 36 + .../crypto/DataLengthException.java | 29 + .../crypto/DerivationFunction.java | 17 + .../crypto/DerivationParameters.java | 8 + .../java/org/bouncycastle/crypto/Digest.java | 51 + .../bouncycastle/crypto/ExtendedDigest.java | 13 + .../crypto/InvalidCipherTextException.java | 27 + .../crypto/KeyGenerationParameters.java | 48 + .../java/org/bouncycastle/crypto/Mac.java | 71 + .../crypto/MaxBytesExceededException.java | 27 + .../crypto/PBEParametersGenerator.java | 157 + .../crypto/RuntimeCryptoException.java | 26 + .../java/org/bouncycastle/crypto/Signer.java | 43 + .../crypto/SignerWithRecovery.java | 34 + .../crypto/StreamBlockCipher.java | 108 + .../org/bouncycastle/crypto/StreamCipher.java | 53 + .../java/org/bouncycastle/crypto/Wrapper.java | 18 + .../crypto/agreement/DHAgreement.java | 94 + .../crypto/agreement/DHBasicAgreement.java | 66 + .../crypto/agreement/ECDHBasicAgreement.java | 47 + .../crypto/agreement/ECDHCBasicAgreement.java | 54 + .../crypto/agreement/ECMQVBasicAgreement.java | 86 + .../crypto/agreement/srp/SRP6Client.java | 93 + .../crypto/agreement/srp/SRP6Server.java | 90 + .../crypto/agreement/srp/SRP6Util.java | 91 + .../agreement/srp/SRP6VerifierGenerator.java | 47 + .../crypto/digests/GeneralDigest.java | 135 + .../crypto/digests/LongDigest.java | 354 +++ .../crypto/digests/MD2Digest.java | 237 ++ .../crypto/digests/MD4Digest.java | 270 ++ .../crypto/digests/MD5Digest.java | 302 ++ .../crypto/digests/NullDigest.java | 48 + .../crypto/digests/RIPEMD128Digest.java | 461 +++ .../crypto/digests/RIPEMD160Digest.java | 422 +++ .../crypto/digests/RIPEMD256Digest.java | 476 +++ .../crypto/digests/RIPEMD320Digest.java | 461 +++ .../crypto/digests/SHA1Digest.java | 290 ++ .../crypto/digests/SHA224Digest.java | 292 ++ .../crypto/digests/SHA256Digest.java | 295 ++ .../crypto/digests/SHA384Digest.java | 87 + .../crypto/digests/SHA512Digest.java | 89 + .../crypto/digests/ShortenedDigest.java | 80 + .../crypto/digests/TigerDigest.java | 866 +++++ .../crypto/digests/WhirlpoolDigest.java | 396 +++ .../crypto/encodings/ISO9796d1Encoding.java | 287 ++ .../crypto/encodings/OAEPEncoding.java | 348 +++ .../crypto/encodings/PKCS1Encoding.java | 238 ++ .../crypto/engines/AESEngine.java | 547 ++++ .../crypto/engines/AESFastEngine.java | 876 ++++++ .../crypto/engines/AESLightEngine.java | 440 +++ .../crypto/engines/AESWrapEngine.java | 16 + .../crypto/engines/BlowfishEngine.java | 576 ++++ .../crypto/engines/DESEngine.java | 494 +++ .../crypto/engines/DESedeEngine.java | 126 + .../crypto/engines/DESedeWrapEngine.java | 348 +++ .../crypto/engines/HC128Engine.java | 256 ++ .../crypto/engines/HC256Engine.java | 243 ++ .../crypto/engines/IDEAEngine.java | 366 +++ .../crypto/engines/IESEngine.java | 256 ++ .../crypto/engines/NullEngine.java | 84 + .../crypto/engines/RFC3211WrapEngine.java | 175 ++ .../crypto/engines/RFC3394WrapEngine.java | 177 ++ .../crypto/engines/RSABlindedEngine.java | 126 + .../crypto/engines/RSABlindingEngine.java | 137 + .../crypto/engines/RSACoreEngine.java | 203 ++ .../crypto/engines/RSAEngine.java | 78 + .../crypto/engines/Salsa20Engine.java | 318 ++ .../generators/BaseKDFBytesGenerator.java | 142 + .../crypto/generators/DESKeyGenerator.java | 48 + .../crypto/generators/DESedeKeyGenerator.java | 56 + .../generators/DHBasicKeyPairGenerator.java | 42 + .../generators/DHKeyGeneratorHelper.java | 51 + .../crypto/generators/DHKeyPairGenerator.java | 42 + .../generators/DHParametersGenerator.java | 52 + .../crypto/generators/DHParametersHelper.java | 73 + .../generators/DSAKeyPairGenerator.java | 61 + .../generators/DSAParametersGenerator.java | 335 ++ .../crypto/generators/ECKeyPairGenerator.java | 53 + .../generators/ElGamalKeyPairGenerator.java | 44 + .../ElGamalParametersGenerator.java | 43 + .../generators/GOST3410KeyPairGenerator.java | 57 + .../GOST3410ParametersGenerator.java | 541 ++++ .../crypto/generators/KDF1BytesGenerator.java | 23 + .../crypto/generators/KDF2BytesGenerator.java | 24 + .../crypto/generators/MGF1BytesGenerator.java | 114 + .../NaccacheSternKeyPairGenerator.java | 365 +++ .../OpenSSLPBEParametersGenerator.java | 131 + .../generators/PKCS12ParametersGenerator.java | 221 ++ .../PKCS5S1ParametersGenerator.java | 119 + .../PKCS5S2ParametersGenerator.java | 158 + .../RSABlindingFactorGenerator.java | 77 + .../generators/RSAKeyPairGenerator.java | 147 + .../crypto/generators/SCrypt.java | 147 + .../crypto/io/CipherInputStream.java | 244 ++ .../crypto/io/CipherOutputStream.java | 188 ++ .../crypto/io/DigestInputStream.java | 52 + .../crypto/io/DigestOutputStream.java | 42 + .../crypto/io/MacInputStream.java | 52 + .../crypto/io/MacOutputStream.java | 42 + .../crypto/io/SignerInputStream.java | 52 + .../crypto/io/SignerOutputStream.java | 38 + .../crypto/macs/BlockCipherMac.java | 174 ++ .../crypto/macs/CBCBlockCipherMac.java | 229 ++ .../crypto/macs/CFBBlockCipherMac.java | 388 +++ .../org/bouncycastle/crypto/macs/CMac.java | 237 ++ .../crypto/macs/GOST28147Mac.java | 298 ++ .../org/bouncycastle/crypto/macs/HMac.java | 199 ++ .../crypto/macs/ISO9797Alg3Mac.java | 305 ++ .../org/bouncycastle/crypto/macs/OldHMac.java | 138 + .../org/bouncycastle/crypto/macs/VMPCMac.java | 186 ++ .../crypto/modes/AEADBlockCipher.java | 108 + .../crypto/modes/CBCBlockCipher.java | 253 ++ .../crypto/modes/CCMBlockCipher.java | 338 ++ .../crypto/modes/CFBBlockCipher.java | 254 ++ .../crypto/modes/CTSBlockCipher.java | 265 ++ .../crypto/modes/EAXBlockCipher.java | 304 ++ .../crypto/modes/GCMBlockCipher.java | 421 +++ .../crypto/modes/GOFBBlockCipher.java | 234 ++ .../crypto/modes/OFBBlockCipher.java | 183 ++ .../crypto/modes/OpenPGPCFBBlockCipher.java | 312 ++ .../crypto/modes/PGPCFBBlockCipher.java | 450 +++ .../crypto/modes/PaddedBlockCipher.java | 253 ++ .../crypto/modes/SICBlockCipher.java | 124 + .../modes/gcm/BasicGCMExponentiator.java | 36 + .../crypto/modes/gcm/BasicGCMMultiplier.java | 18 + .../crypto/modes/gcm/GCMExponentiator.java | 7 + .../crypto/modes/gcm/GCMMultiplier.java | 7 + .../crypto/modes/gcm/GCMUtil.java | 155 + .../modes/gcm/Tables1kGCMExponentiator.java | 40 + .../modes/gcm/Tables64kGCMMultiplier.java | 78 + .../modes/gcm/Tables8kGCMMultiplier.java | 106 + .../crypto/paddings/BlockCipherPadding.java | 48 + .../crypto/paddings/ISO10126d2Padding.java | 79 + .../crypto/paddings/ISO7816d4Padding.java | 77 + .../crypto/paddings/PKCS7Padding.java | 76 + .../paddings/PaddedBufferedBlockCipher.java | 298 ++ .../crypto/paddings/TBCPadding.java | 89 + .../crypto/paddings/X923Padding.java | 80 + .../crypto/paddings/ZeroBytePadding.java | 73 + .../crypto/params/AEADParameters.java | 48 + .../crypto/params/AsymmetricKeyParameter.java | 20 + .../crypto/params/CCMParameters.java | 18 + .../crypto/params/DESParameters.java | 107 + .../crypto/params/DESedeParameters.java | 57 + .../params/DHKeyGenerationParameters.java | 30 + .../crypto/params/DHKeyParameters.java | 54 + .../crypto/params/DHParameters.java | 189 ++ .../crypto/params/DHPrivateKeyParameters.java | 41 + .../crypto/params/DHPublicKeyParameters.java | 41 + .../crypto/params/DHValidationParameters.java | 50 + .../params/DSAKeyGenerationParameters.java | 25 + .../crypto/params/DSAKeyParameters.java | 21 + .../crypto/params/DSAParameters.java | 74 + .../params/DSAPrivateKeyParameters.java | 23 + .../crypto/params/DSAPublicKeyParameters.java | 23 + .../params/DSAValidationParameters.java | 50 + .../crypto/params/ECDomainParameters.java | 81 + .../params/ECKeyGenerationParameters.java | 25 + .../crypto/params/ECKeyParameters.java | 21 + .../crypto/params/ECPrivateKeyParameters.java | 22 + .../crypto/params/ECPublicKeyParameters.java | 22 + .../ElGamalKeyGenerationParameters.java | 30 + .../crypto/params/ElGamalKeyParameters.java | 47 + .../crypto/params/ElGamalParameters.java | 69 + .../params/ElGamalPrivateKeyParameters.java | 46 + .../params/ElGamalPublicKeyParameters.java | 41 + .../GOST3410KeyGenerationParameters.java | 25 + .../crypto/params/GOST3410KeyParameters.java | 21 + .../crypto/params/GOST3410Parameters.java | 74 + .../params/GOST3410PrivateKeyParameters.java | 23 + .../params/GOST3410PublicKeyParameters.java | 23 + .../params/GOST3410ValidationParameters.java | 84 + .../crypto/params/IESParameters.java | 44 + .../params/IESWithCipherParameters.java | 30 + .../crypto/params/ISO18033KDFParameters.java | 23 + .../crypto/params/KDFParameters.java | 31 + .../crypto/params/KeyParameter.java | 30 + .../crypto/params/MGFParameters.java | 32 + .../crypto/params/MQVPrivateParameters.java | 43 + .../crypto/params/MQVPublicParameters.java | 28 + .../NaccacheSternKeyGenerationParameters.java | 97 + .../params/NaccacheSternKeyParameters.java | 53 + .../NaccacheSternPrivateKeyParameters.java | 50 + .../crypto/params/ParametersWithIV.java | 39 + .../crypto/params/ParametersWithRandom.java | 36 + .../crypto/params/ParametersWithSBox.java | 28 + .../crypto/params/ParametersWithSalt.java | 42 + .../crypto/params/RC2Parameters.java | 36 + .../crypto/params/RC5Parameters.java | 35 + .../crypto/params/RSABlindingParameters.java | 35 + .../params/RSAKeyGenerationParameters.java | 48 + .../crypto/params/RSAKeyParameters.java | 31 + .../params/RSAPrivateCrtKeyParameters.java | 67 + .../crypto/prng/DigestRandomGenerator.java | 123 + .../crypto/prng/RandomGenerator.java | 38 + .../crypto/prng/ReversedWindowGenerator.java | 111 + .../crypto/prng/ThreadedSeedGenerator.java | 95 + .../crypto/prng/VMPCRandomGenerator.java | 131 + .../crypto/signers/DSADigestSigner.java | 163 + .../crypto/signers/DSASigner.java | 138 + .../crypto/signers/ECDSASigner.java | 163 + .../crypto/signers/ECGOST3410Signer.java | 152 + .../crypto/signers/ECNRSigner.java | 182 ++ .../crypto/signers/GOST3410Signer.java | 127 + .../crypto/signers/GenericSigner.java | 136 + .../crypto/signers/ISO9796d2PSSSigner.java | 621 ++++ .../crypto/signers/ISO9796d2Signer.java | 614 ++++ .../crypto/signers/PSSSigner.java | 348 +++ .../crypto/signers/RSADigestSigner.java | 223 ++ .../crypto/tls/AlertDescription.java | 47 + .../bouncycastle/crypto/tls/AlertLevel.java | 10 + .../crypto/tls/AlwaysValidVerifyer.java | 25 + .../bouncycastle/crypto/tls/ByteQueue.java | 123 + .../bouncycastle/crypto/tls/Certificate.java | 121 + .../crypto/tls/CertificateRequest.java | 28 + .../crypto/tls/CertificateVerifyer.java | 18 + .../bouncycastle/crypto/tls/CipherSuite.java | 135 + .../crypto/tls/ClientCertificateType.java | 19 + .../bouncycastle/crypto/tls/CombinedHash.java | 114 + .../crypto/tls/CompressionMethod.java | 19 + .../bouncycastle/crypto/tls/ContentType.java | 12 + .../tls/DefaultTlsAgreementCredentials.java | 68 + .../crypto/tls/DefaultTlsCipherFactory.java | 70 + .../crypto/tls/DefaultTlsClient.java | 251 ++ .../tls/DefaultTlsSignerCredentials.java | 79 + .../crypto/tls/DigestAlgorithm.java | 18 + .../bouncycastle/crypto/tls/ECCurveType.java | 28 + .../crypto/tls/ECPointFormat.java | 15 + .../crypto/tls/EncryptionAlgorithm.java | 29 + .../crypto/tls/ExtensionType.java | 30 + .../crypto/tls/HandshakeType.java | 18 + .../crypto/tls/KeyExchangeAlgorithm.java | 33 + .../crypto/tls/LegacyTlsAuthentication.java | 32 + .../crypto/tls/LegacyTlsClient.java | 29 + .../bouncycastle/crypto/tls/NamedCurve.java | 100 + .../bouncycastle/crypto/tls/PSKTlsClient.java | 192 ++ .../crypto/tls/ProtocolVersion.java | 64 + .../bouncycastle/crypto/tls/RecordStream.java | 191 ++ .../bouncycastle/crypto/tls/SRPTlsClient.java | 201 ++ .../org/bouncycastle/crypto/tls/SSL3Mac.java | 117 + .../crypto/tls/SecurityParameters.java | 23 + .../crypto/tls/TlsAgreementCredentials.java | 10 + .../crypto/tls/TlsAuthentication.java | 24 + .../crypto/tls/TlsBlockCipher.java | 240 ++ .../bouncycastle/crypto/tls/TlsCipher.java | 10 + .../crypto/tls/TlsCipherFactory.java | 11 + .../bouncycastle/crypto/tls/TlsClient.java | 39 + .../crypto/tls/TlsClientContext.java | 18 + .../crypto/tls/TlsClientContextImpl.java | 59 + .../crypto/tls/TlsCompression.java | 10 + .../crypto/tls/TlsCredentials.java | 6 + .../crypto/tls/TlsDHEKeyExchange.java | 57 + .../crypto/tls/TlsDHKeyExchange.java | 211 ++ .../bouncycastle/crypto/tls/TlsDHUtils.java | 76 + .../bouncycastle/crypto/tls/TlsDSASigner.java | 34 + .../bouncycastle/crypto/tls/TlsDSSSigner.java | 19 + .../crypto/tls/TlsECDHEKeyExchange.java | 112 + .../crypto/tls/TlsECDHKeyExchange.java | 240 ++ .../crypto/tls/TlsECDSASigner.java | 19 + .../crypto/tls/TlsFatalAlert.java | 20 + .../crypto/tls/TlsInputStream.java | 37 + .../crypto/tls/TlsKeyExchange.java | 30 + .../org/bouncycastle/crypto/tls/TlsMac.java | 130 + .../crypto/tls/TlsNullCipher.java | 24 + .../crypto/tls/TlsNullCompression.java | 16 + .../crypto/tls/TlsOutputStream.java | 39 + .../crypto/tls/TlsPSKIdentity.java | 12 + .../crypto/tls/TlsPSKKeyExchange.java | 152 + .../crypto/tls/TlsProtocolHandler.java | 1259 ++++++++ .../crypto/tls/TlsRSAKeyExchange.java | 166 + .../bouncycastle/crypto/tls/TlsRSASigner.java | 37 + .../bouncycastle/crypto/tls/TlsRSAUtils.java | 51 + .../crypto/tls/TlsRuntimeException.java | 25 + .../crypto/tls/TlsSRPKeyExchange.java | 203 ++ .../bouncycastle/crypto/tls/TlsSigner.java | 17 + .../crypto/tls/TlsSignerCredentials.java | 8 + .../org/bouncycastle/crypto/tls/TlsUtils.java | 438 +++ .../org/bouncycastle/crypto/util/Pack.java | 100 + .../crypto/util/PrivateKeyFactory.java | 159 + .../crypto/util/PublicKeyFactory.java | 196 ++ .../bouncycastle/math/ec/ECAlgorithms.java | 92 + .../org/bouncycastle/math/ec/ECConstants.java | 12 + .../org/bouncycastle/math/ec/ECCurve.java | 668 ++++ .../bouncycastle/math/ec/ECFieldElement.java | 1196 +++++++ .../bouncycastle/math/ec/ECMultiplier.java | 19 + .../org/bouncycastle/math/ec/ECPoint.java | 588 ++++ .../bouncycastle/math/ec/FpNafMultiplier.java | 39 + .../org/bouncycastle/math/ec/IntArray.java | 518 +++ .../org/bouncycastle/math/ec/PreCompInfo.java | 10 + .../math/ec/ReferenceMultiplier.java | 30 + .../math/ec/SimpleBigDecimal.java | 253 ++ .../java/org/bouncycastle/math/ec/Tnaf.java | 844 +++++ .../bouncycastle/math/ec/WNafMultiplier.java | 240 ++ .../bouncycastle/math/ec/WNafPreCompInfo.java | 44 + .../math/ec/WTauNafMultiplier.java | 119 + .../math/ec/WTauNafPreCompInfo.java | 39 + .../org/bouncycastle/math/ec/ZTauElement.java | 37 + .../bouncycastle/oiw/ElGamalParameter.java | 54 + .../oiw/OIWObjectIdentifiers.java | 31 + .../java/org/bouncycastle/util/Arrays.java | 532 ++++ .../org/bouncycastle/util/BigIntegers.java | 78 + .../bouncycastle/util/CollectionStore.java | 57 + .../java/org/bouncycastle/util/IPAddress.java | 188 ++ .../java/org/bouncycastle/util/Selector.java | 8 + .../java/org/bouncycastle/util/Store.java | 9 + .../org/bouncycastle/util/StoreException.java | 18 + .../java/org/bouncycastle/util/Strings.java | 304 ++ .../bouncycastle/util/encoders/Base64.java | 121 + .../util/encoders/Base64Encoder.java | 298 ++ .../util/encoders/BufferedDecoder.java | 96 + .../util/encoders/BufferedEncoder.java | 96 + .../bouncycastle/util/encoders/Encoder.java | 17 + .../org/bouncycastle/util/encoders/Hex.java | 131 + .../util/encoders/HexEncoder.java | 172 + .../util/encoders/HexTranslator.java | 87 + .../util/encoders/Translator.java | 23 + .../bouncycastle/util/encoders/UrlBase64.java | 129 + .../util/encoders/UrlBase64Encoder.java | 25 + .../util/io/StreamOverflowException.java | 12 + .../org/bouncycastle/util/io/Streams.java | 87 + .../bouncycastle/util/io/TeeInputStream.java | 62 + .../bouncycastle/util/io/TeeOutputStream.java | 52 + .../com/codename1/crypto/package.html | 9 + .../org/bouncycastle/asn1/package.html | 5 + .../org/bouncycastle/asn1/pkcs/package.html | 5 + .../org/bouncycastle/asn1/sec/package.html | 5 + .../org/bouncycastle/asn1/util/package.html | 5 + .../org/bouncycastle/asn1/x509/package.html | 5 + .../asn1/x509/qualified/package.html | 5 + .../org/bouncycastle/asn1/x9/package.html | 5 + .../crypto/agreement/package.html | 5 + .../bouncycastle/crypto/digests/package.html | 5 + .../crypto/encodings/package.html | 5 + .../bouncycastle/crypto/engines/package.html | 5 + .../crypto/generators/package.html | 5 + .../org/bouncycastle/crypto/io/package.html | 5 + .../org/bouncycastle/crypto/macs/package.html | 5 + .../bouncycastle/crypto/modes/package.html | 5 + .../org/bouncycastle/crypto/package.html | 5 + .../bouncycastle/crypto/paddings/package.html | 5 + .../bouncycastle/crypto/params/package.html | 5 + .../org/bouncycastle/crypto/prng/package.html | 5 + .../bouncycastle/crypto/signers/package.html | 5 + .../org/bouncycastle/crypto/tls/package.html | 5 + .../org/bouncycastle/crypto/util/package.html | 5 + .../org/bouncycastle/math/ec/package.html | 5 + .../org/bouncycastle/oiw/package.html | 5 + .../bouncycastle/util/encoders/package.html | 5 + .../java/com/codenameone/FilechooserTest.java | 21 + ios/bouncy-castle-ios.iml | 14 + ios/pom.xml | 34 + javascript/bouncy-castle-javascript.iml | 14 + javascript/pom.xml | 34 + javase/bouncy-castle-javase.iml | 18 + javase/pom.xml | 38 + lib/bouncy-castle-lib.iml | 13 + lib/pom.xml | 122 + pom.xml | 267 ++ print-version.sh | 15 + tests/.mvn/jvm.config | 0 tests/bouncy-castle-tests.iml | 12 + tests/common/bouncy-castle-tests-common.iml | 19 + tests/common/codenameone_settings.properties | 29 + tests/common/nbactions.xml | 20 + tests/common/pom.xml | 322 ++ tests/common/src/main/css/theme.css | 9 + .../java/com/codenameone/LibraryTests.java | 66 + .../java/com/codenameone/MyFirstTest.java | 23 + tests/javase/bouncy-castle-tests-javase.iml | 22 + tests/javase/pom.xml | 149 + tests/pom.xml | 106 + update-version.sh | 57 + win/bouncy-castle-win.iml | 14 + win/pom.xml | 34 + 657 files changed, 82250 insertions(+), 1 deletion(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/libraries/Maven__com_codenameone_codenameone_core_7_0_26.xml create mode 100644 .idea/libraries/Maven__com_codenameone_codenameone_core_7_0_8_b6.xml create mode 100644 .idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_26.xml create mode 100644 .idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_8_b6.xml create mode 100644 .idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml create mode 100644 .idea/libraries/Maven__org_xerial_sqlite_jdbc_3_7_15_M1.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 android/bouncy-castle-android.iml create mode 100644 android/pom.xml create mode 100644 bouncy-castle.iml create mode 100644 common/bouncy-castle-common.iml create mode 100644 common/codenameone_library.properties create mode 100644 common/codenameone_library_appended.properties create mode 100644 common/codenameone_library_required.properties create mode 100644 common/manifest.properties create mode 100644 common/pom.xml create mode 100644 common/src/main/css/index.txt create mode 100644 common/src/main/css/theme.css create mode 100644 common/src/main/java/com/codename1/crypto/EncryptedStorage.java create mode 100644 common/src/main/java/com/codenameone/MyLibrary.java create mode 100644 common/src/main/java/javabc/BigInteger.java create mode 100644 common/src/main/java/javabc/FilterInputStream.java create mode 100644 common/src/main/java/javabc/FilterOutputStream.java create mode 100644 common/src/main/java/javabc/SecureRandom.java create mode 100644 common/src/main/java/org/bouncycastle/LICENSE.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Choice.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Encodable.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Encoding.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Enumerated.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Exception.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Generator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1InputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Integer.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Null.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Object.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1ObjectIdentifier.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1OctetString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1OctetStringParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1OutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1ParsingException.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Primitive.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Sequence.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1SequenceParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1Set.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1SetParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1StreamParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1String.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObject.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObjectParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecific.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecificParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERConstructedOctetString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERFactory.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BEROctetString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BEROctetStringGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BEROctetStringParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BEROutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERSequence.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERSequenceGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERSequenceParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERSet.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERSetParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERTaggedObject.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERTaggedObjectParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/BERTags.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERApplicationSpecific.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERBMPString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERBitString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERBoolean.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DEREncodableVector.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DEREnumerated.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERExternal.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERExternalParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERFactory.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERGeneralString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERIA5String.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERInteger.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERNull.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERNumericString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DEROctetString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DEROctetStringParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DEROutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERPrintableString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERSequence.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERSequenceGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERSequenceParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERSet.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERSetParser.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERT61String.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERTaggedObject.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERTags.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERUTCTime.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERUTF8String.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERUniversalString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DERVisibleString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DLOutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DLSequence.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DLSet.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DLTaggedObject.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DateFormatter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/InMemoryRepresentable.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/IndefiniteLengthInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/LazyConstructionEnumeration.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/LazyEncodedSequence.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/LimitedInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/OIDTokenizer.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/StreamUtil.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/Attribute.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/CRLBag.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/CertBag.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequest.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/ContentInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/DHParameter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedData.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptionScheme.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/MacData.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/PBEParameter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Parameters.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/PBKDF2Params.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/Pfx.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPublicKey.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/SafeBag.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/pkcs/SignerInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKey.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/sec/SECNamedCurves.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/util/DERDump.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/DirectoryString.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/RDN.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/X500Name.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/X500NameStyle.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AccessDescription.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AttCertIssuer.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Attribute.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificate.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/CRLDistPoint.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/CRLNumber.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/CertPolicyId.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Certificate.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/CertificateList.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/CertificatePair.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/CertificatePolicies.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/DigestInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/DisplayText.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/DistributionPoint.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/DistributionPointName.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Extension.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Extensions.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/ExtensionsGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/GeneralName.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/GeneralSubtree.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Holder.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/IetfAttrSyntax.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/NoticeReference.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/PolicyInformation.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/PolicyMappings.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierId.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/ReasonFlags.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/RoleSyntax.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/TBSCertList.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificate.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificateStructure.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Target.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/TargetInformation.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Targets.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/Time.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/UserNotice.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/V2Form.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509CertificateStructure.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509Extension.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509Name.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509NameEntryConverter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/BiometricData.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/QCStatement.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/sigi/PersonalData.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/DHDomainParameters.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/DHPublicKey.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/DHValidationParms.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/KeySpecificInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/OtherInfo.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X962Parameters.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9Curve.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9ECParameters.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9ECParametersHolder.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9ECPoint.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9FieldElement.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9FieldID.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9IntegerConverter.java create mode 100644 common/src/main/java/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/AsymmetricBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/BasicAgreement.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/BlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/BufferedBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/CipherKeyGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/CipherParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/CryptoException.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/DSA.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/DataLengthException.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/DerivationFunction.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/DerivationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/ExtendedDigest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/InvalidCipherTextException.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/KeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/Mac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/MaxBytesExceededException.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/PBEParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/RuntimeCryptoException.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/Signer.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/SignerWithRecovery.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/StreamBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/StreamCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/Wrapper.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/DHAgreement.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/DHBasicAgreement.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Client.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Server.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Util.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/GeneralDigest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/LongDigest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/MD2Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/MD4Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/MD5Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/NullDigest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD128Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD160Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD256Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD320Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/SHA1Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/SHA224Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/SHA256Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/SHA384Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/SHA512Digest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/ShortenedDigest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/TigerDigest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/digests/WhirlpoolDigest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/encodings/OAEPEncoding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/encodings/PKCS1Encoding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/AESEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/AESFastEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/AESLightEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/AESWrapEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/BlowfishEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/DESEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/DESedeEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/DESedeWrapEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/HC128Engine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/HC256Engine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/IDEAEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/IESEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/NullEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/RSABlindedEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/RSABlindingEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/RSACoreEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/RSAEngine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/engines/Salsa20Engine.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DESKeyGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DHParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DHParametersHelper.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/DSAParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/generators/SCrypt.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/CipherInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/CipherOutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/DigestInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/DigestOutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/MacInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/MacOutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/SignerInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/io/SignerOutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/BlockCipherMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/CMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/GOST28147Mac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/HMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/OldHMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/macs/VMPCMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/AEADBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/CBCBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/CCMBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/CFBBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/CTSBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/EAXBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/GCMBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/GOFBBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/OFBBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/PaddedBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/SICBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/BlockCipherPadding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/PKCS7Padding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/TBCPadding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/X923Padding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/paddings/ZeroBytePadding.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/AEADParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/CCMParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DESParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DESedeParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DHKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DHParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DHPublicKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DHValidationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DSAKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DSAParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/DSAValidationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ECDomainParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ECKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ECPublicKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ElGamalParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/GOST3410Parameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/IESParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/IESWithCipherParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ISO18033KDFParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/KDFParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/KeyParameter.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/MGFParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/MQVPrivateParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/MQVPublicParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ParametersWithIV.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ParametersWithRandom.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSBox.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSalt.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/RC2Parameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/RC5Parameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/RSABlindingParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/RSAKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/prng/DigestRandomGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/prng/RandomGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/DSADigestSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/DSASigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/ECNRSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/GOST3410Signer.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/GenericSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2Signer.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/PSSSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/signers/RSADigestSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/AlertDescription.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/AlertLevel.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/ByteQueue.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/Certificate.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/CertificateRequest.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/CertificateVerifyer.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/CipherSuite.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/ClientCertificateType.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/CombinedHash.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/CompressionMethod.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/ContentType.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsClient.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/DigestAlgorithm.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/ECCurveType.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/ECPointFormat.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/ExtensionType.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/HandshakeType.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsClient.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/NamedCurve.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/PSKTlsClient.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/ProtocolVersion.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/RecordStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/SRPTlsClient.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/SSL3Mac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/SecurityParameters.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsAuthentication.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsBlockCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsCipherFactory.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsClient.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContext.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContextImpl.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsCompression.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsCredentials.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsDSSSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsECDSASigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsFatalAlert.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsMac.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCipher.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCompression.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsOutputStream.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKIdentity.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsProtocolHandler.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsRSASigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAUtils.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsRuntimeException.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsSigner.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsSignerCredentials.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/tls/TlsUtils.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/util/Pack.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java create mode 100644 common/src/main/java/org/bouncycastle/crypto/util/PublicKeyFactory.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ECAlgorithms.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ECConstants.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ECCurve.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ECFieldElement.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ECMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ECPoint.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/FpNafMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/IntArray.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/PreCompInfo.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ReferenceMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/SimpleBigDecimal.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/Tnaf.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/WNafMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/WNafPreCompInfo.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/WTauNafMultiplier.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/WTauNafPreCompInfo.java create mode 100644 common/src/main/java/org/bouncycastle/math/ec/ZTauElement.java create mode 100644 common/src/main/java/org/bouncycastle/oiw/ElGamalParameter.java create mode 100644 common/src/main/java/org/bouncycastle/oiw/OIWObjectIdentifiers.java create mode 100644 common/src/main/java/org/bouncycastle/util/Arrays.java create mode 100644 common/src/main/java/org/bouncycastle/util/BigIntegers.java create mode 100644 common/src/main/java/org/bouncycastle/util/CollectionStore.java create mode 100644 common/src/main/java/org/bouncycastle/util/IPAddress.java create mode 100644 common/src/main/java/org/bouncycastle/util/Selector.java create mode 100644 common/src/main/java/org/bouncycastle/util/Store.java create mode 100644 common/src/main/java/org/bouncycastle/util/StoreException.java create mode 100644 common/src/main/java/org/bouncycastle/util/Strings.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/Base64.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/Base64Encoder.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/BufferedDecoder.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/BufferedEncoder.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/Encoder.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/Hex.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/HexEncoder.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/HexTranslator.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/Translator.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/UrlBase64.java create mode 100644 common/src/main/java/org/bouncycastle/util/encoders/UrlBase64Encoder.java create mode 100644 common/src/main/java/org/bouncycastle/util/io/StreamOverflowException.java create mode 100644 common/src/main/java/org/bouncycastle/util/io/Streams.java create mode 100644 common/src/main/java/org/bouncycastle/util/io/TeeInputStream.java create mode 100644 common/src/main/java/org/bouncycastle/util/io/TeeOutputStream.java create mode 100644 common/src/main/resources/com/codename1/crypto/package.html create mode 100644 common/src/main/resources/org/bouncycastle/asn1/package.html create mode 100644 common/src/main/resources/org/bouncycastle/asn1/pkcs/package.html create mode 100644 common/src/main/resources/org/bouncycastle/asn1/sec/package.html create mode 100644 common/src/main/resources/org/bouncycastle/asn1/util/package.html create mode 100644 common/src/main/resources/org/bouncycastle/asn1/x509/package.html create mode 100644 common/src/main/resources/org/bouncycastle/asn1/x509/qualified/package.html create mode 100644 common/src/main/resources/org/bouncycastle/asn1/x9/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/agreement/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/digests/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/encodings/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/engines/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/generators/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/io/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/macs/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/modes/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/paddings/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/params/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/prng/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/signers/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/tls/package.html create mode 100644 common/src/main/resources/org/bouncycastle/crypto/util/package.html create mode 100644 common/src/main/resources/org/bouncycastle/math/ec/package.html create mode 100644 common/src/main/resources/org/bouncycastle/oiw/package.html create mode 100644 common/src/main/resources/org/bouncycastle/util/encoders/package.html create mode 100644 common/src/test/java/com/codenameone/FilechooserTest.java create mode 100644 ios/bouncy-castle-ios.iml create mode 100644 ios/pom.xml create mode 100644 javascript/bouncy-castle-javascript.iml create mode 100644 javascript/pom.xml create mode 100644 javase/bouncy-castle-javase.iml create mode 100644 javase/pom.xml create mode 100644 lib/bouncy-castle-lib.iml create mode 100644 lib/pom.xml create mode 100644 pom.xml create mode 100644 print-version.sh create mode 100644 tests/.mvn/jvm.config create mode 100644 tests/bouncy-castle-tests.iml create mode 100644 tests/common/bouncy-castle-tests-common.iml create mode 100644 tests/common/codenameone_settings.properties create mode 100644 tests/common/nbactions.xml create mode 100644 tests/common/pom.xml create mode 100644 tests/common/src/main/css/theme.css create mode 100644 tests/common/src/main/java/com/codenameone/LibraryTests.java create mode 100644 tests/common/src/test/java/com/codenameone/MyFirstTest.java create mode 100644 tests/javase/bouncy-castle-tests-javase.iml create mode 100644 tests/javase/pom.xml create mode 100644 tests/pom.xml create mode 100755 update-version.sh create mode 100644 win/bouncy-castle-win.iml create mode 100644 win/pom.xml diff --git a/.gitignore b/.gitignore index f904d2e..b03da2d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /nbproject/private/ /build/ -/dist/ \ No newline at end of file +/dist/ +target +.DS_Store +/common/src/main/build \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..29a646a --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +bouncy-castle \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..15da752 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..1533b9c --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..7a1b5d7 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_codenameone_codenameone_core_7_0_26.xml b/.idea/libraries/Maven__com_codenameone_codenameone_core_7_0_26.xml new file mode 100644 index 0000000..7804aff --- /dev/null +++ b/.idea/libraries/Maven__com_codenameone_codenameone_core_7_0_26.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_codenameone_codenameone_core_7_0_8_b6.xml b/.idea/libraries/Maven__com_codenameone_codenameone_core_7_0_8_b6.xml new file mode 100644 index 0000000..6d284d7 --- /dev/null +++ b/.idea/libraries/Maven__com_codenameone_codenameone_core_7_0_8_b6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_26.xml b/.idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_26.xml new file mode 100644 index 0000000..caa0e38 --- /dev/null +++ b/.idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_26.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_8_b6.xml b/.idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_8_b6.xml new file mode 100644 index 0000000..ed5b19a --- /dev/null +++ b/.idea/libraries/Maven__com_codenameone_codenameone_javase_7_0_8_b6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml b/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml new file mode 100644 index 0000000..f674d8e --- /dev/null +++ b/.idea/libraries/Maven__com_jhlabs_filters_2_0_235_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_7_15_M1.xml b/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_7_15_M1.xml new file mode 100644 index 0000000..574c7a0 --- /dev/null +++ b/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_7_15_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..de7b9eb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..59904f7 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android/bouncy-castle-android.iml b/android/bouncy-castle-android.iml new file mode 100644 index 0000000..e1247b5 --- /dev/null +++ b/android/bouncy-castle-android.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/pom.xml b/android/pom.xml new file mode 100644 index 0000000..20a2f32 --- /dev/null +++ b/android/pom.xml @@ -0,0 +1,119 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle + 1.0 + + com.codenameone + bouncy-castle-android + 1.0 + + bouncy-castle-android + + src/main/dummy + + + src/main/java + + + src/main/resources + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + + + package + + + + + + + + + + + + + + run + + + + + + + + + + ${project.groupId} + ${cn1lib.name}-common + ${project.version} + + + + + + kotlin + + + + codenameone_kotlin.properties + + + + + org.jetbrains.kotlin + kotlin-stdlib + + + org.jetbrains + annotations + + + + + + org.jetbrains.kotlin + kotlin-maven-plugin + + + + + + + + diff --git a/bouncy-castle.iml b/bouncy-castle.iml new file mode 100644 index 0000000..f409c0e --- /dev/null +++ b/bouncy-castle.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/common/bouncy-castle-common.iml b/common/bouncy-castle-common.iml new file mode 100644 index 0000000..b6a6030 --- /dev/null +++ b/common/bouncy-castle-common.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/codenameone_library.properties b/common/codenameone_library.properties new file mode 100644 index 0000000..a80328d --- /dev/null +++ b/common/codenameone_library.properties @@ -0,0 +1,4 @@ +# +#Wed Jan 09 17:59:31 IST 2013 +codename1.languageLevel=5 +codename1.version=1.0 diff --git a/common/codenameone_library_appended.properties b/common/codenameone_library_appended.properties new file mode 100644 index 0000000..3dc34e8 --- /dev/null +++ b/common/codenameone_library_appended.properties @@ -0,0 +1,5 @@ +#Place here properties that should be appended to an existed property if exists +#in the project codenameone_settings.properties for example codename1.arg.android.xpermissions +#is an appended type property. +# +#Wed Jan 09 17:59:31 IST 2013 diff --git a/common/codenameone_library_required.properties b/common/codenameone_library_required.properties new file mode 100644 index 0000000..9bee35c --- /dev/null +++ b/common/codenameone_library_required.properties @@ -0,0 +1,8 @@ +#Place here properties that are required to build this Library and if they have +#a conflict with the main project or with other cn1lib the refresh cn1lib action +#will fail. +#For example codename1.arg.android.includeGPlayServices is a required property type, if the cn1lib +#needs the google play services but the main project marked this property to false +#The refresh cn1lib action will fail. +# +#Wed Jan 09 17:59:31 IST 2013 diff --git a/common/manifest.properties b/common/manifest.properties new file mode 100644 index 0000000..4da354b --- /dev/null +++ b/common/manifest.properties @@ -0,0 +1,2 @@ +# Codename One libray manifest + diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..d206efc --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,290 @@ + + + + + com.codenameone + bouncy-castle + 1.0 + + 4.0.0 + com.codenameone + bouncy-castle-common + 1.0 + jar + + UTF-8 + 8 + 8 + + + + + + + com.codenameone + codenameone-core + ${cn1.version} + provided + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9 + + + build-javadoc + + jar + + post-integration-test + + true + + + + + + 1.8 + protected + false + org.asciidoctor.Asciidoclet + + org.asciidoctor + asciidoclet + 1.5.6 + + ../common/src/main/resources/overview.adoc + + --base-dir ${project.basedir} + --attribute "name=${project.name}" + --attribute "version=${project.version}" + --attribute "title-link=https://github.com/shannah/CodeRAD[${project.name} ${project.version}]" + + + + https://www.codenameone.com/javadoc/ + ${basedir}/../javadoc-dependencies/com.codename1 + + + + + + com.codenameone + codenameone-maven-plugin + + + generate-gui-sources + process-sources + + generate-gui-sources + + + + cn1-compliance-check + process-classes + + compliance-check + + + + build-legacy-cn1lib + package + + cn1lib + + + + + + + + + + + + + kotlin + + + + ${basedir}/src/main/kotlin + + + + + org.jetbrains.kotlin + kotlin-stdlib + + + org.jetbrains + annotations + + + + + + org.jetbrains.kotlin + kotlin-maven-plugin + + + + + + + appended-properties + + + ${basedir}/codenameone_library_appended.properties + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + + + copy-library-appended-properties + process-resources + + + + + + + + + + + run + + + + + + + + + required-properties + + + ${basedir}/codenameone_library_required.properties + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + + + copy-library-required-properties + process-resources + + + + + + + + + + + run + + + + + + + + + + copy-css + + + + ${basedir}/src/main/css + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + + + copy-css + process-resources + + + + + + + + + + + + + + + + run + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + attach-css + package + + attach-artifact + + + + + ${project.build.directory}/${project.build.finalName}-cn1css.zip + zip + cn1css + + + + + + + + + + + + diff --git a/common/src/main/css/index.txt b/common/src/main/css/index.txt new file mode 100644 index 0000000..e69de29 diff --git a/common/src/main/css/theme.css b/common/src/main/css/theme.css new file mode 100644 index 0000000..abd96a1 --- /dev/null +++ b/common/src/main/css/theme.css @@ -0,0 +1 @@ +/* CSS file for filechooser */ diff --git a/common/src/main/java/com/codename1/crypto/EncryptedStorage.java b/common/src/main/java/com/codename1/crypto/EncryptedStorage.java new file mode 100644 index 0000000..caf4af4 --- /dev/null +++ b/common/src/main/java/com/codename1/crypto/EncryptedStorage.java @@ -0,0 +1,154 @@ +/* +* Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + *

        + * The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. + *

        + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package com.codename1.crypto; + +import com.codename1.io.Log; +import com.codename1.io.Storage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.engines.AESEngine; +import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * A Storage implementation that seamlessly encrypts it's contents based on a key. To setup this + * encryption use the Storage.install() method, notice that this only applies to storage and doesn't + * apply to the database or FileSystemStorage! + * + * @author Shai Almog + */ +public class EncryptedStorage extends Storage{ + private PaddedBufferedBlockCipher encryptCipher; + private PaddedBufferedBlockCipher decryptCipher; + + private byte[] key; + + @Override + public InputStream createInputStream(String name) throws IOException { + try { + byte[] buf = new byte[16]; + byte[] obuf = new byte[512]; + InputStream in = super.createInputStream(name); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + int noBytesRead = 0; + int noBytesProcessed = 0; + + while ((noBytesRead = in.read(buf)) >= 0) { + noBytesProcessed = decryptCipher.processBytes(buf, 0, noBytesRead, obuf, 0); + out.write(obuf, 0, noBytesProcessed); + } + noBytesProcessed = decryptCipher.doFinal(obuf, 0); + out.write(obuf, 0, noBytesProcessed); + + out.close(); + + return new ByteArrayInputStream(out.toByteArray()); + } catch(InvalidCipherTextException err) { + throw new IOException(err.toString()); + } + } + + @Override + public OutputStream createOutputStream(String name) throws IOException { + return new EncryptedOutputStream(super.createOutputStream(name)); + } + + /** + * Use this method + */ + public static void install(String keyStr) { + try { + byte[] bytes = keyStr.getBytes("UTF-8"); + byte[] key = new byte[24]; + for(int iter = 0 ;iter < key.length ; iter++) { + key[iter] = bytes[iter % bytes.length]; + } + EncryptedStorage i = new EncryptedStorage(); + i.key = key; + i.InitCiphers(); + Storage.setStorageInstance(i); + } catch (UnsupportedEncodingException ex) { + // moronic exception + Log.e(ex); + } + } + + private void InitCiphers(){ + encryptCipher = new PaddedBufferedBlockCipher(new AESEngine()); + encryptCipher.init(true, new KeyParameter(key)); + decryptCipher = new PaddedBufferedBlockCipher(new AESEngine()); + decryptCipher.init(false, new KeyParameter(key)); + } + + class EncryptedOutputStream extends OutputStream { + private final OutputStream underlying; + private byte[] obuf = new byte[16536]; + + public EncryptedOutputStream(OutputStream underlying) { + this.underlying = underlying; + } + + @Override + public void close() throws IOException { + flush(); + underlying.close(); + } + + @Override + public void flush() throws IOException { + try { + int size = encryptCipher.doFinal(obuf, 0); + + if(size > 0) { + underlying.write(obuf, 0, size); + } + } catch(InvalidCipherTextException err) { + throw new IOException(err.toString()); + } + underlying.flush(); + } + + @Override + public void write(byte[] b) throws IOException { + write(b, 0, b.length); + } + + @Override + public void write(int b) throws IOException { + write(new byte[] { (byte)b }); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + int encLen = (len / 16 + 1) * 16; + if(obuf.length < encLen) { + obuf = new byte[encLen + 16]; + } + int size = encryptCipher.processBytes(b, off, len, obuf, 0); + underlying.write(obuf, 0, size); + } + } +} diff --git a/common/src/main/java/com/codenameone/MyLibrary.java b/common/src/main/java/com/codenameone/MyLibrary.java new file mode 100644 index 0000000..e9789cb --- /dev/null +++ b/common/src/main/java/com/codenameone/MyLibrary.java @@ -0,0 +1,7 @@ +package com.codenameone; + +class MyLibrary { + public void helloWorld() { + System.out.println("Hello World"); + } +} \ No newline at end of file diff --git a/common/src/main/java/javabc/BigInteger.java b/common/src/main/java/javabc/BigInteger.java new file mode 100644 index 0000000..83f3c16 --- /dev/null +++ b/common/src/main/java/javabc/BigInteger.java @@ -0,0 +1,2775 @@ +package javabc; + +import java.util.Random; +import java.util.Stack; + +public class BigInteger +{ + // The primes b/w 2 and ~2^10 + /* + 3 5 7 11 13 17 19 23 29 + 31 37 41 43 47 53 59 61 67 71 + 73 79 83 89 97 101 103 107 109 113 + 127 131 137 139 149 151 157 163 167 173 + 179 181 191 193 197 199 211 223 227 229 + 233 239 241 251 257 263 269 271 277 281 + 283 293 307 311 313 317 331 337 347 349 + 353 359 367 373 379 383 389 397 401 409 + 419 421 431 433 439 443 449 457 461 463 + 467 479 487 491 499 503 509 521 523 541 + 547 557 563 569 571 577 587 593 599 601 + 607 613 617 619 631 641 643 647 653 659 + 661 673 677 683 691 701 709 719 727 733 + 739 743 751 757 761 769 773 787 797 809 + 811 821 823 827 829 839 853 857 859 863 + 877 881 883 887 907 911 919 929 937 941 + 947 953 967 971 977 983 991 997 + 1009 1013 1019 1021 1031 + */ + + // Each list has a product < 2^31 + private static final int[][] primeLists = new int[][] + { + new int[]{ 3, 5, 7, 11, 13, 17, 19, 23 }, + new int[]{ 29, 31, 37, 41, 43 }, + new int[]{ 47, 53, 59, 61, 67 }, + new int[]{ 71, 73, 79, 83 }, + new int[]{ 89, 97, 101, 103 }, + + new int[]{ 107, 109, 113, 127 }, + new int[]{ 131, 137, 139, 149 }, + new int[]{ 151, 157, 163, 167 }, + new int[]{ 173, 179, 181, 191 }, + new int[]{ 193, 197, 199, 211 }, + + new int[]{ 223, 227, 229 }, + new int[]{ 233, 239, 241 }, + new int[]{ 251, 257, 263 }, + new int[]{ 269, 271, 277 }, + new int[]{ 281, 283, 293 }, + + new int[]{ 307, 311, 313 }, + new int[]{ 317, 331, 337 }, + new int[]{ 347, 349, 353 }, + new int[]{ 359, 367, 373 }, + new int[]{ 379, 383, 389 }, + + new int[]{ 397, 401, 409 }, + new int[]{ 419, 421, 431 }, + new int[]{ 433, 439, 443 }, + new int[]{ 449, 457, 461 }, + new int[]{ 463, 467, 479 }, + + new int[]{ 487, 491, 499 }, + new int[]{ 503, 509, 521 }, + new int[]{ 523, 541, 547 }, + new int[]{ 557, 563, 569 }, + new int[]{ 571, 577, 587 }, + + new int[]{ 593, 599, 601 }, + new int[]{ 607, 613, 617 }, + new int[]{ 619, 631, 641 }, + new int[]{ 643, 647, 653 }, + new int[]{ 659, 661, 673 }, + + new int[]{ 677, 683, 691 }, + new int[]{ 701, 709, 719 }, + new int[]{ 727, 733, 739 }, + new int[]{ 743, 751, 757 }, + new int[]{ 761, 769, 773 }, + + new int[]{ 787, 797, 809 }, + new int[]{ 811, 821, 823 }, + new int[]{ 827, 829, 839 }, + new int[]{ 853, 857, 859 }, + new int[]{ 863, 877, 881 }, + + new int[]{ 883, 887, 907 }, + new int[]{ 911, 919, 929 }, + new int[]{ 937, 941, 947 }, + new int[]{ 953, 967, 971 }, + new int[]{ 977, 983, 991 }, + + new int[]{ 997, 1009, 1013 }, + new int[]{ 1019, 1021, 1031 }, + }; + + private static int[] primeProducts; + + private static final long IMASK = 0xffffffffL; + + private static final int[] ZERO_MAGNITUDE = new int[0]; + + public static final BigInteger ZERO = new BigInteger(0, ZERO_MAGNITUDE); + public static final BigInteger ONE = valueOf(1); + private static final BigInteger TWO = valueOf(2); + private static final BigInteger THREE = valueOf(3); + + static + { + ZERO.nBits = 0; ZERO.nBitLength = 0; + ONE.nBits = 1; ONE.nBitLength = 1; + TWO.nBits = 1; TWO.nBitLength = 2; + + primeProducts = new int[primeLists.length]; + + for (int i = 0; i < primeLists.length; ++i) + { + int[] primeList = primeLists[i]; + int product = 1; + for (int j = 0; j < primeList.length; ++j) + { + product *= primeList[j]; + } + primeProducts[i] = product; + } + } + + private int sign; // -1 means -ve; +1 means +ve; 0 means 0; + private int[] magnitude; // array of ints with [0] being the most significant + private int nBits = -1; // cache bitCount() value + private int nBitLength = -1; // cache bitLength() value + private long mQuote = -1L; // -m^(-1) mod b, b = 2^32 (see Montgomery mult.) + + private BigInteger() + { + } + + private BigInteger(int signum, int[] mag) + { + if (mag.length > 0) + { + sign = signum; + + int i = 0; + while (i < mag.length && mag[i] == 0) + { + i++; + } + if (i == 0) + { + magnitude = mag; + } + else + { + // strip leading 0 bytes + int[] newMag = new int[mag.length - i]; + System.arraycopy(mag, i, newMag, 0, newMag.length); + magnitude = newMag; + if (newMag.length == 0) + sign = 0; + } + } + else + { + magnitude = mag; + sign = 0; + } + } + + public BigInteger(String sval) throws NumberFormatException + { + this(sval, 10); + } + + public BigInteger(String sval, int rdx) throws NumberFormatException + { + if (sval.length() == 0) + { + throw new NumberFormatException("Zero length BigInteger"); + } + + if (rdx < Character.MIN_RADIX || rdx > Character.MAX_RADIX) + { + throw new NumberFormatException("Radix out of range"); + } + + int index = 0; + sign = 1; + + if (sval.charAt(0) == '-') + { + if (sval.length() == 1) + { + throw new NumberFormatException("Zero length BigInteger"); + } + + sign = -1; + index = 1; + } + + // strip leading zeros from the string value + while (index < sval.length() && Character.digit(sval.charAt(index), rdx) == 0) + { + index++; + } + + if (index >= sval.length()) + { + // zero value - we're done + sign = 0; + magnitude = new int[0]; + return; + } + + ////// + // could we work out the max number of ints required to store + // sval.length digits in the given base, then allocate that + // storage in one hit?, then generate the magnitude in one hit too? + ////// + + BigInteger b = ZERO; + BigInteger r = valueOf(rdx); + while (index < sval.length()) + { + // (optimise this by taking chunks of digits instead?) + b = b.multiply(r).add(valueOf(Character.digit(sval.charAt(index), rdx))); + index++; + } + + magnitude = b.magnitude; + return; + } + + public BigInteger(byte[] bval) throws NumberFormatException + { + if (bval.length == 0) + { + throw new NumberFormatException("Zero length BigInteger"); + } + + sign = 1; + if (bval[0] < 0) + { + sign = -1; + } + magnitude = makeMagnitude(bval, sign); + if (magnitude.length == 0) { + sign = 0; + } + } + + /** + * If sign >= 0, packs bytes into an array of ints, most significant first + * If sign < 0, packs 2's complement of bytes into + * an array of ints, most significant first, + * adding an extra most significant byte in case bval = {0x80, 0x00, ..., 0x00} + * + * @param bval + * @param sign + * @return + */ + private int[] makeMagnitude(byte[] bval, int sign) + { + if (sign >= 0) { + int i; + int[] mag; + int firstSignificant; + + // strip leading zeros + for (firstSignificant = 0; firstSignificant < bval.length + && bval[firstSignificant] == 0; firstSignificant++); + + if (firstSignificant >= bval.length) + { + return new int[0]; + } + + int nInts = (bval.length - firstSignificant + 3) / 4; + int bCount = (bval.length - firstSignificant) % 4; + if (bCount == 0) + bCount = 4; + // n = k * (n / k) + n % k + // bval.length - firstSignificant + 3 = 4 * nInts + bCount - 1 + // bval.length - firstSignificant + 4 - bCount = 4 * nInts + + mag = new int[nInts]; + int v = 0; + int magnitudeIndex = 0; + for (i = firstSignificant; i < bval.length; i++) + { + // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts + // 1 <= bCount <= 4 + v <<= 8; + v |= bval[i] & 0xff; + bCount--; + if (bCount <= 0) + { + mag[magnitudeIndex] = v; + magnitudeIndex++; + bCount = 4; + v = 0; + } + } + // 4 - bCount + 4 * magnitudeIndex = 4 * nInts + // bCount = 4 * (1 + magnitudeIndex - nInts) + // 1 <= bCount <= 4 + // So bCount = 4 and magnitudeIndex = nInts = mag.length + +// if (magnitudeIndex < mag.length) +// { +// mag[magnitudeIndex] = v; +// } + return mag; + } + else { + int i; + int[] mag; + int firstSignificant; + + + // strip leading -1's + for (firstSignificant = 0; firstSignificant < bval.length - 1 + && bval[firstSignificant] == 0xff; firstSignificant++); + + int nBytes = bval.length; + boolean leadingByte = false; + + // check for -2^(n-1) + if (bval[firstSignificant] == 0x80) { + for (i = firstSignificant + 1; i < bval.length; i++) { + if (bval[i] != 0) { + break; + } + } + if (i == bval.length) { + nBytes++; + leadingByte = true; + } + } + + int nInts = (nBytes - firstSignificant + 3) / 4; + int bCount = (nBytes - firstSignificant) % 4; + if (bCount == 0) + bCount = 4; + + // n = k * (n / k) + n % k + // nBytes - firstSignificant + 3 = 4 * nInts + bCount - 1 + // nBytes - firstSignificant + 4 - bCount = 4 * nInts + // 1 <= bCount <= 4 + + mag = new int[nInts]; + int v = 0; + int magnitudeIndex = 0; + // nBytes + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts + // 1 <= bCount <= 4 + if (leadingByte) { + // bval.length + 1 + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts + bCount--; + // bval.length + 1 + 4 - (bCount + 1) - i + 4 * magnitudeIndex = 4 * nInts + // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts + if (bCount <= 0) + { + magnitudeIndex++; + bCount = 4; + } + // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts + // 1 <= bCount <= 4 + } + for (i = firstSignificant; i < bval.length; i++) + { + // bval.length + 4 - bCount - i + 4 * magnitudeIndex = 4 * nInts + // 1 <= bCount <= 4 + v <<= 8; + v |= ~bval[i] & 0xff; + bCount--; + if (bCount <= 0) + { + mag[magnitudeIndex] = v; + magnitudeIndex++; + bCount = 4; + v = 0; + } + } + // 4 - bCount + 4 * magnitudeIndex = 4 * nInts + // 1 <= bCount <= 4 + // bCount = 4 * (1 + magnitudeIndex - nInts) + // 1 <= bCount <= 4 + // So bCount = 4 and magnitudeIndex = nInts = mag.length + +// if (magnitudeIndex < mag.length) +// { +// mag[magnitudeIndex] = v; +// } + mag = inc(mag); + + // TODO Fix above so that this is not necessary? + if (mag[0] == 0) + { + int[] tmp = new int[mag.length - 1]; + System.arraycopy(mag, 1, tmp, 0, tmp.length); + mag = tmp; + } + + return mag; + } + } + + + + public BigInteger(int sign, byte[] mag) throws NumberFormatException + { + if (sign < -1 || sign > 1) + { + throw new NumberFormatException("Invalid sign value"); + } + + if (sign == 0) + { + this.sign = 0; + this.magnitude = new int[0]; + return; + } + + // copy bytes + this.magnitude = makeMagnitude(mag, 1); + this.sign = sign; + } + + public BigInteger(int numBits, Random rnd) throws IllegalArgumentException + { + if (numBits < 0) + { + throw new IllegalArgumentException("numBits must be non-negative"); + } + + this.nBits = -1; + this.nBitLength = -1; + + if (numBits == 0) + { +// this.sign = 0; + this.magnitude = ZERO_MAGNITUDE; + return; + } + + int nBytes = (numBits + 7) / 8; + + byte[] b = new byte[nBytes]; + nextRndBytes(rnd, b); + + // strip off any excess bits in the MSB + b[0] &= rndMask[8 * nBytes - numBits]; + + this.magnitude = makeMagnitude(b, 1); + this.sign = this.magnitude.length < 1 ? 0 : 1; + } + + private static final int BITS_PER_BYTE = 8; + private static final int BYTES_PER_INT = 4; + + /** + * strictly speaking this is a little dodgey from a compliance + * point of view as it forces people to be using SecureRandom as + * well, that being said - this implementation is for a crypto + * library and you do have the source! + */ + private void nextRndBytes(Random rnd, byte[] bytes) + { + int numRequested = bytes.length; + int numGot = 0, + r = 0; + + if (rnd instanceof javabc.SecureRandom) + { + ((javabc.SecureRandom)rnd).nextBytes(bytes); + } + else + { + for (; ; ) + { + for (int i = 0; i < BYTES_PER_INT; i++) + { + if (numGot == numRequested) + { + return; + } + + r = (i == 0 ? rnd.nextInt() : r >> BITS_PER_BYTE); + bytes[numGot++] = (byte)r; + } + } + } + } + + private static final byte[] rndMask = {(byte)255, 127, 63, 31, 15, 7, 3, 1}; + + public BigInteger(int bitLength, int certainty, Random rnd) throws ArithmeticException + { + if (bitLength < 2) + { + throw new ArithmeticException("bitLength < 2"); + } + + this.sign = 1; + this.nBitLength = bitLength; + + if (bitLength == 2) + { + this.magnitude = rnd.nextInt() < 0 + ? TWO.magnitude + : THREE.magnitude; + return; + } + + int nBytes = (bitLength + 7) / BITS_PER_BYTE; + int xBits = BITS_PER_BYTE * nBytes - bitLength; + byte mask = rndMask[xBits]; + + byte[] b = new byte[nBytes]; + + for (;;) + { + nextRndBytes(rnd, b); + + // strip off any excess bits in the MSB + b[0] &= mask; + + // ensure the leading bit is 1 (to meet the strength requirement) + b[0] |= (byte)(1 << (7 - xBits)); + + // ensure the trailing bit is 1 (i.e. must be odd) + b[nBytes - 1] |= (byte)1; + + this.magnitude = makeMagnitude(b, 1); + this.nBits = -1; + this.mQuote = -1L; + + if (certainty < 1) + break; + + if (this.isProbablePrime(certainty)) + break; + + if (bitLength > 32) + { + for (int rep = 0; rep < 10000; ++rep) + { + int n = 33 + (rnd.nextInt() >>> 1) % (bitLength - 2); + this.magnitude[this.magnitude.length - (n >>> 5)] ^= (1 << (n & 31)); + this.magnitude[this.magnitude.length - 1] ^= (rnd.nextInt() << 1); + this.mQuote = -1L; + + if (this.isProbablePrime(certainty)) + return; + } + } + } + } + + public BigInteger abs() + { + return (sign >= 0) ? this : this.negate(); + } + + /** + * return a = a + b - b preserved. + */ + private int[] add(int[] a, int[] b) + { + int tI = a.length - 1; + int vI = b.length - 1; + long m = 0; + + while (vI >= 0) + { + m += (((long)a[tI]) & IMASK) + (((long)b[vI--]) & IMASK); + a[tI--] = (int)m; + m >>>= 32; + } + + while (tI >= 0 && m != 0) + { + m += (((long)a[tI]) & IMASK); + a[tI--] = (int)m; + m >>>= 32; + } + + return a; + } + + /** + * return a = a + 1. + */ + private int[] inc(int[] a) + { + int tI = a.length - 1; + long m = 0; + + m = (((long)a[tI]) & IMASK) + 1L; + a[tI--] = (int)m; + m >>>= 32; + + while (tI >= 0 && m != 0) + { + m += (((long)a[tI]) & IMASK); + a[tI--] = (int)m; + m >>>= 32; + } + + return a; + } + + public BigInteger add(BigInteger val) throws ArithmeticException + { + if (val.sign == 0 || val.magnitude.length == 0) + return this; + if (this.sign == 0 || this.magnitude.length == 0) + return val; + + if (val.sign < 0) + { + if (this.sign > 0) + return this.subtract(val.negate()); + } + else + { + if (this.sign < 0) + return val.subtract(this.negate()); + } + + return addToMagnitude(val.magnitude); + } + + private BigInteger addToMagnitude( + int[] magToAdd) + { + int[] big, small; + if (this.magnitude.length < magToAdd.length) + { + big = magToAdd; + small = this.magnitude; + } + else + { + big = this.magnitude; + small = magToAdd; + } + + // Conservatively avoid over-allocation when no overflow possible + int limit = Integer.MAX_VALUE; + if (big.length == small.length) + limit -= small[0]; + + boolean possibleOverflow = (big[0] ^ (1 << 31)) >= limit; + int extra = possibleOverflow ? 1 : 0; + + int[] bigCopy = new int[big.length + extra]; + System.arraycopy(big, 0, bigCopy, extra, big.length); + + bigCopy = add(bigCopy, small); + + return new BigInteger(this.sign, bigCopy); + } + + public BigInteger and( + BigInteger value) + { + if (this.sign == 0 || value.sign == 0) + { + return ZERO; + } + + int[] aMag = this.sign > 0 + ? this.magnitude + : add(ONE).magnitude; + + int[] bMag = value.sign > 0 + ? value.magnitude + : value.add(ONE).magnitude; + + boolean resultNeg = sign < 0 && value.sign < 0; + int resultLength = Math.max(aMag.length, bMag.length); + int[] resultMag = new int[resultLength]; + + int aStart = resultMag.length - aMag.length; + int bStart = resultMag.length - bMag.length; + + for (int i = 0; i < resultMag.length; ++i) + { + int aWord = i >= aStart ? aMag[i - aStart] : 0; + int bWord = i >= bStart ? bMag[i - bStart] : 0; + + if (this.sign < 0) + { + aWord = ~aWord; + } + + if (value.sign < 0) + { + bWord = ~bWord; + } + + resultMag[i] = aWord & bWord; + + if (resultNeg) + { + resultMag[i] = ~resultMag[i]; + } + } + + BigInteger result = new BigInteger(1, resultMag); + + // TODO Optimise this case + if (resultNeg) + { + result = result.not(); + } + + return result; + } + + public BigInteger andNot( + BigInteger value) + { + return and(value.not()); + } + + public int bitCount() + { + if (nBits == -1) + { + if (sign < 0) + { + // TODO Optimise this case + nBits = not().bitCount(); + } + else + { + int sum = 0; + for (int i = 0; i < magnitude.length; i++) + { + sum += bitCounts[magnitude[i] & 0xff]; + sum += bitCounts[(magnitude[i] >> 8) & 0xff]; + sum += bitCounts[(magnitude[i] >> 16) & 0xff]; + sum += bitCounts[(magnitude[i] >> 24) & 0xff]; + } + nBits = sum; + } + } + + return nBits; + } + + private final static byte[] bitCounts = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, + 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, + 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, + 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, + 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, + 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, + 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, + 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, + 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, + 6, 6, 7, 6, 7, 7, 8}; + + private int bitLength(int indx, int[] mag) + { + int bitLength; + + if (mag.length == 0) + { + return 0; + } + else + { + while (indx != mag.length && mag[indx] == 0) + { + indx++; + } + + if (indx == mag.length) + { + return 0; + } + + // bit length for everything after the first int + bitLength = 32 * ((mag.length - indx) - 1); + + // and determine bitlength of first int + bitLength += bitLen(mag[indx]); + + if (sign < 0) + { + // Check if magnitude is a power of two + boolean pow2 = ((bitCounts[mag[indx] & 0xff]) + + (bitCounts[(mag[indx] >> 8) & 0xff]) + + (bitCounts[(mag[indx] >> 16) & 0xff]) + + (bitCounts[(mag[indx] >> 24) & 0xff])) == 1; + + for (int i = indx + 1; i < mag.length && pow2; i++) + { + pow2 = (mag[i] == 0); + } + + bitLength -= (pow2 ? 1 : 0); + } + } + + return bitLength; + } + + public int bitLength() + { + if (nBitLength == -1) + { + if (sign == 0) + { + nBitLength = 0; + } + else + { + nBitLength = bitLength(0, magnitude); + } + } + + return nBitLength; + } + + // + // bitLen(val) is the number of bits in val. + // + static int bitLen(int w) + { + // Binary search - decision tree (5 tests, rarely 6) + return (w < 1 << 15 ? (w < 1 << 7 + ? (w < 1 << 3 ? (w < 1 << 1 + ? (w < 1 << 0 ? (w < 0 ? 32 : 0) : 1) + : (w < 1 << 2 ? 2 : 3)) : (w < 1 << 5 + ? (w < 1 << 4 ? 4 : 5) + : (w < 1 << 6 ? 6 : 7))) + : (w < 1 << 11 + ? (w < 1 << 9 ? (w < 1 << 8 ? 8 : 9) : (w < 1 << 10 ? 10 : 11)) + : (w < 1 << 13 ? (w < 1 << 12 ? 12 : 13) : (w < 1 << 14 ? 14 : 15)))) : (w < 1 << 23 ? (w < 1 << 19 + ? (w < 1 << 17 ? (w < 1 << 16 ? 16 : 17) : (w < 1 << 18 ? 18 : 19)) + : (w < 1 << 21 ? (w < 1 << 20 ? 20 : 21) : (w < 1 << 22 ? 22 : 23))) : (w < 1 << 27 + ? (w < 1 << 25 ? (w < 1 << 24 ? 24 : 25) : (w < 1 << 26 ? 26 : 27)) + : (w < 1 << 29 ? (w < 1 << 28 ? 28 : 29) : (w < 1 << 30 ? 30 : 31))))); + } + + private boolean quickPow2Check() + { + return sign > 0 && nBits == 1; + } + + public int compareTo(Object o) + { + return compareTo((BigInteger)o); + } + + /** + * unsigned comparison on two arrays - note the arrays may + * start with leading zeros. + */ + private int compareTo(int xIndx, int[] x, int yIndx, int[] y) + { + while (xIndx != x.length && x[xIndx] == 0) + { + xIndx++; + } + + while (yIndx != y.length && y[yIndx] == 0) + { + yIndx++; + } + + return compareNoLeadingZeroes(xIndx, x, yIndx, y); + } + + private int compareNoLeadingZeroes(int xIndx, int[] x, int yIndx, int[] y) + { + int diff = (x.length - y.length) - (xIndx - yIndx); + + if (diff != 0) + { + return diff < 0 ? -1 : 1; + } + + // lengths of magnitudes the same, test the magnitude values + + while (xIndx < x.length) + { + int v1 = x[xIndx++]; + int v2 = y[yIndx++]; + + if (v1 != v2) + { + return (v1 ^ Integer.MIN_VALUE) < (v2 ^ Integer.MIN_VALUE) ? -1 : 1; + } + } + + return 0; + } + + public int compareTo(BigInteger val) + { + if (sign < val.sign) + return -1; + if (sign > val.sign) + return 1; + if (sign == 0) + return 0; + + return sign * compareTo(0, magnitude, 0, val.magnitude); + } + + /** + * return z = x / y - done in place (z value preserved, x contains the + * remainder) + */ + private int[] divide(int[] x, int[] y) + { + int xyCmp = compareTo(0, x, 0, y); + int[] count; + + if (xyCmp > 0) + { + int[] c; + + int shift = bitLength(0, x) - bitLength(0, y); + + if (shift > 1) + { + c = shiftLeft(y, shift - 1); + count = shiftLeft(ONE.magnitude, shift - 1); + if (shift % 32 == 0) + { + // Special case where the shift is the size of an int. + int countSpecial[] = new int[shift / 32 + 1]; + System.arraycopy(count, 0, countSpecial, 1, countSpecial.length - 1); + countSpecial[0] = 0; + count = countSpecial; + } + } + else + { + c = new int[x.length]; + count = new int[1]; + + System.arraycopy(y, 0, c, c.length - y.length, y.length); + count[0] = 1; + } + + int[] iCount = new int[count.length]; + + subtract(0, x, 0, c); + System.arraycopy(count, 0, iCount, 0, count.length); + + int xStart = 0; + int cStart = 0; + int iCountStart = 0; + + for (; ; ) + { + int cmp = compareTo(xStart, x, cStart, c); + + while (cmp >= 0) + { + subtract(xStart, x, cStart, c); + add(count, iCount); + cmp = compareTo(xStart, x, cStart, c); + } + + xyCmp = compareTo(xStart, x, 0, y); + + if (xyCmp > 0) + { + if (x[xStart] == 0) + { + xStart++; + } + + shift = bitLength(cStart, c) - bitLength(xStart, x); + + if (shift == 0) + { + shiftRightOneInPlace(cStart, c); + shiftRightOneInPlace(iCountStart, iCount); + } + else + { + shiftRightInPlace(cStart, c, shift); + shiftRightInPlace(iCountStart, iCount, shift); + } + + if (c[cStart] == 0) + { + cStart++; + } + + if (iCount[iCountStart] == 0) + { + iCountStart++; + } + } + else if (xyCmp == 0) + { + add(count, ONE.magnitude); + for (int i = xStart; i != x.length; i++) + { + x[i] = 0; + } + break; + } + else + { + break; + } + } + } + else if (xyCmp == 0) + { + count = new int[1]; + + count[0] = 1; + } + else + { + count = new int[1]; + + count[0] = 0; + } + + return count; + } + + public BigInteger divide(BigInteger val) throws ArithmeticException + { + if (val.sign == 0) + { + throw new ArithmeticException("Divide by zero"); + } + + if (sign == 0) + { + return BigInteger.ZERO; + } + + if (val.compareTo(BigInteger.ONE) == 0) + { + return this; + } + + int[] mag = new int[this.magnitude.length]; + System.arraycopy(this.magnitude, 0, mag, 0, mag.length); + + return new BigInteger(this.sign * val.sign, divide(mag, val.magnitude)); + } + + public BigInteger[] divideAndRemainder(BigInteger val) throws ArithmeticException + { + if (val.sign == 0) + { + throw new ArithmeticException("Divide by zero"); + } + + BigInteger biggies[] = new BigInteger[2]; + + if (sign == 0) + { + biggies[0] = biggies[1] = BigInteger.ZERO; + + return biggies; + } + + if (val.compareTo(BigInteger.ONE) == 0) + { + biggies[0] = this; + biggies[1] = BigInteger.ZERO; + + return biggies; + } + + int[] remainder = new int[this.magnitude.length]; + System.arraycopy(this.magnitude, 0, remainder, 0, remainder.length); + + int[] quotient = divide(remainder, val.magnitude); + + biggies[0] = new BigInteger(this.sign * val.sign, quotient); + biggies[1] = new BigInteger(this.sign, remainder); + + return biggies; + } + + public boolean equals(Object val) + { + if (val == this) + return true; + + if (!(val instanceof BigInteger)) + return false; + BigInteger biggie = (BigInteger)val; + + if (biggie.sign != sign || biggie.magnitude.length != magnitude.length) + return false; + + for (int i = 0; i < magnitude.length; i++) + { + if (biggie.magnitude[i] != magnitude[i]) + return false; + } + + return true; + } + + public BigInteger gcd(BigInteger val) + { + if (val.sign == 0) + return this.abs(); + else if (sign == 0) + return val.abs(); + + BigInteger r; + BigInteger u = this; + BigInteger v = val; + + while (v.sign != 0) + { + r = u.mod(v); + u = v; + v = r; + } + + return u; + } + + public int hashCode() + { + int hc = magnitude.length; + + if (magnitude.length > 0) + { + hc ^= magnitude[0]; + + if (magnitude.length > 1) + { + hc ^= magnitude[magnitude.length - 1]; + } + } + + return sign < 0 ? ~hc : hc; + } + + public int intValue() + { + if (magnitude.length == 0) + { + return 0; + } + + if (sign < 0) + { + return -magnitude[magnitude.length - 1]; + } + else + { + return magnitude[magnitude.length - 1]; + } + } + + public byte byteValue() + { + return (byte)intValue(); + } + + /** + * return whether or not a BigInteger is probably prime with a + * probability of 1 - (1/2)**certainty. + *

        + * From Knuth Vol 2, pg 395. + */ + public boolean isProbablePrime(int certainty) + { + if (certainty <= 0) + return true; + + if (sign == 0) + return false; + + BigInteger n = this.abs(); + + if (!n.testBit(0)) + return n.equals(TWO); + + if (n.equals(ONE)) + return false; + + // Try to reduce the penalty for really small numbers + int numLists = Math.min(n.bitLength() - 1, primeLists.length); + + for (int i = 0; i < numLists; ++i) + { + int test = n.remainder(primeProducts[i]); + + int[] primeList = primeLists[i]; + for (int j = 0; j < primeList.length; ++j) + { + int prime = primeList[j]; + int qRem = test % prime; + if (qRem == 0) + { + // We may find small numbers in the list + return n.bitLength() < 16 && n.intValue() == prime; + } + } + } + + // + // let n = 1 + 2^kq + // + BigInteger nMinusOne = n.subtract(ONE); + int s = nMinusOne.getLowestSetBit(); + BigInteger r = nMinusOne.shiftRight(s); + + Random random = new Random(); + do + { + BigInteger a; + + do + { + a = new BigInteger(n.bitLength(), random); + } + while (a.compareTo(ONE) <= 0 || a.compareTo(nMinusOne) >= 0); + + BigInteger y = a.modPow(r, n); + + if (!y.equals(ONE)) + { + int j = 0; + while (!y.equals(nMinusOne)) + { + if (++j == s) + { + return false; + } + + y = y.modPow(TWO, n); + + if (y.equals(ONE)) + { + return false; + } + } + } + + certainty -= 2; // composites pass for only 1/4 possible 'a' + } + while (certainty > 0); + + return true; + } + + public long longValue() + { + long val = 0; + + if (magnitude.length == 0) + { + return 0; + } + + if (magnitude.length > 1) + { + val = ((long)magnitude[magnitude.length - 2] << 32) + | (magnitude[magnitude.length - 1] & IMASK); + } + else + { + val = (magnitude[magnitude.length - 1] & IMASK); + } + + if (sign < 0) + { + return -val; + } + else + { + return val; + } + } + + public BigInteger max(BigInteger val) + { + return (compareTo(val) > 0) ? this : val; + } + + public BigInteger min(BigInteger val) + { + return (compareTo(val) < 0) ? this : val; + } + + public BigInteger mod(BigInteger m) throws ArithmeticException + { + if (m.sign <= 0) + { + throw new ArithmeticException("BigInteger: modulus is not positive"); + } + + BigInteger biggie = this.remainder(m); + + return (biggie.sign >= 0 ? biggie : biggie.add(m)); + } + + public BigInteger modInverse(BigInteger m) throws ArithmeticException + { + if (m.sign != 1) + { + throw new ArithmeticException("Modulus must be positive"); + } + + BigInteger x = new BigInteger(); + BigInteger gcd = BigInteger.extEuclid(this, m, x, null); + + if (!gcd.equals(BigInteger.ONE)) + { + throw new ArithmeticException("Numbers not relatively prime."); + } + + if (x.compareTo(BigInteger.ZERO) < 0) + { + x = x.add(m); + } + + return x; + } + + /** + * Calculate the numbers u1, u2, and u3 such that: + * + * u1 * a + u2 * b = u3 + * + * where u3 is the greatest common divider of a and b. + * a and b using the extended Euclid algorithm (refer p. 323 + * of The Art of Computer Programming vol 2, 2nd ed). + * This also seems to have the side effect of calculating + * some form of multiplicative inverse. + * + * @param a First number to calculate gcd for + * @param b Second number to calculate gcd for + * @param u1Out the return object for the u1 value + * @param u2Out the return object for the u2 value + * @return The greatest common divisor of a and b + */ + private static BigInteger extEuclid(BigInteger a, BigInteger b, BigInteger u1Out, + BigInteger u2Out) + { + BigInteger u1 = BigInteger.ONE; + BigInteger u3 = a; + BigInteger v1 = BigInteger.ZERO; + BigInteger v3 = b; + + while (v3.sign > 0) + { + BigInteger[] q = u3.divideAndRemainder(v3); + + BigInteger tn = u1.subtract(v1.multiply(q[0])); + u1 = v1; + v1 = tn; + + u3 = v3; + v3 = q[1]; + } + + if (u1Out != null) + { + u1Out.sign = u1.sign; + u1Out.magnitude = u1.magnitude; + } + + if (u2Out != null) + { + BigInteger res = u3.subtract(u1.multiply(a)).divide(b); + u2Out.sign = res.sign; + u2Out.magnitude = res.magnitude; + } + + return u3; + } + + /** + * zero out the array x + */ + private void zero(int[] x) + { + for (int i = 0; i != x.length; i++) + { + x[i] = 0; + } + } + + public BigInteger modPow(BigInteger exponent, BigInteger m) throws ArithmeticException + { + if (m.sign < 1) + { + throw new ArithmeticException("Modulus must be positive"); + } + + if (m.equals(ONE)) + { + return ZERO; + } + + // Zero exponent check + if (exponent.sign == 0) + { + return ONE; + } + + if (sign == 0) + return ZERO; + + int[] zVal = null; + int[] yAccum = null; + int[] yVal; + + // Montgomery exponentiation is only possible if the modulus is odd, + // but AFAIK, this is always the case for crypto algo's + boolean useMonty = ((m.magnitude[m.magnitude.length - 1] & 1) == 1); + long mQ = 0; + if (useMonty) + { + mQ = m.getMQuote(); + + // tmp = this * R mod m + BigInteger tmp = this.shiftLeft(32 * m.magnitude.length).mod(m); + zVal = tmp.magnitude; + + useMonty = (zVal.length <= m.magnitude.length); + + if (useMonty) + { + yAccum = new int[m.magnitude.length + 1]; + if (zVal.length < m.magnitude.length) + { + int[] longZ = new int[m.magnitude.length]; + System.arraycopy(zVal, 0, longZ, longZ.length - zVal.length, zVal.length); + zVal = longZ; + } + } + } + + if (!useMonty) + { + if (magnitude.length <= m.magnitude.length) + { + //zAccum = new int[m.magnitude.length * 2]; + zVal = new int[m.magnitude.length]; + + System.arraycopy(magnitude, 0, zVal, zVal.length - magnitude.length, + magnitude.length); + } + else + { + // + // in normal practice we'll never see this... + // + BigInteger tmp = this.remainder(m); + + //zAccum = new int[m.magnitude.length * 2]; + zVal = new int[m.magnitude.length]; + + System.arraycopy(tmp.magnitude, 0, zVal, zVal.length - tmp.magnitude.length, + tmp.magnitude.length); + } + + yAccum = new int[m.magnitude.length * 2]; + } + + yVal = new int[m.magnitude.length]; + + // + // from LSW to MSW + // + for (int i = 0; i < exponent.magnitude.length; i++) + { + int v = exponent.magnitude[i]; + int bits = 0; + + if (i == 0) + { + while (v > 0) + { + v <<= 1; + bits++; + } + + // + // first time in initialise y + // + System.arraycopy(zVal, 0, yVal, 0, zVal.length); + + v <<= 1; + bits++; + } + + while (v != 0) + { + if (useMonty) + { + // Montgomery square algo doesn't exist, and a normal + // square followed by a Montgomery reduction proved to + // be almost as heavy as a Montgomery mulitply. + multiplyMonty(yAccum, yVal, yVal, m.magnitude, mQ); + } + else + { + square(yAccum, yVal); + remainder(yAccum, m.magnitude); + System.arraycopy(yAccum, yAccum.length - yVal.length, yVal, 0, yVal.length); + zero(yAccum); + } + bits++; + + if (v < 0) + { + if (useMonty) + { + multiplyMonty(yAccum, yVal, zVal, m.magnitude, mQ); + } + else + { + multiply(yAccum, yVal, zVal); + remainder(yAccum, m.magnitude); + System.arraycopy(yAccum, yAccum.length - yVal.length, yVal, 0, + yVal.length); + zero(yAccum); + } + } + + v <<= 1; + } + + while (bits < 32) + { + if (useMonty) + { + multiplyMonty(yAccum, yVal, yVal, m.magnitude, mQ); + } + else + { + square(yAccum, yVal); + remainder(yAccum, m.magnitude); + System.arraycopy(yAccum, yAccum.length - yVal.length, yVal, 0, yVal.length); + zero(yAccum); + } + bits++; + } + } + + if (useMonty) + { + // Return y * R^(-1) mod m by doing y * 1 * R^(-1) mod m + zero(zVal); + zVal[zVal.length - 1] = 1; + multiplyMonty(yAccum, yVal, zVal, m.magnitude, mQ); + } + + BigInteger result = new BigInteger(1, yVal); + + return exponent.sign > 0 + ? result + : result.modInverse(m); + } + + /** + * return w with w = x * x - w is assumed to have enough space. + */ + private int[] square(int[] w, int[] x) + { + // Note: this method allows w to be only (2 * x.Length - 1) words if result will fit +// if (w.length != 2 * x.length) +// { +// throw new IllegalArgumentException("no I don't think so..."); +// } + + long u1, u2, c; + + int wBase = w.length - 1; + + for (int i = x.length - 1; i != 0; i--) + { + long v = (x[i] & IMASK); + + u1 = v * v; + u2 = u1 >>> 32; + u1 = u1 & IMASK; + + u1 += (w[wBase] & IMASK); + + w[wBase] = (int)u1; + c = u2 + (u1 >> 32); + + for (int j = i - 1; j >= 0; j--) + { + --wBase; + u1 = (x[j] & IMASK) * v; + u2 = u1 >>> 31; // multiply by 2! + u1 = (u1 & 0x7fffffff) << 1; // multiply by 2! + u1 += (w[wBase] & IMASK) + c; + + w[wBase] = (int)u1; + c = u2 + (u1 >>> 32); + } + c += w[--wBase] & IMASK; + w[wBase] = (int)c; + + if (--wBase >= 0) + { + w[wBase] = (int)(c >> 32); + } + wBase += i; + } + + u1 = (x[0] & IMASK); + u1 = u1 * u1; + u2 = u1 >>> 32; + u1 = u1 & IMASK; + + u1 += (w[wBase] & IMASK); + + w[wBase] = (int)u1; + if (--wBase >= 0) + { + w[wBase] = (int)(u2 + (u1 >> 32) + w[wBase]); + } + + return w; + } + + /** + * return x with x = y * z - x is assumed to have enough space. + */ + private int[] multiply(int[] x, int[] y, int[] z) + { + int i = z.length; + + if (i < 1) + { + return x; + } + + int xBase = x.length - y.length; + + for (;;) + { + long a = z[--i] & IMASK; + long val = 0; + + for (int j = y.length - 1; j >= 0; j--) + { + val += a * (y[j] & IMASK) + (x[xBase + j] & IMASK); + + x[xBase + j] = (int)val; + + val >>>= 32; + } + + --xBase; + + if (i < 1) + { + if (xBase >= 0) + { + x[xBase] = (int)val; + } + break; + } + + x[xBase] = (int)val; + } + + return x; + } + + private long _extEuclid(long a, long b, long[] uOut) + { + long res; + + long u1 = 1; + long u3 = a; + long v1 = 0; + long v3 = b; + + while (v3 > 0) + { + long q, tn; + + q = u3 / v3; + + tn = u1 - (v1 * q); + u1 = v1; + v1 = tn; + + tn = u3 - (v3 * q); + u3 = v3; + v3 = tn; + } + + uOut[0] = u1; + + res = (u3 - (u1 * a)) / b; + uOut[1] = res; + + return u3; + } + + private long _modInverse(long v, long m) + throws ArithmeticException + { + if (m < 0) + { + throw new ArithmeticException("Modulus must be positive"); + } + + long[] x = new long[2]; + + long gcd = _extEuclid(v, m, x); + + if (gcd != 1) + { + throw new ArithmeticException("Numbers not relatively prime."); + } + + if (x[0] < 0) + { + x[0] = x[0] + m; + } + + return x[0]; + } + + /** + * Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + */ + private long getMQuote() + { + if (mQuote != -1L) + { // allready calculated + return mQuote; + } + if ((magnitude[magnitude.length - 1] & 1) == 0) + { + return -1L; // not for even numbers + } + +/* + byte[] bytes = {1, 0, 0, 0, 0}; + BigInteger b = new BigInteger(1, bytes); // 2^32 + mQuote = this.negate().mod(b).modInverse(b).longValue(); +*/ + long v = (((~this.magnitude[this.magnitude.length - 1]) | 1) & 0xffffffffL); + mQuote = _modInverse(v, 0x100000000L); + + return mQuote; + } + + /** + * Montgomery multiplication: a = x * y * R^(-1) mod m + *
        + * Based algorithm 14.36 of Handbook of Applied Cryptography. + *
        + *

      7. m, x, y should have length n
      8. + *
      9. a should have length (n + 1)
      10. + *
      11. b = 2^32, R = b^n
      12. + *
        + * The result is put in x + *
        + * NOTE: the indices of x, y, m, a different in HAC and in Java + */ + private void multiplyMonty(int[] a, int[] x, int[] y, int[] m, long mQuote) + // mQuote = -m^(-1) mod b + { + int n = m.length; + int nMinus1 = n - 1; + long y_0 = y[n - 1] & IMASK; + + // 1. a = 0 (Notation: a = (a_{n} a_{n-1} ... a_{0})_{b} ) + for (int i = 0; i <= n; i++) + { + a[i] = 0; + } + + // 2. for i from 0 to (n - 1) do the following: + for (int i = n; i > 0; i--) + { + + long x_i = x[i - 1] & IMASK; + + // 2.1 u = ((a[0] + (x[i] * y[0]) * mQuote) mod b + long u = ((((a[n] & IMASK) + ((x_i * y_0) & IMASK)) & IMASK) * mQuote) & IMASK; + + // 2.2 a = (a + x_i * y + u * m) / b + long prod1 = x_i * y_0; + long prod2 = u * (m[n - 1] & IMASK); + long tmp = (a[n] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK); + long carry = (prod1 >>> 32) + (prod2 >>> 32) + (tmp >>> 32); + for (int j = nMinus1; j > 0; j--) + { + prod1 = x_i * (y[j - 1] & IMASK); + prod2 = u * (m[j - 1] & IMASK); + tmp = (a[j] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK) + (carry & IMASK); + carry = (carry >>> 32) + (prod1 >>> 32) + (prod2 >>> 32) + (tmp >>> 32); + a[j + 1] = (int)tmp; // division by b + } + carry += (a[0] & IMASK); + a[1] = (int)carry; + a[0] = (int)(carry >>> 32); + } + + // 3. if x >= m the x = x - m + if (compareTo(0, a, 0, m) >= 0) + { + subtract(0, a, 0, m); + } + + // put the result in x + System.arraycopy(a, 1, x, 0, n); + } + + public BigInteger multiply(BigInteger val) + { + if (sign == 0 || val.sign == 0) + return BigInteger.ZERO; + + int resLength = (this.bitLength() + val.bitLength()) / 32 + 1; + int[] res = new int[resLength]; + + if (val == this) + { + square(res, this.magnitude); + } + else + { + multiply(res, this.magnitude, val.magnitude); + } + + return new BigInteger(sign * val.sign, res); + } + + public BigInteger negate() + { + if (sign == 0) + { + return this; + } + + return new BigInteger( -sign, magnitude); + } + + public BigInteger not() + { + return add(ONE).negate(); + } + + public BigInteger pow(int exp) throws ArithmeticException + { + if (exp < 0) + throw new ArithmeticException("Negative exponent"); + if (sign == 0) + return (exp == 0 ? BigInteger.ONE : this); + + BigInteger y, + z; + y = BigInteger.ONE; + z = this; + + while (exp != 0) + { + if ((exp & 0x1) == 1) + { + y = y.multiply(z); + } + exp >>= 1; + if (exp != 0) + { + z = z.multiply(z); + } + } + + return y; + } + + public static BigInteger probablePrime( + int bitLength, + Random random) + { + return new BigInteger(bitLength, 100, random); + } + + private int remainder(int m) + { + long acc = 0; + for (int pos = 0; pos < magnitude.length; ++pos) + { + acc = (acc << 32 | ((long)magnitude[pos] & 0xffffffffL)) % m; + } + + return (int) acc; + } + + /** + * return x = x % y - done in place (y value preserved) + */ + private int[] remainder(int[] x, int[] y) + { + int xStart = 0; + while (xStart < x.length && x[xStart] == 0) + { + ++xStart; + } + + int yStart = 0; + while (yStart < y.length && y[yStart] == 0) + { + ++yStart; + } + + int xyCmp = compareNoLeadingZeroes(xStart, x, yStart, y); + + if (xyCmp > 0) + { + int yBitLength = bitLength(yStart, y); + int xBitLength = bitLength(xStart, x); + int shift = xBitLength - yBitLength; + + int[] c; + int cStart = 0; + int cBitLength = yBitLength; + if (shift > 0) + { + c = shiftLeft(y, shift); + cBitLength += shift; + } + else + { + int len = y.length - yStart; + c = new int[len]; + System.arraycopy(y, yStart, c, 0, len); + } + + for (;;) + { + if (cBitLength < xBitLength + || compareNoLeadingZeroes(xStart, x, cStart, c) >= 0) + { + subtract(xStart, x, cStart, c); + + while (x[xStart] == 0) + { + if (++xStart == x.length) + { + return x; + } + } + + xyCmp = compareNoLeadingZeroes(xStart, x, yStart, y); + + if (xyCmp <= 0) + { + break; + } + + //xBitLength = bitLength(xStart, x); + xBitLength = 32 * (x.length - xStart - 1) + bitLen(x[xStart]); + } + + shift = cBitLength - xBitLength; + + if (shift < 2) + { + shiftRightOneInPlace(cStart, c); + --cBitLength; + } + else + { + shiftRightInPlace(cStart, c, shift); + cBitLength -= shift; + } + +// cStart = c.length - ((cBitLength + 31) / 32); + while (c[cStart] == 0) + { + ++cStart; + } + } + } + + if (xyCmp == 0) + { + for (int i = xStart; i < x.length; ++i) + { + x[i] = 0; + } + } + + return x; + } + + public BigInteger remainder(BigInteger n) throws ArithmeticException + { + if (n.sign == 0) + { + throw new ArithmeticException("BigInteger: Divide by zero"); + } + + if (sign == 0) + { + return BigInteger.ZERO; + } + + // For small values, use fast remainder method + if (n.magnitude.length == 1) + { + int val = n.magnitude[0]; + + if (val > 0) + { + if (val == 1) + return ZERO; + + int rem = remainder(val); + + return rem == 0 + ? ZERO + : new BigInteger(sign, new int[]{ rem }); + } + } + + if (compareTo(0, magnitude, 0, n.magnitude) < 0) + return this; + + int[] res; + if (n.quickPow2Check()) // n is power of two + { + // TODO Move before small values branch above? + res = lastNBits(n.abs().bitLength() - 1); + } + else + { + res = new int[this.magnitude.length]; + System.arraycopy(this.magnitude, 0, res, 0, res.length); + res = remainder(res, n.magnitude); + } + + return new BigInteger(sign, res); + } + + private int[] lastNBits( + int n) + { + if (n < 1) + { + return ZERO_MAGNITUDE; + } + + int numWords = (n + 31) / 32; + numWords = Math.min(numWords, this.magnitude.length); + int[] result = new int[numWords]; + + System.arraycopy(this.magnitude, this.magnitude.length - numWords, result, 0, numWords); + + int hiBits = n % 32; + if (hiBits != 0) + { + result[0] &= ~(-1 << hiBits); + } + + return result; + } + + /** + * do a left shift - this returns a new array. + */ + private int[] shiftLeft(int[] mag, int n) + { + int nInts = n >>> 5; + int nBits = n & 0x1f; + int magLen = mag.length; + int newMag[] = null; + + if (nBits == 0) + { + newMag = new int[magLen + nInts]; + System.arraycopy(mag, 0, newMag, 0, magLen); + } + else + { + int i = 0; + int nBits2 = 32 - nBits; + int highBits = mag[0] >>> nBits2; + + if (highBits != 0) + { + newMag = new int[magLen + nInts + 1]; + newMag[i++] = highBits; + } + else + { + newMag = new int[magLen + nInts]; + } + + int m = mag[0]; + for (int j = 0; j < magLen - 1; j++) + { + int next = mag[j + 1]; + + newMag[i++] = (m << nBits) | (next >>> nBits2); + m = next; + } + + newMag[i] = mag[magLen - 1] << nBits; + } + + return newMag; + } + + public BigInteger shiftLeft(int n) + { + if (sign == 0 || magnitude.length == 0) + { + return ZERO; + } + + if (n == 0) + { + return this; + } + + if (n < 0) + { + return shiftRight( -n); + } + + BigInteger result = new BigInteger(sign, shiftLeft(magnitude, n)); + + if (this.nBits != -1) + { + result.nBits = sign > 0 + ? this.nBits + : this.nBits + n; + } + + if (this.nBitLength != -1) + { + result.nBitLength = this.nBitLength + n; + } + + return result; + } + + /** + * do a right shift - this does it in place. + */ + private static void shiftRightInPlace(int start, int[] mag, int n) + { + int nInts = (n >>> 5) + start; + int nBits = n & 0x1f; + int magEnd = mag.length - 1; + + if (nInts != start) + { + int delta = (nInts - start); + + for (int i = magEnd; i >= nInts; i--) + { + mag[i] = mag[i - delta]; + } + for (int i = nInts - 1; i >= start; i--) + { + mag[i] = 0; + } + } + + if (nBits != 0) + { + int nBits2 = 32 - nBits; + int m = mag[magEnd]; + + for (int i = magEnd; i >= nInts + 1; i--) + { + int next = mag[i - 1]; + + mag[i] = (m >>> nBits) | (next << nBits2); + m = next; + } + + mag[nInts] >>>= nBits; + } + } + + /** + * do a right shift by one - this does it in place. + */ + private static void shiftRightOneInPlace(int start, int[] mag) + { + int magEnd = mag.length - 1; + + int m = mag[magEnd]; + + for (int i = magEnd; i > start; i--) + { + int next = mag[i - 1]; + + mag[i] = (m >>> 1) | (next << 31); + m = next; + } + + mag[start] >>>= 1; + } + + public BigInteger shiftRight(int n) + { + if (n == 0) + { + return this; + } + + if (n < 0) + { + return shiftLeft( -n); + } + + if (n >= bitLength()) + { + return (this.sign < 0 ? valueOf( -1) : BigInteger.ZERO); + } + + int[] res = new int[this.magnitude.length]; + System.arraycopy(this.magnitude, 0, res, 0, res.length); + shiftRightInPlace(0, res, n); + + return new BigInteger(this.sign, res); + + // TODO Port C# version's optimisations... + } + + public int signum() + { + return sign; + } + + /** + * returns x = x - y - we assume x is >= y + */ + private int[] subtract(int xStart, int[] x, int yStart, int[] y) + { + int iT = x.length; + int iV = y.length; + long m; + int borrow = 0; + + do + { + m = ((long)x[--iT] & IMASK) - ((long)y[--iV] & IMASK) + borrow; + x[iT] = (int)m; + +// borrow = (m < 0) ? -1 : 0; + borrow = (int)(m >> 63); + } + while (iV > yStart); + + if (borrow != 0) + { + while (--x[--iT] == -1) + { + } + } + + return x; + } + + public BigInteger subtract(BigInteger val) + { + if (val.sign == 0 || val.magnitude.length == 0) + { + return this; + } + if (sign == 0 || magnitude.length == 0) + { + return val.negate(); + } + if (this.sign != val.sign) + { + return this.add(val.negate()); + } + + int compare = compareTo(0, magnitude, 0, val.magnitude); + if (compare == 0) + { + return ZERO; + } + + BigInteger bigun, littlun; + if (compare < 0) + { + bigun = val; + littlun = this; + } + else + { + bigun = this; + littlun = val; + } + + int res[] = new int[bigun.magnitude.length]; + + System.arraycopy(bigun.magnitude, 0, res, 0, res.length); + + return new BigInteger(this.sign * compare, subtract(0, res, 0, littlun.magnitude)); + } + + public byte[] toByteArray() + { + if (sign == 0) + { + return new byte[1]; + } + + int bitLength = bitLength(); + byte[] bytes = new byte[bitLength / 8 + 1]; + + int magIndex = magnitude.length; + int bytesIndex = bytes.length; + + if (sign > 0) + { + while (magIndex > 1) + { + int mag = magnitude[--magIndex]; + bytes[--bytesIndex] = (byte) mag; + bytes[--bytesIndex] = (byte)(mag >>> 8); + bytes[--bytesIndex] = (byte)(mag >>> 16); + bytes[--bytesIndex] = (byte)(mag >>> 24); + } + + int lastMag = magnitude[0]; + while ((lastMag & 0xFFFFFF00) != 0) + { + bytes[--bytesIndex] = (byte) lastMag; + lastMag >>>= 8; + } + + bytes[--bytesIndex] = (byte) lastMag; + } + else + { + boolean carry = true; + + while (magIndex > 1) + { + int mag = ~magnitude[--magIndex]; + + if (carry) + { + carry = (++mag == 0); + } + + bytes[--bytesIndex] = (byte) mag; + bytes[--bytesIndex] = (byte)(mag >>> 8); + bytes[--bytesIndex] = (byte)(mag >>> 16); + bytes[--bytesIndex] = (byte)(mag >>> 24); + } + + int lastMag = magnitude[0]; + + if (carry) + { + // Never wraps because magnitude[0] != 0 + --lastMag; + } + + while ((lastMag & 0xFFFFFF00) != 0) + { + bytes[--bytesIndex] = (byte) ~lastMag; + lastMag >>>= 8; + } + + bytes[--bytesIndex] = (byte) ~lastMag; + + if (bytesIndex > 0) + { + bytes[--bytesIndex] = (byte)0xFF; + } + } + + return bytes; + } + + public BigInteger xor(BigInteger val) + { + if (this.sign == 0) + { + return val; + } + + if (val.sign == 0) + { + return this; + } + + int[] aMag = this.sign > 0 + ? this.magnitude + : this.add(ONE).magnitude; + + int[] bMag = val.sign > 0 + ? val.magnitude + : val.add(ONE).magnitude; + + boolean resultNeg = (sign < 0 && val.sign >= 0) || (sign >= 0 && val.sign < 0); + int resultLength = Math.max(aMag.length, bMag.length); + int[] resultMag = new int[resultLength]; + + int aStart = resultMag.length - aMag.length; + int bStart = resultMag.length - bMag.length; + + for (int i = 0; i < resultMag.length; ++i) + { + int aWord = i >= aStart ? aMag[i - aStart] : 0; + int bWord = i >= bStart ? bMag[i - bStart] : 0; + + if (this.sign < 0) + { + aWord = ~aWord; + } + + if (val.sign < 0) + { + bWord = ~bWord; + } + + resultMag[i] = aWord ^ bWord; + + if (resultNeg) + { + resultMag[i] = ~resultMag[i]; + } + } + + BigInteger result = new BigInteger(1, resultMag); + + if (resultNeg) + { + result = result.not(); + } + + return result; + } + + public BigInteger or( + BigInteger value) + { + if (this.sign == 0) + { + return value; + } + + if (value.sign == 0) + { + return this; + } + + int[] aMag = this.sign > 0 + ? this.magnitude + : this.add(ONE).magnitude; + + int[] bMag = value.sign > 0 + ? value.magnitude + : value.add(ONE).magnitude; + + boolean resultNeg = sign < 0 || value.sign < 0; + int resultLength = Math.max(aMag.length, bMag.length); + int[] resultMag = new int[resultLength]; + + int aStart = resultMag.length - aMag.length; + int bStart = resultMag.length - bMag.length; + + for (int i = 0; i < resultMag.length; ++i) + { + int aWord = i >= aStart ? aMag[i - aStart] : 0; + int bWord = i >= bStart ? bMag[i - bStart] : 0; + + if (this.sign < 0) + { + aWord = ~aWord; + } + + if (value.sign < 0) + { + bWord = ~bWord; + } + + resultMag[i] = aWord | bWord; + + if (resultNeg) + { + resultMag[i] = ~resultMag[i]; + } + } + + BigInteger result = new BigInteger(1, resultMag); + + if (resultNeg) + { + result = result.not(); + } + + return result; + } + + public BigInteger setBit(int n) + throws ArithmeticException + { + if (n < 0) + { + throw new ArithmeticException("Bit address less than zero"); + } + + if (testBit(n)) + { + return this; + } + + // TODO Handle negative values and zero + if (sign > 0 && n < (bitLength() - 1)) + { + return flipExistingBit(n); + } + + return or(ONE.shiftLeft(n)); + } + + public BigInteger clearBit(int n) + throws ArithmeticException + { + if (n < 0) + { + throw new ArithmeticException("Bit address less than zero"); + } + + if (!testBit(n)) + { + return this; + } + + // TODO Handle negative values + if (sign > 0 && n < (bitLength() - 1)) + { + return flipExistingBit(n); + } + + return andNot(ONE.shiftLeft(n)); + } + + public BigInteger flipBit(int n) + throws ArithmeticException + { + if (n < 0) + { + throw new ArithmeticException("Bit address less than zero"); + } + + // TODO Handle negative values and zero + if (sign > 0 && n < (bitLength() - 1)) + { + return flipExistingBit(n); + } + + return xor(ONE.shiftLeft(n)); + } + + private BigInteger flipExistingBit(int n) + { + int[] mag = new int[this.magnitude.length]; + System.arraycopy(this.magnitude, 0, mag, 0, mag.length); + mag[mag.length - 1 - (n >>> 5)] ^= (1 << (n & 31)); // Flip 0 bit to 1 + //mag[mag.Length - 1 - (n / 32)] |= (1 << (n % 32)); + return new BigInteger(this.sign, mag); + } + + private int[] createResult(int wordNum) + { + int[] result; + if (magnitude.length < wordNum + 1) + { + result = new int[wordNum + 1]; + } + else + { + result = new int[magnitude.length]; + } + + System.arraycopy(magnitude, 0, result, result.length - magnitude.length, magnitude.length); + return result; + } + + public String toString() + { + return toString(10); + } + + public String toString(int rdx) + { + if (magnitude == null) + { + return "null"; + } + else if (sign == 0) + { + return "0"; + } + + StringBuffer sb = new StringBuffer(); + String h; + + if (rdx == 16) + { + for (int i = 0; i < magnitude.length; i++) + { + h = new StringBuffer("0000000").append(Integer.toHexString(magnitude[i])).toString(); + h = h.substring(h.length() - 8); + sb.append(h); + } + } + else if (rdx == 2) + { + sb.append('1'); + + for (int i = bitLength() - 2; i >= 0; --i) + { + sb.append(testBit(i) ? '1' : '0'); + } + } + else + { + // This is algorithm 1a from chapter 4.4 in Seminumerical Algorithms, slow but it works + Stack S = new Stack(); + BigInteger base = new BigInteger(Integer.toString(rdx, rdx), rdx); + // The sign is handled separatly. + // Notice however that for this to work, radix 16 _MUST_ be a special case, + // unless we want to enter a recursion well. In their infinite wisdom, why did not + // the Sun engineers made a c'tor for BigIntegers taking a BigInteger as parameter? + // (Answer: Becuase Sun's BigIntger is clonable, something bouncycastle's isn't.) +// BigInteger u = new BigInteger(this.abs().toString(16), 16); + BigInteger u = this.abs(); + BigInteger b; + + // For speed, maye these test should look directly a u.magnitude.length? + while (!u.equals(BigInteger.ZERO)) + { + b = u.mod(base); + if (b.equals(BigInteger.ZERO)) + S.push("0"); + else + S.push(Integer.toString(b.magnitude[0], rdx)); + u = u.divide(base); + } + // Then pop the stack + while (!S.empty()) + { + sb.append((String) S.pop()); + } + } + + String s = sb.toString(); + + // Strip leading zeros. + while (s.length() > 1 && s.charAt(0) == '0') + s = s.substring(1); + + if (s.length() == 0) + s = "0"; + else if (sign == -1) + s = new StringBuffer("-").append(s).toString(); + + return s; + } + + public static BigInteger valueOf(long val) + { + if (val == 0) + { + return BigInteger.ZERO; + } + + if (val < 0) + { + if (val == Long.MIN_VALUE) + { + return valueOf(~val).not(); + } + + return valueOf(-val).negate(); + } + + // store val into a byte array + byte[] b = new byte[8]; + for (int i = 0; i < 8; i++) + { + b[7 - i] = (byte)val; + val >>= 8; + } + + return new BigInteger(b); + } + + public int getLowestSetBit() + { + if (this.sign == 0) + { + return -1; + } + + int w = magnitude.length; + + while (--w > 0) + { + if (magnitude[w] != 0) + { + break; + } + } + + int word = magnitude[w]; + + int b = (word & 0x0000FFFF) == 0 + ? (word & 0x00FF0000) == 0 + ? 7 + : 15 + : (word & 0x000000FF) == 0 + ? 23 + : 31; + + while (b > 0) + { + if ((word << b) == 0x80000000) + { + break; + } + + b--; + } + + return ((magnitude.length - w) * 32 - (b + 1)); + } + + public boolean testBit(int n) + throws ArithmeticException + { + if (n < 0) + { + throw new ArithmeticException("Bit position must not be negative"); + } + + if (sign < 0) + { + return !not().testBit(n); + } + + int wordNum = n / 32; + if (wordNum >= magnitude.length) + return false; + + int word = magnitude[magnitude.length - 1 - wordNum]; + return ((word >> (n % 32)) & 1) > 0; + } +} diff --git a/common/src/main/java/javabc/FilterInputStream.java b/common/src/main/java/javabc/FilterInputStream.java new file mode 100644 index 0000000..f8f6da3 --- /dev/null +++ b/common/src/main/java/javabc/FilterInputStream.java @@ -0,0 +1,61 @@ +package javabc; + +import java.io.IOException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStream; + +public class FilterInputStream extends InputStream +{ + protected InputStream in; + + protected FilterInputStream(InputStream underlying) + { + in = underlying; + } + + public int read() throws IOException + { + return in.read(); + } + + public int read(byte[] b) throws IOException + { + return read(b, 0, b.length); + } + + public int read(byte[] b, int offset, int length) throws IOException + { + return in.read(b, offset, length); + } + + public long skip(long n) throws IOException + { + return in.skip(n); + } + + public int available() throws IOException + { + return in.available(); + } + + public void close() throws IOException + { + in.close(); + } + + public void mark(int readlimit) + { + in.mark(readlimit); + } + + public void reset() throws IOException + { + in.reset(); + } + + public boolean markSupported() + { + return in.markSupported(); + } +} diff --git a/common/src/main/java/javabc/FilterOutputStream.java b/common/src/main/java/javabc/FilterOutputStream.java new file mode 100644 index 0000000..d002ae5 --- /dev/null +++ b/common/src/main/java/javabc/FilterOutputStream.java @@ -0,0 +1,42 @@ +package javabc; + +import java.io.IOException; +import java.io.OutputStream; + +public class FilterOutputStream extends OutputStream +{ + protected OutputStream out; + + protected FilterOutputStream(OutputStream underlying) + { + out = underlying; + } + + public void write(int b) throws IOException + { + out.write(b); + } + + public void write(byte[] b) throws IOException + { + write(b, 0, b.length); + } + + public void write(byte[] b, int offset, int length) throws IOException + { + for (int i = 0; i < length; i++) + { + write(b[offset + i]); + } + } + + public void flush() throws IOException + { + out.flush(); + } + + public void close() throws IOException + { + out.close(); + } +} diff --git a/common/src/main/java/javabc/SecureRandom.java b/common/src/main/java/javabc/SecureRandom.java new file mode 100644 index 0000000..ab7ad0f --- /dev/null +++ b/common/src/main/java/javabc/SecureRandom.java @@ -0,0 +1,141 @@ +package javabc; + +import java.util.Random; + +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.digests.SHA256Digest; +import org.bouncycastle.crypto.prng.RandomGenerator; +import org.bouncycastle.crypto.prng.DigestRandomGenerator; + +/** + * An implementation of SecureRandom specifically for the light-weight API, JDK + * 1.0, and the J2ME. Random generation is based on the traditional SHA1 with + * counter. Calling setSeed will always increase the entropy of the hash. + *

        + * Do not use this class without calling setSeed at least once! There + * are some example seed generators in the org.bouncycastle.prng package. + */ +public class SecureRandom extends java.util.Random +{ + // Note: all objects of this class should be deriving their random data from + // a single generator appropriate to the digest being used. + private static final RandomGenerator sha1Generator = new DigestRandomGenerator(new SHA1Digest()); + private static final RandomGenerator sha256Generator = new DigestRandomGenerator(new SHA256Digest()); + + protected RandomGenerator generator; + + // public constructors + public SecureRandom() + { + this(sha1Generator); + setSeed(System.currentTimeMillis()); + } + + public SecureRandom(byte[] inSeed) + { + this(sha1Generator); + setSeed(inSeed); + } + + protected SecureRandom( + RandomGenerator generator) + { + super(0); + this.generator = generator; + } + + // protected constructors + // protected SecureRandom(SecureRandomSpi srs, Provider provider); + + // public class methods + public static SecureRandom getInstance(String algorithm) + { + if (algorithm.equals("SHA1PRNG")) + { + return new SecureRandom(sha1Generator); + } + if (algorithm.equals("SHA256PRNG")) + { + return new SecureRandom(sha256Generator); + } + return new SecureRandom(); // follow old behaviour + } + + public static SecureRandom getInstance(String algorithm, String provider) + { + return getInstance(algorithm); + } + + public static byte[] getSeed(int numBytes) + { + byte[] rv = new byte[numBytes]; + + sha1Generator.addSeedMaterial(System.currentTimeMillis()); + sha1Generator.nextBytes(rv); + + return rv; + } + + // public instance methods + public byte[] generateSeed(int numBytes) + { + byte[] rv = new byte[numBytes]; + + nextBytes(rv); + + return rv; + } + + // public final Provider getProvider(); + public void setSeed(byte[] inSeed) + { + generator.addSeedMaterial(inSeed); + } + + // public methods overriding random + public void nextBytes(byte[] bytes) + { + generator.nextBytes(bytes); + } + + public void setSeed(long rSeed) + { + if (rSeed != 0) // to avoid problems with Random calling setSeed in construction + { + generator.addSeedMaterial(rSeed); + } + } + + public int nextInt() + { + byte[] intBytes = new byte[4]; + + nextBytes(intBytes); + + int result = 0; + + for (int i = 0; i < 4; i++) + { + result = (result << 8) + (intBytes[i] & 0xff); + } + + return result; + } + + protected final int next(int numBits) + { + int size = (numBits + 7) / 8; + byte[] bytes = new byte[size]; + + nextBytes(bytes); + + int result = 0; + + for (int i = 0; i < size; i++) + { + result = (result << 8) + (bytes[i] & 0xff); + } + + return result & ((1 << numBits) - 1); + } +} diff --git a/common/src/main/java/org/bouncycastle/LICENSE.java b/common/src/main/java/org/bouncycastle/LICENSE.java new file mode 100644 index 0000000..12637ce --- /dev/null +++ b/common/src/main/java/org/bouncycastle/LICENSE.java @@ -0,0 +1,59 @@ +package org.bouncycastle; + +/** + * The Bouncy Castle License + * + * Copyright (c) 2000-2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) + *

        + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + *

        + * The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. + *

        + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +public class LICENSE +{ + public static String licenseText = + "Copyright (c) 2000-2012 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) " + + System.getProperty("line.separator") + + System.getProperty("line.separator") + + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software " + + System.getProperty("line.separator") + + "and associated documentation files (the \"Software\"), to deal in the Software without restriction, " + + System.getProperty("line.separator") + + "including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, " + + System.getProperty("line.separator") + + "and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so," + + System.getProperty("line.separator") + + "subject to the following conditions:" + + System.getProperty("line.separator") + + System.getProperty("line.separator") + + "The above copyright notice and this permission notice shall be included in all copies or substantial" + + System.getProperty("line.separator") + + "portions of the Software." + + System.getProperty("line.separator") + + System.getProperty("line.separator") + + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED," + + System.getProperty("line.separator") + + "INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR" + + System.getProperty("line.separator") + + "PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE" + + System.getProperty("line.separator") + + "LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR" + + System.getProperty("line.separator") + + "OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER" + + System.getProperty("line.separator") + + "DEALINGS IN THE SOFTWARE."; + + +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java b/common/src/main/java/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java new file mode 100644 index 0000000..d7216a6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1ApplicationSpecificParser.java @@ -0,0 +1,10 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public interface ASN1ApplicationSpecificParser + extends ASN1Encodable, InMemoryRepresentable +{ + ASN1Encodable readObject() + throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java new file mode 100644 index 0000000..1360e8b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Boolean.java @@ -0,0 +1,15 @@ +package org.bouncycastle.asn1; + +public class ASN1Boolean + extends DERBoolean +{ + public ASN1Boolean(boolean value) + { + super(value); + } + + ASN1Boolean(byte[] value) + { + super(value); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Choice.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Choice.java new file mode 100644 index 0000000..603131d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Choice.java @@ -0,0 +1,14 @@ +package org.bouncycastle.asn1; + +/** + * Marker interface for CHOICE objects - if you implement this in a role your + * own object any attempt to tag the object implicitly will convert the tag to + * an explicit one as the encoding rules require. + *

        + * If you use this interface your class should also implement the getInstance + * pattern which takes a tag object and the tagging mode used. + */ +public interface ASN1Choice +{ + // marker interface +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Encodable.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Encodable.java new file mode 100644 index 0000000..f5738bf --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Encodable.java @@ -0,0 +1,6 @@ +package org.bouncycastle.asn1; + +public interface ASN1Encodable +{ + ASN1Primitive toASN1Primitive(); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java b/common/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java new file mode 100644 index 0000000..2aa68b3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1EncodableVector.java @@ -0,0 +1,27 @@ +package org.bouncycastle.asn1; + +import java.util.Vector; + +public class ASN1EncodableVector +{ + Vector v = new Vector(); + + public ASN1EncodableVector() + { + } + + public void add(ASN1Encodable obj) + { + v.addElement(obj); + } + + public ASN1Encodable get(int i) + { + return (ASN1Encodable)v.elementAt(i); + } + + public int size() + { + return v.size(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Encoding.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Encoding.java new file mode 100644 index 0000000..821d3b9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Encoding.java @@ -0,0 +1,8 @@ +package org.bouncycastle.asn1; + +public interface ASN1Encoding +{ + static final String DER = "DER"; + static final String DL = "DL"; + static final String BER = "BER"; +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Enumerated.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Enumerated.java new file mode 100644 index 0000000..3832f0f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Enumerated.java @@ -0,0 +1,22 @@ +package org.bouncycastle.asn1; + +import javabc.BigInteger; + +public class ASN1Enumerated + extends DEREnumerated +{ + ASN1Enumerated(byte[] bytes) + { + super(bytes); + } + + public ASN1Enumerated(BigInteger value) + { + super(value); + } + + public ASN1Enumerated(int value) + { + super(value); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Exception.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Exception.java new file mode 100644 index 0000000..dc0ee20 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Exception.java @@ -0,0 +1,25 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class ASN1Exception + extends IOException +{ + private Throwable cause; + + ASN1Exception(String message) + { + super(message); + } + + ASN1Exception(String message, Throwable cause) + { + super(message); + this.cause = cause; + } + + public Throwable getCause() + { + return cause; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java b/common/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java new file mode 100644 index 0000000..ea2cb3f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1GeneralizedTime.java @@ -0,0 +1,27 @@ +package org.bouncycastle.asn1; + +import java.util.Date; + +public class ASN1GeneralizedTime + extends DERGeneralizedTime +{ + ASN1GeneralizedTime(byte[] bytes) + { + super(bytes); + } + + public ASN1GeneralizedTime(Date date) + { + super(date); + } + + public ASN1GeneralizedTime(Date date, boolean includeMillis) + { + super(date, includeMillis); + } + + public ASN1GeneralizedTime(String time) + { + super(time); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Generator.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Generator.java new file mode 100644 index 0000000..50cb705 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Generator.java @@ -0,0 +1,15 @@ +package org.bouncycastle.asn1; + +import java.io.OutputStream; + +public abstract class ASN1Generator +{ + protected OutputStream _out; + + public ASN1Generator(OutputStream out) + { + _out = out; + } + + public abstract OutputStream getRawOutputStream(); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1InputStream.java b/common/src/main/java/org/bouncycastle/asn1/ASN1InputStream.java new file mode 100644 index 0000000..fe4ef8c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1InputStream.java @@ -0,0 +1,466 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayInputStream; +import java.io.EOFException; +import javabc.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.util.io.Streams; + +/** + * a general purpose ASN.1 decoder - note: this class differs from the + * others in that it returns null after it has read the last object in + * the stream. If an ASN.1 NULL is encountered a DER/BER Null object is + * returned. + */ +public class ASN1InputStream + extends FilterInputStream + implements BERTags +{ + private final int limit; + private final boolean lazyEvaluate; + + private final byte[][] tmpBuffers; + + public ASN1InputStream( + InputStream is) + { + this(is, StreamUtil.findLimit(is)); + } + + /** + * Create an ASN1InputStream based on the input byte array. The length of DER objects in + * the stream is automatically limited to the length of the input array. + * + * @param input array containing ASN.1 encoded data. + */ + public ASN1InputStream( + byte[] input) + { + this(new ByteArrayInputStream(input), input.length); + } + + /** + * Create an ASN1InputStream based on the input byte array. The length of DER objects in + * the stream is automatically limited to the length of the input array. + * + * @param input array containing ASN.1 encoded data. + * @param lazyEvaluate true if parsing inside constructed objects can be delayed. + */ + public ASN1InputStream( + byte[] input, + boolean lazyEvaluate) + { + this(new ByteArrayInputStream(input), input.length, lazyEvaluate); + } + + /** + * Create an ASN1InputStream where no DER object will be longer than limit. + * + * @param input stream containing ASN.1 encoded data. + * @param limit maximum size of a DER encoded object. + */ + public ASN1InputStream( + InputStream input, + int limit) + { + this(input, limit, false); + } + + /** + * Create an ASN1InputStream where no DER object will be longer than limit, and constructed + * objects such as sequences will be parsed lazily. + * + * @param input stream containing ASN.1 encoded data. + * @param lazyEvaluate true if parsing inside constructed objects can be delayed. + */ + public ASN1InputStream( + InputStream input, + boolean lazyEvaluate) + { + this(input, StreamUtil.findLimit(input), lazyEvaluate); + } + + /** + * Create an ASN1InputStream where no DER object will be longer than limit, and constructed + * objects such as sequences will be parsed lazily. + * + * @param input stream containing ASN.1 encoded data. + * @param limit maximum size of a DER encoded object. + * @param lazyEvaluate true if parsing inside constructed objects can be delayed. + */ + public ASN1InputStream( + InputStream input, + int limit, + boolean lazyEvaluate) + { + super(input); + this.limit = limit; + this.lazyEvaluate = lazyEvaluate; + this.tmpBuffers = new byte[11][]; + } + + int getLimit() + { + return limit; + } + + protected int readLength() + throws IOException + { + return readLength(this, limit); + } + + protected void readFully( + byte[] bytes) + throws IOException + { + if (Streams.readFully(this, bytes) != bytes.length) + { + throw new EOFException("EOF encountered in middle of object"); + } + } + + /** + * build an object given its tag and the number of bytes to construct it from. + */ + protected ASN1Primitive buildObject( + int tag, + int tagNo, + int length) + throws IOException + { + boolean isConstructed = (tag & CONSTRUCTED) != 0; + + DefiniteLengthInputStream defIn = new DefiniteLengthInputStream(this, length); + + if ((tag & APPLICATION) != 0) + { + return new DERApplicationSpecific(isConstructed, tagNo, defIn.toByteArray()); + } + + if ((tag & TAGGED) != 0) + { + return new ASN1StreamParser(defIn).readTaggedObject(isConstructed, tagNo); + } + + if (isConstructed) + { + // TODO There are other tags that may be constructed (e.g. BIT_STRING) + switch (tagNo) + { + case OCTET_STRING: + // + // yes, people actually do this... + // + ASN1EncodableVector v = buildDEREncodableVector(defIn); + ASN1OctetString[] strings = new ASN1OctetString[v.size()]; + + for (int i = 0; i != strings.length; i++) + { + strings[i] = (ASN1OctetString)v.get(i); + } + + return new BEROctetString(strings); + case SEQUENCE: + if (lazyEvaluate) + { + return new LazyEncodedSequence(defIn.toByteArray()); + } + else + { + return DERFactory.createSequence(buildDEREncodableVector(defIn)); + } + case SET: + return DERFactory.createSet(buildDEREncodableVector(defIn)); + case EXTERNAL: + return new DERExternal(buildDEREncodableVector(defIn)); + default: + throw new IOException("unknown tag " + tagNo + " encountered"); + } + } + + return createPrimitiveDERObject(tagNo, defIn, tmpBuffers); + } + + ASN1EncodableVector buildEncodableVector() + throws IOException + { + ASN1EncodableVector v = new ASN1EncodableVector(); + ASN1Primitive o; + + while ((o = readObject()) != null) + { + v.add(o); + } + + return v; + } + + ASN1EncodableVector buildDEREncodableVector( + DefiniteLengthInputStream dIn) throws IOException + { + return new ASN1InputStream(dIn).buildEncodableVector(); + } + + public ASN1Primitive readObject() + throws IOException + { + int tag = read(); + if (tag <= 0) + { + if (tag == 0) + { + throw new IOException("unexpected end-of-contents marker"); + } + + return null; + } + + // + // calculate tag number + // + int tagNo = readTagNumber(this, tag); + + boolean isConstructed = (tag & CONSTRUCTED) != 0; + + // + // calculate length + // + int length = readLength(); + + if (length < 0) // indefinite length method + { + if (!isConstructed) + { + throw new IOException("indefinite length primitive encoding encountered"); + } + + IndefiniteLengthInputStream indIn = new IndefiniteLengthInputStream(this, limit); + ASN1StreamParser sp = new ASN1StreamParser(indIn, limit); + + if ((tag & APPLICATION) != 0) + { + return new BERApplicationSpecificParser(tagNo, sp).getLoadedObject(); + } + + if ((tag & TAGGED) != 0) + { + return new BERTaggedObjectParser(true, tagNo, sp).getLoadedObject(); + } + + // TODO There are other tags that may be constructed (e.g. BIT_STRING) + switch (tagNo) + { + case OCTET_STRING: + return new BEROctetStringParser(sp).getLoadedObject(); + case SEQUENCE: + return new BERSequenceParser(sp).getLoadedObject(); + case SET: + return new BERSetParser(sp).getLoadedObject(); + case EXTERNAL: + return new DERExternalParser(sp).getLoadedObject(); + default: + throw new IOException("unknown BER object encountered"); + } + } + else + { + try + { + return buildObject(tag, tagNo, length); + } + catch (IllegalArgumentException e) + { + throw new ASN1Exception("corrupted stream detected", e); + } + } + } + + static int readTagNumber(InputStream s, int tag) + throws IOException + { + int tagNo = tag & 0x1f; + + // + // with tagged object tag number is bottom 5 bits, or stored at the start of the content + // + if (tagNo == 0x1f) + { + tagNo = 0; + + int b = s.read(); + + // X.690-0207 8.1.2.4.2 + // "c) bits 7 to 1 of the first subsequent octet shall not all be zero." + if ((b & 0x7f) == 0) // Note: -1 will pass + { + throw new IOException("corrupted stream - invalid high tag number found"); + } + + while ((b >= 0) && ((b & 0x80) != 0)) + { + tagNo |= (b & 0x7f); + tagNo <<= 7; + b = s.read(); + } + + if (b < 0) + { + throw new EOFException("EOF found inside tag value."); + } + + tagNo |= (b & 0x7f); + } + + return tagNo; + } + + static int readLength(InputStream s, int limit) + throws IOException + { + int length = s.read(); + if (length < 0) + { + throw new EOFException("EOF found when length expected"); + } + + if (length == 0x80) + { + return -1; // indefinite-length encoding + } + + if (length > 127) + { + int size = length & 0x7f; + + // Note: The invalid long form "0xff" (see X.690 8.1.3.5c) will be caught here + if (size > 4) + { + throw new IOException("DER length more than 4 bytes: " + size); + } + + length = 0; + for (int i = 0; i < size; i++) + { + int next = s.read(); + + if (next < 0) + { + throw new EOFException("EOF found reading length"); + } + + length = (length << 8) + next; + } + + if (length < 0) + { + throw new IOException("corrupted stream - negative length found"); + } + + if (length >= limit) // after all we must have read at least 1 byte + { + throw new IOException("corrupted stream - out of bounds length found"); + } + } + + return length; + } + + private static byte[] getBuffer(DefiniteLengthInputStream defIn, byte[][] tmpBuffers) + throws IOException + { + int len = defIn.getRemaining(); + if (defIn.getRemaining() < tmpBuffers.length) + { + byte[] buf = tmpBuffers[len]; + + if (buf == null) + { + buf = tmpBuffers[len] = new byte[len]; + } + + Streams.readFully(defIn, buf); + + return buf; + } + else + { + return defIn.toByteArray(); + } + } + + private static char[] getBMPCharBuffer(DefiniteLengthInputStream defIn) + throws IOException + { + int len = defIn.getRemaining() / 2; + char[] buf = new char[len]; + int totalRead = 0; + while (totalRead < len) + { + int ch1 = defIn.read(); + if (ch1 < 0) + { + break; + } + int ch2 = defIn.read(); + if (ch2 < 0) + { + break; + } + buf[totalRead++] = (char)((ch1 << 8) | (ch2 & 0xff)); + } + + return buf; + } + + static ASN1Primitive createPrimitiveDERObject( + int tagNo, + DefiniteLengthInputStream defIn, + byte[][] tmpBuffers) + throws IOException + { + switch (tagNo) + { + case BIT_STRING: + return DERBitString.fromInputStream(defIn.getRemaining(), defIn); + case BMP_STRING: + return new DERBMPString(getBMPCharBuffer(defIn)); + case BOOLEAN: + return ASN1Boolean.fromOctetString(getBuffer(defIn, tmpBuffers)); + case ENUMERATED: + return ASN1Enumerated.fromOctetString(getBuffer(defIn, tmpBuffers)); + case GENERALIZED_TIME: + return new ASN1GeneralizedTime(defIn.toByteArray()); + case GENERAL_STRING: + return new DERGeneralString(defIn.toByteArray()); + case IA5_STRING: + return new DERIA5String(defIn.toByteArray()); + case INTEGER: + return new ASN1Integer(defIn.toByteArray()); + case NULL: + return DERNull.INSTANCE; // actual content is ignored (enforce 0 length?) + case NUMERIC_STRING: + return new DERNumericString(defIn.toByteArray()); + case OBJECT_IDENTIFIER: + return ASN1ObjectIdentifier.fromOctetString(getBuffer(defIn, tmpBuffers)); + case OCTET_STRING: + return new DEROctetString(defIn.toByteArray()); + case PRINTABLE_STRING: + return new DERPrintableString(defIn.toByteArray()); + case T61_STRING: + return new DERT61String(defIn.toByteArray()); + case UNIVERSAL_STRING: + return new DERUniversalString(defIn.toByteArray()); + case UTC_TIME: + return new ASN1UTCTime(defIn.toByteArray()); + case UTF8_STRING: + return new DERUTF8String(defIn.toByteArray()); + case VISIBLE_STRING: + return new DERVisibleString(defIn.toByteArray()); + default: + throw new IOException("unknown tag " + tagNo + " encountered"); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Integer.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Integer.java new file mode 100644 index 0000000..292abb8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Integer.java @@ -0,0 +1,22 @@ +package org.bouncycastle.asn1; + +import javabc.BigInteger; + +public class ASN1Integer + extends DERInteger +{ + ASN1Integer(byte[] bytes) + { + super(bytes); + } + + public ASN1Integer(BigInteger value) + { + super(value); + } + + public ASN1Integer(int value) + { + super(value); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Null.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Null.java new file mode 100644 index 0000000..99582d9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Null.java @@ -0,0 +1,64 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +/** + * A NULL object. + */ +public abstract class ASN1Null + extends ASN1Primitive +{ + public ASN1Null() + { + } + + public static ASN1Null getInstance(Object o) + { + if (o instanceof ASN1Null) + { + return (ASN1Null)o; + } + + if (o != null) + { + try + { + return ASN1Null.getInstance(ASN1Primitive.fromByteArray((byte[])o)); + } + catch (IOException e) + { + throw new IllegalArgumentException("failed to construct NULL from byte[]: " + e.getMessage()); + } + catch (ClassCastException e) + { + throw new IllegalArgumentException("unknown object in getInstance(): " + o.getClass().getName()); + } + } + + return null; + } + + public int hashCode() + { + return -1; + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof ASN1Null)) + { + return false; + } + + return true; + } + + abstract void encode(ASN1OutputStream out) + throws IOException; + + public String toString() + { + return "NULL"; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Object.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Object.java new file mode 100644 index 0000000..956fb7d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Object.java @@ -0,0 +1,97 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +public abstract class ASN1Object + implements ASN1Encodable +{ + /** + * Return the default BER or DER encoding for this object. + * + * @return BER/DER byte encoded object. + * @throws java.io.IOException on encoding error. + */ + public byte[] getEncoded() + throws IOException + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + ASN1OutputStream aOut = new ASN1OutputStream(bOut); + + aOut.writeObject(this); + + return bOut.toByteArray(); + } + + /** + * Return either the default for "BER" or a DER encoding if "DER" is specified. + * + * @param encoding name of encoding to use. + * @return byte encoded object. + * @throws IOException on encoding error. + */ + public byte[] getEncoded( + String encoding) + throws IOException + { + if (encoding.equals(ASN1Encoding.DER)) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + DEROutputStream dOut = new DEROutputStream(bOut); + + dOut.writeObject(this); + + return bOut.toByteArray(); + } + else if (encoding.equals(ASN1Encoding.DL)) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + DLOutputStream dOut = new DLOutputStream(bOut); + + dOut.writeObject(this); + + return bOut.toByteArray(); + } + + return this.getEncoded(); + } + + public int hashCode() + { + return this.toASN1Primitive().hashCode(); + } + + public boolean equals( + Object o) + { + if (this == o) + { + return true; + } + + if (!(o instanceof ASN1Encodable)) + { + return false; + } + + ASN1Encodable other = (ASN1Encodable)o; + + return this.toASN1Primitive().equals(other.toASN1Primitive()); + } + + /** + * @deprecated use toASN1Primitive() + * @return the underlying primitive type. + */ + public ASN1Primitive toASN1Object() + { + return this.toASN1Primitive(); + } + + protected static boolean hasEncodedTagValue(Object obj, int tagValue) + { + return (obj instanceof byte[]) && ((byte[])obj)[0] == tagValue; + } + + public abstract ASN1Primitive toASN1Primitive(); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1ObjectIdentifier.java b/common/src/main/java/org/bouncycastle/asn1/ASN1ObjectIdentifier.java new file mode 100644 index 0000000..eb29838 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1ObjectIdentifier.java @@ -0,0 +1,37 @@ +package org.bouncycastle.asn1; + +public class ASN1ObjectIdentifier + extends DERObjectIdentifier +{ + public ASN1ObjectIdentifier(String identifier) + { + super(identifier); + } + + ASN1ObjectIdentifier(byte[] bytes) + { + super(bytes); + } + + /** + * Return an OID that creates a branch under the current one. + * + * @param branchID node numbers for the new branch. + * @return the OID for the new created branch. + */ + public ASN1ObjectIdentifier branch(String branchID) + { + return new ASN1ObjectIdentifier(getId() + "." + branchID); + } + + /** + * Return true if this oid is an extension of the passed in branch, stem. + * @param stem the arc or branch that is a possible parent. + * @return true if the branch is on the passed in stem, false otherwise. + */ + public boolean on(ASN1ObjectIdentifier stem) + { + String id = getId(), stemId = stem.getId(); + return id.length() > stemId.length() && id.charAt(stemId.length()) == '.' && id.startsWith(stemId); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1OctetString.java b/common/src/main/java/org/bouncycastle/asn1/ASN1OctetString.java new file mode 100644 index 0000000..703b858 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1OctetString.java @@ -0,0 +1,146 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.encoders.Hex; + +public abstract class ASN1OctetString + extends ASN1Primitive + implements ASN1OctetStringParser +{ + byte[] string; + + /** + * return an Octet String from a tagged object. + * + * @param obj the tagged object holding the object we want. + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static ASN1OctetString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof ASN1OctetString) + { + return getInstance(o); + } + else + { + return BEROctetString.fromSequence(ASN1Sequence.getInstance(o)); + } + } + + /** + * return an Octet String from the given object. + * + * @param obj the object we want converted. + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1OctetString getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1OctetString) + { + return (ASN1OctetString)obj; + } + else if (obj instanceof byte[]) + { + try + { + return ASN1OctetString.getInstance(ASN1Primitive.fromByteArray((byte[])obj)); + } + catch (IOException e) + { + throw new IllegalArgumentException("failed to construct OCTET STRING from byte[]: " + e.getMessage()); + } + } + else if (obj instanceof ASN1Encodable) + { + ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); + + if (primitive instanceof ASN1OctetString) + { + return (ASN1OctetString)primitive; + } + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * @param string the octets making up the octet string. + */ + public ASN1OctetString( + byte[] string) + { + if (string == null) + { + throw new NullPointerException("string cannot be null"); + } + this.string = string; + } + + public InputStream getOctetStream() + { + return new ByteArrayInputStream(string); + } + + public ASN1OctetStringParser parser() + { + return this; + } + + public byte[] getOctets() + { + return string; + } + + public int hashCode() + { + return Arrays.hashCode(this.getOctets()); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof ASN1OctetString)) + { + return false; + } + + ASN1OctetString other = (ASN1OctetString)o; + + return Arrays.areEqual(string, other.string); + } + + public ASN1Primitive getLoadedObject() + { + return this.toASN1Primitive(); + } + + ASN1Primitive toDERObject() + { + return new DEROctetString(string); + } + + ASN1Primitive toDLObject() + { + return new DEROctetString(string); + } + + abstract void encode(ASN1OutputStream out) + throws IOException; + + public String toString() + { + return "#"+new String(Hex.encode(string)); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1OctetStringParser.java b/common/src/main/java/org/bouncycastle/asn1/ASN1OctetStringParser.java new file mode 100644 index 0000000..0042317 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1OctetStringParser.java @@ -0,0 +1,9 @@ +package org.bouncycastle.asn1; + +import java.io.InputStream; + +public interface ASN1OctetStringParser + extends ASN1Encodable, InMemoryRepresentable +{ + public InputStream getOctetStream(); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1OutputStream.java b/common/src/main/java/org/bouncycastle/asn1/ASN1OutputStream.java new file mode 100644 index 0000000..9a46a78 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1OutputStream.java @@ -0,0 +1,194 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Stream that produces output based on the default encoding for the passed in objects. + */ +public class ASN1OutputStream +{ + private OutputStream os; + + public ASN1OutputStream( + OutputStream os) + { + this.os = os; + } + + void writeLength( + int length) + throws IOException + { + if (length > 127) + { + int size = 1; + int val = length; + + while ((val >>>= 8) != 0) + { + size++; + } + + write((byte)(size | 0x80)); + + for (int i = (size - 1) * 8; i >= 0; i -= 8) + { + write((byte)(length >> i)); + } + } + else + { + write((byte)length); + } + } + + void write(int b) + throws IOException + { + os.write(b); + } + + void write(byte[] bytes) + throws IOException + { + os.write(bytes); + } + + void write(byte[] bytes, int off, int len) + throws IOException + { + os.write(bytes, off, len); + } + + void writeEncoded( + int tag, + byte[] bytes) + throws IOException + { + write(tag); + writeLength(bytes.length); + write(bytes); + } + + void writeTag(int flags, int tagNo) + throws IOException + { + if (tagNo < 31) + { + write(flags | tagNo); + } + else + { + write(flags | 0x1f); + if (tagNo < 128) + { + write(tagNo); + } + else + { + byte[] stack = new byte[5]; + int pos = stack.length; + + stack[--pos] = (byte)(tagNo & 0x7F); + + do + { + tagNo >>= 7; + stack[--pos] = (byte)(tagNo & 0x7F | 0x80); + } + while (tagNo > 127); + + write(stack, pos, stack.length - pos); + } + } + } + + void writeEncoded(int flags, int tagNo, byte[] bytes) + throws IOException + { + writeTag(flags, tagNo); + writeLength(bytes.length); + write(bytes); + } + + protected void writeNull() + throws IOException + { + os.write(BERTags.NULL); + os.write(0x00); + } + + public void writeObject( + ASN1Encodable obj) + throws IOException + { + if (obj != null) + { + obj.toASN1Primitive().encode(this); + } + else + { + throw new IOException("null object detected"); + } + } + + void writeImplicitObject(ASN1Primitive obj) + throws IOException + { + if (obj != null) + { + obj.encode(new ImplicitOutputStream(os)); + } + else + { + throw new IOException("null object detected"); + } + } + + public void close() + throws IOException + { + os.close(); + } + + public void flush() + throws IOException + { + os.flush(); + } + + ASN1OutputStream getDERSubStream() + { + return new DEROutputStream(os); + } + + ASN1OutputStream getDLSubStream() + { + return new DLOutputStream(os); + } + + private class ImplicitOutputStream + extends ASN1OutputStream + { + private boolean first = true; + + public ImplicitOutputStream(OutputStream os) + { + super(os); + } + + public void write(int b) + throws IOException + { + if (first) + { + first = false; + } + else + { + super.write(b); + } + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1ParsingException.java b/common/src/main/java/org/bouncycastle/asn1/ASN1ParsingException.java new file mode 100644 index 0000000..995b5e9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1ParsingException.java @@ -0,0 +1,23 @@ +package org.bouncycastle.asn1; + +public class ASN1ParsingException + extends IllegalStateException +{ + private Throwable cause; + + public ASN1ParsingException(String message) + { + super(message); + } + + public ASN1ParsingException(String message, Throwable cause) + { + super(message); + this.cause = cause; + } + + public Throwable getCause() + { + return cause; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Primitive.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Primitive.java new file mode 100644 index 0000000..e6fe137 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Primitive.java @@ -0,0 +1,69 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public abstract class ASN1Primitive + extends ASN1Object +{ + ASN1Primitive() + { + + } + + /** + * Create a base ASN.1 object from a byte stream. + * + * @param data the byte stream to parse. + * @return the base ASN.1 object represented by the byte stream. + * @exception IOException if there is a problem parsing the data. + */ + public static ASN1Primitive fromByteArray(byte[] data) + throws IOException + { + ASN1InputStream aIn = new ASN1InputStream(data); + + try + { + return aIn.readObject(); + } + catch (ClassCastException e) + { + throw new IOException("cannot recognise object in stream"); + } + } + + public final boolean equals(Object o) + { + if (this == o) + { + return true; + } + + return (o instanceof ASN1Encodable) && asn1Equals(((ASN1Encodable)o).toASN1Primitive()); + } + + public ASN1Primitive toASN1Primitive() + { + return this; + } + + ASN1Primitive toDERObject() + { + return this; + } + + ASN1Primitive toDLObject() + { + return this; + } + + public abstract int hashCode(); + + abstract boolean isConstructed(); + + abstract int encodedLength() throws IOException; + + abstract void encode(ASN1OutputStream out) throws IOException; + + abstract boolean asn1Equals(ASN1Primitive o); +} \ No newline at end of file diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Sequence.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Sequence.java new file mode 100644 index 0000000..0507a2b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Sequence.java @@ -0,0 +1,323 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; +import java.util.Vector; + +public abstract class ASN1Sequence + extends ASN1Primitive +{ + protected Vector seq = new Vector(); + + /** + * return an ASN1Sequence from the given object. + * + * @param obj the object we want converted. + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1Sequence getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1Sequence) + { + return (ASN1Sequence)obj; + } + else if (obj instanceof ASN1SequenceParser) + { + return ASN1Sequence.getInstance(((ASN1SequenceParser)obj).toASN1Primitive()); + } + else if (obj instanceof byte[]) + { + try + { + return ASN1Sequence.getInstance(fromByteArray((byte[])obj)); + } + catch (IOException e) + { + throw new IllegalArgumentException("failed to construct sequence from byte[]: " + e.getMessage()); + } + } + else if (obj instanceof ASN1Encodable) + { + ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); + + if (primitive instanceof ASN1Sequence) + { + return (ASN1Sequence)primitive; + } + } + + throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); + } + + /** + * Return an ASN1 sequence from a tagged object. There is a special + * case here, if an object appears to have been explicitly tagged on + * reading but we were expecting it to be implicitly tagged in the + * normal course of events it indicates that we lost the surrounding + * sequence - so we need to add it back (this will happen if the tagged + * object is a sequence that contains other sequences). If you are + * dealing with implicitly tagged sequences you really should + * be using this method. + * + * @param obj the tagged object. + * @param explicit true if the object is meant to be explicitly tagged, + * false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static ASN1Sequence getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + if (explicit) + { + if (!obj.isExplicit()) + { + throw new IllegalArgumentException("object implicit - explicit expected."); + } + + return ASN1Sequence.getInstance(obj.getObject().toASN1Primitive()); + } + else + { + // + // constructed object which appears to be explicitly tagged + // when it should be implicit means we have to add the + // surrounding sequence. + // + if (obj.isExplicit()) + { + if (obj instanceof BERTaggedObject) + { + return new BERSequence(obj.getObject()); + } + else + { + return new DLSequence(obj.getObject()); + } + } + else + { + if (obj.getObject() instanceof ASN1Sequence) + { + return (ASN1Sequence)obj.getObject(); + } + } + } + + throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); + } + + /** + * create an empty sequence + */ + protected ASN1Sequence() + { + } + + /** + * create a sequence containing one object + */ + protected ASN1Sequence( + ASN1Encodable obj) + { + seq.addElement(obj); + } + + /** + * create a sequence containing a vector of objects. + */ + protected ASN1Sequence( + ASN1EncodableVector v) + { + for (int i = 0; i != v.size(); i++) + { + seq.addElement(v.get(i)); + } + } + + /** + * create a sequence containing a vector of objects. + */ + protected ASN1Sequence( + ASN1Encodable[] array) + { + for (int i = 0; i != array.length; i++) + { + seq.addElement(array[i]); + } + } + + public ASN1Encodable[] toArray() + { + ASN1Encodable[] values = new ASN1Encodable[this.size()]; + + for (int i = 0; i != this.size(); i++) + { + values[i] = this.getObjectAt(i); + } + + return values; + } + + public Enumeration getObjects() + { + return seq.elements(); + } + + public ASN1SequenceParser parser() + { + final ASN1Sequence outer = this; + + return new ASN1SequenceParser() + { + private final int max = size(); + + private int index; + + public ASN1Encodable readObject() throws IOException + { + if (index == max) + { + return null; + } + + ASN1Encodable obj = getObjectAt(index++); + if (obj instanceof ASN1Sequence) + { + return ((ASN1Sequence)obj).parser(); + } + if (obj instanceof ASN1Set) + { + return ((ASN1Set)obj).parser(); + } + + return obj; + } + + public ASN1Primitive getLoadedObject() + { + return outer; + } + + public ASN1Primitive toASN1Primitive() + { + return outer; + } + }; + } + + /** + * return the object at the sequence position indicated by index. + * + * @param index the sequence number (starting at zero) of the object + * @return the object at the sequence position indicated by index. + */ + public ASN1Encodable getObjectAt( + int index) + { + return (ASN1Encodable)seq.elementAt(index); + } + + /** + * return the number of objects in this sequence. + * + * @return the number of objects in this sequence. + */ + public int size() + { + return seq.size(); + } + + public int hashCode() + { + Enumeration e = this.getObjects(); + int hashCode = size(); + + while (e.hasMoreElements()) + { + Object o = getNext(e); + hashCode *= 17; + + hashCode ^= o.hashCode(); + } + + return hashCode; + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof ASN1Sequence)) + { + return false; + } + + ASN1Sequence other = (ASN1Sequence)o; + + if (this.size() != other.size()) + { + return false; + } + + Enumeration s1 = this.getObjects(); + Enumeration s2 = other.getObjects(); + + while (s1.hasMoreElements()) + { + ASN1Encodable obj1 = getNext(s1); + ASN1Encodable obj2 = getNext(s2); + + ASN1Primitive o1 = obj1.toASN1Primitive(); + ASN1Primitive o2 = obj2.toASN1Primitive(); + + if (o1 == o2 || o1.equals(o2)) + { + continue; + } + + return false; + } + + return true; + } + + private ASN1Encodable getNext(Enumeration e) + { + ASN1Encodable encObj = (ASN1Encodable)e.nextElement(); + + return encObj; + } + + ASN1Primitive toDERObject() + { + ASN1Sequence derSeq = new DERSequence(); + + derSeq.seq = this.seq; + + return derSeq; + } + + ASN1Primitive toDLObject() + { + ASN1Sequence dlSeq = new DLSequence(); + + dlSeq.seq = this.seq; + + return dlSeq; + } + + boolean isConstructed() + { + return true; + } + + abstract void encode(ASN1OutputStream out) + throws IOException; + + public String toString() + { + return seq.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1SequenceParser.java b/common/src/main/java/org/bouncycastle/asn1/ASN1SequenceParser.java new file mode 100644 index 0000000..441f150 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1SequenceParser.java @@ -0,0 +1,10 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public interface ASN1SequenceParser + extends ASN1Encodable, InMemoryRepresentable +{ + ASN1Encodable readObject() + throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1Set.java b/common/src/main/java/org/bouncycastle/asn1/ASN1Set.java new file mode 100644 index 0000000..8f785b8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1Set.java @@ -0,0 +1,464 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Enumeration; +import java.util.Vector; + +abstract public class ASN1Set + extends ASN1Primitive +{ + private Vector set = new Vector(); + private boolean isSorted = false; + + /** + * return an ASN1Set from the given object. + * + * @param obj the object we want converted. + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1Set getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1Set) + { + return (ASN1Set)obj; + } + else if (obj instanceof ASN1SetParser) + { + return ASN1Set.getInstance(((ASN1SetParser)obj).toASN1Primitive()); + } + else if (obj instanceof byte[]) + { + try + { + return ASN1Set.getInstance(ASN1Primitive.fromByteArray((byte[])obj)); + } + catch (IOException e) + { + throw new IllegalArgumentException("failed to construct set from byte[]: " + e.getMessage()); + } + } + else if (obj instanceof ASN1Encodable) + { + ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); + + if (primitive instanceof ASN1Set) + { + return (ASN1Set)primitive; + } + } + + throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); + } + + /** + * Return an ASN1 set from a tagged object. There is a special + * case here, if an object appears to have been explicitly tagged on + * reading but we were expecting it to be implicitly tagged in the + * normal course of events it indicates that we lost the surrounding + * set - so we need to add it back (this will happen if the tagged + * object is a sequence that contains other sequences). If you are + * dealing with implicitly tagged sets you really should + * be using this method. + * + * @param obj the tagged object. + * @param explicit true if the object is meant to be explicitly tagged + * false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static ASN1Set getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + if (explicit) + { + if (!obj.isExplicit()) + { + throw new IllegalArgumentException("object implicit - explicit expected."); + } + + return (ASN1Set)obj.getObject(); + } + else + { + // + // constructed object which appears to be explicitly tagged + // and it's really implicit means we have to add the + // surrounding set. + // + if (obj.isExplicit()) + { + if (obj instanceof BERTaggedObject) + { + return new BERSet(obj.getObject()); + } + else + { + return new DLSet(obj.getObject()); + } + } + else + { + if (obj.getObject() instanceof ASN1Set) + { + return (ASN1Set)obj.getObject(); + } + + // + // in this case the parser returns a sequence, convert it + // into a set. + // + + + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (obj.getObject() instanceof ASN1Sequence) + { + ASN1Sequence s = (ASN1Sequence)obj.getObject(); + + if (obj instanceof BERTaggedObject) + { + return new BERSet(s.toArray()); + } + else + { + return new DLSet(s.toArray()); + } + } + } + } + + throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); + } + + protected ASN1Set() + { + } + + /** + * create a sequence containing one object + */ + protected ASN1Set( + ASN1Encodable obj) + { + set.addElement(obj); + } + + /** + * create a sequence containing a vector of objects. + */ + protected ASN1Set( + ASN1EncodableVector v, + boolean doSort) + { + for (int i = 0; i != v.size(); i++) + { + set.addElement(v.get(i)); + } + + if (doSort) + { + this.sort(); + } + } + + /** + * create a sequence containing a vector of objects. + */ + protected ASN1Set( + ASN1Encodable[] array, + boolean doSort) + { + for (int i = 0; i != array.length; i++) + { + set.addElement(array[i]); + } + + if (doSort) + { + this.sort(); + } + } + + public Enumeration getObjects() + { + return set.elements(); + } + + /** + * return the object at the set position indicated by index. + * + * @param index the set number (starting at zero) of the object + * @return the object at the set position indicated by index. + */ + public ASN1Encodable getObjectAt( + int index) + { + return (ASN1Encodable)set.elementAt(index); + } + + /** + * return the number of objects in this set. + * + * @return the number of objects in this set. + */ + public int size() + { + return set.size(); + } + + public ASN1Encodable[] toArray() + { + ASN1Encodable[] values = new ASN1Encodable[this.size()]; + + for (int i = 0; i != this.size(); i++) + { + values[i] = this.getObjectAt(i); + } + + return values; + } + + public ASN1SetParser parser() + { + final ASN1Set outer = this; + + return new ASN1SetParser() + { + private final int max = size(); + + private int index; + + public ASN1Encodable readObject() throws IOException + { + if (index == max) + { + return null; + } + + ASN1Encodable obj = getObjectAt(index++); + if (obj instanceof ASN1Sequence) + { + return ((ASN1Sequence)obj).parser(); + } + if (obj instanceof ASN1Set) + { + return ((ASN1Set)obj).parser(); + } + + return obj; + } + + public ASN1Primitive getLoadedObject() + { + return outer; + } + + public ASN1Primitive toASN1Primitive() + { + return outer; + } + }; + } + + public int hashCode() + { + Enumeration e = this.getObjects(); + int hashCode = size(); + + while (e.hasMoreElements()) + { + Object o = getNext(e); + hashCode *= 17; + + hashCode ^= o.hashCode(); + } + + return hashCode; + } + + ASN1Primitive toDERObject() + { + if (isSorted) + { + ASN1Set derSet = new DERSet(); + + derSet.set = this.set; + + return derSet; + } + else + { + Vector v = new Vector(); + + for (int i = 0; i != set.size(); i++) + { + v.addElement(set.elementAt(i)); + } + + ASN1Set derSet = new DERSet(); + + derSet.set = v; + + derSet.sort(); + + return derSet; + } + } + + ASN1Primitive toDLObject() + { + ASN1Set derSet = new DLSet(); + + derSet.set = this.set; + + return derSet; + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof ASN1Set)) + { + return false; + } + + ASN1Set other = (ASN1Set)o; + + if (this.size() != other.size()) + { + return false; + } + + Enumeration s1 = this.getObjects(); + Enumeration s2 = other.getObjects(); + + while (s1.hasMoreElements()) + { + ASN1Encodable obj1 = getNext(s1); + ASN1Encodable obj2 = getNext(s2); + + ASN1Primitive o1 = obj1.toASN1Primitive(); + ASN1Primitive o2 = obj2.toASN1Primitive(); + + if (o1 == o2 || o1.equals(o2)) + { + continue; + } + + return false; + } + + return true; + } + + private ASN1Encodable getNext(Enumeration e) + { + ASN1Encodable encObj = (ASN1Encodable)e.nextElement(); + + // unfortunately null was allowed as a substitute for DER null + if (encObj == null) + { + return DERNull.INSTANCE; + } + + return encObj; + } + + /** + * return true if a <= b (arrays are assumed padded with zeros). + */ + private boolean lessThanOrEqual( + byte[] a, + byte[] b) + { + int len = Math.min(a.length, b.length); + for (int i = 0; i != len; ++i) + { + if (a[i] != b[i]) + { + return (a[i] & 0xff) < (b[i] & 0xff); + } + } + return len == a.length; + } + + private byte[] getEncoded( + ASN1Encodable obj) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + ASN1OutputStream aOut = new ASN1OutputStream(bOut); + + try + { + aOut.writeObject(obj); + } + catch (IOException e) + { + throw new IllegalArgumentException("cannot encode object added to SET"); + } + + return bOut.toByteArray(); + } + + protected void sort() + { + if (!isSorted) + { + isSorted = true; + if (set.size() > 1) + { + boolean swapped = true; + int lastSwap = set.size() - 1; + + while (swapped) + { + int index = 0; + int swapIndex = 0; + byte[] a = getEncoded((ASN1Encodable)set.elementAt(0)); + + swapped = false; + + while (index != lastSwap) + { + byte[] b = getEncoded((ASN1Encodable)set.elementAt(index + 1)); + + if (lessThanOrEqual(a, b)) + { + a = b; + } + else + { + Object o = set.elementAt(index); + + set.setElementAt(set.elementAt(index + 1), index); + set.setElementAt(o, index + 1); + + swapped = true; + swapIndex = index; + } + + index++; + } + + lastSwap = swapIndex; + } + } + } + } + + boolean isConstructed() + { + return true; + } + + abstract void encode(ASN1OutputStream out) + throws IOException; + + public String toString() + { + return set.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1SetParser.java b/common/src/main/java/org/bouncycastle/asn1/ASN1SetParser.java new file mode 100644 index 0000000..e025535 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1SetParser.java @@ -0,0 +1,10 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public interface ASN1SetParser + extends ASN1Encodable, InMemoryRepresentable +{ + public ASN1Encodable readObject() + throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1StreamParser.java b/common/src/main/java/org/bouncycastle/asn1/ASN1StreamParser.java new file mode 100644 index 0000000..420fa34 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1StreamParser.java @@ -0,0 +1,247 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class ASN1StreamParser +{ + private final InputStream _in; + private final int _limit; + private final byte[][] tmpBuffers; + + public ASN1StreamParser( + InputStream in) + { + this(in, StreamUtil.findLimit(in)); + } + + public ASN1StreamParser( + InputStream in, + int limit) + { + this._in = in; + this._limit = limit; + + this.tmpBuffers = new byte[11][]; + } + + public ASN1StreamParser( + byte[] encoding) + { + this(new ByteArrayInputStream(encoding), encoding.length); + } + + ASN1Encodable readIndef(int tagValue) throws IOException + { + // Note: INDEF => CONSTRUCTED + + // TODO There are other tags that may be constructed (e.g. BIT_STRING) + switch (tagValue) + { + case BERTags.EXTERNAL: + return new DERExternalParser(this); + case BERTags.OCTET_STRING: + return new BEROctetStringParser(this); + case BERTags.SEQUENCE: + return new BERSequenceParser(this); + case BERTags.SET: + return new BERSetParser(this); + default: + throw new ASN1Exception("unknown BER object encountered: 0x" + Integer.toHexString(tagValue)); + } + } + + ASN1Encodable readImplicit(boolean constructed, int tag) throws IOException + { + if (_in instanceof IndefiniteLengthInputStream) + { + if (!constructed) + { + throw new IOException("indefinite length primitive encoding encountered"); + } + + return readIndef(tag); + } + + if (constructed) + { + switch (tag) + { + case BERTags.SET: + return new DERSetParser(this); + case BERTags.SEQUENCE: + return new DERSequenceParser(this); + case BERTags.OCTET_STRING: + return new BEROctetStringParser(this); + } + } + else + { + switch (tag) + { + case BERTags.SET: + throw new ASN1Exception("sequences must use constructed encoding (see X.690 8.9.1/8.10.1)"); + case BERTags.SEQUENCE: + throw new ASN1Exception("sets must use constructed encoding (see X.690 8.11.1/8.12.1)"); + case BERTags.OCTET_STRING: + return new DEROctetStringParser((DefiniteLengthInputStream)_in); + } + } + + // TODO ASN1Exception + throw new RuntimeException("implicit tagging not implemented"); + } + + ASN1Primitive readTaggedObject(boolean constructed, int tag) throws IOException + { + if (!constructed) + { + // Note: !CONSTRUCTED => IMPLICIT + DefiniteLengthInputStream defIn = (DefiniteLengthInputStream)_in; + return new DERTaggedObject(false, tag, new DEROctetString(defIn.toByteArray())); + } + + ASN1EncodableVector v = readVector(); + + if (_in instanceof IndefiniteLengthInputStream) + { + return v.size() == 1 + ? new BERTaggedObject(true, tag, v.get(0)) + : new BERTaggedObject(false, tag, BERFactory.createSequence(v)); + } + + return v.size() == 1 + ? new DERTaggedObject(true, tag, v.get(0)) + : new DERTaggedObject(false, tag, DERFactory.createSequence(v)); + } + + public ASN1Encodable readObject() + throws IOException + { + int tag = _in.read(); + if (tag == -1) + { + return null; + } + + // + // turn of looking for "00" while we resolve the tag + // + set00Check(false); + + // + // calculate tag number + // + int tagNo = ASN1InputStream.readTagNumber(_in, tag); + + boolean isConstructed = (tag & BERTags.CONSTRUCTED) != 0; + + // + // calculate length + // + int length = ASN1InputStream.readLength(_in, _limit); + + if (length < 0) // indefinite length method + { + if (!isConstructed) + { + throw new IOException("indefinite length primitive encoding encountered"); + } + + IndefiniteLengthInputStream indIn = new IndefiniteLengthInputStream(_in, _limit); + ASN1StreamParser sp = new ASN1StreamParser(indIn, _limit); + + if ((tag & BERTags.APPLICATION) != 0) + { + return new BERApplicationSpecificParser(tagNo, sp); + } + + if ((tag & BERTags.TAGGED) != 0) + { + return new BERTaggedObjectParser(true, tagNo, sp); + } + + return sp.readIndef(tagNo); + } + else + { + DefiniteLengthInputStream defIn = new DefiniteLengthInputStream(_in, length); + + if ((tag & BERTags.APPLICATION) != 0) + { + return new DERApplicationSpecific(isConstructed, tagNo, defIn.toByteArray()); + } + + if ((tag & BERTags.TAGGED) != 0) + { + return new BERTaggedObjectParser(isConstructed, tagNo, new ASN1StreamParser(defIn)); + } + + if (isConstructed) + { + // TODO There are other tags that may be constructed (e.g. BIT_STRING) + switch (tagNo) + { + case BERTags.OCTET_STRING: + // + // yes, people actually do this... + // + return new BEROctetStringParser(new ASN1StreamParser(defIn)); + case BERTags.SEQUENCE: + return new DERSequenceParser(new ASN1StreamParser(defIn)); + case BERTags.SET: + return new DERSetParser(new ASN1StreamParser(defIn)); + case BERTags.EXTERNAL: + return new DERExternalParser(new ASN1StreamParser(defIn)); + default: + throw new IOException("unknown tag " + tagNo + " encountered"); + } + } + + // Some primitive encodings can be handled by parsers too... + switch (tagNo) + { + case BERTags.OCTET_STRING: + return new DEROctetStringParser(defIn); + } + + try + { + return ASN1InputStream.createPrimitiveDERObject(tagNo, defIn, tmpBuffers); + } + catch (IllegalArgumentException e) + { + throw new ASN1Exception("corrupted stream detected", e); + } + } + } + + private void set00Check(boolean enabled) + { + if (_in instanceof IndefiniteLengthInputStream) + { + ((IndefiniteLengthInputStream)_in).setEofOn00(enabled); + } + } + + ASN1EncodableVector readVector() throws IOException + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + ASN1Encodable obj; + while ((obj = readObject()) != null) + { + if (obj instanceof InMemoryRepresentable) + { + v.add(((InMemoryRepresentable)obj).getLoadedObject()); + } + else + { + v.add(obj.toASN1Primitive()); + } + } + + return v; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1String.java b/common/src/main/java/org/bouncycastle/asn1/ASN1String.java new file mode 100644 index 0000000..fde4e23 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1String.java @@ -0,0 +1,6 @@ +package org.bouncycastle.asn1; + +public interface ASN1String +{ + public String getString(); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObject.java b/common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObject.java new file mode 100644 index 0000000..fb1e244 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObject.java @@ -0,0 +1,236 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +/** + * ASN.1 TaggedObject - in ASN.1 notation this is any object preceded by + * a [n] where n is some number - these are assumed to follow the construction + * rules (as with sequences). + */ +public abstract class ASN1TaggedObject + extends ASN1Primitive + implements ASN1TaggedObjectParser +{ + int tagNo; + boolean empty = false; + boolean explicit = true; + ASN1Encodable obj = null; + + static public ASN1TaggedObject getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + if (explicit) + { + return (ASN1TaggedObject)obj.getObject(); + } + + throw new IllegalArgumentException("implicitly tagged tagged object"); + } + + static public ASN1TaggedObject getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1TaggedObject) + { + return (ASN1TaggedObject)obj; + } + else if (obj instanceof byte[]) + { + try + { + return ASN1TaggedObject.getInstance(fromByteArray((byte[])obj)); + } + catch (IOException e) + { + throw new IllegalArgumentException("failed to construct tagged object from byte[]: " + e.getMessage()); + } + } + + throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); + } + + /** + * Create a tagged object with the style given by the value of explicit. + *

        + * If the object implements ASN1Choice the tag style will always be changed + * to explicit in accordance with the ASN.1 encoding rules. + *

        + * @param explicit true if the object is explicitly tagged. + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public ASN1TaggedObject( + boolean explicit, + int tagNo, + ASN1Encodable obj) + { + if (obj instanceof ASN1Choice) + { + this.explicit = true; + } + else + { + this.explicit = explicit; + } + + this.tagNo = tagNo; + + if (this.explicit) + { + this.obj = obj; + } + else + { + ASN1Primitive prim = obj.toASN1Primitive(); + + if (prim instanceof ASN1Set) + { + ASN1Set s = null; + } + + this.obj = obj; + } + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof ASN1TaggedObject)) + { + return false; + } + + ASN1TaggedObject other = (ASN1TaggedObject)o; + + if (tagNo != other.tagNo || empty != other.empty || explicit != other.explicit) + { + return false; + } + + if(obj == null) + { + if (other.obj != null) + { + return false; + } + } + else + { + if (!(obj.toASN1Primitive().equals(other.obj.toASN1Primitive()))) + { + return false; + } + } + + return true; + } + + public int hashCode() + { + int code = tagNo; + + // TODO: actually this is wrong - the problem is that a re-encoded + // object may end up with a different hashCode due to implicit + // tagging. As implicit tagging is ambiguous if a sequence is involved + // it seems the only correct method for both equals and hashCode is to + // compare the encodings... + if (obj != null) + { + code ^= obj.hashCode(); + } + + return code; + } + + public int getTagNo() + { + return tagNo; + } + + /** + * return whether or not the object may be explicitly tagged. + *

        + * Note: if the object has been read from an input stream, the only + * time you can be sure if isExplicit is returning the true state of + * affairs is if it returns false. An implicitly tagged object may appear + * to be explicitly tagged, so you need to understand the context under + * which the reading was done as well, see getObject below. + */ + public boolean isExplicit() + { + return explicit; + } + + public boolean isEmpty() + { + return empty; + } + + /** + * return whatever was following the tag. + *

        + * Note: tagged objects are generally context dependent if you're + * trying to extract a tagged object you should be going via the + * appropriate getInstance method. + */ + public ASN1Primitive getObject() + { + if (obj != null) + { + return obj.toASN1Primitive(); + } + + return null; + } + + /** + * Return the object held in this tagged object as a parser assuming it has + * the type of the passed in tag. If the object doesn't have a parser + * associated with it, the base object is returned. + */ + public ASN1Encodable getObjectParser( + int tag, + boolean isExplicit) + { + switch (tag) + { + case BERTags.SET: + return ASN1Set.getInstance(this, isExplicit).parser(); + case BERTags.SEQUENCE: + return ASN1Sequence.getInstance(this, isExplicit).parser(); + case BERTags.OCTET_STRING: + return ASN1OctetString.getInstance(this, isExplicit).parser(); + } + + if (isExplicit) + { + return getObject(); + } + + throw new RuntimeException("implicit tagging not implemented for tag: " + tag); + } + + public ASN1Primitive getLoadedObject() + { + return this.toASN1Primitive(); + } + + ASN1Primitive toDERObject() + { + return new DERTaggedObject(explicit, tagNo, obj); + } + + ASN1Primitive toDLObject() + { + return new DLTaggedObject(explicit, tagNo, obj); + } + + abstract void encode(ASN1OutputStream out) + throws IOException; + + public String toString() + { + return "[" + tagNo + "]" + obj; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObjectParser.java b/common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObjectParser.java new file mode 100644 index 0000000..a681dc9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1TaggedObjectParser.java @@ -0,0 +1,12 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public interface ASN1TaggedObjectParser + extends ASN1Encodable, InMemoryRepresentable +{ + public int getTagNo(); + + public ASN1Encodable getObjectParser(int tag, boolean isExplicit) + throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java b/common/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java new file mode 100644 index 0000000..aac76e1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ASN1UTCTime.java @@ -0,0 +1,22 @@ +package org.bouncycastle.asn1; + +import java.util.Date; + +public class ASN1UTCTime + extends DERUTCTime +{ + ASN1UTCTime(byte[] bytes) + { + super(bytes); + } + + public ASN1UTCTime(Date date) + { + super(date); + } + + public ASN1UTCTime(String time) + { + super(time); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecific.java b/common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecific.java new file mode 100644 index 0000000..8bc8a4e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecific.java @@ -0,0 +1,10 @@ +package org.bouncycastle.asn1; + +public class BERApplicationSpecific + extends DERApplicationSpecific +{ + public BERApplicationSpecific(int tagNo, ASN1EncodableVector vec) + { + super(tagNo, vec); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecificParser.java b/common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecificParser.java new file mode 100644 index 0000000..63bd9f3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERApplicationSpecificParser.java @@ -0,0 +1,41 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class BERApplicationSpecificParser + implements ASN1ApplicationSpecificParser +{ + private final int tag; + private final ASN1StreamParser parser; + + BERApplicationSpecificParser(int tag, ASN1StreamParser parser) + { + this.tag = tag; + this.parser = parser; + } + + public ASN1Encodable readObject() + throws IOException + { + return parser.readObject(); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return new BERApplicationSpecific(tag, parser.readVector()); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException e) + { + throw new ASN1ParsingException(e.getMessage(), e); + } + } + +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERConstructedOctetString.java b/common/src/main/java/org/bouncycastle/asn1/BERConstructedOctetString.java new file mode 100644 index 0000000..cad6e42 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERConstructedOctetString.java @@ -0,0 +1,144 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Enumeration; +import java.util.Vector; + +/** + * @deprecated use BEROctetString + */ +public class BERConstructedOctetString + extends BEROctetString +{ + private static final int MAX_LENGTH = 1000; + + /** + * convert a vector of octet strings into a single byte string + */ + static private byte[] toBytes( + Vector octs) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + for (int i = 0; i != octs.size(); i++) + { + try + { + DEROctetString o = (DEROctetString)octs.elementAt(i); + + bOut.write(o.getOctets()); + } + catch (ClassCastException e) + { + throw new IllegalArgumentException(octs.elementAt(i).getClass().getName() + " found in input should only contain DEROctetString"); + } + catch (IOException e) + { + throw new IllegalArgumentException("exception converting octets " + e.toString()); + } + } + + return bOut.toByteArray(); + } + + private Vector octs; + + /** + * @param string the octets making up the octet string. + */ + public BERConstructedOctetString( + byte[] string) + { + super(string); + } + + public BERConstructedOctetString( + Vector octs) + { + super(toBytes(octs)); + + this.octs = octs; + } + + public BERConstructedOctetString( + ASN1Primitive obj) + { + super(toByteArray(obj)); + } + + private static byte[] toByteArray(ASN1Primitive obj) + { + try + { + return obj.getEncoded(); + } + catch (IOException e) + { + throw new IllegalArgumentException("Unable to encode object"); + } + } + + public BERConstructedOctetString( + ASN1Encodable obj) + { + this(obj.toASN1Primitive()); + } + + public byte[] getOctets() + { + return string; + } + + /** + * return the DER octets that make up this string. + */ + public Enumeration getObjects() + { + if (octs == null) + { + return generateOcts().elements(); + } + + return octs.elements(); + } + + private Vector generateOcts() + { + Vector vec = new Vector(); + for (int i = 0; i < string.length; i += MAX_LENGTH) + { + int end; + + if (i + MAX_LENGTH > string.length) + { + end = string.length; + } + else + { + end = i + MAX_LENGTH; + } + + byte[] nStr = new byte[end - i]; + + System.arraycopy(string, i, nStr, 0, nStr.length); + + vec.addElement(new DEROctetString(nStr)); + } + + return vec; + } + + public static BEROctetString fromSequence(ASN1Sequence seq) + { + Vector v = new Vector(); + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + v.addElement(e.nextElement()); + } + + return new BERConstructedOctetString(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERFactory.java b/common/src/main/java/org/bouncycastle/asn1/BERFactory.java new file mode 100644 index 0000000..023be0b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERFactory.java @@ -0,0 +1,17 @@ +package org.bouncycastle.asn1; + +class BERFactory +{ + static final BERSequence EMPTY_SEQUENCE = new BERSequence(); + static final BERSet EMPTY_SET = new BERSet(); + + static BERSequence createSequence(ASN1EncodableVector v) + { + return v.size() < 1 ? EMPTY_SEQUENCE : new BERSequence(v); + } + + static BERSet createSet(ASN1EncodableVector v) + { + return v.size() < 1 ? EMPTY_SET : new BERSet(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERGenerator.java b/common/src/main/java/org/bouncycastle/asn1/BERGenerator.java new file mode 100644 index 0000000..ef7f9a3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERGenerator.java @@ -0,0 +1,100 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class BERGenerator + extends ASN1Generator +{ + private boolean _tagged = false; + private boolean _isExplicit; + private int _tagNo; + + protected BERGenerator( + OutputStream out) + { + super(out); + } + + public BERGenerator( + OutputStream out, + int tagNo, + boolean isExplicit) + { + super(out); + + _tagged = true; + _isExplicit = isExplicit; + _tagNo = tagNo; + } + + public OutputStream getRawOutputStream() + { + return _out; + } + + private void writeHdr( + int tag) + throws IOException + { + _out.write(tag); + _out.write(0x80); + } + + protected void writeBERHeader( + int tag) + throws IOException + { + if (_tagged) + { + int tagNum = _tagNo | BERTags.TAGGED; + + if (_isExplicit) + { + writeHdr(tagNum | BERTags.CONSTRUCTED); + writeHdr(tag); + } + else + { + if ((tag & BERTags.CONSTRUCTED) != 0) + { + writeHdr(tagNum | BERTags.CONSTRUCTED); + } + else + { + writeHdr(tagNum); + } + } + } + else + { + writeHdr(tag); + } + } + + protected void writeBERBody( + InputStream contentStream) + throws IOException + { + int ch; + + while ((ch = contentStream.read()) >= 0) + { + _out.write(ch); + } + } + + protected void writeBEREnd() + throws IOException + { + _out.write(0x00); + _out.write(0x00); + + if (_tagged && _isExplicit) // write extra end for tag header + { + _out.write(0x00); + _out.write(0x00); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BEROctetString.java b/common/src/main/java/org/bouncycastle/asn1/BEROctetString.java new file mode 100644 index 0000000..bc1ed44 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BEROctetString.java @@ -0,0 +1,168 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Enumeration; +import java.util.Vector; + +public class BEROctetString + extends ASN1OctetString +{ + private static final int MAX_LENGTH = 1000; + + private ASN1OctetString[] octs; + + /** + * convert a vector of octet strings into a single byte string + */ + static private byte[] toBytes( + ASN1OctetString[] octs) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + for (int i = 0; i != octs.length; i++) + { + try + { + DEROctetString o = (DEROctetString)octs[i]; + + bOut.write(o.getOctets()); + } + catch (ClassCastException e) + { + throw new IllegalArgumentException(octs[i].getClass().getName() + " found in input should only contain DEROctetString"); + } + catch (IOException e) + { + throw new IllegalArgumentException("exception converting octets " + e.toString()); + } + } + + return bOut.toByteArray(); + } + + /** + * @param string the octets making up the octet string. + */ + public BEROctetString( + byte[] string) + { + super(string); + } + + public BEROctetString( + ASN1OctetString[] octs) + { + super(toBytes(octs)); + + this.octs = octs; + } + + public byte[] getOctets() + { + return string; + } + + /** + * return the DER octets that make up this string. + */ + public Enumeration getObjects() + { + if (octs == null) + { + return generateOcts().elements(); + } + + return new Enumeration() + { + int counter = 0; + + public boolean hasMoreElements() + { + return counter < octs.length; + } + + public Object nextElement() + { + return octs[counter++]; + } + }; + } + + private Vector generateOcts() + { + Vector vec = new Vector(); + for (int i = 0; i < string.length; i += MAX_LENGTH) + { + int end; + + if (i + MAX_LENGTH > string.length) + { + end = string.length; + } + else + { + end = i + MAX_LENGTH; + } + + byte[] nStr = new byte[end - i]; + + System.arraycopy(string, i, nStr, 0, nStr.length); + + vec.addElement(new DEROctetString(nStr)); + } + + return vec; + } + + boolean isConstructed() + { + return true; + } + + int encodedLength() + throws IOException + { + int length = 0; + for (Enumeration e = getObjects(); e.hasMoreElements();) + { + length += ((ASN1Encodable)e.nextElement()).toASN1Primitive().encodedLength(); + } + + return 2 + length + 2; + } + + public void encode( + ASN1OutputStream out) + throws IOException + { + out.write(BERTags.CONSTRUCTED | BERTags.OCTET_STRING); + + out.write(0x80); + + // + // write out the octet array + // + for (Enumeration e = getObjects(); e.hasMoreElements();) + { + out.writeObject((ASN1Encodable)e.nextElement()); + } + + out.write(0x00); + out.write(0x00); + } + + static BEROctetString fromSequence(ASN1Sequence seq) + { + ASN1OctetString[] v = new ASN1OctetString[seq.size()]; + Enumeration e = seq.getObjects(); + int index = 0; + + while (e.hasMoreElements()) + { + v[index++] = (ASN1OctetString)e.nextElement(); + } + + return new BEROctetString(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BEROctetStringGenerator.java b/common/src/main/java/org/bouncycastle/asn1/BEROctetStringGenerator.java new file mode 100644 index 0000000..b8df94a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BEROctetStringGenerator.java @@ -0,0 +1,102 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.OutputStream; + +public class BEROctetStringGenerator + extends BERGenerator +{ + public BEROctetStringGenerator(OutputStream out) + throws IOException + { + super(out); + + writeBERHeader(BERTags.CONSTRUCTED | BERTags.OCTET_STRING); + } + + public BEROctetStringGenerator( + OutputStream out, + int tagNo, + boolean isExplicit) + throws IOException + { + super(out, tagNo, isExplicit); + + writeBERHeader(BERTags.CONSTRUCTED | BERTags.OCTET_STRING); + } + + public OutputStream getOctetOutputStream() + { + return getOctetOutputStream(new byte[1000]); // limit for CER encoding. + } + + public OutputStream getOctetOutputStream( + byte[] buf) + { + return new BufferedBEROctetStream(buf); + } + + private class BufferedBEROctetStream + extends OutputStream + { + private byte[] _buf; + private int _off; + private DEROutputStream _derOut; + + BufferedBEROctetStream( + byte[] buf) + { + _buf = buf; + _off = 0; + _derOut = new DEROutputStream(_out); + } + + public void write( + int b) + throws IOException + { + _buf[_off++] = (byte)b; + + if (_off == _buf.length) + { + DEROctetString.encode(_derOut, _buf); + _off = 0; + } + } + + public void write(byte[] b, int off, int len) throws IOException + { + while (len > 0) + { + int numToCopy = Math.min(len, _buf.length - _off); + System.arraycopy(b, off, _buf, _off, numToCopy); + + _off += numToCopy; + if (_off < _buf.length) + { + break; + } + + DEROctetString.encode(_derOut, _buf); + _off = 0; + + off += numToCopy; + len -= numToCopy; + } + } + + public void close() + throws IOException + { + if (_off != 0) + { + byte[] bytes = new byte[_off]; + System.arraycopy(_buf, 0, bytes, 0, _off); + + DEROctetString.encode(_derOut, bytes); + } + + writeBEREnd(); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BEROctetStringParser.java b/common/src/main/java/org/bouncycastle/asn1/BEROctetStringParser.java new file mode 100644 index 0000000..1c7132e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BEROctetStringParser.java @@ -0,0 +1,41 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.util.io.Streams; + +public class BEROctetStringParser + implements ASN1OctetStringParser +{ + private ASN1StreamParser _parser; + + BEROctetStringParser( + ASN1StreamParser parser) + { + _parser = parser; + } + + public InputStream getOctetStream() + { + return new ConstructedOctetStream(_parser); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return new BEROctetString(Streams.readAll(getOctetStream())); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException e) + { + throw new ASN1ParsingException("IOException converting stream to byte array: " + e.getMessage(), e); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BEROutputStream.java b/common/src/main/java/org/bouncycastle/asn1/BEROutputStream.java new file mode 100644 index 0000000..7117d4f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BEROutputStream.java @@ -0,0 +1,36 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.OutputStream; + +public class BEROutputStream + extends DEROutputStream +{ + public BEROutputStream( + OutputStream os) + { + super(os); + } + + public void writeObject( + Object obj) + throws IOException + { + if (obj == null) + { + writeNull(); + } + else if (obj instanceof ASN1Primitive) + { + ((ASN1Primitive)obj).encode(this); + } + else if (obj instanceof ASN1Encodable) + { + ((ASN1Encodable)obj).toASN1Primitive().encode(this); + } + else + { + throw new IOException("object not BEREncodable"); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERSequence.java b/common/src/main/java/org/bouncycastle/asn1/BERSequence.java new file mode 100644 index 0000000..aa44950 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERSequence.java @@ -0,0 +1,73 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +public class BERSequence + extends ASN1Sequence +{ + /** + * create an empty sequence + */ + public BERSequence() + { + } + + /** + * create a sequence containing one object + */ + public BERSequence( + ASN1Encodable obj) + { + super(obj); + } + + /** + * create a sequence containing a vector of objects. + */ + public BERSequence( + ASN1EncodableVector v) + { + super(v); + } + + /** + * create a sequence containing an array of objects. + */ + public BERSequence( + ASN1Encodable[] array) + { + super(array); + } + + int encodedLength() + throws IOException + { + int length = 0; + for (Enumeration e = getObjects(); e.hasMoreElements();) + { + length += ((ASN1Encodable)e.nextElement()).toASN1Primitive().encodedLength(); + } + + return 2 + length + 2; + } + + /* + */ + void encode( + ASN1OutputStream out) + throws IOException + { + out.write(BERTags.SEQUENCE | BERTags.CONSTRUCTED); + out.write(0x80); + + Enumeration e = getObjects(); + while (e.hasMoreElements()) + { + out.writeObject((ASN1Encodable)e.nextElement()); + } + + out.write(0x00); + out.write(0x00); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERSequenceGenerator.java b/common/src/main/java/org/bouncycastle/asn1/BERSequenceGenerator.java new file mode 100644 index 0000000..6e27565 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERSequenceGenerator.java @@ -0,0 +1,41 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.OutputStream; + +public class BERSequenceGenerator + extends BERGenerator +{ + public BERSequenceGenerator( + OutputStream out) + throws IOException + { + super(out); + + writeBERHeader(BERTags.CONSTRUCTED | BERTags.SEQUENCE); + } + + public BERSequenceGenerator( + OutputStream out, + int tagNo, + boolean isExplicit) + throws IOException + { + super(out, tagNo, isExplicit); + + writeBERHeader(BERTags.CONSTRUCTED | BERTags.SEQUENCE); + } + + public void addObject( + ASN1Encodable object) + throws IOException + { + object.toASN1Primitive().encode(new BEROutputStream(_out)); + } + + public void close() + throws IOException + { + writeBEREnd(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERSequenceParser.java b/common/src/main/java/org/bouncycastle/asn1/BERSequenceParser.java new file mode 100644 index 0000000..d5d4395 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERSequenceParser.java @@ -0,0 +1,38 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class BERSequenceParser + implements ASN1SequenceParser +{ + private ASN1StreamParser _parser; + + BERSequenceParser(ASN1StreamParser parser) + { + this._parser = parser; + } + + public ASN1Encodable readObject() + throws IOException + { + return _parser.readObject(); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return new BERSequence(_parser.readVector()); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException e) + { + throw new IllegalStateException(e.getMessage()); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERSet.java b/common/src/main/java/org/bouncycastle/asn1/BERSet.java new file mode 100644 index 0000000..064d778 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERSet.java @@ -0,0 +1,73 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +public class BERSet + extends ASN1Set +{ + /** + * create an empty sequence + */ + public BERSet() + { + } + + /** + * @param obj - a single object that makes up the set. + */ + public BERSet( + ASN1Encodable obj) + { + super(obj); + } + + /** + * @param v - a vector of objects making up the set. + */ + public BERSet( + ASN1EncodableVector v) + { + super(v, false); + } + + /** + * create a set from an array of objects. + */ + public BERSet( + ASN1Encodable[] a) + { + super(a, false); + } + + int encodedLength() + throws IOException + { + int length = 0; + for (Enumeration e = getObjects(); e.hasMoreElements();) + { + length += ((ASN1Encodable)e.nextElement()).toASN1Primitive().encodedLength(); + } + + return 2 + length + 2; + } + + /* + */ + void encode( + ASN1OutputStream out) + throws IOException + { + out.write(BERTags.SET | BERTags.CONSTRUCTED); + out.write(0x80); + + Enumeration e = getObjects(); + while (e.hasMoreElements()) + { + out.writeObject((ASN1Encodable)e.nextElement()); + } + + out.write(0x00); + out.write(0x00); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERSetParser.java b/common/src/main/java/org/bouncycastle/asn1/BERSetParser.java new file mode 100644 index 0000000..5a30f3c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERSetParser.java @@ -0,0 +1,38 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class BERSetParser + implements ASN1SetParser +{ + private ASN1StreamParser _parser; + + BERSetParser(ASN1StreamParser parser) + { + this._parser = parser; + } + + public ASN1Encodable readObject() + throws IOException + { + return _parser.readObject(); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return new BERSet(_parser.readVector()); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException e) + { + throw new ASN1ParsingException(e.getMessage(), e); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERTaggedObject.java b/common/src/main/java/org/bouncycastle/asn1/BERTaggedObject.java new file mode 100644 index 0000000..1af0a43 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERTaggedObject.java @@ -0,0 +1,147 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +/** + * BER TaggedObject - in ASN.1 notation this is any object preceded by + * a [n] where n is some number - these are assumed to follow the construction + * rules (as with sequences). + */ +public class BERTaggedObject + extends ASN1TaggedObject +{ + /** + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public BERTaggedObject( + int tagNo, + ASN1Encodable obj) + { + super(true, tagNo, obj); + } + + /** + * @param explicit true if an explicitly tagged object. + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public BERTaggedObject( + boolean explicit, + int tagNo, + ASN1Encodable obj) + { + super(explicit, tagNo, obj); + } + + /** + * create an implicitly tagged object that contains a zero + * length sequence. + */ + public BERTaggedObject( + int tagNo) + { + super(false, tagNo, new BERSequence()); + } + + boolean isConstructed() + { + if (!empty) + { + if (explicit) + { + return true; + } + else + { + ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); + + return primitive.isConstructed(); + } + } + else + { + return true; + } + } + + int encodedLength() + throws IOException + { + if (!empty) + { + ASN1Primitive primitive = obj.toASN1Primitive(); + int length = primitive.encodedLength(); + + if (explicit) + { + return StreamUtil.calculateTagLength(tagNo) + StreamUtil.calculateBodyLength(length) + length; + } + else + { + // header length already in calculation + length = length - 1; + + return StreamUtil.calculateTagLength(tagNo) + length; + } + } + else + { + return StreamUtil.calculateTagLength(tagNo) + 1; + } + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeTag(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo); + out.write(0x80); + + if (!empty) + { + if (!explicit) + { + Enumeration e; + if (obj instanceof ASN1OctetString) + { + if (obj instanceof BEROctetString) + { + e = ((BEROctetString)obj).getObjects(); + } + else + { + ASN1OctetString octs = (ASN1OctetString)obj; + BEROctetString berO = new BEROctetString(octs.getOctets()); + e = berO.getObjects(); + } + } + else if (obj instanceof ASN1Sequence) + { + e = ((ASN1Sequence)obj).getObjects(); + } + else if (obj instanceof ASN1Set) + { + e = ((ASN1Set)obj).getObjects(); + } + else + { + throw new RuntimeException("not implemented: " + obj.getClass().getName()); + } + + while (e.hasMoreElements()) + { + out.writeObject((ASN1Encodable)e.nextElement()); + } + } + else + { + out.writeObject(obj); + } + } + + out.write(0x00); + out.write(0x00); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERTaggedObjectParser.java b/common/src/main/java/org/bouncycastle/asn1/BERTaggedObjectParser.java new file mode 100644 index 0000000..7cd334a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERTaggedObjectParser.java @@ -0,0 +1,66 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class BERTaggedObjectParser + implements ASN1TaggedObjectParser +{ + private boolean _constructed; + private int _tagNumber; + private ASN1StreamParser _parser; + + BERTaggedObjectParser( + boolean constructed, + int tagNumber, + ASN1StreamParser parser) + { + _constructed = constructed; + _tagNumber = tagNumber; + _parser = parser; + } + + public boolean isConstructed() + { + return _constructed; + } + + public int getTagNo() + { + return _tagNumber; + } + + public ASN1Encodable getObjectParser( + int tag, + boolean isExplicit) + throws IOException + { + if (isExplicit) + { + if (!_constructed) + { + throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)"); + } + return _parser.readObject(); + } + + return _parser.readImplicit(_constructed, tag); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return _parser.readTaggedObject(_constructed, _tagNumber); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return this.getLoadedObject(); + } + catch (IOException e) + { + throw new ASN1ParsingException(e.getMessage()); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/BERTags.java b/common/src/main/java/org/bouncycastle/asn1/BERTags.java new file mode 100644 index 0000000..7281a6a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/BERTags.java @@ -0,0 +1,36 @@ +package org.bouncycastle.asn1; + +public interface BERTags +{ + public static final int BOOLEAN = 0x01; + public static final int INTEGER = 0x02; + public static final int BIT_STRING = 0x03; + public static final int OCTET_STRING = 0x04; + public static final int NULL = 0x05; + public static final int OBJECT_IDENTIFIER = 0x06; + public static final int EXTERNAL = 0x08; + public static final int ENUMERATED = 0x0a; + public static final int SEQUENCE = 0x10; + public static final int SEQUENCE_OF = 0x10; // for completeness + public static final int SET = 0x11; + public static final int SET_OF = 0x11; // for completeness + + + public static final int NUMERIC_STRING = 0x12; + public static final int PRINTABLE_STRING = 0x13; + public static final int T61_STRING = 0x14; + public static final int VIDEOTEX_STRING = 0x15; + public static final int IA5_STRING = 0x16; + public static final int UTC_TIME = 0x17; + public static final int GENERALIZED_TIME = 0x18; + public static final int GRAPHIC_STRING = 0x19; + public static final int VISIBLE_STRING = 0x1a; + public static final int GENERAL_STRING = 0x1b; + public static final int UNIVERSAL_STRING = 0x1c; + public static final int BMP_STRING = 0x1e; + public static final int UTF8_STRING = 0x0c; + + public static final int CONSTRUCTED = 0x20; + public static final int APPLICATION = 0x40; + public static final int TAGGED = 0x80; +} diff --git a/common/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java b/common/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java new file mode 100644 index 0000000..f247b11 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/ConstructedOctetStream.java @@ -0,0 +1,111 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.InputStream; + +class ConstructedOctetStream + extends InputStream +{ + private final ASN1StreamParser _parser; + + private boolean _first = true; + private InputStream _currentStream; + + ConstructedOctetStream( + ASN1StreamParser parser) + { + _parser = parser; + } + + public int read(byte[] b, int off, int len) throws IOException + { + if (_currentStream == null) + { + if (!_first) + { + return -1; + } + + ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); + + if (s == null) + { + return -1; + } + + _first = false; + _currentStream = s.getOctetStream(); + } + + int totalRead = 0; + + for (;;) + { + int numRead = _currentStream.read(b, off + totalRead, len - totalRead); + + if (numRead >= 0) + { + totalRead += numRead; + + if (totalRead == len) + { + return totalRead; + } + } + else + { + ASN1OctetStringParser aos = (ASN1OctetStringParser)_parser.readObject(); + + if (aos == null) + { + _currentStream = null; + return totalRead < 1 ? -1 : totalRead; + } + + _currentStream = aos.getOctetStream(); + } + } + } + + public int read() + throws IOException + { + if (_currentStream == null) + { + if (!_first) + { + return -1; + } + + ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); + + if (s == null) + { + return -1; + } + + _first = false; + _currentStream = s.getOctetStream(); + } + + for (;;) + { + int b = _currentStream.read(); + + if (b >= 0) + { + return b; + } + + ASN1OctetStringParser s = (ASN1OctetStringParser)_parser.readObject(); + + if (s == null) + { + _currentStream = null; + return -1; + } + + _currentStream = s.getOctetStream(); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERApplicationSpecific.java b/common/src/main/java/org/bouncycastle/asn1/DERApplicationSpecific.java new file mode 100644 index 0000000..5b59288 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERApplicationSpecific.java @@ -0,0 +1,276 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.bouncycastle.util.Arrays; + +/** + * Base class for an application specific object + */ +public class DERApplicationSpecific + extends ASN1Primitive +{ + private final boolean isConstructed; + private final int tag; + private final byte[] octets; + + DERApplicationSpecific( + boolean isConstructed, + int tag, + byte[] octets) + { + this.isConstructed = isConstructed; + this.tag = tag; + this.octets = octets; + } + + public DERApplicationSpecific( + int tag, + byte[] octets) + { + this(false, tag, octets); + } + + public DERApplicationSpecific( + int tag, + ASN1Encodable object) + throws IOException + { + this(true, tag, object); + } + + public DERApplicationSpecific( + boolean explicit, + int tag, + ASN1Encodable object) + throws IOException + { + ASN1Primitive primitive = object.toASN1Primitive(); + + byte[] data = primitive.getEncoded(ASN1Encoding.DER); + + this.isConstructed = explicit || (primitive instanceof ASN1Set || primitive instanceof ASN1Sequence); + this.tag = tag; + + if (explicit) + { + this.octets = data; + } + else + { + int lenBytes = getLengthOfHeader(data); + byte[] tmp = new byte[data.length - lenBytes]; + System.arraycopy(data, lenBytes, tmp, 0, tmp.length); + this.octets = tmp; + } + } + + public DERApplicationSpecific(int tagNo, ASN1EncodableVector vec) + { + this.tag = tagNo; + this.isConstructed = true; + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + for (int i = 0; i != vec.size(); i++) + { + try + { + bOut.write(((ASN1Object)vec.get(i)).getEncoded(ASN1Encoding.DER)); + } + catch (IOException e) + { + throw new ASN1ParsingException("malformed object: " + e, e); + } + } + this.octets = bOut.toByteArray(); + } + + public static DERApplicationSpecific getInstance(Object obj) + { + if (obj == null || obj instanceof DERApplicationSpecific) + { + return (DERApplicationSpecific)obj; + } + else if (obj instanceof byte[]) + { + try + { + return DERApplicationSpecific.getInstance(ASN1Primitive.fromByteArray((byte[])obj)); + } + catch (IOException e) + { + throw new IllegalArgumentException("failed to construct object from byte[]: " + e.getMessage()); + } + } + else if (obj instanceof ASN1Encodable) + { + ASN1Primitive primitive = ((ASN1Encodable)obj).toASN1Primitive(); + + if (primitive instanceof ASN1Sequence) + { + return (DERApplicationSpecific)primitive; + } + } + + throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); + } + + private int getLengthOfHeader(byte[] data) + { + int length = data[1] & 0xff; // TODO: assumes 1 byte tag + + if (length == 0x80) + { + return 2; // indefinite-length encoding + } + + if (length > 127) + { + int size = length & 0x7f; + + // Note: The invalid long form "0xff" (see X.690 8.1.3.5c) will be caught here + if (size > 4) + { + throw new IllegalStateException("DER length more than 4 bytes: " + size); + } + + return size + 2; + } + + return 2; + } + + public boolean isConstructed() + { + return isConstructed; + } + + public byte[] getContents() + { + return octets; + } + + public int getApplicationTag() + { + return tag; + } + + /** + * Return the enclosed object assuming explicit tagging. + * + * @return the resulting object + * @throws IOException if reconstruction fails. + */ + public ASN1Primitive getObject() + throws IOException + { + return new ASN1InputStream(getContents()).readObject(); + } + + /** + * Return the enclosed object assuming implicit tagging. + * + * @param derTagNo the type tag that should be applied to the object's contents. + * @return the resulting object + * @throws IOException if reconstruction fails. + */ + public ASN1Primitive getObject(int derTagNo) + throws IOException + { + if (derTagNo >= 0x1f) + { + throw new IOException("unsupported tag number"); + } + + byte[] orig = this.getEncoded(); + byte[] tmp = replaceTagNumber(derTagNo, orig); + + if ((orig[0] & BERTags.CONSTRUCTED) != 0) + { + tmp[0] |= BERTags.CONSTRUCTED; + } + + return new ASN1InputStream(tmp).readObject(); + } + + int encodedLength() + throws IOException + { + return StreamUtil.calculateTagLength(tag) + StreamUtil.calculateBodyLength(octets.length) + octets.length; + } + + /* (non-Javadoc) + * @see org.bouncycastle.asn1.ASN1Primitive#encode(org.bouncycastle.asn1.DEROutputStream) + */ + void encode(ASN1OutputStream out) throws IOException + { + int classBits = BERTags.APPLICATION; + if (isConstructed) + { + classBits |= BERTags.CONSTRUCTED; + } + + out.writeEncoded(classBits, tag, octets); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERApplicationSpecific)) + { + return false; + } + + DERApplicationSpecific other = (DERApplicationSpecific)o; + + return isConstructed == other.isConstructed + && tag == other.tag + && Arrays.areEqual(octets, other.octets); + } + + public int hashCode() + { + return (isConstructed ? 1 : 0) ^ tag ^ Arrays.hashCode(octets); + } + + private byte[] replaceTagNumber(int newTag, byte[] input) + throws IOException + { + int tagNo = input[0] & 0x1f; + int index = 1; + // + // with tagged object tag number is bottom 5 bits, or stored at the start of the content + // + if (tagNo == 0x1f) + { + tagNo = 0; + + int b = input[index++] & 0xff; + + // X.690-0207 8.1.2.4.2 + // "c) bits 7 to 1 of the first subsequent octet shall not all be zero." + if ((b & 0x7f) == 0) // Note: -1 will pass + { + throw new ASN1ParsingException("corrupted stream - invalid high tag number found"); + } + + while ((b >= 0) && ((b & 0x80) != 0)) + { + tagNo |= (b & 0x7f); + tagNo <<= 7; + b = input[index++] & 0xff; + } + + tagNo |= (b & 0x7f); + } + + byte[] tmp = new byte[input.length - index + 1]; + + System.arraycopy(input, index, tmp, 1, tmp.length - 1); + + tmp[0] = (byte)newTag; + + return tmp; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERBMPString.java b/common/src/main/java/org/bouncycastle/asn1/DERBMPString.java new file mode 100644 index 0000000..33a09f8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERBMPString.java @@ -0,0 +1,141 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; + +/** + * DER BMPString object. + */ +public class DERBMPString + extends ASN1Primitive + implements ASN1String +{ + private char[] string; + + /** + * return a BMP String from the given object. + * + * @param obj the object we want converted. + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERBMPString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERBMPString) + { + return (DERBMPString)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a BMP String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERBMPString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERBMPString) + { + return getInstance(o); + } + else + { + return new DERBMPString(ASN1OctetString.getInstance(o).getOctets()); + } + } + + /** + * basic constructor - byte encoded string. + */ + DERBMPString( + byte[] string) + { + char[] cs = new char[string.length / 2]; + + for (int i = 0; i != cs.length; i++) + { + cs[i] = (char)((string[2 * i] << 8) | (string[2 * i + 1] & 0xff)); + } + + this.string = cs; + } + + DERBMPString(char[] string) + { + this.string = string; + } + + /** + * basic constructor + */ + public DERBMPString( + String string) + { + this.string = string.toCharArray(); + } + + public String getString() + { + return new String(string); + } + + public String toString() + { + return getString(); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } + + protected boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERBMPString)) + { + return false; + } + + DERBMPString s = (DERBMPString)o; + + return Arrays.areEqual(string, s.string); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length * 2) + (string.length * 2); + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.write(BERTags.BMP_STRING); + out.writeLength(string.length * 2); + + for (int i = 0; i != string.length; i++) + { + char c = string[i]; + + out.write((byte)(c >> 8)); + out.write((byte)c); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERBitString.java b/common/src/main/java/org/bouncycastle/asn1/DERBitString.java new file mode 100644 index 0000000..f7f2462 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERBitString.java @@ -0,0 +1,312 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.io.Streams; + +public class DERBitString + extends ASN1Primitive + implements ASN1String +{ + private static final char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + protected byte[] data; + protected int padBits; + + /** + * return the correct number of pad bits for a bit string defined in + * a 32 bit constant + */ + static protected int getPadBits( + int bitString) + { + int val = 0; + for (int i = 3; i >= 0; i--) + { + // + // this may look a little odd, but if it isn't done like this pre jdk1.2 + // JVM's break! + // + if (i != 0) + { + if ((bitString >> (i * 8)) != 0) + { + val = (bitString >> (i * 8)) & 0xFF; + break; + } + } + else + { + if (bitString != 0) + { + val = bitString & 0xFF; + break; + } + } + } + + if (val == 0) + { + return 7; + } + + + int bits = 1; + + while (((val <<= 1) & 0xFF) != 0) + { + bits++; + } + + return 8 - bits; + } + + /** + * return the correct number of bytes for a bit string defined in + * a 32 bit constant + */ + static protected byte[] getBytes(int bitString) + { + int bytes = 4; + for (int i = 3; i >= 1; i--) + { + if ((bitString & (0xFF << (i * 8))) != 0) + { + break; + } + bytes--; + } + + byte[] result = new byte[bytes]; + for (int i = 0; i < bytes; i++) + { + result[i] = (byte) ((bitString >> (i * 8)) & 0xFF); + } + + return result; + } + + /** + * return a Bit String from the passed in object + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERBitString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERBitString) + { + return (DERBitString)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a Bit String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERBitString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERBitString) + { + return getInstance(o); + } + else + { + return fromOctetString(((ASN1OctetString)o).getOctets()); + } + } + + protected DERBitString( + byte data, + int padBits) + { + this.data = new byte[1]; + this.data[0] = data; + this.padBits = padBits; + } + + /** + * @param data the octets making up the bit string. + * @param padBits the number of extra bits at the end of the string. + */ + public DERBitString( + byte[] data, + int padBits) + { + this.data = data; + this.padBits = padBits; + } + + public DERBitString( + byte[] data) + { + this(data, 0); + } + + public DERBitString( + ASN1Encodable obj) + { + try + { + this.data = obj.toASN1Primitive().getEncoded(ASN1Encoding.DER); + this.padBits = 0; + } + catch (IOException e) + { + throw new IllegalArgumentException("Error processing object : " + e.toString()); + } + } + + public byte[] getBytes() + { + return data; + } + + public int getPadBits() + { + return padBits; + } + + + /** + * @return the value of the bit string as an int (truncating if necessary) + */ + public int intValue() + { + int value = 0; + + for (int i = 0; i != data.length && i != 4; i++) + { + value |= (data[i] & 0xff) << (8 * i); + } + + return value; + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(data.length + 1) + data.length + 1; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + byte[] bytes = new byte[getBytes().length + 1]; + + bytes[0] = (byte)getPadBits(); + System.arraycopy(getBytes(), 0, bytes, 1, bytes.length - 1); + + out.writeEncoded(BERTags.BIT_STRING, bytes); + } + + public int hashCode() + { + return padBits ^ Arrays.hashCode(data); + } + + protected boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERBitString)) + { + return false; + } + + DERBitString other = (DERBitString)o; + + return this.padBits == other.padBits + && Arrays.areEqual(this.data, other.data); + } + + public String getString() + { + StringBuffer buf = new StringBuffer("#"); + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + ASN1OutputStream aOut = new ASN1OutputStream(bOut); + + try + { + aOut.writeObject(this); + } + catch (IOException e) + { + throw new RuntimeException("internal error encoding BitString"); + } + + byte[] string = bOut.toByteArray(); + + for (int i = 0; i != string.length; i++) + { + buf.append(table[(string[i] >>> 4) & 0xf]); + buf.append(table[string[i] & 0xf]); + } + + return buf.toString(); + } + + public String toString() + { + return getString(); + } + + static DERBitString fromOctetString(byte[] bytes) + { + if (bytes.length < 1) + { + throw new IllegalArgumentException("truncated BIT STRING detected"); + } + + int padBits = bytes[0]; + byte[] data = new byte[bytes.length - 1]; + + if (data.length != 0) + { + System.arraycopy(bytes, 1, data, 0, bytes.length - 1); + } + + return new DERBitString(data, padBits); + } + + static DERBitString fromInputStream(int length, InputStream stream) + throws IOException + { + if (length < 1) + { + throw new IllegalArgumentException("truncated BIT STRING detected"); + } + + int padBits = stream.read(); + byte[] data = new byte[length - 1]; + + if (data.length != 0) + { + if (Streams.readFully(stream, data) != data.length) + { + throw new EOFException("EOF encountered in middle of BIT STRING"); + } + } + + return new DERBitString(data, padBits); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERBoolean.java b/common/src/main/java/org/bouncycastle/asn1/DERBoolean.java new file mode 100644 index 0000000..da043eb --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERBoolean.java @@ -0,0 +1,166 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; + +public class DERBoolean + extends ASN1Primitive +{ + private static final byte[] TRUE_VALUE = new byte[] { (byte)0xff }; + private static final byte[] FALSE_VALUE = new byte[] { 0 }; + + private byte[] value; + + public static final ASN1Boolean FALSE = new ASN1Boolean(false); + public static final ASN1Boolean TRUE = new ASN1Boolean(true); + + + /** + * return a boolean from the passed in object. + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1Boolean getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1Boolean) + { + return (ASN1Boolean)obj; + } + + if (obj instanceof DERBoolean) + { + return ((DERBoolean)obj).isTrue() ? DERBoolean.TRUE : DERBoolean.FALSE; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a DERBoolean from the passed in boolean. + */ + public static ASN1Boolean getInstance( + boolean value) + { + return (value ? TRUE : FALSE); + } + + /** + * return a Boolean from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERBoolean getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERBoolean) + { + return getInstance(o); + } + else + { + return ASN1Boolean.fromOctetString(((ASN1OctetString)o).getOctets()); + } + } + + DERBoolean( + byte[] value) + { + if (value.length != 1) + { + throw new IllegalArgumentException("byte value should have 1 byte in it"); + } + + if (value[0] == 0) + { + this.value = FALSE_VALUE; + } + else if (value[0] == 0xff) + { + this.value = TRUE_VALUE; + } + else + { + this.value = Arrays.clone(value); + } + } + + public DERBoolean( + boolean value) + { + this.value = (value) ? TRUE_VALUE : FALSE_VALUE; + } + + public boolean isTrue() + { + return (value[0] != 0); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 3; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.BOOLEAN, value); + } + + protected boolean asn1Equals( + ASN1Primitive o) + { + if ((o == null) || !(o instanceof DERBoolean)) + { + return false; + } + + return (value[0] == ((DERBoolean)o).value[0]); + } + + public int hashCode() + { + return value[0]; + } + + + public String toString() + { + return (value[0] != 0) ? "TRUE" : "FALSE"; + } + + static ASN1Boolean fromOctetString(byte[] value) + { + if (value.length != 1) + { + throw new IllegalArgumentException("byte value should have 1 byte in it"); + } + + if (value[0] == 0) + { + return FALSE; + } + else if (value[0] == 0xff) + { + return TRUE; + } + else + { + return new ASN1Boolean(value); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DEREncodableVector.java b/common/src/main/java/org/bouncycastle/asn1/DEREncodableVector.java new file mode 100644 index 0000000..919ff72 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DEREncodableVector.java @@ -0,0 +1,18 @@ +package org.bouncycastle.asn1; + +/** + * a general class for building up a vector of DER encodable objects - + * this will eventually be superceded by ASN1EncodableVector so you should + * use that class in preference. + */ +public class DEREncodableVector + extends ASN1EncodableVector +{ + /** + * @deprecated use ASN1EncodableVector instead. + */ + public DEREncodableVector() + { + + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DEREnumerated.java b/common/src/main/java/org/bouncycastle/asn1/DEREnumerated.java new file mode 100644 index 0000000..20e7f24 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DEREnumerated.java @@ -0,0 +1,146 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import javabc.BigInteger; + +import org.bouncycastle.util.Arrays; + +public class DEREnumerated + extends ASN1Primitive +{ + byte[] bytes; + + /** + * return an integer from the passed in object + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1Enumerated getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1Enumerated) + { + return (ASN1Enumerated)obj; + } + + if (obj instanceof DEREnumerated) + { + return new ASN1Enumerated(((DEREnumerated)obj).getValue()); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an Enumerated from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DEREnumerated getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DEREnumerated) + { + return getInstance(o); + } + else + { + return fromOctetString(((ASN1OctetString)o).getOctets()); + } + } + + public DEREnumerated( + int value) + { + bytes = BigInteger.valueOf(value).toByteArray(); + } + + public DEREnumerated( + BigInteger value) + { + bytes = value.toByteArray(); + } + + public DEREnumerated( + byte[] bytes) + { + this.bytes = bytes; + } + + public BigInteger getValue() + { + return new BigInteger(bytes); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(bytes.length) + bytes.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.ENUMERATED, bytes); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DEREnumerated)) + { + return false; + } + + DEREnumerated other = (DEREnumerated)o; + + return Arrays.areEqual(this.bytes, other.bytes); + } + + public int hashCode() + { + return Arrays.hashCode(bytes); + } + + private static ASN1Enumerated[] cache = new ASN1Enumerated[12]; + + static ASN1Enumerated fromOctetString(byte[] enc) + { + if (enc.length > 1) + { + return new ASN1Enumerated(Arrays.clone(enc)); + } + + if (enc.length == 0) + { + throw new IllegalArgumentException("ENUMERATED has zero length"); + } + int value = enc[0] & 0xff; + + if (value >= cache.length) + { + return new ASN1Enumerated(Arrays.clone(enc)); + } + + ASN1Enumerated possibleMatch = cache[value]; + + if (possibleMatch == null) + { + possibleMatch = cache[value] = new ASN1Enumerated(Arrays.clone(enc)); + } + + return possibleMatch; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERExternal.java b/common/src/main/java/org/bouncycastle/asn1/DERExternal.java new file mode 100644 index 0000000..aed1d27 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERExternal.java @@ -0,0 +1,294 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * Class representing the DER-type External + */ +public class DERExternal + extends ASN1Primitive +{ + private ASN1ObjectIdentifier directReference; + private ASN1Integer indirectReference; + private ASN1Primitive dataValueDescriptor; + private int encoding; + private ASN1Primitive externalContent; + + public DERExternal(ASN1EncodableVector vector) + { + int offset = 0; + + ASN1Primitive enc = getObjFromVector(vector, offset); + if (enc instanceof ASN1ObjectIdentifier) + { + directReference = (ASN1ObjectIdentifier)enc; + offset++; + enc = getObjFromVector(vector, offset); + } + if (enc instanceof ASN1Integer) + { + indirectReference = (ASN1Integer) enc; + offset++; + enc = getObjFromVector(vector, offset); + } + if (!(enc instanceof DERTaggedObject)) + { + dataValueDescriptor = (ASN1Primitive) enc; + offset++; + enc = getObjFromVector(vector, offset); + } + + if (vector.size() != offset + 1) + { + throw new IllegalArgumentException("input vector too large"); + } + + if (!(enc instanceof DERTaggedObject)) + { + throw new IllegalArgumentException("No tagged object found in vector. Structure doesn't seem to be of type External"); + } + DERTaggedObject obj = (DERTaggedObject)enc; + setEncoding(obj.getTagNo()); + externalContent = obj.getObject(); + } + + private ASN1Primitive getObjFromVector(ASN1EncodableVector v, int index) + { + if (v.size() <= index) + { + throw new IllegalArgumentException("too few objects in input vector"); + } + + return v.get(index).toASN1Primitive(); + } + /** + * Creates a new instance of DERExternal + * See X.690 for more informations about the meaning of these parameters + * @param directReference The direct reference or null if not set. + * @param indirectReference The indirect reference or null if not set. + * @param dataValueDescriptor The data value descriptor or null if not set. + * @param externalData The external data in its encoded form. + */ + public DERExternal(ASN1ObjectIdentifier directReference, ASN1Integer indirectReference, ASN1Primitive dataValueDescriptor, DERTaggedObject externalData) + { + this(directReference, indirectReference, dataValueDescriptor, externalData.getTagNo(), externalData.toASN1Primitive()); + } + + /** + * Creates a new instance of DERExternal. + * See X.690 for more informations about the meaning of these parameters + * @param directReference The direct reference or null if not set. + * @param indirectReference The indirect reference or null if not set. + * @param dataValueDescriptor The data value descriptor or null if not set. + * @param encoding The encoding to be used for the external data + * @param externalData The external data + */ + public DERExternal(ASN1ObjectIdentifier directReference, ASN1Integer indirectReference, ASN1Primitive dataValueDescriptor, int encoding, ASN1Primitive externalData) + { + setDirectReference(directReference); + setIndirectReference(indirectReference); + setDataValueDescriptor(dataValueDescriptor); + setEncoding(encoding); + setExternalContent(externalData.toASN1Primitive()); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() + { + int ret = 0; + if (directReference != null) + { + ret = directReference.hashCode(); + } + if (indirectReference != null) + { + ret ^= indirectReference.hashCode(); + } + if (dataValueDescriptor != null) + { + ret ^= dataValueDescriptor.hashCode(); + } + ret ^= externalContent.hashCode(); + return ret; + } + + boolean isConstructed() + { + return true; + } + + int encodedLength() + throws IOException + { + return this.getEncoded().length; + } + + /* (non-Javadoc) + * @see org.bouncycastle.asn1.ASN1Primitive#encode(org.bouncycastle.asn1.DEROutputStream) + */ + void encode(ASN1OutputStream out) + throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + if (directReference != null) + { + baos.write(directReference.getEncoded(ASN1Encoding.DER)); + } + if (indirectReference != null) + { + baos.write(indirectReference.getEncoded(ASN1Encoding.DER)); + } + if (dataValueDescriptor != null) + { + baos.write(dataValueDescriptor.getEncoded(ASN1Encoding.DER)); + } + DERTaggedObject obj = new DERTaggedObject(true, encoding, externalContent); + baos.write(obj.getEncoded(ASN1Encoding.DER)); + out.writeEncoded(BERTags.CONSTRUCTED, BERTags.EXTERNAL, baos.toByteArray()); + } + + /* (non-Javadoc) + * @see org.bouncycastle.asn1.ASN1Primitive#asn1Equals(org.bouncycastle.asn1.ASN1Primitive) + */ + boolean asn1Equals(ASN1Primitive o) + { + if (!(o instanceof DERExternal)) + { + return false; + } + if (this == o) + { + return true; + } + DERExternal other = (DERExternal)o; + if (directReference != null) + { + if (other.directReference == null || !other.directReference.equals(directReference)) + { + return false; + } + } + if (indirectReference != null) + { + if (other.indirectReference == null || !other.indirectReference.equals(indirectReference)) + { + return false; + } + } + if (dataValueDescriptor != null) + { + if (other.dataValueDescriptor == null || !other.dataValueDescriptor.equals(dataValueDescriptor)) + { + return false; + } + } + return externalContent.equals(other.externalContent); + } + + /** + * Returns the data value descriptor + * @return The descriptor + */ + public ASN1Primitive getDataValueDescriptor() + { + return dataValueDescriptor; + } + + /** + * Returns the direct reference of the external element + * @return The reference + */ + public ASN1ObjectIdentifier getDirectReference() + { + return directReference; + } + + /** + * Returns the encoding of the content. Valid values are + *

          + *
        • 0 single-ASN1-type
        • + *
        • 1 OCTET STRING
        • + *
        • 2 BIT STRING
        • + *
        + * @return The encoding + */ + public int getEncoding() + { + return encoding; + } + + /** + * Returns the content of this element + * @return The content + */ + public ASN1Primitive getExternalContent() + { + return externalContent; + } + + /** + * Returns the indirect reference of this element + * @return The reference + */ + public ASN1Integer getIndirectReference() + { + return indirectReference; + } + + /** + * Sets the data value descriptor + * @param dataValueDescriptor The descriptor + */ + private void setDataValueDescriptor(ASN1Primitive dataValueDescriptor) + { + this.dataValueDescriptor = dataValueDescriptor; + } + + /** + * Sets the direct reference of the external element + * @param directReferemce The reference + */ + private void setDirectReference(ASN1ObjectIdentifier directReferemce) + { + this.directReference = directReferemce; + } + + /** + * Sets the encoding of the content. Valid values are + *
          + *
        • 0 single-ASN1-type
        • + *
        • 1 OCTET STRING
        • + *
        • 2 BIT STRING
        • + *
        + * @param encoding The encoding + */ + private void setEncoding(int encoding) + { + if (encoding < 0 || encoding > 2) + { + throw new IllegalArgumentException("invalid encoding value: " + encoding); + } + this.encoding = encoding; + } + + /** + * Sets the content of this element + * @param externalContent The content + */ + private void setExternalContent(ASN1Primitive externalContent) + { + this.externalContent = externalContent; + } + + /** + * Sets the indirect reference of this element + * @param indirectReference The reference + */ + private void setIndirectReference(ASN1Integer indirectReference) + { + this.indirectReference = indirectReference; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERExternalParser.java b/common/src/main/java/org/bouncycastle/asn1/DERExternalParser.java new file mode 100644 index 0000000..b19c84d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERExternalParser.java @@ -0,0 +1,52 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class DERExternalParser + implements ASN1Encodable, InMemoryRepresentable +{ + private ASN1StreamParser _parser; + + /** + * + */ + public DERExternalParser(ASN1StreamParser parser) + { + this._parser = parser; + } + + public ASN1Encodable readObject() + throws IOException + { + return _parser.readObject(); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + try + { + return new DERExternal(_parser.readVector()); + } + catch (IllegalArgumentException e) + { + throw new ASN1Exception(e.getMessage(), e); + } + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException ioe) + { + throw new ASN1ParsingException("unable to get DER object", ioe); + } + catch (IllegalArgumentException ioe) + { + throw new ASN1ParsingException("unable to get DER object", ioe); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERFactory.java b/common/src/main/java/org/bouncycastle/asn1/DERFactory.java new file mode 100644 index 0000000..0dc0fc6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERFactory.java @@ -0,0 +1,31 @@ +package org.bouncycastle.asn1; + +class DERFactory +{ + static final ASN1Sequence EMPTY_SEQUENCE = new DERSequence(); + static final ASN1Set EMPTY_SET = new DERSet(); + + static ASN1Sequence createSequence(ASN1EncodableVector v) + { + if (v.size() < 1) + { + return EMPTY_SEQUENCE; + } + else + { + return new DLSequence(v); + } + } + + static ASN1Set createSet(ASN1EncodableVector v) + { + if (v.size() < 1) + { + return EMPTY_SET; + } + else + { + return new DLSet(v); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERGeneralString.java b/common/src/main/java/org/bouncycastle/asn1/DERGeneralString.java new file mode 100644 index 0000000..d7cd594 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERGeneralString.java @@ -0,0 +1,98 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +public class DERGeneralString + extends ASN1Primitive + implements ASN1String +{ + private byte[] string; + + public static DERGeneralString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERGeneralString) + { + return (DERGeneralString) obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + + obj.getClass().getName()); + } + + public static DERGeneralString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERGeneralString) + { + return getInstance(o); + } + else + { + return new DERGeneralString(((ASN1OctetString)o).getOctets()); + } + } + + DERGeneralString(byte[] string) + { + this.string = string; + } + + public DERGeneralString(String string) + { + this.string = Strings.toByteArray(string); + } + + public String getString() + { + return Strings.fromByteArray(string); + } + + public String toString() + { + return getString(); + } + + public byte[] getOctets() + { + return Arrays.clone(string); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode(ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.GENERAL_STRING, string); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } + + boolean asn1Equals(ASN1Primitive o) + { + if (!(o instanceof DERGeneralString)) + { + return false; + } + DERGeneralString s = (DERGeneralString)o; + + return Arrays.areEqual(string, s.string); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java b/common/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java new file mode 100644 index 0000000..2cb95b6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERGeneralizedTime.java @@ -0,0 +1,260 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Date; +import java.util.TimeZone; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * Generalized time object. + */ +public class DERGeneralizedTime + extends ASN1Primitive +{ + private byte[] time; + + /** + * return a generalized time from the passed in object + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1GeneralizedTime getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1GeneralizedTime) + { + return (ASN1GeneralizedTime)obj; + } + + if (obj instanceof DERGeneralizedTime) + { + return new ASN1GeneralizedTime(((DERGeneralizedTime)obj).time); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a Generalized Time object from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static ASN1GeneralizedTime getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERGeneralizedTime) + { + return getInstance(o); + } + else + { + return new ASN1GeneralizedTime(((ASN1OctetString)o).getOctets()); + } + } + + /** + * The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + * for local time, or Z|[+|-]HHMM on the end, for difference between local + * time and UTC time. The fractional second amount f must consist of at + * least one number with trailing zeroes removed. + * + * @param time the time string. + * @exception IllegalArgumentException if String is an illegal format. + */ + public DERGeneralizedTime( + String time) + { + char last = time.charAt(time.length() - 1); + if (last != 'Z' && !(last >= 0 && last <= '9')) + { + if (time.indexOf('-') < 0 && time.indexOf('+') < 0) + { + throw new IllegalArgumentException("time needs to be in format YYYYMMDDHHMMSS[.f]Z or YYYYMMDDHHMMSS[.f][+-]HHMM"); + } + } + + this.time = Strings.toByteArray(time); + } + + /** + * base constructer from a java.util.date object + */ + public DERGeneralizedTime( + Date time) + { + this.time = Strings.toByteArray(DateFormatter.getGeneralizedTimeDateString(time, false)); + } + + protected DERGeneralizedTime(Date date, boolean includeMillis) + { + this.time = Strings.toByteArray(DateFormatter.getGeneralizedTimeDateString(date, true)); + } + + DERGeneralizedTime( + byte[] bytes) + { + this.time = bytes; + } + + /** + * Return the time. + * @return The time string as it appeared in the encoded object. + */ + public String getTimeString() + { + return Strings.fromByteArray(time); + } + + /** + * return the time - always in the form of + * YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). + *

        + * Normally in a certificate we would expect "Z" rather than "GMT", + * however adding the "GMT" means we can just use: + *

        +     *     dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
        +     * 
        + * To read in the time and get a date which is compatible with our local + * time zone. + */ + public String getTime() + { + String stime = Strings.fromByteArray(time); + + // + // standardise the format. + // + if (stime.charAt(stime.length() - 1) == 'Z') + { + return stime.substring(0, stime.length() - 1) + "GMT+00:00"; + } + else + { + int signPos = stime.length() - 5; + char sign = stime.charAt(signPos); + if (sign == '-' || sign == '+') + { + return stime.substring(0, signPos) + + "GMT" + + stime.substring(signPos, signPos + 3) + + ":" + + stime.substring(signPos + 3); + } + else + { + signPos = stime.length() - 3; + sign = stime.charAt(signPos); + if (sign == '-' || sign == '+') + { + return stime.substring(0, signPos) + + "GMT" + + stime.substring(signPos) + + ":00"; + } + } + } + return stime + calculateGMTOffset(); + } + + private String calculateGMTOffset() + { + String sign = "+"; + TimeZone timeZone = TimeZone.getDefault(); + int offset = timeZone.getRawOffset(); + if (offset < 0) + { + sign = "-"; + offset = -offset; + } + int hours = offset / (60 * 60 * 1000); + int minutes = (offset - (hours * 60 * 60 * 1000)) / (60 * 1000); + +// try +// { +// if (timeZone.useDaylightTime() && timeZone.inDaylightTime(this.getDate())) +// { +// hours += sign.equals("+") ? 1 : -1; +// } +// } +// catch (ParseException e) +// { +// // we'll do our best and ignore daylight savings +// } + + return "GMT" + sign + convert(hours) + ":" + convert(minutes); + } + + private String convert(int time) + { + if (time < 10) + { + return "0" + time; + } + + return Integer.toString(time); + } + + public Date getDate() + { + return DateFormatter.fromGeneralizedTimeString(time); + } + + private boolean hasFractionalSeconds() + { + for (int i = 0; i != time.length; i++) + { + if (time[i] == '.') + { + if (i == 14) + { + return true; + } + } + } + return false; + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + int length = time.length; + + return 1 + StreamUtil.calculateBodyLength(length) + length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.GENERALIZED_TIME, time); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERGeneralizedTime)) + { + return false; + } + + return Arrays.areEqual(time, ((DERGeneralizedTime)o).time); + } + + public int hashCode() + { + return Arrays.hashCode(time); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERGenerator.java b/common/src/main/java/org/bouncycastle/asn1/DERGenerator.java new file mode 100644 index 0000000..7451ad4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERGenerator.java @@ -0,0 +1,119 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.bouncycastle.util.io.Streams; + +public abstract class DERGenerator + extends ASN1Generator +{ + private boolean _tagged = false; + private boolean _isExplicit; + private int _tagNo; + + protected DERGenerator( + OutputStream out) + { + super(out); + } + + public DERGenerator( + OutputStream out, + int tagNo, + boolean isExplicit) + { + super(out); + + _tagged = true; + _isExplicit = isExplicit; + _tagNo = tagNo; + } + + private void writeLength( + OutputStream out, + int length) + throws IOException + { + if (length > 127) + { + int size = 1; + int val = length; + + while ((val >>>= 8) != 0) + { + size++; + } + + out.write((byte)(size | 0x80)); + + for (int i = (size - 1) * 8; i >= 0; i -= 8) + { + out.write((byte)(length >> i)); + } + } + else + { + out.write((byte)length); + } + } + + void writeDEREncoded( + OutputStream out, + int tag, + byte[] bytes) + throws IOException + { + out.write(tag); + writeLength(out, bytes.length); + out.write(bytes); + } + + void writeDEREncoded( + int tag, + byte[] bytes) + throws IOException + { + if (_tagged) + { + int tagNum = _tagNo | BERTags.TAGGED; + + if (_isExplicit) + { + int newTag = _tagNo | BERTags.CONSTRUCTED | BERTags.TAGGED; + + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + writeDEREncoded(bOut, tag, bytes); + + writeDEREncoded(_out, newTag, bOut.toByteArray()); + } + else + { + if ((tag & BERTags.CONSTRUCTED) != 0) + { + writeDEREncoded(_out, tagNum | BERTags.CONSTRUCTED, bytes); + } + else + { + writeDEREncoded(_out, tagNum, bytes); + } + } + } + else + { + writeDEREncoded(_out, tag, bytes); + } + } + + void writeDEREncoded( + OutputStream out, + int tag, + InputStream in) + throws IOException + { + writeDEREncoded(out, tag, Streams.readAll(in)); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERIA5String.java b/common/src/main/java/org/bouncycastle/asn1/DERIA5String.java new file mode 100644 index 0000000..abb2811 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERIA5String.java @@ -0,0 +1,171 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * DER IA5String object - this is an ascii string. + */ +public class DERIA5String + extends ASN1Primitive + implements ASN1String +{ + private byte[] string; + + /** + * return a IA5 string from the passed in object + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERIA5String getInstance( + Object obj) + { + if (obj == null || obj instanceof DERIA5String) + { + return (DERIA5String)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an IA5 String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERIA5String getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERIA5String) + { + return getInstance(o); + } + else + { + return new DERIA5String(((ASN1OctetString)o).getOctets()); + } + } + + /** + * basic constructor - with bytes. + */ + DERIA5String( + byte[] string) + { + this.string = string; + } + + /** + * basic constructor - without validation. + */ + public DERIA5String( + String string) + { + this(string, false); + } + + /** + * Constructor with optional validation. + * + * @param string the base string to wrap. + * @param validate whether or not to check the string. + * @throws IllegalArgumentException if validate is true and the string + * contains characters that should not be in an IA5String. + */ + public DERIA5String( + String string, + boolean validate) + { + if (string == null) + { + throw new NullPointerException("string cannot be null"); + } + if (validate && !isIA5String(string)) + { + throw new IllegalArgumentException("string contains illegal characters"); + } + + this.string = Strings.toByteArray(string); + } + + public String getString() + { + return Strings.fromByteArray(string); + } + + public String toString() + { + return getString(); + } + + public byte[] getOctets() + { + return Arrays.clone(string); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.IA5_STRING, string); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERIA5String)) + { + return false; + } + + DERIA5String s = (DERIA5String)o; + + return Arrays.areEqual(string, s.string); + } + + /** + * return true if the passed in String can be represented without + * loss as an IA5String, false otherwise. + * + * @return true if in printable set, false otherwise. + */ + public static boolean isIA5String( + String str) + { + for (int i = str.length() - 1; i >= 0; i--) + { + char ch = str.charAt(i); + + if (ch > 0x007f) + { + return false; + } + } + + return true; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERInteger.java b/common/src/main/java/org/bouncycastle/asn1/DERInteger.java new file mode 100644 index 0000000..5aeb4da --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERInteger.java @@ -0,0 +1,136 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import javabc.BigInteger; + +import org.bouncycastle.util.Arrays; + +public class DERInteger + extends ASN1Primitive +{ + byte[] bytes; + + /** + * return an integer from the passed in object + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1Integer getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1Integer) + { + return (ASN1Integer)obj; + } + if (obj instanceof DERInteger) + { + return new ASN1Integer((((DERInteger)obj).getValue())); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an Integer from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static ASN1Integer getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERInteger) + { + return getInstance(o); + } + else + { + return new ASN1Integer(ASN1OctetString.getInstance(obj.getObject()).getOctets()); + } + } + + public DERInteger( + int value) + { + bytes = BigInteger.valueOf(value).toByteArray(); + } + + public DERInteger( + BigInteger value) + { + bytes = value.toByteArray(); + } + + public DERInteger( + byte[] bytes) + { + this.bytes = bytes; + } + + public BigInteger getValue() + { + return new BigInteger(bytes); + } + + /** + * in some cases positive values get crammed into a space, + * that's not quite big enough... + */ + public BigInteger getPositiveValue() + { + return new BigInteger(1, bytes); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(bytes.length) + bytes.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.INTEGER, bytes); + } + + public int hashCode() + { + int value = 0; + + for (int i = 0; i != bytes.length; i++) + { + value ^= (bytes[i] & 0xff) << (i % 4); + } + + return value; + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERInteger)) + { + return false; + } + + DERInteger other = (DERInteger)o; + + return Arrays.areEqual(bytes, other.bytes); + } + + public String toString() + { + return getValue().toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERNull.java b/common/src/main/java/org/bouncycastle/asn1/DERNull.java new file mode 100644 index 0000000..9acd3bf --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERNull.java @@ -0,0 +1,35 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +/** + * A NULL object. + */ +public class DERNull + extends ASN1Null +{ + public static final DERNull INSTANCE = new DERNull(); + + private static final byte[] zeroBytes = new byte[0]; + + public DERNull() + { + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 2; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.NULL, zeroBytes); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERNumericString.java b/common/src/main/java/org/bouncycastle/asn1/DERNumericString.java new file mode 100644 index 0000000..fae4063 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERNumericString.java @@ -0,0 +1,174 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * DER NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + */ +public class DERNumericString + extends ASN1Primitive + implements ASN1String +{ + private byte[] string; + + /** + * return a Numeric string from the passed in object + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERNumericString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERNumericString) + { + return (DERNumericString)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an Numeric String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERNumericString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERNumericString) + { + return getInstance(o); + } + else + { + return new DERNumericString(ASN1OctetString.getInstance(o).getOctets()); + } + } + + /** + * basic constructor - with bytes. + */ + DERNumericString( + byte[] string) + { + this.string = string; + } + + /** + * basic constructor - without validation.. + */ + public DERNumericString( + String string) + { + this(string, false); + } + + /** + * Constructor with optional validation. + * + * @param string the base string to wrap. + * @param validate whether or not to check the string. + * @throws IllegalArgumentException if validate is true and the string + * contains characters that should not be in a NumericString. + */ + public DERNumericString( + String string, + boolean validate) + { + if (validate && !isNumericString(string)) + { + throw new IllegalArgumentException("string contains illegal characters"); + } + + this.string = Strings.toByteArray(string); + } + + public String getString() + { + return Strings.fromByteArray(string); + } + + public String toString() + { + return getString(); + } + + public byte[] getOctets() + { + return Arrays.clone(string); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.NUMERIC_STRING, string); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERNumericString)) + { + return false; + } + + DERNumericString s = (DERNumericString)o; + + return Arrays.areEqual(string, s.string); + } + + /** + * Return true if the string can be represented as a NumericString ('0'..'9', ' ') + * + * @param str string to validate. + * @return true if numeric, fale otherwise. + */ + public static boolean isNumericString( + String str) + { + for (int i = str.length() - 1; i >= 0; i--) + { + char ch = str.charAt(i); + + if (ch > 0x007f) + { + return false; + } + + if (('0' <= ch && ch <= '9') || ch == ' ') + { + continue; + } + + return false; + } + + return true; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java b/common/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java new file mode 100644 index 0000000..44c6378 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERObjectIdentifier.java @@ -0,0 +1,371 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import javabc.BigInteger; + +import org.bouncycastle.util.Arrays; + +public class DERObjectIdentifier + extends ASN1Primitive +{ + String identifier; + + private byte[] body; + + /** + * return an OID from the passed in object + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1ObjectIdentifier getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1ObjectIdentifier) + { + return (ASN1ObjectIdentifier)obj; + } + + if (obj instanceof DERObjectIdentifier) + { + return new ASN1ObjectIdentifier(((DERObjectIdentifier)obj).getId()); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an Object Identifier from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static ASN1ObjectIdentifier getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERObjectIdentifier) + { + return getInstance(o); + } + else + { + return ASN1ObjectIdentifier.fromOctetString(ASN1OctetString.getInstance(obj.getObject()).getOctets()); + } + } + + DERObjectIdentifier( + byte[] bytes) + { + StringBuffer objId = new StringBuffer(); + long value = 0; + BigInteger bigValue = null; + boolean first = true; + + for (int i = 0; i != bytes.length; i++) + { + int b = bytes[i] & 0xff; + + if (value < 0x80000000000000L) + { + value = value * 128 + (b & 0x7f); + if ((b & 0x80) == 0) // end of number reached + { + if (first) + { + switch ((int)value / 40) + { + case 0: + objId.append('0'); + break; + case 1: + objId.append('1'); + value -= 40; + break; + default: + objId.append('2'); + value -= 80; + } + first = false; + } + + objId.append('.'); + objId.append(value); + value = 0; + } + } + else + { + if (bigValue == null) + { + bigValue = BigInteger.valueOf(value); + } + bigValue = bigValue.shiftLeft(7); + bigValue = bigValue.or(BigInteger.valueOf(b & 0x7f)); + if ((b & 0x80) == 0) + { + objId.append('.'); + objId.append(bigValue); + bigValue = null; + value = 0; + } + } + } + + this.identifier = objId.toString(); + } + + public DERObjectIdentifier( + String identifier) + { + if (!isValidIdentifier(identifier)) + { + throw new IllegalArgumentException("string " + identifier + " not an OID"); + } + + this.identifier = identifier; + } + + public String getId() + { + return identifier; + } + + private void writeField( + ByteArrayOutputStream out, + long fieldValue) + { + byte[] result = new byte[9]; + int pos = 8; + result[pos] = (byte)((int)fieldValue & 0x7f); + while (fieldValue >= (1L << 7)) + { + fieldValue >>= 7; + result[--pos] = (byte)((int)fieldValue & 0x7f | 0x80); + } + out.write(result, pos, 9 - pos); + } + + private void writeField( + ByteArrayOutputStream out, + BigInteger fieldValue) + { + int byteCount = (fieldValue.bitLength()+6)/7; + if (byteCount == 0) + { + out.write(0); + } + else + { + BigInteger tmpValue = fieldValue; + byte[] tmp = new byte[byteCount]; + for (int i = byteCount-1; i >= 0; i--) + { + tmp[i] = (byte) ((tmpValue.intValue() & 0x7f) | 0x80); + tmpValue = tmpValue.shiftRight(7); + } + tmp[byteCount-1] &= 0x7f; + out.write(tmp, 0, tmp.length); + } + } + + private void doOutput(ByteArrayOutputStream aOut) + { + OIDTokenizer tok = new OIDTokenizer(identifier); + + writeField(aOut, + Integer.parseInt(tok.nextToken()) * 40 + + Integer.parseInt(tok.nextToken())); + + while (tok.hasMoreTokens()) + { + String token = tok.nextToken(); + if (token.length() < 18) + { + writeField(aOut, Long.parseLong(token)); + } + else + { + writeField(aOut, new BigInteger(token)); + } + } + } + + protected byte[] getBody() + { + if (body == null) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + doOutput(bOut); + + body = bOut.toByteArray(); + } + + return body; + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + throws IOException + { + int length = getBody().length; + + return 1 + StreamUtil.calculateBodyLength(length) + length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + byte[] enc = getBody(); + + out.write(BERTags.OBJECT_IDENTIFIER); + out.writeLength(enc.length); + out.write(enc); + } + + public int hashCode() + { + return identifier.hashCode(); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERObjectIdentifier)) + { + return false; + } + + return identifier.equals(((DERObjectIdentifier)o).identifier); + } + + public String toString() + { + return getId(); + } + + private static boolean isValidIdentifier( + String identifier) + { + if (identifier.length() < 3 + || identifier.charAt(1) != '.') + { + return false; + } + + char first = identifier.charAt(0); + if (first < '0' || first > '2') + { + return false; + } + + boolean periodAllowed = false; + for (int i = identifier.length() - 1; i >= 2; i--) + { + char ch = identifier.charAt(i); + + if ('0' <= ch && ch <= '9') + { + periodAllowed = true; + continue; + } + + if (ch == '.') + { + if (!periodAllowed) + { + return false; + } + + periodAllowed = false; + continue; + } + + return false; + } + + return periodAllowed; + } + + private static ASN1ObjectIdentifier[][] cache = new ASN1ObjectIdentifier[255][]; + + static ASN1ObjectIdentifier fromOctetString(byte[] enc) + { + if (enc.length < 3) + { + return new ASN1ObjectIdentifier(enc); + } + + int idx1 = enc[enc.length - 2] & 0xff; + ASN1ObjectIdentifier[] first = cache[idx1]; + + if (first == null) + { + first = cache[idx1] = new ASN1ObjectIdentifier[255]; + } + + int idx2 = enc[enc.length - 1] & 0xff; + + ASN1ObjectIdentifier possibleMatch = first[idx2]; + + if (possibleMatch == null) + { + possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc); + return possibleMatch; + } + + if (Arrays.areEqual(enc, possibleMatch.getBody())) + { + return possibleMatch; + } + else + { + idx1 = (idx1 + 1) % 256; + first = cache[idx1]; + if (first == null) + { + first = cache[idx1] = new ASN1ObjectIdentifier[255]; + } + + possibleMatch = first[idx2]; + + if (possibleMatch == null) + { + possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc); + return possibleMatch; + } + + if (Arrays.areEqual(enc, possibleMatch.getBody())) + { + return possibleMatch; + } + + idx2 = (idx2 + 1) % 256; + possibleMatch = first[idx2]; + + if (possibleMatch == null) + { + possibleMatch = first[idx2] = new ASN1ObjectIdentifier(enc); + return possibleMatch; + } + + if (Arrays.areEqual(enc, possibleMatch.getBody())) + { + return possibleMatch; + } + } + + return new ASN1ObjectIdentifier(enc); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DEROctetString.java b/common/src/main/java/org/bouncycastle/asn1/DEROctetString.java new file mode 100644 index 0000000..988186f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DEROctetString.java @@ -0,0 +1,48 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class DEROctetString + extends ASN1OctetString +{ + /** + * @param string the octets making up the octet string. + */ + public DEROctetString( + byte[] string) + { + super(string); + } + + public DEROctetString( + ASN1Encodable obj) + throws IOException + { + super(obj.toASN1Primitive().getEncoded(ASN1Encoding.DER)); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.OCTET_STRING, string); + } + + static void encode( + DEROutputStream derOut, + byte[] bytes) + throws IOException + { + derOut.writeEncoded(BERTags.OCTET_STRING, bytes); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DEROctetStringParser.java b/common/src/main/java/org/bouncycastle/asn1/DEROctetStringParser.java new file mode 100644 index 0000000..e6e2068 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DEROctetStringParser.java @@ -0,0 +1,39 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.InputStream; + +public class DEROctetStringParser + implements ASN1OctetStringParser +{ + private DefiniteLengthInputStream stream; + + DEROctetStringParser( + DefiniteLengthInputStream stream) + { + this.stream = stream; + } + + public InputStream getOctetStream() + { + return stream; + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return new DEROctetString(stream.toByteArray()); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException e) + { + throw new ASN1ParsingException("IOException converting stream to byte array: " + e.getMessage(), e); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DEROutputStream.java b/common/src/main/java/org/bouncycastle/asn1/DEROutputStream.java new file mode 100644 index 0000000..8b18c3d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DEROutputStream.java @@ -0,0 +1,41 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Stream that outputs encoding based on distinguished encoding rules. + */ +public class DEROutputStream + extends ASN1OutputStream +{ + public DEROutputStream( + OutputStream os) + { + super(os); + } + + public void writeObject( + ASN1Encodable obj) + throws IOException + { + if (obj != null) + { + obj.toASN1Primitive().toDERObject().encode(this); + } + else + { + throw new IOException("null object detected"); + } + } + + ASN1OutputStream getDERSubStream() + { + return this; + } + + ASN1OutputStream getDLSubStream() + { + return this; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERPrintableString.java b/common/src/main/java/org/bouncycastle/asn1/DERPrintableString.java new file mode 100644 index 0000000..7b1daae --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERPrintableString.java @@ -0,0 +1,201 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * DER PrintableString object. + */ +public class DERPrintableString + extends ASN1Primitive + implements ASN1String +{ + private byte[] string; + + /** + * return a printable string from the passed in object. + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERPrintableString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERPrintableString) + { + return (DERPrintableString)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a Printable String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERPrintableString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERPrintableString) + { + return getInstance(o); + } + else + { + return new DERPrintableString(ASN1OctetString.getInstance(o).getOctets()); + } + } + + /** + * basic constructor - byte encoded string. + */ + DERPrintableString( + byte[] string) + { + this.string = string; + } + + /** + * basic constructor - this does not validate the string + */ + public DERPrintableString( + String string) + { + this(string, false); + } + + /** + * Constructor with optional validation. + * + * @param string the base string to wrap. + * @param validate whether or not to check the string. + * @throws IllegalArgumentException if validate is true and the string + * contains characters that should not be in a PrintableString. + */ + public DERPrintableString( + String string, + boolean validate) + { + if (validate && !isPrintableString(string)) + { + throw new IllegalArgumentException("string contains illegal characters"); + } + + this.string = Strings.toByteArray(string); + } + + public String getString() + { + return Strings.fromByteArray(string); + } + + public byte[] getOctets() + { + return Arrays.clone(string); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.PRINTABLE_STRING, string); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERPrintableString)) + { + return false; + } + + DERPrintableString s = (DERPrintableString)o; + + return Arrays.areEqual(string, s.string); + } + + public String toString() + { + return getString(); + } + + /** + * return true if the passed in String can be represented without + * loss as a PrintableString, false otherwise. + * + * @return true if in printable set, false otherwise. + */ + public static boolean isPrintableString( + String str) + { + for (int i = str.length() - 1; i >= 0; i--) + { + char ch = str.charAt(i); + + if (ch > 0x007f) + { + return false; + } + + if ('a' <= ch && ch <= 'z') + { + continue; + } + + if ('A' <= ch && ch <= 'Z') + { + continue; + } + + if ('0' <= ch && ch <= '9') + { + continue; + } + + switch (ch) + { + case ' ': + case '\'': + case '(': + case ')': + case '+': + case '-': + case '.': + case ':': + case '=': + case '?': + case '/': + case ',': + continue; + } + + return false; + } + + return true; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERSequence.java b/common/src/main/java/org/bouncycastle/asn1/DERSequence.java new file mode 100644 index 0000000..ad48a83 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERSequence.java @@ -0,0 +1,98 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +public class DERSequence + extends ASN1Sequence +{ + private int bodyLength = -1; + + /** + * create an empty sequence + */ + public DERSequence() + { + } + + /** + * create a sequence containing one object + */ + public DERSequence( + ASN1Encodable obj) + { + super(obj); + } + + /** + * create a sequence containing a vector of objects. + */ + public DERSequence( + ASN1EncodableVector v) + { + super(v); + } + + /** + * create a sequence containing an array of objects. + */ + public DERSequence( + ASN1Encodable[] array) + { + super(array); + } + + private int getBodyLength() + throws IOException + { + if (bodyLength < 0) + { + int length = 0; + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + length += ((ASN1Encodable)obj).toASN1Primitive().toDERObject().encodedLength(); + } + + bodyLength = length; + } + + return bodyLength; + } + + int encodedLength() + throws IOException + { + int length = getBodyLength(); + + return 1 + StreamUtil.calculateBodyLength(length) + length; + } + + /* + * A note on the implementation: + *

        + * As DER requires the constructed, definite-length model to + * be used for structured types, this varies slightly from the + * ASN.1 descriptions given. Rather than just outputting SEQUENCE, + * we also have to specify CONSTRUCTED, and the objects length. + */ + void encode( + ASN1OutputStream out) + throws IOException + { + ASN1OutputStream dOut = out.getDERSubStream(); + int length = getBodyLength(); + + out.write(BERTags.SEQUENCE | BERTags.CONSTRUCTED); + out.writeLength(length); + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + dOut.writeObject((ASN1Encodable)obj); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERSequenceGenerator.java b/common/src/main/java/org/bouncycastle/asn1/DERSequenceGenerator.java new file mode 100644 index 0000000..8cb5271 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERSequenceGenerator.java @@ -0,0 +1,45 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public class DERSequenceGenerator + extends DERGenerator +{ + private final ByteArrayOutputStream _bOut = new ByteArrayOutputStream(); + + public DERSequenceGenerator( + OutputStream out) + throws IOException + { + super(out); + } + + public DERSequenceGenerator( + OutputStream out, + int tagNo, + boolean isExplicit) + throws IOException + { + super(out, tagNo, isExplicit); + } + + public void addObject( + ASN1Encodable object) + throws IOException + { + object.toASN1Primitive().encode(new DEROutputStream(_bOut)); + } + + public OutputStream getRawOutputStream() + { + return _bOut; + } + + public void close() + throws IOException + { + writeDEREncoded(BERTags.CONSTRUCTED | BERTags.SEQUENCE, _bOut.toByteArray()); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERSequenceParser.java b/common/src/main/java/org/bouncycastle/asn1/DERSequenceParser.java new file mode 100644 index 0000000..376c1fd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERSequenceParser.java @@ -0,0 +1,38 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class DERSequenceParser + implements ASN1SequenceParser +{ + private ASN1StreamParser _parser; + + DERSequenceParser(ASN1StreamParser parser) + { + this._parser = parser; + } + + public ASN1Encodable readObject() + throws IOException + { + return _parser.readObject(); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return new DERSequence(_parser.readVector()); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException e) + { + throw new IllegalStateException(e.getMessage()); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERSet.java b/common/src/main/java/org/bouncycastle/asn1/DERSet.java new file mode 100644 index 0000000..c1faf84 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERSet.java @@ -0,0 +1,108 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +/** + * A DER encoded set object + */ +public class DERSet + extends ASN1Set +{ + private int bodyLength = -1; + + /** + * create an empty set + */ + public DERSet() + { + } + + /** + * @param obj - a single object that makes up the set. + */ + public DERSet( + ASN1Encodable obj) + { + super(obj); + } + + /** + * @param v - a vector of objects making up the set. + */ + public DERSet( + ASN1EncodableVector v) + { + super(v, true); + } + + /** + * create a set from an array of objects. + */ + public DERSet( + ASN1Encodable[] a) + { + super(a, true); + } + + DERSet( + ASN1EncodableVector v, + boolean doSort) + { + super(v, doSort); + } + + private int getBodyLength() + throws IOException + { + if (bodyLength < 0) + { + int length = 0; + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + length += ((ASN1Encodable)obj).toASN1Primitive().toDERObject().encodedLength(); + } + + bodyLength = length; + } + + return bodyLength; + } + + int encodedLength() + throws IOException + { + int length = getBodyLength(); + + return 1 + StreamUtil.calculateBodyLength(length) + length; + } + + /* + * A note on the implementation: + *

        + * As DER requires the constructed, definite-length model to + * be used for structured types, this varies slightly from the + * ASN.1 descriptions given. Rather than just outputting SET, + * we also have to specify CONSTRUCTED, and the objects length. + */ + void encode( + ASN1OutputStream out) + throws IOException + { + ASN1OutputStream dOut = out.getDERSubStream(); + int length = getBodyLength(); + + out.write(BERTags.SET | BERTags.CONSTRUCTED); + out.writeLength(length); + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + dOut.writeObject((ASN1Encodable)obj); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERSetParser.java b/common/src/main/java/org/bouncycastle/asn1/DERSetParser.java new file mode 100644 index 0000000..17702fa --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERSetParser.java @@ -0,0 +1,38 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public class DERSetParser + implements ASN1SetParser +{ + private ASN1StreamParser _parser; + + DERSetParser(ASN1StreamParser parser) + { + this._parser = parser; + } + + public ASN1Encodable readObject() + throws IOException + { + return _parser.readObject(); + } + + public ASN1Primitive getLoadedObject() + throws IOException + { + return new DERSet(_parser.readVector(), false); + } + + public ASN1Primitive toASN1Primitive() + { + try + { + return getLoadedObject(); + } + catch (IOException e) + { + throw new ASN1ParsingException(e.getMessage(), e); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERT61String.java b/common/src/main/java/org/bouncycastle/asn1/DERT61String.java new file mode 100644 index 0000000..ee2979b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERT61String.java @@ -0,0 +1,123 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * DER T61String (also the teletex string) + */ +public class DERT61String + extends ASN1Primitive + implements ASN1String +{ + private byte[] string; + + /** + * return a T61 string from the passed in object. + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERT61String getInstance( + Object obj) + { + if (obj == null || obj instanceof DERT61String) + { + return (DERT61String)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an T61 String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERT61String getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERT61String) + { + return getInstance(o); + } + else + { + return new DERT61String(ASN1OctetString.getInstance(o).getOctets()); + } + } + + /** + * basic constructor - with bytes. + */ + DERT61String( + byte[] string) + { + this.string = string; + } + + /** + * basic constructor - with string. + */ + public DERT61String( + String string) + { + this.string = Strings.toByteArray(string); + } + + public String getString() + { + return Strings.fromByteArray(string); + } + + public String toString() + { + return getString(); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.T61_STRING, string); + } + + public byte[] getOctets() + { + return Arrays.clone(string); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERT61String)) + { + return false; + } + + return Arrays.areEqual(string, ((DERT61String)o).string); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERTaggedObject.java b/common/src/main/java/org/bouncycastle/asn1/DERTaggedObject.java new file mode 100644 index 0000000..a87a0dc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERTaggedObject.java @@ -0,0 +1,118 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +/** + * DER TaggedObject - in ASN.1 notation this is any object preceded by + * a [n] where n is some number - these are assumed to follow the construction + * rules (as with sequences). + */ +public class DERTaggedObject + extends ASN1TaggedObject +{ + private static final byte[] ZERO_BYTES = new byte[0]; + + /** + * @param explicit true if an explicitly tagged object. + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public DERTaggedObject( + boolean explicit, + int tagNo, + ASN1Encodable obj) + { + super(explicit, tagNo, obj); + } + + public DERTaggedObject(int tagNo, ASN1Encodable encodable) + { + super(true, tagNo, encodable); + } + + boolean isConstructed() + { + if (!empty) + { + if (explicit) + { + return true; + } + else + { + ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); + + return primitive.isConstructed(); + } + } + else + { + return true; + } + } + + int encodedLength() + throws IOException + { + if (!empty) + { + ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); + int length = primitive.encodedLength(); + + if (explicit) + { + return StreamUtil.calculateTagLength(tagNo) + StreamUtil.calculateBodyLength(length) + length; + } + else + { + // header length already in calculation + length = length - 1; + + return StreamUtil.calculateTagLength(tagNo) + length; + } + } + else + { + return StreamUtil.calculateTagLength(tagNo) + 1; + } + } + + void encode( + ASN1OutputStream out) + throws IOException + { + if (!empty) + { + ASN1Primitive primitive = obj.toASN1Primitive().toDERObject(); + + if (explicit) + { + out.writeTag(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo); + out.writeLength(primitive.encodedLength()); + out.writeObject(primitive); + } + else + { + // + // need to mark constructed types... + // + int flags; + if (primitive.isConstructed()) + { + flags = BERTags.CONSTRUCTED | BERTags.TAGGED; + } + else + { + flags = BERTags.TAGGED; + } + + out.writeTag(flags, tagNo); + out.writeImplicitObject(primitive); + } + } + else + { + out.writeEncoded(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo, ZERO_BYTES); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERTags.java b/common/src/main/java/org/bouncycastle/asn1/DERTags.java new file mode 100644 index 0000000..83fd7fd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERTags.java @@ -0,0 +1,9 @@ +package org.bouncycastle.asn1; + +/** + * @deprecated use BERTags + */ +public interface DERTags + extends BERTags +{ +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERUTCTime.java b/common/src/main/java/org/bouncycastle/asn1/DERUTCTime.java new file mode 100644 index 0000000..3e8010b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERUTCTime.java @@ -0,0 +1,259 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Date; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * UTC time object. + */ +public class DERUTCTime + extends ASN1Primitive +{ + private byte[] time; + + /** + * return an UTC Time from the passed in object. + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static ASN1UTCTime getInstance( + Object obj) + { + if (obj == null || obj instanceof ASN1UTCTime) + { + return (ASN1UTCTime)obj; + } + + if (obj instanceof DERUTCTime) + { + return new ASN1UTCTime(((DERUTCTime)obj).time); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return an UTC Time from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static ASN1UTCTime getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Object o = obj.getObject(); + + if (explicit || o instanceof ASN1UTCTime) + { + return getInstance(o); + } + else + { + return new ASN1UTCTime(((ASN1OctetString)o).getOctets()); + } + } + + /** + * The correct format for this is YYMMDDHHMMSSZ (it used to be that seconds were + * never encoded. When you're creating one of these objects from scratch, that's + * what you want to use, otherwise we'll try to deal with whatever gets read from + * the input stream... (this is why the input format is different from the getTime() + * method output). + *

        + * + * @param time the time string. + */ + public DERUTCTime( + String time) + { + if (time.charAt(time.length() - 1) != 'Z') + { + // we accept this as a variation + if (time.indexOf('-') < 0 && time.indexOf('+') < 0) + { + throw new IllegalArgumentException("time needs to be in format YYMMDDHHMMSSZ"); + } + } + + this.time = Strings.toByteArray(time); + } + + /** + * base constructor from a java.util.date object + */ + public DERUTCTime( + Date time) + { + this.time = Strings.toByteArray(DateFormatter.toUTCDateString(time)); + } + + DERUTCTime( + byte[] time) + { + this.time = time; + } + + /** + * return the time as a date based on whatever a 2 digit year will return. For + * standardised processing use getAdjustedDate(). + * + * @return the resulting date + */ + public Date getDate() + { + return DateFormatter.adjustedFromUTCDateString(time); + } + + /** + * return the time as an adjusted date + * in the range of 1950 - 2049. + * + * @return a date in the range of 1950 to 2049. + */ + public Date getAdjustedDate() + { + return DateFormatter.adjustedFromUTCDateString(time); + } + + /** + * return the time - always in the form of + * YYMMDDhhmmssGMT(+hh:mm|-hh:mm). + *

        + * Normally in a certificate we would expect "Z" rather than "GMT", + * however adding the "GMT" means we can just use: + *

        +     *     dateF = new SimpleDateFormat("yyMMddHHmmssz");
        +     * 
        + * To read in the time and get a date which is compatible with our local + * time zone. + *

        + * Note: In some cases, due to the local date processing, this + * may lead to unexpected results. If you want to stick the normal + * convention of 1950 to 2049 use the getAdjustedTime() method. + */ + public String getTime() + { + String stime = Strings.fromByteArray(time); + + // + // standardise the format. + // + if (stime.indexOf('-') < 0 && stime.indexOf('+') < 0) + { + if (stime.length() == 11) + { + return stime.substring(0, 10) + "00GMT+00:00"; + } + else + { + return stime.substring(0, 12) + "GMT+00:00"; + } + } + else + { + int index = stime.indexOf('-'); + if (index < 0) + { + index = stime.indexOf('+'); + } + String d = stime; + + if (index == stime.length() - 3) + { + d += "00"; + } + + if (index == 10) + { + return d.substring(0, 10) + "00GMT" + d.substring(10, 13) + ":" + d.substring(13, 15); + } + else + { + return d.substring(0, 12) + "GMT" + d.substring(12, 15) + ":" + d.substring(15, 17); + } + } + } + + /** + * return a time string as an adjusted date with a 4 digit year. This goes + * in the range of 1950 - 2049. + */ + public String getAdjustedTime() + { + String d = this.getTime(); + + if (d.charAt(0) < '5') + { + return "20" + d; + } + else + { + return "19" + d; + } + } + + /** + * Return the time. + * @return The time string as it appeared in the encoded object. + */ + public String getTimeString() + { + return Strings.fromByteArray(time); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + int length = time.length; + + return 1 + StreamUtil.calculateBodyLength(length) + length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.write(BERTags.UTC_TIME); + + int length = time.length; + + out.writeLength(length); + + for (int i = 0; i != length; i++) + { + out.write((byte)time[i]); + } + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERUTCTime)) + { + return false; + } + + return Arrays.areEqual(time, ((DERUTCTime)o).time); + } + + public int hashCode() + { + return Arrays.hashCode(time); + } + + public String toString() + { + return Strings.fromByteArray(time); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERUTF8String.java b/common/src/main/java/org/bouncycastle/asn1/DERUTF8String.java new file mode 100644 index 0000000..f46f558 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERUTF8String.java @@ -0,0 +1,120 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * DER UTF8String object. + */ +public class DERUTF8String + extends ASN1Primitive + implements ASN1String +{ + private byte[] string; + + /** + * return an UTF8 string from the passed in object. + * + * @exception IllegalArgumentException + * if the object cannot be converted. + */ + public static DERUTF8String getInstance(Object obj) + { + if (obj == null || obj instanceof DERUTF8String) + { + return (DERUTF8String)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + + obj.getClass().getName()); + } + + /** + * return an UTF8 String from a tagged object. + * + * @param obj + * the tagged object holding the object we want + * @param explicit + * true if the object is meant to be explicitly tagged false + * otherwise. + * @exception IllegalArgumentException + * if the tagged object cannot be converted. + */ + public static DERUTF8String getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERUTF8String) + { + return getInstance(o); + } + else + { + return new DERUTF8String(ASN1OctetString.getInstance(o).getOctets()); + } + } + + /** + * basic constructor - byte encoded string. + */ + DERUTF8String(byte[] string) + { + this.string = string; + } + + /** + * basic constructor + */ + public DERUTF8String(String string) + { + this.string = Strings.toUTF8ByteArray(string); + } + + public String getString() + { + return Strings.fromUTF8ByteArray(string); + } + + public String toString() + { + return getString(); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } + + boolean asn1Equals(ASN1Primitive o) + { + if (!(o instanceof DERUTF8String)) + { + return false; + } + + DERUTF8String s = (DERUTF8String)o; + + return Arrays.areEqual(string, s.string); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + throws IOException + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode(ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.UTF8_STRING, string); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERUniversalString.java b/common/src/main/java/org/bouncycastle/asn1/DERUniversalString.java new file mode 100644 index 0000000..4fe82f0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERUniversalString.java @@ -0,0 +1,136 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.bouncycastle.util.Arrays; + +/** + * DER UniversalString object. + */ +public class DERUniversalString + extends ASN1Primitive + implements ASN1String +{ + private static final char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + private byte[] string; + + /** + * return a Universal String from the passed in object. + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERUniversalString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERUniversalString) + { + return (DERUniversalString)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a Universal String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERUniversalString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERUniversalString) + { + return getInstance(o); + } + else + { + return new DERUniversalString(((ASN1OctetString)o).getOctets()); + } + } + + /** + * basic constructor - byte encoded string. + */ + public DERUniversalString( + byte[] string) + { + this.string = string; + } + + public String getString() + { + StringBuffer buf = new StringBuffer("#"); + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + ASN1OutputStream aOut = new ASN1OutputStream(bOut); + + try + { + aOut.writeObject(this); + } + catch (IOException e) + { + throw new RuntimeException("internal error encoding BitString"); + } + + byte[] string = bOut.toByteArray(); + + for (int i = 0; i != string.length; i++) + { + buf.append(table[(string[i] >>> 4) & 0xf]); + buf.append(table[string[i] & 0xf]); + } + + return buf.toString(); + } + + public String toString() + { + return getString(); + } + + public byte[] getOctets() + { + return string; + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.UNIVERSAL_STRING, this.getOctets()); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERUniversalString)) + { + return false; + } + + return Arrays.areEqual(string, ((DERUniversalString)o).string); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DERVisibleString.java b/common/src/main/java/org/bouncycastle/asn1/DERVisibleString.java new file mode 100644 index 0000000..1c385b7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DERVisibleString.java @@ -0,0 +1,123 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; + +/** + * DER VisibleString object. + */ +public class DERVisibleString + extends ASN1Primitive + implements ASN1String +{ + private byte[] string; + + /** + * return a Visible String from the passed in object. + * + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static DERVisibleString getInstance( + Object obj) + { + if (obj == null || obj instanceof DERVisibleString) + { + return (DERVisibleString)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * return a Visible String from a tagged object. + * + * @param obj the tagged object holding the object we want + * @param explicit true if the object is meant to be explicitly + * tagged false otherwise. + * @exception IllegalArgumentException if the tagged object cannot + * be converted. + */ + public static DERVisibleString getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + ASN1Primitive o = obj.getObject(); + + if (explicit || o instanceof DERVisibleString) + { + return getInstance(o); + } + else + { + return new DERVisibleString(ASN1OctetString.getInstance(o).getOctets()); + } + } + + /** + * basic constructor - byte encoded string. + */ + DERVisibleString( + byte[] string) + { + this.string = string; + } + + /** + * basic constructor + */ + public DERVisibleString( + String string) + { + this.string = Strings.toByteArray(string); + } + + public String getString() + { + return Strings.fromByteArray(string); + } + + public String toString() + { + return getString(); + } + + public byte[] getOctets() + { + return Arrays.clone(string); + } + + boolean isConstructed() + { + return false; + } + + int encodedLength() + { + return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; + } + + void encode( + ASN1OutputStream out) + throws IOException + { + out.writeEncoded(BERTags.VISIBLE_STRING, this.string); + } + + boolean asn1Equals( + ASN1Primitive o) + { + if (!(o instanceof DERVisibleString)) + { + return false; + } + + return Arrays.areEqual(string, ((DERVisibleString)o).string); + } + + public int hashCode() + { + return Arrays.hashCode(string); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DLOutputStream.java b/common/src/main/java/org/bouncycastle/asn1/DLOutputStream.java new file mode 100644 index 0000000..68c0ed6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DLOutputStream.java @@ -0,0 +1,31 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Stream that outputs encoding based on definite length. + */ +public class DLOutputStream + extends ASN1OutputStream +{ + public DLOutputStream( + OutputStream os) + { + super(os); + } + + public void writeObject( + ASN1Encodable obj) + throws IOException + { + if (obj != null) + { + obj.toASN1Primitive().toDLObject().encode(this); + } + else + { + throw new IOException("null object detected"); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DLSequence.java b/common/src/main/java/org/bouncycastle/asn1/DLSequence.java new file mode 100644 index 0000000..bb8ec4e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DLSequence.java @@ -0,0 +1,98 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +public class DLSequence + extends ASN1Sequence +{ + private int bodyLength = -1; + + /** + * create an empty sequence + */ + public DLSequence() + { + } + + /** + * create a sequence containing one object + */ + public DLSequence( + ASN1Encodable obj) + { + super(obj); + } + + /** + * create a sequence containing a vector of objects. + */ + public DLSequence( + ASN1EncodableVector v) + { + super(v); + } + + /** + * create a sequence containing an array of objects. + */ + public DLSequence( + ASN1Encodable[] array) + { + super(array); + } + + private int getBodyLength() + throws IOException + { + if (bodyLength < 0) + { + int length = 0; + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + length += ((ASN1Encodable)obj).toASN1Primitive().toDLObject().encodedLength(); + } + + bodyLength = length; + } + + return bodyLength; + } + + int encodedLength() + throws IOException + { + int length = getBodyLength(); + + return 1 + StreamUtil.calculateBodyLength(length) + length; + } + + /* + * A note on the implementation: + *

        + * As DL requires the constructed, definite-length model to + * be used for structured types, this varies slightly from the + * ASN.1 descriptions given. Rather than just outputting SEQUENCE, + * we also have to specify CONSTRUCTED, and the objects length. + */ + void encode( + ASN1OutputStream out) + throws IOException + { + ASN1OutputStream dOut = out.getDLSubStream(); + int length = getBodyLength(); + + out.write(BERTags.SEQUENCE | BERTags.CONSTRUCTED); + out.writeLength(length); + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + dOut.writeObject((ASN1Encodable)obj); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DLSet.java b/common/src/main/java/org/bouncycastle/asn1/DLSet.java new file mode 100644 index 0000000..755754b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DLSet.java @@ -0,0 +1,101 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +/** + * A DER encoded set object + */ +public class DLSet + extends ASN1Set +{ + private int bodyLength = -1; + + /** + * create an empty set + */ + public DLSet() + { + } + + /** + * @param obj - a single object that makes up the set. + */ + public DLSet( + ASN1Encodable obj) + { + super(obj); + } + + /** + * @param v - a vector of objects making up the set. + */ + public DLSet( + ASN1EncodableVector v) + { + super(v, false); + } + + /** + * create a set from an array of objects. + */ + public DLSet( + ASN1Encodable[] a) + { + super(a, false); + } + + private int getBodyLength() + throws IOException + { + if (bodyLength < 0) + { + int length = 0; + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + length += ((ASN1Encodable)obj).toASN1Primitive().toDLObject().encodedLength(); + } + + bodyLength = length; + } + + return bodyLength; + } + + int encodedLength() + throws IOException + { + int length = getBodyLength(); + + return 1 + StreamUtil.calculateBodyLength(length) + length; + } + + /* + * A note on the implementation: + *

        + * As DL requires the constructed, definite-length model to + * be used for structured types, this varies slightly from the + * ASN.1 descriptions given. Rather than just outputting SET, + * we also have to specify CONSTRUCTED, and the objects length. + */ + void encode( + ASN1OutputStream out) + throws IOException + { + ASN1OutputStream dOut = out.getDLSubStream(); + int length = getBodyLength(); + + out.write(BERTags.SET | BERTags.CONSTRUCTED); + out.writeLength(length); + + for (Enumeration e = this.getObjects(); e.hasMoreElements();) + { + Object obj = e.nextElement(); + + dOut.writeObject((ASN1Encodable)obj); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DLTaggedObject.java b/common/src/main/java/org/bouncycastle/asn1/DLTaggedObject.java new file mode 100644 index 0000000..4a245df --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DLTaggedObject.java @@ -0,0 +1,112 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +/** + * Definite Length TaggedObject - in ASN.1 notation this is any object preceded by + * a [n] where n is some number - these are assumed to follow the construction + * rules (as with sequences). + */ +public class DLTaggedObject + extends ASN1TaggedObject +{ + private static final byte[] ZERO_BYTES = new byte[0]; + + /** + * @param explicit true if an explicitly tagged object. + * @param tagNo the tag number for this object. + * @param obj the tagged object. + */ + public DLTaggedObject( + boolean explicit, + int tagNo, + ASN1Encodable obj) + { + super(explicit, tagNo, obj); + } + + boolean isConstructed() + { + if (!empty) + { + if (explicit) + { + return true; + } + else + { + ASN1Primitive primitive = obj.toASN1Primitive().toDLObject(); + + return primitive.isConstructed(); + } + } + else + { + return true; + } + } + + int encodedLength() + throws IOException + { + if (!empty) + { + int length = obj.toASN1Primitive().toDLObject().encodedLength(); + + if (explicit) + { + return StreamUtil.calculateTagLength(tagNo) + StreamUtil.calculateBodyLength(length) + length; + } + else + { + // header length already in calculation + length = length - 1; + + return StreamUtil.calculateTagLength(tagNo) + length; + } + } + else + { + return StreamUtil.calculateTagLength(tagNo) + 1; + } + } + + void encode( + ASN1OutputStream out) + throws IOException + { + if (!empty) + { + ASN1Primitive primitive = obj.toASN1Primitive().toDLObject(); + + if (explicit) + { + out.writeTag(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo); + out.writeLength(primitive.encodedLength()); + out.writeObject(primitive); + } + else + { + // + // need to mark constructed types... + // + int flags; + if (primitive.isConstructed()) + { + flags = BERTags.CONSTRUCTED | BERTags.TAGGED; + } + else + { + flags = BERTags.TAGGED; + } + + out.writeTag(flags, tagNo); + out.writeImplicitObject(primitive); + } + } + else + { + out.writeEncoded(BERTags.CONSTRUCTED | BERTags.TAGGED, tagNo, ZERO_BYTES); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DateFormatter.java b/common/src/main/java/org/bouncycastle/asn1/DateFormatter.java new file mode 100644 index 0000000..cd70774 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DateFormatter.java @@ -0,0 +1,272 @@ +package org.bouncycastle.asn1; + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +class DateFormatter +{ + // YYMMDDHHMMSSZ + static String toUTCDateString(Date date) + { + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + + calendar.setTime(date); + + return format2Year(calendar.get(Calendar.YEAR)) + format2(calendar.get(Calendar.MONTH) + 1) + format2(calendar.get(Calendar.DAY_OF_MONTH)) + + format2(calendar.get(Calendar.HOUR_OF_DAY)) + format2(calendar.get(Calendar.MINUTE)) + format2(calendar.get(Calendar.SECOND)) + "Z"; + } + + static Date adjustedFromUTCDateString(byte[] date) + { + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + + int year = toInt2(date, 0); + + if (year < 50) + { + year += 2000; + } + else + { + year += 1900; + } + + calendar.setTimeZone(TimeZone.getTimeZone("GMT")); + + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, toInt2(date, 2) - 1); + calendar.set(Calendar.DAY_OF_MONTH, toInt2(date, 4)); + calendar.set(Calendar.HOUR_OF_DAY, toInt2(date, 6)); + calendar.set(Calendar.MINUTE, toInt2(date, 8)); + + int tzChar = 10; + + if (isNumber(date, tzChar)) + { + calendar.set(Calendar.SECOND, toInt2(date, 10)); + tzChar = 12; + } + else + { + calendar.set(Calendar.SECOND, 0); + } + + calendar.set(Calendar.MILLISECOND, 0); + + if (date[tzChar] != 'Z') + { + int hoursOff = 0; + int minutesOff = 0; + + hoursOff = toInt2(date, tzChar + 1) * 60 * 60 * 1000; + + if (date.length > tzChar + 3) + { + minutesOff = toInt2(date, tzChar + 3) * 60 * 1000; + } + + if (date[tzChar] == '-') + { + return new Date(calendar.getTime().getTime() + hoursOff + minutesOff); + } + else + { + return new Date(calendar.getTime().getTime() - (hoursOff + minutesOff)); + } + } + + return calendar.getTime(); + } + + static String getGeneralizedTimeDateString(Date date, boolean includeMillis) + { + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + + calendar.setTime(date); + + String time = format4Year(calendar.get(Calendar.YEAR)) + format2(calendar.get(Calendar.MONTH) + 1) + format2(calendar.get(Calendar.DAY_OF_MONTH)) + + format2(calendar.get(Calendar.HOUR_OF_DAY)) + format2(calendar.get(Calendar.MINUTE)) + format2(calendar.get(Calendar.SECOND)); + + if (includeMillis) + { + time += "." + format3(calendar.get(Calendar.MILLISECOND)); + } + + return time + "Z"; + } + + static Date fromGeneralizedTimeString(byte[] date) + { + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + + int year = toInt4(date, 0); + + if (isLocalTime(date)) + { + calendar.setTimeZone(TimeZone.getTimeZone("GMT")); + } + + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, toInt2(date, 4) - 1); + calendar.set(Calendar.DAY_OF_MONTH, toInt2(date, 6)); + calendar.set(Calendar.HOUR_OF_DAY, toInt2(date, 8)); + calendar.set(Calendar.MINUTE, toInt2(date, 10)); + + int tzChar = 12; + + if (isNumber(date, tzChar)) + { + calendar.set(Calendar.SECOND, toInt2(date, 12)); + tzChar = 14; + } + else + { + calendar.set(Calendar.SECOND, 0); + } + + if (tzChar != date.length && date[tzChar] == '.') + { + int millis = 0; + tzChar++; + if (isNumber(date, tzChar)) + { + millis = (date[tzChar] - '0') * 100; + tzChar++; + } + if (tzChar != date.length && isNumber(date, tzChar)) + { + millis += (date[tzChar] - '0') * 10; + tzChar++; + } + if (tzChar != date.length && isNumber(date, tzChar)) + { + millis += (date[tzChar] - '0'); + tzChar++; + } + calendar.set(Calendar.MILLISECOND, millis); + } + else + { + calendar.set(Calendar.MILLISECOND, 0); + } + + // skip nano-seconds + while (tzChar != date.length && isNumber(date, tzChar)) + { + tzChar++; + } + + if (tzChar != date.length && date[tzChar] != 'Z') + { + int hoursOff = 0; + int minutesOff = 0; + + hoursOff = toInt2(date, tzChar + 1) * 60 * 60 * 1000; + + if (date.length > tzChar + 3) + { + minutesOff = toInt2(date, tzChar + 3) * 60 * 1000; + } + + if (date[tzChar] == '-') + { + return new Date(calendar.getTime().getTime() + hoursOff + minutesOff); + } + else + { + return new Date(calendar.getTime().getTime() - (hoursOff + minutesOff)); + } + } + + return calendar.getTime(); + } + + private static String format2(int v) + { + if (v < 10) + { + return "0" + v; + } + + return Integer.toString(v); + } + + private static String format2Year(int v) + { + if (v > 2000) + { + v = v - 2000; + } + else + { + v = v - 1900; + } + + return format2(v); + } + + private static String format3(int v) + { + if (v < 10) + { + return "00" + v; + } + + if (v < 100) + { + return "0" + v; + } + + return Integer.toString(v); + } + + private static String format4Year(int v) + { + if (v < 10) + { + return "000" + v; + } + + if (v < 100) + { + return "00" + v; + } + + if (v < 1000) + { + return "0" + v; + } + + return Integer.toString(v); + } + + private static boolean isNumber(byte[] input, int off) + { + byte b = input[off]; + return (b >= '0') && (b <= '9'); + } + + private static boolean isLocalTime(byte[] date) + { + for (int i = date.length - 1; i > date.length - 6; i--) + { + if (date[i] == 'Z' || date[i] == '-' || date[i] == '+') + { + return false; + } + } + + return true; + } + + private static int toInt2(byte[] input, int off) + { + return (input[off] - '0') * 10 + (input[off + 1] - '0'); + } + + private static int toInt4(byte[] input, int off) + { + return toInt2(input, off) * 100 + toInt2(input, off + 2) ; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java b/common/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java new file mode 100644 index 0000000..3f6ce22 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/DefiniteLengthInputStream.java @@ -0,0 +1,106 @@ +package org.bouncycastle.asn1; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.util.io.Streams; + +class DefiniteLengthInputStream + extends LimitedInputStream +{ + private static final byte[] EMPTY_BYTES = new byte[0]; + + private final int _originalLength; + private int _remaining; + + DefiniteLengthInputStream( + InputStream in, + int length) + throws IOException + { + super(in, length); + + if (length < 0) + { + throw new IllegalArgumentException("negative lengths not allowed"); + } + + this._originalLength = length; + this._remaining = length; + + if (length == 0) + { + setParentEofDetect(true); + } + } + + int getRemaining() + { + return _remaining; + } + + public int read() + throws IOException + { + if (_remaining == 0) + { + return -1; + } + + int b = _in.read(); + + if (b < 0) + { + throw new EOFException("DEF length " + _originalLength + " object truncated by " + _remaining); + } + + if (--_remaining == 0) + { + setParentEofDetect(true); + } + + return b; + } + + public int read(byte[] buf, int off, int len) + throws IOException + { + if (_remaining == 0) + { + return -1; + } + + int toRead = Math.min(len, _remaining); + int numRead = _in.read(buf, off, toRead); + + if (numRead < 0) + { + throw new EOFException("DEF length " + _originalLength + " object truncated by " + _remaining); + } + + if ((_remaining -= numRead) == 0) + { + setParentEofDetect(true); + } + + return numRead; + } + + byte[] toByteArray() + throws IOException + { + if (_remaining == 0) + { + return EMPTY_BYTES; + } + + byte[] bytes = new byte[_remaining]; + if ((_remaining -= Streams.readFully(_in, bytes)) != 0) + { + throw new EOFException("DEF length " + _originalLength + " object truncated by " + _remaining); + } + setParentEofDetect(true); + return bytes; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/InMemoryRepresentable.java b/common/src/main/java/org/bouncycastle/asn1/InMemoryRepresentable.java new file mode 100644 index 0000000..a4b1492 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/InMemoryRepresentable.java @@ -0,0 +1,9 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; + +public interface InMemoryRepresentable +{ + ASN1Primitive getLoadedObject() + throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/asn1/IndefiniteLengthInputStream.java b/common/src/main/java/org/bouncycastle/asn1/IndefiniteLengthInputStream.java new file mode 100644 index 0000000..353da3b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/IndefiniteLengthInputStream.java @@ -0,0 +1,111 @@ +package org.bouncycastle.asn1; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; + +class IndefiniteLengthInputStream + extends LimitedInputStream +{ + private int _b1; + private int _b2; + private boolean _eofReached = false; + private boolean _eofOn00 = true; + + IndefiniteLengthInputStream( + InputStream in, + int limit) + throws IOException + { + super(in, limit); + + _b1 = in.read(); + _b2 = in.read(); + + if (_b2 < 0) + { + // Corrupted stream + throw new EOFException(); + } + + checkForEof(); + } + + void setEofOn00( + boolean eofOn00) + { + _eofOn00 = eofOn00; + checkForEof(); + } + + private boolean checkForEof() + { + if (!_eofReached && _eofOn00 && (_b1 == 0x00 && _b2 == 0x00)) + { + _eofReached = true; + setParentEofDetect(true); + } + return _eofReached; + } + + public int read(byte[] b, int off, int len) + throws IOException + { + // Only use this optimisation if we aren't checking for 00 + if (_eofOn00 || len < 3) + { + return super.read(b, off, len); + } + + if (_eofReached) + { + return -1; + } + + int numRead = _in.read(b, off + 2, len - 2); + + if (numRead < 0) + { + // Corrupted stream + throw new EOFException(); + } + + b[off] = (byte)_b1; + b[off + 1] = (byte)_b2; + + _b1 = _in.read(); + _b2 = _in.read(); + + if (_b2 < 0) + { + // Corrupted stream + throw new EOFException(); + } + + return numRead + 2; + } + + public int read() + throws IOException + { + if (checkForEof()) + { + return -1; + } + + int b = _in.read(); + + if (b < 0) + { + // Corrupted stream + throw new EOFException(); + } + + int v = _b1; + + _b1 = _b2; + _b2 = b; + + return v; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/LazyConstructionEnumeration.java b/common/src/main/java/org/bouncycastle/asn1/LazyConstructionEnumeration.java new file mode 100644 index 0000000..31d988d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/LazyConstructionEnumeration.java @@ -0,0 +1,43 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +class LazyConstructionEnumeration + implements Enumeration +{ + private ASN1InputStream aIn; + private Object nextObj; + + public LazyConstructionEnumeration(byte[] encoded) + { + aIn = new ASN1InputStream(encoded, true); + nextObj = readObject(); + } + + public boolean hasMoreElements() + { + return nextObj != null; + } + + public Object nextElement() + { + Object o = nextObj; + + nextObj = readObject(); + + return o; + } + + private Object readObject() + { + try + { + return aIn.readObject(); + } + catch (IOException e) + { + throw new ASN1ParsingException("malformed DER construction: " + e, e); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/LazyEncodedSequence.java b/common/src/main/java/org/bouncycastle/asn1/LazyEncodedSequence.java new file mode 100644 index 0000000..c7342ad --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/LazyEncodedSequence.java @@ -0,0 +1,109 @@ +package org.bouncycastle.asn1; + +import java.io.IOException; +import java.util.Enumeration; + +/** + * Note: this class is for processing DER/DL encoded sequences only. + */ +class LazyEncodedSequence + extends ASN1Sequence +{ + private byte[] encoded; + + LazyEncodedSequence( + byte[] encoded) + throws IOException + { + this.encoded = encoded; + } + + private void parse() + { + Enumeration en = new LazyConstructionEnumeration(encoded); + + while (en.hasMoreElements()) + { + seq.addElement(en.nextElement()); + } + + encoded = null; + } + + public synchronized ASN1Encodable getObjectAt(int index) + { + if (encoded != null) + { + parse(); + } + + return super.getObjectAt(index); + } + + public synchronized Enumeration getObjects() + { + if (encoded == null) + { + return super.getObjects(); + } + + return new LazyConstructionEnumeration(encoded); + } + + public synchronized int size() + { + if (encoded != null) + { + parse(); + } + + return super.size(); + } + + ASN1Primitive toDERObject() + { + if (encoded != null) + { + parse(); + } + + return super.toDERObject(); + } + + ASN1Primitive toDLObject() + { + if (encoded != null) + { + parse(); + } + + return super.toDLObject(); + } + + int encodedLength() + throws IOException + { + if (encoded != null) + { + return 1 + StreamUtil.calculateBodyLength(encoded.length) + encoded.length; + } + else + { + return super.toDLObject().encodedLength(); + } + } + + void encode( + ASN1OutputStream out) + throws IOException + { + if (encoded != null) + { + out.writeEncoded(BERTags.SEQUENCE | BERTags.CONSTRUCTED, encoded); + } + else + { + super.toDLObject().encode(out); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/LimitedInputStream.java b/common/src/main/java/org/bouncycastle/asn1/LimitedInputStream.java new file mode 100644 index 0000000..d94b0bd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/LimitedInputStream.java @@ -0,0 +1,32 @@ +package org.bouncycastle.asn1; + +import java.io.InputStream; + +abstract class LimitedInputStream + extends InputStream +{ + protected final InputStream _in; + private int _limit; + + LimitedInputStream( + InputStream in, + int limit) + { + this._in = in; + this._limit = limit; + } + + int getRemaining() + { + // TODO: maybe one day this can become more accurate + return _limit; + } + + protected void setParentEofDetect(boolean on) + { + if (_in instanceof IndefiniteLengthInputStream) + { + ((IndefiniteLengthInputStream)_in).setEofOn00(on); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/OIDTokenizer.java b/common/src/main/java/org/bouncycastle/asn1/OIDTokenizer.java new file mode 100644 index 0000000..5467944 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/OIDTokenizer.java @@ -0,0 +1,48 @@ +package org.bouncycastle.asn1; + +/** + * class for breaking up an OID into it's component tokens, ala + * java.util.StringTokenizer. We need this class as some of the + * lightweight Java environment don't support classes like + * StringTokenizer. + */ +public class OIDTokenizer +{ + private String oid; + private int index; + + public OIDTokenizer( + String oid) + { + this.oid = oid; + this.index = 0; + } + + public boolean hasMoreTokens() + { + return (index != -1); + } + + public String nextToken() + { + if (index == -1) + { + return null; + } + + String token; + int end = oid.indexOf('.', index); + + if (end == -1) + { + token = oid.substring(index); + index = -1; + return token; + } + + token = oid.substring(index, end); + + index = end + 1; + return token; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/StreamUtil.java b/common/src/main/java/org/bouncycastle/asn1/StreamUtil.java new file mode 100644 index 0000000..67e3c20 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/StreamUtil.java @@ -0,0 +1,88 @@ +package org.bouncycastle.asn1; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +class StreamUtil +{ + /** + * Find out possible longest length... + * + * @param in input stream of interest + * @return length calculation or MAX_VALUE. + */ + static int findLimit(InputStream in) + { + if (in instanceof LimitedInputStream) + { + return ((LimitedInputStream)in).getRemaining(); + } + else if (in instanceof ASN1InputStream) + { + return ((ASN1InputStream)in).getLimit(); + } + else if (in instanceof ByteArrayInputStream) + { + return ((ByteArrayInputStream)in).available(); + } + + return Integer.MAX_VALUE; + } + + static int calculateBodyLength( + int length) + { + int count = 1; + + if (length > 127) + { + int size = 1; + int val = length; + + while ((val >>>= 8) != 0) + { + size++; + } + + for (int i = (size - 1) * 8; i >= 0; i -= 8) + { + count++; + } + } + + return count; + } + + static int calculateTagLength(int tagNo) + throws IOException + { + int length = 1; + + if (tagNo >= 31) + { + if (tagNo < 128) + { + length++; + } + else + { + byte[] stack = new byte[5]; + int pos = stack.length; + + stack[--pos] = (byte)(tagNo & 0x7F); + + do + { + tagNo >>= 7; + stack[--pos] = (byte)(tagNo & 0x7F | 0x80); + } + while (tagNo > 127); + + length += stack.length - pos; + } + } + + return length; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/Attribute.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/Attribute.java new file mode 100644 index 0000000..6374c98 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/Attribute.java @@ -0,0 +1,88 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.DERSequence; + +public class Attribute + extends ASN1Object +{ + private ASN1ObjectIdentifier attrType; + private ASN1Set attrValues; + + /** + * return an Attribute object from the given object. + * + * @param o the object we want converted. + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static Attribute getInstance( + Object o) + { + if (o == null || o instanceof Attribute) + { + return (Attribute)o; + } + + if (o instanceof ASN1Sequence) + { + return new Attribute((ASN1Sequence)o); + } + + throw new IllegalArgumentException("unknown object in factory: " + o.getClass().getName()); + } + + public Attribute( + ASN1Sequence seq) + { + attrType = (ASN1ObjectIdentifier)seq.getObjectAt(0); + attrValues = (ASN1Set)seq.getObjectAt(1); + } + + public Attribute( + ASN1ObjectIdentifier attrType, + ASN1Set attrValues) + { + this.attrType = attrType; + this.attrValues = attrValues; + } + + public ASN1ObjectIdentifier getAttrType() + { + return attrType; + } + + public ASN1Set getAttrValues() + { + return attrValues; + } + + public ASN1Encodable[] getAttributeValues() + { + return attrValues.toArray(); + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *

        +     * Attribute ::= SEQUENCE {
        +     *     attrType OBJECT IDENTIFIER,
        +     *     attrValues SET OF AttributeValue
        +     * }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(attrType); + v.add(attrValues); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java new file mode 100644 index 0000000..ea4779b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/AuthenticatedSafe.java @@ -0,0 +1,74 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.BERSequence; +import org.bouncycastle.asn1.DLSequence; + +public class AuthenticatedSafe + extends ASN1Object +{ + private ContentInfo[] info; + private boolean isBer = true; + + private AuthenticatedSafe( + ASN1Sequence seq) + { + info = new ContentInfo[seq.size()]; + + for (int i = 0; i != info.length; i++) + { + info[i] = ContentInfo.getInstance(seq.getObjectAt(i)); + } + + isBer = seq instanceof BERSequence; + } + + public static AuthenticatedSafe getInstance( + Object o) + { + if (o instanceof AuthenticatedSafe) + { + return (AuthenticatedSafe)o; + } + + if (o != null) + { + return new AuthenticatedSafe(ASN1Sequence.getInstance(o)); + } + + return null; + } + + public AuthenticatedSafe( + ContentInfo[] info) + { + this.info = info; + } + + public ContentInfo[] getContentInfo() + { + return info; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + for (int i = 0; i != info.length; i++) + { + v.add(info[i]); + } + + if (isBer) + { + return new BERSequence(v); + } + else + { + return new DLSequence(v); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/CRLBag.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/CRLBag.java new file mode 100644 index 0000000..b91c1a5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/CRLBag.java @@ -0,0 +1,82 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +public class CRLBag + extends ASN1Object +{ + private ASN1ObjectIdentifier crlId; + private ASN1Encodable crlValue; + + private CRLBag( + ASN1Sequence seq) + { + this.crlId = (ASN1ObjectIdentifier)seq.getObjectAt(0); + this.crlValue = ((DERTaggedObject)seq.getObjectAt(1)).getObject(); + } + + public static CRLBag getInstance(Object o) + { + if (o instanceof CRLBag) + { + return (CRLBag)o; + } + else if (o != null) + { + return new CRLBag(ASN1Sequence.getInstance(o)); + } + + return null; + } + + public CRLBag( + ASN1ObjectIdentifier crlId, + ASN1Encodable crlValue) + { + this.crlId = crlId; + this.crlValue = crlValue; + } + + public ASN1ObjectIdentifier getcrlId() + { + return crlId; + } + + public ASN1Encodable getCRLValue() + { + return crlValue; + } + + /** + *
        +     CRLBag ::= SEQUENCE {
        +     crlId  BAG-TYPE.&id ({CRLTypes}),
        +     crlValue  [0] EXPLICIT BAG-TYPE.&Type ({CRLTypes}{@crlId})
        +     }
        +
        +     x509CRL BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}
        +     -- DER-encoded X.509 CRL stored in OCTET STRING
        +
        +     CRLTypes BAG-TYPE ::= {
        +     x509CRL,
        +     ... -- For future extensions
        +     }
        +       
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(crlId); + v.add(new DERTaggedObject(0, crlValue)); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/CertBag.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/CertBag.java new file mode 100644 index 0000000..4a73028 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/CertBag.java @@ -0,0 +1,66 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +public class CertBag + extends ASN1Object +{ + private ASN1ObjectIdentifier certId; + private ASN1Encodable certValue; + + private CertBag( + ASN1Sequence seq) + { + this.certId = (ASN1ObjectIdentifier)seq.getObjectAt(0); + this.certValue = ((DERTaggedObject)seq.getObjectAt(1)).getObject(); + } + + public static CertBag getInstance(Object o) + { + if (o instanceof CertBag) + { + return (CertBag)o; + } + else if (o != null) + { + return new CertBag(ASN1Sequence.getInstance(o)); + } + + return null; + } + + public CertBag( + ASN1ObjectIdentifier certId, + ASN1Encodable certValue) + { + this.certId = certId; + this.certValue = certValue; + } + + public ASN1ObjectIdentifier getCertId() + { + return certId; + } + + public ASN1Encodable getCertValue() + { + return certValue; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(certId); + v.add(new DERTaggedObject(0, certValue)); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequest.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequest.java new file mode 100644 index 0000000..987d4eb --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequest.java @@ -0,0 +1,91 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +/** + * PKCS10 Certification request object. + *
        + * CertificationRequest ::= SEQUENCE {
        + *   certificationRequestInfo  CertificationRequestInfo,
        + *   signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
        + *   signature                 BIT STRING
        + * }
        + * 
        + */ +public class CertificationRequest + extends ASN1Object +{ + protected CertificationRequestInfo reqInfo = null; + protected AlgorithmIdentifier sigAlgId = null; + protected DERBitString sigBits = null; + + public static CertificationRequest getInstance(Object o) + { + if (o instanceof CertificationRequest) + { + return (CertificationRequest)o; + } + + if (o != null) + { + return new CertificationRequest(ASN1Sequence.getInstance(o)); + } + + return null; + } + + protected CertificationRequest() + { + } + + public CertificationRequest( + CertificationRequestInfo requestInfo, + AlgorithmIdentifier algorithm, + DERBitString signature) + { + this.reqInfo = requestInfo; + this.sigAlgId = algorithm; + this.sigBits = signature; + } + + public CertificationRequest( + ASN1Sequence seq) + { + reqInfo = CertificationRequestInfo.getInstance(seq.getObjectAt(0)); + sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); + sigBits = (DERBitString)seq.getObjectAt(2); + } + + public CertificationRequestInfo getCertificationRequestInfo() + { + return reqInfo; + } + + public AlgorithmIdentifier getSignatureAlgorithm() + { + return sigAlgId; + } + + public DERBitString getSignature() + { + return sigBits; + } + + public ASN1Primitive toASN1Primitive() + { + // Construct the CertificateRequest + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(reqInfo); + v.add(sigAlgId); + v.add(sigBits); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java new file mode 100644 index 0000000..aac2bb7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/CertificationRequestInfo.java @@ -0,0 +1,148 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.asn1.x509.X509Name; + +/** + * PKCS10 CertificationRequestInfo object. + *
        + *  CertificationRequestInfo ::= SEQUENCE {
        + *   version             INTEGER { v1(0) } (v1,...),
        + *   subject             Name,
        + *   subjectPKInfo   SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
        + *   attributes          [0] Attributes{{ CRIAttributes }}
        + *  }
        + *
        + *  Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}
        + *
        + *  Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {
        + *    type    ATTRIBUTE.&id({IOSet}),
        + *    values  SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
        + *  }
        + * 
        + */ +public class CertificationRequestInfo + extends ASN1Object +{ + ASN1Integer version = new ASN1Integer(0); + X500Name subject; + SubjectPublicKeyInfo subjectPKInfo; + ASN1Set attributes = null; + + public static CertificationRequestInfo getInstance( + Object obj) + { + if (obj instanceof CertificationRequestInfo) + { + return (CertificationRequestInfo)obj; + } + else if (obj != null) + { + return new CertificationRequestInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public CertificationRequestInfo( + X500Name subject, + SubjectPublicKeyInfo pkInfo, + ASN1Set attributes) + { + this.subject = subject; + this.subjectPKInfo = pkInfo; + this.attributes = attributes; + + if ((subject == null) || (version == null) || (subjectPKInfo == null)) + { + throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); + } + } + + /** + * @deprecated use X500Name method. + */ + public CertificationRequestInfo( + X509Name subject, + SubjectPublicKeyInfo pkInfo, + ASN1Set attributes) + { + this.subject = X500Name.getInstance(subject.toASN1Primitive()); + this.subjectPKInfo = pkInfo; + this.attributes = attributes; + + if ((subject == null) || (version == null) || (subjectPKInfo == null)) + { + throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); + } + } + + public CertificationRequestInfo( + ASN1Sequence seq) + { + version = (ASN1Integer)seq.getObjectAt(0); + + subject = X500Name.getInstance(seq.getObjectAt(1)); + subjectPKInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(2)); + + // + // some CertificationRequestInfo objects seem to treat this field + // as optional. + // + if (seq.size() > 3) + { + DERTaggedObject tagobj = (DERTaggedObject)seq.getObjectAt(3); + attributes = ASN1Set.getInstance(tagobj, false); + } + + if ((subject == null) || (version == null) || (subjectPKInfo == null)) + { + throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); + } + } + + public ASN1Integer getVersion() + { + return version; + } + + public X500Name getSubject() + { + return subject; + } + + public SubjectPublicKeyInfo getSubjectPublicKeyInfo() + { + return subjectPKInfo; + } + + public ASN1Set getAttributes() + { + return attributes; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(version); + v.add(subject); + v.add(subjectPKInfo); + + if (attributes != null) + { + v.add(new DERTaggedObject(false, 0, attributes)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/ContentInfo.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/ContentInfo.java new file mode 100644 index 0000000..997389d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/ContentInfo.java @@ -0,0 +1,102 @@ +package org.bouncycastle.asn1.pkcs; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.BERSequence; +import org.bouncycastle.asn1.BERTaggedObject; +import org.bouncycastle.asn1.DLSequence; + +public class ContentInfo + extends ASN1Object + //implements PKCSObjectIdentifiers +{ + private ASN1ObjectIdentifier contentType; + private ASN1Encodable content; + private boolean isBer = true; + + public static ContentInfo getInstance( + Object obj) + { + if (obj instanceof ContentInfo) + { + return (ContentInfo)obj; + } + + if (obj != null) + { + return new ContentInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private ContentInfo( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + contentType = (ASN1ObjectIdentifier)e.nextElement(); + + if (e.hasMoreElements()) + { + content = ((ASN1TaggedObject)e.nextElement()).getObject(); + } + + isBer = seq instanceof BERSequence; + } + + public ContentInfo( + ASN1ObjectIdentifier contentType, + ASN1Encodable content) + { + this.contentType = contentType; + this.content = content; + } + + public ASN1ObjectIdentifier getContentType() + { + return contentType; + } + + public ASN1Encodable getContent() + { + return content; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * ContentInfo ::= SEQUENCE {
        +     *          contentType ContentType,
        +     *          content
        +     *          [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(contentType); + + if (content != null) + { + v.add(new BERTaggedObject(true, 0, content)); + } + + if (isBer) + { + return new BERSequence(v); + } + else + { + return new DLSequence(v); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/DHParameter.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/DHParameter.java new file mode 100644 index 0000000..95897fd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/DHParameter.java @@ -0,0 +1,104 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +public class DHParameter + extends ASN1Object +{ + ASN1Integer p, g, l; + + public DHParameter( + BigInteger p, + BigInteger g, + int l) + { + this.p = new ASN1Integer(p); + this.g = new ASN1Integer(g); + + if (l != 0) + { + this.l = new ASN1Integer(l); + } + else + { + this.l = null; + } + } + + public static DHParameter getInstance( + Object obj) + { + if (obj instanceof DHParameter) + { + return (DHParameter)obj; + } + + if (obj != null) + { + return new DHParameter(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private DHParameter( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + p = ASN1Integer.getInstance(e.nextElement()); + g = ASN1Integer.getInstance(e.nextElement()); + + if (e.hasMoreElements()) + { + l = (ASN1Integer)e.nextElement(); + } + else + { + l = null; + } + } + + public BigInteger getP() + { + return p.getPositiveValue(); + } + + public BigInteger getG() + { + return g.getPositiveValue(); + } + + public BigInteger getL() + { + if (l == null) + { + return null; + } + + return l.getPositiveValue(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(p); + v.add(g); + + if (this.getL() != null) + { + v.add(l); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedData.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedData.java new file mode 100644 index 0000000..e0f5efd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedData.java @@ -0,0 +1,115 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.BERSequence; +import org.bouncycastle.asn1.BERTaggedObject; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +/** + * The EncryptedData object. + *
        + *      EncryptedData ::= SEQUENCE {
        + *           version Version,
        + *           encryptedContentInfo EncryptedContentInfo
        + *      }
        + *
        + *
        + *      EncryptedContentInfo ::= SEQUENCE {
        + *          contentType ContentType,
        + *          contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
        + *          encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
        + *    }
        + *
        + *    EncryptedContent ::= OCTET STRING
        + * 
        + */ +public class EncryptedData + extends ASN1Object +{ + ASN1Sequence data; + ASN1ObjectIdentifier bagId; + ASN1Primitive bagValue; + + public static EncryptedData getInstance( + Object obj) + { + if (obj instanceof EncryptedData) + { + return (EncryptedData)obj; + } + + if (obj != null) + { + return new EncryptedData(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private EncryptedData( + ASN1Sequence seq) + { + int version = ((ASN1Integer)seq.getObjectAt(0)).getValue().intValue(); + + if (version != 0) + { + throw new IllegalArgumentException("sequence not version 0"); + } + + this.data = ASN1Sequence.getInstance(seq.getObjectAt(1)); + } + + public EncryptedData( + ASN1ObjectIdentifier contentType, + AlgorithmIdentifier encryptionAlgorithm, + ASN1Encodable content) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(contentType); + v.add(encryptionAlgorithm.toASN1Primitive()); + v.add(new BERTaggedObject(false, 0, content)); + + data = new BERSequence(v); + } + + public ASN1ObjectIdentifier getContentType() + { + return ASN1ObjectIdentifier.getInstance(data.getObjectAt(0)); + } + + public AlgorithmIdentifier getEncryptionAlgorithm() + { + return AlgorithmIdentifier.getInstance(data.getObjectAt(1)); + } + + public ASN1OctetString getContent() + { + if (data.size() == 3) + { + ASN1TaggedObject o = ASN1TaggedObject.getInstance(data.getObjectAt(2)); + + return ASN1OctetString.getInstance(o, false); + } + + return null; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(0)); + v.add(data); + + return new BERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java new file mode 100644 index 0000000..467cb57 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java @@ -0,0 +1,86 @@ +package org.bouncycastle.asn1.pkcs; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +public class EncryptedPrivateKeyInfo + extends ASN1Object +{ + private AlgorithmIdentifier algId; + private ASN1OctetString data; + + private EncryptedPrivateKeyInfo( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + algId = AlgorithmIdentifier.getInstance(e.nextElement()); + data = ASN1OctetString.getInstance(e.nextElement()); + } + + public EncryptedPrivateKeyInfo( + AlgorithmIdentifier algId, + byte[] encoding) + { + this.algId = algId; + this.data = new DEROctetString(encoding); + } + + public static EncryptedPrivateKeyInfo getInstance( + Object obj) + { + if (obj instanceof EncryptedData) + { + return (EncryptedPrivateKeyInfo)obj; + } + else if (obj != null) + { + return new EncryptedPrivateKeyInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public AlgorithmIdentifier getEncryptionAlgorithm() + { + return algId; + } + + public byte[] getEncryptedData() + { + return data.getOctets(); + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * EncryptedPrivateKeyInfo ::= SEQUENCE {
        +     *      encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
        +     *      encryptedData EncryptedData
        +     * }
        +     *
        +     * EncryptedData ::= OCTET STRING
        +     *
        +     * KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
        +     *          ... -- For local profiles
        +     * }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(algId); + v.add(data); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptionScheme.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptionScheme.java new file mode 100644 index 0000000..613c3f4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/EncryptionScheme.java @@ -0,0 +1,55 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +public class EncryptionScheme + extends AlgorithmIdentifier +{ + public EncryptionScheme( + ASN1ObjectIdentifier objectId, + ASN1Encodable parameters) + { + super(objectId, parameters); + } + + EncryptionScheme( + ASN1Sequence seq) + { + this((ASN1ObjectIdentifier)seq.getObjectAt(0), seq.getObjectAt(1)); + } + + public static final AlgorithmIdentifier getInstance(Object obj) + { + if (obj instanceof EncryptionScheme) + { + return (EncryptionScheme)obj; + } + else if (obj instanceof ASN1Sequence) + { + return new EncryptionScheme((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public ASN1Primitive getObject() + { + return (ASN1Primitive)getParameters(); + } + + public ASN1Primitive getASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(getObjectId()); + v.add(getParameters()); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java new file mode 100644 index 0000000..3914a24 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/IssuerAndSerialNumber.java @@ -0,0 +1,85 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x509.X509Name; + +public class IssuerAndSerialNumber + extends ASN1Object +{ + X500Name name; + ASN1Integer certSerialNumber; + + public static IssuerAndSerialNumber getInstance( + Object obj) + { + if (obj instanceof IssuerAndSerialNumber) + { + return (IssuerAndSerialNumber)obj; + } + else if (obj instanceof ASN1Sequence) + { + return new IssuerAndSerialNumber((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public IssuerAndSerialNumber( + ASN1Sequence seq) + { + this.name = X500Name.getInstance(seq.getObjectAt(0)); + this.certSerialNumber = (ASN1Integer)seq.getObjectAt(1); + } + + public IssuerAndSerialNumber( + X509Name name, + BigInteger certSerialNumber) + { + this.name = X500Name.getInstance(name.toASN1Primitive()); + this.certSerialNumber = new ASN1Integer(certSerialNumber); + } + + public IssuerAndSerialNumber( + X509Name name, + ASN1Integer certSerialNumber) + { + this.name = X500Name.getInstance(name.toASN1Primitive()); + this.certSerialNumber = certSerialNumber; + } + + public IssuerAndSerialNumber( + X500Name name, + BigInteger certSerialNumber) + { + this.name = name; + this.certSerialNumber = new ASN1Integer(certSerialNumber); + } + + public X500Name getName() + { + return name; + } + + public ASN1Integer getCertificateSerialNumber() + { + return certSerialNumber; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(name); + v.add(certSerialNumber); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java new file mode 100644 index 0000000..fef4f07 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/KeyDerivationFunc.java @@ -0,0 +1,23 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +public class KeyDerivationFunc + extends AlgorithmIdentifier +{ + KeyDerivationFunc( + ASN1Sequence seq) + { + super(seq); + } + + public KeyDerivationFunc( + ASN1ObjectIdentifier id, + ASN1Encodable params) + { + super(id, params); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/MacData.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/MacData.java new file mode 100644 index 0000000..515db28 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/MacData.java @@ -0,0 +1,106 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x509.DigestInfo; + +public class MacData + extends ASN1Object +{ + private static final BigInteger ONE = BigInteger.valueOf(1); + + DigestInfo digInfo; + byte[] salt; + BigInteger iterationCount; + + public static MacData getInstance( + Object obj) + { + if (obj instanceof MacData) + { + return (MacData)obj; + } + else if (obj != null) + { + return new MacData(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private MacData( + ASN1Sequence seq) + { + this.digInfo = DigestInfo.getInstance(seq.getObjectAt(0)); + + this.salt = ((ASN1OctetString)seq.getObjectAt(1)).getOctets(); + + if (seq.size() == 3) + { + this.iterationCount = ((ASN1Integer)seq.getObjectAt(2)).getValue(); + } + else + { + this.iterationCount = ONE; + } + } + + public MacData( + DigestInfo digInfo, + byte[] salt, + int iterationCount) + { + this.digInfo = digInfo; + this.salt = salt; + this.iterationCount = BigInteger.valueOf(iterationCount); + } + + public DigestInfo getMac() + { + return digInfo; + } + + public byte[] getSalt() + { + return salt; + } + + public BigInteger getIterationCount() + { + return iterationCount; + } + + /** + *
        +     * MacData ::= SEQUENCE {
        +     *     mac      DigestInfo,
        +     *     macSalt  OCTET STRING,
        +     *     iterations INTEGER DEFAULT 1
        +     *     -- Note: The default is for historic reasons and its use is deprecated. A
        +     *     -- higher value, like 1024 is recommended.
        +     * 
        + * @return the basic ASN1Primitive construction. + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(digInfo); + v.add(new DEROctetString(salt)); + + if (!iterationCount.equals(ONE)) + { + v.add(new ASN1Integer(iterationCount)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/PBEParameter.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBEParameter.java new file mode 100644 index 0000000..4e22d79 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBEParameter.java @@ -0,0 +1,73 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; + +public class PBEParameter + extends ASN1Object +{ + ASN1Integer iterations; + ASN1OctetString salt; + + public PBEParameter( + byte[] salt, + int iterations) + { + if (salt.length != 8) + { + throw new IllegalArgumentException("salt length must be 8"); + } + this.salt = new DEROctetString(salt); + this.iterations = new ASN1Integer(iterations); + } + + private PBEParameter( + ASN1Sequence seq) + { + salt = (ASN1OctetString)seq.getObjectAt(0); + iterations = (ASN1Integer)seq.getObjectAt(1); + } + + public static PBEParameter getInstance( + Object obj) + { + if (obj instanceof PBEParameter) + { + return (PBEParameter)obj; + } + else if (obj != null) + { + return new PBEParameter(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public BigInteger getIterationCount() + { + return iterations.getValue(); + } + + public byte[] getSalt() + { + return salt.getOctets(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(salt); + v.add(iterations); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java new file mode 100644 index 0000000..5e17b19 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Algorithms.java @@ -0,0 +1,77 @@ +package org.bouncycastle.asn1.pkcs; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +/** + * @deprecated - use AlgorithmIdentifier and PBES2Parameters + */ +public class PBES2Algorithms + extends AlgorithmIdentifier +{ + private ASN1ObjectIdentifier objectId; + private KeyDerivationFunc func; + private EncryptionScheme scheme; + + public PBES2Algorithms( + ASN1Sequence obj) + { + super(obj); + + Enumeration e = obj.getObjects(); + + objectId = (ASN1ObjectIdentifier)e.nextElement(); + + ASN1Sequence seq = (ASN1Sequence)e.nextElement(); + + e = seq.getObjects(); + + ASN1Sequence funcSeq = (ASN1Sequence)e.nextElement(); + + if (funcSeq.getObjectAt(0).equals(PKCSObjectIdentifiers.id_PBKDF2)) + { + func = new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, PBKDF2Params.getInstance(funcSeq.getObjectAt(1))); + } + else + { + func = new KeyDerivationFunc(funcSeq); + } + + scheme = new EncryptionScheme((ASN1Sequence)e.nextElement()); + } + + public ASN1ObjectIdentifier getObjectId() + { + return objectId; + } + + public KeyDerivationFunc getKeyDerivationFunc() + { + return func; + } + + public EncryptionScheme getEncryptionScheme() + { + return scheme; + } + + public ASN1Primitive getASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + ASN1EncodableVector subV = new ASN1EncodableVector(); + + v.add(objectId); + + subV.add(func); + subV.add(scheme); + v.add(new DERSequence(subV)); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Parameters.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Parameters.java new file mode 100644 index 0000000..b3b008f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBES2Parameters.java @@ -0,0 +1,71 @@ +package org.bouncycastle.asn1.pkcs; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +public class PBES2Parameters + extends ASN1Object +{ + private KeyDerivationFunc func; + private EncryptionScheme scheme; + + public static PBES2Parameters getInstance( + Object obj) + { + if (obj== null || obj instanceof PBES2Parameters) + { + return (PBES2Parameters)obj; + } + + if (obj instanceof ASN1Sequence) + { + return new PBES2Parameters((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public PBES2Parameters( + ASN1Sequence obj) + { + Enumeration e = obj.getObjects(); + ASN1Sequence funcSeq = ASN1Sequence.getInstance(((ASN1Encodable)e.nextElement()).toASN1Primitive()); + + if (funcSeq.getObjectAt(0).equals(PKCSObjectIdentifiers.id_PBKDF2)) + { + func = new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, PBKDF2Params.getInstance(funcSeq.getObjectAt(1))); + } + else + { + func = new KeyDerivationFunc(funcSeq); + } + + scheme = (EncryptionScheme)EncryptionScheme.getInstance(e.nextElement()); + } + + public KeyDerivationFunc getKeyDerivationFunc() + { + return func; + } + + public EncryptionScheme getEncryptionScheme() + { + return scheme; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(func); + v.add(scheme); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/PBKDF2Params.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBKDF2Params.java new file mode 100644 index 0000000..01225e4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/PBKDF2Params.java @@ -0,0 +1,108 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; + +public class PBKDF2Params + extends ASN1Object +{ + private ASN1OctetString octStr; + private ASN1Integer iterationCount; + private ASN1Integer keyLength; + + public static PBKDF2Params getInstance( + Object obj) + { + if (obj instanceof PBKDF2Params) + { + return (PBKDF2Params)obj; + } + + if (obj != null) + { + return new PBKDF2Params(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public PBKDF2Params( + byte[] salt, + int iterationCount) + { + this.octStr = new DEROctetString(salt); + this.iterationCount = new ASN1Integer(iterationCount); + } + + public PBKDF2Params( + byte[] salt, + int iterationCount, + int keyLength) + { + this(salt, iterationCount); + + this.keyLength = new ASN1Integer(keyLength); + } + + private PBKDF2Params( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + octStr = (ASN1OctetString)e.nextElement(); + iterationCount = (ASN1Integer)e.nextElement(); + + if (e.hasMoreElements()) + { + keyLength = (ASN1Integer)e.nextElement(); + } + else + { + keyLength = null; + } + } + + public byte[] getSalt() + { + return octStr.getOctets(); + } + + public BigInteger getIterationCount() + { + return iterationCount.getValue(); + } + + public BigInteger getKeyLength() + { + if (keyLength != null) + { + return keyLength.getValue(); + } + + return null; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(octStr); + v.add(iterationCount); + + if (keyLength != null) + { + v.add(keyLength); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java new file mode 100644 index 0000000..fc1538d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/PKCS12PBEParams.java @@ -0,0 +1,69 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; + +public class PKCS12PBEParams + extends ASN1Object +{ + ASN1Integer iterations; + ASN1OctetString iv; + + public PKCS12PBEParams( + byte[] salt, + int iterations) + { + this.iv = new DEROctetString(salt); + this.iterations = new ASN1Integer(iterations); + } + + private PKCS12PBEParams( + ASN1Sequence seq) + { + iv = (ASN1OctetString)seq.getObjectAt(0); + iterations = ASN1Integer.getInstance(seq.getObjectAt(1)); + } + + public static PKCS12PBEParams getInstance( + Object obj) + { + if (obj instanceof PKCS12PBEParams) + { + return (PKCS12PBEParams)obj; + } + else if (obj != null) + { + return new PKCS12PBEParams(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public BigInteger getIterations() + { + return iterations.getValue(); + } + + public byte[] getIV() + { + return iv.getOctets(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(iv); + v.add(iterations); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java new file mode 100644 index 0000000..6f098f2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java @@ -0,0 +1,257 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +public class PKCSObjectIdentifiers +{ + // + // pkcs-1 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } + // + static final ASN1ObjectIdentifier pkcs_1 = new ASN1ObjectIdentifier("1.2.840.113549.1.1"); + public static final ASN1ObjectIdentifier rsaEncryption = pkcs_1.branch("1"); + static final ASN1ObjectIdentifier md2WithRSAEncryption = pkcs_1.branch("2"); + static final ASN1ObjectIdentifier md4WithRSAEncryption = pkcs_1.branch("3"); + static final ASN1ObjectIdentifier md5WithRSAEncryption = pkcs_1.branch("4"); + static final ASN1ObjectIdentifier sha1WithRSAEncryption = pkcs_1.branch("5"); + static final ASN1ObjectIdentifier srsaOAEPEncryptionSET = pkcs_1.branch("6"); + static final ASN1ObjectIdentifier id_RSAES_OAEP = pkcs_1.branch("7"); + static final ASN1ObjectIdentifier id_mgf1 = pkcs_1.branch("8"); + static final ASN1ObjectIdentifier id_pSpecified = pkcs_1.branch("9"); + static final ASN1ObjectIdentifier id_RSASSA_PSS = pkcs_1.branch("10"); + static final ASN1ObjectIdentifier sha256WithRSAEncryption = pkcs_1.branch("11"); + static final ASN1ObjectIdentifier sha384WithRSAEncryption = pkcs_1.branch("12"); + static final ASN1ObjectIdentifier sha512WithRSAEncryption = pkcs_1.branch("13"); + static final ASN1ObjectIdentifier sha224WithRSAEncryption = pkcs_1.branch("14"); + + // + // pkcs-3 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 3 } + // + static final ASN1ObjectIdentifier pkcs_3 = new ASN1ObjectIdentifier("1.2.840.113549.1.3"); + public static final ASN1ObjectIdentifier dhKeyAgreement = pkcs_3.branch("1"); + + // + // pkcs-5 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 5 } + // + static final ASN1ObjectIdentifier pkcs_5 = new ASN1ObjectIdentifier("1.2.840.113549.1.5"); + + static final ASN1ObjectIdentifier pbeWithMD2AndDES_CBC = pkcs_5.branch("1"); + static final ASN1ObjectIdentifier pbeWithMD2AndRC2_CBC = pkcs_5.branch("4"); + static final ASN1ObjectIdentifier pbeWithMD5AndDES_CBC = pkcs_5.branch("3"); + static final ASN1ObjectIdentifier pbeWithMD5AndRC2_CBC = pkcs_5.branch("6"); + static final ASN1ObjectIdentifier pbeWithSHA1AndDES_CBC = pkcs_5.branch("10"); + static final ASN1ObjectIdentifier pbeWithSHA1AndRC2_CBC = pkcs_5.branch("11"); + + static final ASN1ObjectIdentifier id_PBES2 = pkcs_5.branch("13"); + + static final ASN1ObjectIdentifier id_PBKDF2 = pkcs_5.branch("12"); + + // + // encryptionAlgorithm OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) 3 } + // + static final ASN1ObjectIdentifier encryptionAlgorithm = new ASN1ObjectIdentifier("1.2.840.113549.3"); + + public static final ASN1ObjectIdentifier des_EDE3_CBC = encryptionAlgorithm.branch("7"); + public static final ASN1ObjectIdentifier RC2_CBC = encryptionAlgorithm.branch("2"); + + // + // object identifiers for digests + // + static final ASN1ObjectIdentifier digestAlgorithm = new ASN1ObjectIdentifier("1.2.840.113549.2"); + // + // md2 OBJECT IDENTIFIER ::= + // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 2} + // + public static final ASN1ObjectIdentifier md2 = digestAlgorithm.branch("2"); + + // + // md4 OBJECT IDENTIFIER ::= + // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 4} + // + public static final ASN1ObjectIdentifier md4 = digestAlgorithm.branch("4"); + + // + // md5 OBJECT IDENTIFIER ::= + // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5} + // + public static final ASN1ObjectIdentifier md5 = digestAlgorithm.branch("5"); + + static final ASN1ObjectIdentifier id_hmacWithSHA1 = digestAlgorithm.branch("7"); + static final ASN1ObjectIdentifier id_hmacWithSHA224 = digestAlgorithm.branch("8"); + static final ASN1ObjectIdentifier id_hmacWithSHA256 = digestAlgorithm.branch("9"); + static final ASN1ObjectIdentifier id_hmacWithSHA384 = digestAlgorithm.branch("10"); + static final ASN1ObjectIdentifier id_hmacWithSHA512 = digestAlgorithm.branch("11"); + + // + // pkcs-7 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 7 } + // + public static final String pkcs_7 = "1.2.840.113549.1.7"; + public static final ASN1ObjectIdentifier data = new ASN1ObjectIdentifier(pkcs_7 + ".1"); + public static final ASN1ObjectIdentifier signedData = new ASN1ObjectIdentifier(pkcs_7 + ".2"); + public static final ASN1ObjectIdentifier envelopedData = new ASN1ObjectIdentifier(pkcs_7 + ".3"); + public static final ASN1ObjectIdentifier signedAndEnvelopedData = new ASN1ObjectIdentifier(pkcs_7 + ".4"); + public static final ASN1ObjectIdentifier digestedData = new ASN1ObjectIdentifier(pkcs_7 + ".5"); + public static final ASN1ObjectIdentifier encryptedData = new ASN1ObjectIdentifier(pkcs_7 + ".6"); + + // + // pkcs-9 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } + // + static final ASN1ObjectIdentifier pkcs_9 = new ASN1ObjectIdentifier("1.2.840.113549.1.9"); + + public static final ASN1ObjectIdentifier pkcs_9_at_emailAddress = pkcs_9.branch("1"); + public static final ASN1ObjectIdentifier pkcs_9_at_unstructuredName = pkcs_9.branch("2"); + public static final ASN1ObjectIdentifier pkcs_9_at_contentType = pkcs_9.branch("3"); + public static final ASN1ObjectIdentifier pkcs_9_at_messageDigest = pkcs_9.branch("4"); + public static final ASN1ObjectIdentifier pkcs_9_at_signingTime = pkcs_9.branch("5"); + public static final ASN1ObjectIdentifier pkcs_9_at_counterSignature = pkcs_9.branch("6"); + public static final ASN1ObjectIdentifier pkcs_9_at_challengePassword = pkcs_9.branch("7"); + public static final ASN1ObjectIdentifier pkcs_9_at_unstructuredAddress = pkcs_9.branch("8"); + public static final ASN1ObjectIdentifier pkcs_9_at_extendedCertificateAttributes = pkcs_9.branch("9"); + + static final ASN1ObjectIdentifier pkcs_9_at_signingDescription = pkcs_9.branch("13"); + static final ASN1ObjectIdentifier pkcs_9_at_extensionRequest = pkcs_9.branch("14"); + public static final ASN1ObjectIdentifier pkcs_9_at_smimeCapabilities = pkcs_9.branch("15"); + + static final ASN1ObjectIdentifier pkcs_9_at_friendlyName = pkcs_9.branch("20"); + static final ASN1ObjectIdentifier pkcs_9_at_localKeyId = pkcs_9.branch("21"); + + /** @deprecated use x509Certificate instead */ + static final ASN1ObjectIdentifier x509certType = pkcs_9.branch("22.1"); + + static final ASN1ObjectIdentifier certTypes = pkcs_9.branch("22"); + static final ASN1ObjectIdentifier x509Certificate = certTypes.branch("1"); + static final ASN1ObjectIdentifier sdsiCertificate = certTypes.branch("2"); + + static final ASN1ObjectIdentifier crlTypes = pkcs_9.branch("23"); + static final ASN1ObjectIdentifier x509Crl = crlTypes.branch("1"); + + static final ASN1ObjectIdentifier id_alg_PWRI_KEK = pkcs_9.branch("16.3.9"); + + // + // SMIME capability sub oids. + // + public static final ASN1ObjectIdentifier preferSignedData = pkcs_9.branch("15.1"); + public static final ASN1ObjectIdentifier canNotDecryptAny = pkcs_9.branch("15.2"); + public static final ASN1ObjectIdentifier sMIMECapabilitiesVersions = pkcs_9.branch("15.3"); + + // + // id-ct OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1)} + // + public static final ASN1ObjectIdentifier id_ct = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.1"); + + public static final ASN1ObjectIdentifier id_ct_authData = id_ct.branch("2"); + public static final ASN1ObjectIdentifier id_ct_TSTInfo = id_ct.branch("4"); + public static final ASN1ObjectIdentifier id_ct_compressedData = id_ct.branch("9"); + public static final ASN1ObjectIdentifier id_ct_authEnvelopedData = id_ct.branch("23"); + public static final ASN1ObjectIdentifier id_ct_timestampedData = id_ct.branch("31"); + + // + // id-cti OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) cti(6)} + // + static final ASN1ObjectIdentifier id_cti = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.6"); + + public static final ASN1ObjectIdentifier id_cti_ets_proofOfOrigin = id_cti.branch("1"); + public static final ASN1ObjectIdentifier id_cti_ets_proofOfReceipt = id_cti.branch("2"); + public static final ASN1ObjectIdentifier id_cti_ets_proofOfDelivery = id_cti.branch("3"); + public static final ASN1ObjectIdentifier id_cti_ets_proofOfSender = id_cti.branch("4"); + public static final ASN1ObjectIdentifier id_cti_ets_proofOfApproval = id_cti.branch("5"); + public static final ASN1ObjectIdentifier id_cti_ets_proofOfCreation = id_cti.branch("6"); + + // + // id-aa OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) attributes(2)} + // + public static final ASN1ObjectIdentifier id_aa = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.2"); + + + static final ASN1ObjectIdentifier id_aa_receiptRequest = id_aa.branch("1"); + + public static final ASN1ObjectIdentifier id_aa_contentHint = id_aa.branch("4"); // See RFC 2634 + static final ASN1ObjectIdentifier id_aa_msgSigDigest = id_aa.branch("5"); + static final ASN1ObjectIdentifier id_aa_contentReference = id_aa.branch("10"); + /* + * id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} + * + */ + public static final ASN1ObjectIdentifier id_aa_encrypKeyPref = id_aa.branch("11"); + static final ASN1ObjectIdentifier id_aa_signingCertificate = id_aa.branch("12"); + static final ASN1ObjectIdentifier id_aa_signingCertificateV2 = id_aa.branch("47"); + + static final ASN1ObjectIdentifier id_aa_contentIdentifier = id_aa.branch("7"); // See RFC 2634 + + /* + * RFC 3126 + */ + static final ASN1ObjectIdentifier id_aa_signatureTimeStampToken = id_aa.branch("14"); + + public static final ASN1ObjectIdentifier id_aa_ets_sigPolicyId = id_aa.branch("15"); + public static final ASN1ObjectIdentifier id_aa_ets_commitmentType = id_aa.branch("16"); + public static final ASN1ObjectIdentifier id_aa_ets_signerLocation = id_aa.branch("17"); + public static final ASN1ObjectIdentifier id_aa_ets_signerAttr = id_aa.branch("18"); + public static final ASN1ObjectIdentifier id_aa_ets_otherSigCert = id_aa.branch("19"); + public static final ASN1ObjectIdentifier id_aa_ets_contentTimestamp = id_aa.branch("20"); + public static final ASN1ObjectIdentifier id_aa_ets_certificateRefs = id_aa.branch("21"); + public static final ASN1ObjectIdentifier id_aa_ets_revocationRefs = id_aa.branch("22"); + public static final ASN1ObjectIdentifier id_aa_ets_certValues = id_aa.branch("23"); + public static final ASN1ObjectIdentifier id_aa_ets_revocationValues = id_aa.branch("24"); + public static final ASN1ObjectIdentifier id_aa_ets_escTimeStamp = id_aa.branch("25"); + public static final ASN1ObjectIdentifier id_aa_ets_certCRLTimestamp = id_aa.branch("26"); + public static final ASN1ObjectIdentifier id_aa_ets_archiveTimestamp = id_aa.branch("27"); + + /** @deprecated use id_aa_ets_sigPolicyId instead */ + static final ASN1ObjectIdentifier id_aa_sigPolicyId = id_aa_ets_sigPolicyId; + /** @deprecated use id_aa_ets_commitmentType instead */ + static final ASN1ObjectIdentifier id_aa_commitmentType = id_aa_ets_commitmentType; + /** @deprecated use id_aa_ets_signerLocation instead */ + static final ASN1ObjectIdentifier id_aa_signerLocation = id_aa_ets_signerLocation; + /** @deprecated use id_aa_ets_otherSigCert instead */ + static final ASN1ObjectIdentifier id_aa_otherSigCert = id_aa_ets_otherSigCert; + + // + // id-spq OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) + // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-spq(5)} + // + static final String id_spq = "1.2.840.113549.1.9.16.5"; + + static final ASN1ObjectIdentifier id_spq_ets_uri = new ASN1ObjectIdentifier(id_spq + ".1"); + static final ASN1ObjectIdentifier id_spq_ets_unotice = new ASN1ObjectIdentifier(id_spq + ".2"); + + // + // pkcs-12 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 12 } + // + static final ASN1ObjectIdentifier pkcs_12 = new ASN1ObjectIdentifier("1.2.840.113549.1.12"); + static final ASN1ObjectIdentifier bagtypes = pkcs_12.branch("10.1"); + + static final ASN1ObjectIdentifier keyBag = bagtypes.branch("1"); + static final ASN1ObjectIdentifier pkcs8ShroudedKeyBag = bagtypes.branch("2"); + static final ASN1ObjectIdentifier certBag = bagtypes.branch("3"); + static final ASN1ObjectIdentifier crlBag = bagtypes.branch("4"); + static final ASN1ObjectIdentifier secretBag = bagtypes.branch("5"); + static final ASN1ObjectIdentifier safeContentsBag = bagtypes.branch("6"); + + static final ASN1ObjectIdentifier pkcs_12PbeIds = pkcs_12.branch("1"); + + static final ASN1ObjectIdentifier pbeWithSHAAnd128BitRC4 = pkcs_12PbeIds.branch("1"); + static final ASN1ObjectIdentifier pbeWithSHAAnd40BitRC4 = pkcs_12PbeIds.branch("2"); + static final ASN1ObjectIdentifier pbeWithSHAAnd3_KeyTripleDES_CBC = pkcs_12PbeIds.branch("3"); + static final ASN1ObjectIdentifier pbeWithSHAAnd2_KeyTripleDES_CBC = pkcs_12PbeIds.branch("4"); + static final ASN1ObjectIdentifier pbeWithSHAAnd128BitRC2_CBC = pkcs_12PbeIds.branch("5"); + static final ASN1ObjectIdentifier pbeWithSHAAnd40BitRC2_CBC = pkcs_12PbeIds.branch("6"); + + /** + * @deprecated use pbeWithSHAAnd40BitRC2_CBC + */ + static final ASN1ObjectIdentifier pbewithSHAAnd40BitRC2_CBC = pkcs_12PbeIds.branch("6"); + + static final ASN1ObjectIdentifier id_alg_CMS3DESwrap = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.3.6"); + static final ASN1ObjectIdentifier id_alg_CMSRC2wrap = new ASN1ObjectIdentifier("1.2.840.113549.1.9.16.3.7"); +} + diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/Pfx.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/Pfx.java new file mode 100644 index 0000000..0339fcc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/Pfx.java @@ -0,0 +1,87 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.BERSequence; + +/** + * the infamous Pfx from PKCS12 + */ +public class Pfx + extends ASN1Object + //implements PKCSObjectIdentifiers +{ + private ContentInfo contentInfo; + private MacData macData = null; + + private Pfx( + ASN1Sequence seq) + { + BigInteger version = ((ASN1Integer)seq.getObjectAt(0)).getValue(); + if (version.intValue() != 3) + { + throw new IllegalArgumentException("wrong version for PFX PDU"); + } + + contentInfo = ContentInfo.getInstance(seq.getObjectAt(1)); + + if (seq.size() == 3) + { + macData = MacData.getInstance(seq.getObjectAt(2)); + } + } + + public static Pfx getInstance( + Object obj) + { + if (obj instanceof Pfx) + { + return (Pfx)obj; + } + + if (obj != null) + { + return new Pfx(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public Pfx( + ContentInfo contentInfo, + MacData macData) + { + this.contentInfo = contentInfo; + this.macData = macData; + } + + public ContentInfo getAuthSafe() + { + return contentInfo; + } + + public MacData getMacData() + { + return macData; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(3)); + v.add(contentInfo); + + if (macData != null) + { + v.add(macData); + } + + return new BERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java new file mode 100644 index 0000000..a45a9b8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java @@ -0,0 +1,160 @@ +package org.bouncycastle.asn1.pkcs; + +import java.io.IOException; +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +public class PrivateKeyInfo + extends ASN1Object +{ + private ASN1OctetString privKey; + private AlgorithmIdentifier algId; + private ASN1Set attributes; + + public static PrivateKeyInfo getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static PrivateKeyInfo getInstance( + Object obj) + { + if (obj instanceof PrivateKeyInfo) + { + return (PrivateKeyInfo)obj; + } + else if (obj != null) + { + return new PrivateKeyInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public PrivateKeyInfo( + AlgorithmIdentifier algId, + ASN1Encodable privateKey) + throws IOException + { + this(algId, privateKey, null); + } + + public PrivateKeyInfo( + AlgorithmIdentifier algId, + ASN1Encodable privateKey, + ASN1Set attributes) + throws IOException + { + this.privKey = new DEROctetString(privateKey.toASN1Primitive().getEncoded(ASN1Encoding.DER)); + this.algId = algId; + this.attributes = attributes; + } + + public PrivateKeyInfo( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + BigInteger version = ((ASN1Integer)e.nextElement()).getValue(); + if (version.intValue() != 0) + { + throw new IllegalArgumentException("wrong version for private key info"); + } + + algId = AlgorithmIdentifier.getInstance(e.nextElement()); + privKey = ASN1OctetString.getInstance(e.nextElement()); + + if (e.hasMoreElements()) + { + attributes = ASN1Set.getInstance((ASN1TaggedObject)e.nextElement(), false); + } + } + + public AlgorithmIdentifier getPrivateKeyAlgorithm() + { + return algId; + } + /** + * @deprecated use getPrivateKeyAlgorithm() + */ + public AlgorithmIdentifier getAlgorithmId() + { + return algId; + } + + public ASN1Encodable parsePrivateKey() + throws IOException + { + return ASN1Primitive.fromByteArray(privKey.getOctets()); + } + + /** + * @deprecated use parsePrivateKey() + */ + public ASN1Primitive getPrivateKey() + { + try + { + return parsePrivateKey().toASN1Primitive(); + } + catch (IOException e) + { + throw new IllegalStateException("unable to parse private key"); + } + } + + public ASN1Set getAttributes() + { + return attributes; + } + + /** + * write out an RSA private key with its associated information + * as described in PKCS8. + *
        +     *      PrivateKeyInfo ::= SEQUENCE {
        +     *                              version Version,
        +     *                              privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
        +     *                              privateKey PrivateKey,
        +     *                              attributes [0] IMPLICIT Attributes OPTIONAL 
        +     *                          }
        +     *      Version ::= INTEGER {v1(0)} (v1,...)
        +     *
        +     *      PrivateKey ::= OCTET STRING
        +     *
        +     *      Attributes ::= SET OF Attribute
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(0)); + v.add(algId); + v.add(privKey); + + if (attributes != null) + { + v.add(new DERTaggedObject(false, 0, attributes)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java new file mode 100644 index 0000000..4886a4b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/RC2CBCParameter.java @@ -0,0 +1,93 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; + +public class RC2CBCParameter + extends ASN1Object +{ + ASN1Integer version; + ASN1OctetString iv; + + public static RC2CBCParameter getInstance( + Object o) + { + if (o instanceof RC2CBCParameter) + { + return (RC2CBCParameter)o; + } + if (o != null) + { + return new RC2CBCParameter(ASN1Sequence.getInstance(o)); + } + + return null; + } + + public RC2CBCParameter( + byte[] iv) + { + this.version = null; + this.iv = new DEROctetString(iv); + } + + public RC2CBCParameter( + int parameterVersion, + byte[] iv) + { + this.version = new ASN1Integer(parameterVersion); + this.iv = new DEROctetString(iv); + } + + private RC2CBCParameter( + ASN1Sequence seq) + { + if (seq.size() == 1) + { + version = null; + iv = (ASN1OctetString)seq.getObjectAt(0); + } + else + { + version = (ASN1Integer)seq.getObjectAt(0); + iv = (ASN1OctetString)seq.getObjectAt(1); + } + } + + public BigInteger getRC2ParameterVersion() + { + if (version == null) + { + return null; + } + + return version.getValue(); + } + + public byte[] getIV() + { + return iv.getOctets(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (version != null) + { + v.add(version); + } + + v.add(iv); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java new file mode 100644 index 0000000..46115b9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java @@ -0,0 +1,151 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERNull; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +public class RSAESOAEPparams + extends ASN1Object +{ + private AlgorithmIdentifier hashAlgorithm; + private AlgorithmIdentifier maskGenAlgorithm; + private AlgorithmIdentifier pSourceAlgorithm; + + public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); + public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM); + public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0])); + + public static RSAESOAEPparams getInstance( + Object obj) + { + if (obj instanceof RSAESOAEPparams) + { + return (RSAESOAEPparams)obj; + } + else if (obj != null) + { + return new RSAESOAEPparams(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * The default version + */ + public RSAESOAEPparams() + { + hashAlgorithm = DEFAULT_HASH_ALGORITHM; + maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; + pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM; + } + + public RSAESOAEPparams( + AlgorithmIdentifier hashAlgorithm, + AlgorithmIdentifier maskGenAlgorithm, + AlgorithmIdentifier pSourceAlgorithm) + { + this.hashAlgorithm = hashAlgorithm; + this.maskGenAlgorithm = maskGenAlgorithm; + this.pSourceAlgorithm = pSourceAlgorithm; + } + + public RSAESOAEPparams( + ASN1Sequence seq) + { + hashAlgorithm = DEFAULT_HASH_ALGORITHM; + maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; + pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM; + + for (int i = 0; i != seq.size(); i++) + { + ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(i); + + switch (o.getTagNo()) + { + case 0: + hashAlgorithm = AlgorithmIdentifier.getInstance(o, true); + break; + case 1: + maskGenAlgorithm = AlgorithmIdentifier.getInstance(o, true); + break; + case 2: + pSourceAlgorithm = AlgorithmIdentifier.getInstance(o, true); + break; + default: + throw new IllegalArgumentException("unknown tag"); + } + } + } + + public AlgorithmIdentifier getHashAlgorithm() + { + return hashAlgorithm; + } + + public AlgorithmIdentifier getMaskGenAlgorithm() + { + return maskGenAlgorithm; + } + + public AlgorithmIdentifier getPSourceAlgorithm() + { + return pSourceAlgorithm; + } + + /** + *
        +     *  RSAES-OAEP-params ::= SEQUENCE {
        +     *     hashAlgorithm      [0] OAEP-PSSDigestAlgorithms     DEFAULT sha1,
        +     *     maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
        +     *     pSourceAlgorithm   [2] PKCS1PSourceAlgorithms  DEFAULT pSpecifiedEmpty
        +     *   }
        +     *  
        +     *   OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
        +     *     { OID id-sha1 PARAMETERS NULL   }|
        +     *     { OID id-sha256 PARAMETERS NULL }|
        +     *     { OID id-sha384 PARAMETERS NULL }|
        +     *     { OID id-sha512 PARAMETERS NULL },
        +     *     ...  -- Allows for future expansion --
        +     *   }
        +     *   PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
        +     *     { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
        +     *    ...  -- Allows for future expansion --
        +     *   }
        +     *   PKCS1PSourceAlgorithms    ALGORITHM-IDENTIFIER ::= {
        +     *     { OID id-pSpecified PARAMETERS OCTET STRING },
        +     *     ...  -- Allows for future expansion --
        +     *  }
        +     * 
        + * @return the asn1 primitive representing the parameters. + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (!hashAlgorithm.equals(DEFAULT_HASH_ALGORITHM)) + { + v.add(new DERTaggedObject(true, 0, hashAlgorithm)); + } + + if (!maskGenAlgorithm.equals(DEFAULT_MASK_GEN_FUNCTION)) + { + v.add(new DERTaggedObject(true, 1, maskGenAlgorithm)); + } + + if (!pSourceAlgorithm.equals(DEFAULT_P_SOURCE_ALGORITHM)) + { + v.add(new DERTaggedObject(true, 2, pSourceAlgorithm)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java new file mode 100644 index 0000000..41c75d0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKey.java @@ -0,0 +1,187 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class RSAPrivateKey + extends ASN1Object +{ + private BigInteger version; + private BigInteger modulus; + private BigInteger publicExponent; + private BigInteger privateExponent; + private BigInteger prime1; + private BigInteger prime2; + private BigInteger exponent1; + private BigInteger exponent2; + private BigInteger coefficient; + private ASN1Sequence otherPrimeInfos = null; + + public static RSAPrivateKey getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static RSAPrivateKey getInstance( + Object obj) + { + if (obj instanceof RSAPrivateKey) + { + return (RSAPrivateKey)obj; + } + + if (obj != null) + { + return new RSAPrivateKey(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public RSAPrivateKey( + BigInteger modulus, + BigInteger publicExponent, + BigInteger privateExponent, + BigInteger prime1, + BigInteger prime2, + BigInteger exponent1, + BigInteger exponent2, + BigInteger coefficient) + { + this.version = BigInteger.valueOf(0); + this.modulus = modulus; + this.publicExponent = publicExponent; + this.privateExponent = privateExponent; + this.prime1 = prime1; + this.prime2 = prime2; + this.exponent1 = exponent1; + this.exponent2 = exponent2; + this.coefficient = coefficient; + } + + private RSAPrivateKey( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + BigInteger v = ((ASN1Integer)e.nextElement()).getValue(); + if (v.intValue() != 0 && v.intValue() != 1) + { + throw new IllegalArgumentException("wrong version for RSA private key"); + } + + version = v; + modulus = ((ASN1Integer)e.nextElement()).getValue(); + publicExponent = ((ASN1Integer)e.nextElement()).getValue(); + privateExponent = ((ASN1Integer)e.nextElement()).getValue(); + prime1 = ((ASN1Integer)e.nextElement()).getValue(); + prime2 = ((ASN1Integer)e.nextElement()).getValue(); + exponent1 = ((ASN1Integer)e.nextElement()).getValue(); + exponent2 = ((ASN1Integer)e.nextElement()).getValue(); + coefficient = ((ASN1Integer)e.nextElement()).getValue(); + + if (e.hasMoreElements()) + { + otherPrimeInfos = (ASN1Sequence)e.nextElement(); + } + } + + public BigInteger getVersion() + { + return version; + } + + public BigInteger getModulus() + { + return modulus; + } + + public BigInteger getPublicExponent() + { + return publicExponent; + } + + public BigInteger getPrivateExponent() + { + return privateExponent; + } + + public BigInteger getPrime1() + { + return prime1; + } + + public BigInteger getPrime2() + { + return prime2; + } + + public BigInteger getExponent1() + { + return exponent1; + } + + public BigInteger getExponent2() + { + return exponent2; + } + + public BigInteger getCoefficient() + { + return coefficient; + } + + /** + * This outputs the key in PKCS1v2 format. + *
        +     *      RSAPrivateKey ::= SEQUENCE {
        +     *                          version Version,
        +     *                          modulus INTEGER, -- n
        +     *                          publicExponent INTEGER, -- e
        +     *                          privateExponent INTEGER, -- d
        +     *                          prime1 INTEGER, -- p
        +     *                          prime2 INTEGER, -- q
        +     *                          exponent1 INTEGER, -- d mod (p-1)
        +     *                          exponent2 INTEGER, -- d mod (q-1)
        +     *                          coefficient INTEGER, -- (inverse of q) mod p
        +     *                          otherPrimeInfos OtherPrimeInfos OPTIONAL
        +     *                      }
        +     *
        +     *      Version ::= INTEGER { two-prime(0), multi(1) }
        +     *        (CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})
        +     * 
        + *

        + * This routine is written to output PKCS1 version 2.1, private keys. + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(version)); // version + v.add(new ASN1Integer(getModulus())); + v.add(new ASN1Integer(getPublicExponent())); + v.add(new ASN1Integer(getPrivateExponent())); + v.add(new ASN1Integer(getPrime1())); + v.add(new ASN1Integer(getPrime2())); + v.add(new ASN1Integer(getExponent1())); + v.add(new ASN1Integer(getExponent2())); + v.add(new ASN1Integer(getCoefficient())); + + if (otherPrimeInfos != null) + { + v.add(otherPrimeInfos); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java new file mode 100644 index 0000000..a29e9d3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPrivateKeyStructure.java @@ -0,0 +1,189 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +/** + * @deprecated use RSAPrivateKey + */ +public class RSAPrivateKeyStructure + extends ASN1Object +{ + private int version; + private BigInteger modulus; + private BigInteger publicExponent; + private BigInteger privateExponent; + private BigInteger prime1; + private BigInteger prime2; + private BigInteger exponent1; + private BigInteger exponent2; + private BigInteger coefficient; + private ASN1Sequence otherPrimeInfos = null; + + public static RSAPrivateKeyStructure getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static RSAPrivateKeyStructure getInstance( + Object obj) + { + if (obj instanceof RSAPrivateKeyStructure) + { + return (RSAPrivateKeyStructure)obj; + } + else if (obj instanceof ASN1Sequence) + { + return new RSAPrivateKeyStructure((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public RSAPrivateKeyStructure( + BigInteger modulus, + BigInteger publicExponent, + BigInteger privateExponent, + BigInteger prime1, + BigInteger prime2, + BigInteger exponent1, + BigInteger exponent2, + BigInteger coefficient) + { + this.version = 0; + this.modulus = modulus; + this.publicExponent = publicExponent; + this.privateExponent = privateExponent; + this.prime1 = prime1; + this.prime2 = prime2; + this.exponent1 = exponent1; + this.exponent2 = exponent2; + this.coefficient = coefficient; + } + + public RSAPrivateKeyStructure( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + BigInteger v = ((ASN1Integer)e.nextElement()).getValue(); + if (v.intValue() != 0 && v.intValue() != 1) + { + throw new IllegalArgumentException("wrong version for RSA private key"); + } + + version = v.intValue(); + modulus = ((ASN1Integer)e.nextElement()).getValue(); + publicExponent = ((ASN1Integer)e.nextElement()).getValue(); + privateExponent = ((ASN1Integer)e.nextElement()).getValue(); + prime1 = ((ASN1Integer)e.nextElement()).getValue(); + prime2 = ((ASN1Integer)e.nextElement()).getValue(); + exponent1 = ((ASN1Integer)e.nextElement()).getValue(); + exponent2 = ((ASN1Integer)e.nextElement()).getValue(); + coefficient = ((ASN1Integer)e.nextElement()).getValue(); + + if (e.hasMoreElements()) + { + otherPrimeInfos = (ASN1Sequence)e.nextElement(); + } + } + + public int getVersion() + { + return version; + } + + public BigInteger getModulus() + { + return modulus; + } + + public BigInteger getPublicExponent() + { + return publicExponent; + } + + public BigInteger getPrivateExponent() + { + return privateExponent; + } + + public BigInteger getPrime1() + { + return prime1; + } + + public BigInteger getPrime2() + { + return prime2; + } + + public BigInteger getExponent1() + { + return exponent1; + } + + public BigInteger getExponent2() + { + return exponent2; + } + + public BigInteger getCoefficient() + { + return coefficient; + } + + /** + * This outputs the key in PKCS1v2 format. + *

        +     *      RSAPrivateKey ::= SEQUENCE {
        +     *                          version Version,
        +     *                          modulus INTEGER, -- n
        +     *                          publicExponent INTEGER, -- e
        +     *                          privateExponent INTEGER, -- d
        +     *                          prime1 INTEGER, -- p
        +     *                          prime2 INTEGER, -- q
        +     *                          exponent1 INTEGER, -- d mod (p-1)
        +     *                          exponent2 INTEGER, -- d mod (q-1)
        +     *                          coefficient INTEGER, -- (inverse of q) mod p
        +     *                          otherPrimeInfos OtherPrimeInfos OPTIONAL
        +     *                      }
        +     *
        +     *      Version ::= INTEGER { two-prime(0), multi(1) }
        +     *        (CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})
        +     * 
        + *

        + * This routine is written to output PKCS1 version 2.1, private keys. + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(version)); // version + v.add(new ASN1Integer(getModulus())); + v.add(new ASN1Integer(getPublicExponent())); + v.add(new ASN1Integer(getPrivateExponent())); + v.add(new ASN1Integer(getPrime1())); + v.add(new ASN1Integer(getPrime2())); + v.add(new ASN1Integer(getExponent1())); + v.add(new ASN1Integer(getExponent2())); + v.add(new ASN1Integer(getCoefficient())); + + if (otherPrimeInfos != null) + { + v.add(otherPrimeInfos); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPublicKey.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPublicKey.java new file mode 100644 index 0000000..d8472c6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSAPublicKey.java @@ -0,0 +1,95 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class RSAPublicKey + extends ASN1Object +{ + private BigInteger modulus; + private BigInteger publicExponent; + + public static RSAPublicKey getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static RSAPublicKey getInstance( + Object obj) + { + if (obj instanceof RSAPublicKey) + { + return (RSAPublicKey)obj; + } + + if (obj != null) + { + return new RSAPublicKey(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public RSAPublicKey( + BigInteger modulus, + BigInteger publicExponent) + { + this.modulus = modulus; + this.publicExponent = publicExponent; + } + + private RSAPublicKey( + ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + Enumeration e = seq.getObjects(); + + modulus = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); + publicExponent = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); + } + + public BigInteger getModulus() + { + return modulus; + } + + public BigInteger getPublicExponent() + { + return publicExponent; + } + + /** + * This outputs the key in PKCS1v2 format. + *

        +     *      RSAPublicKey ::= SEQUENCE {
        +     *                          modulus INTEGER, -- n
        +     *                          publicExponent INTEGER, -- e
        +     *                      }
        +     * 
        + *

        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(getModulus())); + v.add(new ASN1Integer(getPublicExponent())); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java new file mode 100644 index 0000000..6712a07 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java @@ -0,0 +1,172 @@ +package org.bouncycastle.asn1.pkcs; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERNull; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +public class RSASSAPSSparams + extends ASN1Object +{ + private AlgorithmIdentifier hashAlgorithm; + private AlgorithmIdentifier maskGenAlgorithm; + private ASN1Integer saltLength; + private ASN1Integer trailerField; + + public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); + public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM); + public final static ASN1Integer DEFAULT_SALT_LENGTH = new ASN1Integer(20); + public final static ASN1Integer DEFAULT_TRAILER_FIELD = new ASN1Integer(1); + + public static RSASSAPSSparams getInstance( + Object obj) + { + if (obj instanceof RSASSAPSSparams) + { + return (RSASSAPSSparams)obj; + } + else if (obj != null) + { + return new RSASSAPSSparams(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * The default version + */ + public RSASSAPSSparams() + { + hashAlgorithm = DEFAULT_HASH_ALGORITHM; + maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; + saltLength = DEFAULT_SALT_LENGTH; + trailerField = DEFAULT_TRAILER_FIELD; + } + + public RSASSAPSSparams( + AlgorithmIdentifier hashAlgorithm, + AlgorithmIdentifier maskGenAlgorithm, + ASN1Integer saltLength, + ASN1Integer trailerField) + { + this.hashAlgorithm = hashAlgorithm; + this.maskGenAlgorithm = maskGenAlgorithm; + this.saltLength = saltLength; + this.trailerField = trailerField; + } + + private RSASSAPSSparams( + ASN1Sequence seq) + { + hashAlgorithm = DEFAULT_HASH_ALGORITHM; + maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; + saltLength = DEFAULT_SALT_LENGTH; + trailerField = DEFAULT_TRAILER_FIELD; + + for (int i = 0; i != seq.size(); i++) + { + ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(i); + + switch (o.getTagNo()) + { + case 0: + hashAlgorithm = AlgorithmIdentifier.getInstance(o, true); + break; + case 1: + maskGenAlgorithm = AlgorithmIdentifier.getInstance(o, true); + break; + case 2: + saltLength = ASN1Integer.getInstance(o, true); + break; + case 3: + trailerField = ASN1Integer.getInstance(o, true); + break; + default: + throw new IllegalArgumentException("unknown tag"); + } + } + } + + public AlgorithmIdentifier getHashAlgorithm() + { + return hashAlgorithm; + } + + public AlgorithmIdentifier getMaskGenAlgorithm() + { + return maskGenAlgorithm; + } + + public BigInteger getSaltLength() + { + return saltLength.getValue(); + } + + public BigInteger getTrailerField() + { + return trailerField.getValue(); + } + + /** + *

        +     * RSASSA-PSS-params ::= SEQUENCE {
        +     *   hashAlgorithm      [0] OAEP-PSSDigestAlgorithms  DEFAULT sha1,
        +     *    maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
        +     *    saltLength         [2] INTEGER  DEFAULT 20,
        +     *    trailerField       [3] TrailerField  DEFAULT trailerFieldBC
        +     *  }
        +     *
        +     * OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
        +     *    { OID id-sha1 PARAMETERS NULL   }|
        +     *    { OID id-sha256 PARAMETERS NULL }|
        +     *    { OID id-sha384 PARAMETERS NULL }|
        +     *    { OID id-sha512 PARAMETERS NULL },
        +     *    ...  -- Allows for future expansion --
        +     * }
        +     *
        +     * PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
        +     *   { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
        +     *    ...  -- Allows for future expansion --
        +     * }
        +     * 
        +     * TrailerField ::= INTEGER { trailerFieldBC(1) }
        +     * 
        + * @return the asn1 primitive representing the parameters. + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (!hashAlgorithm.equals(DEFAULT_HASH_ALGORITHM)) + { + v.add(new DERTaggedObject(true, 0, hashAlgorithm)); + } + + if (!maskGenAlgorithm.equals(DEFAULT_MASK_GEN_FUNCTION)) + { + v.add(new DERTaggedObject(true, 1, maskGenAlgorithm)); + } + + if (!saltLength.equals(DEFAULT_SALT_LENGTH)) + { + v.add(new DERTaggedObject(true, 2, saltLength)); + } + + if (!trailerField.equals(DEFAULT_TRAILER_FIELD)) + { + v.add(new DERTaggedObject(true, 3, trailerField)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/SafeBag.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/SafeBag.java new file mode 100644 index 0000000..00ca0a2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/SafeBag.java @@ -0,0 +1,96 @@ +package org.bouncycastle.asn1.pkcs; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DLSequence; +import org.bouncycastle.asn1.DLTaggedObject; + +public class SafeBag + extends ASN1Object +{ + private ASN1ObjectIdentifier bagId; + private ASN1Encodable bagValue; + private ASN1Set bagAttributes; + + public SafeBag( + ASN1ObjectIdentifier oid, + ASN1Encodable obj) + { + this.bagId = oid; + this.bagValue = obj; + this.bagAttributes = null; + } + + public SafeBag( + ASN1ObjectIdentifier oid, + ASN1Encodable obj, + ASN1Set bagAttributes) + { + this.bagId = oid; + this.bagValue = obj; + this.bagAttributes = bagAttributes; + } + + public static SafeBag getInstance( + Object obj) + { + if (obj instanceof SafeBag) + { + return (SafeBag)obj; + } + + if (obj != null) + { + return new SafeBag(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private SafeBag( + ASN1Sequence seq) + { + this.bagId = (ASN1ObjectIdentifier)seq.getObjectAt(0); + this.bagValue = ((ASN1TaggedObject)seq.getObjectAt(1)).getObject(); + if (seq.size() == 3) + { + this.bagAttributes = (ASN1Set)seq.getObjectAt(2); + } + } + + public ASN1ObjectIdentifier getBagId() + { + return bagId; + } + + public ASN1Encodable getBagValue() + { + return bagValue; + } + + public ASN1Set getBagAttributes() + { + return bagAttributes; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(bagId); + v.add(new DLTaggedObject(true, 0, bagValue)); + + if (bagAttributes != null) + { + v.add(bagAttributes); + } + + return new DLSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java new file mode 100644 index 0000000..2cc75ee --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/SignedData.java @@ -0,0 +1,166 @@ +package org.bouncycastle.asn1.pkcs; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.BERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * a PKCS#7 signed data object. + */ +public class SignedData + extends ASN1Object + //implements PKCSObjectIdentifiers +{ + private ASN1Integer version; + private ASN1Set digestAlgorithms; + private ContentInfo contentInfo; + private ASN1Set certificates; + private ASN1Set crls; + private ASN1Set signerInfos; + + public static SignedData getInstance( + Object o) + { + if (o instanceof SignedData) + { + return (SignedData)o; + } + else if (o != null) + { + return new SignedData(ASN1Sequence.getInstance(o)); + } + + return null; + } + + public SignedData( + ASN1Integer _version, + ASN1Set _digestAlgorithms, + ContentInfo _contentInfo, + ASN1Set _certificates, + ASN1Set _crls, + ASN1Set _signerInfos) + { + version = _version; + digestAlgorithms = _digestAlgorithms; + contentInfo = _contentInfo; + certificates = _certificates; + crls = _crls; + signerInfos = _signerInfos; + } + + public SignedData( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + version = (ASN1Integer)e.nextElement(); + digestAlgorithms = ((ASN1Set)e.nextElement()); + contentInfo = ContentInfo.getInstance(e.nextElement()); + + while (e.hasMoreElements()) + { + ASN1Primitive o = (ASN1Primitive)e.nextElement(); + + // + // an interesting feature of SignedData is that there appear to be varying implementations... + // for the moment we ignore anything which doesn't fit. + // + if (o instanceof DERTaggedObject) + { + DERTaggedObject tagged = (DERTaggedObject)o; + + switch (tagged.getTagNo()) + { + case 0: + certificates = ASN1Set.getInstance(tagged, false); + break; + case 1: + crls = ASN1Set.getInstance(tagged, false); + break; + default: + throw new IllegalArgumentException("unknown tag value " + tagged.getTagNo()); + } + } + else + { + signerInfos = (ASN1Set)o; + } + } + } + + public ASN1Integer getVersion() + { + return version; + } + + public ASN1Set getDigestAlgorithms() + { + return digestAlgorithms; + } + + public ContentInfo getContentInfo() + { + return contentInfo; + } + + public ASN1Set getCertificates() + { + return certificates; + } + + public ASN1Set getCRLs() + { + return crls; + } + + public ASN1Set getSignerInfos() + { + return signerInfos; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  SignedData ::= SEQUENCE {
        +     *      version Version,
        +     *      digestAlgorithms DigestAlgorithmIdentifiers,
        +     *      contentInfo ContentInfo,
        +     *      certificates
        +     *          [0] IMPLICIT ExtendedCertificatesAndCertificates
        +     *                   OPTIONAL,
        +     *      crls
        +     *          [1] IMPLICIT CertificateRevocationLists OPTIONAL,
        +     *      signerInfos SignerInfos }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(version); + v.add(digestAlgorithms); + v.add(contentInfo); + + if (certificates != null) + { + v.add(new DERTaggedObject(false, 0, certificates)); + } + + if (crls != null) + { + v.add(new DERTaggedObject(false, 1, crls)); + } + + v.add(signerInfos); + + return new BERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/pkcs/SignerInfo.java b/common/src/main/java/org/bouncycastle/asn1/pkcs/SignerInfo.java new file mode 100644 index 0000000..ab5d78a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/pkcs/SignerInfo.java @@ -0,0 +1,178 @@ +package org.bouncycastle.asn1.pkcs; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; + +/** + * a PKCS#7 signer info object. + */ +public class SignerInfo + extends ASN1Object +{ + private ASN1Integer version; + private IssuerAndSerialNumber issuerAndSerialNumber; + private AlgorithmIdentifier digAlgorithm; + private ASN1Set authenticatedAttributes; + private AlgorithmIdentifier digEncryptionAlgorithm; + private ASN1OctetString encryptedDigest; + private ASN1Set unauthenticatedAttributes; + + public static SignerInfo getInstance( + Object o) + { + if (o instanceof SignerInfo) + { + return (SignerInfo)o; + } + else if (o instanceof ASN1Sequence) + { + return new SignerInfo((ASN1Sequence)o); + } + + throw new IllegalArgumentException("unknown object in factory: " + o.getClass().getName()); + } + + public SignerInfo( + ASN1Integer version, + IssuerAndSerialNumber issuerAndSerialNumber, + AlgorithmIdentifier digAlgorithm, + ASN1Set authenticatedAttributes, + AlgorithmIdentifier digEncryptionAlgorithm, + ASN1OctetString encryptedDigest, + ASN1Set unauthenticatedAttributes) + { + this.version = version; + this.issuerAndSerialNumber = issuerAndSerialNumber; + this.digAlgorithm = digAlgorithm; + this.authenticatedAttributes = authenticatedAttributes; + this.digEncryptionAlgorithm = digEncryptionAlgorithm; + this.encryptedDigest = encryptedDigest; + this.unauthenticatedAttributes = unauthenticatedAttributes; + } + + public SignerInfo( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + version = (ASN1Integer)e.nextElement(); + issuerAndSerialNumber = IssuerAndSerialNumber.getInstance(e.nextElement()); + digAlgorithm = AlgorithmIdentifier.getInstance(e.nextElement()); + + Object obj = e.nextElement(); + + if (obj instanceof ASN1TaggedObject) + { + authenticatedAttributes = ASN1Set.getInstance((ASN1TaggedObject)obj, false); + + digEncryptionAlgorithm = AlgorithmIdentifier.getInstance(e.nextElement()); + } + else + { + authenticatedAttributes = null; + digEncryptionAlgorithm = AlgorithmIdentifier.getInstance(obj); + } + + encryptedDigest = DEROctetString.getInstance(e.nextElement()); + + if (e.hasMoreElements()) + { + unauthenticatedAttributes = ASN1Set.getInstance((ASN1TaggedObject)e.nextElement(), false); + } + else + { + unauthenticatedAttributes = null; + } + } + + public ASN1Integer getVersion() + { + return version; + } + + public IssuerAndSerialNumber getIssuerAndSerialNumber() + { + return issuerAndSerialNumber; + } + + public ASN1Set getAuthenticatedAttributes() + { + return authenticatedAttributes; + } + + public AlgorithmIdentifier getDigestAlgorithm() + { + return digAlgorithm; + } + + public ASN1OctetString getEncryptedDigest() + { + return encryptedDigest; + } + + public AlgorithmIdentifier getDigestEncryptionAlgorithm() + { + return digEncryptionAlgorithm; + } + + public ASN1Set getUnauthenticatedAttributes() + { + return unauthenticatedAttributes; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  SignerInfo ::= SEQUENCE {
        +     *      version Version,
        +     *      issuerAndSerialNumber IssuerAndSerialNumber,
        +     *      digestAlgorithm DigestAlgorithmIdentifier,
        +     *      authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
        +     *      digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
        +     *      encryptedDigest EncryptedDigest,
        +     *      unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
        +     *  }
        +     *
        +     *  EncryptedDigest ::= OCTET STRING
        +     *
        +     *  DigestAlgorithmIdentifier ::= AlgorithmIdentifier
        +     *
        +     *  DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(version); + v.add(issuerAndSerialNumber); + v.add(digAlgorithm); + + if (authenticatedAttributes != null) + { + v.add(new DERTaggedObject(false, 0, authenticatedAttributes)); + } + + v.add(digEncryptionAlgorithm); + v.add(encryptedDigest); + + if (unauthenticatedAttributes != null) + { + v.add(new DERTaggedObject(false, 1, unauthenticatedAttributes)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKey.java b/common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKey.java new file mode 100644 index 0000000..ee63f4f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKey.java @@ -0,0 +1,143 @@ +package org.bouncycastle.asn1.sec; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.util.BigIntegers; + +/** + * the elliptic curve private key object from SEC 1 + */ +public class ECPrivateKey + extends ASN1Object +{ + private ASN1Sequence seq; + + private ECPrivateKey( + ASN1Sequence seq) + { + this.seq = seq; + } + + public static ECPrivateKey getInstance( + Object obj) + { + if (obj instanceof ECPrivateKey) + { + return (ECPrivateKey)obj; + } + + if (obj != null) + { + return new ECPrivateKey(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public ECPrivateKey( + BigInteger key) + { + byte[] bytes = BigIntegers.asUnsignedByteArray(key); + + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(1)); + v.add(new DEROctetString(bytes)); + + seq = new DERSequence(v); + } + + public ECPrivateKey( + BigInteger key, + ASN1Object parameters) + { + this(key, null, parameters); + } + + public ECPrivateKey( + BigInteger key, + DERBitString publicKey, + ASN1Object parameters) + { + byte[] bytes = BigIntegers.asUnsignedByteArray(key); + + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(1)); + v.add(new DEROctetString(bytes)); + + if (parameters != null) + { + v.add(new DERTaggedObject(true, 0, parameters)); + } + + if (publicKey != null) + { + v.add(new DERTaggedObject(true, 1, publicKey)); + } + + seq = new DERSequence(v); + } + + public BigInteger getKey() + { + ASN1OctetString octs = (ASN1OctetString)seq.getObjectAt(1); + + return new BigInteger(1, octs.getOctets()); + } + + public DERBitString getPublicKey() + { + return (DERBitString)getObjectInTag(1); + } + + public ASN1Primitive getParameters() + { + return getObjectInTag(0); + } + + private ASN1Primitive getObjectInTag(int tagNo) + { + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1Encodable obj = (ASN1Encodable)e.nextElement(); + + if (obj instanceof ASN1TaggedObject) + { + ASN1TaggedObject tag = (ASN1TaggedObject)obj; + if (tag.getTagNo() == tagNo) + { + return tag.getObject().toASN1Primitive(); + } + } + } + return null; + } + + /** + * ECPrivateKey ::= SEQUENCE { + * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + * privateKey OCTET STRING, + * parameters [0] Parameters OPTIONAL, + * publicKey [1] BIT STRING OPTIONAL } + */ + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java b/common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java new file mode 100644 index 0000000..fc54d89 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/sec/ECPrivateKeyStructure.java @@ -0,0 +1,128 @@ +package org.bouncycastle.asn1.sec; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.util.BigIntegers; + +/** + * the elliptic curve private key object from SEC 1 + * @deprecated use ECPrivateKey + */ +public class ECPrivateKeyStructure + extends ASN1Object +{ + private ASN1Sequence seq; + + public ECPrivateKeyStructure( + ASN1Sequence seq) + { + this.seq = seq; + } + + public ECPrivateKeyStructure( + BigInteger key) + { + byte[] bytes = BigIntegers.asUnsignedByteArray(key); + + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(1)); + v.add(new DEROctetString(bytes)); + + seq = new DERSequence(v); + } + + public ECPrivateKeyStructure( + BigInteger key, + ASN1Encodable parameters) + { + this(key, null, parameters); + } + + public ECPrivateKeyStructure( + BigInteger key, + DERBitString publicKey, + ASN1Encodable parameters) + { + byte[] bytes = BigIntegers.asUnsignedByteArray(key); + + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(1)); + v.add(new DEROctetString(bytes)); + + if (parameters != null) + { + v.add(new DERTaggedObject(true, 0, parameters)); + } + + if (publicKey != null) + { + v.add(new DERTaggedObject(true, 1, publicKey)); + } + + seq = new DERSequence(v); + } + + public BigInteger getKey() + { + ASN1OctetString octs = (ASN1OctetString)seq.getObjectAt(1); + + return new BigInteger(1, octs.getOctets()); + } + + public DERBitString getPublicKey() + { + return (DERBitString)getObjectInTag(1); + } + + public ASN1Primitive getParameters() + { + return getObjectInTag(0); + } + + private ASN1Primitive getObjectInTag(int tagNo) + { + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1Encodable obj = (ASN1Encodable)e.nextElement(); + + if (obj instanceof ASN1TaggedObject) + { + ASN1TaggedObject tag = (ASN1TaggedObject)obj; + if (tag.getTagNo() == tagNo) + { + return (ASN1Primitive)((ASN1Encodable)tag.getObject()).toASN1Primitive(); + } + } + } + return null; + } + + /** + * ECPrivateKey ::= SEQUENCE { + * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + * privateKey OCTET STRING, + * parameters [0] Parameters OPTIONAL, + * publicKey [1] BIT STRING OPTIONAL } + */ + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/sec/SECNamedCurves.java b/common/src/main/java/org/bouncycastle/asn1/sec/SECNamedCurves.java new file mode 100644 index 0000000..4525433 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/sec/SECNamedCurves.java @@ -0,0 +1,1029 @@ +package org.bouncycastle.asn1.sec; + +import javabc.BigInteger; +import java.util.Enumeration; +import java.util.Hashtable; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.x9.X9ECParameters; +import org.bouncycastle.asn1.x9.X9ECParametersHolder; +import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECCurve; +import org.bouncycastle.math.ec.ECPoint; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; + +public class SECNamedCurves +{ + private static BigInteger fromHex( + String hex) + { + return new BigInteger(1, Hex.decode(hex)); + } + + /* + * secp112r1 + */ + static X9ECParametersHolder secp112r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = (2^128 - 3) / 76439 + BigInteger p = fromHex("DB7C2ABF62E35E668076BEAD208B"); + BigInteger a = fromHex("DB7C2ABF62E35E668076BEAD2088"); + BigInteger b = fromHex("659EF8BA043916EEDE8911702B22"); + byte[] S = Hex.decode("00F50B028E4D696E676875615175290472783FB1"); + BigInteger n = fromHex("DB7C2ABF62E35E7628DFAC6561C5"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "09487239995A5EE76B55F9C2F098")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "09487239995A5EE76B55F9C2F098" + + "A89CE5AF8724C0A23E0E0FF77500")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp112r2 + */ + static X9ECParametersHolder secp112r2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = (2^128 - 3) / 76439 + BigInteger p = fromHex("DB7C2ABF62E35E668076BEAD208B"); + BigInteger a = fromHex("6127C24C05F38A0AAAF65C0EF02C"); + BigInteger b = fromHex("51DEF1815DB5ED74FCC34C85D709"); + byte[] S = Hex.decode("002757A1114D696E6768756151755316C05E0BD4"); + BigInteger n = fromHex("36DF0AAFD8B8D7597CA10520D04B"); + BigInteger h = BigInteger.valueOf(4); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "4BA30AB5E892B4E1649DD0928643")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "4BA30AB5E892B4E1649DD0928643" + + "ADCD46F5882E3747DEF36E956E97")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp128r1 + */ + static X9ECParametersHolder secp128r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^128 - 2^97 - 1 + BigInteger p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"); + BigInteger b = fromHex("E87579C11079F43DD824993C2CEE5ED3"); + byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679"); + BigInteger n = fromHex("FFFFFFFE0000000075A30D1B9038A115"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "161FF7528B899B2D0C28607CA52C5B86")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "161FF7528B899B2D0C28607CA52C5B86" + + "CF5AC8395BAFEB13C02DA292DDED7A83")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp128r2 + */ + static X9ECParametersHolder secp128r2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^128 - 2^97 - 1 + BigInteger p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = fromHex("D6031998D1B3BBFEBF59CC9BBFF9AEE1"); + BigInteger b = fromHex("5EEEFCA380D02919DC2C6558BB6D8A5D"); + byte[] S = Hex.decode("004D696E67687561517512D8F03431FCE63B88F4"); + BigInteger n = fromHex("3FFFFFFF7FFFFFFFBE0024720613B5A3"); + BigInteger h = BigInteger.valueOf(4); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "7B6AA5D85E572983E6FB32A7CDEBC140")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "7B6AA5D85E572983E6FB32A7CDEBC140" + + "27B6916A894D3AEE7106FE805FC34B44")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp160k1 + */ + static X9ECParametersHolder secp160k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(7); + byte[] S = null; + BigInteger n = fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); +// ECPoint G = curve.decodePoint(Hex.decode("02" +// + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB" + + "938CF935318FDCED6BC28286531733C3F03C4FEE")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp160r1 + */ + static X9ECParametersHolder secp160r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^160 - 2^31 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"); + BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"); + BigInteger b = fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"); + byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345"); + BigInteger n = fromHex("0100000000000000000001F4C8F927AED3CA752257"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "4A96B5688EF573284664698968C38BB913CBFC82")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "4A96B5688EF573284664698968C38BB913CBFC82" + + "23A628553168947D59DCC912042351377AC5FB32")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp160r2 + */ + static X9ECParametersHolder secp160r2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); + BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70"); + BigInteger b = fromHex("B4E134D3FB59EB8BAB57274904664D5AF50388BA"); + byte[] S = Hex.decode("B99B99B099B323E02709A4D696E6768756151751"); + BigInteger n = fromHex("0100000000000000000000351EE786A818F3A1A16B"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "52DCB034293A117E1F4FF11B30F7199D3144CE6D")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "52DCB034293A117E1F4FF11B30F7199D3144CE6D" + + "FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp192k1 + */ + static X9ECParametersHolder secp192k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"); + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(3); + byte[] S = null; + BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D" + + "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp192r1 + */ + static X9ECParametersHolder secp192r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^192 - 2^64 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"); + BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"); + BigInteger b = fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"); + byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5"); + BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012" + + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp224k1 + */ + static X9ECParametersHolder secp224k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^224 - 2^32 - 2^12 - 2^11 - 2^9 - 2^7 - 2^4 - 2 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D"); + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(5); + byte[] S = null; + BigInteger n = fromHex("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C" + + "7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp224r1 + */ + static X9ECParametersHolder secp224r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^224 - 2^96 + 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"); + BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"); + BigInteger b = fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"); + byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); + BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21" + + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp256k1 + */ + static X9ECParametersHolder secp256k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"); + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(7); + byte[] S = null; + BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798" + + "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp256r1 + */ + static X9ECParametersHolder secp256r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1 + BigInteger p = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"); + BigInteger b = fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"); + byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90"); + BigInteger n = fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" + + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp384r1 + */ + static X9ECParametersHolder secp384r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^384 - 2^128 - 2^96 + 2^32 - 1 + BigInteger p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF"); + BigInteger a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC"); + BigInteger b = fromHex("B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF"); + byte[] S = Hex.decode("A335926AA319A27A1D00896A6773A4827ACDAC73"); + BigInteger n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7" + + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * secp521r1 + */ + static X9ECParametersHolder secp521r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + // p = 2^521 - 1 + BigInteger p = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); + BigInteger a = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC"); + BigInteger b = fromHex("0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"); + byte[] S = Hex.decode("D09E8800291CB85396CC6717393284AAA0DA64BA"); + BigInteger n = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"); + BigInteger h = BigInteger.valueOf(1); + + ECCurve curve = new ECCurve.Fp(p, a, b); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66" + + "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect113r1 + */ + static X9ECParametersHolder sect113r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 113; + int k = 9; + + BigInteger a = fromHex("003088250CA6E7C7FE649CE85820F7"); + BigInteger b = fromHex("00E8BEE4D3E2260744188BE0E9C723"); + byte[] S = Hex.decode("10E723AB14D696E6768756151756FEBF8FCB49A9"); + BigInteger n = fromHex("0100000000000000D9CCEC8A39E56F"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "009D73616F35F4AB1407D73562C10F")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "009D73616F35F4AB1407D73562C10F" + + "00A52830277958EE84D1315ED31886")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect113r2 + */ + static X9ECParametersHolder sect113r2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 113; + int k = 9; + + BigInteger a = fromHex("00689918DBEC7E5A0DD6DFC0AA55C7"); + BigInteger b = fromHex("0095E9A9EC9B297BD4BF36E059184F"); + byte[] S = Hex.decode("10C0FB15760860DEF1EEF4D696E676875615175D"); + BigInteger n = fromHex("010000000000000108789B2496AF93"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "01A57A6A7B26CA5EF52FCDB8164797")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "01A57A6A7B26CA5EF52FCDB8164797" + + "00B3ADC94ED1FE674C06E695BABA1D")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect131r1 + */ + static X9ECParametersHolder sect131r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 131; + int k1 = 2; + int k2 = 3; + int k3 = 8; + + BigInteger a = fromHex("07A11B09A76B562144418FF3FF8C2570B8"); + BigInteger b = fromHex("0217C05610884B63B9C6C7291678F9D341"); + byte[] S = Hex.decode("4D696E676875615175985BD3ADBADA21B43A97E2"); + BigInteger n = fromHex("0400000000000000023123953A9464B54D"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "0081BAF91FDF9833C40F9C181343638399")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "0081BAF91FDF9833C40F9C181343638399" + + "078C6E7EA38C001F73C8134B1B4EF9E150")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect131r2 + */ + static X9ECParametersHolder sect131r2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 131; + int k1 = 2; + int k2 = 3; + int k3 = 8; + + BigInteger a = fromHex("03E5A88919D7CAFCBF415F07C2176573B2"); + BigInteger b = fromHex("04B8266A46C55657AC734CE38F018F2192"); + byte[] S = Hex.decode("985BD3ADBAD4D696E676875615175A21B43A97E3"); + BigInteger n = fromHex("0400000000000000016954A233049BA98F"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "0356DCD8F2F95031AD652D23951BB366A8")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "0356DCD8F2F95031AD652D23951BB366A8" + + "0648F06D867940A5366D9E265DE9EB240F")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect163k1 + */ + static X9ECParametersHolder sect163k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 163; + int k1 = 3; + int k2 = 6; + int k3 = 7; + + BigInteger a = BigInteger.valueOf(1); + BigInteger b = BigInteger.valueOf(1); + byte[] S = null; + BigInteger n = fromHex("04000000000000000000020108A2E0CC0D99F8A5EF"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8" + + "0289070FB05D38FF58321F2E800536D538CCDAA3D9")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect163r1 + */ + static X9ECParametersHolder sect163r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 163; + int k1 = 3; + int k2 = 6; + int k3 = 7; + + BigInteger a = fromHex("07B6882CAAEFA84F9554FF8428BD88E246D2782AE2"); + BigInteger b = fromHex("0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9"); + byte[] S = Hex.decode("24B7B137C8A14D696E6768756151756FD0DA2E5C"); + BigInteger n = fromHex("03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "0369979697AB43897789566789567F787A7876A654")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "0369979697AB43897789566789567F787A7876A654" + + "00435EDB42EFAFB2989D51FEFCE3C80988F41FF883")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect163r2 + */ + static X9ECParametersHolder sect163r2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 163; + int k1 = 3; + int k2 = 6; + int k3 = 7; + + BigInteger a = BigInteger.valueOf(1); + BigInteger b = fromHex("020A601907B8C953CA1481EB10512F78744A3205FD"); + byte[] S = Hex.decode("85E25BFE5C86226CDB12016F7553F9D0E693A268"); + BigInteger n = fromHex("040000000000000000000292FE77E70C12A4234C33"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "03F0EBA16286A2D57EA0991168D4994637E8343E36")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "03F0EBA16286A2D57EA0991168D4994637E8343E36" + + "00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect193r1 + */ + static X9ECParametersHolder sect193r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 193; + int k = 15; + + BigInteger a = fromHex("0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01"); + BigInteger b = fromHex("00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814"); + byte[] S = Hex.decode("103FAEC74D696E676875615175777FC5B191EF30"); + BigInteger n = fromHex("01000000000000000000000000C7F34A778F443ACC920EBA49"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1" + + "0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect193r2 + */ + static X9ECParametersHolder sect193r2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 193; + int k = 15; + + BigInteger a = fromHex("0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B"); + BigInteger b = fromHex("00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE"); + byte[] S = Hex.decode("10B7B4D696E676875615175137C8A16FD0DA2211"); + BigInteger n = fromHex("010000000000000000000000015AAB561B005413CCD4EE99D5"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F" + + "01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect233k1 + */ + static X9ECParametersHolder sect233k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 233; + int k = 74; + + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(1); + byte[] S = null; + BigInteger n = fromHex("8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF"); + BigInteger h = BigInteger.valueOf(4); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126" + + "01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect233r1 + */ + static X9ECParametersHolder sect233r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 233; + int k = 74; + + BigInteger a = BigInteger.valueOf(1); + BigInteger b = fromHex("0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD"); + byte[] S = Hex.decode("74D59FF07F6B413D0EA14B344B20A2DB049B50C3"); + BigInteger n = fromHex("01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B" + + "01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect239k1 + */ + static X9ECParametersHolder sect239k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 239; + int k = 158; + + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(1); + byte[] S = null; + BigInteger n = fromHex("2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5"); + BigInteger h = BigInteger.valueOf(4); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC" + + "76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect283k1 + */ + static X9ECParametersHolder sect283k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 283; + int k1 = 5; + int k2 = 7; + int k3 = 12; + + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(1); + byte[] S = null; + BigInteger n = fromHex("01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61"); + BigInteger h = BigInteger.valueOf(4); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836" + + "01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect283r1 + */ + static X9ECParametersHolder sect283r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 283; + int k1 = 5; + int k2 = 7; + int k3 = 12; + + BigInteger a = BigInteger.valueOf(1); + BigInteger b = fromHex("027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5"); + byte[] S = Hex.decode("77E2B07370EB0F832A6DD5B62DFC88CD06BB84BE"); + BigInteger n = fromHex("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053" + + "03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect409k1 + */ + static X9ECParametersHolder sect409k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 409; + int k = 87; + + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(1); + byte[] S = null; + BigInteger n = fromHex("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF"); + BigInteger h = BigInteger.valueOf(4); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746" + + "01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect409r1 + */ + static X9ECParametersHolder sect409r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 409; + int k = 87; + + BigInteger a = BigInteger.valueOf(1); + BigInteger b = fromHex("0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F"); + byte[] S = Hex.decode("4099B5A457F9D69F79213D094C4BCD4D4262210B"); + BigInteger n = fromHex("010000000000000000000000000000000000000000000000000001E2AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7" + + "0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect571k1 + */ + static X9ECParametersHolder sect571k1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 571; + int k1 = 2; + int k2 = 5; + int k3 = 10; + + BigInteger a = ECConstants.ZERO; + BigInteger b = BigInteger.valueOf(1); + byte[] S = null; + BigInteger n = fromHex("020000000000000000000000000000000000000000000000000000000000000000000000131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001"); + BigInteger h = BigInteger.valueOf(4); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("02" + //+ "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA44370958493B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972" + + "0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + /* + * sect571r1 + */ + static X9ECParametersHolder sect571r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + int m = 571; + int k1 = 2; + int k2 = 5; + int k3 = 10; + + BigInteger a = BigInteger.valueOf(1); + BigInteger b = fromHex("02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A"); + byte[] S = Hex.decode("2AA058F73A0E33AB486B0F610410C53A7F132310"); + BigInteger n = fromHex("03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47"); + BigInteger h = BigInteger.valueOf(2); + + ECCurve curve = new ECCurve.F2m(m, k1, k2, k3, a, b, n, h); + //ECPoint G = curve.decodePoint(Hex.decode("03" + //+ "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19")); + ECPoint G = curve.decodePoint(Hex.decode("04" + + "0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19" + + "037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B")); + + return new X9ECParameters(curve, G, n, h, S); + } + }; + + + static final Hashtable objIds = new Hashtable(); + static final Hashtable curves = new Hashtable(); + static final Hashtable names = new Hashtable(); + + static void defineCurve(String name, ASN1ObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.put(name, oid); + names.put(oid, name); + curves.put(oid, holder); + } + + static + { + defineCurve("secp112r1", SECObjectIdentifiers.secp112r1, secp112r1); + defineCurve("secp112r2", SECObjectIdentifiers.secp112r2, secp112r2); + defineCurve("secp128r1", SECObjectIdentifiers.secp128r1, secp128r1); + defineCurve("secp128r2", SECObjectIdentifiers.secp128r2, secp128r2); + defineCurve("secp160k1", SECObjectIdentifiers.secp160k1, secp160k1); + defineCurve("secp160r1", SECObjectIdentifiers.secp160r1, secp160r1); + defineCurve("secp160r2", SECObjectIdentifiers.secp160r2, secp160r2); + defineCurve("secp192k1", SECObjectIdentifiers.secp192k1, secp192k1); + defineCurve("secp192r1", SECObjectIdentifiers.secp192r1, secp192r1); + defineCurve("secp224k1", SECObjectIdentifiers.secp224k1, secp224k1); + defineCurve("secp224r1", SECObjectIdentifiers.secp224r1, secp224r1); + defineCurve("secp256k1", SECObjectIdentifiers.secp256k1, secp256k1); + defineCurve("secp256r1", SECObjectIdentifiers.secp256r1, secp256r1); + defineCurve("secp384r1", SECObjectIdentifiers.secp384r1, secp384r1); + defineCurve("secp521r1", SECObjectIdentifiers.secp521r1, secp521r1); + + defineCurve("sect113r1", SECObjectIdentifiers.sect113r1, sect113r1); + defineCurve("sect113r2", SECObjectIdentifiers.sect113r2, sect113r2); + defineCurve("sect131r1", SECObjectIdentifiers.sect131r1, sect131r1); + defineCurve("sect131r2", SECObjectIdentifiers.sect131r2, sect131r2); + defineCurve("sect163k1", SECObjectIdentifiers.sect163k1, sect163k1); + defineCurve("sect163r1", SECObjectIdentifiers.sect163r1, sect163r1); + defineCurve("sect163r2", SECObjectIdentifiers.sect163r2, sect163r2); + defineCurve("sect193r1", SECObjectIdentifiers.sect193r1, sect193r1); + defineCurve("sect193r2", SECObjectIdentifiers.sect193r2, sect193r2); + defineCurve("sect233k1", SECObjectIdentifiers.sect233k1, sect233k1); + defineCurve("sect233r1", SECObjectIdentifiers.sect233r1, sect233r1); + defineCurve("sect239k1", SECObjectIdentifiers.sect239k1, sect239k1); + defineCurve("sect283k1", SECObjectIdentifiers.sect283k1, sect283k1); + defineCurve("sect283r1", SECObjectIdentifiers.sect283r1, sect283r1); + defineCurve("sect409k1", SECObjectIdentifiers.sect409k1, sect409k1); + defineCurve("sect409r1", SECObjectIdentifiers.sect409r1, sect409r1); + defineCurve("sect571k1", SECObjectIdentifiers.sect571k1, sect571k1); + defineCurve("sect571r1", SECObjectIdentifiers.sect571r1, sect571r1); + } + + public static X9ECParameters getByName( + String name) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); + + if (oid != null) + { + return getByOID(oid); + } + + return null; + } + + /** + * return the X9ECParameters object for the named curve represented by + * the passed in object identifier. Null if the curve isn't present. + * + * @param oid an object identifier representing a named curve, if present. + */ + public static X9ECParameters getByOID( + ASN1ObjectIdentifier oid) + { + X9ECParametersHolder holder = (X9ECParametersHolder)curves.get(oid); + + if (holder != null) + { + return holder.getParameters(); + } + + return null; + } + + /** + * return the object identifier signified by the passed in name. Null + * if there is no object identifier associated with name. + * + * @return the object identifier associated with name, if present. + */ + public static ASN1ObjectIdentifier getOID( + String name) + { + return (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); + } + + /** + * return the named curve name represented by the given object identifier. + */ + public static String getName( + ASN1ObjectIdentifier oid) + { + return (String)names.get(oid); + } + + /** + * returns an enumeration containing the name strings for curves + * contained in this structure. + */ + public static Enumeration getNames() + { + return objIds.keys(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java new file mode 100644 index 0000000..8b19cd6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/sec/SECObjectIdentifiers.java @@ -0,0 +1,50 @@ +package org.bouncycastle.asn1.sec; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; + +public interface SECObjectIdentifiers +{ + /** + * ellipticCurve OBJECT IDENTIFIER ::= { + * iso(1) identified-organization(3) certicom(132) curve(0) + * } + */ + static final ASN1ObjectIdentifier ellipticCurve = new ASN1ObjectIdentifier("1.3.132.0"); + + static final ASN1ObjectIdentifier sect163k1 = ellipticCurve.branch("1"); + static final ASN1ObjectIdentifier sect163r1 = ellipticCurve.branch("2"); + static final ASN1ObjectIdentifier sect239k1 = ellipticCurve.branch("3"); + static final ASN1ObjectIdentifier sect113r1 = ellipticCurve.branch("4"); + static final ASN1ObjectIdentifier sect113r2 = ellipticCurve.branch("5"); + static final ASN1ObjectIdentifier secp112r1 = ellipticCurve.branch("6"); + static final ASN1ObjectIdentifier secp112r2 = ellipticCurve.branch("7"); + static final ASN1ObjectIdentifier secp160r1 = ellipticCurve.branch("8"); + static final ASN1ObjectIdentifier secp160k1 = ellipticCurve.branch("9"); + static final ASN1ObjectIdentifier secp256k1 = ellipticCurve.branch("10"); + static final ASN1ObjectIdentifier sect163r2 = ellipticCurve.branch("15"); + static final ASN1ObjectIdentifier sect283k1 = ellipticCurve.branch("16"); + static final ASN1ObjectIdentifier sect283r1 = ellipticCurve.branch("17"); + static final ASN1ObjectIdentifier sect131r1 = ellipticCurve.branch("22"); + static final ASN1ObjectIdentifier sect131r2 = ellipticCurve.branch("23"); + static final ASN1ObjectIdentifier sect193r1 = ellipticCurve.branch("24"); + static final ASN1ObjectIdentifier sect193r2 = ellipticCurve.branch("25"); + static final ASN1ObjectIdentifier sect233k1 = ellipticCurve.branch("26"); + static final ASN1ObjectIdentifier sect233r1 = ellipticCurve.branch("27"); + static final ASN1ObjectIdentifier secp128r1 = ellipticCurve.branch("28"); + static final ASN1ObjectIdentifier secp128r2 = ellipticCurve.branch("29"); + static final ASN1ObjectIdentifier secp160r2 = ellipticCurve.branch("30"); + static final ASN1ObjectIdentifier secp192k1 = ellipticCurve.branch("31"); + static final ASN1ObjectIdentifier secp224k1 = ellipticCurve.branch("32"); + static final ASN1ObjectIdentifier secp224r1 = ellipticCurve.branch("33"); + static final ASN1ObjectIdentifier secp384r1 = ellipticCurve.branch("34"); + static final ASN1ObjectIdentifier secp521r1 = ellipticCurve.branch("35"); + static final ASN1ObjectIdentifier sect409k1 = ellipticCurve.branch("36"); + static final ASN1ObjectIdentifier sect409r1 = ellipticCurve.branch("37"); + static final ASN1ObjectIdentifier sect571k1 = ellipticCurve.branch("38"); + static final ASN1ObjectIdentifier sect571r1 = ellipticCurve.branch("39"); + + static final ASN1ObjectIdentifier secp192r1 = X9ObjectIdentifiers.prime192v1; + static final ASN1ObjectIdentifier secp256r1 = X9ObjectIdentifiers.prime256v1; + +} diff --git a/common/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java b/common/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java new file mode 100644 index 0000000..0149778 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/util/ASN1Dump.java @@ -0,0 +1,427 @@ +package org.bouncycastle.asn1.util; + +import java.io.IOException; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.BERApplicationSpecific; +import org.bouncycastle.asn1.BERConstructedOctetString; +import org.bouncycastle.asn1.BERSequence; +import org.bouncycastle.asn1.BERSet; +import org.bouncycastle.asn1.BERTaggedObject; +import org.bouncycastle.asn1.BERTags; +import org.bouncycastle.asn1.DERApplicationSpecific; +import org.bouncycastle.asn1.DERBMPString; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERBoolean; +import org.bouncycastle.asn1.DEREnumerated; +import org.bouncycastle.asn1.DERExternal; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DERNull; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERPrintableString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERSet; +import org.bouncycastle.asn1.DERT61String; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.DERUTCTime; +import org.bouncycastle.asn1.DERUTF8String; +import org.bouncycastle.asn1.DERVisibleString; +import org.bouncycastle.util.encoders.Hex; + +public class ASN1Dump +{ + private static final String TAB = " "; + private static final int SAMPLE_SIZE = 32; + + /** + * dump a DER object as a formatted string with indentation + * + * @param obj the ASN1Primitive to be dumped out. + */ + static void _dumpAsString( + String indent, + boolean verbose, + ASN1Primitive obj, + StringBuffer buf) + { + String nl = System.getProperty("line.separator"); + if (obj instanceof ASN1Sequence) + { + Enumeration e = ((ASN1Sequence)obj).getObjects(); + String tab = indent + TAB; + + buf.append(indent); + if (obj instanceof BERSequence) + { + buf.append("BER Sequence"); + } + else if (obj instanceof DERSequence) + { + buf.append("DER Sequence"); + } + else + { + buf.append("Sequence"); + } + + buf.append(nl); + + while (e.hasMoreElements()) + { + Object o = e.nextElement(); + + if (o == null || o.equals(new DERNull())) + { + buf.append(tab); + buf.append("NULL"); + buf.append(nl); + } + else if (o instanceof ASN1Primitive) + { + _dumpAsString(tab, verbose, (ASN1Primitive)o, buf); + } + else + { + _dumpAsString(tab, verbose, ((ASN1Encodable)o).toASN1Primitive(), buf); + } + } + } + else if (obj instanceof DERTaggedObject) + { + String tab = indent + TAB; + + buf.append(indent); + if (obj instanceof BERTaggedObject) + { + buf.append("BER Tagged ["); + } + else + { + buf.append("Tagged ["); + } + + DERTaggedObject o = (DERTaggedObject)obj; + + buf.append(Integer.toString(o.getTagNo())); + buf.append(']'); + + if (!o.isExplicit()) + { + buf.append(" IMPLICIT "); + } + + buf.append(nl); + + if (o.isEmpty()) + { + buf.append(tab); + buf.append("EMPTY"); + buf.append(nl); + } + else + { + _dumpAsString(tab, verbose, o.getObject(), buf); + } + } + else if (obj instanceof BERSet) + { + Enumeration e = ((ASN1Set)obj).getObjects(); + String tab = indent + TAB; + + buf.append(indent); + buf.append("BER Set"); + buf.append(nl); + + while (e.hasMoreElements()) + { + Object o = e.nextElement(); + + if (o == null) + { + buf.append(tab); + buf.append("NULL"); + buf.append(nl); + } + else if (o instanceof ASN1Primitive) + { + _dumpAsString(tab, verbose, (ASN1Primitive)o, buf); + } + else + { + _dumpAsString(tab, verbose, ((ASN1Encodable)o).toASN1Primitive(), buf); + } + } + } + else if (obj instanceof DERSet) + { + Enumeration e = ((ASN1Set)obj).getObjects(); + String tab = indent + TAB; + + buf.append(indent); + buf.append("DER Set"); + buf.append(nl); + + while (e.hasMoreElements()) + { + Object o = e.nextElement(); + + if (o == null) + { + buf.append(tab); + buf.append("NULL"); + buf.append(nl); + } + else if (o instanceof ASN1Primitive) + { + _dumpAsString(tab, verbose, (ASN1Primitive)o, buf); + } + else + { + _dumpAsString(tab, verbose, ((ASN1Encodable)o).toASN1Primitive(), buf); + } + } + } + else if (obj instanceof ASN1ObjectIdentifier) + { + buf.append(indent + "ObjectIdentifier(" + ((ASN1ObjectIdentifier)obj).getId() + ")" + nl); + } + else if (obj instanceof DERBoolean) + { + buf.append(indent + "Boolean(" + ((DERBoolean)obj).isTrue() + ")" + nl); + } + else if (obj instanceof ASN1Integer) + { + buf.append(indent + "Integer(" + ((ASN1Integer)obj).getValue() + ")" + nl); + } + else if (obj instanceof BERConstructedOctetString) + { + ASN1OctetString oct = (ASN1OctetString)obj; + buf.append(indent + "BER Constructed Octet String" + "[" + oct.getOctets().length + "] "); + if (verbose) + { + buf.append(dumpBinaryDataAsString(indent, oct.getOctets())); + } + else{ + buf.append(nl); + } + } + else if (obj instanceof DEROctetString) + { + ASN1OctetString oct = (ASN1OctetString)obj; + buf.append(indent + "DER Octet String" + "[" + oct.getOctets().length + "] "); + if (verbose) + { + buf.append(dumpBinaryDataAsString(indent, oct.getOctets())); + } + else{ + buf.append(nl); + } + } + else if (obj instanceof DERBitString) + { + DERBitString bt = (DERBitString)obj; + buf.append(indent + "DER Bit String" + "[" + bt.getBytes().length + ", " + bt.getPadBits() + "] "); + if (verbose) + { + buf.append(dumpBinaryDataAsString(indent, bt.getBytes())); + } + else{ + buf.append(nl); + } + } + else if (obj instanceof DERIA5String) + { + buf.append(indent + "IA5String(" + ((DERIA5String)obj).getString() + ") " + nl); + } + else if (obj instanceof DERUTF8String) + { + buf.append(indent + "UTF8String(" + ((DERUTF8String)obj).getString() + ") " + nl); + } + else if (obj instanceof DERPrintableString) + { + buf.append(indent + "PrintableString(" + ((DERPrintableString)obj).getString() + ") " + nl); + } + else if (obj instanceof DERVisibleString) + { + buf.append(indent + "VisibleString(" + ((DERVisibleString)obj).getString() + ") " + nl); + } + else if (obj instanceof DERBMPString) + { + buf.append(indent + "BMPString(" + ((DERBMPString)obj).getString() + ") " + nl); + } + else if (obj instanceof DERT61String) + { + buf.append(indent + "T61String(" + ((DERT61String)obj).getString() + ") " + nl); + } + else if (obj instanceof DERUTCTime) + { + buf.append(indent + "UTCTime(" + ((DERUTCTime)obj).getTime() + ") " + nl); + } + else if (obj instanceof DERGeneralizedTime) + { + buf.append(indent + "GeneralizedTime(" + ((DERGeneralizedTime)obj).getTime() + ") " + nl); + } + else if (obj instanceof BERApplicationSpecific) + { + buf.append(outputApplicationSpecific("BER", indent, verbose, obj, nl)); + } + else if (obj instanceof DERApplicationSpecific) + { + buf.append(outputApplicationSpecific("DER", indent, verbose, obj, nl)); + } + else if (obj instanceof DEREnumerated) + { + DEREnumerated en = (DEREnumerated) obj; + buf.append(indent + "DER Enumerated(" + en.getValue() + ")" + nl); + } + else if (obj instanceof DERExternal) + { + DERExternal ext = (DERExternal) obj; + buf.append(indent + "External " + nl); + String tab = indent + TAB; + if (ext.getDirectReference() != null) + { + buf.append(tab + "Direct Reference: " + ext.getDirectReference().getId() + nl); + } + if (ext.getIndirectReference() != null) + { + buf.append(tab + "Indirect Reference: " + ext.getIndirectReference().toString() + nl); + } + if (ext.getDataValueDescriptor() != null) + { + _dumpAsString(tab, verbose, ext.getDataValueDescriptor(), buf); + } + buf.append(tab + "Encoding: " + ext.getEncoding() + nl); + _dumpAsString(tab, verbose, ext.getExternalContent(), buf); + } + else + { + buf.append(indent + obj.toString() + nl); + } + } + + private static String outputApplicationSpecific(String type, String indent, boolean verbose, ASN1Primitive obj, String nl) + { + DERApplicationSpecific app = (DERApplicationSpecific)obj; + StringBuffer buf = new StringBuffer(); + + if (app.isConstructed()) + { + try + { + ASN1Sequence s = ASN1Sequence.getInstance(app.getObject(BERTags.SEQUENCE)); + buf.append(indent + type + " ApplicationSpecific[" + app.getApplicationTag() + "]" + nl); + for (Enumeration e = s.getObjects(); e.hasMoreElements();) + { + _dumpAsString(indent + TAB, verbose, (ASN1Primitive)e.nextElement(), buf); + } + } + catch (IOException e) + { + buf.append(e); + } + return buf.toString(); + } + + return indent + type + " ApplicationSpecific[" + app.getApplicationTag() + "] (" + new String(Hex.encode(app.getContents())) + ")" + nl; + } + + /** + * dump out a DER object as a formatted string, in non-verbose mode. + * + * @param obj the ASN1Primitive to be dumped out. + * @return the resulting string. + */ + public static String dumpAsString( + Object obj) + { + return dumpAsString(obj, false); + } + + /** + * Dump out the object as a string. + * + * @param obj the object to be dumped + * @param verbose if true, dump out the contents of octet and bit strings. + * @return the resulting string. + */ + public static String dumpAsString( + Object obj, + boolean verbose) + { + StringBuffer buf = new StringBuffer(); + + if (obj instanceof ASN1Primitive) + { + _dumpAsString("", verbose, (ASN1Primitive)obj, buf); + } + else if (obj instanceof ASN1Encodable) + { + _dumpAsString("", verbose, ((ASN1Encodable)obj).toASN1Primitive(), buf); + } + else + { + return "unknown object type " + obj.toString(); + } + + return buf.toString(); + } + + private static String dumpBinaryDataAsString(String indent, byte[] bytes) + { + String nl = System.getProperty("line.separator"); + StringBuffer buf = new StringBuffer(); + + indent += TAB; + + buf.append(nl); + for (int i = 0; i < bytes.length; i += SAMPLE_SIZE) + { + if (bytes.length - i > SAMPLE_SIZE) + { + buf.append(indent); + buf.append(new String(Hex.encode(bytes, i, SAMPLE_SIZE))); + buf.append(TAB); + buf.append(calculateAscString(bytes, i, SAMPLE_SIZE)); + buf.append(nl); + } + else + { + buf.append(indent); + buf.append(new String(Hex.encode(bytes, i, bytes.length - i))); + for (int j = bytes.length - i; j != SAMPLE_SIZE; j++) + { + buf.append(" "); + } + buf.append(TAB); + buf.append(calculateAscString(bytes, i, bytes.length - i)); + buf.append(nl); + } + } + + return buf.toString(); + } + + private static String calculateAscString(byte[] bytes, int off, int len) + { + StringBuffer buf = new StringBuffer(); + + for (int i = off; i != off + len; i++) + { + if (bytes[i] >= ' ' && bytes[i] <= '~') + { + buf.append((char)bytes[i]); + } + } + + return buf.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/util/DERDump.java b/common/src/main/java/org/bouncycastle/asn1/util/DERDump.java new file mode 100644 index 0000000..78875ff --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/util/DERDump.java @@ -0,0 +1,41 @@ +package org.bouncycastle.asn1.util; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Primitive; + +/** + * @deprecated use ASN1Dump. + */ +public class DERDump + extends ASN1Dump +{ + /** + * dump out a DER object as a formatted string + * + * @param obj the ASN1Primitive to be dumped out. + */ + public static String dumpAsString( + ASN1Primitive obj) + { + StringBuffer buf = new StringBuffer(); + + _dumpAsString("", false, obj, buf); + + return buf.toString(); + } + + /** + * dump out a DER object as a formatted string + * + * @param obj the ASN1Primitive to be dumped out. + */ + public static String dumpAsString( + ASN1Encodable obj) + { + StringBuffer buf = new StringBuffer(); + + _dumpAsString("", false, obj.toASN1Primitive(), buf); + + return buf.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java b/common/src/main/java/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java new file mode 100644 index 0000000..7f283f9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/AttributeTypeAndValue.java @@ -0,0 +1,72 @@ +package org.bouncycastle.asn1.x500; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +public class AttributeTypeAndValue + extends ASN1Object +{ + private ASN1ObjectIdentifier type; + private ASN1Encodable value; + + private AttributeTypeAndValue(ASN1Sequence seq) + { + type = (ASN1ObjectIdentifier)seq.getObjectAt(0); + value = (ASN1Encodable)seq.getObjectAt(1); + } + + public static AttributeTypeAndValue getInstance(Object o) + { + if (o instanceof AttributeTypeAndValue) + { + return (AttributeTypeAndValue)o; + } + else if (o != null) + { + return new AttributeTypeAndValue(ASN1Sequence.getInstance(o)); + } + + throw new IllegalArgumentException("null value in getInstance()"); + } + + public AttributeTypeAndValue( + ASN1ObjectIdentifier type, + ASN1Encodable value) + { + this.type = type; + this.value = value; + } + + public ASN1ObjectIdentifier getType() + { + return type; + } + + public ASN1Encodable getValue() + { + return value; + } + + /** + *
        +     * AttributeTypeAndValue ::= SEQUENCE {
        +     *           type         OBJECT IDENTIFIER,
        +     *           value        ANY DEFINED BY type }
        +     * 
        + * @return a basic ASN.1 object representation. + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(type); + v.add(value); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/DirectoryString.java b/common/src/main/java/org/bouncycastle/asn1/x500/DirectoryString.java new file mode 100644 index 0000000..cf7563e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/DirectoryString.java @@ -0,0 +1,125 @@ +package org.bouncycastle.asn1.x500; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1String; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBMPString; +import org.bouncycastle.asn1.DERPrintableString; +import org.bouncycastle.asn1.DERT61String; +import org.bouncycastle.asn1.DERUTF8String; +import org.bouncycastle.asn1.DERUniversalString; + +public class DirectoryString + extends ASN1Object + implements ASN1Choice, ASN1String +{ + private ASN1String string; + + public static DirectoryString getInstance(Object o) + { + if (o == null || o instanceof DirectoryString) + { + return (DirectoryString)o; + } + + if (o instanceof DERT61String) + { + return new DirectoryString((DERT61String)o); + } + + if (o instanceof DERPrintableString) + { + return new DirectoryString((DERPrintableString)o); + } + + if (o instanceof DERUniversalString) + { + return new DirectoryString((DERUniversalString)o); + } + + if (o instanceof DERUTF8String) + { + return new DirectoryString((DERUTF8String)o); + } + + if (o instanceof DERBMPString) + { + return new DirectoryString((DERBMPString)o); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + o.getClass().getName()); + } + + public static DirectoryString getInstance(ASN1TaggedObject o, boolean explicit) + { + if (!explicit) + { + throw new IllegalArgumentException("choice item must be explicitly tagged"); + } + + return getInstance(o.getObject()); + } + + private DirectoryString( + DERT61String string) + { + this.string = string; + } + + private DirectoryString( + DERPrintableString string) + { + this.string = string; + } + + private DirectoryString( + DERUniversalString string) + { + this.string = string; + } + + private DirectoryString( + DERUTF8String string) + { + this.string = string; + } + + private DirectoryString( + DERBMPString string) + { + this.string = string; + } + + public DirectoryString(String string) + { + this.string = new DERUTF8String(string); + } + + public String getString() + { + return string.getString(); + } + + public String toString() + { + return string.getString(); + } + + /** + *
        +     *  DirectoryString ::= CHOICE {
        +     *    teletexString               TeletexString (SIZE (1..MAX)),
        +     *    printableString             PrintableString (SIZE (1..MAX)),
        +     *    universalString             UniversalString (SIZE (1..MAX)),
        +     *    utf8String                  UTF8String (SIZE (1..MAX)),
        +     *    bmpString                   BMPString (SIZE (1..MAX))  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + return ((ASN1Encodable)string).toASN1Primitive(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/RDN.java b/common/src/main/java/org/bouncycastle/asn1/x500/RDN.java new file mode 100644 index 0000000..f51c261 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/RDN.java @@ -0,0 +1,119 @@ +package org.bouncycastle.asn1.x500; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERSet; + +public class RDN + extends ASN1Object +{ + private ASN1Set values; + + private RDN(ASN1Set values) + { + this.values = values; + } + + public static RDN getInstance(Object obj) + { + if (obj instanceof RDN) + { + return (RDN)obj; + } + else if (obj != null) + { + return new RDN(ASN1Set.getInstance(obj)); + } + + return null; + } + + /** + * Create a single valued RDN. + * + * @param oid RDN type. + * @param value RDN value. + */ + public RDN(ASN1ObjectIdentifier oid, ASN1Encodable value) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(oid); + v.add(value); + + this.values = new DERSet(new DERSequence(v)); + } + + public RDN(AttributeTypeAndValue attrTAndV) + { + this.values = new DERSet(attrTAndV); + } + + /** + * Create a multi-valued RDN. + * + * @param aAndVs attribute type/value pairs making up the RDN + */ + public RDN(AttributeTypeAndValue[] aAndVs) + { + this.values = new DERSet(aAndVs); + } + + public boolean isMultiValued() + { + return this.values.size() > 1; + } + + /** + * Return the number of AttributeTypeAndValue objects in this RDN, + * + * @return size of RDN, greater than 1 if multi-valued. + */ + public int size() + { + return this.values.size(); + } + + public AttributeTypeAndValue getFirst() + { + if (this.values.size() == 0) + { + return null; + } + + return AttributeTypeAndValue.getInstance(this.values.getObjectAt(0)); + } + + public AttributeTypeAndValue[] getTypesAndValues() + { + AttributeTypeAndValue[] tmp = new AttributeTypeAndValue[values.size()]; + + for (int i = 0; i != tmp.length; i++) + { + tmp[i] = AttributeTypeAndValue.getInstance(values.getObjectAt(i)); + } + + return tmp; + } + + /** + *
        +     * RelativeDistinguishedName ::=
        +     *                     SET OF AttributeTypeAndValue
        +
        +     * AttributeTypeAndValue ::= SEQUENCE {
        +     *        type     AttributeType,
        +     *        value    AttributeValue }
        +     * 
        + * @return this object as an ASN1Primitive type + */ + public ASN1Primitive toASN1Primitive() + { + return values; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/X500Name.java b/common/src/main/java/org/bouncycastle/asn1/x500/X500Name.java new file mode 100644 index 0000000..50e57c5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/X500Name.java @@ -0,0 +1,326 @@ +package org.bouncycastle.asn1.x500; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x500.style.BCStyle; + +/** + *
        + *     Name ::= CHOICE {
        + *                       RDNSequence }
        + *
        + *     RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
        + *
        + *     RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
        + *
        + *     AttributeTypeAndValue ::= SEQUENCE {
        + *                                   type  OBJECT IDENTIFIER,
        + *                                   value ANY }
        + * 
        + */ +public class X500Name + extends ASN1Object + implements ASN1Choice +{ + private static X500NameStyle defaultStyle = BCStyle.INSTANCE; + + private boolean isHashCodeCalculated; + private int hashCodeValue; + + private X500NameStyle style; + private RDN[] rdns; + + public X500Name(X500NameStyle style, X500Name name) + { + this.rdns = name.rdns; + this.style = style; + } + + /** + * Return a X500Name based on the passed in tagged object. + * + * @param obj tag object holding name. + * @param explicit true if explicitly tagged false otherwise. + * @return the X500Name + */ + public static X500Name getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + // must be true as choice item + return getInstance(ASN1Sequence.getInstance(obj, true)); + } + + public static X500Name getInstance( + Object obj) + { + if (obj instanceof X500Name) + { + return (X500Name)obj; + } + else if (obj != null) + { + return new X500Name(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public static X500Name getInstance( + X500NameStyle style, + Object obj) + { + if (obj instanceof X500Name) + { + return getInstance(style, ((X500Name)obj).toASN1Primitive()); + } + else if (obj != null) + { + return new X500Name(style, ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor from ASN1Sequence + * + * the principal will be a list of constructed sets, each containing an (OID, String) pair. + */ + private X500Name( + ASN1Sequence seq) + { + this(defaultStyle, seq); + } + + private X500Name( + X500NameStyle style, + ASN1Sequence seq) + { + this.style = style; + this.rdns = new RDN[seq.size()]; + + int index = 0; + + for (Enumeration e = seq.getObjects(); e.hasMoreElements();) + { + rdns[index++] = RDN.getInstance(e.nextElement()); + } + } + + public X500Name( + RDN[] rDNs) + { + this(defaultStyle, rDNs); + } + + public X500Name( + X500NameStyle style, + RDN[] rDNs) + { + this.rdns = rDNs; + this.style = style; + } + + public X500Name( + String dirName) + { + this(defaultStyle, dirName); + } + + public X500Name( + X500NameStyle style, + String dirName) + { + this(style.fromString(dirName)); + + this.style = style; + } + + /** + * return an array of RDNs in structure order. + * + * @return an array of RDN objects. + */ + public RDN[] getRDNs() + { + RDN[] tmp = new RDN[this.rdns.length]; + + System.arraycopy(rdns, 0, tmp, 0, tmp.length); + + return tmp; + } + + /** + * return an array of OIDs contained in the attribute type of each RDN in structure order. + * + * @return an array, possibly zero length, of ASN1ObjectIdentifiers objects. + */ + public ASN1ObjectIdentifier[] getAttributeTypes() + { + int count = 0; + + for (int i = 0; i != rdns.length; i++) + { + RDN rdn = rdns[i]; + + count += rdn.size(); + } + + ASN1ObjectIdentifier[] res = new ASN1ObjectIdentifier[count]; + + count = 0; + + for (int i = 0; i != rdns.length; i++) + { + RDN rdn = rdns[i]; + + if (rdn.isMultiValued()) + { + AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); + for (int j = 0; j != attr.length; j++) + { + res[count++] = attr[j].getType(); + } + } + else if (rdn.size() != 0) + { + res[count++] = rdn.getFirst().getType(); + } + } + + return res; + } + + /** + * return an array of RDNs containing the attribute type given by OID in structure order. + * + * @param attributeType the type OID we are looking for. + * @return an array, possibly zero length, of RDN objects. + */ + public RDN[] getRDNs(ASN1ObjectIdentifier attributeType) + { + RDN[] res = new RDN[rdns.length]; + int count = 0; + + for (int i = 0; i != rdns.length; i++) + { + RDN rdn = rdns[i]; + + if (rdn.isMultiValued()) + { + AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); + for (int j = 0; j != attr.length; j++) + { + if (attr[j].getType().equals(attributeType)) + { + res[count++] = rdn; + break; + } + } + } + else + { + if (rdn.getFirst().getType().equals(attributeType)) + { + res[count++] = rdn; + } + } + } + + RDN[] tmp = new RDN[count]; + + System.arraycopy(res, 0, tmp, 0, tmp.length); + + return tmp; + } + + public ASN1Primitive toASN1Primitive() + { + return new DERSequence(rdns); + } + + public int hashCode() + { + if (isHashCodeCalculated) + { + return hashCodeValue; + } + + isHashCodeCalculated = true; + + hashCodeValue = style.calculateHashCode(this); + + return hashCodeValue; + } + + /** + * test for equality - note: case is ignored. + */ + public boolean equals(Object obj) + { + if (obj == this) + { + return true; + } + + if (!(obj instanceof X500Name || obj instanceof ASN1Sequence)) + { + return false; + } + + ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); + + if (this.toASN1Primitive().equals(derO)) + { + return true; + } + + try + { + return style.areEqual(this, new X500Name(ASN1Sequence.getInstance(((ASN1Encodable)obj).toASN1Primitive()))); + } + catch (Exception e) + { + return false; + } + } + + public String toString() + { + return style.toString(this); + } + + /** + * Set the default style for X500Name construction. + * + * @param style an X500NameStyle + */ + public static void setDefaultStyle(X500NameStyle style) + { + if (style == null) + { + throw new NullPointerException("cannot set style to null"); + } + + defaultStyle = style; + } + + /** + * Return the current default style. + * + * @return default style for X500Name construction. + */ + public static X500NameStyle getDefaultStyle() + { + return defaultStyle; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java b/common/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java new file mode 100644 index 0000000..30e871c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/X500NameBuilder.java @@ -0,0 +1,81 @@ +package org.bouncycastle.asn1.x500; + +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +public class X500NameBuilder +{ + private X500NameStyle template; + private Vector rdns = new Vector(); + + public X500NameBuilder(X500NameStyle template) + { + this.template = template; + } + + public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, String value) + { + this.addRDN(oid, template.stringToValue(oid, value)); + + return this; + } + + public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, ASN1Encodable value) + { + rdns.addElement(new RDN(oid, value)); + + return this; + } + + public X500NameBuilder addRDN(AttributeTypeAndValue attrTAndV) + { + rdns.addElement(new RDN(attrTAndV)); + + return this; + } + + public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, String[] values) + { + ASN1Encodable[] vals = new ASN1Encodable[values.length]; + + for (int i = 0; i != vals.length; i++) + { + vals[i] = template.stringToValue(oids[i], values[i]); + } + + return addMultiValuedRDN(oids, vals); + } + + public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, ASN1Encodable[] values) + { + AttributeTypeAndValue[] avs = new AttributeTypeAndValue[oids.length]; + + for (int i = 0; i != oids.length; i++) + { + avs[i] = new AttributeTypeAndValue(oids[i], values[i]); + } + + return addMultiValuedRDN(avs); + } + + public X500NameBuilder addMultiValuedRDN(AttributeTypeAndValue[] attrTAndVs) + { + rdns.addElement(new RDN(attrTAndVs)); + + return this; + } + + public X500Name build() + { + RDN[] vals = new RDN[rdns.size()]; + + for (int i = 0; i != vals.length; i++) + { + vals[i] = (RDN)rdns.elementAt(i); + } + + return new X500Name(template, vals); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/X500NameStyle.java b/common/src/main/java/org/bouncycastle/asn1/x500/X500NameStyle.java new file mode 100644 index 0000000..7a7c837 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/X500NameStyle.java @@ -0,0 +1,34 @@ +package org.bouncycastle.asn1.x500; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +/** + * It turns out that the number of standard ways the fields in a DN should be + * encoded into their ASN.1 counterparts is rapidly approaching the + * number of machines on the internet. By default the X500Name class + * will produce UTF8Strings in line with the current recommendations (RFC 3280). + *

        + */ +public interface X500NameStyle +{ + /** + * Convert the passed in String value into the appropriate ASN.1 + * encoded object. + * + * @param oid the oid associated with the value in the DN. + * @param value the value of the particular DN component. + * @return the ASN.1 equivalent for the value. + */ + ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value); + + ASN1ObjectIdentifier attrNameToOID(String attrName); + + boolean areEqual(X500Name name1, X500Name name2); + + RDN[] fromString(String dirName); + + int calculateHashCode(X500Name name); + + String toString(X500Name name); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java b/common/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java new file mode 100644 index 0000000..af10fef --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/style/BCStrictStyle.java @@ -0,0 +1,33 @@ +package org.bouncycastle.asn1.x500.style; + +import org.bouncycastle.asn1.x500.RDN; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * Variation of BCStyle that insists on strict ordering for equality + * and hashCode comparisons + */ +public class BCStrictStyle + extends BCStyle +{ + public boolean areEqual(X500Name name1, X500Name name2) + { + RDN[] rdns1 = name1.getRDNs(); + RDN[] rdns2 = name2.getRDNs(); + + if (rdns1.length != rdns2.length) + { + return false; + } + + for (int i = 0; i != rdns1.length; i++) + { + if (rdnAreEqual(rdns1[i], rdns2[i])) + { + return false; + } + } + + return true; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java b/common/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java new file mode 100644 index 0000000..32f93ff --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/style/BCStyle.java @@ -0,0 +1,544 @@ +package org.bouncycastle.asn1.x500.style; + +import java.io.IOException; +import java.util.Hashtable; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DERPrintableString; +import org.bouncycastle.asn1.DERUTF8String; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x500.AttributeTypeAndValue; +import org.bouncycastle.asn1.x500.RDN; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x500.X500NameStyle; +import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; + +public class BCStyle + implements X500NameStyle +{ + public static final X500NameStyle INSTANCE = new BCStyle(); + + /** + * country code - StringType(SIZE(2)) + */ + public static final ASN1ObjectIdentifier C = new ASN1ObjectIdentifier("2.5.4.6"); + + /** + * organization - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier O = new ASN1ObjectIdentifier("2.5.4.10"); + + /** + * organizational unit name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier OU = new ASN1ObjectIdentifier("2.5.4.11"); + + /** + * Title + */ + public static final ASN1ObjectIdentifier T = new ASN1ObjectIdentifier("2.5.4.12"); + + /** + * common name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier CN = new ASN1ObjectIdentifier("2.5.4.3"); + + /** + * device serial number name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier SN = new ASN1ObjectIdentifier("2.5.4.5"); + + /** + * street - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier STREET = new ASN1ObjectIdentifier("2.5.4.9"); + + /** + * device serial number name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier SERIALNUMBER = SN; + + /** + * locality name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier L = new ASN1ObjectIdentifier("2.5.4.7"); + + /** + * state, or province name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier ST = new ASN1ObjectIdentifier("2.5.4.8"); + + /** + * Naming attributes of type X520name + */ + public static final ASN1ObjectIdentifier SURNAME = new ASN1ObjectIdentifier("2.5.4.4"); + public static final ASN1ObjectIdentifier GIVENNAME = new ASN1ObjectIdentifier("2.5.4.42"); + public static final ASN1ObjectIdentifier INITIALS = new ASN1ObjectIdentifier("2.5.4.43"); + public static final ASN1ObjectIdentifier GENERATION = new ASN1ObjectIdentifier("2.5.4.44"); + public static final ASN1ObjectIdentifier UNIQUE_IDENTIFIER = new ASN1ObjectIdentifier("2.5.4.45"); + + /** + * businessCategory - DirectoryString(SIZE(1..128) + */ + public static final ASN1ObjectIdentifier BUSINESS_CATEGORY = new ASN1ObjectIdentifier( + "2.5.4.15"); + + /** + * postalCode - DirectoryString(SIZE(1..40) + */ + public static final ASN1ObjectIdentifier POSTAL_CODE = new ASN1ObjectIdentifier( + "2.5.4.17"); + + /** + * dnQualifier - DirectoryString(SIZE(1..64) + */ + public static final ASN1ObjectIdentifier DN_QUALIFIER = new ASN1ObjectIdentifier( + "2.5.4.46"); + + /** + * RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + */ + public static final ASN1ObjectIdentifier PSEUDONYM = new ASN1ObjectIdentifier( + "2.5.4.65"); + + + /** + * RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + */ + public static final ASN1ObjectIdentifier DATE_OF_BIRTH = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.1"); + + /** + * RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + */ + public static final ASN1ObjectIdentifier PLACE_OF_BIRTH = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.2"); + + /** + * RFC 3039 Gender - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + */ + public static final ASN1ObjectIdentifier GENDER = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.3"); + + /** + * RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + * codes only + */ + public static final ASN1ObjectIdentifier COUNTRY_OF_CITIZENSHIP = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.4"); + + /** + * RFC 3039 CountryOfResidence - PrintableString (SIZE (2)) -- ISO 3166 + * codes only + */ + public static final ASN1ObjectIdentifier COUNTRY_OF_RESIDENCE = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.5"); + + + /** + * ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + */ + public static final ASN1ObjectIdentifier NAME_AT_BIRTH = new ASN1ObjectIdentifier("1.3.36.8.3.14"); + + /** + * RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + * DirectoryString(SIZE(1..30)) + */ + public static final ASN1ObjectIdentifier POSTAL_ADDRESS = new ASN1ObjectIdentifier("2.5.4.16"); + + /** + * RFC 2256 dmdName + */ + public static final ASN1ObjectIdentifier DMD_NAME = new ASN1ObjectIdentifier("2.5.4.54"); + + /** + * id-at-telephoneNumber + */ + public static final ASN1ObjectIdentifier TELEPHONE_NUMBER = X509ObjectIdentifiers.id_at_telephoneNumber; + + /** + * id-at-name + */ + public static final ASN1ObjectIdentifier NAME = X509ObjectIdentifiers.id_at_name; + + /** + * Email address (RSA PKCS#9 extension) - IA5String. + *

        Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here. + */ + public static final ASN1ObjectIdentifier EmailAddress = PKCSObjectIdentifiers.pkcs_9_at_emailAddress; + + /** + * more from PKCS#9 + */ + public static final ASN1ObjectIdentifier UnstructuredName = PKCSObjectIdentifiers.pkcs_9_at_unstructuredName; + public static final ASN1ObjectIdentifier UnstructuredAddress = PKCSObjectIdentifiers.pkcs_9_at_unstructuredAddress; + + /** + * email address in Verisign certificates + */ + public static final ASN1ObjectIdentifier E = EmailAddress; + + /* + * others... + */ + public static final ASN1ObjectIdentifier DC = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25"); + + /** + * LDAP User id. + */ + public static final ASN1ObjectIdentifier UID = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1"); + + /** + * default look up table translating OID values into their common symbols following + * the convention in RFC 2253 with a few extras + */ + private static final Hashtable DefaultSymbols = new Hashtable(); + + /** + * look up table translating common symbols into their OIDS. + */ + private static final Hashtable DefaultLookUp = new Hashtable(); + + static + { + DefaultSymbols.put(C, "C"); + DefaultSymbols.put(O, "O"); + DefaultSymbols.put(T, "T"); + DefaultSymbols.put(OU, "OU"); + DefaultSymbols.put(CN, "CN"); + DefaultSymbols.put(L, "L"); + DefaultSymbols.put(ST, "ST"); + DefaultSymbols.put(SN, "SERIALNUMBER"); + DefaultSymbols.put(EmailAddress, "E"); + DefaultSymbols.put(DC, "DC"); + DefaultSymbols.put(UID, "UID"); + DefaultSymbols.put(STREET, "STREET"); + DefaultSymbols.put(SURNAME, "SURNAME"); + DefaultSymbols.put(GIVENNAME, "GIVENNAME"); + DefaultSymbols.put(INITIALS, "INITIALS"); + DefaultSymbols.put(GENERATION, "GENERATION"); + DefaultSymbols.put(UnstructuredAddress, "unstructuredAddress"); + DefaultSymbols.put(UnstructuredName, "unstructuredName"); + DefaultSymbols.put(UNIQUE_IDENTIFIER, "UniqueIdentifier"); + DefaultSymbols.put(DN_QUALIFIER, "DN"); + DefaultSymbols.put(PSEUDONYM, "Pseudonym"); + DefaultSymbols.put(POSTAL_ADDRESS, "PostalAddress"); + DefaultSymbols.put(NAME_AT_BIRTH, "NameAtBirth"); + DefaultSymbols.put(COUNTRY_OF_CITIZENSHIP, "CountryOfCitizenship"); + DefaultSymbols.put(COUNTRY_OF_RESIDENCE, "CountryOfResidence"); + DefaultSymbols.put(GENDER, "Gender"); + DefaultSymbols.put(PLACE_OF_BIRTH, "PlaceOfBirth"); + DefaultSymbols.put(DATE_OF_BIRTH, "DateOfBirth"); + DefaultSymbols.put(POSTAL_CODE, "PostalCode"); + DefaultSymbols.put(BUSINESS_CATEGORY, "BusinessCategory"); + DefaultSymbols.put(TELEPHONE_NUMBER, "TelephoneNumber"); + DefaultSymbols.put(NAME, "Name"); + + DefaultLookUp.put("c", C); + DefaultLookUp.put("o", O); + DefaultLookUp.put("t", T); + DefaultLookUp.put("ou", OU); + DefaultLookUp.put("cn", CN); + DefaultLookUp.put("l", L); + DefaultLookUp.put("st", ST); + DefaultLookUp.put("sn", SN); + DefaultLookUp.put("serialnumber", SN); + DefaultLookUp.put("street", STREET); + DefaultLookUp.put("emailaddress", E); + DefaultLookUp.put("dc", DC); + DefaultLookUp.put("e", E); + DefaultLookUp.put("uid", UID); + DefaultLookUp.put("surname", SURNAME); + DefaultLookUp.put("givenname", GIVENNAME); + DefaultLookUp.put("initials", INITIALS); + DefaultLookUp.put("generation", GENERATION); + DefaultLookUp.put("unstructuredaddress", UnstructuredAddress); + DefaultLookUp.put("unstructuredname", UnstructuredName); + DefaultLookUp.put("uniqueidentifier", UNIQUE_IDENTIFIER); + DefaultLookUp.put("dn", DN_QUALIFIER); + DefaultLookUp.put("pseudonym", PSEUDONYM); + DefaultLookUp.put("postaladdress", POSTAL_ADDRESS); + DefaultLookUp.put("nameofbirth", NAME_AT_BIRTH); + DefaultLookUp.put("countryofcitizenship", COUNTRY_OF_CITIZENSHIP); + DefaultLookUp.put("countryofresidence", COUNTRY_OF_RESIDENCE); + DefaultLookUp.put("gender", GENDER); + DefaultLookUp.put("placeofbirth", PLACE_OF_BIRTH); + DefaultLookUp.put("dateofbirth", DATE_OF_BIRTH); + DefaultLookUp.put("postalcode", POSTAL_CODE); + DefaultLookUp.put("businesscategory", BUSINESS_CATEGORY); + DefaultLookUp.put("telephonenumber", TELEPHONE_NUMBER); + DefaultLookUp.put("name", NAME); + } + + protected BCStyle() + { + + } + + public ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value) + { + if (value.length() != 0 && value.charAt(0) == '#') + { + try + { + return IETFUtils.valueFromHexString(value, 1); + } + catch (IOException e) + { + throw new RuntimeException("can't recode value for oid " + oid.getId()); + } + } + else + { + if (value.length() != 0 && value.charAt(0) == '\\') + { + value = value.substring(1); + } + if (oid.equals(EmailAddress) || oid.equals(DC)) + { + return new DERIA5String(value); + } + else if (oid.equals(DATE_OF_BIRTH)) // accept time string as well as # (for compatibility) + { + return new DERGeneralizedTime(value); + } + else if (oid.equals(C) || oid.equals(SN) || oid.equals(DN_QUALIFIER) + || oid.equals(TELEPHONE_NUMBER)) + { + return new DERPrintableString(value); + } + } + + return new DERUTF8String(value); + } + + public ASN1ObjectIdentifier attrNameToOID(String attrName) + { + return IETFUtils.decodeAttrName(attrName, DefaultLookUp); + } + + public boolean areEqual(X500Name name1, X500Name name2) + { + RDN[] rdns1 = name1.getRDNs(); + RDN[] rdns2 = name2.getRDNs(); + + if (rdns1.length != rdns2.length) + { + return false; + } + + boolean reverse = false; + + if (rdns1[0].getFirst() != null && rdns2[0].getFirst() != null) + { + reverse = !rdns1[0].getFirst().getType().equals(rdns2[0].getFirst().getType()); // guess forward + } + + for (int i = 0; i != rdns1.length; i++) + { + if (!foundMatch(reverse, rdns1[i], rdns2)) + { + return false; + } + } + + return true; + } + + private boolean foundMatch(boolean reverse, RDN rdn, RDN[] possRDNs) + { + if (reverse) + { + for (int i = possRDNs.length - 1; i >= 0; i--) + { + if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) + { + possRDNs[i] = null; + return true; + } + } + } + else + { + for (int i = 0; i != possRDNs.length; i++) + { + if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) + { + possRDNs[i] = null; + return true; + } + } + } + + return false; + } + + protected boolean rdnAreEqual(RDN rdn1, RDN rdn2) + { + if (rdn1.isMultiValued()) + { + if (rdn2.isMultiValued()) + { + AttributeTypeAndValue[] atvs1 = rdn1.getTypesAndValues(); + AttributeTypeAndValue[] atvs2 = rdn2.getTypesAndValues(); + + if (atvs1.length != atvs2.length) + { + return false; + } + + for (int i = 0; i != atvs1.length; i++) + { + if (!atvAreEqual(atvs1[i], atvs2[i])) + { + return false; + } + } + } + else + { + return false; + } + } + else + { + if (!rdn2.isMultiValued()) + { + return atvAreEqual(rdn1.getFirst(), rdn2.getFirst()); + } + else + { + return false; + } + } + + return true; + } + + private boolean atvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2) + { + if (atv1 == atv2) + { + return true; + } + + if (atv1 == null) + { + return false; + } + + if (atv2 == null) + { + return false; + } + + ASN1ObjectIdentifier o1 = atv1.getType(); + ASN1ObjectIdentifier o2 = atv2.getType(); + + if (!o1.equals(o2)) + { + return false; + } + + String v1 = IETFUtils.canonicalize(IETFUtils.valueToString(atv1.getValue())); + String v2 = IETFUtils.canonicalize(IETFUtils.valueToString(atv2.getValue())); + + if (!v1.equals(v2)) + { + return false; + } + + return true; + } + + public RDN[] fromString(String dirName) + { + return IETFUtils.rDNsFromString(dirName, this); + } + + public int calculateHashCode(X500Name name) + { + int hashCodeValue = 0; + RDN[] rdns = name.getRDNs(); + + // this needs to be order independent, like equals + for (int i = 0; i != rdns.length; i++) + { + if (rdns[i].isMultiValued()) + { + AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); + + for (int j = 0; j != atv.length; j++) + { + hashCodeValue ^= atv[j].getType().hashCode(); + hashCodeValue ^= calcHashCode(atv[j].getValue()); + } + } + else + { + hashCodeValue ^= rdns[i].getFirst().getType().hashCode(); + hashCodeValue ^= calcHashCode(rdns[i].getFirst().getValue()); + } + } + + return hashCodeValue; + } + + private int calcHashCode(ASN1Encodable enc) + { + String value = IETFUtils.valueToString(enc); + + value = IETFUtils.canonicalize(value); + + return value.hashCode(); + } + + public String toString(X500Name name) + { + StringBuffer buf = new StringBuffer(); + boolean first = true; + + RDN[] rdns = name.getRDNs(); + + for (int i = 0; i < rdns.length; i++) + { + if (first) + { + first = false; + } + else + { + buf.append(','); + } + + if (rdns[i].isMultiValued()) + { + AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); + boolean firstAtv = true; + + for (int j = 0; j != atv.length; j++) + { + if (firstAtv) + { + firstAtv = false; + } + else + { + buf.append('+'); + } + + IETFUtils.appendTypeAndValue(buf, atv[j], DefaultSymbols); + } + } + else + { + IETFUtils.appendTypeAndValue(buf, rdns[i].getFirst(), DefaultSymbols); + } + } + + return buf.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java b/common/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java new file mode 100644 index 0000000..5c60c89 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/style/IETFUtils.java @@ -0,0 +1,301 @@ +package org.bouncycastle.asn1.x500.style; + +import java.io.IOException; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1String; +import org.bouncycastle.asn1.DERUniversalString; +import org.bouncycastle.asn1.x500.AttributeTypeAndValue; +import org.bouncycastle.asn1.x500.RDN; +import org.bouncycastle.asn1.x500.X500NameBuilder; +import org.bouncycastle.asn1.x500.X500NameStyle; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; + +public class IETFUtils +{ + public static RDN[] rDNsFromString(String name, X500NameStyle x500Style) + { + X500NameTokenizer nTok = new X500NameTokenizer(name); + X500NameBuilder builder = new X500NameBuilder(x500Style); + + while (nTok.hasMoreTokens()) + { + String token = nTok.nextToken(); + int index = token.indexOf('='); + + if (index == -1) + { + throw new IllegalArgumentException("badly formated directory string"); + } + + String attr = token.substring(0, index); + String value = token.substring(index + 1); + ASN1ObjectIdentifier oid = x500Style.attrNameToOID(attr); + + if (value.indexOf('+') > 0) + { + X500NameTokenizer vTok = new X500NameTokenizer(value, '+'); + String v = vTok.nextToken(); + + Vector oids = new Vector(); + Vector values = new Vector(); + + oids.addElement(oid); + values.addElement(v); + + while (vTok.hasMoreTokens()) + { + String sv = vTok.nextToken(); + int ndx = sv.indexOf('='); + + String nm = sv.substring(0, ndx); + String vl = sv.substring(ndx + 1); + + oids.addElement(x500Style.attrNameToOID(nm)); + values.addElement(vl); + } + + builder.addMultiValuedRDN(toOIDArray(oids), toValueArray(values)); + } + else + { + builder.addRDN(oid, value); + } + } + + return builder.build().getRDNs(); + } + + private static String[] toValueArray(Vector values) + { + String[] tmp = new String[values.size()]; + + for (int i = 0; i != tmp.length; i++) + { + tmp[i] = (String)values.elementAt(i); + } + + return tmp; + } + + private static ASN1ObjectIdentifier[] toOIDArray(Vector oids) + { + ASN1ObjectIdentifier[] tmp = new ASN1ObjectIdentifier[oids.size()]; + + for (int i = 0; i != tmp.length; i++) + { + tmp[i] = (ASN1ObjectIdentifier)oids.elementAt(i); + } + + return tmp; + } + + public static ASN1ObjectIdentifier decodeAttrName( + String name, + Hashtable lookUp) + { + if (Strings.toUpperCase(name).startsWith("OID.")) + { + return new ASN1ObjectIdentifier(name.substring(4)); + } + else if (name.charAt(0) >= '0' && name.charAt(0) <= '9') + { + return new ASN1ObjectIdentifier(name); + } + + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)lookUp.get(Strings.toLowerCase(name)); + if (oid == null) + { + throw new IllegalArgumentException("Unknown object id - " + name + " - passed to distinguished name"); + } + + return oid; + } + + public static ASN1Encodable valueFromHexString( + String str, + int off) + throws IOException + { + str = Strings.toLowerCase(str); + byte[] data = new byte[(str.length() - off) / 2]; + for (int index = 0; index != data.length; index++) + { + char left = str.charAt((index * 2) + off); + char right = str.charAt((index * 2) + off + 1); + + if (left < 'a') + { + data[index] = (byte)((left - '0') << 4); + } + else + { + data[index] = (byte)((left - 'a' + 10) << 4); + } + if (right < 'a') + { + data[index] |= (byte)(right - '0'); + } + else + { + data[index] |= (byte)(right - 'a' + 10); + } + } + + return ASN1Primitive.fromByteArray(data); + } + + public static void appendTypeAndValue( + StringBuffer buf, + AttributeTypeAndValue typeAndValue, + Hashtable oidSymbols) + { + String sym = (String)oidSymbols.get(typeAndValue.getType()); + + if (sym != null) + { + buf.append(sym); + } + else + { + buf.append(typeAndValue.getType().getId()); + } + + buf.append('='); + + buf.append(valueToString(typeAndValue.getValue())); + } + + public static String valueToString(ASN1Encodable value) + { + StringBuffer vBuf = new StringBuffer(); + + if (value instanceof ASN1String && !(value instanceof DERUniversalString)) + { + String v = ((ASN1String)value).getString(); + if (v.length() > 0 && v.charAt(0) == '#') + { + vBuf.append("\\" + v); + } + else + { + vBuf.append(v); + } + } + else + { + try + { + vBuf.append("#" + bytesToString(Hex.encode(value.toASN1Primitive().getEncoded(ASN1Encoding.DER)))); + } + catch (IOException e) + { + throw new IllegalArgumentException("Other value has no encoded form"); + } + } + + int end = vBuf.length(); + int index = 0; + + if (vBuf.length() >= 2 && vBuf.charAt(0) == '\\' && vBuf.charAt(1) == '#') + { + index += 2; + } + + while (index != end) + { + if ((vBuf.charAt(index) == ',') + || (vBuf.charAt(index) == '"') + || (vBuf.charAt(index) == '\\') + || (vBuf.charAt(index) == '+') + || (vBuf.charAt(index) == '=') + || (vBuf.charAt(index) == '<') + || (vBuf.charAt(index) == '>') + || (vBuf.charAt(index) == ';')) + { + vBuf.insert(index, "\\"); + index++; + end++; + } + + index++; + } + + return vBuf.toString(); + } + + private static String bytesToString( + byte[] data) + { + char[] cs = new char[data.length]; + + for (int i = 0; i != cs.length; i++) + { + cs[i] = (char)(data[i] & 0xff); + } + + return new String(cs); + } + + public static String canonicalize(String s) + { + String value = Strings.toLowerCase(s.trim()); + + if (value.length() > 0 && value.charAt(0) == '#') + { + ASN1Primitive obj = decodeObject(value); + + if (obj instanceof ASN1String) + { + value = Strings.toLowerCase(((ASN1String)obj).getString().trim()); + } + } + + value = stripInternalSpaces(value); + + return value; + } + + private static ASN1Primitive decodeObject(String oValue) + { + try + { + return ASN1Primitive.fromByteArray(Hex.decode(oValue.substring(1))); + } + catch (IOException e) + { + throw new IllegalStateException("unknown encoding in name: " + e); + } + } + + public static String stripInternalSpaces( + String str) + { + StringBuffer res = new StringBuffer(); + + if (str.length() != 0) + { + char c1 = str.charAt(0); + + res.append(c1); + + for (int k = 1; k < str.length(); k++) + { + char c2 = str.charAt(k); + if (!(c1 == ' ' && c2 == ' ')) + { + res.append(c2); + } + c1 = c2; + } + } + + return res.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java b/common/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java new file mode 100644 index 0000000..63f1a25 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/style/RFC4519Style.java @@ -0,0 +1,443 @@ +package org.bouncycastle.asn1.x500.style; + +import java.io.IOException; +import java.util.Hashtable; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DERPrintableString; +import org.bouncycastle.asn1.DERUTF8String; +import org.bouncycastle.asn1.x500.AttributeTypeAndValue; +import org.bouncycastle.asn1.x500.RDN; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x500.X500NameStyle; + +public class RFC4519Style + implements X500NameStyle +{ + public static final X500NameStyle INSTANCE = new RFC4519Style(); + + public static final ASN1ObjectIdentifier businessCategory = new ASN1ObjectIdentifier("2.5.4.15"); + public static final ASN1ObjectIdentifier c = new ASN1ObjectIdentifier("2.5.4.6"); + public static final ASN1ObjectIdentifier cn = new ASN1ObjectIdentifier("2.5.4.3"); + public static final ASN1ObjectIdentifier dc = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25"); + public static final ASN1ObjectIdentifier description = new ASN1ObjectIdentifier("2.5.4.13"); + public static final ASN1ObjectIdentifier destinationIndicator = new ASN1ObjectIdentifier("2.5.4.27"); + public static final ASN1ObjectIdentifier distinguishedName = new ASN1ObjectIdentifier("2.5.4.49"); + public static final ASN1ObjectIdentifier dnQualifier = new ASN1ObjectIdentifier("2.5.4.46"); + public static final ASN1ObjectIdentifier enhancedSearchGuide = new ASN1ObjectIdentifier("2.5.4.47"); + public static final ASN1ObjectIdentifier facsimileTelephoneNumber = new ASN1ObjectIdentifier("2.5.4.23"); + public static final ASN1ObjectIdentifier generationQualifier = new ASN1ObjectIdentifier("2.5.4.44"); + public static final ASN1ObjectIdentifier givenName = new ASN1ObjectIdentifier("2.5.4.42"); + public static final ASN1ObjectIdentifier houseIdentifier = new ASN1ObjectIdentifier("2.5.4.51"); + public static final ASN1ObjectIdentifier initials = new ASN1ObjectIdentifier("2.5.4.43"); + public static final ASN1ObjectIdentifier internationalISDNNumber = new ASN1ObjectIdentifier("2.5.4.25"); + public static final ASN1ObjectIdentifier l = new ASN1ObjectIdentifier("2.5.4.7"); + public static final ASN1ObjectIdentifier member = new ASN1ObjectIdentifier("2.5.4.31"); + public static final ASN1ObjectIdentifier name = new ASN1ObjectIdentifier("2.5.4.41"); + public static final ASN1ObjectIdentifier o = new ASN1ObjectIdentifier("2.5.4.10"); + public static final ASN1ObjectIdentifier ou = new ASN1ObjectIdentifier("2.5.4.11"); + public static final ASN1ObjectIdentifier owner = new ASN1ObjectIdentifier("2.5.4.32"); + public static final ASN1ObjectIdentifier physicalDeliveryOfficeName = new ASN1ObjectIdentifier("2.5.4.19"); + public static final ASN1ObjectIdentifier postalAddress = new ASN1ObjectIdentifier("2.5.4.16"); + public static final ASN1ObjectIdentifier postalCode = new ASN1ObjectIdentifier("2.5.4.17"); + public static final ASN1ObjectIdentifier postOfficeBox = new ASN1ObjectIdentifier("2.5.4.18"); + public static final ASN1ObjectIdentifier preferredDeliveryMethod = new ASN1ObjectIdentifier("2.5.4.28"); + public static final ASN1ObjectIdentifier registeredAddress = new ASN1ObjectIdentifier("2.5.4.26"); + public static final ASN1ObjectIdentifier roleOccupant = new ASN1ObjectIdentifier("2.5.4.33"); + public static final ASN1ObjectIdentifier searchGuide = new ASN1ObjectIdentifier("2.5.4.14"); + public static final ASN1ObjectIdentifier seeAlso = new ASN1ObjectIdentifier("2.5.4.34"); + public static final ASN1ObjectIdentifier serialNumber = new ASN1ObjectIdentifier("2.5.4.5"); + public static final ASN1ObjectIdentifier sn = new ASN1ObjectIdentifier("2.5.4.4"); + public static final ASN1ObjectIdentifier st = new ASN1ObjectIdentifier("2.5.4.8"); + public static final ASN1ObjectIdentifier street = new ASN1ObjectIdentifier("2.5.4.9"); + public static final ASN1ObjectIdentifier telephoneNumber = new ASN1ObjectIdentifier("2.5.4.20"); + public static final ASN1ObjectIdentifier teletexTerminalIdentifier = new ASN1ObjectIdentifier("2.5.4.22"); + public static final ASN1ObjectIdentifier telexNumber = new ASN1ObjectIdentifier("2.5.4.21"); + public static final ASN1ObjectIdentifier title = new ASN1ObjectIdentifier("2.5.4.12"); + public static final ASN1ObjectIdentifier uid = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1"); + public static final ASN1ObjectIdentifier uniqueMember = new ASN1ObjectIdentifier("2.5.4.50"); + public static final ASN1ObjectIdentifier userPassword = new ASN1ObjectIdentifier("2.5.4.35"); + public static final ASN1ObjectIdentifier x121Address = new ASN1ObjectIdentifier("2.5.4.24"); + public static final ASN1ObjectIdentifier x500UniqueIdentifier = new ASN1ObjectIdentifier("2.5.4.45"); + + /** + * default look up table translating OID values into their common symbols following + * the convention in RFC 2253 with a few extras + */ + private static final Hashtable DefaultSymbols = new Hashtable(); + + /** + * look up table translating common symbols into their OIDS. + */ + private static final Hashtable DefaultLookUp = new Hashtable(); + + static + { + DefaultSymbols.put(businessCategory, "businessCategory"); + DefaultSymbols.put(c, "c"); + DefaultSymbols.put(cn, "cn"); + DefaultSymbols.put(dc, "dc"); + DefaultSymbols.put(description, "description"); + DefaultSymbols.put(destinationIndicator, "destinationIndicator"); + DefaultSymbols.put(distinguishedName, "distinguishedName"); + DefaultSymbols.put(dnQualifier, "dnQualifier"); + DefaultSymbols.put(enhancedSearchGuide, "enhancedSearchGuide"); + DefaultSymbols.put(facsimileTelephoneNumber, "facsimileTelephoneNumber"); + DefaultSymbols.put(generationQualifier, "generationQualifier"); + DefaultSymbols.put(givenName, "givenName"); + DefaultSymbols.put(houseIdentifier, "houseIdentifier"); + DefaultSymbols.put(initials, "initials"); + DefaultSymbols.put(internationalISDNNumber, "internationalISDNNumber"); + DefaultSymbols.put(l, "l"); + DefaultSymbols.put(member, "member"); + DefaultSymbols.put(name, "name"); + DefaultSymbols.put(o, "o"); + DefaultSymbols.put(ou, "ou"); + DefaultSymbols.put(owner, "owner"); + DefaultSymbols.put(physicalDeliveryOfficeName, "physicalDeliveryOfficeName"); + DefaultSymbols.put(postalAddress, "postalAddress"); + DefaultSymbols.put(postalCode, "postalCode"); + DefaultSymbols.put(postOfficeBox, "postOfficeBox"); + DefaultSymbols.put(preferredDeliveryMethod, "preferredDeliveryMethod"); + DefaultSymbols.put(registeredAddress, "registeredAddress"); + DefaultSymbols.put(roleOccupant, "roleOccupant"); + DefaultSymbols.put(searchGuide, "searchGuide"); + DefaultSymbols.put(seeAlso, "seeAlso"); + DefaultSymbols.put(serialNumber, "serialNumber"); + DefaultSymbols.put(sn, "sn"); + DefaultSymbols.put(st, "st"); + DefaultSymbols.put(street, "street"); + DefaultSymbols.put(telephoneNumber, "telephoneNumber"); + DefaultSymbols.put(teletexTerminalIdentifier, "teletexTerminalIdentifier"); + DefaultSymbols.put(telexNumber, "telexNumber"); + DefaultSymbols.put(title, "title"); + DefaultSymbols.put(uid, "uid"); + DefaultSymbols.put(uniqueMember, "uniqueMember"); + DefaultSymbols.put(userPassword, "userPassword"); + DefaultSymbols.put(x121Address, "x121Address"); + DefaultSymbols.put(x500UniqueIdentifier, "x500UniqueIdentifier"); + + DefaultLookUp.put("businesscategory", businessCategory); + DefaultLookUp.put("c", c); + DefaultLookUp.put("cn", cn); + DefaultLookUp.put("dc", dc); + DefaultLookUp.put("description", description); + DefaultLookUp.put("destinationindicator", destinationIndicator); + DefaultLookUp.put("distinguishedname", distinguishedName); + DefaultLookUp.put("dnqualifier", dnQualifier); + DefaultLookUp.put("enhancedsearchguide", enhancedSearchGuide); + DefaultLookUp.put("facsimiletelephonenumber", facsimileTelephoneNumber); + DefaultLookUp.put("generationqualifier", generationQualifier); + DefaultLookUp.put("givenname", givenName); + DefaultLookUp.put("houseidentifier", houseIdentifier); + DefaultLookUp.put("initials", initials); + DefaultLookUp.put("internationalisdnnumber", internationalISDNNumber); + DefaultLookUp.put("l", l); + DefaultLookUp.put("member", member); + DefaultLookUp.put("name", name); + DefaultLookUp.put("o", o); + DefaultLookUp.put("ou", ou); + DefaultLookUp.put("owner", owner); + DefaultLookUp.put("physicaldeliveryofficename", physicalDeliveryOfficeName); + DefaultLookUp.put("postaladdress", postalAddress); + DefaultLookUp.put("postalcode", postalCode); + DefaultLookUp.put("postofficebox", postOfficeBox); + DefaultLookUp.put("preferreddeliverymethod", preferredDeliveryMethod); + DefaultLookUp.put("registeredaddress", registeredAddress); + DefaultLookUp.put("roleoccupant", roleOccupant); + DefaultLookUp.put("searchguide", searchGuide); + DefaultLookUp.put("seealso", seeAlso); + DefaultLookUp.put("serialnumber", serialNumber); + DefaultLookUp.put("sn", sn); + DefaultLookUp.put("st", st); + DefaultLookUp.put("street", street); + DefaultLookUp.put("telephonenumber", telephoneNumber); + DefaultLookUp.put("teletexterminalidentifier", teletexTerminalIdentifier); + DefaultLookUp.put("telexnumber", telexNumber); + DefaultLookUp.put("title", title); + DefaultLookUp.put("uid", uid); + DefaultLookUp.put("uniquemember", uniqueMember); + DefaultLookUp.put("userpassword", userPassword); + DefaultLookUp.put("x121address", x121Address); + DefaultLookUp.put("x500uniqueidentifier", x500UniqueIdentifier); + + // TODO: need to add correct matching for equality comparisons. + } + + protected RFC4519Style() + { + + } + + public ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value) + { + if (value.length() != 0 && value.charAt(0) == '#') + { + try + { + return IETFUtils.valueFromHexString(value, 1); + } + catch (IOException e) + { + throw new RuntimeException("can't recode value for oid " + oid.getId()); + } + } + else + { + if (value.length() != 0 && value.charAt(0) == '\\') + { + value = value.substring(1); + } + if (oid.equals(dc)) + { + return new DERIA5String(value); + } + else if (oid.equals(c) || oid.equals(serialNumber) || oid.equals(dnQualifier) + || oid.equals(telephoneNumber)) + { + return new DERPrintableString(value); + } + } + + return new DERUTF8String(value); + } + + public ASN1ObjectIdentifier attrNameToOID(String attrName) + { + return IETFUtils.decodeAttrName(attrName, DefaultLookUp); + } + + public boolean areEqual(X500Name name1, X500Name name2) + { + RDN[] rdns1 = name1.getRDNs(); + RDN[] rdns2 = name2.getRDNs(); + + if (rdns1.length != rdns2.length) + { + return false; + } + + boolean reverse = false; + + if (rdns1[0].getFirst() != null && rdns2[0].getFirst() != null) + { + reverse = !rdns1[0].getFirst().getType().equals(rdns2[0].getFirst().getType()); // guess forward + } + + for (int i = 0; i != rdns1.length; i++) + { + if (!foundMatch(reverse, rdns1[i], rdns2)) + { + return false; + } + } + + return true; + } + + private boolean foundMatch(boolean reverse, RDN rdn, RDN[] possRDNs) + { + if (reverse) + { + for (int i = possRDNs.length - 1; i >= 0; i--) + { + if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) + { + possRDNs[i] = null; + return true; + } + } + } + else + { + for (int i = 0; i != possRDNs.length; i++) + { + if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i])) + { + possRDNs[i] = null; + return true; + } + } + } + + return false; + } + + protected boolean rdnAreEqual(RDN rdn1, RDN rdn2) + { + if (rdn1.isMultiValued()) + { + if (rdn2.isMultiValued()) + { + AttributeTypeAndValue[] atvs1 = rdn1.getTypesAndValues(); + AttributeTypeAndValue[] atvs2 = rdn2.getTypesAndValues(); + + if (atvs1.length != atvs2.length) + { + return false; + } + + for (int i = 0; i != atvs1.length; i++) + { + if (!atvAreEqual(atvs1[i], atvs2[i])) + { + return false; + } + } + } + else + { + return false; + } + } + else + { + if (!rdn2.isMultiValued()) + { + return atvAreEqual(rdn1.getFirst(), rdn2.getFirst()); + } + else + { + return false; + } + } + + return true; + } + + private boolean atvAreEqual(AttributeTypeAndValue atv1, AttributeTypeAndValue atv2) + { + if (atv1 == atv2) + { + return true; + } + + if (atv1 == null) + { + return false; + } + + if (atv2 == null) + { + return false; + } + + ASN1ObjectIdentifier o1 = atv1.getType(); + ASN1ObjectIdentifier o2 = atv2.getType(); + + if (!o1.equals(o2)) + { + return false; + } + + String v1 = IETFUtils.canonicalize(IETFUtils.valueToString(atv1.getValue())); + String v2 = IETFUtils.canonicalize(IETFUtils.valueToString(atv2.getValue())); + + if (!v1.equals(v2)) + { + return false; + } + + return true; + } + + // parse backwards + public RDN[] fromString(String dirName) + { + RDN[] tmp = IETFUtils.rDNsFromString(dirName, this); + RDN[] res = new RDN[tmp.length]; + + for (int i = 0; i != tmp.length; i++) + { + res[res.length - i - 1] = tmp[i]; + } + + return res; + } + + public int calculateHashCode(X500Name name) + { + int hashCodeValue = 0; + RDN[] rdns = name.getRDNs(); + + // this needs to be order independent, like equals + for (int i = 0; i != rdns.length; i++) + { + if (rdns[i].isMultiValued()) + { + AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); + + for (int j = 0; j != atv.length; j++) + { + hashCodeValue ^= atv[j].getType().hashCode(); + hashCodeValue ^= calcHashCode(atv[j].getValue()); + } + } + else + { + hashCodeValue ^= rdns[i].getFirst().getType().hashCode(); + hashCodeValue ^= calcHashCode(rdns[i].getFirst().getValue()); + } + } + + return hashCodeValue; + } + + private int calcHashCode(ASN1Encodable enc) + { + String value = IETFUtils.valueToString(enc); + + value = IETFUtils.canonicalize(value); + + return value.hashCode(); + } + + // convert in reverse + public String toString(X500Name name) + { + StringBuffer buf = new StringBuffer(); + boolean first = true; + + RDN[] rdns = name.getRDNs(); + + for (int i = rdns.length - 1; i >= 0; i--) + { + if (first) + { + first = false; + } + else + { + buf.append(','); + } + + if (rdns[i].isMultiValued()) + { + AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues(); + boolean firstAtv = true; + + for (int j = 0; j != atv.length; j++) + { + if (firstAtv) + { + firstAtv = false; + } + else + { + buf.append('+'); + } + + IETFUtils.appendTypeAndValue(buf, atv[j], DefaultSymbols); + } + } + else + { + IETFUtils.appendTypeAndValue(buf, rdns[i].getFirst(), DefaultSymbols); + } + } + + return buf.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java b/common/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java new file mode 100644 index 0000000..7549a72 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x500/style/X500NameTokenizer.java @@ -0,0 +1,99 @@ +package org.bouncycastle.asn1.x500.style; + +/** + * class for breaking up an X500 Name into it's component tokens, ala + * java.util.StringTokenizer. We need this class as some of the + * lightweight Java environment don't support classes like + * StringTokenizer. + */ +class X500NameTokenizer +{ + private String value; + private int index; + private char seperator; + private StringBuffer buf = new StringBuffer(); + + public X500NameTokenizer( + String oid) + { + this(oid, ','); + } + + public X500NameTokenizer( + String oid, + char seperator) + { + this.value = oid; + this.index = -1; + this.seperator = seperator; + } + + public boolean hasMoreTokens() + { + return (index != value.length()); + } + + public String nextToken() + { + if (index == value.length()) + { + return null; + } + + int end = index + 1; + boolean quoted = false; + boolean escaped = false; + + buf.setLength(0); + + while (end != value.length()) + { + char c = value.charAt(end); + + if (c == '"') + { + if (!escaped) + { + quoted = !quoted; + } + else + { + buf.append(c); + } + escaped = false; + } + else + { + if (escaped || quoted) + { + if (c == '#' && buf.charAt(buf.length() - 1) == '=') + { + buf.append('\\'); + } + else if (c == '+' && seperator != '+') + { + buf.append('\\'); + } + buf.append(c); + escaped = false; + } + else if (c == '\\') + { + escaped = true; + } + else if (c == seperator) + { + break; + } + else + { + buf.append(c); + } + } + end++; + } + + index = end; + return buf.toString().trim(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AccessDescription.java b/common/src/main/java/org/bouncycastle/asn1/x509/AccessDescription.java new file mode 100644 index 0000000..a1aaca4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AccessDescription.java @@ -0,0 +1,98 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * The AccessDescription object. + *

        + * AccessDescription  ::=  SEQUENCE {
        + *       accessMethod          OBJECT IDENTIFIER,
        + *       accessLocation        GeneralName  }
        + * 
        + */ +public class AccessDescription + extends ASN1Object +{ + public final static ASN1ObjectIdentifier id_ad_caIssuers = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.48.2"); + + public final static ASN1ObjectIdentifier id_ad_ocsp = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.48.1"); + + ASN1ObjectIdentifier accessMethod = null; + GeneralName accessLocation = null; + + public static AccessDescription getInstance( + Object obj) + { + if (obj instanceof AccessDescription) + { + return (AccessDescription)obj; + } + else if (obj != null) + { + return new AccessDescription(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private AccessDescription( + ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("wrong number of elements in sequence"); + } + + accessMethod = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); + accessLocation = GeneralName.getInstance(seq.getObjectAt(1)); + } + + /** + * create an AccessDescription with the oid and location provided. + */ + public AccessDescription( + ASN1ObjectIdentifier oid, + GeneralName location) + { + accessMethod = oid; + accessLocation = location; + } + + /** + * + * @return the access method. + */ + public ASN1ObjectIdentifier getAccessMethod() + { + return accessMethod; + } + + /** + * + * @return the access location + */ + public GeneralName getAccessLocation() + { + return accessLocation; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector accessDescription = new ASN1EncodableVector(); + + accessDescription.add(accessMethod); + accessDescription.add(accessLocation); + + return new DERSequence(accessDescription); + } + + public String toString() + { + return ("AccessDescription: Oid(" + this.accessMethod.getId() + ")"); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java b/common/src/main/java/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java new file mode 100644 index 0000000..6f7c3be --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AlgorithmIdentifier.java @@ -0,0 +1,173 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1SequenceParser; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERNull; +import org.bouncycastle.asn1.DERObjectIdentifier; +import org.bouncycastle.asn1.DERSequence; + +public class AlgorithmIdentifier + extends ASN1Object +{ + private ASN1ObjectIdentifier objectId; + private ASN1Encodable parameters; + private boolean parametersDefined = false; + + public static AlgorithmIdentifier getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static AlgorithmIdentifier getInstance( + Object obj) + { + if (obj== null || obj instanceof AlgorithmIdentifier) + { + return (AlgorithmIdentifier)obj; + } + + if (obj instanceof ASN1ObjectIdentifier) + { + return new AlgorithmIdentifier((ASN1ObjectIdentifier)obj); + } + + if (obj instanceof String) + { + return new AlgorithmIdentifier((String)obj); + } + + if (obj instanceof ASN1Sequence || obj instanceof ASN1SequenceParser) + { + return new AlgorithmIdentifier(ASN1Sequence.getInstance(obj)); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public AlgorithmIdentifier( + ASN1ObjectIdentifier objectId) + { + this.objectId = objectId; + } + + /** + * @deprecated use ASN1ObjectIdentifier + * @param objectId + */ + public AlgorithmIdentifier( + String objectId) + { + this.objectId = new ASN1ObjectIdentifier(objectId); + } + + /** + * @deprecated use ASN1ObjectIdentifier + * @param objectId + */ + public AlgorithmIdentifier( + DERObjectIdentifier objectId) + { + this.objectId = new ASN1ObjectIdentifier(objectId.getId()); + } + + /** + * @deprecated use ASN1ObjectIdentifier + * @param objectId + * @param parameters + */ + public AlgorithmIdentifier( + DERObjectIdentifier objectId, + ASN1Encodable parameters) + { + parametersDefined = true; + this.objectId = new ASN1ObjectIdentifier(objectId.getId()); + this.parameters = parameters; + } + + public AlgorithmIdentifier( + ASN1ObjectIdentifier objectId, + ASN1Encodable parameters) + { + parametersDefined = true; + this.objectId = objectId; + this.parameters = parameters; + } + + public AlgorithmIdentifier( + ASN1Sequence seq) + { + if (seq.size() < 1 || seq.size() > 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + objectId = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); + + if (seq.size() == 2) + { + parametersDefined = true; + parameters = seq.getObjectAt(1); + } + else + { + parameters = null; + } + } + + public ASN1ObjectIdentifier getAlgorithm() + { + return new ASN1ObjectIdentifier(objectId.getId()); + } + + /** + * @deprecated use getAlgorithm + * @return + */ + public ASN1ObjectIdentifier getObjectId() + { + return objectId; + } + + public ASN1Encodable getParameters() + { + return parameters; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *      AlgorithmIdentifier ::= SEQUENCE {
        +     *                            algorithm OBJECT IDENTIFIER,
        +     *                            parameters ANY DEFINED BY algorithm OPTIONAL }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(objectId); + + if (parametersDefined) + { + if (parameters != null) + { + v.add(parameters); + } + else + { + v.add(DERNull.INSTANCE); + } + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AttCertIssuer.java b/common/src/main/java/org/bouncycastle/asn1/x509/AttCertIssuer.java new file mode 100644 index 0000000..3064b04 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AttCertIssuer.java @@ -0,0 +1,91 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERTaggedObject; + +public class AttCertIssuer + extends ASN1Object + implements ASN1Choice +{ + ASN1Encodable obj; + ASN1Primitive choiceObj; + + public static AttCertIssuer getInstance( + Object obj) + { + if (obj == null || obj instanceof AttCertIssuer) + { + return (AttCertIssuer)obj; + } + else if (obj instanceof V2Form) + { + return new AttCertIssuer(V2Form.getInstance(obj)); + } + else if (obj instanceof GeneralNames) + { + return new AttCertIssuer((GeneralNames)obj); + } + else if (obj instanceof ASN1TaggedObject) + { + return new AttCertIssuer(V2Form.getInstance((ASN1TaggedObject)obj, false)); + } + else if (obj instanceof ASN1Sequence) + { + return new AttCertIssuer(GeneralNames.getInstance(obj)); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public static AttCertIssuer getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(obj.getObject()); // must be explictly tagged + } + + /** + * Don't use this one if you are trying to be RFC 3281 compliant. + * Use it for v1 attribute certificates only. + * + * @param names our GeneralNames structure + */ + public AttCertIssuer( + GeneralNames names) + { + obj = names; + choiceObj = obj.toASN1Primitive(); + } + + public AttCertIssuer( + V2Form v2Form) + { + obj = v2Form; + choiceObj = new DERTaggedObject(false, 0, obj); + } + + public ASN1Encodable getIssuer() + { + return obj; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  AttCertIssuer ::= CHOICE {
        +     *       v1Form   GeneralNames,  -- MUST NOT be used in this
        +     *                               -- profile
        +     *       v2Form   [0] V2Form     -- v2 only
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + return choiceObj; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java b/common/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java new file mode 100644 index 0000000..e157b66 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AttCertValidityPeriod.java @@ -0,0 +1,84 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERSequence; + +public class AttCertValidityPeriod + extends ASN1Object +{ + DERGeneralizedTime notBeforeTime; + DERGeneralizedTime notAfterTime; + + public static AttCertValidityPeriod getInstance( + Object obj) + { + if (obj instanceof AttCertValidityPeriod) + { + return (AttCertValidityPeriod)obj; + } + else if (obj != null) + { + return new AttCertValidityPeriod(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private AttCertValidityPeriod( + ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + notBeforeTime = DERGeneralizedTime.getInstance(seq.getObjectAt(0)); + notAfterTime = DERGeneralizedTime.getInstance(seq.getObjectAt(1)); + } + + /** + * @param notBeforeTime + * @param notAfterTime + */ + public AttCertValidityPeriod( + DERGeneralizedTime notBeforeTime, + DERGeneralizedTime notAfterTime) + { + this.notBeforeTime = notBeforeTime; + this.notAfterTime = notAfterTime; + } + + public DERGeneralizedTime getNotBeforeTime() + { + return notBeforeTime; + } + + public DERGeneralizedTime getNotAfterTime() + { + return notAfterTime; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  AttCertValidityPeriod  ::= SEQUENCE {
        +     *       notBeforeTime  GeneralizedTime,
        +     *       notAfterTime   GeneralizedTime
        +     *  } 
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(notBeforeTime); + v.add(notAfterTime); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Attribute.java b/common/src/main/java/org/bouncycastle/asn1/x509/Attribute.java new file mode 100644 index 0000000..b8d4bde --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Attribute.java @@ -0,0 +1,93 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.DERSequence; + +public class Attribute + extends ASN1Object +{ + private ASN1ObjectIdentifier attrType; + private ASN1Set attrValues; + + /** + * return an Attribute object from the given object. + * + * @param o the object we want converted. + * @exception IllegalArgumentException if the object cannot be converted. + */ + public static Attribute getInstance( + Object o) + { + if (o instanceof Attribute) + { + return (Attribute)o; + } + + if (o != null) + { + return new Attribute(ASN1Sequence.getInstance(o)); + } + + return null; + } + + private Attribute( + ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + attrType = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); + attrValues = ASN1Set.getInstance(seq.getObjectAt(1)); + } + + public Attribute( + ASN1ObjectIdentifier attrType, + ASN1Set attrValues) + { + this.attrType = attrType; + this.attrValues = attrValues; + } + + public ASN1ObjectIdentifier getAttrType() + { + return new ASN1ObjectIdentifier(attrType.getId()); + } + + public ASN1Encodable[] getAttributeValues() + { + return attrValues.toArray(); + } + + public ASN1Set getAttrValues() + { + return attrValues; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * Attribute ::= SEQUENCE {
        +     *     attrType OBJECT IDENTIFIER,
        +     *     attrValues SET OF AttributeValue
        +     * }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(attrType); + v.add(attrValues); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificate.java b/common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificate.java new file mode 100644 index 0000000..92aa0f7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificate.java @@ -0,0 +1,94 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; + +public class AttributeCertificate + extends ASN1Object +{ + AttributeCertificateInfo acinfo; + AlgorithmIdentifier signatureAlgorithm; + DERBitString signatureValue; + + /** + * @param obj + * @return an AttributeCertificate object + */ + public static AttributeCertificate getInstance(Object obj) + { + if (obj instanceof AttributeCertificate) + { + return (AttributeCertificate)obj; + } + else if (obj != null) + { + return new AttributeCertificate(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public AttributeCertificate( + AttributeCertificateInfo acinfo, + AlgorithmIdentifier signatureAlgorithm, + DERBitString signatureValue) + { + this.acinfo = acinfo; + this.signatureAlgorithm = signatureAlgorithm; + this.signatureValue = signatureValue; + } + + public AttributeCertificate( + ASN1Sequence seq) + { + if (seq.size() != 3) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + this.acinfo = AttributeCertificateInfo.getInstance(seq.getObjectAt(0)); + this.signatureAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); + this.signatureValue = DERBitString.getInstance(seq.getObjectAt(2)); + } + + public AttributeCertificateInfo getAcinfo() + { + return acinfo; + } + + public AlgorithmIdentifier getSignatureAlgorithm() + { + return signatureAlgorithm; + } + + public DERBitString getSignatureValue() + { + return signatureValue; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  AttributeCertificate ::= SEQUENCE {
        +     *       acinfo               AttributeCertificateInfo,
        +     *       signatureAlgorithm   AlgorithmIdentifier,
        +     *       signatureValue       BIT STRING
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(acinfo); + v.add(signatureAlgorithm); + v.add(signatureValue); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java b/common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java new file mode 100644 index 0000000..7b9d450 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AttributeCertificateInfo.java @@ -0,0 +1,166 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; + +public class AttributeCertificateInfo + extends ASN1Object +{ + private ASN1Integer version; + private Holder holder; + private AttCertIssuer issuer; + private AlgorithmIdentifier signature; + private ASN1Integer serialNumber; + private AttCertValidityPeriod attrCertValidityPeriod; + private ASN1Sequence attributes; + private DERBitString issuerUniqueID; + private Extensions extensions; + + public static AttributeCertificateInfo getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static AttributeCertificateInfo getInstance( + Object obj) + { + if (obj instanceof AttributeCertificateInfo) + { + return (AttributeCertificateInfo)obj; + } + else if (obj != null) + { + return new AttributeCertificateInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private AttributeCertificateInfo( + ASN1Sequence seq) + { + if (seq.size() < 7 || seq.size() > 9) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + this.version = ASN1Integer.getInstance(seq.getObjectAt(0)); + this.holder = Holder.getInstance(seq.getObjectAt(1)); + this.issuer = AttCertIssuer.getInstance(seq.getObjectAt(2)); + this.signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(3)); + this.serialNumber = ASN1Integer.getInstance(seq.getObjectAt(4)); + this.attrCertValidityPeriod = AttCertValidityPeriod.getInstance(seq.getObjectAt(5)); + this.attributes = ASN1Sequence.getInstance(seq.getObjectAt(6)); + + for (int i = 7; i < seq.size(); i++) + { + ASN1Encodable obj = (ASN1Encodable)seq.getObjectAt(i); + + if (obj instanceof DERBitString) + { + this.issuerUniqueID = DERBitString.getInstance(seq.getObjectAt(i)); + } + else if (obj instanceof ASN1Sequence || obj instanceof Extensions) + { + this.extensions = Extensions.getInstance(seq.getObjectAt(i)); + } + } + } + + public ASN1Integer getVersion() + { + return version; + } + + public Holder getHolder() + { + return holder; + } + + public AttCertIssuer getIssuer() + { + return issuer; + } + + public AlgorithmIdentifier getSignature() + { + return signature; + } + + public ASN1Integer getSerialNumber() + { + return serialNumber; + } + + public AttCertValidityPeriod getAttrCertValidityPeriod() + { + return attrCertValidityPeriod; + } + + public ASN1Sequence getAttributes() + { + return attributes; + } + + public DERBitString getIssuerUniqueID() + { + return issuerUniqueID; + } + + public Extensions getExtensions() + { + return extensions; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  AttributeCertificateInfo ::= SEQUENCE {
        +     *       version              AttCertVersion -- version is v2,
        +     *       holder               Holder,
        +     *       issuer               AttCertIssuer,
        +     *       signature            AlgorithmIdentifier,
        +     *       serialNumber         CertificateSerialNumber,
        +     *       attrCertValidityPeriod   AttCertValidityPeriod,
        +     *       attributes           SEQUENCE OF Attribute,
        +     *       issuerUniqueID       UniqueIdentifier OPTIONAL,
        +     *       extensions           Extensions OPTIONAL
        +     *  }
        +     *
        +     *  AttCertVersion ::= INTEGER { v2(1) }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(version); + v.add(holder); + v.add(issuer); + v.add(signature); + v.add(serialNumber); + v.add(attrCertValidityPeriod); + v.add(attributes); + + if (issuerUniqueID != null) + { + v.add(issuerUniqueID); + } + + if (extensions != null) + { + v.add(extensions); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java b/common/src/main/java/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java new file mode 100644 index 0000000..3a239ab --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AuthorityInformationAccess.java @@ -0,0 +1,101 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * The AuthorityInformationAccess object. + *
        + * id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
        + *
        + * AuthorityInfoAccessSyntax  ::=
        + *      SEQUENCE SIZE (1..MAX) OF AccessDescription
        + * AccessDescription  ::=  SEQUENCE {
        + *       accessMethod          OBJECT IDENTIFIER,
        + *       accessLocation        GeneralName  }
        + *
        + * id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
        + * id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
        + * id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
        + * 
        + */ +public class AuthorityInformationAccess + extends ASN1Object +{ + private AccessDescription[] descriptions; + + public static AuthorityInformationAccess getInstance( + Object obj) + { + if (obj instanceof AuthorityInformationAccess) + { + return (AuthorityInformationAccess)obj; + } + + if (obj != null) + { + return new AuthorityInformationAccess(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private AuthorityInformationAccess( + ASN1Sequence seq) + { + if (seq.size() < 1) + { + throw new IllegalArgumentException("sequence may not be empty"); + } + + descriptions = new AccessDescription[seq.size()]; + + for (int i = 0; i != seq.size(); i++) + { + descriptions[i] = AccessDescription.getInstance(seq.getObjectAt(i)); + } + } + + /** + * create an AuthorityInformationAccess with the oid and location provided. + */ + public AuthorityInformationAccess( + ASN1ObjectIdentifier oid, + GeneralName location) + { + descriptions = new AccessDescription[1]; + + descriptions[0] = new AccessDescription(oid, location); + } + + + /** + * + * @return the access descriptions contained in this object. + */ + public AccessDescription[] getAccessDescriptions() + { + return descriptions; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + + for (int i = 0; i != descriptions.length; i++) + { + vec.add(descriptions[i]); + } + + return new DERSequence(vec); + } + + public String toString() + { + return ("AuthorityInformationAccess: Oid(" + this.descriptions[0].getAccessMethod().getId() + ")"); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java b/common/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java new file mode 100644 index 0000000..6ee93b1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java @@ -0,0 +1,227 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.SHA1Digest; + +/** + * The AuthorityKeyIdentifier object. + *
        + * id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
        + *
        + *   AuthorityKeyIdentifier ::= SEQUENCE {
        + *      keyIdentifier             [0] IMPLICIT KeyIdentifier           OPTIONAL,
        + *      authorityCertIssuer       [1] IMPLICIT GeneralNames            OPTIONAL,
        + *      authorityCertSerialNumber [2] IMPLICIT CertificateSerialNumber OPTIONAL  }
        + *
        + *   KeyIdentifier ::= OCTET STRING
        + * 
        + * + */ +public class AuthorityKeyIdentifier + extends ASN1Object +{ + ASN1OctetString keyidentifier=null; + GeneralNames certissuer=null; + ASN1Integer certserno=null; + + public static AuthorityKeyIdentifier getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static AuthorityKeyIdentifier getInstance( + Object obj) + { + if (obj instanceof AuthorityKeyIdentifier) + { + return (AuthorityKeyIdentifier)obj; + } + if (obj != null) + { + return new AuthorityKeyIdentifier(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + protected AuthorityKeyIdentifier( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1TaggedObject o = DERTaggedObject.getInstance(e.nextElement()); + + switch (o.getTagNo()) + { + case 0: + this.keyidentifier = ASN1OctetString.getInstance(o, false); + break; + case 1: + this.certissuer = GeneralNames.getInstance(o, false); + break; + case 2: + this.certserno = ASN1Integer.getInstance(o, false); + break; + default: + throw new IllegalArgumentException("illegal tag"); + } + } + } + + /** + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
        +     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
        +     *       publicKey.getEncoded()).readObject());
        +     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
        +     * 
        + * + **/ + public AuthorityKeyIdentifier( + SubjectPublicKeyInfo spki) + { + Digest digest = new SHA1Digest(); + byte[] resBuf = new byte[digest.getDigestSize()]; + + byte[] bytes = spki.getPublicKeyData().getBytes(); + digest.update(bytes, 0, bytes.length); + digest.doFinal(resBuf, 0); + this.keyidentifier = new DEROctetString(resBuf); + } + + /** + * create an AuthorityKeyIdentifier with the GeneralNames tag and + * the serial number provided as well. + */ + public AuthorityKeyIdentifier( + SubjectPublicKeyInfo spki, + GeneralNames name, + BigInteger serialNumber) + { + Digest digest = new SHA1Digest(); + byte[] resBuf = new byte[digest.getDigestSize()]; + + byte[] bytes = spki.getPublicKeyData().getBytes(); + digest.update(bytes, 0, bytes.length); + digest.doFinal(resBuf, 0); + + this.keyidentifier = new DEROctetString(resBuf); + this.certissuer = GeneralNames.getInstance(name.toASN1Primitive()); + this.certserno = new ASN1Integer(serialNumber); + } + + /** + * create an AuthorityKeyIdentifier with the GeneralNames tag and + * the serial number provided. + */ + public AuthorityKeyIdentifier( + GeneralNames name, + BigInteger serialNumber) + { + this.keyidentifier = null; + this.certissuer = GeneralNames.getInstance(name.toASN1Primitive()); + this.certserno = new ASN1Integer(serialNumber); + } + + /** + * create an AuthorityKeyIdentifier with a precomupted key identifier + */ + public AuthorityKeyIdentifier( + byte[] keyIdentifier) + { + this.keyidentifier = new DEROctetString(keyIdentifier); + this.certissuer = null; + this.certserno = null; + } + + /** + * create an AuthorityKeyIdentifier with a precomupted key identifier + * and the GeneralNames tag and the serial number provided as well. + */ + public AuthorityKeyIdentifier( + byte[] keyIdentifier, + GeneralNames name, + BigInteger serialNumber) + { + this.keyidentifier = new DEROctetString(keyIdentifier); + this.certissuer = GeneralNames.getInstance(name.toASN1Primitive()); + this.certserno = new ASN1Integer(serialNumber); + } + + public byte[] getKeyIdentifier() + { + if (keyidentifier != null) + { + return keyidentifier.getOctets(); + } + + return null; + } + + public GeneralNames getAuthorityCertIssuer() + { + return certissuer; + } + + public BigInteger getAuthorityCertSerialNumber() + { + if (certserno != null) + { + return certserno.getValue(); + } + + return null; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (keyidentifier != null) + { + v.add(new DERTaggedObject(false, 0, keyidentifier)); + } + + if (certissuer != null) + { + v.add(new DERTaggedObject(false, 1, certissuer)); + } + + if (certserno != null) + { + v.add(new DERTaggedObject(false, 2, certserno)); + } + + + return new DERSequence(v); + } + + public String toString() + { + return ("AuthorityKeyIdentifier: KeyID(" + this.keyidentifier.getOctets() + ")"); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java b/common/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java new file mode 100644 index 0000000..0212c0e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/BasicConstraints.java @@ -0,0 +1,158 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBoolean; +import org.bouncycastle.asn1.DERSequence; + +public class BasicConstraints + extends ASN1Object +{ + DERBoolean cA = new DERBoolean(false); + ASN1Integer pathLenConstraint = null; + + public static BasicConstraints getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static BasicConstraints getInstance( + Object obj) + { + if (obj instanceof BasicConstraints) + { + return (BasicConstraints)obj; + } + if (obj instanceof X509Extension) + { + return getInstance(X509Extension.convertValueToObject((X509Extension)obj)); + } + if (obj != null) + { + return new BasicConstraints(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private BasicConstraints( + ASN1Sequence seq) + { + if (seq.size() == 0) + { + this.cA = null; + this.pathLenConstraint = null; + } + else + { + if (seq.getObjectAt(0) instanceof DERBoolean) + { + this.cA = DERBoolean.getInstance(seq.getObjectAt(0)); + } + else + { + this.cA = null; + this.pathLenConstraint = ASN1Integer.getInstance(seq.getObjectAt(0)); + } + if (seq.size() > 1) + { + if (this.cA != null) + { + this.pathLenConstraint = ASN1Integer.getInstance(seq.getObjectAt(1)); + } + else + { + throw new IllegalArgumentException("wrong sequence in constructor"); + } + } + } + } + + public BasicConstraints( + boolean cA) + { + if (cA) + { + this.cA = new DERBoolean(true); + } + else + { + this.cA = null; + } + this.pathLenConstraint = null; + } + + /** + * create a cA=true object for the given path length constraint. + * + * @param pathLenConstraint + */ + public BasicConstraints( + int pathLenConstraint) + { + this.cA = new DERBoolean(true); + this.pathLenConstraint = new ASN1Integer(pathLenConstraint); + } + + public boolean isCA() + { + return (cA != null) && cA.isTrue(); + } + + public BigInteger getPathLenConstraint() + { + if (pathLenConstraint != null) + { + return pathLenConstraint.getValue(); + } + + return null; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * BasicConstraints := SEQUENCE {
        +     *    cA                  BOOLEAN DEFAULT FALSE,
        +     *    pathLenConstraint   INTEGER (0..MAX) OPTIONAL
        +     * }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (cA != null) + { + v.add(cA); + } + + if (pathLenConstraint != null) // yes some people actually do this when cA is false... + { + v.add(pathLenConstraint); + } + + return new DERSequence(v); + } + + public String toString() + { + if (pathLenConstraint == null) + { + if (cA == null) + { + return "BasicConstraints: isCa(false)"; + } + return "BasicConstraints: isCa(" + this.isCA() + ")"; + } + return "BasicConstraints: isCa(" + this.isCA() + "), pathLenConstraint = " + pathLenConstraint.getValue(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/CRLDistPoint.java b/common/src/main/java/org/bouncycastle/asn1/x509/CRLDistPoint.java new file mode 100644 index 0000000..1ee6aa5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/CRLDistPoint.java @@ -0,0 +1,100 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class CRLDistPoint + extends ASN1Object +{ + ASN1Sequence seq = null; + + public static CRLDistPoint getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static CRLDistPoint getInstance( + Object obj) + { + if (obj instanceof CRLDistPoint) + { + return (CRLDistPoint)obj; + } + else if (obj != null) + { + return new CRLDistPoint(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private CRLDistPoint( + ASN1Sequence seq) + { + this.seq = seq; + } + + public CRLDistPoint( + DistributionPoint[] points) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + for (int i = 0; i != points.length; i++) + { + v.add(points[i]); + } + + seq = new DERSequence(v); + } + + /** + * Return the distribution points making up the sequence. + * + * @return DistributionPoint[] + */ + public DistributionPoint[] getDistributionPoints() + { + DistributionPoint[] dp = new DistributionPoint[seq.size()]; + + for (int i = 0; i != seq.size(); i++) + { + dp[i] = DistributionPoint.getInstance(seq.getObjectAt(i)); + } + + return dp; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * CRLDistPoint ::= SEQUENCE SIZE {1..MAX} OF DistributionPoint
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + return seq; + } + + public String toString() + { + StringBuffer buf = new StringBuffer(); + String sep = System.getProperty("line.separator"); + + buf.append("CRLDistPoint:"); + buf.append(sep); + DistributionPoint dp[] = getDistributionPoints(); + for (int i = 0; i != dp.length; i++) + { + buf.append(" "); + buf.append(dp[i]); + buf.append(sep); + } + return buf.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/CRLNumber.java b/common/src/main/java/org/bouncycastle/asn1/x509/CRLNumber.java new file mode 100644 index 0000000..bd285fe --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/CRLNumber.java @@ -0,0 +1,54 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; + +/** + * The CRLNumber object. + *
        + * CRLNumber::= INTEGER(0..MAX)
        + * 
        + */ +public class CRLNumber + extends ASN1Object +{ + private BigInteger number; + + public CRLNumber( + BigInteger number) + { + this.number = number; + } + + public BigInteger getCRLNumber() + { + return number; + } + + public String toString() + { + return "CRLNumber: " + getCRLNumber(); + } + + public ASN1Primitive toASN1Primitive() + { + return new ASN1Integer(number); + } + + public static CRLNumber getInstance(Object o) + { + if (o instanceof CRLNumber) + { + return (CRLNumber)o; + } + else if (o != null) + { + return new CRLNumber(ASN1Integer.getInstance(o).getValue()); + } + + return null; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java b/common/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java new file mode 100644 index 0000000..d0a8f2d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/CRLReason.java @@ -0,0 +1,150 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; +import java.util.Hashtable; + +import org.bouncycastle.asn1.ASN1Enumerated; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; + +/** + * The CRLReason enumeration. + *
        + * CRLReason ::= ENUMERATED {
        + *  unspecified             (0),
        + *  keyCompromise           (1),
        + *  cACompromise            (2),
        + *  affiliationChanged      (3),
        + *  superseded              (4),
        + *  cessationOfOperation    (5),
        + *  certificateHold         (6),
        + *  removeFromCRL           (8),
        + *  privilegeWithdrawn      (9),
        + *  aACompromise           (10)
        + * }
        + * 
        + */ +public class CRLReason + extends ASN1Object +{ + /** + * @deprecated use lower case version + */ + public static final int UNSPECIFIED = 0; + /** + * @deprecated use lower case version + */ + public static final int KEY_COMPROMISE = 1; + /** + * @deprecated use lower case version + */ + public static final int CA_COMPROMISE = 2; + /** + * @deprecated use lower case version + */ + public static final int AFFILIATION_CHANGED = 3; + /** + * @deprecated use lower case version + */ + public static final int SUPERSEDED = 4; + /** + * @deprecated use lower case version + */ + public static final int CESSATION_OF_OPERATION = 5; + /** + * @deprecated use lower case version + */ + public static final int CERTIFICATE_HOLD = 6; + /** + * @deprecated use lower case version + */ + public static final int REMOVE_FROM_CRL = 8; + /** + * @deprecated use lower case version + */ + public static final int PRIVILEGE_WITHDRAWN = 9; + /** + * @deprecated use lower case version + */ + public static final int AA_COMPROMISE = 10; + + public static final int unspecified = 0; + public static final int keyCompromise = 1; + public static final int cACompromise = 2; + public static final int affiliationChanged = 3; + public static final int superseded = 4; + public static final int cessationOfOperation = 5; + public static final int certificateHold = 6; + // 7 -> unknown + public static final int removeFromCRL = 8; + public static final int privilegeWithdrawn = 9; + public static final int aACompromise = 10; + + private static final String[] reasonString = + { + "unspecified", "keyCompromise", "cACompromise", "affiliationChanged", + "superseded", "cessationOfOperation", "certificateHold", "unknown", + "removeFromCRL", "privilegeWithdrawn", "aACompromise" + }; + + private static final Hashtable table = new Hashtable(); + + private ASN1Enumerated value; + + public static CRLReason getInstance(Object o) + { + if (o instanceof CRLReason) + { + return (CRLReason)o; + } + else if (o != null) + { + return lookup(ASN1Enumerated.getInstance(o).getValue().intValue()); + } + + return null; + } + + private CRLReason( + int reason) + { + value = new ASN1Enumerated(reason); + } + + public String toString() + { + String str; + int reason = getValue().intValue(); + if (reason < 0 || reason > 10) + { + str = "invalid"; + } + else + { + str = reasonString[reason]; + } + return "CRLReason: " + str; + } + + public BigInteger getValue() + { + return value.getValue(); + } + + public ASN1Primitive toASN1Primitive() + { + return value; + } + + public static CRLReason lookup(int value) + { + Integer idx = new Integer(value); + + if (!table.containsKey(idx)) + { + table.put(idx, new CRLReason(value)); + } + + return (CRLReason)table.get(idx); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/CertPolicyId.java b/common/src/main/java/org/bouncycastle/asn1/x509/CertPolicyId.java new file mode 100644 index 0000000..b5e5436 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/CertPolicyId.java @@ -0,0 +1,20 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + + +/** + * CertPolicyId, used in the CertificatePolicies and PolicyMappings + * X509V3 Extensions. + * + *
        + *     CertPolicyId ::= OBJECT IDENTIFIER
        + * 
        + */ +public class CertPolicyId extends ASN1ObjectIdentifier +{ + public CertPolicyId (String id) + { + super(id); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Certificate.java b/common/src/main/java/org/bouncycastle/asn1/x509/Certificate.java new file mode 100644 index 0000000..4ca14d4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Certificate.java @@ -0,0 +1,131 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * an X509Certificate structure. + *
        + *  Certificate ::= SEQUENCE {
        + *      tbsCertificate          TBSCertificate,
        + *      signatureAlgorithm      AlgorithmIdentifier,
        + *      signature               BIT STRING
        + *  }
        + * 
        + */ +public class Certificate + extends ASN1Object +{ + ASN1Sequence seq; + TBSCertificate tbsCert; + AlgorithmIdentifier sigAlgId; + DERBitString sig; + + public static Certificate getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static Certificate getInstance( + Object obj) + { + if (obj instanceof Certificate) + { + return (Certificate)obj; + } + else if (obj != null) + { + return new Certificate(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private Certificate( + ASN1Sequence seq) + { + this.seq = seq; + + // + // correct x509 certficate + // + if (seq.size() == 3) + { + tbsCert = TBSCertificate.getInstance(seq.getObjectAt(0)); + sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); + + sig = DERBitString.getInstance(seq.getObjectAt(2)); + } + else + { + throw new IllegalArgumentException("sequence wrong size for a certificate"); + } + } + + public TBSCertificate getTBSCertificate() + { + return tbsCert; + } + + public ASN1Integer getVersion() + { + return tbsCert.getVersion(); + } + + public int getVersionNumber() + { + return tbsCert.getVersionNumber(); + } + + public ASN1Integer getSerialNumber() + { + return tbsCert.getSerialNumber(); + } + + public X500Name getIssuer() + { + return tbsCert.getIssuer(); + } + + public Time getStartDate() + { + return tbsCert.getStartDate(); + } + + public Time getEndDate() + { + return tbsCert.getEndDate(); + } + + public X500Name getSubject() + { + return tbsCert.getSubject(); + } + + public SubjectPublicKeyInfo getSubjectPublicKeyInfo() + { + return tbsCert.getSubjectPublicKeyInfo(); + } + + public AlgorithmIdentifier getSignatureAlgorithm() + { + return sigAlgId; + } + + public DERBitString getSignature() + { + return sig; + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/CertificateList.java b/common/src/main/java/org/bouncycastle/asn1/x509/CertificateList.java new file mode 100644 index 0000000..91a37ad --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/CertificateList.java @@ -0,0 +1,127 @@ + +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * PKIX RFC-2459 + * + * The X.509 v2 CRL syntax is as follows. For signature calculation, + * the data that is to be signed is ASN.1 DER encoded. + * + *
        + * CertificateList  ::=  SEQUENCE  {
        + *      tbsCertList          TBSCertList,
        + *      signatureAlgorithm   AlgorithmIdentifier,
        + *      signatureValue       BIT STRING  }
        + * 
        + */ +public class CertificateList + extends ASN1Object +{ + TBSCertList tbsCertList; + AlgorithmIdentifier sigAlgId; + DERBitString sig; + + public static CertificateList getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static CertificateList getInstance( + Object obj) + { + if (obj instanceof CertificateList) + { + return (CertificateList)obj; + } + else if (obj != null) + { + return new CertificateList(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public CertificateList( + ASN1Sequence seq) + { + if (seq.size() == 3) + { + tbsCertList = TBSCertList.getInstance(seq.getObjectAt(0)); + sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); + sig = DERBitString.getInstance(seq.getObjectAt(2)); + } + else + { + throw new IllegalArgumentException("sequence wrong size for CertificateList"); + } + } + + public TBSCertList getTBSCertList() + { + return tbsCertList; + } + + public TBSCertList.CRLEntry[] getRevokedCertificates() + { + return tbsCertList.getRevokedCertificates(); + } + + public Enumeration getRevokedCertificateEnumeration() + { + return tbsCertList.getRevokedCertificateEnumeration(); + } + + public AlgorithmIdentifier getSignatureAlgorithm() + { + return sigAlgId; + } + + public DERBitString getSignature() + { + return sig; + } + + public int getVersionNumber() + { + return tbsCertList.getVersionNumber(); + } + + public X500Name getIssuer() + { + return tbsCertList.getIssuer(); + } + + public Time getThisUpdate() + { + return tbsCertList.getThisUpdate(); + } + + public Time getNextUpdate() + { + return tbsCertList.getNextUpdate(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(tbsCertList); + v.add(sigAlgId); + v.add(sig); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/CertificatePair.java b/common/src/main/java/org/bouncycastle/asn1/x509/CertificatePair.java new file mode 100644 index 0000000..c0622d9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/CertificatePair.java @@ -0,0 +1,169 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * This class helps to support crossCerfificatePairs in a LDAP directory + * according RFC 2587 + * + *
        + *     crossCertificatePairATTRIBUTE::={
        + *       WITH SYNTAX   CertificatePair
        + *       EQUALITY MATCHING RULE certificatePairExactMatch
        + *       ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
        + * 
        + * + *
        The forward elements of the crossCertificatePair attribute of a + * CA's directory entry shall be used to store all, except self-issued + * certificates issued to this CA. Optionally, the reverse elements of the + * crossCertificatePair attribute, of a CA's directory entry may contain a + * subset of certificates issued by this CA to other CAs. When both the forward + * and the reverse elements are present in a single attribute value, issuer name + * in one certificate shall match the subject name in the other and vice versa, + * and the subject public key in one certificate shall be capable of verifying + * the digital signature on the other certificate and vice versa. + * + * When a reverse element is present, the forward element value and the reverse + * element value need not be stored in the same attribute value; in other words, + * they can be stored in either a single attribute value or two attribute + * values.
        + * + *
        + *       CertificatePair ::= SEQUENCE {
        + *         forward        [0]    Certificate OPTIONAL,
        + *         reverse        [1]    Certificate OPTIONAL,
        + *         -- at least one of the pair shall be present -- } 
        + * 
        + */ +public class CertificatePair + extends ASN1Object +{ + private X509CertificateStructure forward; + + private X509CertificateStructure reverse; + + public static CertificatePair getInstance(Object obj) + { + if (obj == null || obj instanceof CertificatePair) + { + return (CertificatePair)obj; + } + + if (obj instanceof ASN1Sequence) + { + return new CertificatePair((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + + obj.getClass().getName()); + } + + /** + * Constructor from ASN1Sequence. + *

        + * The sequence is of type CertificatePair: + *

        + *

        +     *       CertificatePair ::= SEQUENCE {
        +     *         forward        [0]    Certificate OPTIONAL,
        +     *         reverse        [1]    Certificate OPTIONAL,
        +     *         -- at least one of the pair shall be present -- }
        +     * 
        + * + * @param seq The ASN.1 sequence. + */ + private CertificatePair(ASN1Sequence seq) + { + if (seq.size() != 1 && seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement()); + if (o.getTagNo() == 0) + { + forward = X509CertificateStructure.getInstance(o, true); + } + else if (o.getTagNo() == 1) + { + reverse = X509CertificateStructure.getInstance(o, true); + } + else + { + throw new IllegalArgumentException("Bad tag number: " + + o.getTagNo()); + } + } + } + + /** + * Constructor from a given details. + * + * @param forward Certificates issued to this CA. + * @param reverse Certificates issued by this CA to other CAs. + */ + public CertificatePair(X509CertificateStructure forward, X509CertificateStructure reverse) + { + this.forward = forward; + this.reverse = reverse; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *

        + * Returns: + *

        + *

        +     *       CertificatePair ::= SEQUENCE {
        +     *         forward        [0]    Certificate OPTIONAL,
        +     *         reverse        [1]    Certificate OPTIONAL,
        +     *         -- at least one of the pair shall be present -- }
        +     * 
        + * + * @return a ASN1Primitive + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + + if (forward != null) + { + vec.add(new DERTaggedObject(0, forward)); + } + if (reverse != null) + { + vec.add(new DERTaggedObject(1, reverse)); + } + + return new DERSequence(vec); + } + + /** + * @return Returns the forward. + */ + public X509CertificateStructure getForward() + { + return forward; + } + + /** + * @return Returns the reverse. + */ + public X509CertificateStructure getReverse() + { + return reverse; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/CertificatePolicies.java b/common/src/main/java/org/bouncycastle/asn1/x509/CertificatePolicies.java new file mode 100644 index 0000000..e42cefa --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/CertificatePolicies.java @@ -0,0 +1,99 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class CertificatePolicies + extends ASN1Object +{ + private final PolicyInformation[] policyInformation; + + public static CertificatePolicies getInstance( + Object obj) + { + if (obj instanceof CertificatePolicies) + { + return (CertificatePolicies)obj; + } + + if (obj != null) + { + return new CertificatePolicies(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public static CertificatePolicies getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + /** + * Construct a CertificatePolicies object containing one PolicyInformation. + * + * @param name the name to be contained. + */ + public CertificatePolicies( + PolicyInformation name) + { + this.policyInformation = new PolicyInformation[] { name }; + } + + public CertificatePolicies( + PolicyInformation[] policyInformation) + { + this.policyInformation = policyInformation; + } + + private CertificatePolicies( + ASN1Sequence seq) + { + this.policyInformation = new PolicyInformation[seq.size()]; + + for (int i = 0; i != seq.size(); i++) + { + policyInformation[i] = PolicyInformation.getInstance(seq.getObjectAt(i)); + } + } + + public PolicyInformation[] getPolicyInformation() + { + PolicyInformation[] tmp = new PolicyInformation[policyInformation.length]; + + System.arraycopy(policyInformation, 0, tmp, 0, policyInformation.length); + + return tmp; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + return new DERSequence(policyInformation); + } + + public String toString() + { + String p = null; + for (int i = 0; i < policyInformation.length; i++) + { + if (p != null) + { + p += ", "; + } + p += policyInformation[i]; + } + + return "CertificatePolicies: " + p; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java b/common/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java new file mode 100644 index 0000000..1773a5d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/DSAParameter.java @@ -0,0 +1,92 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class DSAParameter + extends ASN1Object +{ + ASN1Integer p, q, g; + + public static DSAParameter getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static DSAParameter getInstance( + Object obj) + { + if(obj == null || obj instanceof DSAParameter) + { + return (DSAParameter)obj; + } + + if(obj instanceof ASN1Sequence) + { + return new DSAParameter((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("Invalid DSAParameter: " + obj.getClass().getName()); + } + + public DSAParameter( + BigInteger p, + BigInteger q, + BigInteger g) + { + this.p = new ASN1Integer(p); + this.q = new ASN1Integer(q); + this.g = new ASN1Integer(g); + } + + public DSAParameter( + ASN1Sequence seq) + { + if (seq.size() != 3) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + Enumeration e = seq.getObjects(); + + p = ASN1Integer.getInstance(e.nextElement()); + q = ASN1Integer.getInstance(e.nextElement()); + g = ASN1Integer.getInstance(e.nextElement()); + } + + public BigInteger getP() + { + return p.getPositiveValue(); + } + + public BigInteger getQ() + { + return q.getPositiveValue(); + } + + public BigInteger getG() + { + return g.getPositiveValue(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(p); + v.add(q); + v.add(g); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/DigestInfo.java b/common/src/main/java/org/bouncycastle/asn1/x509/DigestInfo.java new file mode 100644 index 0000000..fd17f1b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/DigestInfo.java @@ -0,0 +1,86 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; + +/** + * The DigestInfo object. + *
        + * DigestInfo::=SEQUENCE{
        + *          digestAlgorithm  AlgorithmIdentifier,
        + *          digest OCTET STRING }
        + * 
        + */ +public class DigestInfo + extends ASN1Object +{ + private byte[] digest; + private AlgorithmIdentifier algId; + + public static DigestInfo getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static DigestInfo getInstance( + Object obj) + { + if (obj instanceof DigestInfo) + { + return (DigestInfo)obj; + } + else if (obj != null) + { + return new DigestInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public DigestInfo( + AlgorithmIdentifier algId, + byte[] digest) + { + this.digest = digest; + this.algId = algId; + } + + public DigestInfo( + ASN1Sequence obj) + { + Enumeration e = obj.getObjects(); + + algId = AlgorithmIdentifier.getInstance(e.nextElement()); + digest = ASN1OctetString.getInstance(e.nextElement()).getOctets(); + } + + public AlgorithmIdentifier getAlgorithmId() + { + return algId; + } + + public byte[] getDigest() + { + return digest; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(algId); + v.add(new DEROctetString(digest)); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/DisplayText.java b/common/src/main/java/org/bouncycastle/asn1/x509/DisplayText.java new file mode 100644 index 0000000..acebcbe --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/DisplayText.java @@ -0,0 +1,165 @@ + +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1String; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBMPString; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DERUTF8String; +import org.bouncycastle.asn1.DERVisibleString; + +/** + * DisplayText class, used in + * CertificatePolicies X509 V3 extensions (in policy qualifiers). + * + *

        It stores a string in a chosen encoding. + *

        + * DisplayText ::= CHOICE {
        + *      ia5String        IA5String      (SIZE (1..200)),
        + *      visibleString    VisibleString  (SIZE (1..200)),
        + *      bmpString        BMPString      (SIZE (1..200)),
        + *      utf8String       UTF8String     (SIZE (1..200)) }
        + * 
        + * @see PolicyQualifierInfo + * @see PolicyInformation + */ +public class DisplayText + extends ASN1Object + implements ASN1Choice +{ + /** + * Constant corresponding to ia5String encoding. + * + */ + public static final int CONTENT_TYPE_IA5STRING = 0; + /** + * Constant corresponding to bmpString encoding. + * + */ + public static final int CONTENT_TYPE_BMPSTRING = 1; + /** + * Constant corresponding to utf8String encoding. + * + */ + public static final int CONTENT_TYPE_UTF8STRING = 2; + /** + * Constant corresponding to visibleString encoding. + * + */ + public static final int CONTENT_TYPE_VISIBLESTRING = 3; + + /** + * Describe constant DISPLAY_TEXT_MAXIMUM_SIZE here. + * + */ + public static final int DISPLAY_TEXT_MAXIMUM_SIZE = 200; + + int contentType; + ASN1String contents; + + /** + * Creates a new DisplayText instance. + * + * @param type the desired encoding type for the text. + * @param text the text to store. Strings longer than 200 + * characters are truncated. + */ + public DisplayText(int type, String text) + { + if (text.length() > DISPLAY_TEXT_MAXIMUM_SIZE) + { + // RFC3280 limits these strings to 200 chars + // truncate the string + text = text.substring (0, DISPLAY_TEXT_MAXIMUM_SIZE); + } + + contentType = type; + switch (type) + { + case CONTENT_TYPE_IA5STRING: + contents = new DERIA5String(text); + break; + case CONTENT_TYPE_UTF8STRING: + contents = new DERUTF8String(text); + break; + case CONTENT_TYPE_VISIBLESTRING: + contents = new DERVisibleString(text); + break; + case CONTENT_TYPE_BMPSTRING: + contents = new DERBMPString(text); + break; + default: + contents = new DERUTF8String(text); + break; + } + } + + /** + * Creates a new DisplayText instance. + * + * @param text the text to encapsulate. Strings longer than 200 + * characters are truncated. + */ + public DisplayText(String text) + { + // by default use UTF8String + if (text.length() > DISPLAY_TEXT_MAXIMUM_SIZE) + { + text = text.substring(0, DISPLAY_TEXT_MAXIMUM_SIZE); + } + + contentType = CONTENT_TYPE_UTF8STRING; + contents = new DERUTF8String(text); + } + + /** + * Creates a new DisplayText instance. + *

        Useful when reading back a DisplayText class + * from it's ASN1Encodable/DEREncodable form. + * + * @param de a DEREncodable instance. + */ + private DisplayText(ASN1String de) + { + contents = de; + } + + public static DisplayText getInstance(Object obj) + { + if (obj instanceof ASN1String) + { + return new DisplayText((ASN1String)obj); + } + else if (obj == null || obj instanceof DisplayText) + { + return (DisplayText)obj; + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + public static DisplayText getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(obj.getObject()); // must be explicitly tagged + } + + public ASN1Primitive toASN1Primitive() + { + return (ASN1Primitive)contents; + } + + /** + * Returns the stored String object. + * + * @return the stored text as a String. + */ + public String getString() + { + return contents.getString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/DistributionPoint.java b/common/src/main/java/org/bouncycastle/asn1/x509/DistributionPoint.java new file mode 100644 index 0000000..ab73dfb --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/DistributionPoint.java @@ -0,0 +1,158 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * The DistributionPoint object. + *

        + * DistributionPoint ::= SEQUENCE {
        + *      distributionPoint [0] DistributionPointName OPTIONAL,
        + *      reasons           [1] ReasonFlags OPTIONAL,
        + *      cRLIssuer         [2] GeneralNames OPTIONAL
        + * }
        + * 
        + */ +public class DistributionPoint + extends ASN1Object +{ + DistributionPointName distributionPoint; + ReasonFlags reasons; + GeneralNames cRLIssuer; + + public static DistributionPoint getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static DistributionPoint getInstance( + Object obj) + { + if(obj == null || obj instanceof DistributionPoint) + { + return (DistributionPoint)obj; + } + + if(obj instanceof ASN1Sequence) + { + return new DistributionPoint((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("Invalid DistributionPoint: " + obj.getClass().getName()); + } + + public DistributionPoint( + ASN1Sequence seq) + { + for (int i = 0; i != seq.size(); i++) + { + ASN1TaggedObject t = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); + switch (t.getTagNo()) + { + case 0: + distributionPoint = DistributionPointName.getInstance(t, true); + break; + case 1: + reasons = new ReasonFlags(DERBitString.getInstance(t, false)); + break; + case 2: + cRLIssuer = GeneralNames.getInstance(t, false); + } + } + } + + public DistributionPoint( + DistributionPointName distributionPoint, + ReasonFlags reasons, + GeneralNames cRLIssuer) + { + this.distributionPoint = distributionPoint; + this.reasons = reasons; + this.cRLIssuer = cRLIssuer; + } + + public DistributionPointName getDistributionPoint() + { + return distributionPoint; + } + + public ReasonFlags getReasons() + { + return reasons; + } + + public GeneralNames getCRLIssuer() + { + return cRLIssuer; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (distributionPoint != null) + { + // + // as this is a CHOICE it must be explicitly tagged + // + v.add(new DERTaggedObject(0, distributionPoint)); + } + + if (reasons != null) + { + v.add(new DERTaggedObject(false, 1, reasons)); + } + + if (cRLIssuer != null) + { + v.add(new DERTaggedObject(false, 2, cRLIssuer)); + } + + return new DERSequence(v); + } + + public String toString() + { + String sep = System.getProperty("line.separator"); + StringBuffer buf = new StringBuffer(); + buf.append("DistributionPoint: ["); + buf.append(sep); + if (distributionPoint != null) + { + appendObject(buf, sep, "distributionPoint", distributionPoint.toString()); + } + if (reasons != null) + { + appendObject(buf, sep, "reasons", reasons.toString()); + } + if (cRLIssuer != null) + { + appendObject(buf, sep, "cRLIssuer", cRLIssuer.toString()); + } + buf.append("]"); + buf.append(sep); + return buf.toString(); + } + + private void appendObject(StringBuffer buf, String sep, String name, String value) + { + String indent = " "; + + buf.append(indent); + buf.append(name); + buf.append(":"); + buf.append(sep); + buf.append(indent); + buf.append(indent); + buf.append(value); + buf.append(sep); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/DistributionPointName.java b/common/src/main/java/org/bouncycastle/asn1/x509/DistributionPointName.java new file mode 100644 index 0000000..ee06efd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/DistributionPointName.java @@ -0,0 +1,138 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * The DistributionPointName object. + *
        + * DistributionPointName ::= CHOICE {
        + *     fullName                 [0] GeneralNames,
        + *     nameRelativeToCRLIssuer  [1] RDN
        + * }
        + * 
        + */ +public class DistributionPointName + extends ASN1Object + implements ASN1Choice +{ + ASN1Encodable name; + int type; + + public static final int FULL_NAME = 0; + public static final int NAME_RELATIVE_TO_CRL_ISSUER = 1; + + public static DistributionPointName getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1TaggedObject.getInstance(obj, true)); + } + + public static DistributionPointName getInstance( + Object obj) + { + if (obj == null || obj instanceof DistributionPointName) + { + return (DistributionPointName)obj; + } + else if (obj instanceof ASN1TaggedObject) + { + return new DistributionPointName((ASN1TaggedObject)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public DistributionPointName( + int type, + ASN1Encodable name) + { + this.type = type; + this.name = name; + } + + public DistributionPointName( + GeneralNames name) + { + this(FULL_NAME, name); + } + + /** + * Return the tag number applying to the underlying choice. + * + * @return the tag number for this point name. + */ + public int getType() + { + return this.type; + } + + /** + * Return the tagged object inside the distribution point name. + * + * @return the underlying choice item. + */ + public ASN1Encodable getName() + { + return (ASN1Encodable)name; + } + + public DistributionPointName( + ASN1TaggedObject obj) + { + this.type = obj.getTagNo(); + + if (type == 0) + { + this.name = GeneralNames.getInstance(obj, false); + } + else + { + this.name = ASN1Set.getInstance(obj, false); + } + } + + public ASN1Primitive toASN1Primitive() + { + return new DERTaggedObject(false, type, name); + } + + public String toString() + { + String sep = System.getProperty("line.separator"); + StringBuffer buf = new StringBuffer(); + buf.append("DistributionPointName: ["); + buf.append(sep); + if (type == FULL_NAME) + { + appendObject(buf, sep, "fullName", name.toString()); + } + else + { + appendObject(buf, sep, "nameRelativeToCRLIssuer", name.toString()); + } + buf.append("]"); + buf.append(sep); + return buf.toString(); + } + + private void appendObject(StringBuffer buf, String sep, String name, String value) + { + String indent = " "; + + buf.append(indent); + buf.append(name); + buf.append(":"); + buf.append(sep); + buf.append(indent); + buf.append(indent); + buf.append(value); + buf.append(sep); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java b/common/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java new file mode 100644 index 0000000..97f1c54 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/ExtendedKeyUsage.java @@ -0,0 +1,123 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +/** + * The extendedKeyUsage object. + *
        + *      extendedKeyUsage ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
        + * 
        + */ +public class ExtendedKeyUsage + extends ASN1Object +{ + Hashtable usageTable = new Hashtable(); + ASN1Sequence seq; + + public static ExtendedKeyUsage getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static ExtendedKeyUsage getInstance( + Object obj) + { + if (obj instanceof ExtendedKeyUsage) + { + return (ExtendedKeyUsage)obj; + } + + if (obj != null) + { + return new ExtendedKeyUsage(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public ExtendedKeyUsage( + KeyPurposeId usage) + { + this.seq = new DERSequence(usage); + + this.usageTable.put(usage, usage); + } + + public ExtendedKeyUsage( + ASN1Sequence seq) + { + this.seq = seq; + + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + Object o = e.nextElement(); + if (!(o instanceof ASN1ObjectIdentifier)) + { + throw new IllegalArgumentException("Only ASN1ObjectIdentifiers allowed in ExtendedKeyUsage."); + } + this.usageTable.put(o, o); + } + } + + public ExtendedKeyUsage( + Vector usages) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + Enumeration e = usages.elements(); + + while (e.hasMoreElements()) + { + ASN1Primitive o = (ASN1Primitive)e.nextElement(); + + v.add(o); + this.usageTable.put(o, o); + } + + this.seq = new DERSequence(v); + } + + public boolean hasKeyPurposeId( + KeyPurposeId keyPurposeId) + { + return (usageTable.get(keyPurposeId) != null); + } + + /** + * Returns all extended key usages. + * The returned vector contains ASN1ObjectIdentifiers. + * @return A vector with all key purposes. + */ + public Vector getUsages() + { + Vector temp = new Vector(); + for (Enumeration it = usageTable.elements(); it.hasMoreElements();) + { + temp.addElement(it.nextElement()); + } + return temp; + } + + public int size() + { + return usageTable.size(); + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Extension.java b/common/src/main/java/org/bouncycastle/asn1/x509/Extension.java new file mode 100644 index 0000000..e6a06d8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Extension.java @@ -0,0 +1,266 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; + +import org.bouncycastle.asn1.ASN1Boolean; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DEROctetString; + +/** + * an object for the elements in the X.509 V3 extension block. + */ +public class Extension +{ + /** + * Subject Directory Attributes + */ + public static final ASN1ObjectIdentifier subjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9"); + + /** + * Subject Key Identifier + */ + public static final ASN1ObjectIdentifier subjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14"); + + /** + * Key Usage + */ + public static final ASN1ObjectIdentifier keyUsage = new ASN1ObjectIdentifier("2.5.29.15"); + + /** + * Private Key Usage Period + */ + public static final ASN1ObjectIdentifier privateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16"); + + /** + * Subject Alternative Name + */ + public static final ASN1ObjectIdentifier subjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17"); + + /** + * Issuer Alternative Name + */ + public static final ASN1ObjectIdentifier issuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18"); + + /** + * Basic Constraints + */ + public static final ASN1ObjectIdentifier basicConstraints = new ASN1ObjectIdentifier("2.5.29.19"); + + /** + * CRL Number + */ + public static final ASN1ObjectIdentifier cRLNumber = new ASN1ObjectIdentifier("2.5.29.20"); + + /** + * Reason code + */ + public static final ASN1ObjectIdentifier reasonCode = new ASN1ObjectIdentifier("2.5.29.21"); + + /** + * Hold Instruction Code + */ + public static final ASN1ObjectIdentifier instructionCode = new ASN1ObjectIdentifier("2.5.29.23"); + + /** + * Invalidity Date + */ + public static final ASN1ObjectIdentifier invalidityDate = new ASN1ObjectIdentifier("2.5.29.24"); + + /** + * Delta CRL indicator + */ + public static final ASN1ObjectIdentifier deltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27"); + + /** + * Issuing Distribution Point + */ + public static final ASN1ObjectIdentifier issuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28"); + + /** + * Certificate Issuer + */ + public static final ASN1ObjectIdentifier certificateIssuer = new ASN1ObjectIdentifier("2.5.29.29"); + + /** + * Name Constraints + */ + public static final ASN1ObjectIdentifier nameConstraints = new ASN1ObjectIdentifier("2.5.29.30"); + + /** + * CRL Distribution Points + */ + public static final ASN1ObjectIdentifier cRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31"); + + /** + * Certificate Policies + */ + public static final ASN1ObjectIdentifier certificatePolicies = new ASN1ObjectIdentifier("2.5.29.32"); + + /** + * Policy Mappings + */ + public static final ASN1ObjectIdentifier policyMappings = new ASN1ObjectIdentifier("2.5.29.33"); + + /** + * Authority Key Identifier + */ + public static final ASN1ObjectIdentifier authorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35"); + + /** + * Policy Constraints + */ + public static final ASN1ObjectIdentifier policyConstraints = new ASN1ObjectIdentifier("2.5.29.36"); + + /** + * Extended Key Usage + */ + public static final ASN1ObjectIdentifier extendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37"); + + /** + * Freshest CRL + */ + public static final ASN1ObjectIdentifier freshestCRL = new ASN1ObjectIdentifier("2.5.29.46"); + + /** + * Inhibit Any Policy + */ + public static final ASN1ObjectIdentifier inhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54"); + + /** + * Authority Info Access + */ + public static final ASN1ObjectIdentifier authorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1"); + + /** + * Subject Info Access + */ + public static final ASN1ObjectIdentifier subjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11"); + + /** + * Logo Type + */ + public static final ASN1ObjectIdentifier logoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12"); + + /** + * BiometricInfo + */ + public static final ASN1ObjectIdentifier biometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2"); + + /** + * QCStatements + */ + public static final ASN1ObjectIdentifier qCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3"); + + /** + * Audit identity extension in attribute certificates. + */ + public static final ASN1ObjectIdentifier auditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4"); + + /** + * NoRevAvail extension in attribute certificates. + */ + public static final ASN1ObjectIdentifier noRevAvail = new ASN1ObjectIdentifier("2.5.29.56"); + + /** + * TargetInformation extension in attribute certificates. + */ + public static final ASN1ObjectIdentifier targetInformation = new ASN1ObjectIdentifier("2.5.29.55"); + + private ASN1ObjectIdentifier extnId; + + boolean critical; + ASN1OctetString value; + + public Extension( + ASN1ObjectIdentifier extnId, + ASN1Boolean critical, + ASN1OctetString value) + { + this(extnId, critical.isTrue(), value); + } + + public Extension( + ASN1ObjectIdentifier extnId, + boolean critical, + byte[] value) + { + this(extnId, critical, new DEROctetString(value)); + } + + public Extension( + ASN1ObjectIdentifier extnId, + boolean critical, + ASN1OctetString value) + { + this.extnId = extnId; + this.critical = critical; + this.value = value; + } + + public ASN1ObjectIdentifier getExtnId() + { + return extnId; + } + + public boolean isCritical() + { + return critical; + } + + public ASN1OctetString getExtnValue() + { + return value; + } + + public ASN1Encodable getParsedValue() + { + return convertValueToObject(this); + } + + public int hashCode() + { + if (this.isCritical()) + { + return this.getExtnValue().hashCode(); + } + + return ~this.getExtnValue().hashCode(); + } + + public boolean equals( + Object o) + { + if (!(o instanceof Extension)) + { + return false; + } + + Extension other = (Extension)o; + + return other.getExtnValue().equals(this.getExtnValue()) + && (other.isCritical() == this.isCritical()); + } + + /** + * Convert the value of the passed in extension to an object + * @param ext the extension to parse + * @return the object the value string contains + * @exception IllegalArgumentException if conversion is not possible + */ + private static ASN1Primitive convertValueToObject( + Extension ext) + throws IllegalArgumentException + { + try + { + return ASN1Primitive.fromByteArray(ext.getExtnValue().getOctets()); + } + catch (IOException e) + { + throw new IllegalArgumentException("can't convert extension: " + e); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Extensions.java b/common/src/main/java/org/bouncycastle/asn1/x509/Extensions.java new file mode 100644 index 0000000..1b93305 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Extensions.java @@ -0,0 +1,214 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Boolean; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class Extensions + extends ASN1Object +{ + private Hashtable extensions = new Hashtable(); + private Vector ordering = new Vector(); + + public static Extensions getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static Extensions getInstance( + Object obj) + { + if (obj instanceof Extensions) + { + return (Extensions)obj; + } + else if (obj != null) + { + return new Extensions(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor from ASN1Sequence. + * + * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString) + */ + private Extensions( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement()); + + if (s.size() == 3) + { + extensions.put(s.getObjectAt(0), new Extension(ASN1ObjectIdentifier.getInstance(s.getObjectAt(0)), ASN1Boolean.getInstance(s.getObjectAt(1)), ASN1OctetString.getInstance(s.getObjectAt(2)))); + } + else if (s.size() == 2) + { + extensions.put(s.getObjectAt(0), new Extension(ASN1ObjectIdentifier.getInstance(s.getObjectAt(0)), false, ASN1OctetString.getInstance(s.getObjectAt(1)))); + } + else + { + throw new IllegalArgumentException("Bad sequence size: " + s.size()); + } + + ordering.addElement(s.getObjectAt(0)); + } + } + + /** + * Base Constructor + * + * @param extensions an array of extensions. + */ + public Extensions( + Extension[] extensions) + { + for (int i = 0; i != extensions.length; i++) + { + Extension ext = extensions[i]; + + this.ordering.addElement(ext.getExtnId()); + this.extensions.put(ext.getExtnId(), ext); + } + } + + /** + * return an Enumeration of the extension field's object ids. + */ + public Enumeration oids() + { + return ordering.elements(); + } + + /** + * return the extension represented by the object identifier + * passed in. + * + * @return the extension if it's present, null otherwise. + */ + public Extension getExtension( + ASN1ObjectIdentifier oid) + { + return (Extension)extensions.get(oid); + } + + /** + *
        +     *     Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
        +     *
        +     *     Extension         ::=   SEQUENCE {
        +     *        extnId            EXTENSION.&id ({ExtensionSet}),
        +     *        critical          BOOLEAN DEFAULT FALSE,
        +     *        extnValue         OCTET STRING }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + Enumeration e = ordering.elements(); + + while (e.hasMoreElements()) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement(); + Extension ext = (Extension)extensions.get(oid); + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(oid); + + if (ext.isCritical()) + { + v.add(ASN1Boolean.getInstance(true)); + } + + v.add(ext.getExtnValue()); + + vec.add(new DERSequence(v)); + } + + return new DERSequence(vec); + } + + public boolean equivalent( + Extensions other) + { + if (extensions.size() != other.extensions.size()) + { + return false; + } + + Enumeration e1 = extensions.keys(); + + while (e1.hasMoreElements()) + { + Object key = e1.nextElement(); + + if (!extensions.get(key).equals(other.extensions.get(key))) + { + return false; + } + } + + return true; + } + + public ASN1ObjectIdentifier[] getExtensionOIDs() + { + return toOidArray(ordering); + } + + public ASN1ObjectIdentifier[] getNonCriticalExtensionOIDs() + { + return getExtensionOIDs(false); + } + + public ASN1ObjectIdentifier[] getCriticalExtensionOIDs() + { + return getExtensionOIDs(true); + } + + private ASN1ObjectIdentifier[] getExtensionOIDs(boolean isCritical) + { + Vector oidVec = new Vector(); + + for (int i = 0; i != ordering.size(); i++) + { + Object oid = ordering.elementAt(i); + + if (((Extension)extensions.get(oid)).isCritical() == isCritical) + { + oidVec.addElement(oid); + } + } + + return toOidArray(oidVec); + } + + private ASN1ObjectIdentifier[] toOidArray(Vector oidVec) + { + ASN1ObjectIdentifier[] oids = new ASN1ObjectIdentifier[oidVec.size()]; + + for (int i = 0; i != oids.length; i++) + { + oids[i] = (ASN1ObjectIdentifier)oidVec.elementAt(i); + } + return oids; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/ExtensionsGenerator.java b/common/src/main/java/org/bouncycastle/asn1/x509/ExtensionsGenerator.java new file mode 100644 index 0000000..270ef1c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/ExtensionsGenerator.java @@ -0,0 +1,94 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.DEROctetString; + +/** + * Generator for X.509 extensions + */ +public class ExtensionsGenerator +{ + private Hashtable extensions = new Hashtable(); + private Vector extOrdering = new Vector(); + + /** + * Reset the generator + */ + public void reset() + { + extensions = new Hashtable(); + extOrdering = new Vector(); + } + + /** + * Add an extension with the given oid and the passed in value to be included + * in the OCTET STRING associated with the extension. + * + * @param oid OID for the extension. + * @param critical true if critical, false otherwise. + * @param value the ASN.1 object to be included in the extension. + */ + public void addExtension( + ASN1ObjectIdentifier oid, + boolean critical, + ASN1Encodable value) + throws IOException + { + this.addExtension(oid, critical, value.toASN1Primitive().getEncoded(ASN1Encoding.DER)); + } + + /** + * Add an extension with the given oid and the passed in byte array to be wrapped in the + * OCTET STRING associated with the extension. + * + * @param oid OID for the extension. + * @param critical true if critical, false otherwise. + * @param value the byte array to be wrapped. + */ + public void addExtension( + ASN1ObjectIdentifier oid, + boolean critical, + byte[] value) + { + if (extensions.containsKey(oid)) + { + throw new IllegalArgumentException("extension " + oid + " already added"); + } + + extOrdering.addElement(oid); + extensions.put(oid, new Extension(oid, critical, new DEROctetString(value))); + } + + /** + * Return true if there are no extension present in this generator. + * + * @return true if empty, false otherwise + */ + public boolean isEmpty() + { + return extOrdering.isEmpty(); + } + + /** + * Generate an Extensions object based on the current state of the generator. + * + * @return an X09Extensions object. + */ + public Extensions generate() + { + Extension[] exts = new Extension[extOrdering.size()]; + + for (int i = 0; i != extOrdering.size(); i++) + { + exts[i] = (Extension)extensions.get(extOrdering.elementAt(i)); + } + + return new Extensions(exts); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/GeneralName.java b/common/src/main/java/org/bouncycastle/asn1/x509/GeneralName.java new file mode 100644 index 0000000..1829ecd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/GeneralName.java @@ -0,0 +1,439 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; +import java.util.StringTokenizer; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.util.IPAddress; + +/** + * The GeneralName object. + *
        + * GeneralName ::= CHOICE {
        + *      otherName                       [0]     OtherName,
        + *      rfc822Name                      [1]     IA5String,
        + *      dNSName                         [2]     IA5String,
        + *      x400Address                     [3]     ORAddress,
        + *      directoryName                   [4]     Name,
        + *      ediPartyName                    [5]     EDIPartyName,
        + *      uniformResourceIdentifier       [6]     IA5String,
        + *      iPAddress                       [7]     OCTET STRING,
        + *      registeredID                    [8]     OBJECT IDENTIFIER}
        + *
        + * OtherName ::= SEQUENCE {
        + *      type-id    OBJECT IDENTIFIER,
        + *      value      [0] EXPLICIT ANY DEFINED BY type-id }
        + *
        + * EDIPartyName ::= SEQUENCE {
        + *      nameAssigner            [0]     DirectoryString OPTIONAL,
        + *      partyName               [1]     DirectoryString }
        + * 
        + * Name ::= CHOICE { RDNSequence }
        + * 
        + */ +public class GeneralName + extends ASN1Object + implements ASN1Choice +{ + public static final int otherName = 0; + public static final int rfc822Name = 1; + public static final int dNSName = 2; + public static final int x400Address = 3; + public static final int directoryName = 4; + public static final int ediPartyName = 5; + public static final int uniformResourceIdentifier = 6; + public static final int iPAddress = 7; + public static final int registeredID = 8; + + private ASN1Encodable obj; + private int tag; + + /** + * @deprecated use X500Name constructor. + * @param dirName + */ + public GeneralName( + X509Name dirName) + { + this.obj = X500Name.getInstance(dirName); + this.tag = 4; + } + + public GeneralName( + X500Name dirName) + { + this.obj = dirName; + this.tag = 4; + } + + /** + * When the subjectAltName extension contains an Internet mail address, + * the address MUST be included as an rfc822Name. The format of an + * rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822]. + * + * When the subjectAltName extension contains a domain name service + * label, the domain name MUST be stored in the dNSName (an IA5String). + * The name MUST be in the "preferred name syntax," as specified by RFC + * 1034 [RFC 1034]. + * + * When the subjectAltName extension contains a URI, the name MUST be + * stored in the uniformResourceIdentifier (an IA5String). The name MUST + * be a non-relative URL, and MUST follow the URL syntax and encoding + * rules specified in [RFC 1738]. The name must include both a scheme + * (e.g., "http" or "ftp") and a scheme-specific-part. The scheme- + * specific-part must include a fully qualified domain name or IP + * address as the host. + * + * When the subjectAltName extension contains a iPAddress, the address + * MUST be stored in the octet string in "network byte order," as + * specified in RFC 791 [RFC 791]. The least significant bit (LSB) of + * each octet is the LSB of the corresponding byte in the network + * address. For IP Version 4, as specified in RFC 791, the octet string + * MUST contain exactly four octets. For IP Version 6, as specified in + * RFC 1883, the octet string MUST contain exactly sixteen octets [RFC + * 1883]. + */ + public GeneralName( + int tag, + ASN1Encodable name) + { + this.obj = name; + this.tag = tag; + } + + /** + * Create a GeneralName for the given tag from the passed in String. + *

        + * This constructor can handle: + *

          + *
        • rfc822Name + *
        • iPAddress + *
        • directoryName + *
        • dNSName + *
        • uniformResourceIdentifier + *
        • registeredID + *
        + * For x400Address, otherName and ediPartyName there is no common string + * format defined. + *

        + * Note: A directory name can be encoded in different ways into a byte + * representation. Be aware of this if the byte representation is used for + * comparing results. + * + * @param tag tag number + * @param name string representation of name + * @throws IllegalArgumentException if the string encoding is not correct or * not supported. + */ + public GeneralName( + int tag, + String name) + { + this.tag = tag; + + if (tag == rfc822Name || tag == dNSName || tag == uniformResourceIdentifier) + { + this.obj = new DERIA5String(name); + } + else if (tag == registeredID) + { + this.obj = new ASN1ObjectIdentifier(name); + } + else if (tag == directoryName) + { + this.obj = new X500Name(name); + } + else if (tag == iPAddress) + { + byte[] enc = toGeneralNameEncoding(name); + if (enc != null) + { + this.obj = new DEROctetString(enc); + } + else + { + throw new IllegalArgumentException("IP Address is invalid"); + } + } + else + { + throw new IllegalArgumentException("can't process String for tag: " + tag); + } + } + + public static GeneralName getInstance( + Object obj) + { + if (obj == null || obj instanceof GeneralName) + { + return (GeneralName)obj; + } + + if (obj instanceof ASN1TaggedObject) + { + ASN1TaggedObject tagObj = (ASN1TaggedObject)obj; + int tag = tagObj.getTagNo(); + + switch (tag) + { + case otherName: + return new GeneralName(tag, ASN1Sequence.getInstance(tagObj, false)); + case rfc822Name: + return new GeneralName(tag, DERIA5String.getInstance(tagObj, false)); + case dNSName: + return new GeneralName(tag, DERIA5String.getInstance(tagObj, false)); + case x400Address: + throw new IllegalArgumentException("unknown tag: " + tag); + case directoryName: + return new GeneralName(tag, X500Name.getInstance(tagObj, true)); + case ediPartyName: + return new GeneralName(tag, ASN1Sequence.getInstance(tagObj, false)); + case uniformResourceIdentifier: + return new GeneralName(tag, DERIA5String.getInstance(tagObj, false)); + case iPAddress: + return new GeneralName(tag, ASN1OctetString.getInstance(tagObj, false)); + case registeredID: + return new GeneralName(tag, ASN1ObjectIdentifier.getInstance(tagObj, false)); + } + } + + if (obj instanceof byte[]) + { + try + { + return getInstance(ASN1Primitive.fromByteArray((byte[])obj)); + } + catch (IOException e) + { + throw new IllegalArgumentException("unable to parse encoded general name"); + } + } + + throw new IllegalArgumentException("unknown object in getInstance: " + obj.getClass().getName()); + } + + public static GeneralName getInstance( + ASN1TaggedObject tagObj, + boolean explicit) + { + return GeneralName.getInstance(ASN1TaggedObject.getInstance(tagObj, true)); + } + + public int getTagNo() + { + return tag; + } + + public ASN1Encodable getName() + { + return obj; + } + + public String toString() + { + StringBuffer buf = new StringBuffer(); + + buf.append(tag); + buf.append(": "); + switch (tag) + { + case rfc822Name: + case dNSName: + case uniformResourceIdentifier: + buf.append(DERIA5String.getInstance(obj).getString()); + break; + case directoryName: + buf.append(X500Name.getInstance(obj).toString()); + break; + default: + buf.append(obj.toString()); + } + return buf.toString(); + } + + private byte[] toGeneralNameEncoding(String ip) + { + if (IPAddress.isValidIPv6WithNetmask(ip) || IPAddress.isValidIPv6(ip)) + { + int slashIndex = ip.indexOf('/'); + + if (slashIndex < 0) + { + byte[] addr = new byte[16]; + int[] parsedIp = parseIPv6(ip); + copyInts(parsedIp, addr, 0); + + return addr; + } + else + { + byte[] addr = new byte[32]; + int[] parsedIp = parseIPv6(ip.substring(0, slashIndex)); + copyInts(parsedIp, addr, 0); + String mask = ip.substring(slashIndex + 1); + if (mask.indexOf(':') > 0) + { + parsedIp = parseIPv6(mask); + } + else + { + parsedIp = parseMask(mask); + } + copyInts(parsedIp, addr, 16); + + return addr; + } + } + else if (IPAddress.isValidIPv4WithNetmask(ip) || IPAddress.isValidIPv4(ip)) + { + int slashIndex = ip.indexOf('/'); + + if (slashIndex < 0) + { + byte[] addr = new byte[4]; + + parseIPv4(ip, addr, 0); + + return addr; + } + else + { + byte[] addr = new byte[8]; + + parseIPv4(ip.substring(0, slashIndex), addr, 0); + + String mask = ip.substring(slashIndex + 1); + if (mask.indexOf('.') > 0) + { + parseIPv4(mask, addr, 4); + } + else + { + parseIPv4Mask(mask, addr, 4); + } + + return addr; + } + } + + return null; + } + + private void parseIPv4Mask(String mask, byte[] addr, int offset) + { + int maskVal = Integer.parseInt(mask); + + for (int i = 0; i != maskVal; i++) + { + addr[(i / 8) + offset] |= 1 << (7 - (i % 8)); + } + } + + private void parseIPv4(String ip, byte[] addr, int offset) + { + StringTokenizer sTok = new StringTokenizer(ip, "./"); + int index = 0; + + while (sTok.hasMoreTokens()) + { + addr[offset + index++] = (byte)Integer.parseInt(sTok.nextToken()); + } + } + + private int[] parseMask(String mask) + { + int[] res = new int[8]; + int maskVal = Integer.parseInt(mask); + + for (int i = 0; i != maskVal; i++) + { + res[i / 16] |= 1 << (15 - (i % 16)); + } + return res; + } + + private void copyInts(int[] parsedIp, byte[] addr, int offSet) + { + for (int i = 0; i != parsedIp.length; i++) + { + addr[(i * 2) + offSet] = (byte)(parsedIp[i] >> 8); + addr[(i * 2 + 1) + offSet] = (byte)parsedIp[i]; + } + } + + private int[] parseIPv6(String ip) + { + StringTokenizer sTok = new StringTokenizer(ip, ":", true); + int index = 0; + int[] val = new int[8]; + + if (ip.charAt(0) == ':' && ip.charAt(1) == ':') + { + sTok.nextToken(); // skip the first one + } + + int doubleColon = -1; + + while (sTok.hasMoreTokens()) + { + String e = sTok.nextToken(); + + if (e.equals(":")) + { + doubleColon = index; + val[index++] = 0; + } + else + { + if (e.indexOf('.') < 0) + { + val[index++] = Integer.parseInt(e, 16); + if (sTok.hasMoreTokens()) + { + sTok.nextToken(); + } + } + else + { + StringTokenizer eTok = new StringTokenizer(e, "."); + + val[index++] = (Integer.parseInt(eTok.nextToken()) << 8) | Integer.parseInt(eTok.nextToken()); + val[index++] = (Integer.parseInt(eTok.nextToken()) << 8) | Integer.parseInt(eTok.nextToken()); + } + } + } + + if (index != val.length) + { + System.arraycopy(val, doubleColon, val, val.length - (index - doubleColon), index - doubleColon); + for (int i = doubleColon; i != val.length - (index - doubleColon); i++) + { + val[i] = 0; + } + } + + return val; + } + + public ASN1Primitive toASN1Primitive() + { + if (tag == directoryName) // directoryName is explicitly tagged as it is a CHOICE + { + return new DERTaggedObject(true, tag, obj); + } + else + { + return new DERTaggedObject(false, tag, obj); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java b/common/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java new file mode 100644 index 0000000..bd45407 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/GeneralNames.java @@ -0,0 +1,102 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class GeneralNames + extends ASN1Object +{ + private final GeneralName[] names; + + public static GeneralNames getInstance( + Object obj) + { + if (obj instanceof GeneralNames) + { + return (GeneralNames)obj; + } + + if (obj != null) + { + return new GeneralNames(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public static GeneralNames getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + /** + * Construct a GeneralNames object containing one GeneralName. + * + * @param name the name to be contained. + */ + public GeneralNames( + GeneralName name) + { + this.names = new GeneralName[] { name }; + } + + + public GeneralNames( + GeneralName[] names) + { + this.names = names; + } + + private GeneralNames( + ASN1Sequence seq) + { + this.names = new GeneralName[seq.size()]; + + for (int i = 0; i != seq.size(); i++) + { + names[i] = GeneralName.getInstance(seq.getObjectAt(i)); + } + } + + public GeneralName[] getNames() + { + GeneralName[] tmp = new GeneralName[names.length]; + + System.arraycopy(names, 0, tmp, 0, names.length); + + return tmp; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *

        +     * GeneralNames ::= SEQUENCE SIZE {1..MAX} OF GeneralName
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + return new DERSequence(names); + } + + public String toString() + { + StringBuffer buf = new StringBuffer(); + String sep = System.getProperty("line.separator"); + + buf.append("GeneralNames:"); + buf.append(sep); + + for (int i = 0; i != names.length; i++) + { + buf.append(" "); + buf.append(names[i]); + buf.append(sep); + } + return buf.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/GeneralSubtree.java b/common/src/main/java/org/bouncycastle/asn1/x509/GeneralSubtree.java new file mode 100644 index 0000000..2037923 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/GeneralSubtree.java @@ -0,0 +1,218 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * Class for containing a restriction object subtrees in NameConstraints. See + * RFC 3280. + * + *
        + *       
        + *       GeneralSubtree ::= SEQUENCE 
        + *       {
        + *         base                    GeneralName,
        + *         minimum         [0]     BaseDistance DEFAULT 0,
        + *         maximum         [1]     BaseDistance OPTIONAL 
        + *       }
        + * 
        + * + * @see org.bouncycastle.asn1.x509.NameConstraints + * + */ +public class GeneralSubtree + extends ASN1Object +{ + private static final BigInteger ZERO = BigInteger.valueOf(0); + + private GeneralName base; + + private ASN1Integer minimum; + + private ASN1Integer maximum; + + private GeneralSubtree( + ASN1Sequence seq) + { + base = GeneralName.getInstance(seq.getObjectAt(0)); + + switch (seq.size()) + { + case 1: + break; + case 2: + ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(1)); + switch (o.getTagNo()) + { + case 0: + minimum = ASN1Integer.getInstance(o, false); + break; + case 1: + maximum = ASN1Integer.getInstance(o, false); + break; + default: + throw new IllegalArgumentException("Bad tag number: " + + o.getTagNo()); + } + break; + case 3: + { + { + ASN1TaggedObject oMin = ASN1TaggedObject.getInstance(seq.getObjectAt(1)); + if (oMin.getTagNo() != 0) + { + throw new IllegalArgumentException("Bad tag number for 'minimum': " + oMin.getTagNo()); + } + minimum = ASN1Integer.getInstance(oMin, false); + } + + { + ASN1TaggedObject oMax = ASN1TaggedObject.getInstance(seq.getObjectAt(2)); + if (oMax.getTagNo() != 1) + { + throw new IllegalArgumentException("Bad tag number for 'maximum': " + oMax.getTagNo()); + } + maximum = ASN1Integer.getInstance(oMax, false); + } + + break; + } + default: + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + } + + /** + * Constructor from a given details. + * + * According RFC 3280, the minimum and maximum fields are not used with any + * name forms, thus minimum MUST be zero, and maximum MUST be absent. + *

        + * If minimum is null, zero is assumed, if + * maximum is null, maximum is absent. + * + * @param base + * A restriction. + * @param minimum + * Minimum + * + * @param maximum + * Maximum + */ + public GeneralSubtree( + GeneralName base, + BigInteger minimum, + BigInteger maximum) + { + this.base = base; + if (maximum != null) + { + this.maximum = new ASN1Integer(maximum); + } + if (minimum == null) + { + this.minimum = null; + } + else + { + this.minimum = new ASN1Integer(minimum); + } + } + + public GeneralSubtree(GeneralName base) + { + this(base, null, null); + } + + public static GeneralSubtree getInstance( + ASN1TaggedObject o, + boolean explicit) + { + return new GeneralSubtree(ASN1Sequence.getInstance(o, explicit)); + } + + public static GeneralSubtree getInstance( + Object obj) + { + if (obj == null) + { + return null; + } + + if (obj instanceof GeneralSubtree) + { + return (GeneralSubtree) obj; + } + + return new GeneralSubtree(ASN1Sequence.getInstance(obj)); + } + + public GeneralName getBase() + { + return base; + } + + public BigInteger getMinimum() + { + if (minimum == null) + { + return ZERO; + } + + return minimum.getValue(); + } + + public BigInteger getMaximum() + { + if (maximum == null) + { + return null; + } + + return maximum.getValue(); + } + + /** + * Produce an object suitable for an ASN1OutputStream. + * + * Returns: + * + *

        +     *       GeneralSubtree ::= SEQUENCE 
        +     *       {
        +     *         base                    GeneralName,
        +     *         minimum         [0]     BaseDistance DEFAULT 0,
        +     *         maximum         [1]     BaseDistance OPTIONAL 
        +     *       }
        +     * 
        + * + * @return a ASN1Primitive + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(base); + + if (minimum != null && !minimum.getValue().equals(ZERO)) + { + v.add(new DERTaggedObject(false, 0, minimum)); + } + + if (maximum != null) + { + v.add(new DERTaggedObject(false, 1, maximum)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Holder.java b/common/src/main/java/org/bouncycastle/asn1/x509/Holder.java new file mode 100644 index 0000000..6ae6e35 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Holder.java @@ -0,0 +1,245 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * The Holder object. + *

        + * For an v2 attribute certificate this is: + * + *

        + *            Holder ::= SEQUENCE {
        + *                  baseCertificateID   [0] IssuerSerial OPTIONAL,
        + *                           -- the issuer and serial number of
        + *                           -- the holder's Public Key Certificate
        + *                  entityName          [1] GeneralNames OPTIONAL,
        + *                           -- the name of the claimant or role
        + *                  objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
        + *                           -- used to directly authenticate the holder,
        + *                           -- for example, an executable
        + *            }
        + * 
        + * + *

        + * For an v1 attribute certificate this is: + * + *

        + *         subject CHOICE {
        + *          baseCertificateID [0] IssuerSerial,
        + *          -- associated with a Public Key Certificate
        + *          subjectName [1] GeneralNames },
        + *          -- associated with a name
        + * 
        + */ +public class Holder + extends ASN1Object +{ + public static final int V1_CERTIFICATE_HOLDER = 0; + public static final int V2_CERTIFICATE_HOLDER = 1; + + IssuerSerial baseCertificateID; + + GeneralNames entityName; + + ObjectDigestInfo objectDigestInfo; + + private int version = V2_CERTIFICATE_HOLDER; + + public static Holder getInstance(Object obj) + { + if (obj instanceof Holder) + { + return (Holder)obj; + } + else if (obj instanceof ASN1TaggedObject) + { + return new Holder(ASN1TaggedObject.getInstance(obj)); + } + else if (obj != null) + { + return new Holder(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor for a holder for an V1 attribute certificate. + * + * @param tagObj The ASN.1 tagged holder object. + */ + private Holder(ASN1TaggedObject tagObj) + { + switch (tagObj.getTagNo()) + { + case 0: + baseCertificateID = IssuerSerial.getInstance(tagObj, false); + break; + case 1: + entityName = GeneralNames.getInstance(tagObj, false); + break; + default: + throw new IllegalArgumentException("unknown tag in Holder"); + } + version = 0; + } + + /** + * Constructor for a holder for an V2 attribute certificate. + * + * @param seq The ASN.1 sequence. + */ + private Holder(ASN1Sequence seq) + { + if (seq.size() > 3) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + for (int i = 0; i != seq.size(); i++) + { + ASN1TaggedObject tObj = ASN1TaggedObject.getInstance(seq + .getObjectAt(i)); + + switch (tObj.getTagNo()) + { + case 0: + baseCertificateID = IssuerSerial.getInstance(tObj, false); + break; + case 1: + entityName = GeneralNames.getInstance(tObj, false); + break; + case 2: + objectDigestInfo = ObjectDigestInfo.getInstance(tObj, false); + break; + default: + throw new IllegalArgumentException("unknown tag in Holder"); + } + } + version = 1; + } + + public Holder(IssuerSerial baseCertificateID) + { + this(baseCertificateID, V2_CERTIFICATE_HOLDER); + } + + /** + * Constructs a holder from a IssuerSerial for a V1 or V2 certificate. + * . + * @param baseCertificateID The IssuerSerial. + * @param version The version of the attribute certificate. + */ + public Holder(IssuerSerial baseCertificateID, int version) + { + this.baseCertificateID = baseCertificateID; + this.version = version; + } + + /** + * Returns 1 for V2 attribute certificates or 0 for V1 attribute + * certificates. + * @return The version of the attribute certificate. + */ + public int getVersion() + { + return version; + } + + /** + * Constructs a holder with an entityName for V2 attribute certificates. + * + * @param entityName The entity or subject name. + */ + public Holder(GeneralNames entityName) + { + this(entityName, V2_CERTIFICATE_HOLDER); + } + + /** + * Constructs a holder with an entityName for V2 attribute certificates or + * with a subjectName for V1 attribute certificates. + * + * @param entityName The entity or subject name. + * @param version The version of the attribute certificate. + */ + public Holder(GeneralNames entityName, int version) + { + this.entityName = entityName; + this.version = version; + } + + /** + * Constructs a holder from an object digest info. + * + * @param objectDigestInfo The object digest info object. + */ + public Holder(ObjectDigestInfo objectDigestInfo) + { + this.objectDigestInfo = objectDigestInfo; + } + + public IssuerSerial getBaseCertificateID() + { + return baseCertificateID; + } + + /** + * Returns the entityName for an V2 attribute certificate or the subjectName + * for an V1 attribute certificate. + * + * @return The entityname or subjectname. + */ + public GeneralNames getEntityName() + { + return entityName; + } + + public ObjectDigestInfo getObjectDigestInfo() + { + return objectDigestInfo; + } + + public ASN1Primitive toASN1Primitive() + { + if (version == 1) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (baseCertificateID != null) + { + v.add(new DERTaggedObject(false, 0, baseCertificateID)); + } + + if (entityName != null) + { + v.add(new DERTaggedObject(false, 1, entityName)); + } + + if (objectDigestInfo != null) + { + v.add(new DERTaggedObject(false, 2, objectDigestInfo)); + } + + return new DERSequence(v); + } + else + { + if (entityName != null) + { + return new DERTaggedObject(false, 1, entityName); + } + else + { + return new DERTaggedObject(false, 0, baseCertificateID); + } + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/IetfAttrSyntax.java b/common/src/main/java/org/bouncycastle/asn1/x509/IetfAttrSyntax.java new file mode 100644 index 0000000..5a70140 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/IetfAttrSyntax.java @@ -0,0 +1,189 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.DERUTF8String; + +/** + * Implementation of IetfAttrSyntax as specified by RFC3281. + */ +public class IetfAttrSyntax + extends ASN1Object +{ + public static final int VALUE_OCTETS = 1; + public static final int VALUE_OID = 2; + public static final int VALUE_UTF8 = 3; + GeneralNames policyAuthority = null; + Vector values = new Vector(); + int valueChoice = -1; + + public static IetfAttrSyntax getInstance(Object obj) + { + if (obj instanceof IetfAttrSyntax) + { + return (IetfAttrSyntax)obj; + } + if (obj != null) + { + return new IetfAttrSyntax(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * + */ + private IetfAttrSyntax(ASN1Sequence seq) + { + int i = 0; + + if (seq.getObjectAt(0) instanceof ASN1TaggedObject) + { + policyAuthority = GeneralNames.getInstance(((ASN1TaggedObject)seq.getObjectAt(0)), false); + i++; + } + else if (seq.size() == 2) + { // VOMS fix + policyAuthority = GeneralNames.getInstance(seq.getObjectAt(0)); + i++; + } + + if (!(seq.getObjectAt(i) instanceof ASN1Sequence)) + { + throw new IllegalArgumentException("Non-IetfAttrSyntax encoding"); + } + + seq = (ASN1Sequence)seq.getObjectAt(i); + + for (Enumeration e = seq.getObjects(); e.hasMoreElements();) + { + ASN1Primitive obj = (ASN1Primitive)e.nextElement(); + int type; + + if (obj instanceof ASN1ObjectIdentifier) + { + type = VALUE_OID; + } + else if (obj instanceof DERUTF8String) + { + type = VALUE_UTF8; + } + else if (obj instanceof DEROctetString) + { + type = VALUE_OCTETS; + } + else + { + throw new IllegalArgumentException("Bad value type encoding IetfAttrSyntax"); + } + + if (valueChoice < 0) + { + valueChoice = type; + } + + if (type != valueChoice) + { + throw new IllegalArgumentException("Mix of value types in IetfAttrSyntax"); + } + + values.addElement(obj); + } + } + + public GeneralNames getPolicyAuthority() + { + return policyAuthority; + } + + public int getValueType() + { + return valueChoice; + } + + public Object[] getValues() + { + if (this.getValueType() == VALUE_OCTETS) + { + ASN1OctetString[] tmp = new ASN1OctetString[values.size()]; + + for (int i = 0; i != tmp.length; i++) + { + tmp[i] = (ASN1OctetString)values.elementAt(i); + } + + return tmp; + } + else if (this.getValueType() == VALUE_OID) + { + ASN1ObjectIdentifier[] tmp = new ASN1ObjectIdentifier[values.size()]; + + for (int i = 0; i != tmp.length; i++) + { + tmp[i] = (ASN1ObjectIdentifier)values.elementAt(i); + } + + return tmp; + } + else + { + DERUTF8String[] tmp = new DERUTF8String[values.size()]; + + for (int i = 0; i != tmp.length; i++) + { + tmp[i] = (DERUTF8String)values.elementAt(i); + } + + return tmp; + } + } + + /** + * + *
        +     * 
        +     *  IetfAttrSyntax ::= SEQUENCE {
        +     *    policyAuthority [0] GeneralNames OPTIONAL,
        +     *    values SEQUENCE OF CHOICE {
        +     *      octets OCTET STRING,
        +     *      oid OBJECT IDENTIFIER,
        +     *      string UTF8String
        +     *    }
        +     *  }
        +     *  
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (policyAuthority != null) + { + v.add(new DERTaggedObject(0, policyAuthority)); + } + + ASN1EncodableVector v2 = new ASN1EncodableVector(); + + for (Enumeration i = values.elements(); i.hasMoreElements();) + { + v2.add((ASN1Encodable)i.nextElement()); + } + + v.add(new DERSequence(v2)); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java b/common/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java new file mode 100644 index 0000000..d082a9d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/IssuerSerial.java @@ -0,0 +1,106 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; + +public class IssuerSerial + extends ASN1Object +{ + GeneralNames issuer; + ASN1Integer serial; + DERBitString issuerUID; + + public static IssuerSerial getInstance( + Object obj) + { + if (obj == null || obj instanceof IssuerSerial) + { + return (IssuerSerial)obj; + } + + if (obj instanceof ASN1Sequence) + { + return new IssuerSerial((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + public static IssuerSerial getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public IssuerSerial( + ASN1Sequence seq) + { + if (seq.size() != 2 && seq.size() != 3) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + issuer = GeneralNames.getInstance(seq.getObjectAt(0)); + serial = ASN1Integer.getInstance(seq.getObjectAt(1)); + + if (seq.size() == 3) + { + issuerUID = DERBitString.getInstance(seq.getObjectAt(2)); + } + } + + public IssuerSerial( + GeneralNames issuer, + ASN1Integer serial) + { + this.issuer = issuer; + this.serial = serial; + } + + public GeneralNames getIssuer() + { + return issuer; + } + + public ASN1Integer getSerial() + { + return serial; + } + + public DERBitString getIssuerUID() + { + return issuerUID; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  IssuerSerial  ::=  SEQUENCE {
        +     *       issuer         GeneralNames,
        +     *       serial         CertificateSerialNumber,
        +     *       issuerUID      UniqueIdentifier OPTIONAL
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(issuer); + v.add(serial); + + if (issuerUID != null) + { + v.add(issuerUID); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java b/common/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java new file mode 100644 index 0000000..22ae756 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java @@ -0,0 +1,274 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBoolean; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + *
        + * IssuingDistributionPoint ::= SEQUENCE { 
        + *   distributionPoint          [0] DistributionPointName OPTIONAL, 
        + *   onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE, 
        + *   onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE, 
        + *   onlySomeReasons            [3] ReasonFlags OPTIONAL, 
        + *   indirectCRL                [4] BOOLEAN DEFAULT FALSE,
        + *   onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
        + * 
        + */ +public class IssuingDistributionPoint + extends ASN1Object +{ + private DistributionPointName distributionPoint; + + private boolean onlyContainsUserCerts; + + private boolean onlyContainsCACerts; + + private ReasonFlags onlySomeReasons; + + private boolean indirectCRL; + + private boolean onlyContainsAttributeCerts; + + private ASN1Sequence seq; + + public static IssuingDistributionPoint getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static IssuingDistributionPoint getInstance( + Object obj) + { + if (obj instanceof IssuingDistributionPoint) + { + return (IssuingDistributionPoint)obj; + } + else if (obj != null) + { + return new IssuingDistributionPoint(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor from given details. + * + * @param distributionPoint + * May contain an URI as pointer to most current CRL. + * @param onlyContainsUserCerts Covers revocation information for end certificates. + * @param onlyContainsCACerts Covers revocation information for CA certificates. + * + * @param onlySomeReasons + * Which revocation reasons does this point cover. + * @param indirectCRL + * If true then the CRL contains revocation + * information about certificates ssued by other CAs. + * @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + */ + public IssuingDistributionPoint( + DistributionPointName distributionPoint, + boolean onlyContainsUserCerts, + boolean onlyContainsCACerts, + ReasonFlags onlySomeReasons, + boolean indirectCRL, + boolean onlyContainsAttributeCerts) + { + this.distributionPoint = distributionPoint; + this.indirectCRL = indirectCRL; + this.onlyContainsAttributeCerts = onlyContainsAttributeCerts; + this.onlyContainsCACerts = onlyContainsCACerts; + this.onlyContainsUserCerts = onlyContainsUserCerts; + this.onlySomeReasons = onlySomeReasons; + + ASN1EncodableVector vec = new ASN1EncodableVector(); + if (distributionPoint != null) + { // CHOICE item so explicitly tagged + vec.add(new DERTaggedObject(true, 0, distributionPoint)); + } + if (onlyContainsUserCerts) + { + vec.add(new DERTaggedObject(false, 1, new DERBoolean(true))); + } + if (onlyContainsCACerts) + { + vec.add(new DERTaggedObject(false, 2, new DERBoolean(true))); + } + if (onlySomeReasons != null) + { + vec.add(new DERTaggedObject(false, 3, onlySomeReasons)); + } + if (indirectCRL) + { + vec.add(new DERTaggedObject(false, 4, new DERBoolean(true))); + } + if (onlyContainsAttributeCerts) + { + vec.add(new DERTaggedObject(false, 5, new DERBoolean(true))); + } + + seq = new DERSequence(vec); + } + + /** + * Shorthand Constructor from given details. + * + * @param distributionPoint + * May contain an URI as pointer to most current CRL. + * @param indirectCRL + * If true then the CRL contains revocation + * information about certificates ssued by other CAs. + * @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + */ + public IssuingDistributionPoint( + DistributionPointName distributionPoint, + boolean indirectCRL, + boolean onlyContainsAttributeCerts) + { + this(distributionPoint, false, false, null, indirectCRL, onlyContainsAttributeCerts); + } + + /** + * Constructor from ASN1Sequence + */ + private IssuingDistributionPoint( + ASN1Sequence seq) + { + this.seq = seq; + + for (int i = 0; i != seq.size(); i++) + { + ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); + + switch (o.getTagNo()) + { + case 0: + // CHOICE so explicit + distributionPoint = DistributionPointName.getInstance(o, true); + break; + case 1: + onlyContainsUserCerts = DERBoolean.getInstance(o, false).isTrue(); + break; + case 2: + onlyContainsCACerts = DERBoolean.getInstance(o, false).isTrue(); + break; + case 3: + onlySomeReasons = new ReasonFlags(ReasonFlags.getInstance(o, false)); + break; + case 4: + indirectCRL = DERBoolean.getInstance(o, false).isTrue(); + break; + case 5: + onlyContainsAttributeCerts = DERBoolean.getInstance(o, false).isTrue(); + break; + default: + throw new IllegalArgumentException( + "unknown tag in IssuingDistributionPoint"); + } + } + } + + public boolean onlyContainsUserCerts() + { + return onlyContainsUserCerts; + } + + public boolean onlyContainsCACerts() + { + return onlyContainsCACerts; + } + + public boolean isIndirectCRL() + { + return indirectCRL; + } + + public boolean onlyContainsAttributeCerts() + { + return onlyContainsAttributeCerts; + } + + /** + * @return Returns the distributionPoint. + */ + public DistributionPointName getDistributionPoint() + { + return distributionPoint; + } + + /** + * @return Returns the onlySomeReasons. + */ + public ReasonFlags getOnlySomeReasons() + { + return onlySomeReasons; + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } + + public String toString() + { + String sep = System.getProperty("line.separator"); + StringBuffer buf = new StringBuffer(); + + buf.append("IssuingDistributionPoint: ["); + buf.append(sep); + if (distributionPoint != null) + { + appendObject(buf, sep, "distributionPoint", distributionPoint.toString()); + } + if (onlyContainsUserCerts) + { + appendObject(buf, sep, "onlyContainsUserCerts", booleanToString(onlyContainsUserCerts)); + } + if (onlyContainsCACerts) + { + appendObject(buf, sep, "onlyContainsCACerts", booleanToString(onlyContainsCACerts)); + } + if (onlySomeReasons != null) + { + appendObject(buf, sep, "onlySomeReasons", onlySomeReasons.toString()); + } + if (onlyContainsAttributeCerts) + { + appendObject(buf, sep, "onlyContainsAttributeCerts", booleanToString(onlyContainsAttributeCerts)); + } + if (indirectCRL) + { + appendObject(buf, sep, "indirectCRL", booleanToString(indirectCRL)); + } + buf.append("]"); + buf.append(sep); + return buf.toString(); + } + + private void appendObject(StringBuffer buf, String sep, String name, String value) + { + String indent = " "; + + buf.append(indent); + buf.append(name); + buf.append(":"); + buf.append(sep); + buf.append(indent); + buf.append(indent); + buf.append(value); + buf.append(sep); + } + + private String booleanToString(boolean value) + { + return value ? "true" : "false"; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java b/common/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java new file mode 100644 index 0000000..542a26b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/KeyPurposeId.java @@ -0,0 +1,119 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +/** + * The KeyPurposeId object. + *
        + *     KeyPurposeId ::= OBJECT IDENTIFIER
        + *
        + *     id-kp ::= OBJECT IDENTIFIER { iso(1) identified-organization(3) 
        + *          dod(6) internet(1) security(5) mechanisms(5) pkix(7) 3}
        + *
        + * 
        + */ +public class KeyPurposeId + extends ASN1ObjectIdentifier +{ + private static final String id_kp = "1.3.6.1.5.5.7.3"; + + /** + * Create a KeyPurposeId from an OID string + * + * @param id OID String. E.g. "1.3.6.1.5.5.7.3.1" + */ + public KeyPurposeId( + String id) + { + super(id); + } + + /** + * { 2 5 29 37 0 } + */ + public static final KeyPurposeId anyExtendedKeyUsage = new KeyPurposeId(X509Extensions.ExtendedKeyUsage.getId() + ".0"); + /** + * { id-kp 1 } + */ + public static final KeyPurposeId id_kp_serverAuth = new KeyPurposeId(id_kp + ".1"); + /** + * { id-kp 2 } + */ + public static final KeyPurposeId id_kp_clientAuth = new KeyPurposeId(id_kp + ".2"); + /** + * { id-kp 3 } + */ + public static final KeyPurposeId id_kp_codeSigning = new KeyPurposeId(id_kp + ".3"); + /** + * { id-kp 4 } + */ + public static final KeyPurposeId id_kp_emailProtection = new KeyPurposeId(id_kp + ".4"); + /** + * Usage deprecated by RFC4945 - was { id-kp 5 } + */ + public static final KeyPurposeId id_kp_ipsecEndSystem = new KeyPurposeId(id_kp + ".5"); + /** + * Usage deprecated by RFC4945 - was { id-kp 6 } + */ + public static final KeyPurposeId id_kp_ipsecTunnel = new KeyPurposeId(id_kp + ".6"); + /** + * Usage deprecated by RFC4945 - was { idkp 7 } + */ + public static final KeyPurposeId id_kp_ipsecUser = new KeyPurposeId(id_kp + ".7"); + /** + * { id-kp 8 } + */ + public static final KeyPurposeId id_kp_timeStamping = new KeyPurposeId(id_kp + ".8"); + /** + * { id-kp 9 } + */ + public static final KeyPurposeId id_kp_OCSPSigning = new KeyPurposeId(id_kp + ".9"); + /** + * { id-kp 10 } + */ + public static final KeyPurposeId id_kp_dvcs = new KeyPurposeId(id_kp + ".10"); + /** + * { id-kp 11 } + */ + public static final KeyPurposeId id_kp_sbgpCertAAServerAuth = new KeyPurposeId(id_kp + ".11"); + /** + * { id-kp 12 } + */ + public static final KeyPurposeId id_kp_scvp_responder = new KeyPurposeId(id_kp + ".12"); + /** + * { id-kp 13 } + */ + public static final KeyPurposeId id_kp_eapOverPPP = new KeyPurposeId(id_kp + ".13"); + /** + * { id-kp 14 } + */ + public static final KeyPurposeId id_kp_eapOverLAN = new KeyPurposeId(id_kp + ".14"); + /** + * { id-kp 15 } + */ + public static final KeyPurposeId id_kp_scvpServer = new KeyPurposeId(id_kp + ".15"); + /** + * { id-kp 16 } + */ + public static final KeyPurposeId id_kp_scvpClient = new KeyPurposeId(id_kp + ".16"); + /** + * { id-kp 17 } + */ + public static final KeyPurposeId id_kp_ipsecIKE = new KeyPurposeId(id_kp + ".17"); + /** + * { id-kp 18 } + */ + public static final KeyPurposeId id_kp_capwapAC = new KeyPurposeId(id_kp + ".18"); + /** + * { id-kp 19 } + */ + public static final KeyPurposeId id_kp_capwapWTP = new KeyPurposeId(id_kp + ".19"); + + // + // microsoft key purpose ids + // + /** + * { 1 3 6 1 4 1 311 20 2 2 } + */ + public static final KeyPurposeId id_kp_smartcardlogon = new KeyPurposeId("1.3.6.1.4.1.311.20.2.2"); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java b/common/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java new file mode 100644 index 0000000..3ffd94b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/KeyUsage.java @@ -0,0 +1,77 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.DERBitString; + +/** + * The KeyUsage object. + *
        + *    id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
        + *
        + *    KeyUsage ::= BIT STRING {
        + *         digitalSignature        (0),
        + *         nonRepudiation          (1),
        + *         keyEncipherment         (2),
        + *         dataEncipherment        (3),
        + *         keyAgreement            (4),
        + *         keyCertSign             (5),
        + *         cRLSign                 (6),
        + *         encipherOnly            (7),
        + *         decipherOnly            (8) }
        + * 
        + */ +public class KeyUsage + extends DERBitString +{ + public static final int digitalSignature = (1 << 7); + public static final int nonRepudiation = (1 << 6); + public static final int keyEncipherment = (1 << 5); + public static final int dataEncipherment = (1 << 4); + public static final int keyAgreement = (1 << 3); + public static final int keyCertSign = (1 << 2); + public static final int cRLSign = (1 << 1); + public static final int encipherOnly = (1 << 0); + public static final int decipherOnly = (1 << 15); + + public static DERBitString getInstance(Object obj) // needs to be DERBitString for other VMs + { + if (obj instanceof KeyUsage) + { + return (KeyUsage)obj; + } + + if (obj instanceof X509Extension) + { + return new KeyUsage(DERBitString.getInstance(X509Extension.convertValueToObject((X509Extension)obj))); + } + + return new KeyUsage(DERBitString.getInstance(obj)); + } + + /** + * Basic constructor. + * + * @param usage - the bitwise OR of the Key Usage flags giving the + * allowed uses for the key. + * e.g. (KeyUsage.keyEncipherment | KeyUsage.dataEncipherment) + */ + public KeyUsage( + int usage) + { + super(getBytes(usage), getPadBits(usage)); + } + + public KeyUsage( + DERBitString usage) + { + super(usage.getBytes(), usage.getPadBits()); + } + + public String toString() + { + if (data.length == 1) + { + return "KeyUsage: 0x" + Integer.toHexString(data[0] & 0xff); + } + return "KeyUsage: 0x" + Integer.toHexString((data[1] & 0xff) << 8 | (data[0] & 0xff)); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java b/common/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java new file mode 100644 index 0000000..02096f2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/NameConstraints.java @@ -0,0 +1,118 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +public class NameConstraints + extends ASN1Object +{ + private ASN1Sequence permitted, excluded; + + public static NameConstraints getInstance(Object obj) + { + if (obj instanceof NameConstraints) + { + return (NameConstraints)obj; + } + if (obj != null) + { + return new NameConstraints(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private NameConstraints(ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + while (e.hasMoreElements()) + { + ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement()); + switch (o.getTagNo()) + { + case 0: + permitted = ASN1Sequence.getInstance(o, false); + break; + case 1: + excluded = ASN1Sequence.getInstance(o, false); + break; + } + } + } + + /** + * Constructor from a given details. + * + *

        + * permitted and excluded are Vectors of GeneralSubtree objects. + * + * @param permitted + * Permitted subtrees + * @param excluded + * Excludes subtrees + */ + public NameConstraints( + Vector permitted, + Vector excluded) + { + if (permitted != null) + { + this.permitted = createSequence(permitted); + } + if (excluded != null) + { + this.excluded = createSequence(excluded); + } + } + + private DERSequence createSequence(Vector subtree) + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + Enumeration e = subtree.elements(); + while (e.hasMoreElements()) + { + vec.add((GeneralSubtree)e.nextElement()); + } + + return new DERSequence(vec); + } + + public ASN1Sequence getPermittedSubtrees() + { + return permitted; + } + + public ASN1Sequence getExcludedSubtrees() + { + return excluded; + } + + /* + * NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees + * OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (permitted != null) + { + v.add(new DERTaggedObject(false, 0, permitted)); + } + + if (excluded != null) + { + v.add(new DERTaggedObject(false, 1, excluded)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/NoticeReference.java b/common/src/main/java/org/bouncycastle/asn1/x509/NoticeReference.java new file mode 100644 index 0000000..9afaae8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/NoticeReference.java @@ -0,0 +1,170 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; +import java.util.Enumeration; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * NoticeReference class, used in + * CertificatePolicies X509 V3 extensions + * (in policy qualifiers). + * + *

        + *  NoticeReference ::= SEQUENCE {
        + *      organization     DisplayText,
        + *      noticeNumbers    SEQUENCE OF INTEGER }
        + *
        + * 
        + * + * @see PolicyQualifierInfo + * @see PolicyInformation + */ +public class NoticeReference + extends ASN1Object +{ + private DisplayText organization; + private ASN1Sequence noticeNumbers; + + private static ASN1EncodableVector convertVector(Vector numbers) + { + ASN1EncodableVector av = new ASN1EncodableVector(); + + Enumeration it = numbers.elements(); + + while (it.hasMoreElements()) + { + Object o = it.nextElement(); + ASN1Integer di; + + if (o instanceof BigInteger) + { + di = new ASN1Integer((BigInteger)o); + } + else if (o instanceof Integer) + { + di = new ASN1Integer(((Integer)o).intValue()); + } + else + { + throw new IllegalArgumentException(); + } + + av.add(di); + } + return av; + } + + /** + * Creates a new NoticeReference instance. + * + * @param organization a String value + * @param numbers a Vector value + */ + public NoticeReference( + String organization, + Vector numbers) + { + this(organization, convertVector(numbers)); + } + + /** + * Creates a new NoticeReference instance. + * + * @param organization a String value + * @param noticeNumbers an ASN1EncodableVector value + */ + public NoticeReference( + String organization, + ASN1EncodableVector noticeNumbers) + { + this(new DisplayText(organization), noticeNumbers); + } + + /** + * Creates a new NoticeReference instance. + * + * @param organization displayText + * @param noticeNumbers an ASN1EncodableVector value + */ + public NoticeReference( + DisplayText organization, + ASN1EncodableVector noticeNumbers) + { + this.organization = organization; + this.noticeNumbers = new DERSequence(noticeNumbers); + } + + /** + * Creates a new NoticeReference instance. + *

        Useful for reconstructing a NoticeReference + * instance from its encodable/encoded form. + * + * @param as an ASN1Sequence value obtained from either + * calling @{link toASN1Primitive()} for a NoticeReference + * instance or from parsing it from a DER-encoded stream. + */ + private NoticeReference( + ASN1Sequence as) + { + if (as.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + as.size()); + } + + organization = DisplayText.getInstance(as.getObjectAt(0)); + noticeNumbers = ASN1Sequence.getInstance(as.getObjectAt(1)); + } + + public static NoticeReference getInstance( + Object as) + { + if (as instanceof NoticeReference) + { + return (NoticeReference)as; + } + else if (as != null) + { + return new NoticeReference(ASN1Sequence.getInstance(as)); + } + + return null; + } + + public DisplayText getOrganization() + { + return organization; + } + + public ASN1Integer[] getNoticeNumbers() + { + ASN1Integer[] tmp = new ASN1Integer[noticeNumbers.size()]; + + for (int i = 0; i != noticeNumbers.size(); i++) + { + tmp[i] = ASN1Integer.getInstance(noticeNumbers.getObjectAt(i)); + } + + return tmp; + } + + /** + * Describe toASN1Object method here. + * + * @return a ASN1Primitive value + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector av = new ASN1EncodableVector(); + av.add (organization); + av.add (noticeNumbers); + return new DERSequence (av); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java b/common/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java new file mode 100644 index 0000000..7a2d77e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/ObjectDigestInfo.java @@ -0,0 +1,191 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Enumerated; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DEREnumerated; +import org.bouncycastle.asn1.DERSequence; + +/** + * ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + * + *

        + *  
        + *    ObjectDigestInfo ::= SEQUENCE {
        + *         digestedObjectType  ENUMERATED {
        + *                 publicKey            (0),
        + *                 publicKeyCert        (1),
        + *                 otherObjectTypes     (2) },
        + *                         -- otherObjectTypes MUST NOT
        + *                         -- be used in this profile
        + *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
        + *         digestAlgorithm     AlgorithmIdentifier,
        + *         objectDigest        BIT STRING
        + *    }
        + *   
        + * 
        + * + */ +public class ObjectDigestInfo + extends ASN1Object +{ + /** + * The public key is hashed. + */ + public final static int publicKey = 0; + + /** + * The public key certificate is hashed. + */ + public final static int publicKeyCert = 1; + + /** + * An other object is hashed. + */ + public final static int otherObjectDigest = 2; + + ASN1Enumerated digestedObjectType; + + ASN1ObjectIdentifier otherObjectTypeID; + + AlgorithmIdentifier digestAlgorithm; + + DERBitString objectDigest; + + public static ObjectDigestInfo getInstance( + Object obj) + { + if (obj instanceof ObjectDigestInfo) + { + return (ObjectDigestInfo)obj; + } + + if (obj != null) + { + return new ObjectDigestInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public static ObjectDigestInfo getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + /** + * Constructor from given details. + *

        + * If digestedObjectType is not {@link #publicKeyCert} or + * {@link #publicKey} otherObjectTypeID must be given, + * otherwise it is ignored. + * + * @param digestedObjectType The digest object type. + * @param otherObjectTypeID The object type ID for + * otherObjectDigest. + * @param digestAlgorithm The algorithm identifier for the hash. + * @param objectDigest The hash value. + */ + public ObjectDigestInfo( + int digestedObjectType, + ASN1ObjectIdentifier otherObjectTypeID, + AlgorithmIdentifier digestAlgorithm, + byte[] objectDigest) + { + this.digestedObjectType = new ASN1Enumerated(digestedObjectType); + if (digestedObjectType == otherObjectDigest) + { + this.otherObjectTypeID = otherObjectTypeID; + } + + this.digestAlgorithm = digestAlgorithm; + this.objectDigest = new DERBitString(objectDigest); + } + + private ObjectDigestInfo( + ASN1Sequence seq) + { + if (seq.size() > 4 || seq.size() < 3) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + digestedObjectType = DEREnumerated.getInstance(seq.getObjectAt(0)); + + int offset = 0; + + if (seq.size() == 4) + { + otherObjectTypeID = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(1)); + offset++; + } + + digestAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1 + offset)); + + objectDigest = DERBitString.getInstance(seq.getObjectAt(2 + offset)); + } + + public DEREnumerated getDigestedObjectType() + { + return digestedObjectType; + } + + public ASN1ObjectIdentifier getOtherObjectTypeID() + { + return otherObjectTypeID; + } + + public AlgorithmIdentifier getDigestAlgorithm() + { + return digestAlgorithm; + } + + public DERBitString getObjectDigest() + { + return objectDigest; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + * + *

        +     *  
        +     *    ObjectDigestInfo ::= SEQUENCE {
        +     *         digestedObjectType  ENUMERATED {
        +     *                 publicKey            (0),
        +     *                 publicKeyCert        (1),
        +     *                 otherObjectTypes     (2) },
        +     *                         -- otherObjectTypes MUST NOT
        +     *                         -- be used in this profile
        +     *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
        +     *         digestAlgorithm     AlgorithmIdentifier,
        +     *         objectDigest        BIT STRING
        +     *    }
        +     *   
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(digestedObjectType); + + if (otherObjectTypeID != null) + { + v.add(otherObjectTypeID); + } + + v.add(digestAlgorithm); + v.add(objectDigest); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/PolicyInformation.java b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyInformation.java new file mode 100644 index 0000000..d1de26f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyInformation.java @@ -0,0 +1,87 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +public class PolicyInformation + extends ASN1Object +{ + private ASN1ObjectIdentifier policyIdentifier; + private ASN1Sequence policyQualifiers; + + private PolicyInformation( + ASN1Sequence seq) + { + if (seq.size() < 1 || seq.size() > 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + policyIdentifier = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); + + if (seq.size() > 1) + { + policyQualifiers = ASN1Sequence.getInstance(seq.getObjectAt(1)); + } + } + + public PolicyInformation( + ASN1ObjectIdentifier policyIdentifier) + { + this.policyIdentifier = policyIdentifier; + } + + public PolicyInformation( + ASN1ObjectIdentifier policyIdentifier, + ASN1Sequence policyQualifiers) + { + this.policyIdentifier = policyIdentifier; + this.policyQualifiers = policyQualifiers; + } + + public static PolicyInformation getInstance( + Object obj) + { + if (obj == null || obj instanceof PolicyInformation) + { + return (PolicyInformation)obj; + } + + return new PolicyInformation(ASN1Sequence.getInstance(obj)); + } + + public ASN1ObjectIdentifier getPolicyIdentifier() + { + return policyIdentifier; + } + + public ASN1Sequence getPolicyQualifiers() + { + return policyQualifiers; + } + + /* + * PolicyInformation ::= SEQUENCE { + * policyIdentifier CertPolicyId, + * policyQualifiers SEQUENCE SIZE (1..MAX) OF + * PolicyQualifierInfo OPTIONAL } + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(policyIdentifier); + + if (policyQualifiers != null) + { + v.add(policyQualifiers); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/PolicyMappings.java b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyMappings.java new file mode 100644 index 0000000..a75093b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyMappings.java @@ -0,0 +1,82 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; +import java.util.Hashtable; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * PolicyMappings V3 extension, described in RFC3280. + *
        + *    PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
        + *      issuerDomainPolicy      CertPolicyId,
        + *      subjectDomainPolicy     CertPolicyId }
        + * 
        + * + * @see RFC 3280, section 4.2.1.6 + */ +public class PolicyMappings + extends ASN1Object +{ + ASN1Sequence seq = null; + + public static PolicyMappings getInstance(Object obj) + { + if (obj instanceof PolicyMappings) + { + return (PolicyMappings)obj; + } + if (obj != null) + { + return new PolicyMappings(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Creates a new PolicyMappings instance. + * + * @param seq an ASN1Sequence constructed as specified + * in RFC 3280 + */ + private PolicyMappings(ASN1Sequence seq) + { + this.seq = seq; + } + + /** + * Creates a new PolicyMappings instance. + * + * @param mappings a HashMap value that maps + * String oids + * to other String oids. + */ + public PolicyMappings(Hashtable mappings) + { + ASN1EncodableVector dev = new ASN1EncodableVector(); + Enumeration it = mappings.keys(); + + while (it.hasMoreElements()) + { + String idp = (String)it.nextElement(); + String sdp = (String)mappings.get(idp); + ASN1EncodableVector dv = new ASN1EncodableVector(); + dv.add(new ASN1ObjectIdentifier(idp)); + dv.add(new ASN1ObjectIdentifier(sdp)); + dev.add(new DERSequence(dv)); + } + + seq = new DERSequence(dev); + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierId.java b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierId.java new file mode 100644 index 0000000..82835f6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierId.java @@ -0,0 +1,31 @@ + +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +/** + * PolicyQualifierId, used in the CertificatePolicies + * X509V3 extension. + * + *
        + *    id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
        + *    id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
        + *    id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
        + *  PolicyQualifierId ::=
        + *       OBJECT IDENTIFIER (id-qt-cps | id-qt-unotice)
        + * 
        + */ +public class PolicyQualifierId extends ASN1ObjectIdentifier +{ + private static final String id_qt = "1.3.6.1.5.5.7.2"; + + private PolicyQualifierId(String id) + { + super(id); + } + + public static final PolicyQualifierId id_qt_cps = + new PolicyQualifierId(id_qt + ".1"); + public static final PolicyQualifierId id_qt_unotice = + new PolicyQualifierId(id_qt + ".2"); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java new file mode 100644 index 0000000..295accf --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/PolicyQualifierInfo.java @@ -0,0 +1,114 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DERSequence; + +/** + * Policy qualifiers, used in the X509V3 CertificatePolicies + * extension. + * + *
        + *   PolicyQualifierInfo ::= SEQUENCE {
        + *       policyQualifierId  PolicyQualifierId,
        + *       qualifier          ANY DEFINED BY policyQualifierId }
        + * 
        + */ +public class PolicyQualifierInfo + extends ASN1Object +{ + private ASN1ObjectIdentifier policyQualifierId; + private ASN1Encodable qualifier; + + /** + * Creates a new PolicyQualifierInfo instance. + * + * @param policyQualifierId a PolicyQualifierId value + * @param qualifier the qualifier, defined by the above field. + */ + public PolicyQualifierInfo( + ASN1ObjectIdentifier policyQualifierId, + ASN1Encodable qualifier) + { + this.policyQualifierId = policyQualifierId; + this.qualifier = qualifier; + } + + /** + * Creates a new PolicyQualifierInfo containing a + * cPSuri qualifier. + * + * @param cps the CPS (certification practice statement) uri as a + * String. + */ + public PolicyQualifierInfo( + String cps) + { + policyQualifierId = PolicyQualifierId.id_qt_cps; + qualifier = new DERIA5String (cps); + } + + /** + * Creates a new PolicyQualifierInfo instance. + * + * @param as PolicyQualifierInfo X509 structure + * encoded as an ASN1Sequence. + */ + public PolicyQualifierInfo( + ASN1Sequence as) + { + if (as.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + as.size()); + } + + policyQualifierId = ASN1ObjectIdentifier.getInstance(as.getObjectAt(0)); + qualifier = as.getObjectAt(1); + } + + public static PolicyQualifierInfo getInstance( + Object obj) + { + if (obj instanceof PolicyQualifierInfo) + { + return (PolicyQualifierInfo)obj; + } + else if (obj != null) + { + return new PolicyQualifierInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + + public ASN1ObjectIdentifier getPolicyQualifierId() + { + return policyQualifierId; + } + + public ASN1Encodable getQualifier() + { + return qualifier; + } + + /** + * Returns a DER-encodable representation of this instance. + * + * @return a ASN1Primitive value + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector dev = new ASN1EncodableVector(); + dev.add(policyQualifierId); + dev.add(qualifier); + + return new DERSequence(dev); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java b/common/src/main/java/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java new file mode 100644 index 0000000..8166926 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/PrivateKeyUsagePeriod.java @@ -0,0 +1,84 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + *
        + *    PrivateKeyUsagePeriod ::= SEQUENCE {
        + *      notBefore       [0]     GeneralizedTime OPTIONAL,
        + *      notAfter        [1]     GeneralizedTime OPTIONAL }
        + * 
        + */ +public class PrivateKeyUsagePeriod + extends ASN1Object +{ + public static PrivateKeyUsagePeriod getInstance(Object obj) + { + if (obj instanceof PrivateKeyUsagePeriod) + { + return (PrivateKeyUsagePeriod)obj; + } + + if (obj != null) + { + return new PrivateKeyUsagePeriod(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private DERGeneralizedTime _notBefore, _notAfter; + + private PrivateKeyUsagePeriod(ASN1Sequence seq) + { + Enumeration en = seq.getObjects(); + while (en.hasMoreElements()) + { + ASN1TaggedObject tObj = (ASN1TaggedObject)en.nextElement(); + + if (tObj.getTagNo() == 0) + { + _notBefore = DERGeneralizedTime.getInstance(tObj, false); + } + else if (tObj.getTagNo() == 1) + { + _notAfter = DERGeneralizedTime.getInstance(tObj, false); + } + } + } + + public DERGeneralizedTime getNotBefore() + { + return _notBefore; + } + + public DERGeneralizedTime getNotAfter() + { + return _notAfter; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (_notBefore != null) + { + v.add(new DERTaggedObject(false, 0, _notBefore)); + } + if (_notAfter != null) + { + v.add(new DERTaggedObject(false, 1, _notAfter)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java b/common/src/main/java/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java new file mode 100644 index 0000000..7303d87 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/RSAPublicKeyStructure.java @@ -0,0 +1,98 @@ +package org.bouncycastle.asn1.x509; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +/** + * @deprecated use org.bouncycastle.asn1.pkcs.RSAPublicKey + */ +public class RSAPublicKeyStructure + extends ASN1Object +{ + private BigInteger modulus; + private BigInteger publicExponent; + + public static RSAPublicKeyStructure getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static RSAPublicKeyStructure getInstance( + Object obj) + { + if(obj == null || obj instanceof RSAPublicKeyStructure) + { + return (RSAPublicKeyStructure)obj; + } + + if(obj instanceof ASN1Sequence) + { + return new RSAPublicKeyStructure((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("Invalid RSAPublicKeyStructure: " + obj.getClass().getName()); + } + + public RSAPublicKeyStructure( + BigInteger modulus, + BigInteger publicExponent) + { + this.modulus = modulus; + this.publicExponent = publicExponent; + } + + public RSAPublicKeyStructure( + ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + Enumeration e = seq.getObjects(); + + modulus = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); + publicExponent = ASN1Integer.getInstance(e.nextElement()).getPositiveValue(); + } + + public BigInteger getModulus() + { + return modulus; + } + + public BigInteger getPublicExponent() + { + return publicExponent; + } + + /** + * This outputs the key in PKCS1v2 format. + *
        +     *      RSAPublicKey ::= SEQUENCE {
        +     *                          modulus INTEGER, -- n
        +     *                          publicExponent INTEGER, -- e
        +     *                      }
        +     * 
        + *

        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(getModulus())); + v.add(new ASN1Integer(getPublicExponent())); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/ReasonFlags.java b/common/src/main/java/org/bouncycastle/asn1/x509/ReasonFlags.java new file mode 100644 index 0000000..612e2c5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/ReasonFlags.java @@ -0,0 +1,85 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.DERBitString; + +/** + * The ReasonFlags object. + *

        + * ReasonFlags ::= BIT STRING {
        + *      unused                  (0),
        + *      keyCompromise           (1),
        + *      cACompromise            (2),
        + *      affiliationChanged      (3),
        + *      superseded              (4),
        + *      cessationOfOperation    (5),
        + *      certificateHold         (6),
        + *      privilegeWithdrawn      (7),
        + *      aACompromise            (8) }
        + * 
        + */ +public class ReasonFlags + extends DERBitString +{ + /** + * @deprecated use lower case version + */ + public static final int UNUSED = (1 << 7); + /** + * @deprecated use lower case version + */ + public static final int KEY_COMPROMISE = (1 << 6); + /** + * @deprecated use lower case version + */ + public static final int CA_COMPROMISE = (1 << 5); + /** + * @deprecated use lower case version + */ + public static final int AFFILIATION_CHANGED = (1 << 4); + /** + * @deprecated use lower case version + */ + public static final int SUPERSEDED = (1 << 3); + /** + * @deprecated use lower case version + */ + public static final int CESSATION_OF_OPERATION = (1 << 2); + /** + * @deprecated use lower case version + */ + public static final int CERTIFICATE_HOLD = (1 << 1); + /** + * @deprecated use lower case version + */ + public static final int PRIVILEGE_WITHDRAWN = (1 << 0); + /** + * @deprecated use lower case version + */ + public static final int AA_COMPROMISE = (1 << 15); + + public static final int unused = (1 << 7); + public static final int keyCompromise = (1 << 6); + public static final int cACompromise = (1 << 5); + public static final int affiliationChanged = (1 << 4); + public static final int superseded = (1 << 3); + public static final int cessationOfOperation = (1 << 2); + public static final int certificateHold = (1 << 1); + public static final int privilegeWithdrawn = (1 << 0); + public static final int aACompromise = (1 << 15); + + /** + * @param reasons - the bitwise OR of the Key Reason flags giving the + * allowed uses for the key. + */ + public ReasonFlags( + int reasons) + { + super(getBytes(reasons), getPadBits(reasons)); + } + + public ReasonFlags( + DERBitString reasons) + { + super(reasons.getBytes(), reasons.getPadBits()); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/RoleSyntax.java b/common/src/main/java/org/bouncycastle/asn1/x509/RoleSyntax.java new file mode 100644 index 0000000..7558c12 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/RoleSyntax.java @@ -0,0 +1,237 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1String; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * Implementation of the RoleSyntax object as specified by the RFC3281. + * + *
        + * RoleSyntax ::= SEQUENCE {
        + *                 roleAuthority  [0] GeneralNames OPTIONAL,
        + *                 roleName       [1] GeneralName
        + *           } 
        + * 
        + */ +public class RoleSyntax + extends ASN1Object +{ + private GeneralNames roleAuthority; + private GeneralName roleName; + + /** + * RoleSyntax factory method. + * @param obj the object used to construct an instance of + * RoleSyntax. It must be an instance of RoleSyntax + * or ASN1Sequence. + * @return the instance of RoleSyntax built from the + * supplied object. + * @throws java.lang.IllegalArgumentException if the object passed + * to the factory is not an instance of RoleSyntax or + * ASN1Sequence. + */ + public static RoleSyntax getInstance( + Object obj) + { + + if (obj instanceof RoleSyntax) + { + return (RoleSyntax)obj; + } + else if (obj != null) + { + return new RoleSyntax(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor. + * @param roleAuthority the role authority of this RoleSyntax. + * @param roleName the role name of this RoleSyntax. + */ + public RoleSyntax( + GeneralNames roleAuthority, + GeneralName roleName) + { + if(roleName == null || + roleName.getTagNo() != GeneralName.uniformResourceIdentifier || + ((ASN1String)roleName.getName()).getString().equals("")) + { + throw new IllegalArgumentException("the role name MUST be non empty and MUST " + + "use the URI option of GeneralName"); + } + this.roleAuthority = roleAuthority; + this.roleName = roleName; + } + + /** + * Constructor. Invoking this constructor is the same as invoking + * new RoleSyntax(null, roleName). + * @param roleName the role name of this RoleSyntax. + */ + public RoleSyntax( + GeneralName roleName) + { + this(null, roleName); + } + + /** + * Utility constructor. Takes a String argument representing + * the role name, builds a GeneralName to hold the role name + * and calls the constructor that takes a GeneralName. + * @param roleName + */ + public RoleSyntax( + String roleName) + { + this(new GeneralName(GeneralName.uniformResourceIdentifier, + (roleName == null)? "": roleName)); + } + + /** + * Constructor that builds an instance of RoleSyntax by + * extracting the encoded elements from the ASN1Sequence + * object supplied. + * @param seq an instance of ASN1Sequence that holds + * the encoded elements used to build this RoleSyntax. + */ + private RoleSyntax( + ASN1Sequence seq) + { + if (seq.size() < 1 || seq.size() > 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + for (int i = 0; i != seq.size(); i++) + { + ASN1TaggedObject taggedObject = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); + switch (taggedObject.getTagNo()) + { + case 0: + roleAuthority = GeneralNames.getInstance(taggedObject, false); + break; + case 1: + roleName = GeneralName.getInstance(taggedObject, true); + break; + default: + throw new IllegalArgumentException("Unknown tag in RoleSyntax"); + } + } + } + + /** + * Gets the role authority of this RoleSyntax. + * @return an instance of GeneralNames holding the + * role authority of this RoleSyntax. + */ + public GeneralNames getRoleAuthority() + { + return this.roleAuthority; + } + + /** + * Gets the role name of this RoleSyntax. + * @return an instance of GeneralName holding the + * role name of this RoleSyntax. + */ + public GeneralName getRoleName() + { + return this.roleName; + } + + /** + * Gets the role name as a java.lang.String object. + * @return the role name of this RoleSyntax represented as a + * java.lang.String object. + */ + public String getRoleNameAsString() + { + ASN1String str = (ASN1String)this.roleName.getName(); + + return str.getString(); + } + + /** + * Gets the role authority as a String[] object. + * @return the role authority of this RoleSyntax represented as a + * String[] array. + */ + public String[] getRoleAuthorityAsString() + { + if(roleAuthority == null) + { + return new String[0]; + } + + GeneralName[] names = roleAuthority.getNames(); + String[] namesString = new String[names.length]; + for(int i = 0; i < names.length; i++) + { + ASN1Encodable value = names[i].getName(); + if(value instanceof ASN1String) + { + namesString[i] = ((ASN1String)value).getString(); + } + else + { + namesString[i] = value.toString(); + } + } + return namesString; + } + + /** + * Implementation of the method toASN1Object as + * required by the superclass ASN1Encodable. + * + *
        +     * RoleSyntax ::= SEQUENCE {
        +     *                 roleAuthority  [0] GeneralNames OPTIONAL,
        +     *                 roleName       [1] GeneralName
        +     *           } 
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + if(this.roleAuthority != null) + { + v.add(new DERTaggedObject(false, 0, roleAuthority)); + } + v.add(new DERTaggedObject(true, 1, roleName)); + + return new DERSequence(v); + } + + public String toString() + { + StringBuffer buff = new StringBuffer("Name: " + this.getRoleNameAsString() + + " - Auth: "); + if(this.roleAuthority == null || roleAuthority.getNames().length == 0) + { + buff.append("N/A"); + } + else + { + String[] names = this.getRoleAuthorityAsString(); + buff.append('[').append(names[0]); + for(int i = 1; i < names.length; i++) + { + buff.append(", ").append(names[i]); + } + buff.append(']'); + } + return buff.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java b/common/src/main/java/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java new file mode 100644 index 0000000..9591802 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/SubjectDirectoryAttributes.java @@ -0,0 +1,144 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * This extension may contain further X.500 attributes of the subject. See also + * RFC 3039. + * + *
        + *     SubjectDirectoryAttributes ::= Attributes
        + *     Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
        + *     Attribute ::= SEQUENCE 
        + *     {
        + *       type AttributeType 
        + *       values SET OF AttributeValue 
        + *     }
        + *     
        + *     AttributeType ::= OBJECT IDENTIFIER
        + *     AttributeValue ::= ANY DEFINED BY AttributeType
        + * 
        + * + * @see org.bouncycastle.asn1.x500.style.BCStyle for AttributeType ObjectIdentifiers. + */ +public class SubjectDirectoryAttributes + extends ASN1Object +{ + private Vector attributes = new Vector(); + + public static SubjectDirectoryAttributes getInstance( + Object obj) + { + if (obj instanceof SubjectDirectoryAttributes) + { + return (SubjectDirectoryAttributes)obj; + } + + if (obj != null) + { + return new SubjectDirectoryAttributes(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor from ASN1Sequence. + * + * The sequence is of type SubjectDirectoryAttributes: + * + *
        +     *      SubjectDirectoryAttributes ::= Attributes
        +     *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
        +     *      Attribute ::= SEQUENCE 
        +     *      {
        +     *        type AttributeType 
        +     *        values SET OF AttributeValue 
        +     *      }
        +     *      
        +     *      AttributeType ::= OBJECT IDENTIFIER
        +     *      AttributeValue ::= ANY DEFINED BY AttributeType
        +     * 
        + * + * @param seq + * The ASN.1 sequence. + */ + private SubjectDirectoryAttributes(ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement()); + attributes.addElement(Attribute.getInstance(s)); + } + } + + /** + * Constructor from a vector of attributes. + * + * The vector consists of attributes of type {@link Attribute Attribute} + * + * @param attributes + * The attributes. + * + */ + public SubjectDirectoryAttributes(Vector attributes) + { + Enumeration e = attributes.elements(); + + while (e.hasMoreElements()) + { + this.attributes.addElement(e.nextElement()); + } + } + + /** + * Produce an object suitable for an ASN1OutputStream. + * + * Returns: + * + *
        +     *      SubjectDirectoryAttributes ::= Attributes
        +     *      Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
        +     *      Attribute ::= SEQUENCE 
        +     *      {
        +     *        type AttributeType 
        +     *        values SET OF AttributeValue 
        +     *      }
        +     *      
        +     *      AttributeType ::= OBJECT IDENTIFIER
        +     *      AttributeValue ::= ANY DEFINED BY AttributeType
        +     * 
        + * + * @return a ASN1Primitive + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + Enumeration e = attributes.elements(); + + while (e.hasMoreElements()) + { + + vec.add((Attribute)e.nextElement()); + } + + return new DERSequence(vec); + } + + /** + * @return Returns the attributes. + */ + public Vector getAttributes() + { + return attributes; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java b/common/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java new file mode 100644 index 0000000..e86cded --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java @@ -0,0 +1,130 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.SHA1Digest; + +/** + * The SubjectKeyIdentifier object. + *
        + * SubjectKeyIdentifier::= OCTET STRING
        + * 
        + */ +public class SubjectKeyIdentifier + extends ASN1Object +{ + private byte[] keyidentifier; + + public static SubjectKeyIdentifier getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1OctetString.getInstance(obj, explicit)); + } + + public static SubjectKeyIdentifier getInstance( + Object obj) + { + if (obj instanceof SubjectKeyIdentifier) + { + return (SubjectKeyIdentifier)obj; + } + else if (obj != null) + { + return new SubjectKeyIdentifier(ASN1OctetString.getInstance(obj)); + } + + return null; + } + + public SubjectKeyIdentifier( + byte[] keyid) + { + this.keyidentifier = keyid; + } + + protected SubjectKeyIdentifier( + ASN1OctetString keyid) + { + this.keyidentifier = keyid.getOctets(); + } + + public byte[] getKeyIdentifier() + { + return keyidentifier; + } + + public ASN1Primitive toASN1Primitive() + { + return new DEROctetString(keyidentifier); + } + + + /** + * Calculates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC3280. + * + * @param spki the subject public key info. + * @deprecated + */ + public SubjectKeyIdentifier( + SubjectPublicKeyInfo spki) + { + this.keyidentifier = getDigest(spki); + } + + /** + * Return a RFC 3280 type 1 key identifier. As in: + *
        +     * (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
        +     * value of the BIT STRING subjectPublicKey (excluding the tag,
        +     * length, and number of unused bits).
        +     * 
        + * @param keyInfo the key info object containing the subjectPublicKey field. + * @return the key identifier. + * @deprecated use org.bouncycastle.cert.X509ExtensionUtils.createSubjectKeyIdentifier + */ + public static SubjectKeyIdentifier createSHA1KeyIdentifier(SubjectPublicKeyInfo keyInfo) + { + return new SubjectKeyIdentifier(keyInfo); + } + + /** + * Return a RFC 3280 type 2 key identifier. As in: + *
        +     * (2) The keyIdentifier is composed of a four bit type field with
        +     * the value 0100 followed by the least significant 60 bits of the
        +     * SHA-1 hash of the value of the BIT STRING subjectPublicKey.
        +     * 
        + * @param keyInfo the key info object containing the subjectPublicKey field. + * @return the key identifier. + * @deprecated use org.bouncycastle.cert.X509ExtensionUtils.createTruncatedSubjectKeyIdentifier + */ + public static SubjectKeyIdentifier createTruncatedSHA1KeyIdentifier(SubjectPublicKeyInfo keyInfo) + { + byte[] dig = getDigest(keyInfo); + byte[] id = new byte[8]; + + System.arraycopy(dig, dig.length - 8, id, 0, id.length); + + id[0] &= 0x0f; + id[0] |= 0x40; + + return new SubjectKeyIdentifier(id); + } + + private static byte[] getDigest(SubjectPublicKeyInfo spki) + { + Digest digest = new SHA1Digest(); + byte[] resBuf = new byte[digest.getDigestSize()]; + + byte[] bytes = spki.getPublicKeyData().getBytes(); + digest.update(bytes, 0, bytes.length); + digest.doFinal(resBuf, 0); + return resBuf; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java b/common/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java new file mode 100644 index 0000000..660ca05 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/SubjectPublicKeyInfo.java @@ -0,0 +1,155 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; + +/** + * The object that contains the public key stored in a certficate. + *

        + * The getEncoded() method in the public keys in the JCE produces a DER + * encoded one of these. + */ +public class SubjectPublicKeyInfo + extends ASN1Object +{ + private AlgorithmIdentifier algId; + private DERBitString keyData; + + public static SubjectPublicKeyInfo getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static SubjectPublicKeyInfo getInstance( + Object obj) + { + if (obj instanceof SubjectPublicKeyInfo) + { + return (SubjectPublicKeyInfo)obj; + } + else if (obj != null) + { + return new SubjectPublicKeyInfo(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public SubjectPublicKeyInfo( + AlgorithmIdentifier algId, + ASN1Encodable publicKey) + { + this.keyData = new DERBitString(publicKey); + this.algId = algId; + } + + public SubjectPublicKeyInfo( + AlgorithmIdentifier algId, + byte[] publicKey) + { + this.keyData = new DERBitString(publicKey); + this.algId = algId; + } + + public SubjectPublicKeyInfo( + ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + Enumeration e = seq.getObjects(); + + this.algId = AlgorithmIdentifier.getInstance(e.nextElement()); + this.keyData = DERBitString.getInstance(e.nextElement()); + } + + public AlgorithmIdentifier getAlgorithm() + { + return algId; + } + + /** + * @deprecated use getAlgorithm() + * @return alg ID. + */ + public AlgorithmIdentifier getAlgorithmId() + { + return algId; + } + + /** + * for when the public key is an encoded object - if the bitstring + * can't be decoded this routine throws an IOException. + * + * @exception IOException - if the bit string doesn't represent a DER + * encoded object. + * @return the public key as an ASN.1 primitive. + */ + public ASN1Primitive parsePublicKey() + throws IOException + { + ASN1InputStream aIn = new ASN1InputStream(keyData.getBytes()); + + return aIn.readObject(); + } + + /** + * for when the public key is an encoded object - if the bitstring + * can't be decoded this routine throws an IOException. + * + * @exception IOException - if the bit string doesn't represent a DER + * encoded object. + * @deprecated use parsePublicKey + * @return the public key as an ASN.1 primitive. + */ + public ASN1Primitive getPublicKey() + throws IOException + { + ASN1InputStream aIn = new ASN1InputStream(keyData.getBytes()); + + return aIn.readObject(); + } + + /** + * for when the public key is raw bits. + * + * @return the public key as the raw bit string... + */ + public DERBitString getPublicKeyData() + { + return keyData; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *

        +     * SubjectPublicKeyInfo ::= SEQUENCE {
        +     *                          algorithm AlgorithmIdentifier,
        +     *                          publicKey BIT STRING }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(algId); + v.add(keyData); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertList.java b/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertList.java new file mode 100644 index 0000000..ce657a7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertList.java @@ -0,0 +1,309 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.DERUTCTime; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * PKIX RFC-2459 - TBSCertList object. + *
        + * TBSCertList  ::=  SEQUENCE  {
        + *      version                 Version OPTIONAL,
        + *                                   -- if present, shall be v2
        + *      signature               AlgorithmIdentifier,
        + *      issuer                  Name,
        + *      thisUpdate              Time,
        + *      nextUpdate              Time OPTIONAL,
        + *      revokedCertificates     SEQUENCE OF SEQUENCE  {
        + *           userCertificate         CertificateSerialNumber,
        + *           revocationDate          Time,
        + *           crlEntryExtensions      Extensions OPTIONAL
        + *                                         -- if present, shall be v2
        + *                                }  OPTIONAL,
        + *      crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
        + *                                         -- if present, shall be v2
        + *                                }
        + * 
        + */ +public class TBSCertList + extends ASN1Object +{ + public static class CRLEntry + extends ASN1Object + { + ASN1Sequence seq; + + Extensions crlEntryExtensions; + + private CRLEntry( + ASN1Sequence seq) + { + if (seq.size() < 2 || seq.size() > 3) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + this.seq = seq; + } + + public static CRLEntry getInstance(Object o) + { + if (o instanceof CRLEntry) + { + return ((CRLEntry)o); + } + else if (o != null) + { + return new CRLEntry(ASN1Sequence.getInstance(o)); + } + + return null; + } + + public ASN1Integer getUserCertificate() + { + return ASN1Integer.getInstance(seq.getObjectAt(0)); + } + + public Time getRevocationDate() + { + return Time.getInstance(seq.getObjectAt(1)); + } + + public Extensions getExtensions() + { + if (crlEntryExtensions == null && seq.size() == 3) + { + crlEntryExtensions = Extensions.getInstance(seq.getObjectAt(2)); + } + + return crlEntryExtensions; + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } + + public boolean hasExtensions() + { + return seq.size() == 3; + } + } + + private class RevokedCertificatesEnumeration + implements Enumeration + { + private final Enumeration en; + + RevokedCertificatesEnumeration(Enumeration en) + { + this.en = en; + } + + public boolean hasMoreElements() + { + return en.hasMoreElements(); + } + + public Object nextElement() + { + return CRLEntry.getInstance(en.nextElement()); + } + } + + private class EmptyEnumeration + implements Enumeration + { + public boolean hasMoreElements() + { + return false; + } + + public Object nextElement() + { + return null; // TODO: check exception handling + } + } + + ASN1Integer version; + AlgorithmIdentifier signature; + X500Name issuer; + Time thisUpdate; + Time nextUpdate; + ASN1Sequence revokedCertificates; + Extensions crlExtensions; + + public static TBSCertList getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static TBSCertList getInstance( + Object obj) + { + if (obj instanceof TBSCertList) + { + return (TBSCertList)obj; + } + else if (obj != null) + { + return new TBSCertList(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public TBSCertList( + ASN1Sequence seq) + { + if (seq.size() < 3 || seq.size() > 7) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + int seqPos = 0; + + if (seq.getObjectAt(seqPos) instanceof ASN1Integer) + { + version = ASN1Integer.getInstance(seq.getObjectAt(seqPos++)); + } + else + { + version = null; // version is optional + } + + signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqPos++)); + issuer = X500Name.getInstance(seq.getObjectAt(seqPos++)); + thisUpdate = Time.getInstance(seq.getObjectAt(seqPos++)); + + if (seqPos < seq.size() + && (seq.getObjectAt(seqPos) instanceof DERUTCTime + || seq.getObjectAt(seqPos) instanceof DERGeneralizedTime + || seq.getObjectAt(seqPos) instanceof Time)) + { + nextUpdate = Time.getInstance(seq.getObjectAt(seqPos++)); + } + + if (seqPos < seq.size() + && !(seq.getObjectAt(seqPos) instanceof DERTaggedObject)) + { + revokedCertificates = ASN1Sequence.getInstance(seq.getObjectAt(seqPos++)); + } + + if (seqPos < seq.size() + && seq.getObjectAt(seqPos) instanceof DERTaggedObject) + { + crlExtensions = Extensions.getInstance(ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(seqPos), true)); + } + } + + public int getVersionNumber() + { + if (version == null) + { + return 1; + } + return version.getValue().intValue() + 1; + } + + public ASN1Integer getVersion() + { + return version; + } + + public AlgorithmIdentifier getSignature() + { + return signature; + } + + public X500Name getIssuer() + { + return issuer; + } + + public Time getThisUpdate() + { + return thisUpdate; + } + + public Time getNextUpdate() + { + return nextUpdate; + } + + public CRLEntry[] getRevokedCertificates() + { + if (revokedCertificates == null) + { + return new CRLEntry[0]; + } + + CRLEntry[] entries = new CRLEntry[revokedCertificates.size()]; + + for (int i = 0; i < entries.length; i++) + { + entries[i] = CRLEntry.getInstance(revokedCertificates.getObjectAt(i)); + } + + return entries; + } + + public Enumeration getRevokedCertificateEnumeration() + { + if (revokedCertificates == null) + { + return new EmptyEnumeration(); + } + + return new RevokedCertificatesEnumeration(revokedCertificates.getObjects()); + } + + public Extensions getExtensions() + { + return crlExtensions; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (version != null) + { + v.add(version); + } + v.add(signature); + v.add(issuer); + + v.add(thisUpdate); + if (nextUpdate != null) + { + v.add(nextUpdate); + } + + // Add CRLEntries if they exist + if (revokedCertificates != null) + { + v.add(revokedCertificates); + } + + if (crlExtensions != null) + { + v.add(new DERTaggedObject(0, crlExtensions)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificate.java b/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificate.java new file mode 100644 index 0000000..dc41964 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificate.java @@ -0,0 +1,192 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * The TBSCertificate object. + *
        + * TBSCertificate ::= SEQUENCE {
        + *      version          [ 0 ]  Version DEFAULT v1(0),
        + *      serialNumber            CertificateSerialNumber,
        + *      signature               AlgorithmIdentifier,
        + *      issuer                  Name,
        + *      validity                Validity,
        + *      subject                 Name,
        + *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        + *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
        + *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
        + *      extensions        [ 3 ] Extensions OPTIONAL
        + *      }
        + * 
        + *

        + * Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + * will parse them, but you really shouldn't be creating new ones. + */ +public class TBSCertificate + extends ASN1Object +{ + ASN1Sequence seq; + + ASN1Integer version; + ASN1Integer serialNumber; + AlgorithmIdentifier signature; + X500Name issuer; + Time startDate, endDate; + X500Name subject; + SubjectPublicKeyInfo subjectPublicKeyInfo; + DERBitString issuerUniqueId; + DERBitString subjectUniqueId; + Extensions extensions; + + public static TBSCertificate getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static TBSCertificate getInstance( + Object obj) + { + if (obj instanceof TBSCertificate) + { + return (TBSCertificate)obj; + } + else if (obj != null) + { + return new TBSCertificate(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private TBSCertificate( + ASN1Sequence seq) + { + int seqStart = 0; + + this.seq = seq; + + // + // some certficates don't include a version number - we assume v1 + // + if (seq.getObjectAt(0) instanceof DERTaggedObject) + { + version = ASN1Integer.getInstance((ASN1TaggedObject)seq.getObjectAt(0), true); + } + else + { + seqStart = -1; // field 0 is missing! + version = new ASN1Integer(0); + } + + serialNumber = ASN1Integer.getInstance(seq.getObjectAt(seqStart + 1)); + + signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2)); + issuer = X500Name.getInstance(seq.getObjectAt(seqStart + 3)); + + // + // before and after dates + // + ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4); + + startDate = Time.getInstance(dates.getObjectAt(0)); + endDate = Time.getInstance(dates.getObjectAt(1)); + + subject = X500Name.getInstance(seq.getObjectAt(seqStart + 5)); + + // + // public key info. + // + subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6)); + + for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--) + { + DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras); + + switch (extra.getTagNo()) + { + case 1: + issuerUniqueId = DERBitString.getInstance(extra, false); + break; + case 2: + subjectUniqueId = DERBitString.getInstance(extra, false); + break; + case 3: + extensions = Extensions.getInstance(ASN1Sequence.getInstance(extra, true)); + } + } + } + + public int getVersionNumber() + { + return version.getValue().intValue() + 1; + } + + public ASN1Integer getVersion() + { + return version; + } + + public ASN1Integer getSerialNumber() + { + return serialNumber; + } + + public AlgorithmIdentifier getSignature() + { + return signature; + } + + public X500Name getIssuer() + { + return issuer; + } + + public Time getStartDate() + { + return startDate; + } + + public Time getEndDate() + { + return endDate; + } + + public X500Name getSubject() + { + return subject; + } + + public SubjectPublicKeyInfo getSubjectPublicKeyInfo() + { + return subjectPublicKeyInfo; + } + + public DERBitString getIssuerUniqueId() + { + return issuerUniqueId; + } + + public DERBitString getSubjectUniqueId() + { + return subjectUniqueId; + } + + public Extensions getExtensions() + { + return extensions; + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificateStructure.java b/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificateStructure.java new file mode 100644 index 0000000..0c16488 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/TBSCertificateStructure.java @@ -0,0 +1,194 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * The TBSCertificate object. + *

        + * TBSCertificate ::= SEQUENCE {
        + *      version          [ 0 ]  Version DEFAULT v1(0),
        + *      serialNumber            CertificateSerialNumber,
        + *      signature               AlgorithmIdentifier,
        + *      issuer                  Name,
        + *      validity                Validity,
        + *      subject                 Name,
        + *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        + *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
        + *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
        + *      extensions        [ 3 ] Extensions OPTIONAL
        + *      }
        + * 
        + *

        + * Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + * will parse them, but you really shouldn't be creating new ones. + */ +public class TBSCertificateStructure + extends ASN1Object + //implements X509ObjectIdentifiers, PKCSObjectIdentifiers +{ + ASN1Sequence seq; + + ASN1Integer version; + ASN1Integer serialNumber; + AlgorithmIdentifier signature; + X500Name issuer; + Time startDate, endDate; + X500Name subject; + SubjectPublicKeyInfo subjectPublicKeyInfo; + DERBitString issuerUniqueId; + DERBitString subjectUniqueId; + X509Extensions extensions; + + public static TBSCertificateStructure getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static TBSCertificateStructure getInstance( + Object obj) + { + if (obj instanceof TBSCertificateStructure) + { + return (TBSCertificateStructure)obj; + } + else if (obj != null) + { + return new TBSCertificateStructure(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public TBSCertificateStructure( + ASN1Sequence seq) + { + int seqStart = 0; + + this.seq = seq; + + // + // some certficates don't include a version number - we assume v1 + // + if (seq.getObjectAt(0) instanceof DERTaggedObject) + { + version = ASN1Integer.getInstance((ASN1TaggedObject)seq.getObjectAt(0), true); + } + else + { + seqStart = -1; // field 0 is missing! + version = new ASN1Integer(0); + } + + serialNumber = ASN1Integer.getInstance(seq.getObjectAt(seqStart + 1)); + + signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2)); + issuer = X500Name.getInstance(seq.getObjectAt(seqStart + 3)); + + // + // before and after dates + // + ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4); + + startDate = Time.getInstance(dates.getObjectAt(0)); + endDate = Time.getInstance(dates.getObjectAt(1)); + + subject = X500Name.getInstance(seq.getObjectAt(seqStart + 5)); + + // + // public key info. + // + subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6)); + + for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--) + { + DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras); + + switch (extra.getTagNo()) + { + case 1: + issuerUniqueId = DERBitString.getInstance(extra, false); + break; + case 2: + subjectUniqueId = DERBitString.getInstance(extra, false); + break; + case 3: + extensions = X509Extensions.getInstance(extra); + } + } + } + + public int getVersion() + { + return version.getValue().intValue() + 1; + } + + public ASN1Integer getVersionNumber() + { + return version; + } + + public ASN1Integer getSerialNumber() + { + return serialNumber; + } + + public AlgorithmIdentifier getSignature() + { + return signature; + } + + public X500Name getIssuer() + { + return issuer; + } + + public Time getStartDate() + { + return startDate; + } + + public Time getEndDate() + { + return endDate; + } + + public X500Name getSubject() + { + return subject; + } + + public SubjectPublicKeyInfo getSubjectPublicKeyInfo() + { + return subjectPublicKeyInfo; + } + + public DERBitString getIssuerUniqueId() + { + return issuerUniqueId; + } + + public DERBitString getSubjectUniqueId() + { + return subjectUniqueId; + } + + public X509Extensions getExtensions() + { + return extensions; + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Target.java b/common/src/main/java/org/bouncycastle/asn1/x509/Target.java new file mode 100644 index 0000000..b302f5a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Target.java @@ -0,0 +1,138 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * Target structure used in target information extension for attribute + * certificates from RFC 3281. + * + *

        + *     Target  ::= CHOICE {
        + *       targetName          [0] GeneralName,
        + *       targetGroup         [1] GeneralName,
        + *       targetCert          [2] TargetCert
        + *     }
        + * 
        + * + *

        + * The targetCert field is currently not supported and must not be used + * according to RFC 3281. + */ +public class Target + extends ASN1Object + implements ASN1Choice +{ + public static final int targetName = 0; + public static final int targetGroup = 1; + + private GeneralName targName; + private GeneralName targGroup; + + /** + * Creates an instance of a Target from the given object. + *

        + * obj can be a Target or a {@link ASN1TaggedObject} + * + * @param obj The object. + * @return A Target instance. + * @throws IllegalArgumentException if the given object cannot be + * interpreted as Target. + */ + public static Target getInstance(Object obj) + { + if (obj == null || obj instanceof Target) + { + return (Target) obj; + } + else if (obj instanceof ASN1TaggedObject) + { + return new Target((ASN1TaggedObject)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + + obj.getClass()); + } + + /** + * Constructor from ASN1TaggedObject. + * + * @param tagObj The tagged object. + * @throws IllegalArgumentException if the encoding is wrong. + */ + private Target(ASN1TaggedObject tagObj) + { + switch (tagObj.getTagNo()) + { + case targetName: // GeneralName is already a choice so explicit + targName = GeneralName.getInstance(tagObj, true); + break; + case targetGroup: + targGroup = GeneralName.getInstance(tagObj, true); + break; + default: + throw new IllegalArgumentException("unknown tag: " + tagObj.getTagNo()); + } + } + + /** + * Constructor from given details. + *

        + * Exactly one of the parameters must be not null. + * + * @param type the choice type to apply to the name. + * @param name the general name. + * @throws IllegalArgumentException if type is invalid. + */ + public Target(int type, GeneralName name) + { + this(new DERTaggedObject(type, name)); + } + + /** + * @return Returns the targetGroup. + */ + public GeneralName getTargetGroup() + { + return targGroup; + } + + /** + * @return Returns the targetName. + */ + public GeneralName getTargetName() + { + return targName; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + * + * Returns: + * + *

        +     *     Target  ::= CHOICE {
        +     *       targetName          [0] GeneralName,
        +     *       targetGroup         [1] GeneralName,
        +     *       targetCert          [2] TargetCert
        +     *     }
        +     * 
        + * + * @return a ASN1Primitive + */ + public ASN1Primitive toASN1Primitive() + { + // GeneralName is a choice already so most be explicitly tagged + if (targName != null) + { + return new DERTaggedObject(true, 0, targName); + } + else + { + return new DERTaggedObject(true, 1, targGroup); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/TargetInformation.java b/common/src/main/java/org/bouncycastle/asn1/x509/TargetInformation.java new file mode 100644 index 0000000..eb892b9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/TargetInformation.java @@ -0,0 +1,120 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * Target information extension for attributes certificates according to RFC + * 3281. + * + *
        + *           SEQUENCE OF Targets
        + * 
        + * + */ +public class TargetInformation + extends ASN1Object +{ + private ASN1Sequence targets; + + /** + * Creates an instance of a TargetInformation from the given object. + *

        + * obj can be a TargetInformation or a {@link ASN1Sequence} + * + * @param obj The object. + * @return A TargetInformation instance. + * @throws IllegalArgumentException if the given object cannot be + * interpreted as TargetInformation. + */ + public static TargetInformation getInstance(Object obj) + { + if (obj instanceof TargetInformation) + { + return (TargetInformation)obj; + } + else if (obj != null) + { + return new TargetInformation(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor from a ASN1Sequence. + * + * @param seq The ASN1Sequence. + * @throws IllegalArgumentException if the sequence does not contain + * correctly encoded Targets elements. + */ + private TargetInformation(ASN1Sequence seq) + { + targets = seq; + } + + /** + * Returns the targets in this target information extension. + * + * @return Returns the targets. + */ + public Targets[] getTargetsObjects() + { + Targets[] copy = new Targets[targets.size()]; + int count = 0; + for (Enumeration e = targets.getObjects(); e.hasMoreElements();) + { + copy[count++] = Targets.getInstance(e.nextElement()); + } + return copy; + } + + /** + * Constructs a target information from a single targets element. + * According to RFC 3281 only one targets element must be produced. + * + * @param targets A Targets instance. + */ + public TargetInformation(Targets targets) + { + this.targets = new DERSequence(targets); + } + + /** + * According to RFC 3281 only one targets element must be produced. If + * multiple targets are given they must be merged in + * into one targets element. + * + * @param targets An array with {@link Targets}. + */ + public TargetInformation(Target[] targets) + { + this(new Targets(targets)); + } + + /** + * Produce an object suitable for an ASN1OutputStream. + * + * Returns: + * + *

        +     *          SEQUENCE OF Targets
        +     * 
        + * + *

        + * According to RFC 3281 only one targets element must be produced. If + * multiple targets are given in the constructor they are merged into one + * targets element. If this was produced from a + * {@link org.bouncycastle.asn1.ASN1Sequence} the encoding is kept. + * + * @return a ASN1Primitive + */ + public ASN1Primitive toASN1Primitive() + { + return targets; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Targets.java b/common/src/main/java/org/bouncycastle/asn1/x509/Targets.java new file mode 100644 index 0000000..4c7d062 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Targets.java @@ -0,0 +1,121 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * Targets structure used in target information extension for attribute + * certificates from RFC 3281. + * + *

        + *            Targets ::= SEQUENCE OF Target
        + *           
        + *            Target  ::= CHOICE {
        + *              targetName          [0] GeneralName,
        + *              targetGroup         [1] GeneralName,
        + *              targetCert          [2] TargetCert
        + *            }
        + *           
        + *            TargetCert  ::= SEQUENCE {
        + *              targetCertificate    IssuerSerial,
        + *              targetName           GeneralName OPTIONAL,
        + *              certDigestInfo       ObjectDigestInfo OPTIONAL
        + *            }
        + * 
        + * + * @see org.bouncycastle.asn1.x509.Target + * @see org.bouncycastle.asn1.x509.TargetInformation + */ +public class Targets + extends ASN1Object +{ + private ASN1Sequence targets; + + /** + * Creates an instance of a Targets from the given object. + *

        + * obj can be a Targets or a {@link ASN1Sequence} + * + * @param obj The object. + * @return A Targets instance. + * @throws IllegalArgumentException if the given object cannot be + * interpreted as Target. + */ + public static Targets getInstance(Object obj) + { + if (obj instanceof Targets) + { + return (Targets)obj; + } + else if (obj != null) + { + return new Targets(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + /** + * Constructor from ASN1Sequence. + * + * @param targets The ASN.1 SEQUENCE. + * @throws IllegalArgumentException if the contents of the sequence are + * invalid. + */ + private Targets(ASN1Sequence targets) + { + this.targets = targets; + } + + /** + * Constructor from given targets. + *

        + * The vector is copied. + * + * @param targets A Vector of {@link Target}s. + * @see Target + * @throws IllegalArgumentException if the vector contains not only Targets. + */ + public Targets(Target[] targets) + { + this.targets = new DERSequence(targets); + } + + /** + * Returns the targets in a Vector. + *

        + * The vector is cloned before it is returned. + * + * @return Returns the targets. + */ + public Target[] getTargets() + { + Target[] targs = new Target[targets.size()]; + int count = 0; + for (Enumeration e = targets.getObjects(); e.hasMoreElements();) + { + targs[count++] = Target.getInstance(e.nextElement()); + } + return targs; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + * + * Returns: + * + *

        +     *            Targets ::= SEQUENCE OF Target
        +     * 
        + * + * @return a ASN1Primitive + */ + public ASN1Primitive toASN1Primitive() + { + return targets; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/Time.java b/common/src/main/java/org/bouncycastle/asn1/x509/Time.java new file mode 100644 index 0000000..f8ca4e2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/Time.java @@ -0,0 +1,122 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Calendar; +import java.util.Date; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERUTCTime; + +public class Time + extends ASN1Object + implements ASN1Choice +{ + ASN1Primitive time; + + public static Time getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(obj.getObject()); // must be explicitly tagged + } + + public Time( + ASN1Primitive time) + { + if (!(time instanceof DERUTCTime) + && !(time instanceof DERGeneralizedTime)) + { + throw new IllegalArgumentException("unknown object passed to Time"); + } + + this.time = time; + } + + /** + * creates a time object from a given date - if the date is between 1950 + * and 2049 a UTCTime object is generated, otherwise a GeneralizedTime + * is used. + */ + public Time( + Date date) + { + Calendar calendar = Calendar.getInstance(); + + calendar.setTime(date); + + int year = calendar.get(Calendar.YEAR); + + if (year < 1950 || year > 2049) + { + time = new DERGeneralizedTime(date); + } + else + { + time = new DERUTCTime(date); + } + } + + public static Time getInstance( + Object obj) + { + if (obj == null || obj instanceof Time) + { + return (Time)obj; + } + else if (obj instanceof DERUTCTime) + { + return new Time((DERUTCTime)obj); + } + else if (obj instanceof DERGeneralizedTime) + { + return new Time((DERGeneralizedTime)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public String getTime() + { + if (time instanceof DERUTCTime) + { + return ((DERUTCTime)time).getAdjustedTime(); + } + else + { + return ((DERGeneralizedTime)time).getTime(); + } + } + + public Date getDate() + { + if (time instanceof DERUTCTime) + { + return ((DERUTCTime)time).getAdjustedDate(); + } + else + { + return ((DERGeneralizedTime)time).getDate(); + } + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * Time ::= CHOICE {
        +     *             utcTime        UTCTime,
        +     *             generalTime    GeneralizedTime }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + return time; + } + + public String toString() + { + return getTime(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/UserNotice.java b/common/src/main/java/org/bouncycastle/asn1/x509/UserNotice.java new file mode 100644 index 0000000..ebc0405 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/UserNotice.java @@ -0,0 +1,132 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * UserNotice class, used in + * CertificatePolicies X509 extensions (in policy + * qualifiers). + *
        + * UserNotice ::= SEQUENCE {
        + *      noticeRef        NoticeReference OPTIONAL,
        + *      explicitText     DisplayText OPTIONAL}
        + *
        + * 
        + * + * @see PolicyQualifierId + * @see PolicyInformation + */ +public class UserNotice + extends ASN1Object +{ + private NoticeReference noticeRef; + private DisplayText explicitText; + + /** + * Creates a new UserNotice instance. + * + * @param noticeRef a NoticeReference value + * @param explicitText a DisplayText value + */ + public UserNotice( + NoticeReference noticeRef, + DisplayText explicitText) + { + this.noticeRef = noticeRef; + this.explicitText = explicitText; + } + + /** + * Creates a new UserNotice instance. + * + * @param noticeRef a NoticeReference value + * @param str the explicitText field as a String. + */ + public UserNotice( + NoticeReference noticeRef, + String str) + { + this(noticeRef, new DisplayText(str)); + } + + /** + * Creates a new UserNotice instance. + *

        Useful from reconstructing a UserNotice instance + * from its encodable/encoded form. + * + * @param as an ASN1Sequence value obtained from either + * calling @{link toASN1Primitive()} for a UserNotice + * instance or from parsing it from a DER-encoded stream. + */ + private UserNotice( + ASN1Sequence as) + { + if (as.size() == 2) + { + noticeRef = NoticeReference.getInstance(as.getObjectAt(0)); + explicitText = DisplayText.getInstance(as.getObjectAt(1)); + } + else if (as.size() == 1) + { + if (as.getObjectAt(0).toASN1Primitive() instanceof ASN1Sequence) + { + noticeRef = NoticeReference.getInstance(as.getObjectAt(0)); + } + else + { + explicitText = DisplayText.getInstance(as.getObjectAt(0)); + } + } + else + { + throw new IllegalArgumentException("Bad sequence size: " + as.size()); + } + } + + public static UserNotice getInstance( + Object obj) + { + if (obj instanceof UserNotice) + { + return (UserNotice)obj; + } + + if (obj != null) + { + return new UserNotice(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public NoticeReference getNoticeRef() + { + return noticeRef; + } + + public DisplayText getExplicitText() + { + return explicitText; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector av = new ASN1EncodableVector(); + + if (noticeRef != null) + { + av.add(noticeRef); + } + + if (explicitText != null) + { + av.add(explicitText); + } + + return new DERSequence(av); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java b/common/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java new file mode 100644 index 0000000..437d6c0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java @@ -0,0 +1,144 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.DERUTCTime; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * Generator for Version 1 TBSCertificateStructures. + *

        + * TBSCertificate ::= SEQUENCE {
        + *      version          [ 0 ]  Version DEFAULT v1(0),
        + *      serialNumber            CertificateSerialNumber,
        + *      signature               AlgorithmIdentifier,
        + *      issuer                  Name,
        + *      validity                Validity,
        + *      subject                 Name,
        + *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        + *      }
        + * 
        + * + */ +public class V1TBSCertificateGenerator +{ + DERTaggedObject version = new DERTaggedObject(true, 0, new ASN1Integer(0)); + + ASN1Integer serialNumber; + AlgorithmIdentifier signature; + X500Name issuer; + Time startDate, endDate; + X500Name subject; + SubjectPublicKeyInfo subjectPublicKeyInfo; + + public V1TBSCertificateGenerator() + { + } + + public void setSerialNumber( + ASN1Integer serialNumber) + { + this.serialNumber = serialNumber; + } + + public void setSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + /** + * @deprecated use X500Name method + */ + public void setIssuer( + X509Name issuer) + { + this.issuer = X500Name.getInstance(issuer.toASN1Primitive()); + } + + public void setIssuer( + X500Name issuer) + { + this.issuer = issuer; + } + + public void setStartDate( + Time startDate) + { + this.startDate = startDate; + } + + public void setStartDate( + DERUTCTime startDate) + { + this.startDate = new Time(startDate); + } + + public void setEndDate( + Time endDate) + { + this.endDate = endDate; + } + + public void setEndDate( + DERUTCTime endDate) + { + this.endDate = new Time(endDate); + } + + /** + * @deprecated use X500Name method + */ + public void setSubject( + X509Name subject) + { + this.subject = X500Name.getInstance(subject.toASN1Primitive()); + } + + public void setSubject( + X500Name subject) + { + this.subject = subject; + } + + public void setSubjectPublicKeyInfo( + SubjectPublicKeyInfo pubKeyInfo) + { + this.subjectPublicKeyInfo = pubKeyInfo; + } + + public TBSCertificate generateTBSCertificate() + { + if ((serialNumber == null) || (signature == null) + || (issuer == null) || (startDate == null) || (endDate == null) + || (subject == null) || (subjectPublicKeyInfo == null)) + { + throw new IllegalStateException("not all mandatory fields set in V1 TBScertificate generator"); + } + + ASN1EncodableVector seq = new ASN1EncodableVector(); + + // seq.add(version); - not required as default value. + seq.add(serialNumber); + seq.add(signature); + seq.add(issuer); + + // + // before and after dates + // + ASN1EncodableVector validity = new ASN1EncodableVector(); + + validity.add(startDate); + validity.add(endDate); + + seq.add(new DERSequence(validity)); + + seq.add(subject); + + seq.add(subjectPublicKeyInfo); + + return TBSCertificate.getInstance(new DERSequence(seq)); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java b/common/src/main/java/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java new file mode 100644 index 0000000..23591db --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/V2AttributeCertificateInfoGenerator.java @@ -0,0 +1,158 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERSet; + +/** + * Generator for Version 2 AttributeCertificateInfo + *
        + * AttributeCertificateInfo ::= SEQUENCE {
        + *       version              AttCertVersion -- version is v2,
        + *       holder               Holder,
        + *       issuer               AttCertIssuer,
        + *       signature            AlgorithmIdentifier,
        + *       serialNumber         CertificateSerialNumber,
        + *       attrCertValidityPeriod   AttCertValidityPeriod,
        + *       attributes           SEQUENCE OF Attribute,
        + *       issuerUniqueID       UniqueIdentifier OPTIONAL,
        + *       extensions           Extensions OPTIONAL
        + * }
        + * 
        + * + */ +public class V2AttributeCertificateInfoGenerator +{ + private ASN1Integer version; + private Holder holder; + private AttCertIssuer issuer; + private AlgorithmIdentifier signature; + private ASN1Integer serialNumber; + private ASN1EncodableVector attributes; + private DERBitString issuerUniqueID; + private Extensions extensions; + + // Note: validity period start/end dates stored directly + //private AttCertValidityPeriod attrCertValidityPeriod; + private DERGeneralizedTime startDate, endDate; + + public V2AttributeCertificateInfoGenerator() + { + this.version = new ASN1Integer(1); + attributes = new ASN1EncodableVector(); + } + + public void setHolder(Holder holder) + { + this.holder = holder; + } + + public void addAttribute(String oid, ASN1Encodable value) + { + attributes.add(new Attribute(new ASN1ObjectIdentifier(oid), new DERSet(value))); + } + + /** + * @param attribute + */ + public void addAttribute(Attribute attribute) + { + attributes.add(attribute); + } + + public void setSerialNumber( + ASN1Integer serialNumber) + { + this.serialNumber = serialNumber; + } + + public void setSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + public void setIssuer( + AttCertIssuer issuer) + { + this.issuer = issuer; + } + + public void setStartDate( + DERGeneralizedTime startDate) + { + this.startDate = startDate; + } + + public void setEndDate( + DERGeneralizedTime endDate) + { + this.endDate = endDate; + } + + public void setIssuerUniqueID( + DERBitString issuerUniqueID) + { + this.issuerUniqueID = issuerUniqueID; + } + + /** + * @deprecated use method taking Extensions + * @param extensions + */ + public void setExtensions( + X509Extensions extensions) + { + this.extensions = Extensions.getInstance(extensions.toASN1Primitive()); + } + + public void setExtensions( + Extensions extensions) + { + this.extensions = extensions; + } + + public AttributeCertificateInfo generateAttributeCertificateInfo() + { + if ((serialNumber == null) || (signature == null) + || (issuer == null) || (startDate == null) || (endDate == null) + || (holder == null) || (attributes == null)) + { + throw new IllegalStateException("not all mandatory fields set in V2 AttributeCertificateInfo generator"); + } + + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(version); + v.add(holder); + v.add(issuer); + v.add(signature); + v.add(serialNumber); + + // + // before and after dates => AttCertValidityPeriod + // + AttCertValidityPeriod validity = new AttCertValidityPeriod(startDate, endDate); + v.add(validity); + + // Attributes + v.add(new DERSequence(attributes)); + + if (issuerUniqueID != null) + { + v.add(issuerUniqueID); + } + + if (extensions != null) + { + v.add(extensions); + } + + return AttributeCertificateInfo.getInstance(new DERSequence(v)); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/V2Form.java b/common/src/main/java/org/bouncycastle/asn1/x509/V2Form.java new file mode 100644 index 0000000..ed5c6ab --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/V2Form.java @@ -0,0 +1,130 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +public class V2Form + extends ASN1Object +{ + GeneralNames issuerName; + IssuerSerial baseCertificateID; + ObjectDigestInfo objectDigestInfo; + + public static V2Form getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static V2Form getInstance( + Object obj) + { + if (obj == null || obj instanceof V2Form) + { + return (V2Form)obj; + } + else if (obj instanceof ASN1Sequence) + { + return new V2Form((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName()); + } + + public V2Form( + GeneralNames issuerName) + { + this.issuerName = issuerName; + } + + public V2Form( + ASN1Sequence seq) + { + if (seq.size() > 3) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + int index = 0; + + if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject)) + { + index++; + this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0)); + } + + for (int i = index; i != seq.size(); i++) + { + ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i)); + if (o.getTagNo() == 0) + { + baseCertificateID = IssuerSerial.getInstance(o, false); + } + else if (o.getTagNo() == 1) + { + objectDigestInfo = ObjectDigestInfo.getInstance(o, false); + } + else + { + throw new IllegalArgumentException("Bad tag number: " + + o.getTagNo()); + } + } + } + + public GeneralNames getIssuerName() + { + return issuerName; + } + + public IssuerSerial getBaseCertificateID() + { + return baseCertificateID; + } + + public ObjectDigestInfo getObjectDigestInfo() + { + return objectDigestInfo; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  V2Form ::= SEQUENCE {
        +     *       issuerName            GeneralNames  OPTIONAL,
        +     *       baseCertificateID     [0] IssuerSerial  OPTIONAL,
        +     *       objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
        +     *         -- issuerName MUST be present in this profile
        +     *         -- baseCertificateID and objectDigestInfo MUST NOT
        +     *         -- be present in this profile
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (issuerName != null) + { + v.add(issuerName); + } + + if (baseCertificateID != null) + { + v.add(new DERTaggedObject(false, 0, baseCertificateID)); + } + + if (objectDigestInfo != null) + { + v.add(new DERTaggedObject(false, 1, objectDigestInfo)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java b/common/src/main/java/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java new file mode 100644 index 0000000..59a2604 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/V2TBSCertListGenerator.java @@ -0,0 +1,281 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.DERUTCTime; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * Generator for Version 2 TBSCertList structures. + *
        + *  TBSCertList  ::=  SEQUENCE  {
        + *       version                 Version OPTIONAL,
        + *                                    -- if present, shall be v2
        + *       signature               AlgorithmIdentifier,
        + *       issuer                  Name,
        + *       thisUpdate              Time,
        + *       nextUpdate              Time OPTIONAL,
        + *       revokedCertificates     SEQUENCE OF SEQUENCE  {
        + *            userCertificate         CertificateSerialNumber,
        + *            revocationDate          Time,
        + *            crlEntryExtensions      Extensions OPTIONAL
        + *                                          -- if present, shall be v2
        + *                                 }  OPTIONAL,
        + *       crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
        + *                                          -- if present, shall be v2
        + *                                 }
        + * 
        + * + * Note: This class may be subject to change + */ +public class V2TBSCertListGenerator +{ + private ASN1Integer version = new ASN1Integer(1); + private AlgorithmIdentifier signature; + private X500Name issuer; + private Time thisUpdate, nextUpdate=null; + private Extensions extensions = null; + private ASN1EncodableVector crlentries = new ASN1EncodableVector(); + + private final static ASN1Sequence[] reasons; + + static + { + reasons = new ASN1Sequence[11]; + + reasons[0] = createReasonExtension(CRLReason.unspecified); + reasons[1] = createReasonExtension(CRLReason.keyCompromise); + reasons[2] = createReasonExtension(CRLReason.cACompromise); + reasons[3] = createReasonExtension(CRLReason.affiliationChanged); + reasons[4] = createReasonExtension(CRLReason.superseded); + reasons[5] = createReasonExtension(CRLReason.cessationOfOperation); + reasons[6] = createReasonExtension(CRLReason.certificateHold); + reasons[7] = createReasonExtension(7); // 7 -> unknown + reasons[8] = createReasonExtension(CRLReason.removeFromCRL); + reasons[9] = createReasonExtension(CRLReason.privilegeWithdrawn); + reasons[10] = createReasonExtension(CRLReason.aACompromise); + } + + public V2TBSCertListGenerator() + { + } + + + public void setSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + /** + * @deprecated use X500Name method + */ + public void setIssuer( + X509Name issuer) + { + this.issuer = X500Name.getInstance(issuer.toASN1Primitive()); + } + + public void setIssuer(X500Name issuer) + { + this.issuer = issuer; + } + + public void setThisUpdate( + DERUTCTime thisUpdate) + { + this.thisUpdate = new Time(thisUpdate); + } + + public void setNextUpdate( + DERUTCTime nextUpdate) + { + this.nextUpdate = new Time(nextUpdate); + } + + public void setThisUpdate( + Time thisUpdate) + { + this.thisUpdate = thisUpdate; + } + + public void setNextUpdate( + Time nextUpdate) + { + this.nextUpdate = nextUpdate; + } + + public void addCRLEntry( + ASN1Sequence crlEntry) + { + crlentries.add(crlEntry); + } + + public void addCRLEntry(ASN1Integer userCertificate, DERUTCTime revocationDate, int reason) + { + addCRLEntry(userCertificate, new Time(revocationDate), reason); + } + + public void addCRLEntry(ASN1Integer userCertificate, Time revocationDate, int reason) + { + addCRLEntry(userCertificate, revocationDate, reason, null); + } + + public void addCRLEntry(ASN1Integer userCertificate, Time revocationDate, int reason, DERGeneralizedTime invalidityDate) + { + if (reason != 0) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (reason < reasons.length) + { + if (reason < 0) + { + throw new IllegalArgumentException("invalid reason value: " + reason); + } + v.add(reasons[reason]); + } + else + { + v.add(createReasonExtension(reason)); + } + + if (invalidityDate != null) + { + v.add(createInvalidityDateExtension(revocationDate)); + } + + internalAddCRLEntry(userCertificate, revocationDate, new DERSequence(v)); + } + else if (invalidityDate != null) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(createInvalidityDateExtension(revocationDate)); + + internalAddCRLEntry(userCertificate, revocationDate, new DERSequence(v)); + } + else + { + addCRLEntry(userCertificate, revocationDate, null); + } + } + + private void internalAddCRLEntry(ASN1Integer userCertificate, Time revocationDate, ASN1Sequence extensions) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(userCertificate); + v.add(revocationDate); + + if (extensions != null) + { + v.add(extensions); + } + + addCRLEntry(new DERSequence(v)); + } + + public void addCRLEntry(ASN1Integer userCertificate, Time revocationDate, Extensions extensions) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(userCertificate); + v.add(revocationDate); + + if (extensions != null) + { + v.add(extensions); + } + + addCRLEntry(new DERSequence(v)); + } + + public void setExtensions( + X509Extensions extensions) + { + setExtensions(Extensions.getInstance(extensions)); + } + + public void setExtensions( + Extensions extensions) + { + this.extensions = extensions; + } + + public TBSCertList generateTBSCertList() + { + if ((signature == null) || (issuer == null) || (thisUpdate == null)) + { + throw new IllegalStateException("Not all mandatory fields set in V2 TBSCertList generator."); + } + + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(version); + v.add(signature); + v.add(issuer); + + v.add(thisUpdate); + if (nextUpdate != null) + { + v.add(nextUpdate); + } + + // Add CRLEntries if they exist + if (crlentries.size() != 0) + { + v.add(new DERSequence(crlentries)); + } + + if (extensions != null) + { + v.add(new DERTaggedObject(0, extensions)); + } + + return new TBSCertList(new DERSequence(v)); + } + + private static ASN1Sequence createReasonExtension(int reasonCode) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + CRLReason crlReason = CRLReason.lookup(reasonCode); + + try + { + v.add(X509Extension.reasonCode); + v.add(new DEROctetString(crlReason.getEncoded())); + } + catch (IOException e) + { + throw new IllegalArgumentException("error encoding reason: " + e); + } + + return new DERSequence(v); + } + + private static ASN1Sequence createInvalidityDateExtension(Time invalidityDate) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + try + { + v.add(X509Extension.invalidityDate); + v.add(new DEROctetString(invalidityDate.getEncoded())); + } + catch (IOException e) + { + throw new IllegalArgumentException("error encoding reason: " + e); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java b/common/src/main/java/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java new file mode 100644 index 0000000..3d923b6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java @@ -0,0 +1,212 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.DERUTCTime; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * Generator for Version 3 TBSCertificateStructures. + *
        + * TBSCertificate ::= SEQUENCE {
        + *      version          [ 0 ]  Version DEFAULT v1(0),
        + *      serialNumber            CertificateSerialNumber,
        + *      signature               AlgorithmIdentifier,
        + *      issuer                  Name,
        + *      validity                Validity,
        + *      subject                 Name,
        + *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
        + *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
        + *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
        + *      extensions        [ 3 ] Extensions OPTIONAL
        + *      }
        + * 
        + * + */ +public class V3TBSCertificateGenerator +{ + DERTaggedObject version = new DERTaggedObject(true, 0, new ASN1Integer(2)); + + ASN1Integer serialNumber; + AlgorithmIdentifier signature; + X500Name issuer; + Time startDate, endDate; + X500Name subject; + SubjectPublicKeyInfo subjectPublicKeyInfo; + Extensions extensions; + + private boolean altNamePresentAndCritical; + private DERBitString issuerUniqueID; + private DERBitString subjectUniqueID; + + public V3TBSCertificateGenerator() + { + } + + public void setSerialNumber( + ASN1Integer serialNumber) + { + this.serialNumber = serialNumber; + } + + public void setSignature( + AlgorithmIdentifier signature) + { + this.signature = signature; + } + + /** + * @deprecated use X500Name method + */ + public void setIssuer( + X509Name issuer) + { + this.issuer = X500Name.getInstance(issuer); + } + + public void setIssuer( + X500Name issuer) + { + this.issuer = issuer; + } + + public void setStartDate( + DERUTCTime startDate) + { + this.startDate = new Time(startDate); + } + + public void setStartDate( + Time startDate) + { + this.startDate = startDate; + } + + public void setEndDate( + DERUTCTime endDate) + { + this.endDate = new Time(endDate); + } + + public void setEndDate( + Time endDate) + { + this.endDate = endDate; + } + + /** + * @deprecated use X500Name method + */ + public void setSubject( + X509Name subject) + { + this.subject = X500Name.getInstance(subject.toASN1Primitive()); + } + + public void setSubject( + X500Name subject) + { + this.subject = subject; + } + + public void setIssuerUniqueID( + DERBitString uniqueID) + { + this.issuerUniqueID = uniqueID; + } + + public void setSubjectUniqueID( + DERBitString uniqueID) + { + this.subjectUniqueID = uniqueID; + } + + public void setSubjectPublicKeyInfo( + SubjectPublicKeyInfo pubKeyInfo) + { + this.subjectPublicKeyInfo = pubKeyInfo; + } + + /** + * @deprecated use method taking Extensions + * @param extensions + */ + public void setExtensions( + X509Extensions extensions) + { + setExtensions(Extensions.getInstance(extensions)); + } + + public void setExtensions( + Extensions extensions) + { + this.extensions = extensions; + if (extensions != null) + { + Extension altName = extensions.getExtension(Extension.subjectAlternativeName); + + if (altName != null && altName.isCritical()) + { + altNamePresentAndCritical = true; + } + } + } + + public TBSCertificate generateTBSCertificate() + { + if ((serialNumber == null) || (signature == null) + || (issuer == null) || (startDate == null) || (endDate == null) + || (subject == null && !altNamePresentAndCritical) || (subjectPublicKeyInfo == null)) + { + throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator"); + } + + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(version); + v.add(serialNumber); + v.add(signature); + v.add(issuer); + + // + // before and after dates + // + ASN1EncodableVector validity = new ASN1EncodableVector(); + + validity.add(startDate); + validity.add(endDate); + + v.add(new DERSequence(validity)); + + if (subject != null) + { + v.add(subject); + } + else + { + v.add(new DERSequence()); + } + + v.add(subjectPublicKeyInfo); + + if (issuerUniqueID != null) + { + v.add(new DERTaggedObject(false, 1, issuerUniqueID)); + } + + if (subjectUniqueID != null) + { + v.add(new DERTaggedObject(false, 2, subjectUniqueID)); + } + + if (extensions != null) + { + v.add(new DERTaggedObject(true, 3, extensions)); + } + + return TBSCertificate.getInstance(new DERSequence(v)); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java new file mode 100644 index 0000000..0ed12f7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509AttributeIdentifiers.java @@ -0,0 +1,29 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +public interface X509AttributeIdentifiers +{ + /** + * @deprecated use id_at_role + */ + static final ASN1ObjectIdentifier RoleSyntax = new ASN1ObjectIdentifier("2.5.4.72"); + + static final ASN1ObjectIdentifier id_pe_ac_auditIdentity = X509ObjectIdentifiers.id_pe.branch("4"); + static final ASN1ObjectIdentifier id_pe_aaControls = X509ObjectIdentifiers.id_pe.branch("6"); + static final ASN1ObjectIdentifier id_pe_ac_proxying = X509ObjectIdentifiers.id_pe.branch("10"); + + static final ASN1ObjectIdentifier id_ce_targetInformation= X509ObjectIdentifiers.id_ce.branch("55"); + + static final ASN1ObjectIdentifier id_aca = X509ObjectIdentifiers.id_pkix.branch("10"); + + static final ASN1ObjectIdentifier id_aca_authenticationInfo = id_aca.branch("1"); + static final ASN1ObjectIdentifier id_aca_accessIdentity = id_aca.branch("2"); + static final ASN1ObjectIdentifier id_aca_chargingIdentity = id_aca.branch("3"); + static final ASN1ObjectIdentifier id_aca_group = id_aca.branch("4"); + // { id-aca 5 } is reserved + static final ASN1ObjectIdentifier id_aca_encAttrs = id_aca.branch("6"); + + static final ASN1ObjectIdentifier id_at_role = new ASN1ObjectIdentifier("2.5.4.72"); + static final ASN1ObjectIdentifier id_at_clearance = new ASN1ObjectIdentifier("2.5.1.5.55"); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509CertificateStructure.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509CertificateStructure.java new file mode 100644 index 0000000..b4c97c8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509CertificateStructure.java @@ -0,0 +1,129 @@ +package org.bouncycastle.asn1.x509; + +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x500.X500Name; + +/** + * an X509Certificate structure. + *
        + *  Certificate ::= SEQUENCE {
        + *      tbsCertificate          TBSCertificate,
        + *      signatureAlgorithm      AlgorithmIdentifier,
        + *      signature               BIT STRING
        + *  }
        + * 
        + * @deprecated use org.bouncycastle.asn1.x509.Certificate + */ +public class X509CertificateStructure + extends ASN1Object + //implements X509ObjectIdentifiers, PKCSObjectIdentifiers +{ + ASN1Sequence seq; + TBSCertificateStructure tbsCert; + AlgorithmIdentifier sigAlgId; + DERBitString sig; + + public static X509CertificateStructure getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static X509CertificateStructure getInstance( + Object obj) + { + if (obj instanceof X509CertificateStructure) + { + return (X509CertificateStructure)obj; + } + else if (obj != null) + { + return new X509CertificateStructure(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public X509CertificateStructure( + ASN1Sequence seq) + { + this.seq = seq; + + // + // correct x509 certficate + // + if (seq.size() == 3) + { + tbsCert = TBSCertificateStructure.getInstance(seq.getObjectAt(0)); + sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); + + sig = DERBitString.getInstance(seq.getObjectAt(2)); + } + else + { + throw new IllegalArgumentException("sequence wrong size for a certificate"); + } + } + + public TBSCertificateStructure getTBSCertificate() + { + return tbsCert; + } + + public int getVersion() + { + return tbsCert.getVersion(); + } + + public ASN1Integer getSerialNumber() + { + return tbsCert.getSerialNumber(); + } + + public X500Name getIssuer() + { + return tbsCert.getIssuer(); + } + + public Time getStartDate() + { + return tbsCert.getStartDate(); + } + + public Time getEndDate() + { + return tbsCert.getEndDate(); + } + + public X500Name getSubject() + { + return tbsCert.getSubject(); + } + + public SubjectPublicKeyInfo getSubjectPublicKeyInfo() + { + return tbsCert.getSubjectPublicKeyInfo(); + } + + public AlgorithmIdentifier getSignatureAlgorithm() + { + return sigAlgId; + } + + public DERBitString getSignature() + { + return sig; + } + + public ASN1Primitive toASN1Primitive() + { + return seq; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java new file mode 100644 index 0000000..0ae0f80 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509DefaultEntryConverter.java @@ -0,0 +1,65 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DERPrintableString; +import org.bouncycastle.asn1.DERUTF8String; + +/** + * The default converter for X509 DN entries when going from their + * string value to ASN.1 strings. + */ +public class X509DefaultEntryConverter + extends X509NameEntryConverter +{ + /** + * Apply default coversion for the given value depending on the oid + * and the character range of the value. + * + * @param oid the object identifier for the DN entry + * @param value the value associated with it + * @return the ASN.1 equivalent for the string value. + */ + public ASN1Primitive getConvertedValue( + ASN1ObjectIdentifier oid, + String value) + { + if (value.length() != 0 && value.charAt(0) == '#') + { + try + { + return convertHexEncoded(value, 1); + } + catch (IOException e) + { + throw new RuntimeException("can't recode value for oid " + oid.getId()); + } + } + else + { + if (value.length() != 0 && value.charAt(0) == '\\') + { + value = value.substring(1); + } + if (oid.equals(X509Name.EmailAddress) || oid.equals(X509Name.DC)) + { + return new DERIA5String(value); + } + else if (oid.equals(X509Name.DATE_OF_BIRTH)) // accept time string as well as # (for compatibility) + { + return new DERGeneralizedTime(value); + } + else if (oid.equals(X509Name.C) || oid.equals(X509Name.SN) || oid.equals(X509Name.DN_QUALIFIER) + || oid.equals(X509Name.TELEPHONE_NUMBER)) + { + return new DERPrintableString(value); + } + } + + return new DERUTF8String(value); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509Extension.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509Extension.java new file mode 100644 index 0000000..f020bcb --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509Extension.java @@ -0,0 +1,248 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DERBoolean; + +/** + * an object for the elements in the X.509 V3 extension block. + */ +public class X509Extension +{ + /** + * Subject Directory Attributes + */ + public static final ASN1ObjectIdentifier subjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9"); + + /** + * Subject Key Identifier + */ + public static final ASN1ObjectIdentifier subjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14"); + + /** + * Key Usage + */ + public static final ASN1ObjectIdentifier keyUsage = new ASN1ObjectIdentifier("2.5.29.15"); + + /** + * Private Key Usage Period + */ + public static final ASN1ObjectIdentifier privateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16"); + + /** + * Subject Alternative Name + */ + public static final ASN1ObjectIdentifier subjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17"); + + /** + * Issuer Alternative Name + */ + public static final ASN1ObjectIdentifier issuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18"); + + /** + * Basic Constraints + */ + public static final ASN1ObjectIdentifier basicConstraints = new ASN1ObjectIdentifier("2.5.29.19"); + + /** + * CRL Number + */ + public static final ASN1ObjectIdentifier cRLNumber = new ASN1ObjectIdentifier("2.5.29.20"); + + /** + * Reason code + */ + public static final ASN1ObjectIdentifier reasonCode = new ASN1ObjectIdentifier("2.5.29.21"); + + /** + * Hold Instruction Code + */ + public static final ASN1ObjectIdentifier instructionCode = new ASN1ObjectIdentifier("2.5.29.23"); + + /** + * Invalidity Date + */ + public static final ASN1ObjectIdentifier invalidityDate = new ASN1ObjectIdentifier("2.5.29.24"); + + /** + * Delta CRL indicator + */ + public static final ASN1ObjectIdentifier deltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27"); + + /** + * Issuing Distribution Point + */ + public static final ASN1ObjectIdentifier issuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28"); + + /** + * Certificate Issuer + */ + public static final ASN1ObjectIdentifier certificateIssuer = new ASN1ObjectIdentifier("2.5.29.29"); + + /** + * Name Constraints + */ + public static final ASN1ObjectIdentifier nameConstraints = new ASN1ObjectIdentifier("2.5.29.30"); + + /** + * CRL Distribution Points + */ + public static final ASN1ObjectIdentifier cRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31"); + + /** + * Certificate Policies + */ + public static final ASN1ObjectIdentifier certificatePolicies = new ASN1ObjectIdentifier("2.5.29.32"); + + /** + * Policy Mappings + */ + public static final ASN1ObjectIdentifier policyMappings = new ASN1ObjectIdentifier("2.5.29.33"); + + /** + * Authority Key Identifier + */ + public static final ASN1ObjectIdentifier authorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35"); + + /** + * Policy Constraints + */ + public static final ASN1ObjectIdentifier policyConstraints = new ASN1ObjectIdentifier("2.5.29.36"); + + /** + * Extended Key Usage + */ + public static final ASN1ObjectIdentifier extendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37"); + + /** + * Freshest CRL + */ + public static final ASN1ObjectIdentifier freshestCRL = new ASN1ObjectIdentifier("2.5.29.46"); + + /** + * Inhibit Any Policy + */ + public static final ASN1ObjectIdentifier inhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54"); + + /** + * Authority Info Access + */ + public static final ASN1ObjectIdentifier authorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1"); + + /** + * Subject Info Access + */ + public static final ASN1ObjectIdentifier subjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11"); + + /** + * Logo Type + */ + public static final ASN1ObjectIdentifier logoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12"); + + /** + * BiometricInfo + */ + public static final ASN1ObjectIdentifier biometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2"); + + /** + * QCStatements + */ + public static final ASN1ObjectIdentifier qCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3"); + + /** + * Audit identity extension in attribute certificates. + */ + public static final ASN1ObjectIdentifier auditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4"); + + /** + * NoRevAvail extension in attribute certificates. + */ + public static final ASN1ObjectIdentifier noRevAvail = new ASN1ObjectIdentifier("2.5.29.56"); + + /** + * TargetInformation extension in attribute certificates. + */ + public static final ASN1ObjectIdentifier targetInformation = new ASN1ObjectIdentifier("2.5.29.55"); + + boolean critical; + ASN1OctetString value; + + public X509Extension( + DERBoolean critical, + ASN1OctetString value) + { + this.critical = critical.isTrue(); + this.value = value; + } + + public X509Extension( + boolean critical, + ASN1OctetString value) + { + this.critical = critical; + this.value = value; + } + + public boolean isCritical() + { + return critical; + } + + public ASN1OctetString getValue() + { + return value; + } + + public ASN1Encodable getParsedValue() + { + return convertValueToObject(this); + } + + public int hashCode() + { + if (this.isCritical()) + { + return this.getValue().hashCode(); + } + + return ~this.getValue().hashCode(); + } + + public boolean equals( + Object o) + { + if (!(o instanceof X509Extension)) + { + return false; + } + + X509Extension other = (X509Extension)o; + + return other.getValue().equals(this.getValue()) + && (other.isCritical() == this.isCritical()); + } + + /** + * Convert the value of the passed in extension to an object + * @param ext the extension to parse + * @return the object the value string contains + * @exception IllegalArgumentException if conversion is not possible + */ + public static ASN1Primitive convertValueToObject( + X509Extension ext) + throws IllegalArgumentException + { + try + { + return ASN1Primitive.fromByteArray(ext.getValue().getOctets()); + } + catch (IOException e) + { + throw new IllegalArgumentException("can't convert extension: " + e); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java new file mode 100644 index 0000000..242edf7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509Extensions.java @@ -0,0 +1,487 @@ +package org.bouncycastle.asn1.x509; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBoolean; +import org.bouncycastle.asn1.DERObjectIdentifier; +import org.bouncycastle.asn1.DERSequence; + +/** + * @deprecated use Extensions + */ +public class X509Extensions + extends ASN1Object +{ + /** + * Subject Directory Attributes + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier SubjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9"); + + /** + * Subject Key Identifier + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier SubjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14"); + + /** + * Key Usage + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier KeyUsage = new ASN1ObjectIdentifier("2.5.29.15"); + + /** + * Private Key Usage Period + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier PrivateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16"); + + /** + * Subject Alternative Name + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier SubjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17"); + + /** + * Issuer Alternative Name + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier IssuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18"); + + /** + * Basic Constraints + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier BasicConstraints = new ASN1ObjectIdentifier("2.5.29.19"); + + /** + * CRL Number + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier CRLNumber = new ASN1ObjectIdentifier("2.5.29.20"); + + /** + * Reason code + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier ReasonCode = new ASN1ObjectIdentifier("2.5.29.21"); + + /** + * Hold Instruction Code + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier InstructionCode = new ASN1ObjectIdentifier("2.5.29.23"); + + /** + * Invalidity Date + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier InvalidityDate = new ASN1ObjectIdentifier("2.5.29.24"); + + /** + * Delta CRL indicator + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier DeltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27"); + + /** + * Issuing Distribution Point + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier IssuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28"); + + /** + * Certificate Issuer + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier CertificateIssuer = new ASN1ObjectIdentifier("2.5.29.29"); + + /** + * Name Constraints + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier NameConstraints = new ASN1ObjectIdentifier("2.5.29.30"); + + /** + * CRL Distribution Points + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier CRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31"); + + /** + * Certificate Policies + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier CertificatePolicies = new ASN1ObjectIdentifier("2.5.29.32"); + + /** + * Policy Mappings + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier PolicyMappings = new ASN1ObjectIdentifier("2.5.29.33"); + + /** + * Authority Key Identifier + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier AuthorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35"); + + /** + * Policy Constraints + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier PolicyConstraints = new ASN1ObjectIdentifier("2.5.29.36"); + + /** + * Extended Key Usage + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier ExtendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37"); + + /** + * Freshest CRL + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier FreshestCRL = new ASN1ObjectIdentifier("2.5.29.46"); + + /** + * Inhibit Any Policy + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier InhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54"); + + /** + * Authority Info Access + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier AuthorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1"); + + /** + * Subject Info Access + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier SubjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11"); + + /** + * Logo Type + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier LogoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12"); + + /** + * BiometricInfo + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier BiometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2"); + + /** + * QCStatements + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier QCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3"); + + /** + * Audit identity extension in attribute certificates. + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier AuditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4"); + + /** + * NoRevAvail extension in attribute certificates. + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier NoRevAvail = new ASN1ObjectIdentifier("2.5.29.56"); + + /** + * TargetInformation extension in attribute certificates. + * @deprecated use X509Extension value. + */ + public static final ASN1ObjectIdentifier TargetInformation = new ASN1ObjectIdentifier("2.5.29.55"); + + private Hashtable extensions = new Hashtable(); + private Vector ordering = new Vector(); + + public static X509Extensions getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static X509Extensions getInstance( + Object obj) + { + if (obj == null || obj instanceof X509Extensions) + { + return (X509Extensions)obj; + } + + if (obj instanceof ASN1Sequence) + { + return new X509Extensions((ASN1Sequence)obj); + } + + if (obj instanceof Extensions) + { + return new X509Extensions((ASN1Sequence)((Extensions)obj).toASN1Primitive()); + } + + if (obj instanceof ASN1TaggedObject) + { + return getInstance(((ASN1TaggedObject)obj).getObject()); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * Constructor from ASN1Sequence. + * + * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString) + */ + public X509Extensions( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1Sequence s = ASN1Sequence.getInstance(e.nextElement()); + + if (s.size() == 3) + { + extensions.put(s.getObjectAt(0), new X509Extension(DERBoolean.getInstance(s.getObjectAt(1)), ASN1OctetString.getInstance(s.getObjectAt(2)))); + } + else if (s.size() == 2) + { + extensions.put(s.getObjectAt(0), new X509Extension(false, ASN1OctetString.getInstance(s.getObjectAt(1)))); + } + else + { + throw new IllegalArgumentException("Bad sequence size: " + s.size()); + } + + ordering.addElement(s.getObjectAt(0)); + } + } + + /** + * constructor from a table of extensions. + *

        + * it's is assumed the table contains OID/String pairs. + */ + public X509Extensions( + Hashtable extensions) + { + this(null, extensions); + } + + /** + * Constructor from a table of extensions with ordering. + *

        + * It's is assumed the table contains OID/String pairs. + */ + public X509Extensions( + Vector ordering, + Hashtable extensions) + { + Enumeration e; + + if (ordering == null) + { + e = extensions.keys(); + } + else + { + e = ordering.elements(); + } + + while (e.hasMoreElements()) + { + this.ordering.addElement(ASN1ObjectIdentifier.getInstance(e.nextElement())); + } + + e = this.ordering.elements(); + + while (e.hasMoreElements()) + { + ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(e.nextElement()); + X509Extension ext = (X509Extension)extensions.get(oid); + + this.extensions.put(oid, ext); + } + } + + /** + * Constructor from two vectors + * + * @param objectIDs a vector of the object identifiers. + * @param values a vector of the extension values. + */ + public X509Extensions( + Vector objectIDs, + Vector values) + { + Enumeration e = objectIDs.elements(); + + while (e.hasMoreElements()) + { + this.ordering.addElement(e.nextElement()); + } + + int count = 0; + + e = this.ordering.elements(); + + while (e.hasMoreElements()) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement(); + X509Extension ext = (X509Extension)values.elementAt(count); + + this.extensions.put(oid, ext); + count++; + } + } + + /** + * return an Enumeration of the extension field's object ids. + */ + public Enumeration oids() + { + return ordering.elements(); + } + + /** + * return the extension represented by the object identifier + * passed in. + * + * @return the extension if it's present, null otherwise. + */ + public X509Extension getExtension( + DERObjectIdentifier oid) + { + return (X509Extension)extensions.get(oid); + } + + /** + * @deprecated + * @param oid + * @return + */ + public X509Extension getExtension( + ASN1ObjectIdentifier oid) + { + return (X509Extension)extensions.get(oid); + } + + /** + *

        +     *     Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
        +     *
        +     *     Extension         ::=   SEQUENCE {
        +     *        extnId            EXTENSION.&id ({ExtensionSet}),
        +     *        critical          BOOLEAN DEFAULT FALSE,
        +     *        extnValue         OCTET STRING }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + Enumeration e = ordering.elements(); + + while (e.hasMoreElements()) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement(); + X509Extension ext = (X509Extension)extensions.get(oid); + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(oid); + + if (ext.isCritical()) + { + v.add(new DERBoolean(true)); + } + + v.add(ext.getValue()); + + vec.add(new DERSequence(v)); + } + + return new DERSequence(vec); + } + + public boolean equivalent( + X509Extensions other) + { + if (extensions.size() != other.extensions.size()) + { + return false; + } + + Enumeration e1 = extensions.keys(); + + while (e1.hasMoreElements()) + { + Object key = e1.nextElement(); + + if (!extensions.get(key).equals(other.extensions.get(key))) + { + return false; + } + } + + return true; + } + + public ASN1ObjectIdentifier[] getExtensionOIDs() + { + return toOidArray(ordering); + } + + public ASN1ObjectIdentifier[] getNonCriticalExtensionOIDs() + { + return getExtensionOIDs(false); + } + + public ASN1ObjectIdentifier[] getCriticalExtensionOIDs() + { + return getExtensionOIDs(true); + } + + private ASN1ObjectIdentifier[] getExtensionOIDs(boolean isCritical) + { + Vector oidVec = new Vector(); + + for (int i = 0; i != ordering.size(); i++) + { + Object oid = ordering.elementAt(i); + + if (((X509Extension)extensions.get(oid)).isCritical() == isCritical) + { + oidVec.addElement(oid); + } + } + + return toOidArray(oidVec); + } + + private ASN1ObjectIdentifier[] toOidArray(Vector oidVec) + { + ASN1ObjectIdentifier[] oids = new ASN1ObjectIdentifier[oidVec.size()]; + + for (int i = 0; i != oids.length; i++) + { + oids[i] = (ASN1ObjectIdentifier)oidVec.elementAt(i); + } + return oids; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java new file mode 100644 index 0000000..468d1b9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509ExtensionsGenerator.java @@ -0,0 +1,117 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.DERObjectIdentifier; +import org.bouncycastle.asn1.DEROctetString; + +/** + * Generator for X.509 extensions + * @deprecated use org.bouncycastle.asn1.x509.ExtensionsGenerator + */ +public class X509ExtensionsGenerator +{ + private Hashtable extensions = new Hashtable(); + private Vector extOrdering = new Vector(); + + /** + * Reset the generator + */ + public void reset() + { + extensions = new Hashtable(); + extOrdering = new Vector(); + } + + /** + * @deprecated use ASN1ObjectIdentifier + */ + public void addExtension( + DERObjectIdentifier oid, + boolean critical, + ASN1Encodable value) + { + addExtension(new ASN1ObjectIdentifier(oid.getId()), critical, value); + } + + /** + * @deprecated use ASN1ObjectIdentifier + */ + public void addExtension( + DERObjectIdentifier oid, + boolean critical, + byte[] value) + { + addExtension(new ASN1ObjectIdentifier(oid.getId()), critical, value); + } + + /** + * Add an extension with the given oid and the passed in value to be included + * in the OCTET STRING associated with the extension. + * + * @param oid OID for the extension. + * @param critical true if critical, false otherwise. + * @param value the ASN.1 object to be included in the extension. + */ + public void addExtension( + ASN1ObjectIdentifier oid, + boolean critical, + ASN1Encodable value) + { + try + { + this.addExtension(oid, critical, value.toASN1Primitive().getEncoded(ASN1Encoding.DER)); + } + catch (IOException e) + { + throw new IllegalArgumentException("error encoding value: " + e); + } + } + + /** + * Add an extension with the given oid and the passed in byte array to be wrapped in the + * OCTET STRING associated with the extension. + * + * @param oid OID for the extension. + * @param critical true if critical, false otherwise. + * @param value the byte array to be wrapped. + */ + public void addExtension( + ASN1ObjectIdentifier oid, + boolean critical, + byte[] value) + { + if (extensions.containsKey(oid)) + { + throw new IllegalArgumentException("extension " + oid + " already added"); + } + + extOrdering.addElement(oid); + extensions.put(oid, new X509Extension(critical, new DEROctetString(value))); + } + + /** + * Return true if there are no extension present in this generator. + * + * @return true if empty, false otherwise + */ + public boolean isEmpty() + { + return extOrdering.isEmpty(); + } + + /** + * Generate an X509Extensions object based on the current state of the generator. + * + * @return an X09Extensions object. + */ + public X509Extensions generate() + { + return new X509Extensions(extOrdering, extensions); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509Name.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509Name.java new file mode 100644 index 0000000..78c8eb7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509Name.java @@ -0,0 +1,1280 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.ASN1String; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERSet; +import org.bouncycastle.asn1.DERUniversalString; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; + +/** + *
        + *     RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
        + *
        + *     RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
        + *
        + *     AttributeTypeAndValue ::= SEQUENCE {
        + *                                   type  OBJECT IDENTIFIER,
        + *                                   value ANY }
        + * 
        + * @deprecated use org.bouncycastle.asn1.x500.X500Name. + */ +public class X509Name + extends ASN1Object +{ + /** + * country code - StringType(SIZE(2)) + * @deprecated use a X500NameStyle + */ + public static final ASN1ObjectIdentifier C = new ASN1ObjectIdentifier("2.5.4.6"); + + /** + * organization - StringType(SIZE(1..64)) + * @deprecated use a X500NameStyle + */ + public static final ASN1ObjectIdentifier O = new ASN1ObjectIdentifier("2.5.4.10"); + + /** + * organizational unit name - StringType(SIZE(1..64)) + * @deprecated use a X500NameStyle + */ + public static final ASN1ObjectIdentifier OU = new ASN1ObjectIdentifier("2.5.4.11"); + + /** + * Title + * @deprecated use a X500NameStyle + */ + public static final ASN1ObjectIdentifier T = new ASN1ObjectIdentifier("2.5.4.12"); + + /** + * common name - StringType(SIZE(1..64)) + * @deprecated use a X500NameStyle + */ + public static final ASN1ObjectIdentifier CN = new ASN1ObjectIdentifier("2.5.4.3"); + + /** + * device serial number name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier SN = new ASN1ObjectIdentifier("2.5.4.5"); + + /** + * street - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier STREET = new ASN1ObjectIdentifier("2.5.4.9"); + + /** + * device serial number name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier SERIALNUMBER = SN; + + /** + * locality name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier L = new ASN1ObjectIdentifier("2.5.4.7"); + + /** + * state, or province name - StringType(SIZE(1..64)) + */ + public static final ASN1ObjectIdentifier ST = new ASN1ObjectIdentifier("2.5.4.8"); + + /** + * Naming attributes of type X520name + */ + public static final ASN1ObjectIdentifier SURNAME = new ASN1ObjectIdentifier("2.5.4.4"); + public static final ASN1ObjectIdentifier GIVENNAME = new ASN1ObjectIdentifier("2.5.4.42"); + public static final ASN1ObjectIdentifier INITIALS = new ASN1ObjectIdentifier("2.5.4.43"); + public static final ASN1ObjectIdentifier GENERATION = new ASN1ObjectIdentifier("2.5.4.44"); + public static final ASN1ObjectIdentifier UNIQUE_IDENTIFIER = new ASN1ObjectIdentifier("2.5.4.45"); + + /** + * businessCategory - DirectoryString(SIZE(1..128) + */ + public static final ASN1ObjectIdentifier BUSINESS_CATEGORY = new ASN1ObjectIdentifier( + "2.5.4.15"); + + /** + * postalCode - DirectoryString(SIZE(1..40) + */ + public static final ASN1ObjectIdentifier POSTAL_CODE = new ASN1ObjectIdentifier( + "2.5.4.17"); + + /** + * dnQualifier - DirectoryString(SIZE(1..64) + */ + public static final ASN1ObjectIdentifier DN_QUALIFIER = new ASN1ObjectIdentifier( + "2.5.4.46"); + + /** + * RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + */ + public static final ASN1ObjectIdentifier PSEUDONYM = new ASN1ObjectIdentifier( + "2.5.4.65"); + + + /** + * RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + */ + public static final ASN1ObjectIdentifier DATE_OF_BIRTH = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.1"); + + /** + * RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + */ + public static final ASN1ObjectIdentifier PLACE_OF_BIRTH = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.2"); + + /** + * RFC 3039 Gender - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + */ + public static final ASN1ObjectIdentifier GENDER = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.3"); + + /** + * RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + * codes only + */ + public static final ASN1ObjectIdentifier COUNTRY_OF_CITIZENSHIP = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.4"); + + /** + * RFC 3039 CountryOfResidence - PrintableString (SIZE (2)) -- ISO 3166 + * codes only + */ + public static final ASN1ObjectIdentifier COUNTRY_OF_RESIDENCE = new ASN1ObjectIdentifier( + "1.3.6.1.5.5.7.9.5"); + + + /** + * ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + */ + public static final ASN1ObjectIdentifier NAME_AT_BIRTH = new ASN1ObjectIdentifier("1.3.36.8.3.14"); + + /** + * RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + * DirectoryString(SIZE(1..30)) + */ + public static final ASN1ObjectIdentifier POSTAL_ADDRESS = new ASN1ObjectIdentifier("2.5.4.16"); + + /** + * RFC 2256 dmdName + */ + public static final ASN1ObjectIdentifier DMD_NAME = new ASN1ObjectIdentifier("2.5.4.54"); + + /** + * id-at-telephoneNumber + */ + public static final ASN1ObjectIdentifier TELEPHONE_NUMBER = X509ObjectIdentifiers.id_at_telephoneNumber; + + /** + * id-at-name + */ + public static final ASN1ObjectIdentifier NAME = X509ObjectIdentifiers.id_at_name; + + /** + * Email address (RSA PKCS#9 extension) - IA5String. + *

        Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here. + * @deprecated use a X500NameStyle + */ + public static final ASN1ObjectIdentifier EmailAddress = PKCSObjectIdentifiers.pkcs_9_at_emailAddress; + + /** + * more from PKCS#9 + */ + public static final ASN1ObjectIdentifier UnstructuredName = PKCSObjectIdentifiers.pkcs_9_at_unstructuredName; + public static final ASN1ObjectIdentifier UnstructuredAddress = PKCSObjectIdentifiers.pkcs_9_at_unstructuredAddress; + + /** + * email address in Verisign certificates + */ + public static final ASN1ObjectIdentifier E = EmailAddress; + + /* + * others... + */ + public static final ASN1ObjectIdentifier DC = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25"); + + /** + * LDAP User id. + */ + public static final ASN1ObjectIdentifier UID = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1"); + + /** + * determines whether or not strings should be processed and printed + * from back to front. + */ + public static boolean DefaultReverse = false; + + /** + * default look up table translating OID values into their common symbols following + * the convention in RFC 2253 with a few extras + */ + public static final Hashtable DefaultSymbols = new Hashtable(); + + /** + * look up table translating OID values into their common symbols following the convention in RFC 2253 + * + */ + public static final Hashtable RFC2253Symbols = new Hashtable(); + + /** + * look up table translating OID values into their common symbols following the convention in RFC 1779 + * + */ + public static final Hashtable RFC1779Symbols = new Hashtable(); + + /** + * look up table translating common symbols into their OIDS. + */ + public static final Hashtable DefaultLookUp = new Hashtable(); + + /** + * look up table translating OID values into their common symbols + * @deprecated use DefaultSymbols + */ + public static final Hashtable OIDLookUp = DefaultSymbols; + + /** + * look up table translating string values into their OIDS - + * @deprecated use DefaultLookUp + */ + public static final Hashtable SymbolLookUp = DefaultLookUp; + + private static final Boolean TRUE = new Boolean(true); // for J2ME compatibility + private static final Boolean FALSE = new Boolean(false); + + static + { + DefaultSymbols.put(C, "C"); + DefaultSymbols.put(O, "O"); + DefaultSymbols.put(T, "T"); + DefaultSymbols.put(OU, "OU"); + DefaultSymbols.put(CN, "CN"); + DefaultSymbols.put(L, "L"); + DefaultSymbols.put(ST, "ST"); + DefaultSymbols.put(SN, "SERIALNUMBER"); + DefaultSymbols.put(EmailAddress, "E"); + DefaultSymbols.put(DC, "DC"); + DefaultSymbols.put(UID, "UID"); + DefaultSymbols.put(STREET, "STREET"); + DefaultSymbols.put(SURNAME, "SURNAME"); + DefaultSymbols.put(GIVENNAME, "GIVENNAME"); + DefaultSymbols.put(INITIALS, "INITIALS"); + DefaultSymbols.put(GENERATION, "GENERATION"); + DefaultSymbols.put(UnstructuredAddress, "unstructuredAddress"); + DefaultSymbols.put(UnstructuredName, "unstructuredName"); + DefaultSymbols.put(UNIQUE_IDENTIFIER, "UniqueIdentifier"); + DefaultSymbols.put(DN_QUALIFIER, "DN"); + DefaultSymbols.put(PSEUDONYM, "Pseudonym"); + DefaultSymbols.put(POSTAL_ADDRESS, "PostalAddress"); + DefaultSymbols.put(NAME_AT_BIRTH, "NameAtBirth"); + DefaultSymbols.put(COUNTRY_OF_CITIZENSHIP, "CountryOfCitizenship"); + DefaultSymbols.put(COUNTRY_OF_RESIDENCE, "CountryOfResidence"); + DefaultSymbols.put(GENDER, "Gender"); + DefaultSymbols.put(PLACE_OF_BIRTH, "PlaceOfBirth"); + DefaultSymbols.put(DATE_OF_BIRTH, "DateOfBirth"); + DefaultSymbols.put(POSTAL_CODE, "PostalCode"); + DefaultSymbols.put(BUSINESS_CATEGORY, "BusinessCategory"); + DefaultSymbols.put(TELEPHONE_NUMBER, "TelephoneNumber"); + DefaultSymbols.put(NAME, "Name"); + + RFC2253Symbols.put(C, "C"); + RFC2253Symbols.put(O, "O"); + RFC2253Symbols.put(OU, "OU"); + RFC2253Symbols.put(CN, "CN"); + RFC2253Symbols.put(L, "L"); + RFC2253Symbols.put(ST, "ST"); + RFC2253Symbols.put(STREET, "STREET"); + RFC2253Symbols.put(DC, "DC"); + RFC2253Symbols.put(UID, "UID"); + + RFC1779Symbols.put(C, "C"); + RFC1779Symbols.put(O, "O"); + RFC1779Symbols.put(OU, "OU"); + RFC1779Symbols.put(CN, "CN"); + RFC1779Symbols.put(L, "L"); + RFC1779Symbols.put(ST, "ST"); + RFC1779Symbols.put(STREET, "STREET"); + + DefaultLookUp.put("c", C); + DefaultLookUp.put("o", O); + DefaultLookUp.put("t", T); + DefaultLookUp.put("ou", OU); + DefaultLookUp.put("cn", CN); + DefaultLookUp.put("l", L); + DefaultLookUp.put("st", ST); + DefaultLookUp.put("sn", SN); + DefaultLookUp.put("serialnumber", SN); + DefaultLookUp.put("street", STREET); + DefaultLookUp.put("emailaddress", E); + DefaultLookUp.put("dc", DC); + DefaultLookUp.put("e", E); + DefaultLookUp.put("uid", UID); + DefaultLookUp.put("surname", SURNAME); + DefaultLookUp.put("givenname", GIVENNAME); + DefaultLookUp.put("initials", INITIALS); + DefaultLookUp.put("generation", GENERATION); + DefaultLookUp.put("unstructuredaddress", UnstructuredAddress); + DefaultLookUp.put("unstructuredname", UnstructuredName); + DefaultLookUp.put("uniqueidentifier", UNIQUE_IDENTIFIER); + DefaultLookUp.put("dn", DN_QUALIFIER); + DefaultLookUp.put("pseudonym", PSEUDONYM); + DefaultLookUp.put("postaladdress", POSTAL_ADDRESS); + DefaultLookUp.put("nameofbirth", NAME_AT_BIRTH); + DefaultLookUp.put("countryofcitizenship", COUNTRY_OF_CITIZENSHIP); + DefaultLookUp.put("countryofresidence", COUNTRY_OF_RESIDENCE); + DefaultLookUp.put("gender", GENDER); + DefaultLookUp.put("placeofbirth", PLACE_OF_BIRTH); + DefaultLookUp.put("dateofbirth", DATE_OF_BIRTH); + DefaultLookUp.put("postalcode", POSTAL_CODE); + DefaultLookUp.put("businesscategory", BUSINESS_CATEGORY); + DefaultLookUp.put("telephonenumber", TELEPHONE_NUMBER); + DefaultLookUp.put("name", NAME); + } + + private X509NameEntryConverter converter = null; + private Vector ordering = new Vector(); + private Vector values = new Vector(); + private Vector added = new Vector(); + + private ASN1Sequence seq; + + private boolean isHashCodeCalculated; + private int hashCodeValue; + + /** + * Return a X509Name based on the passed in tagged object. + * + * @param obj tag object holding name. + * @param explicit true if explicitly tagged false otherwise. + * @return the X509Name + */ + public static X509Name getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static X509Name getInstance( + Object obj) + { + if (obj == null || obj instanceof X509Name) + { + return (X509Name)obj; + } + else if (obj instanceof X500Name) + { + return new X509Name(ASN1Sequence.getInstance(((X500Name)obj).toASN1Primitive())); + } + else if (obj != null) + { + return new X509Name(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + protected X509Name() + { + // constructure use by new X500 Name class + } + /** + * Constructor from ASN1Sequence + * + * the principal will be a list of constructed sets, each containing an (OID, String) pair. + */ + public X509Name( + ASN1Sequence seq) + { + this.seq = seq; + + Enumeration e = seq.getObjects(); + + while (e.hasMoreElements()) + { + ASN1Set set = ASN1Set.getInstance(((ASN1Encodable)e.nextElement()).toASN1Primitive()); + + for (int i = 0; i < set.size(); i++) + { + ASN1Sequence s = ASN1Sequence.getInstance(set.getObjectAt(i).toASN1Primitive()); + + if (s.size() != 2) + { + throw new IllegalArgumentException("badly sized pair"); + } + + ordering.addElement(ASN1ObjectIdentifier.getInstance(s.getObjectAt(0))); + + ASN1Encodable value = s.getObjectAt(1); + if (value instanceof ASN1String && !(value instanceof DERUniversalString)) + { + String v = ((ASN1String)value).getString(); + if (v.length() > 0 && v.charAt(0) == '#') + { + values.addElement("\\" + v); + } + else + { + values.addElement(v); + } + } + else + { + try + { + values.addElement("#" + bytesToString(Hex.encode(value.toASN1Primitive().getEncoded(ASN1Encoding.DER)))); + } + catch (IOException e1) + { + throw new IllegalArgumentException("cannot encode value"); + } + } + added.addElement((i != 0) ? TRUE : FALSE); // to allow earlier JDK compatibility + } + } + } + + /** + * constructor from a table of attributes. + *

        + * it's is assumed the table contains OID/String pairs, and the contents + * of the table are copied into an internal table as part of the + * construction process. + *

        + * Note: if the name you are trying to generate should be + * following a specific ordering, you should use the constructor + * with the ordering specified below. + * @deprecated use an ordered constructor! The hashtable ordering is rarely correct + */ + public X509Name( + Hashtable attributes) + { + this(null, attributes); + } + + /** + * Constructor from a table of attributes with ordering. + *

        + * it's is assumed the table contains OID/String pairs, and the contents + * of the table are copied into an internal table as part of the + * construction process. The ordering vector should contain the OIDs + * in the order they are meant to be encoded or printed in toString. + */ + public X509Name( + Vector ordering, + Hashtable attributes) + { + this(ordering, attributes, new X509DefaultEntryConverter()); + } + + /** + * Constructor from a table of attributes with ordering. + *

        + * it's is assumed the table contains OID/String pairs, and the contents + * of the table are copied into an internal table as part of the + * construction process. The ordering vector should contain the OIDs + * in the order they are meant to be encoded or printed in toString. + *

        + * The passed in converter will be used to convert the strings into their + * ASN.1 counterparts. + */ + public X509Name( + Vector ordering, + Hashtable attributes, + X509NameEntryConverter converter) + { + this.converter = converter; + + if (ordering != null) + { + for (int i = 0; i != ordering.size(); i++) + { + this.ordering.addElement(ordering.elementAt(i)); + this.added.addElement(FALSE); + } + } + else + { + Enumeration e = attributes.keys(); + + while (e.hasMoreElements()) + { + this.ordering.addElement(e.nextElement()); + this.added.addElement(FALSE); + } + } + + for (int i = 0; i != this.ordering.size(); i++) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)this.ordering.elementAt(i); + + if (attributes.get(oid) == null) + { + throw new IllegalArgumentException("No attribute for object id - " + oid.getId() + " - passed to distinguished name"); + } + + this.values.addElement(attributes.get(oid)); // copy the hash table + } + } + + /** + * Takes two vectors one of the oids and the other of the values. + */ + public X509Name( + Vector oids, + Vector values) + { + this(oids, values, new X509DefaultEntryConverter()); + } + + /** + * Takes two vectors one of the oids and the other of the values. + *

        + * The passed in converter will be used to convert the strings into their + * ASN.1 counterparts. + */ + public X509Name( + Vector oids, + Vector values, + X509NameEntryConverter converter) + { + this.converter = converter; + + if (oids.size() != values.size()) + { + throw new IllegalArgumentException("oids vector must be same length as values."); + } + + for (int i = 0; i < oids.size(); i++) + { + this.ordering.addElement(oids.elementAt(i)); + this.values.addElement(values.elementAt(i)); + this.added.addElement(FALSE); + } + } + +// private Boolean isEncoded(String s) +// { +// if (s.charAt(0) == '#') +// { +// return TRUE; +// } +// +// return FALSE; +// } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. + */ + public X509Name( + String dirName) + { + this(DefaultReverse, DefaultLookUp, dirName); + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes with each + * string value being converted to its associated ASN.1 type using the passed + * in converter. + */ + public X509Name( + String dirName, + X509NameEntryConverter converter) + { + this(DefaultReverse, DefaultLookUp, dirName, converter); + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. If reverse + * is true, create the encoded version of the sequence starting from the + * last element in the string. + */ + public X509Name( + boolean reverse, + String dirName) + { + this(reverse, DefaultLookUp, dirName); + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes with each + * string value being converted to its associated ASN.1 type using the passed + * in converter. If reverse is true the ASN.1 sequence representing the DN will + * be built by starting at the end of the string, rather than the start. + */ + public X509Name( + boolean reverse, + String dirName, + X509NameEntryConverter converter) + { + this(reverse, DefaultLookUp, dirName, converter); + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. lookUp + * should provide a table of lookups, indexed by lowercase only strings and + * yielding a ASN1ObjectIdentifier, other than that OID. and numeric oids + * will be processed automatically. + *
        + * If reverse is true, create the encoded version of the sequence + * starting from the last element in the string. + * @param reverse true if we should start scanning from the end (RFC 2553). + * @param lookUp table of names and their oids. + * @param dirName the X.500 string to be parsed. + */ + public X509Name( + boolean reverse, + Hashtable lookUp, + String dirName) + { + this(reverse, lookUp, dirName, new X509DefaultEntryConverter()); + } + + private ASN1ObjectIdentifier decodeOID( + String name, + Hashtable lookUp) + { + if (Strings.toUpperCase(name).startsWith("OID.")) + { + return new ASN1ObjectIdentifier(name.substring(4)); + } + else if (name.charAt(0) >= '0' && name.charAt(0) <= '9') + { + return new ASN1ObjectIdentifier(name); + } + + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)lookUp.get(Strings.toLowerCase(name)); + if (oid == null) + { + throw new IllegalArgumentException("Unknown object id - " + name + " - passed to distinguished name"); + } + + return oid; + } + + /** + * Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + * some such, converting it into an ordered set of name attributes. lookUp + * should provide a table of lookups, indexed by lowercase only strings and + * yielding a ASN1ObjectIdentifier, other than that OID. and numeric oids + * will be processed automatically. The passed in converter is used to convert the + * string values to the right of each equals sign to their ASN.1 counterparts. + *
        + * @param reverse true if we should start scanning from the end, false otherwise. + * @param lookUp table of names and oids. + * @param dirName the string dirName + * @param converter the converter to convert string values into their ASN.1 equivalents + */ + public X509Name( + boolean reverse, + Hashtable lookUp, + String dirName, + X509NameEntryConverter converter) + { + this.converter = converter; + X509NameTokenizer nTok = new X509NameTokenizer(dirName); + + while (nTok.hasMoreTokens()) + { + String token = nTok.nextToken(); + int index = token.indexOf('='); + + if (index == -1) + { + throw new IllegalArgumentException("badly formated directory string"); + } + + String name = token.substring(0, index); + String value = token.substring(index + 1); + ASN1ObjectIdentifier oid = decodeOID(name, lookUp); + + if (value.indexOf('+') > 0) + { + X509NameTokenizer vTok = new X509NameTokenizer(value, '+'); + String v = vTok.nextToken(); + + this.ordering.addElement(oid); + this.values.addElement(v); + this.added.addElement(FALSE); + + while (vTok.hasMoreTokens()) + { + String sv = vTok.nextToken(); + int ndx = sv.indexOf('='); + + String nm = sv.substring(0, ndx); + String vl = sv.substring(ndx + 1); + this.ordering.addElement(decodeOID(nm, lookUp)); + this.values.addElement(vl); + this.added.addElement(TRUE); + } + } + else + { + this.ordering.addElement(oid); + this.values.addElement(value); + this.added.addElement(FALSE); + } + } + + if (reverse) + { + Vector o = new Vector(); + Vector v = new Vector(); + Vector a = new Vector(); + + int count = 1; + + for (int i = 0; i < this.ordering.size(); i++) + { + if (((Boolean)this.added.elementAt(i)).booleanValue()) + { + o.insertElementAt(this.ordering.elementAt(i), count); + v.insertElementAt(this.values.elementAt(i), count); + a.insertElementAt(this.added.elementAt(i), count); + count++; + } + else + { + o.insertElementAt(this.ordering.elementAt(i), 0); + v.insertElementAt(this.values.elementAt(i), 0); + a.insertElementAt(this.added.elementAt(i), 0); + count = 1; + } + } + + this.ordering = o; + this.values = v; + this.added = a; + } + } + + /** + * return a vector of the oids in the name, in the order they were found. + */ + public Vector getOIDs() + { + Vector v = new Vector(); + + for (int i = 0; i != ordering.size(); i++) + { + v.addElement(ordering.elementAt(i)); + } + + return v; + } + + /** + * return a vector of the values found in the name, in the order they + * were found. + */ + public Vector getValues() + { + Vector v = new Vector(); + + for (int i = 0; i != values.size(); i++) + { + v.addElement(values.elementAt(i)); + } + + return v; + } + + /** + * return a vector of the values found in the name, in the order they + * were found, with the DN label corresponding to passed in oid. + */ + public Vector getValues( + ASN1ObjectIdentifier oid) + { + Vector v = new Vector(); + + for (int i = 0; i != values.size(); i++) + { + if (ordering.elementAt(i).equals(oid)) + { + String val = (String)values.elementAt(i); + + if (val.length() > 2 && val.charAt(0) == '\\' && val.charAt(1) == '#') + { + v.addElement(val.substring(1)); + } + else + { + v.addElement(val); + } + } + } + + return v; + } + + public ASN1Primitive toASN1Primitive() + { + if (seq == null) + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + ASN1EncodableVector sVec = new ASN1EncodableVector(); + ASN1ObjectIdentifier lstOid = null; + + for (int i = 0; i != ordering.size(); i++) + { + ASN1EncodableVector v = new ASN1EncodableVector(); + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)ordering.elementAt(i); + + v.add(oid); + + String str = (String)values.elementAt(i); + + v.add(converter.getConvertedValue(oid, str)); + + if (lstOid == null + || ((Boolean)this.added.elementAt(i)).booleanValue()) + { + sVec.add(new DERSequence(v)); + } + else + { + vec.add(new DERSet(sVec)); + sVec = new ASN1EncodableVector(); + + sVec.add(new DERSequence(v)); + } + + lstOid = oid; + } + + vec.add(new DERSet(sVec)); + + seq = new DERSequence(vec); + } + + return seq; + } + + /** + * @param inOrder if true the order of both X509 names must be the same, + * as well as the values associated with each element. + */ + public boolean equals(Object obj, boolean inOrder) + { + if (!inOrder) + { + return this.equals(obj); + } + + if (obj == this) + { + return true; + } + + if (!(obj instanceof X509Name || obj instanceof ASN1Sequence)) + { + return false; + } + + ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); + + if (this.toASN1Primitive().equals(derO)) + { + return true; + } + + X509Name other; + + try + { + other = X509Name.getInstance(obj); + } + catch (IllegalArgumentException e) + { + return false; + } + + int orderingSize = ordering.size(); + + if (orderingSize != other.ordering.size()) + { + return false; + } + + for (int i = 0; i < orderingSize; i++) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)ordering.elementAt(i); + ASN1ObjectIdentifier oOid = (ASN1ObjectIdentifier)other.ordering.elementAt(i); + + if (oid.equals(oOid)) + { + String value = (String)values.elementAt(i); + String oValue = (String)other.values.elementAt(i); + + if (!equivalentStrings(value, oValue)) + { + return false; + } + } + else + { + return false; + } + } + + return true; + } + + public int hashCode() + { + if (isHashCodeCalculated) + { + return hashCodeValue; + } + + isHashCodeCalculated = true; + + // this needs to be order independent, like equals + for (int i = 0; i != ordering.size(); i += 1) + { + String value = (String)values.elementAt(i); + + value = canonicalize(value); + value = stripInternalSpaces(value); + + hashCodeValue ^= ordering.elementAt(i).hashCode(); + hashCodeValue ^= value.hashCode(); + } + + return hashCodeValue; + } + + /** + * test for equality - note: case is ignored. + */ + public boolean equals(Object obj) + { + if (obj == this) + { + return true; + } + + if (!(obj instanceof X509Name || obj instanceof ASN1Sequence)) + { + return false; + } + + ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); + + if (this.toASN1Primitive().equals(derO)) + { + return true; + } + + X509Name other; + + try + { + other = X509Name.getInstance(obj); + } + catch (IllegalArgumentException e) + { + return false; + } + + int orderingSize = ordering.size(); + + if (orderingSize != other.ordering.size()) + { + return false; + } + + boolean[] indexes = new boolean[orderingSize]; + int start, end, delta; + + if (ordering.elementAt(0).equals(other.ordering.elementAt(0))) // guess forward + { + start = 0; + end = orderingSize; + delta = 1; + } + else // guess reversed - most common problem + { + start = orderingSize - 1; + end = -1; + delta = -1; + } + + for (int i = start; i != end; i += delta) + { + boolean found = false; + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)ordering.elementAt(i); + String value = (String)values.elementAt(i); + + for (int j = 0; j < orderingSize; j++) + { + if (indexes[j]) + { + continue; + } + + ASN1ObjectIdentifier oOid = (ASN1ObjectIdentifier)other.ordering.elementAt(j); + + if (oid.equals(oOid)) + { + String oValue = (String)other.values.elementAt(j); + + if (equivalentStrings(value, oValue)) + { + indexes[j] = true; + found = true; + break; + } + } + } + + if (!found) + { + return false; + } + } + + return true; + } + + private boolean equivalentStrings(String s1, String s2) + { + String value = canonicalize(s1); + String oValue = canonicalize(s2); + + if (!value.equals(oValue)) + { + value = stripInternalSpaces(value); + oValue = stripInternalSpaces(oValue); + + if (!value.equals(oValue)) + { + return false; + } + } + + return true; + } + + private String canonicalize(String s) + { + String value = Strings.toLowerCase(s.trim()); + + if (value.length() > 0 && value.charAt(0) == '#') + { + ASN1Primitive obj = decodeObject(value); + + if (obj instanceof ASN1String) + { + value = Strings.toLowerCase(((ASN1String)obj).getString().trim()); + } + } + + return value; + } + + private ASN1Primitive decodeObject(String oValue) + { + try + { + return ASN1Primitive.fromByteArray(Hex.decode(oValue.substring(1))); + } + catch (IOException e) + { + throw new IllegalStateException("unknown encoding in name: " + e); + } + } + + private String stripInternalSpaces( + String str) + { + StringBuffer res = new StringBuffer(); + + if (str.length() != 0) + { + char c1 = str.charAt(0); + + res.append(c1); + + for (int k = 1; k < str.length(); k++) + { + char c2 = str.charAt(k); + if (!(c1 == ' ' && c2 == ' ')) + { + res.append(c2); + } + c1 = c2; + } + } + + return res.toString(); + } + + private void appendValue( + StringBuffer buf, + Hashtable oidSymbols, + ASN1ObjectIdentifier oid, + String value) + { + String sym = (String)oidSymbols.get(oid); + + if (sym != null) + { + buf.append(sym); + } + else + { + buf.append(oid.getId()); + } + + buf.append('='); + + int index = buf.length(); + + buf.append(value); + + int end = buf.length(); + + if (value.length() >= 2 && value.charAt(0) == '\\' && value.charAt(1) == '#') + { + index += 2; + } + + while (index != end) + { + if ((buf.charAt(index) == ',') + || (buf.charAt(index) == '"') + || (buf.charAt(index) == '\\') + || (buf.charAt(index) == '+') + || (buf.charAt(index) == '=') + || (buf.charAt(index) == '<') + || (buf.charAt(index) == '>') + || (buf.charAt(index) == ';')) + { + buf.insert(index, "\\"); + index++; + end++; + } + + index++; + } + } + + /** + * convert the structure to a string - if reverse is true the + * oids and values are listed out starting with the last element + * in the sequence (ala RFC 2253), otherwise the string will begin + * with the first element of the structure. If no string definition + * for the oid is found in oidSymbols the string value of the oid is + * added. Two standard symbol tables are provided DefaultSymbols, and + * RFC2253Symbols as part of this class. + * + * @param reverse if true start at the end of the sequence and work back. + * @param oidSymbols look up table strings for oids. + */ + public String toString( + boolean reverse, + Hashtable oidSymbols) + { + StringBuffer buf = new StringBuffer(); + Vector components = new Vector(); + boolean first = true; + + StringBuffer ava = null; + + for (int i = 0; i < ordering.size(); i++) + { + if (((Boolean)added.elementAt(i)).booleanValue()) + { + ava.append('+'); + appendValue(ava, oidSymbols, + (ASN1ObjectIdentifier)ordering.elementAt(i), + (String)values.elementAt(i)); + } + else + { + ava = new StringBuffer(); + appendValue(ava, oidSymbols, + (ASN1ObjectIdentifier)ordering.elementAt(i), + (String)values.elementAt(i)); + components.addElement(ava); + } + } + + if (reverse) + { + for (int i = components.size() - 1; i >= 0; i--) + { + if (first) + { + first = false; + } + else + { + buf.append(','); + } + + buf.append(components.elementAt(i).toString()); + } + } + else + { + for (int i = 0; i < components.size(); i++) + { + if (first) + { + first = false; + } + else + { + buf.append(','); + } + + buf.append(components.elementAt(i).toString()); + } + } + + return buf.toString(); + } + + private String bytesToString( + byte[] data) + { + char[] cs = new char[data.length]; + + for (int i = 0; i != cs.length; i++) + { + cs[i] = (char)(data[i] & 0xff); + } + + return new String(cs); + } + + public String toString() + { + return toString(DefaultReverse, DefaultSymbols); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509NameEntryConverter.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509NameEntryConverter.java new file mode 100644 index 0000000..5d919e1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509NameEntryConverter.java @@ -0,0 +1,113 @@ +package org.bouncycastle.asn1.x509; + +import java.io.IOException; + +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DERPrintableString; +import org.bouncycastle.util.Strings; + +/** + * It turns out that the number of standard ways the fields in a DN should be + * encoded into their ASN.1 counterparts is rapidly approaching the + * number of machines on the internet. By default the X509Name class + * will produce UTF8Strings in line with the current recommendations (RFC 3280). + *

        + * An example of an encoder look like below: + *

        + * public class X509DirEntryConverter
        + *     extends X509NameEntryConverter
        + * {
        + *     public ASN1Primitive getConvertedValue(
        + *         ASN1ObjectIdentifier  oid,
        + *         String               value)
        + *     {
        + *         if (str.length() != 0 && str.charAt(0) == '#')
        + *         {
        + *             return convertHexEncoded(str, 1);
        + *         }
        + *         if (oid.equals(EmailAddress))
        + *         {
        + *             return new DERIA5String(str);
        + *         }
        + *         else if (canBePrintable(str))
        + *         {
        + *             return new DERPrintableString(str);
        + *         }
        + *         else if (canBeUTF8(str))
        + *         {
        + *             return new DERUTF8String(str);
        + *         }
        + *         else
        + *         {
        + *             return new DERBMPString(str);
        + *         }
        + *     }
        + * }
        + */
        +public abstract class X509NameEntryConverter
        +{
        +    /**
        +     * Convert an inline encoded hex string rendition of an ASN.1
        +     * object back into its corresponding ASN.1 object.
        +     * 
        +     * @param str the hex encoded object
        +     * @param off the index at which the encoding starts
        +     * @return the decoded object
        +     */
        +    protected ASN1Primitive convertHexEncoded(
        +        String  str,
        +        int     off)
        +        throws IOException
        +    {
        +        str = Strings.toLowerCase(str);
        +        byte[] data = new byte[(str.length() - off) / 2];
        +        for (int index = 0; index != data.length; index++)
        +        {
        +            char left = str.charAt((index * 2) + off);
        +            char right = str.charAt((index * 2) + off + 1);
        +            
        +            if (left < 'a')
        +            {
        +                data[index] = (byte)((left - '0') << 4);
        +            }
        +            else
        +            {
        +                data[index] = (byte)((left - 'a' + 10) << 4);
        +            }
        +            if (right < 'a')
        +            {
        +                data[index] |= (byte)(right - '0');
        +            }
        +            else
        +            {
        +                data[index] |= (byte)(right - 'a' + 10);
        +            }
        +        }
        +
        +        ASN1InputStream aIn = new ASN1InputStream(data);
        +                                            
        +        return aIn.readObject();
        +    }
        +    
        +    /**
        +     * return true if the passed in String can be represented without
        +     * loss as a PrintableString, false otherwise.
        +     */
        +    protected boolean canBePrintable(
        +        String  str)
        +    {
        +        return DERPrintableString.isPrintableString(str);
        +    }
        +    
        +    /**
        +     * Convert the passed in String value into the appropriate ASN.1
        +     * encoded object.
        +     * 
        +     * @param oid the oid associated with the value in the DN.
        +     * @param value the value of the particular DN component.
        +     * @return the ASN.1 equivalent for the value.
        +     */
        +    public abstract ASN1Primitive getConvertedValue(ASN1ObjectIdentifier oid, String value);
        +}
        diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java
        new file mode 100644
        index 0000000..1887fb6
        --- /dev/null
        +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509NameTokenizer.java
        @@ -0,0 +1,99 @@
        +package org.bouncycastle.asn1.x509;
        +
        +/**
        + * class for breaking up an X500 Name into it's component tokens, ala
        + * java.util.StringTokenizer. We need this class as some of the
        + * lightweight Java environment don't support classes like
        + * StringTokenizer.
        + */
        +public class X509NameTokenizer
        +{
        +    private String          value;
        +    private int             index;
        +    private char            seperator;
        +    private StringBuffer    buf = new StringBuffer();
        +
        +    public X509NameTokenizer(
        +        String  oid)
        +    {
        +        this(oid, ',');
        +    }
        +    
        +    public X509NameTokenizer(
        +        String  oid,
        +        char    seperator)
        +    {
        +        this.value = oid;
        +        this.index = -1;
        +        this.seperator = seperator;
        +    }
        +
        +    public boolean hasMoreTokens()
        +    {
        +        return (index != value.length());
        +    }
        +
        +    public String nextToken()
        +    {
        +        if (index == value.length())
        +        {
        +            return null;
        +        }
        +
        +        int     end = index + 1;
        +        boolean quoted = false;
        +        boolean escaped = false;
        +
        +        buf.setLength(0);
        +
        +        while (end != value.length())
        +        {
        +            char    c = value.charAt(end);
        +
        +            if (c == '"')
        +            {
        +                if (!escaped)
        +                {
        +                    quoted = !quoted;
        +                }
        +                else
        +                {
        +                    buf.append(c);
        +                }
        +                escaped = false;
        +            }
        +            else
        +            {
        +                if (escaped || quoted)
        +                {
        +                    if (c == '#' && buf.charAt(buf.length() - 1) == '=')
        +                    {
        +                        buf.append('\\');
        +                    }
        +                    else if (c == '+' && seperator != '+')
        +                    {
        +                        buf.append('\\');
        +                    }
        +                    buf.append(c);
        +                    escaped = false;
        +                }
        +                else if (c == '\\')
        +                {
        +                    escaped = true;
        +                }
        +                else if (c == seperator)
        +                {
        +                    break;
        +                }
        +                else
        +                {
        +                    buf.append(c);
        +                }
        +            }
        +            end++;
        +        }
        +
        +        index = end;
        +        return buf.toString().trim();
        +    }
        +}
        diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java
        new file mode 100644
        index 0000000..ed4dd32
        --- /dev/null
        +++ b/common/src/main/java/org/bouncycastle/asn1/x509/X509ObjectIdentifiers.java
        @@ -0,0 +1,67 @@
        +package org.bouncycastle.asn1.x509;
        +
        +import org.bouncycastle.asn1.ASN1ObjectIdentifier;
        +
        +public interface X509ObjectIdentifiers
        +{
        +    //
        +    // base id
        +    //
        +    static final String                 id                      = "2.5.4";
        +
        +    static final ASN1ObjectIdentifier    commonName              = new ASN1ObjectIdentifier(id + ".3");
        +    static final ASN1ObjectIdentifier    countryName             = new ASN1ObjectIdentifier(id + ".6");
        +    static final ASN1ObjectIdentifier    localityName            = new ASN1ObjectIdentifier(id + ".7");
        +    static final ASN1ObjectIdentifier    stateOrProvinceName     = new ASN1ObjectIdentifier(id + ".8");
        +    static final ASN1ObjectIdentifier    organization            = new ASN1ObjectIdentifier(id + ".10");
        +    static final ASN1ObjectIdentifier    organizationalUnitName  = new ASN1ObjectIdentifier(id + ".11");
        +
        +    static final ASN1ObjectIdentifier    id_at_telephoneNumber   = new ASN1ObjectIdentifier("2.5.4.20");
        +    static final ASN1ObjectIdentifier    id_at_name              = new ASN1ObjectIdentifier(id + ".41");
        +
        +    // id-SHA1 OBJECT IDENTIFIER ::=    
        +    //   {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 }    //
        +    static final ASN1ObjectIdentifier    id_SHA1                 = new ASN1ObjectIdentifier("1.3.14.3.2.26");
        +
        +    //
        +    // ripemd160 OBJECT IDENTIFIER ::=
        +    //      {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) hashAlgorithm(2) RIPEMD-160(1)}
        +    //
        +    static final ASN1ObjectIdentifier    ripemd160               = new ASN1ObjectIdentifier("1.3.36.3.2.1");
        +
        +    //
        +    // ripemd160WithRSAEncryption OBJECT IDENTIFIER ::=
        +    //      {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) signatureAlgorithm(3) rsaSignature(1) rsaSignatureWithripemd160(2) }
        +    //
        +    static final ASN1ObjectIdentifier    ripemd160WithRSAEncryption = new ASN1ObjectIdentifier("1.3.36.3.3.1.2");
        +
        +
        +    static final ASN1ObjectIdentifier    id_ea_rsa = new ASN1ObjectIdentifier("2.5.8.1.1");
        +    
        +    // id-pkix
        +    static final ASN1ObjectIdentifier id_pkix = new ASN1ObjectIdentifier("1.3.6.1.5.5.7");
        +
        +    //
        +    // private internet extensions
        +    //
        +    static final ASN1ObjectIdentifier  id_pe = new ASN1ObjectIdentifier(id_pkix + ".1");
        +
        +    //
        +    // ISO ARC for standard certificate and CRL extensions
        +    //
        +    static final ASN1ObjectIdentifier id_ce = new ASN1ObjectIdentifier("2.5.29");
        +
        +    //
        +    // authority information access
        +    //
        +    static final ASN1ObjectIdentifier  id_ad = new ASN1ObjectIdentifier(id_pkix + ".48");
        +    static final ASN1ObjectIdentifier  id_ad_caIssuers = new ASN1ObjectIdentifier(id_ad + ".2");
        +    static final ASN1ObjectIdentifier  id_ad_ocsp = new ASN1ObjectIdentifier(id_ad + ".1");
        +
        +    //
        +    //    OID for ocsp and crl uri in AuthorityInformationAccess extension
        +    //
        +    static final ASN1ObjectIdentifier ocspAccessMethod = id_ad_ocsp;
        +    static final ASN1ObjectIdentifier crlAccessMethod = id_ad_caIssuers;
        +}
        +
        diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/BiometricData.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/BiometricData.java
        new file mode 100644
        index 0000000..32fa451
        --- /dev/null
        +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/BiometricData.java
        @@ -0,0 +1,122 @@
        +package org.bouncycastle.asn1.x509.qualified;
        +
        +import java.util.Enumeration;
        +
        +import org.bouncycastle.asn1.ASN1EncodableVector;
        +import org.bouncycastle.asn1.ASN1Object;
        +import org.bouncycastle.asn1.ASN1OctetString;
        +import org.bouncycastle.asn1.ASN1Primitive;
        +import org.bouncycastle.asn1.ASN1Sequence;
        +import org.bouncycastle.asn1.DERIA5String;
        +import org.bouncycastle.asn1.DERSequence;
        +import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
        +
        +/**
        + * The BiometricData object.
        + * 
        + * BiometricData  ::=  SEQUENCE {
        + *       typeOfBiometricData  TypeOfBiometricData,
        + *       hashAlgorithm        AlgorithmIdentifier,
        + *       biometricDataHash    OCTET STRING,
        + *       sourceDataUri        IA5String OPTIONAL  }
        + * 
        + */ +public class BiometricData + extends ASN1Object +{ + private TypeOfBiometricData typeOfBiometricData; + private AlgorithmIdentifier hashAlgorithm; + private ASN1OctetString biometricDataHash; + private DERIA5String sourceDataUri; + + public static BiometricData getInstance( + Object obj) + { + if (obj instanceof BiometricData) + { + return (BiometricData)obj; + } + + if (obj != null) + { + return new BiometricData(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private BiometricData(ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + // typeOfBiometricData + typeOfBiometricData = TypeOfBiometricData.getInstance(e.nextElement()); + // hashAlgorithm + hashAlgorithm = AlgorithmIdentifier.getInstance(e.nextElement()); + // biometricDataHash + biometricDataHash = ASN1OctetString.getInstance(e.nextElement()); + // sourceDataUri + if (e.hasMoreElements()) + { + sourceDataUri = DERIA5String.getInstance(e.nextElement()); + } + } + + public BiometricData( + TypeOfBiometricData typeOfBiometricData, + AlgorithmIdentifier hashAlgorithm, + ASN1OctetString biometricDataHash, + DERIA5String sourceDataUri) + { + this.typeOfBiometricData = typeOfBiometricData; + this.hashAlgorithm = hashAlgorithm; + this.biometricDataHash = biometricDataHash; + this.sourceDataUri = sourceDataUri; + } + + public BiometricData( + TypeOfBiometricData typeOfBiometricData, + AlgorithmIdentifier hashAlgorithm, + ASN1OctetString biometricDataHash) + { + this.typeOfBiometricData = typeOfBiometricData; + this.hashAlgorithm = hashAlgorithm; + this.biometricDataHash = biometricDataHash; + this.sourceDataUri = null; + } + + public TypeOfBiometricData getTypeOfBiometricData() + { + return typeOfBiometricData; + } + + public AlgorithmIdentifier getHashAlgorithm() + { + return hashAlgorithm; + } + + public ASN1OctetString getBiometricDataHash() + { + return biometricDataHash; + } + + public DERIA5String getSourceDataUri() + { + return sourceDataUri; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector seq = new ASN1EncodableVector(); + seq.add(typeOfBiometricData); + seq.add(hashAlgorithm); + seq.add(biometricDataHash); + + if (sourceDataUri != null) + { + seq.add(sourceDataUri); + } + + return new DERSequence(seq); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java new file mode 100644 index 0000000..19ef12b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/ETSIQCObjectIdentifiers.java @@ -0,0 +1,16 @@ +package org.bouncycastle.asn1.x509.qualified; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +public interface ETSIQCObjectIdentifiers +{ + // + // base id + // + static final ASN1ObjectIdentifier id_etsi_qcs = new ASN1ObjectIdentifier("0.4.0.1862.1"); + + static final ASN1ObjectIdentifier id_etsi_qcs_QcCompliance = id_etsi_qcs.branch("1"); + static final ASN1ObjectIdentifier id_etsi_qcs_LimiteValue = id_etsi_qcs.branch("2"); + static final ASN1ObjectIdentifier id_etsi_qcs_RetentionPeriod = id_etsi_qcs.branch("3"); + static final ASN1ObjectIdentifier id_etsi_qcs_QcSSCD = id_etsi_qcs.branch("4"); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java new file mode 100644 index 0000000..b6cfb62 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/Iso4217CurrencyCode.java @@ -0,0 +1,93 @@ +package org.bouncycastle.asn1.x509.qualified; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DERPrintableString; + +/** + * The Iso4217CurrencyCode object. + *
        + * Iso4217CurrencyCode  ::=  CHOICE {
        + *       alphabetic              PrintableString (SIZE 3), --Recommended
        + *       numeric              INTEGER (1..999) }
        + * -- Alphabetic or numeric currency code as defined in ISO 4217
        + * -- It is recommended that the Alphabetic form is used
        + * 
        + */ +public class Iso4217CurrencyCode + extends ASN1Object + implements ASN1Choice +{ + final int ALPHABETIC_MAXSIZE = 3; + final int NUMERIC_MINSIZE = 1; + final int NUMERIC_MAXSIZE = 999; + + ASN1Encodable obj; + int numeric; + + public static Iso4217CurrencyCode getInstance( + Object obj) + { + if (obj == null || obj instanceof Iso4217CurrencyCode) + { + return (Iso4217CurrencyCode)obj; + } + + if (obj instanceof ASN1Integer) + { + ASN1Integer numericobj = ASN1Integer.getInstance(obj); + int numeric = numericobj.getValue().intValue(); + return new Iso4217CurrencyCode(numeric); + } + else + if (obj instanceof DERPrintableString) + { + DERPrintableString alphabetic = DERPrintableString.getInstance(obj); + return new Iso4217CurrencyCode(alphabetic.getString()); + } + throw new IllegalArgumentException("unknown object in getInstance"); + } + + public Iso4217CurrencyCode( + int numeric) + { + if (numeric > NUMERIC_MAXSIZE || numeric < NUMERIC_MINSIZE) + { + throw new IllegalArgumentException("wrong size in numeric code : not in (" +NUMERIC_MINSIZE +".."+ NUMERIC_MAXSIZE +")"); + } + obj = new ASN1Integer(numeric); + } + + public Iso4217CurrencyCode( + String alphabetic) + { + if (alphabetic.length() > ALPHABETIC_MAXSIZE) + { + throw new IllegalArgumentException("wrong size in alphabetic code : max size is " + ALPHABETIC_MAXSIZE); + } + obj = new DERPrintableString(alphabetic); + } + + public boolean isAlphabetic() + { + return obj instanceof DERPrintableString; + } + + public String getAlphabetic() + { + return ((DERPrintableString)obj).getString(); + } + + public int getNumeric() + { + return ((ASN1Integer)obj).getValue().intValue(); + } + + public ASN1Primitive toASN1Primitive() + { + return obj.toASN1Primitive(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java new file mode 100644 index 0000000..1098aa0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/MonetaryValue.java @@ -0,0 +1,92 @@ +package org.bouncycastle.asn1.x509.qualified; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * The MonetaryValue object. + *
        + * MonetaryValue  ::=  SEQUENCE {
        + *       currency              Iso4217CurrencyCode,
        + *       amount               INTEGER, 
        + *       exponent             INTEGER }
        + * -- value = amount * 10^exponent
        + * 
        + */ +public class MonetaryValue + extends ASN1Object +{ + private Iso4217CurrencyCode currency; + private ASN1Integer amount; + private ASN1Integer exponent; + + public static MonetaryValue getInstance( + Object obj) + { + if (obj instanceof MonetaryValue) + { + return (MonetaryValue)obj; + } + + if (obj != null) + { + return new MonetaryValue(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private MonetaryValue( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + // currency + currency = Iso4217CurrencyCode.getInstance(e.nextElement()); + // hashAlgorithm + amount = ASN1Integer.getInstance(e.nextElement()); + // exponent + exponent = ASN1Integer.getInstance(e.nextElement()); + } + + public MonetaryValue( + Iso4217CurrencyCode currency, + int amount, + int exponent) + { + this.currency = currency; + this.amount = new ASN1Integer(amount); + this.exponent = new ASN1Integer(exponent); + } + + public Iso4217CurrencyCode getCurrency() + { + return currency; + } + + public BigInteger getAmount() + { + return amount.getValue(); + } + + public BigInteger getExponent() + { + return exponent.getValue(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector seq = new ASN1EncodableVector(); + seq.add(currency); + seq.add(amount); + seq.add(exponent); + + return new DERSequence(seq); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/QCStatement.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/QCStatement.java new file mode 100644 index 0000000..aef6cd5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/QCStatement.java @@ -0,0 +1,93 @@ +package org.bouncycastle.asn1.x509.qualified; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * The QCStatement object. + *
        + * QCStatement ::= SEQUENCE {
        + *   statementId        OBJECT IDENTIFIER,
        + *   statementInfo      ANY DEFINED BY statementId OPTIONAL} 
        + * 
        + */ + +public class QCStatement extends ASN1Object +{ + ASN1ObjectIdentifier qcStatementId; + ASN1Encodable qcStatementInfo; + + public static QCStatement getInstance( + Object obj) + { + if (obj instanceof QCStatement) + { + return (QCStatement)obj; + } + if (obj != null) + { + return new QCStatement(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private QCStatement( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + // qcStatementId + qcStatementId = ASN1ObjectIdentifier.getInstance(e.nextElement()); + // qcstatementInfo + if (e.hasMoreElements()) + { + qcStatementInfo = (ASN1Encodable) e.nextElement(); + } + } + + public QCStatement( + ASN1ObjectIdentifier qcStatementId) + { + this.qcStatementId = qcStatementId; + this.qcStatementInfo = null; + } + + public QCStatement( + ASN1ObjectIdentifier qcStatementId, + ASN1Encodable qcStatementInfo) + { + this.qcStatementId = qcStatementId; + this.qcStatementInfo = qcStatementInfo; + } + + public ASN1ObjectIdentifier getStatementId() + { + return qcStatementId; + } + + public ASN1Encodable getStatementInfo() + { + return qcStatementInfo; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector seq = new ASN1EncodableVector(); + seq.add(qcStatementId); + + if (qcStatementInfo != null) + { + seq.add(qcStatementInfo); + } + + return new DERSequence(seq); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java new file mode 100644 index 0000000..b3b2425 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/RFC3739QCObjectIdentifiers.java @@ -0,0 +1,14 @@ +package org.bouncycastle.asn1.x509.qualified; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +public class RFC3739QCObjectIdentifiers +{ + // + // base id + // + static final ASN1ObjectIdentifier id_qcs = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.11"); + + static final ASN1ObjectIdentifier id_qcs_pkixQCSyntax_v1 = id_qcs.branch("1"); + static final ASN1ObjectIdentifier id_qcs_pkixQCSyntax_v2 = id_qcs.branch("2"); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java new file mode 100644 index 0000000..43d8d58 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/SemanticsInformation.java @@ -0,0 +1,131 @@ +package org.bouncycastle.asn1.x509.qualified; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x509.GeneralName; + +/** + * The SemanticsInformation object. + *
        + *       SemanticsInformation ::= SEQUENCE {
        + *         semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
        + *         nameRegistrationAuthorities NameRegistrationAuthorities
        + *                                                         OPTIONAL }
        + *         (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
        + *          WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
        + *
        + *     NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
        + *         GeneralName
        + * 
        + */ +public class SemanticsInformation + extends ASN1Object +{ + private ASN1ObjectIdentifier semanticsIdentifier; + private GeneralName[] nameRegistrationAuthorities; + + public static SemanticsInformation getInstance(Object obj) + { + if (obj instanceof SemanticsInformation) + { + return (SemanticsInformation)obj; + } + + if (obj != null) + { + return new SemanticsInformation(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + private SemanticsInformation(ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + if (seq.size() < 1) + { + throw new IllegalArgumentException("no objects in SemanticsInformation"); + } + + Object object = e.nextElement(); + if (object instanceof ASN1ObjectIdentifier) + { + semanticsIdentifier = ASN1ObjectIdentifier.getInstance(object); + if (e.hasMoreElements()) + { + object = e.nextElement(); + } + else + { + object = null; + } + } + + if (object != null) + { + ASN1Sequence generalNameSeq = ASN1Sequence.getInstance(object); + nameRegistrationAuthorities = new GeneralName[generalNameSeq.size()]; + for (int i= 0; i < generalNameSeq.size(); i++) + { + nameRegistrationAuthorities[i] = GeneralName.getInstance(generalNameSeq.getObjectAt(i)); + } + } + } + + public SemanticsInformation( + ASN1ObjectIdentifier semanticsIdentifier, + GeneralName[] generalNames) + { + this.semanticsIdentifier = semanticsIdentifier; + this.nameRegistrationAuthorities = generalNames; + } + + public SemanticsInformation(ASN1ObjectIdentifier semanticsIdentifier) + { + this.semanticsIdentifier = semanticsIdentifier; + this.nameRegistrationAuthorities = null; + } + + public SemanticsInformation(GeneralName[] generalNames) + { + this.semanticsIdentifier = null; + this.nameRegistrationAuthorities = generalNames; + } + + public ASN1ObjectIdentifier getSemanticsIdentifier() + { + return semanticsIdentifier; + } + + public GeneralName[] getNameRegistrationAuthorities() + { + return nameRegistrationAuthorities; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector seq = new ASN1EncodableVector(); + + if (this.semanticsIdentifier != null) + { + seq.add(semanticsIdentifier); + } + if (this.nameRegistrationAuthorities != null) + { + ASN1EncodableVector seqname = new ASN1EncodableVector(); + for (int i = 0; i < nameRegistrationAuthorities.length; i++) + { + seqname.add(nameRegistrationAuthorities[i]); + } + seq.add(new DERSequence(seqname)); + } + + return new DERSequence(seq); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java new file mode 100644 index 0000000..01b254e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/qualified/TypeOfBiometricData.java @@ -0,0 +1,90 @@ +package org.bouncycastle.asn1.x509.qualified; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; + +/** + * The TypeOfBiometricData object. + *
        + * TypeOfBiometricData ::= CHOICE {
        + *   predefinedBiometricType   PredefinedBiometricType,
        + *   biometricDataOid          OBJECT IDENTIFIER }
        + *
        + * PredefinedBiometricType ::= INTEGER {
        + *   picture(0),handwritten-signature(1)}
        + *   (picture|handwritten-signature)
        + * 
        + */ +public class TypeOfBiometricData + extends ASN1Object + implements ASN1Choice +{ + public static final int PICTURE = 0; + public static final int HANDWRITTEN_SIGNATURE = 1; + + ASN1Encodable obj; + + public static TypeOfBiometricData getInstance(Object obj) + { + if (obj == null || obj instanceof TypeOfBiometricData) + { + return (TypeOfBiometricData)obj; + } + + if (obj instanceof ASN1Integer) + { + ASN1Integer predefinedBiometricTypeObj = ASN1Integer.getInstance(obj); + int predefinedBiometricType = predefinedBiometricTypeObj.getValue().intValue(); + + return new TypeOfBiometricData(predefinedBiometricType); + } + else if (obj instanceof ASN1ObjectIdentifier) + { + ASN1ObjectIdentifier BiometricDataID = ASN1ObjectIdentifier.getInstance(obj); + return new TypeOfBiometricData(BiometricDataID); + } + + throw new IllegalArgumentException("unknown object in getInstance"); + } + + public TypeOfBiometricData(int predefinedBiometricType) + { + if (predefinedBiometricType == PICTURE || predefinedBiometricType == HANDWRITTEN_SIGNATURE) + { + obj = new ASN1Integer(predefinedBiometricType); + } + else + { + throw new IllegalArgumentException("unknow PredefinedBiometricType : " + predefinedBiometricType); + } + } + + public TypeOfBiometricData(ASN1ObjectIdentifier BiometricDataID) + { + obj = BiometricDataID; + } + + public boolean isPredefined() + { + return obj instanceof ASN1Integer; + } + + public int getPredefinedBiometricType() + { + return ((ASN1Integer)obj).getValue().intValue(); + } + + public ASN1ObjectIdentifier getBiometricDataOid() + { + return (ASN1ObjectIdentifier)obj; + } + + public ASN1Primitive toASN1Primitive() + { + return obj.toASN1Primitive(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java b/common/src/main/java/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java new file mode 100644 index 0000000..304f1d4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/sigi/NameOrPseudonym.java @@ -0,0 +1,191 @@ +package org.bouncycastle.asn1.x509.sigi; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1String; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.x500.DirectoryString; + +/** + * Structure for a name or pseudonym. + * + *
        + *       NameOrPseudonym ::= CHOICE {
        + *            surAndGivenName SEQUENCE {
        + *              surName DirectoryString,
        + *              givenName SEQUENCE OF DirectoryString 
        + *         },
        + *            pseudonym DirectoryString 
        + *       }
        + * 
        + * + * @see org.bouncycastle.asn1.x509.sigi.PersonalData + * + */ +public class NameOrPseudonym + extends ASN1Object + implements ASN1Choice +{ + private DirectoryString pseudonym; + + private DirectoryString surname; + + private ASN1Sequence givenName; + + public static NameOrPseudonym getInstance(Object obj) + { + if (obj == null || obj instanceof NameOrPseudonym) + { + return (NameOrPseudonym)obj; + } + + if (obj instanceof ASN1String) + { + return new NameOrPseudonym(DirectoryString.getInstance(obj)); + } + + if (obj instanceof ASN1Sequence) + { + return new NameOrPseudonym((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + + obj.getClass().getName()); + } + + /** + * Constructor from DirectoryString. + *

        + * The sequence is of type NameOrPseudonym: + *

        + *

        +     *       NameOrPseudonym ::= CHOICE {
        +     *            surAndGivenName SEQUENCE {
        +     *              surName DirectoryString,
        +     *              givenName SEQUENCE OF DirectoryString
        +     *         },
        +     *            pseudonym DirectoryString
        +     *       }
        +     * 
        + * @param pseudonym pseudonym value to use. + */ + public NameOrPseudonym(DirectoryString pseudonym) + { + this.pseudonym = pseudonym; + } + + /** + * Constructor from ASN1Sequence. + *

        + * The sequence is of type NameOrPseudonym: + *

        + *

        +     *       NameOrPseudonym ::= CHOICE {
        +     *            surAndGivenName SEQUENCE {
        +     *              surName DirectoryString,
        +     *              givenName SEQUENCE OF DirectoryString
        +     *         },
        +     *            pseudonym DirectoryString
        +     *       }
        +     * 
        + * + * @param seq The ASN.1 sequence. + */ + private NameOrPseudonym(ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + if (!(seq.getObjectAt(0) instanceof ASN1String)) + { + throw new IllegalArgumentException("Bad object encountered: " + + seq.getObjectAt(0).getClass()); + } + + surname = DirectoryString.getInstance(seq.getObjectAt(0)); + givenName = ASN1Sequence.getInstance(seq.getObjectAt(1)); + } + + /** + * Constructor from a given details. + * + * @param pseudonym The pseudonym. + */ + public NameOrPseudonym(String pseudonym) + { + this(new DirectoryString(pseudonym)); + } + + /** + * Constructor from a given details. + * + * @param surname The surname. + * @param givenName A sequence of directory strings making up the givenName + */ + public NameOrPseudonym(DirectoryString surname, ASN1Sequence givenName) + { + this.surname = surname; + this.givenName = givenName; + } + + public DirectoryString getPseudonym() + { + return pseudonym; + } + + public DirectoryString getSurname() + { + return surname; + } + + public DirectoryString[] getGivenName() + { + DirectoryString[] items = new DirectoryString[givenName.size()]; + int count = 0; + for (Enumeration e = givenName.getObjects(); e.hasMoreElements();) + { + items[count++] = DirectoryString.getInstance(e.nextElement()); + } + return items; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *

        + * Returns: + *

        + *

        +     *       NameOrPseudonym ::= CHOICE {
        +     *            surAndGivenName SEQUENCE {
        +     *              surName DirectoryString,
        +     *              givenName SEQUENCE OF DirectoryString
        +     *         },
        +     *            pseudonym DirectoryString
        +     *       }
        +     * 
        + * + * @return a DERObject + */ + public ASN1Primitive toASN1Primitive() + { + if (pseudonym != null) + { + return pseudonym.toASN1Primitive(); + } + else + { + ASN1EncodableVector vec1 = new ASN1EncodableVector(); + vec1.add(surname); + vec1.add(givenName); + return new DERSequence(vec1); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/sigi/PersonalData.java b/common/src/main/java/org/bouncycastle/asn1/x509/sigi/PersonalData.java new file mode 100644 index 0000000..3b8214d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/sigi/PersonalData.java @@ -0,0 +1,214 @@ +package org.bouncycastle.asn1.x509.sigi; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERGeneralizedTime; +import org.bouncycastle.asn1.DERPrintableString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.x500.DirectoryString; + +/** + * Contains personal data for the otherName field in the subjectAltNames + * extension. + *

        + *

        + *     PersonalData ::= SEQUENCE {
        + *       nameOrPseudonym NameOrPseudonym,
        + *       nameDistinguisher [0] INTEGER OPTIONAL,
        + *       dateOfBirth [1] GeneralizedTime OPTIONAL,
        + *       placeOfBirth [2] DirectoryString OPTIONAL,
        + *       gender [3] PrintableString OPTIONAL,
        + *       postalAddress [4] DirectoryString OPTIONAL
        + *       }
        + * 
        + * + * @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + * @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers + */ +public class PersonalData + extends ASN1Object +{ + private NameOrPseudonym nameOrPseudonym; + private BigInteger nameDistinguisher; + private DERGeneralizedTime dateOfBirth; + private DirectoryString placeOfBirth; + private String gender; + private DirectoryString postalAddress; + + public static PersonalData getInstance(Object obj) + { + if (obj == null || obj instanceof PersonalData) + { + return (PersonalData)obj; + } + + if (obj instanceof ASN1Sequence) + { + return new PersonalData((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); + } + + /** + * Constructor from ASN1Sequence. + *

        + * The sequence is of type NameOrPseudonym: + *

        + *

        +     *     PersonalData ::= SEQUENCE {
        +     *       nameOrPseudonym NameOrPseudonym,
        +     *       nameDistinguisher [0] INTEGER OPTIONAL,
        +     *       dateOfBirth [1] GeneralizedTime OPTIONAL,
        +     *       placeOfBirth [2] DirectoryString OPTIONAL,
        +     *       gender [3] PrintableString OPTIONAL,
        +     *       postalAddress [4] DirectoryString OPTIONAL
        +     *       }
        +     * 
        + * + * @param seq The ASN.1 sequence. + */ + private PersonalData(ASN1Sequence seq) + { + if (seq.size() < 1) + { + throw new IllegalArgumentException("Bad sequence size: " + + seq.size()); + } + + Enumeration e = seq.getObjects(); + + nameOrPseudonym = NameOrPseudonym.getInstance(e.nextElement()); + + while (e.hasMoreElements()) + { + ASN1TaggedObject o = ASN1TaggedObject.getInstance(e.nextElement()); + int tag = o.getTagNo(); + switch (tag) + { + case 0: + nameDistinguisher = ASN1Integer.getInstance(o, false).getValue(); + break; + case 1: + dateOfBirth = DERGeneralizedTime.getInstance(o, false); + break; + case 2: + placeOfBirth = DirectoryString.getInstance(o, true); + break; + case 3: + gender = DERPrintableString.getInstance(o, false).getString(); + break; + case 4: + postalAddress = DirectoryString.getInstance(o, true); + break; + default: + throw new IllegalArgumentException("Bad tag number: " + o.getTagNo()); + } + } + } + + /** + * Constructor from a given details. + * + * @param nameOrPseudonym Name or pseudonym. + * @param nameDistinguisher Name distinguisher. + * @param dateOfBirth Date of birth. + * @param placeOfBirth Place of birth. + * @param gender Gender. + * @param postalAddress Postal Address. + */ + public PersonalData(NameOrPseudonym nameOrPseudonym, + BigInteger nameDistinguisher, DERGeneralizedTime dateOfBirth, + DirectoryString placeOfBirth, String gender, DirectoryString postalAddress) + { + this.nameOrPseudonym = nameOrPseudonym; + this.dateOfBirth = dateOfBirth; + this.gender = gender; + this.nameDistinguisher = nameDistinguisher; + this.postalAddress = postalAddress; + this.placeOfBirth = placeOfBirth; + } + + public NameOrPseudonym getNameOrPseudonym() + { + return nameOrPseudonym; + } + + public BigInteger getNameDistinguisher() + { + return nameDistinguisher; + } + + public DERGeneralizedTime getDateOfBirth() + { + return dateOfBirth; + } + + public DirectoryString getPlaceOfBirth() + { + return placeOfBirth; + } + + public String getGender() + { + return gender; + } + + public DirectoryString getPostalAddress() + { + return postalAddress; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *

        + * Returns: + *

        + *

        +     *     PersonalData ::= SEQUENCE {
        +     *       nameOrPseudonym NameOrPseudonym,
        +     *       nameDistinguisher [0] INTEGER OPTIONAL,
        +     *       dateOfBirth [1] GeneralizedTime OPTIONAL,
        +     *       placeOfBirth [2] DirectoryString OPTIONAL,
        +     *       gender [3] PrintableString OPTIONAL,
        +     *       postalAddress [4] DirectoryString OPTIONAL
        +     *       }
        +     * 
        + * + * @return a DERObject + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector vec = new ASN1EncodableVector(); + vec.add(nameOrPseudonym); + if (nameDistinguisher != null) + { + vec.add(new DERTaggedObject(false, 0, new ASN1Integer(nameDistinguisher))); + } + if (dateOfBirth != null) + { + vec.add(new DERTaggedObject(false, 1, dateOfBirth)); + } + if (placeOfBirth != null) + { + vec.add(new DERTaggedObject(true, 2, placeOfBirth)); + } + if (gender != null) + { + vec.add(new DERTaggedObject(false, 3, new DERPrintableString(gender, true))); + } + if (postalAddress != null) + { + vec.add(new DERTaggedObject(true, 4, postalAddress)); + } + return new DERSequence(vec); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java new file mode 100644 index 0000000..8cac124 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x509/sigi/SigIObjectIdentifiers.java @@ -0,0 +1,45 @@ +package org.bouncycastle.asn1.x509.sigi; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +/** + * Object Identifiers of SigI specifciation (German Signature Law + * Interoperability specification). + */ +public interface SigIObjectIdentifiers +{ + public final static ASN1ObjectIdentifier id_sigi = new ASN1ObjectIdentifier("1.3.36.8"); + + /** + * Key purpose IDs for German SigI (Signature Interoperability + * Specification) + */ + public final static ASN1ObjectIdentifier id_sigi_kp = new ASN1ObjectIdentifier(id_sigi + ".2"); + + /** + * Certificate policy IDs for German SigI (Signature Interoperability + * Specification) + */ + public final static ASN1ObjectIdentifier id_sigi_cp = new ASN1ObjectIdentifier(id_sigi + ".1"); + + /** + * Other Name IDs for German SigI (Signature Interoperability Specification) + */ + public final static ASN1ObjectIdentifier id_sigi_on = new ASN1ObjectIdentifier(id_sigi + ".4"); + + /** + * To be used for for the generation of directory service certificates. + */ + public static final ASN1ObjectIdentifier id_sigi_kp_directoryService = new ASN1ObjectIdentifier(id_sigi_kp + ".1"); + + /** + * ID for PersonalData + */ + public static final ASN1ObjectIdentifier id_sigi_on_personalData = new ASN1ObjectIdentifier(id_sigi_on + ".1"); + + /** + * Certificate is conform to german signature law. + */ + public static final ASN1ObjectIdentifier id_sigi_cp_sigconform = new ASN1ObjectIdentifier(id_sigi_cp + ".1"); + +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/DHDomainParameters.java b/common/src/main/java/org/bouncycastle/asn1/x9/DHDomainParameters.java new file mode 100644 index 0000000..6a97a48 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/DHDomainParameters.java @@ -0,0 +1,139 @@ +package org.bouncycastle.asn1.x9; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERSequence; + +public class DHDomainParameters + extends ASN1Object +{ + private ASN1Integer p, g, q, j; + private DHValidationParms validationParms; + + public static DHDomainParameters getInstance(ASN1TaggedObject obj, boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static DHDomainParameters getInstance(Object obj) + { + if (obj == null || obj instanceof DHDomainParameters) + { + return (DHDomainParameters)obj; + } + + if (obj instanceof ASN1Sequence) + { + return new DHDomainParameters((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("Invalid DHDomainParameters: " + + obj.getClass().getName()); + } + + public DHDomainParameters(ASN1Integer p, ASN1Integer g, ASN1Integer q, ASN1Integer j, + DHValidationParms validationParms) + { + if (p == null) + { + throw new IllegalArgumentException("'p' cannot be null"); + } + if (g == null) + { + throw new IllegalArgumentException("'g' cannot be null"); + } + if (q == null) + { + throw new IllegalArgumentException("'q' cannot be null"); + } + + this.p = p; + this.g = g; + this.q = q; + this.j = j; + this.validationParms = validationParms; + } + + private DHDomainParameters(ASN1Sequence seq) + { + if (seq.size() < 3 || seq.size() > 5) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + Enumeration e = seq.getObjects(); + this.p = ASN1Integer.getInstance(e.nextElement()); + this.g = ASN1Integer.getInstance(e.nextElement()); + this.q = ASN1Integer.getInstance(e.nextElement()); + + ASN1Encodable next = getNext(e); + + if (next != null && next instanceof ASN1Integer) + { + this.j = ASN1Integer.getInstance(next); + next = getNext(e); + } + + if (next != null) + { + this.validationParms = DHValidationParms.getInstance(next.toASN1Primitive()); + } + } + + private static ASN1Encodable getNext(Enumeration e) + { + return e.hasMoreElements() ? (ASN1Encodable)e.nextElement() : null; + } + + public ASN1Integer getP() + { + return this.p; + } + + public ASN1Integer getG() + { + return this.g; + } + + public ASN1Integer getQ() + { + return this.q; + } + + public ASN1Integer getJ() + { + return this.j; + } + + public DHValidationParms getValidationParms() + { + return this.validationParms; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + v.add(this.p); + v.add(this.g); + v.add(this.q); + + if (this.j != null) + { + v.add(this.j); + } + + if (this.validationParms != null) + { + v.add(this.validationParms); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/DHPublicKey.java b/common/src/main/java/org/bouncycastle/asn1/x9/DHPublicKey.java new file mode 100644 index 0000000..7c6d217 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/DHPublicKey.java @@ -0,0 +1,52 @@ +package org.bouncycastle.asn1.x9; + +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1TaggedObject; + +public class DHPublicKey + extends ASN1Object +{ + private ASN1Integer y; + + public static DHPublicKey getInstance(ASN1TaggedObject obj, boolean explicit) + { + return getInstance(ASN1Integer.getInstance(obj, explicit)); + } + + public static DHPublicKey getInstance(Object obj) + { + if (obj == null || obj instanceof DHPublicKey) + { + return (DHPublicKey)obj; + } + + if (obj instanceof ASN1Integer) + { + return new DHPublicKey((ASN1Integer)obj); + } + + throw new IllegalArgumentException("Invalid DHPublicKey: " + obj.getClass().getName()); + } + + public DHPublicKey(ASN1Integer y) + { + if (y == null) + { + throw new IllegalArgumentException("'y' cannot be null"); + } + + this.y = y; + } + + public ASN1Integer getY() + { + return this.y; + } + + public ASN1Primitive toASN1Primitive() + { + return this.y; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/DHValidationParms.java b/common/src/main/java/org/bouncycastle/asn1/x9/DHValidationParms.java new file mode 100644 index 0000000..78b0979 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/DHValidationParms.java @@ -0,0 +1,80 @@ +package org.bouncycastle.asn1.x9; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.ASN1TaggedObject; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; + +public class DHValidationParms extends ASN1Object +{ + private DERBitString seed; + private ASN1Integer pgenCounter; + + public static DHValidationParms getInstance(ASN1TaggedObject obj, boolean explicit) + { + return getInstance(ASN1Sequence.getInstance(obj, explicit)); + } + + public static DHValidationParms getInstance(Object obj) + { + if (obj == null || obj instanceof DHDomainParameters) + { + return (DHValidationParms)obj; + } + + if (obj instanceof ASN1Sequence) + { + return new DHValidationParms((ASN1Sequence)obj); + } + + throw new IllegalArgumentException("Invalid DHValidationParms: " + obj.getClass().getName()); + } + + public DHValidationParms(DERBitString seed, ASN1Integer pgenCounter) + { + if (seed == null) + { + throw new IllegalArgumentException("'seed' cannot be null"); + } + if (pgenCounter == null) + { + throw new IllegalArgumentException("'pgenCounter' cannot be null"); + } + + this.seed = seed; + this.pgenCounter = pgenCounter; + } + + private DHValidationParms(ASN1Sequence seq) + { + if (seq.size() != 2) + { + throw new IllegalArgumentException("Bad sequence size: " + seq.size()); + } + + this.seed = DERBitString.getInstance(seq.getObjectAt(0)); + this.pgenCounter = ASN1Integer.getInstance(seq.getObjectAt(1)); + } + + public DERBitString getSeed() + { + return this.seed; + } + + public ASN1Integer getPgenCounter() + { + return this.pgenCounter; + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + v.add(this.seed); + v.add(this.pgenCounter); + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/KeySpecificInfo.java b/common/src/main/java/org/bouncycastle/asn1/x9/KeySpecificInfo.java new file mode 100644 index 0000000..092716f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/KeySpecificInfo.java @@ -0,0 +1,68 @@ +package org.bouncycastle.asn1.x9; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + * RFC 2631, or X9.42, for further details. + */ +public class KeySpecificInfo + extends ASN1Object +{ + private ASN1ObjectIdentifier algorithm; + private ASN1OctetString counter; + + public KeySpecificInfo( + ASN1ObjectIdentifier algorithm, + ASN1OctetString counter) + { + this.algorithm = algorithm; + this.counter = counter; + } + + public KeySpecificInfo( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + algorithm = (ASN1ObjectIdentifier)e.nextElement(); + counter = (ASN1OctetString)e.nextElement(); + } + + public ASN1ObjectIdentifier getAlgorithm() + { + return algorithm; + } + + public ASN1OctetString getCounter() + { + return counter; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  KeySpecificInfo ::= SEQUENCE {
        +     *      algorithm OBJECT IDENTIFIER,
        +     *      counter OCTET STRING SIZE (4..4)
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(algorithm); + v.add(counter); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/OtherInfo.java b/common/src/main/java/org/bouncycastle/asn1/x9/OtherInfo.java new file mode 100644 index 0000000..0959244 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/OtherInfo.java @@ -0,0 +1,96 @@ +package org.bouncycastle.asn1.x9; + +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERTaggedObject; + +/** + * ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + * RFC 2631, or X9.42, for further details. + */ +public class OtherInfo + extends ASN1Object +{ + private KeySpecificInfo keyInfo; + private ASN1OctetString partyAInfo; + private ASN1OctetString suppPubInfo; + + public OtherInfo( + KeySpecificInfo keyInfo, + ASN1OctetString partyAInfo, + ASN1OctetString suppPubInfo) + { + this.keyInfo = keyInfo; + this.partyAInfo = partyAInfo; + this.suppPubInfo = suppPubInfo; + } + + public OtherInfo( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + keyInfo = new KeySpecificInfo((ASN1Sequence)e.nextElement()); + + while (e.hasMoreElements()) + { + DERTaggedObject o = (DERTaggedObject)e.nextElement(); + + if (o.getTagNo() == 0) + { + partyAInfo = (ASN1OctetString)o.getObject(); + } + else if (o.getTagNo() == 2) + { + suppPubInfo = (ASN1OctetString)o.getObject(); + } + } + } + + public KeySpecificInfo getKeyInfo() + { + return keyInfo; + } + + public ASN1OctetString getPartyAInfo() + { + return partyAInfo; + } + + public ASN1OctetString getSuppPubInfo() + { + return suppPubInfo; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  OtherInfo ::= SEQUENCE {
        +     *      keyInfo KeySpecificInfo,
        +     *      partyAInfo [0] OCTET STRING OPTIONAL,
        +     *      suppPubInfo [2] OCTET STRING
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(keyInfo); + + if (partyAInfo != null) + { + v.add(new DERTaggedObject(0, partyAInfo)); + } + + v.add(new DERTaggedObject(2, suppPubInfo)); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java b/common/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java new file mode 100644 index 0000000..972c450 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X962NamedCurves.java @@ -0,0 +1,621 @@ +package org.bouncycastle.asn1.x9; + +import javabc.BigInteger; +import java.util.Enumeration; +import java.util.Hashtable; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.math.ec.ECCurve; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.encoders.Hex; + + +/** + * table of the current named curves defined in X.962 EC-DSA. + */ +public class X962NamedCurves +{ + static X9ECParametersHolder prime192v1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + ECCurve cFp192v1 = new ECCurve.Fp( + new BigInteger("6277101735386680763835789423207666416083908700390324961279"), + new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), + new BigInteger("64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1", 16)); + + return new X9ECParameters( + cFp192v1, + cFp192v1.decodePoint( + Hex.decode("03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012")), + new BigInteger("ffffffffffffffffffffffff99def836146bc9b1b4d22831", 16), + BigInteger.valueOf(1), + Hex.decode("3045AE6FC8422f64ED579528D38120EAE12196D5")); + } + }; + + static X9ECParametersHolder prime192v2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + ECCurve cFp192v2 = new ECCurve.Fp( + new BigInteger("6277101735386680763835789423207666416083908700390324961279"), + new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), + new BigInteger("cc22d6dfb95c6b25e49c0d6364a4e5980c393aa21668d953", 16)); + + return new X9ECParameters( + cFp192v2, + cFp192v2.decodePoint( + Hex.decode("03eea2bae7e1497842f2de7769cfe9c989c072ad696f48034a")), + new BigInteger("fffffffffffffffffffffffe5fb1a724dc80418648d8dd31", 16), + BigInteger.valueOf(1), + Hex.decode("31a92ee2029fd10d901b113e990710f0d21ac6b6")); + } + }; + + static X9ECParametersHolder prime192v3 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + ECCurve cFp192v3 = new ECCurve.Fp( + new BigInteger("6277101735386680763835789423207666416083908700390324961279"), + new BigInteger("fffffffffffffffffffffffffffffffefffffffffffffffc", 16), + new BigInteger("22123dc2395a05caa7423daeccc94760a7d462256bd56916", 16)); + + return new X9ECParameters( + cFp192v3, + cFp192v3.decodePoint( + Hex.decode("027d29778100c65a1da1783716588dce2b8b4aee8e228f1896")), + new BigInteger("ffffffffffffffffffffffff7a62d031c83f4294f640ec13", 16), + BigInteger.valueOf(1), + Hex.decode("c469684435deb378c4b65ca9591e2a5763059a2e")); + } + }; + + static X9ECParametersHolder prime239v1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + ECCurve cFp239v1 = new ECCurve.Fp( + new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), + new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), + new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16)); + + return new X9ECParameters( + cFp239v1, + cFp239v1.decodePoint( + Hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), + new BigInteger("7fffffffffffffffffffffff7fffff9e5e9a9f5d9071fbd1522688909d0b", 16), + BigInteger.valueOf(1), + Hex.decode("e43bb460f0b80cc0c0b075798e948060f8321b7d")); + } + }; + + static X9ECParametersHolder prime239v2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + ECCurve cFp239v2 = new ECCurve.Fp( + new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), + new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), + new BigInteger("617fab6832576cbbfed50d99f0249c3fee58b94ba0038c7ae84c8c832f2c", 16)); + + return new X9ECParameters( + cFp239v2, + cFp239v2.decodePoint( + Hex.decode("0238af09d98727705120c921bb5e9e26296a3cdcf2f35757a0eafd87b830e7")), + new BigInteger("7fffffffffffffffffffffff800000cfa7e8594377d414c03821bc582063", 16), + BigInteger.valueOf(1), + Hex.decode("e8b4011604095303ca3b8099982be09fcb9ae616")); + } + }; + + static X9ECParametersHolder prime239v3 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + ECCurve cFp239v3 = new ECCurve.Fp( + new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), + new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), + new BigInteger("255705fa2a306654b1f4cb03d6a750a30c250102d4988717d9ba15ab6d3e", 16)); + + return new X9ECParameters( + cFp239v3, + cFp239v3.decodePoint( + Hex.decode("036768ae8e18bb92cfcf005c949aa2c6d94853d0e660bbf854b1c9505fe95a")), + new BigInteger("7fffffffffffffffffffffff7fffff975deb41b3a6057c3c432146526551", 16), + BigInteger.valueOf(1), + Hex.decode("7d7374168ffe3471b60a857686a19475d3bfa2ff")); + } + }; + + static X9ECParametersHolder prime256v1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + ECCurve cFp256v1 = new ECCurve.Fp( + new BigInteger("115792089210356248762697446949407573530086143415290314195533631308867097853951"), + new BigInteger("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc", 16), + new BigInteger("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16)); + + return new X9ECParameters( + cFp256v1, + cFp256v1.decodePoint( + Hex.decode("036b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296")), + new BigInteger("ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", 16), + BigInteger.valueOf(1), + Hex.decode("c49d360886e704936a6678e1139d26b7819f7e90")); + } + }; + + /* + * F2m Curves + */ + static X9ECParametersHolder c2pnb163v1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m163v1n = new BigInteger("0400000000000000000001E60FC8821CC74DAEAFC1", 16); + BigInteger c2m163v1h = BigInteger.valueOf(2); + + ECCurve c2m163v1 = new ECCurve.F2m( + 163, + 1, 2, 8, + new BigInteger("072546B5435234A422E0789675F432C89435DE5242", 16), + new BigInteger("00C9517D06D5240D3CFF38C74B20B6CD4D6F9DD4D9", 16), + c2m163v1n, c2m163v1h); + + return new X9ECParameters( + c2m163v1, + c2m163v1.decodePoint( + Hex.decode("0307AF69989546103D79329FCC3D74880F33BBE803CB")), + c2m163v1n, c2m163v1h, + Hex.decode("D2COFB15760860DEF1EEF4D696E6768756151754")); + } + }; + + static X9ECParametersHolder c2pnb163v2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m163v2n = new BigInteger("03FFFFFFFFFFFFFFFFFFFDF64DE1151ADBB78F10A7", 16); + BigInteger c2m163v2h = BigInteger.valueOf(2); + + ECCurve c2m163v2 = new ECCurve.F2m( + 163, + 1, 2, 8, + new BigInteger("0108B39E77C4B108BED981ED0E890E117C511CF072", 16), + new BigInteger("0667ACEB38AF4E488C407433FFAE4F1C811638DF20", 16), + c2m163v2n, c2m163v2h); + + return new X9ECParameters( + c2m163v2, + c2m163v2.decodePoint( + Hex.decode("030024266E4EB5106D0A964D92C4860E2671DB9B6CC5")), + c2m163v2n, c2m163v2h, + null); + } + }; + + static X9ECParametersHolder c2pnb163v3 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m163v3n = new BigInteger("03FFFFFFFFFFFFFFFFFFFE1AEE140F110AFF961309", 16); + BigInteger c2m163v3h = BigInteger.valueOf(2); + + ECCurve c2m163v3 = new ECCurve.F2m( + 163, + 1, 2, 8, + new BigInteger("07A526C63D3E25A256A007699F5447E32AE456B50E", 16), + new BigInteger("03F7061798EB99E238FD6F1BF95B48FEEB4854252B", 16), + c2m163v3n, c2m163v3h); + + return new X9ECParameters( + c2m163v3, + c2m163v3.decodePoint( + Hex.decode("0202F9F87B7C574D0BDECF8A22E6524775F98CDEBDCB")), + c2m163v3n, c2m163v3h, + null); + } + }; + + static X9ECParametersHolder c2pnb176w1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m176w1n = new BigInteger("010092537397ECA4F6145799D62B0A19CE06FE26AD", 16); + BigInteger c2m176w1h = BigInteger.valueOf(0xFF6E); + + ECCurve c2m176w1 = new ECCurve.F2m( + 176, + 1, 2, 43, + new BigInteger("00E4E6DB2995065C407D9D39B8D0967B96704BA8E9C90B", 16), + new BigInteger("005DDA470ABE6414DE8EC133AE28E9BBD7FCEC0AE0FFF2", 16), + c2m176w1n, c2m176w1h); + + return new X9ECParameters( + c2m176w1, + c2m176w1.decodePoint( + Hex.decode("038D16C2866798B600F9F08BB4A8E860F3298CE04A5798")), + c2m176w1n, c2m176w1h, + null); + } + }; + + static X9ECParametersHolder c2tnb191v1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m191v1n = new BigInteger("40000000000000000000000004A20E90C39067C893BBB9A5", 16); + BigInteger c2m191v1h = BigInteger.valueOf(2); + + ECCurve c2m191v1 = new ECCurve.F2m( + 191, + 9, + new BigInteger("2866537B676752636A68F56554E12640276B649EF7526267", 16), + new BigInteger("2E45EF571F00786F67B0081B9495A3D95462F5DE0AA185EC", 16), + c2m191v1n, c2m191v1h); + + return new X9ECParameters( + c2m191v1, + c2m191v1.decodePoint( + Hex.decode("0236B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D")), + c2m191v1n, c2m191v1h, + Hex.decode("4E13CA542744D696E67687561517552F279A8C84")); + } + }; + + static X9ECParametersHolder c2tnb191v2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m191v2n = new BigInteger("20000000000000000000000050508CB89F652824E06B8173", 16); + BigInteger c2m191v2h = BigInteger.valueOf(4); + + ECCurve c2m191v2 = new ECCurve.F2m( + 191, + 9, + new BigInteger("401028774D7777C7B7666D1366EA432071274F89FF01E718", 16), + new BigInteger("0620048D28BCBD03B6249C99182B7C8CD19700C362C46A01", 16), + c2m191v2n, c2m191v2h); + + return new X9ECParameters( + c2m191v2, + c2m191v2.decodePoint( + Hex.decode("023809B2B7CC1B28CC5A87926AAD83FD28789E81E2C9E3BF10")), + c2m191v2n, c2m191v2h, + null); + } + }; + + static X9ECParametersHolder c2tnb191v3 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m191v3n = new BigInteger("155555555555555555555555610C0B196812BFB6288A3EA3", 16); + BigInteger c2m191v3h = BigInteger.valueOf(6); + + ECCurve c2m191v3 = new ECCurve.F2m( + 191, + 9, + new BigInteger("6C01074756099122221056911C77D77E77A777E7E7E77FCB", 16), + new BigInteger("71FE1AF926CF847989EFEF8DB459F66394D90F32AD3F15E8", 16), + c2m191v3n, c2m191v3h); + + return new X9ECParameters( + c2m191v3, + c2m191v3.decodePoint( + Hex.decode("03375D4CE24FDE434489DE8746E71786015009E66E38A926DD")), + c2m191v3n, c2m191v3h, + null); + } + }; + + static X9ECParametersHolder c2pnb208w1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m208w1n = new BigInteger("0101BAF95C9723C57B6C21DA2EFF2D5ED588BDD5717E212F9D", 16); + BigInteger c2m208w1h = BigInteger.valueOf(0xFE48); + + ECCurve c2m208w1 = new ECCurve.F2m( + 208, + 1, 2, 83, + new BigInteger("0", 16), + new BigInteger("00C8619ED45A62E6212E1160349E2BFA844439FAFC2A3FD1638F9E", 16), + c2m208w1n, c2m208w1h); + + return new X9ECParameters( + c2m208w1, + c2m208w1.decodePoint( + Hex.decode("0289FDFBE4ABE193DF9559ECF07AC0CE78554E2784EB8C1ED1A57A")), + c2m208w1n, c2m208w1h, + null); + } + }; + + static X9ECParametersHolder c2tnb239v1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m239v1n = new BigInteger("2000000000000000000000000000000F4D42FFE1492A4993F1CAD666E447", 16); + BigInteger c2m239v1h = BigInteger.valueOf(4); + + ECCurve c2m239v1 = new ECCurve.F2m( + 239, + 36, + new BigInteger("32010857077C5431123A46B808906756F543423E8D27877578125778AC76", 16), + new BigInteger("790408F2EEDAF392B012EDEFB3392F30F4327C0CA3F31FC383C422AA8C16", 16), + c2m239v1n, c2m239v1h); + + return new X9ECParameters( + c2m239v1, + c2m239v1.decodePoint( + Hex.decode("0257927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D")), + c2m239v1n, c2m239v1h, + null); + } + }; + + static X9ECParametersHolder c2tnb239v2 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m239v2n = new BigInteger("1555555555555555555555555555553C6F2885259C31E3FCDF154624522D", 16); + BigInteger c2m239v2h = BigInteger.valueOf(6); + + ECCurve c2m239v2 = new ECCurve.F2m( + 239, + 36, + new BigInteger("4230017757A767FAE42398569B746325D45313AF0766266479B75654E65F", 16), + new BigInteger("5037EA654196CFF0CD82B2C14A2FCF2E3FF8775285B545722F03EACDB74B", 16), + c2m239v2n, c2m239v2h); + + return new X9ECParameters( + c2m239v2, + c2m239v2.decodePoint( + Hex.decode("0228F9D04E900069C8DC47A08534FE76D2B900B7D7EF31F5709F200C4CA205")), + c2m239v2n, c2m239v2h, + null); + } + }; + + static X9ECParametersHolder c2tnb239v3 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m239v3n = new BigInteger("0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC4912D2D9DF903EF9888B8A0E4CFF", 16); + BigInteger c2m239v3h = BigInteger.valueOf(10); + + ECCurve c2m239v3 = new ECCurve.F2m( + 239, + 36, + new BigInteger("01238774666A67766D6676F778E676B66999176666E687666D8766C66A9F", 16), + new BigInteger("6A941977BA9F6A435199ACFC51067ED587F519C5ECB541B8E44111DE1D40", 16), + c2m239v3n, c2m239v3h); + + return new X9ECParameters( + c2m239v3, + c2m239v3.decodePoint( + Hex.decode("0370F6E9D04D289C4E89913CE3530BFDE903977D42B146D539BF1BDE4E9C92")), + c2m239v3n, c2m239v3h, + null); + } + }; + + static X9ECParametersHolder c2pnb272w1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m272w1n = new BigInteger("0100FAF51354E0E39E4892DF6E319C72C8161603FA45AA7B998A167B8F1E629521", 16); + BigInteger c2m272w1h = BigInteger.valueOf(0xFF06); + + ECCurve c2m272w1 = new ECCurve.F2m( + 272, + 1, 3, 56, + new BigInteger("0091A091F03B5FBA4AB2CCF49C4EDD220FB028712D42BE752B2C40094DBACDB586FB20", 16), + new BigInteger("7167EFC92BB2E3CE7C8AAAFF34E12A9C557003D7C73A6FAF003F99F6CC8482E540F7", 16), + c2m272w1n, c2m272w1h); + + return new X9ECParameters( + c2m272w1, + c2m272w1.decodePoint( + Hex.decode("026108BABB2CEEBCF787058A056CBE0CFE622D7723A289E08A07AE13EF0D10D171DD8D")), + c2m272w1n, c2m272w1h, + null); + } + }; + + static X9ECParametersHolder c2pnb304w1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m304w1n = new BigInteger("0101D556572AABAC800101D556572AABAC8001022D5C91DD173F8FB561DA6899164443051D", 16); + BigInteger c2m304w1h = BigInteger.valueOf(0xFE2E); + + ECCurve c2m304w1 = new ECCurve.F2m( + 304, + 1, 2, 11, + new BigInteger("00FD0D693149A118F651E6DCE6802085377E5F882D1B510B44160074C1288078365A0396C8E681", 16), + new BigInteger("00BDDB97E555A50A908E43B01C798EA5DAA6788F1EA2794EFCF57166B8C14039601E55827340BE", 16), + c2m304w1n, c2m304w1h); + + return new X9ECParameters( + c2m304w1, + c2m304w1.decodePoint( + Hex.decode("02197B07845E9BE2D96ADB0F5F3C7F2CFFBD7A3EB8B6FEC35C7FD67F26DDF6285A644F740A2614")), + c2m304w1n, c2m304w1h, + null); + } + }; + + static X9ECParametersHolder c2tnb359v1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m359v1n = new BigInteger("01AF286BCA1AF286BCA1AF286BCA1AF286BCA1AF286BC9FB8F6B85C556892C20A7EB964FE7719E74F490758D3B", 16); + BigInteger c2m359v1h = BigInteger.valueOf(0x4C); + + ECCurve c2m359v1 = new ECCurve.F2m( + 359, + 68, + new BigInteger("5667676A654B20754F356EA92017D946567C46675556F19556A04616B567D223A5E05656FB549016A96656A557", 16), + new BigInteger("2472E2D0197C49363F1FE7F5B6DB075D52B6947D135D8CA445805D39BC345626089687742B6329E70680231988", 16), + c2m359v1n, c2m359v1h); + + return new X9ECParameters( + c2m359v1, + c2m359v1.decodePoint( + Hex.decode("033C258EF3047767E7EDE0F1FDAA79DAEE3841366A132E163ACED4ED2401DF9C6BDCDE98E8E707C07A2239B1B097")), + c2m359v1n, c2m359v1h, + null); + } + }; + + static X9ECParametersHolder c2pnb368w1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m368w1n = new BigInteger("010090512DA9AF72B08349D98A5DD4C7B0532ECA51CE03E2D10F3B7AC579BD87E909AE40A6F131E9CFCE5BD967", 16); + BigInteger c2m368w1h = BigInteger.valueOf(0xFF70); + + ECCurve c2m368w1 = new ECCurve.F2m( + 368, + 1, 2, 85, + new BigInteger("00E0D2EE25095206F5E2A4F9ED229F1F256E79A0E2B455970D8D0D865BD94778C576D62F0AB7519CCD2A1A906AE30D", 16), + new BigInteger("00FC1217D4320A90452C760A58EDCD30C8DD069B3C34453837A34ED50CB54917E1C2112D84D164F444F8F74786046A", 16), + c2m368w1n, c2m368w1h); + + return new X9ECParameters( + c2m368w1, + c2m368w1.decodePoint( + Hex.decode("021085E2755381DCCCE3C1557AFA10C2F0C0C2825646C5B34A394CBCFA8BC16B22E7E789E927BE216F02E1FB136A5F")), + c2m368w1n, c2m368w1h, + null); + } + }; + + static X9ECParametersHolder c2tnb431r1 = new X9ECParametersHolder() + { + protected X9ECParameters createParameters() + { + BigInteger c2m431r1n = new BigInteger("0340340340340340340340340340340340340340340340340340340323C313FAB50589703B5EC68D3587FEC60D161CC149C1AD4A91", 16); + BigInteger c2m431r1h = BigInteger.valueOf(0x2760); + + ECCurve c2m431r1 = new ECCurve.F2m( + 431, + 120, + new BigInteger("1A827EF00DD6FC0E234CAF046C6A5D8A85395B236CC4AD2CF32A0CADBDC9DDF620B0EB9906D0957F6C6FEACD615468DF104DE296CD8F", 16), + new BigInteger("10D9B4A3D9047D8B154359ABFB1B7F5485B04CEB868237DDC9DEDA982A679A5A919B626D4E50A8DD731B107A9962381FB5D807BF2618", 16), + c2m431r1n, c2m431r1h); + + return new X9ECParameters( + c2m431r1, + c2m431r1.decodePoint( + Hex.decode("02120FC05D3C67A99DE161D2F4092622FECA701BE4F50F4758714E8A87BBF2A658EF8C21E7C5EFE965361F6C2999C0C247B0DBD70CE6B7")), + c2m431r1n, c2m431r1h, + null); + } + }; + + static final Hashtable objIds = new Hashtable(); + static final Hashtable curves = new Hashtable(); + static final Hashtable names = new Hashtable(); + + static void defineCurve(String name, ASN1ObjectIdentifier oid, X9ECParametersHolder holder) + { + objIds.put(name, oid); + names.put(oid, name); + curves.put(oid, holder); + } + + static + { + defineCurve("prime192v1", X9ObjectIdentifiers.prime192v1, prime192v1); + defineCurve("prime192v2", X9ObjectIdentifiers.prime192v2, prime192v2); + defineCurve("prime192v3", X9ObjectIdentifiers.prime192v3, prime192v3); + defineCurve("prime239v1", X9ObjectIdentifiers.prime239v1, prime239v1); + defineCurve("prime239v2", X9ObjectIdentifiers.prime239v2, prime239v2); + defineCurve("prime239v3", X9ObjectIdentifiers.prime239v3, prime239v3); + defineCurve("prime256v1", X9ObjectIdentifiers.prime256v1, prime256v1); + defineCurve("c2pnb163v1", X9ObjectIdentifiers.c2pnb163v1, c2pnb163v1); + defineCurve("c2pnb163v2", X9ObjectIdentifiers.c2pnb163v2, c2pnb163v2); + defineCurve("c2pnb163v3", X9ObjectIdentifiers.c2pnb163v3, c2pnb163v3); + defineCurve("c2pnb176w1", X9ObjectIdentifiers.c2pnb176w1, c2pnb176w1); + defineCurve("c2tnb191v1", X9ObjectIdentifiers.c2tnb191v1, c2tnb191v1); + defineCurve("c2tnb191v2", X9ObjectIdentifiers.c2tnb191v2, c2tnb191v2); + defineCurve("c2tnb191v3", X9ObjectIdentifiers.c2tnb191v3, c2tnb191v3); + defineCurve("c2pnb208w1", X9ObjectIdentifiers.c2pnb208w1, c2pnb208w1); + defineCurve("c2tnb239v1", X9ObjectIdentifiers.c2tnb239v1, c2tnb239v1); + defineCurve("c2tnb239v2", X9ObjectIdentifiers.c2tnb239v2, c2tnb239v2); + defineCurve("c2tnb239v3", X9ObjectIdentifiers.c2tnb239v3, c2tnb239v3); + defineCurve("c2pnb272w1", X9ObjectIdentifiers.c2pnb272w1, c2pnb272w1); + defineCurve("c2pnb304w1", X9ObjectIdentifiers.c2pnb304w1, c2pnb304w1); + defineCurve("c2tnb359v1", X9ObjectIdentifiers.c2tnb359v1, c2tnb359v1); + defineCurve("c2pnb368w1", X9ObjectIdentifiers.c2pnb368w1, c2pnb368w1); + defineCurve("c2tnb431r1", X9ObjectIdentifiers.c2tnb431r1, c2tnb431r1); + } + + public static X9ECParameters getByName( + String name) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); + + if (oid != null) + { + return getByOID(oid); + } + + return null; + } + + /** + * return the X9ECParameters object for the named curve represented by + * the passed in object identifier. Null if the curve isn't present. + * + * @param oid an object identifier representing a named curve, if present. + */ + public static X9ECParameters getByOID( + ASN1ObjectIdentifier oid) + { + X9ECParametersHolder holder = (X9ECParametersHolder)curves.get(oid); + + if (holder != null) + { + return holder.getParameters(); + } + + return null; + } + + /** + * return the object identifier signified by the passed in name. Null + * if there is no object identifier associated with name. + * + * @return the object identifier associated with name, if present. + */ + public static ASN1ObjectIdentifier getOID( + String name) + { + return (ASN1ObjectIdentifier)objIds.get(Strings.toLowerCase(name)); + } + + /** + * return the named curve name represented by the given object identifier. + */ + public static String getName( + ASN1ObjectIdentifier oid) + { + return (String)names.get(oid); + } + + /** + * returns an enumeration containing the name strings for curves + * contained in this structure. + */ + public static Enumeration getNames() + { + return objIds.keys(); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X962Parameters.java b/common/src/main/java/org/bouncycastle/asn1/x9/X962Parameters.java new file mode 100644 index 0000000..1c395d2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X962Parameters.java @@ -0,0 +1,86 @@ +package org.bouncycastle.asn1.x9; + +import org.bouncycastle.asn1.ASN1Choice; +import org.bouncycastle.asn1.ASN1Null; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1TaggedObject; + +public class X962Parameters + extends ASN1Object + implements ASN1Choice +{ + private ASN1Primitive params = null; + + public static X962Parameters getInstance( + Object obj) + { + if (obj == null || obj instanceof X962Parameters) + { + return (X962Parameters)obj; + } + + if (obj instanceof ASN1Primitive) + { + return new X962Parameters((ASN1Primitive)obj); + } + + throw new IllegalArgumentException("unknown object in getInstance()"); + } + + public static X962Parameters getInstance( + ASN1TaggedObject obj, + boolean explicit) + { + return getInstance(obj.getObject()); // must be explicitly tagged + } + + public X962Parameters( + X9ECParameters ecParameters) + { + this.params = ecParameters.toASN1Primitive(); + } + + public X962Parameters( + ASN1ObjectIdentifier namedCurve) + { + this.params = namedCurve; + } + + public X962Parameters( + ASN1Primitive obj) + { + this.params = obj; + } + + public boolean isNamedCurve() + { + return (params instanceof ASN1ObjectIdentifier); + } + + public boolean isImplicitlyCA() + { + return (params instanceof ASN1Null); + } + + public ASN1Primitive getParameters() + { + return params; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     * Parameters ::= CHOICE {
        +     *    ecParameters ECParameters,
        +     *    namedCurve   CURVES.&id({CurveNames}),
        +     *    implicitlyCA NULL
        +     * }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + return (ASN1Primitive)params; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9Curve.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9Curve.java new file mode 100644 index 0000000..a1d0194 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9Curve.java @@ -0,0 +1,161 @@ +package org.bouncycastle.asn1.x9; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.math.ec.ECCurve; + +/** + * ASN.1 def for Elliptic-Curve Curve structure. See + * X9.62, for further details. + */ +public class X9Curve + extends ASN1Object + implements X9ObjectIdentifiers +{ + private ECCurve curve; + private byte[] seed; + private ASN1ObjectIdentifier fieldIdentifier = null; + + public X9Curve( + ECCurve curve) + { + this.curve = curve; + this.seed = null; + setFieldIdentifier(); + } + + public X9Curve( + ECCurve curve, + byte[] seed) + { + this.curve = curve; + this.seed = seed; + setFieldIdentifier(); + } + + public X9Curve( + X9FieldID fieldID, + ASN1Sequence seq) + { + fieldIdentifier = fieldID.getIdentifier(); + if (fieldIdentifier.equals(prime_field)) + { + BigInteger p = ((ASN1Integer)fieldID.getParameters()).getValue(); + X9FieldElement x9A = new X9FieldElement(p, (ASN1OctetString)seq.getObjectAt(0)); + X9FieldElement x9B = new X9FieldElement(p, (ASN1OctetString)seq.getObjectAt(1)); + curve = new ECCurve.Fp(p, x9A.getValue().toBigInteger(), x9B.getValue().toBigInteger()); + } + else + { + if (fieldIdentifier.equals(characteristic_two_field)) + { + // Characteristic two field + ASN1Sequence parameters = ASN1Sequence.getInstance(fieldID.getParameters()); + int m = ((ASN1Integer)parameters.getObjectAt(0)).getValue(). + intValue(); + ASN1ObjectIdentifier representation + = (ASN1ObjectIdentifier)parameters.getObjectAt(1); + + int k1 = 0; + int k2 = 0; + int k3 = 0; + if (representation.equals(tpBasis)) + { + // Trinomial basis representation + k1 = ((ASN1Integer)parameters.getObjectAt(2)).getValue(). + intValue(); + } + else + { + // Pentanomial basis representation + DERSequence pentanomial + = (DERSequence)parameters.getObjectAt(2); + k1 = ((ASN1Integer)pentanomial.getObjectAt(0)).getValue(). + intValue(); + k2 = ((ASN1Integer)pentanomial.getObjectAt(1)).getValue(). + intValue(); + k3 = ((ASN1Integer)pentanomial.getObjectAt(2)).getValue(). + intValue(); + } + X9FieldElement x9A = new X9FieldElement(m, k1, k2, k3, (ASN1OctetString)seq.getObjectAt(0)); + X9FieldElement x9B = new X9FieldElement(m, k1, k2, k3, (ASN1OctetString)seq.getObjectAt(1)); + // TODO Is it possible to get the order (n) and cofactor(h) too? + curve = new ECCurve.F2m(m, k1, k2, k3, x9A.getValue().toBigInteger(), x9B.getValue().toBigInteger()); + } + } + + if (seq.size() == 3) + { + seed = ((DERBitString)seq.getObjectAt(2)).getBytes(); + } + } + + private void setFieldIdentifier() + { + if (curve instanceof ECCurve.Fp) + { + fieldIdentifier = prime_field; + } + else if (curve instanceof ECCurve.F2m) + { + fieldIdentifier = characteristic_two_field; + } + else + { + throw new IllegalArgumentException("This type of ECCurve is not " + + "implemented"); + } + } + + public ECCurve getCurve() + { + return curve; + } + + public byte[] getSeed() + { + return seed; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  Curve ::= SEQUENCE {
        +     *      a               FieldElement,
        +     *      b               FieldElement,
        +     *      seed            BIT STRING      OPTIONAL
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (fieldIdentifier.equals(prime_field)) + { + v.add(new X9FieldElement(curve.getA()).toASN1Primitive()); + v.add(new X9FieldElement(curve.getB()).toASN1Primitive()); + } + else if (fieldIdentifier.equals(characteristic_two_field)) + { + v.add(new X9FieldElement(curve.getA()).toASN1Primitive()); + v.add(new X9FieldElement(curve.getB()).toASN1Primitive()); + } + + if (seed != null) + { + v.add(new DERBitString(seed)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9ECParameters.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9ECParameters.java new file mode 100644 index 0000000..69b1171 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9ECParameters.java @@ -0,0 +1,176 @@ +package org.bouncycastle.asn1.x9; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.math.ec.ECCurve; +import org.bouncycastle.math.ec.ECPoint; + +/** + * ASN.1 def for Elliptic-Curve ECParameters structure. See + * X9.62, for further details. + */ +public class X9ECParameters + extends ASN1Object + implements X9ObjectIdentifiers +{ + private static final BigInteger ONE = BigInteger.valueOf(1); + + private X9FieldID fieldID; + private ECCurve curve; + private ECPoint g; + private BigInteger n; + private BigInteger h; + private byte[] seed; + + private X9ECParameters( + ASN1Sequence seq) + { + if (!(seq.getObjectAt(0) instanceof ASN1Integer) + || !((ASN1Integer)seq.getObjectAt(0)).getValue().equals(ONE)) + { + throw new IllegalArgumentException("bad version in X9ECParameters"); + } + + X9Curve x9c = new X9Curve( + new X9FieldID((ASN1Sequence)seq.getObjectAt(1)), + (ASN1Sequence)seq.getObjectAt(2)); + + this.curve = x9c.getCurve(); + this.g = new X9ECPoint(curve, (ASN1OctetString)seq.getObjectAt(3)).getPoint(); + this.n = ((ASN1Integer)seq.getObjectAt(4)).getValue(); + this.seed = x9c.getSeed(); + + if (seq.size() == 6) + { + this.h = ((ASN1Integer)seq.getObjectAt(5)).getValue(); + } + } + + public static X9ECParameters getInstance(Object obj) + { + if (obj instanceof X9ECParameters) + { + return (X9ECParameters)obj; + } + + if (obj != null) + { + return new X9ECParameters(ASN1Sequence.getInstance(obj)); + } + + return null; + } + + public X9ECParameters( + ECCurve curve, + ECPoint g, + BigInteger n) + { + this(curve, g, n, ONE, null); + } + + public X9ECParameters( + ECCurve curve, + ECPoint g, + BigInteger n, + BigInteger h) + { + this(curve, g, n, h, null); + } + + public X9ECParameters( + ECCurve curve, + ECPoint g, + BigInteger n, + BigInteger h, + byte[] seed) + { + this.curve = curve; + this.g = g; + this.n = n; + this.h = h; + this.seed = seed; + + if (curve instanceof ECCurve.Fp) + { + this.fieldID = new X9FieldID(((ECCurve.Fp)curve).getQ()); + } + else + { + if (curve instanceof ECCurve.F2m) + { + ECCurve.F2m curveF2m = (ECCurve.F2m)curve; + this.fieldID = new X9FieldID(curveF2m.getM(), curveF2m.getK1(), + curveF2m.getK2(), curveF2m.getK3()); + } + } + } + + public ECCurve getCurve() + { + return curve; + } + + public ECPoint getG() + { + return g; + } + + public BigInteger getN() + { + return n; + } + + public BigInteger getH() + { + if (h == null) + { + return ONE; // TODO - this should be calculated, it will cause issues with custom curves. + } + + return h; + } + + public byte[] getSeed() + { + return seed; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  ECParameters ::= SEQUENCE {
        +     *      version         INTEGER { ecpVer1(1) } (ecpVer1),
        +     *      fieldID         FieldID {{FieldTypes}},
        +     *      curve           X9Curve,
        +     *      base            X9ECPoint,
        +     *      order           INTEGER,
        +     *      cofactor        INTEGER OPTIONAL
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(new ASN1Integer(1)); + v.add(fieldID); + v.add(new X9Curve(curve, seed)); + v.add(new X9ECPoint(g)); + v.add(new ASN1Integer(n)); + + if (h != null) + { + v.add(new ASN1Integer(h)); + } + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9ECParametersHolder.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9ECParametersHolder.java new file mode 100644 index 0000000..47361f8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9ECParametersHolder.java @@ -0,0 +1,18 @@ +package org.bouncycastle.asn1.x9; + +public abstract class X9ECParametersHolder +{ + private X9ECParameters params; + + public X9ECParameters getParameters() + { + if (params == null) + { + params = createParameters(); + } + + return params; + } + + protected abstract X9ECParameters createParameters(); +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9ECPoint.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9ECPoint.java new file mode 100644 index 0000000..a4acb6e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9ECPoint.java @@ -0,0 +1,48 @@ +package org.bouncycastle.asn1.x9; + +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.math.ec.ECCurve; +import org.bouncycastle.math.ec.ECPoint; + +/** + * class for describing an ECPoint as a DER object. + */ +public class X9ECPoint + extends ASN1Object +{ + ECPoint p; + + public X9ECPoint( + ECPoint p) + { + this.p = p; + } + + public X9ECPoint( + ECCurve c, + ASN1OctetString s) + { + this.p = c.decodePoint(s.getOctets()); + } + + public ECPoint getPoint() + { + return p; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *
        +     *  ECPoint ::= OCTET STRING
        +     * 
        + *

        + * Octet string produced using ECPoint.getEncoded(). + */ + public ASN1Primitive toASN1Primitive() + { + return new DEROctetString(p.getEncoded()); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9FieldElement.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9FieldElement.java new file mode 100644 index 0000000..8864fd4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9FieldElement.java @@ -0,0 +1,64 @@ +package org.bouncycastle.asn1.x9; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.math.ec.ECFieldElement; + +/** + * class for processing an FieldElement as a DER object. + */ +public class X9FieldElement + extends ASN1Object +{ + protected ECFieldElement f; + + private static X9IntegerConverter converter = new X9IntegerConverter(); + + public X9FieldElement(ECFieldElement f) + { + this.f = f; + } + + public X9FieldElement(BigInteger p, ASN1OctetString s) + { + this(new ECFieldElement.Fp(p, new BigInteger(1, s.getOctets()))); + } + + public X9FieldElement(int m, int k1, int k2, int k3, ASN1OctetString s) + { + this(new ECFieldElement.F2m(m, k1, k2, k3, new BigInteger(1, s.getOctets()))); + } + + public ECFieldElement getValue() + { + return f; + } + + /** + * Produce an object suitable for an ASN1OutputStream. + *

        +     *  FieldElement ::= OCTET STRING
        +     * 
        + *

        + *

          + *
        1. if q is an odd prime then the field element is + * processed as an Integer and converted to an octet string + * according to x 9.62 4.3.1.
        2. + *
        3. if q is 2m then the bit string + * contained in the field element is converted into an octet + * string with the same ordering padded at the front if necessary. + *
        4. + *
        + */ + public ASN1Primitive toASN1Primitive() + { + int byteCount = converter.getByteLength(f); + byte[] paddedBigInteger = converter.integerToBytes(f.toBigInteger(), byteCount); + + return new DEROctetString(paddedBigInteger); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9FieldID.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9FieldID.java new file mode 100644 index 0000000..0a9e06a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9FieldID.java @@ -0,0 +1,109 @@ +package org.bouncycastle.asn1.x9; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +/** + * ASN.1 def for Elliptic-Curve Field ID structure. See + * X9.62, for further details. + */ +public class X9FieldID + extends ASN1Object + implements X9ObjectIdentifiers +{ + private ASN1ObjectIdentifier id; + private ASN1Primitive parameters; + + /** + * Constructor for elliptic curves over prime fields + * F2. + * @param primeP The prime p defining the prime field. + */ + public X9FieldID(BigInteger primeP) + { + this.id = prime_field; + this.parameters = new ASN1Integer(primeP); + } + + /** + * Constructor for elliptic curves over binary fields + * F2m. + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k2 The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k3 The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).. + */ + public X9FieldID(int m, int k1, int k2, int k3) + { + this.id = characteristic_two_field; + ASN1EncodableVector fieldIdParams = new ASN1EncodableVector(); + fieldIdParams.add(new ASN1Integer(m)); + + if (k2 == 0) + { + fieldIdParams.add(tpBasis); + fieldIdParams.add(new ASN1Integer(k1)); + } + else + { + fieldIdParams.add(ppBasis); + ASN1EncodableVector pentanomialParams = new ASN1EncodableVector(); + pentanomialParams.add(new ASN1Integer(k1)); + pentanomialParams.add(new ASN1Integer(k2)); + pentanomialParams.add(new ASN1Integer(k3)); + fieldIdParams.add(new DERSequence(pentanomialParams)); + } + + this.parameters = new DERSequence(fieldIdParams); + } + + public X9FieldID( + ASN1Sequence seq) + { + this.id = (ASN1ObjectIdentifier)seq.getObjectAt(0); + this.parameters = (ASN1Primitive)seq.getObjectAt(1); + } + + public ASN1ObjectIdentifier getIdentifier() + { + return id; + } + + public ASN1Primitive getParameters() + { + return parameters; + } + + /** + * Produce a DER encoding of the following structure. + *
        +     *  FieldID ::= SEQUENCE {
        +     *      fieldType       FIELD-ID.&id({IOSet}),
        +     *      parameters      FIELD-ID.&Type({IOSet}{@fieldType})
        +     *  }
        +     * 
        + */ + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(this.id); + v.add(this.parameters); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9IntegerConverter.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9IntegerConverter.java new file mode 100644 index 0000000..ff7f977 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9IntegerConverter.java @@ -0,0 +1,47 @@ +package org.bouncycastle.asn1.x9; + +import javabc.BigInteger; + +import org.bouncycastle.math.ec.ECCurve; +import org.bouncycastle.math.ec.ECFieldElement; + +public class X9IntegerConverter +{ + public int getByteLength( + ECCurve c) + { + return (c.getFieldSize() + 7) / 8; + } + + public int getByteLength( + ECFieldElement fe) + { + return (fe.getFieldSize() + 7) / 8; + } + + public byte[] integerToBytes( + BigInteger s, + int qLength) + { + byte[] bytes = s.toByteArray(); + + if (qLength < bytes.length) + { + byte[] tmp = new byte[qLength]; + + System.arraycopy(bytes, bytes.length - tmp.length, tmp, 0, tmp.length); + + return tmp; + } + else if (qLength > bytes.length) + { + byte[] tmp = new byte[qLength]; + + System.arraycopy(bytes, 0, tmp, tmp.length - bytes.length, bytes.length); + + return tmp; + } + + return bytes; + } +} diff --git a/common/src/main/java/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java new file mode 100644 index 0000000..6c1fcd7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/asn1/x9/X9ObjectIdentifiers.java @@ -0,0 +1,132 @@ +package org.bouncycastle.asn1.x9; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +public interface X9ObjectIdentifiers +{ + // + // X9.62 + // + // ansi-X9-62 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + // us(840) ansi-x962(10045) } + // + static final ASN1ObjectIdentifier ansi_X9_62 = new ASN1ObjectIdentifier("1.2.840.10045"); + static final ASN1ObjectIdentifier id_fieldType = ansi_X9_62.branch("1"); + + static final ASN1ObjectIdentifier prime_field = id_fieldType.branch("1"); + + static final ASN1ObjectIdentifier characteristic_two_field = id_fieldType.branch("2"); + + static final ASN1ObjectIdentifier gnBasis = id_fieldType.branch("2.3.1"); + + static final ASN1ObjectIdentifier tpBasis = id_fieldType.branch("2.3.2"); + + static final ASN1ObjectIdentifier ppBasis = id_fieldType.branch("2.3.3"); + + static final ASN1ObjectIdentifier id_ecSigType = ansi_X9_62.branch("4"); + + static final ASN1ObjectIdentifier ecdsa_with_SHA1 = new ASN1ObjectIdentifier(id_ecSigType + ".1"); + + static final ASN1ObjectIdentifier id_publicKeyType = ansi_X9_62.branch("2"); + + static final ASN1ObjectIdentifier id_ecPublicKey = id_publicKeyType.branch("1"); + + static final ASN1ObjectIdentifier ecdsa_with_SHA2 = id_ecSigType.branch("3"); + + static final ASN1ObjectIdentifier ecdsa_with_SHA224 = ecdsa_with_SHA2.branch("1"); + + static final ASN1ObjectIdentifier ecdsa_with_SHA256 = ecdsa_with_SHA2.branch("2"); + + static final ASN1ObjectIdentifier ecdsa_with_SHA384 = ecdsa_with_SHA2.branch("3"); + + static final ASN1ObjectIdentifier ecdsa_with_SHA512 = ecdsa_with_SHA2.branch("4"); + + // + // named curves + // + static final ASN1ObjectIdentifier ellipticCurve = ansi_X9_62.branch("3"); + + // + // Two Curves + // + static final ASN1ObjectIdentifier cTwoCurve = ellipticCurve.branch("0"); + + static final ASN1ObjectIdentifier c2pnb163v1 = cTwoCurve.branch("1"); + static final ASN1ObjectIdentifier c2pnb163v2 = cTwoCurve.branch("2"); + static final ASN1ObjectIdentifier c2pnb163v3 = cTwoCurve.branch("3"); + static final ASN1ObjectIdentifier c2pnb176w1 = cTwoCurve.branch("4"); + static final ASN1ObjectIdentifier c2tnb191v1 = cTwoCurve.branch("5"); + static final ASN1ObjectIdentifier c2tnb191v2 = cTwoCurve.branch("6"); + static final ASN1ObjectIdentifier c2tnb191v3 = cTwoCurve.branch("7"); + static final ASN1ObjectIdentifier c2onb191v4 = cTwoCurve.branch("8"); + static final ASN1ObjectIdentifier c2onb191v5 = cTwoCurve.branch("9"); + static final ASN1ObjectIdentifier c2pnb208w1 = cTwoCurve.branch("10"); + static final ASN1ObjectIdentifier c2tnb239v1 = cTwoCurve.branch("11"); + static final ASN1ObjectIdentifier c2tnb239v2 = cTwoCurve.branch("12"); + static final ASN1ObjectIdentifier c2tnb239v3 = cTwoCurve.branch("13"); + static final ASN1ObjectIdentifier c2onb239v4 = cTwoCurve.branch("14"); + static final ASN1ObjectIdentifier c2onb239v5 = cTwoCurve.branch("15"); + static final ASN1ObjectIdentifier c2pnb272w1 = cTwoCurve.branch("16"); + static final ASN1ObjectIdentifier c2pnb304w1 = cTwoCurve.branch("17"); + static final ASN1ObjectIdentifier c2tnb359v1 = cTwoCurve.branch("18"); + static final ASN1ObjectIdentifier c2pnb368w1 = cTwoCurve.branch("19"); + static final ASN1ObjectIdentifier c2tnb431r1 = cTwoCurve.branch("20"); + + // + // Prime + // + static final ASN1ObjectIdentifier primeCurve = ellipticCurve.branch("1"); + + static final ASN1ObjectIdentifier prime192v1 = primeCurve.branch("1"); + static final ASN1ObjectIdentifier prime192v2 = primeCurve.branch("2"); + static final ASN1ObjectIdentifier prime192v3 = primeCurve.branch("3"); + static final ASN1ObjectIdentifier prime239v1 = primeCurve.branch("4"); + static final ASN1ObjectIdentifier prime239v2 = primeCurve.branch("5"); + static final ASN1ObjectIdentifier prime239v3 = primeCurve.branch("6"); + static final ASN1ObjectIdentifier prime256v1 = primeCurve.branch("7"); + + // + // DSA + // + // dsapublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) + // us(840) ansi-x957(10040) number-type(4) 1 } + static final ASN1ObjectIdentifier id_dsa = new ASN1ObjectIdentifier("1.2.840.10040.4.1"); + + /** + * id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57 + * (10040) x9cm(4) 3 } + */ + public static final ASN1ObjectIdentifier id_dsa_with_sha1 = new ASN1ObjectIdentifier("1.2.840.10040.4.3"); + + /** + * X9.63 + */ + public static final ASN1ObjectIdentifier x9_63_scheme = new ASN1ObjectIdentifier("1.3.133.16.840.63.0"); + public static final ASN1ObjectIdentifier dhSinglePass_stdDH_sha1kdf_scheme = x9_63_scheme.branch("2"); + public static final ASN1ObjectIdentifier dhSinglePass_cofactorDH_sha1kdf_scheme = x9_63_scheme.branch("3"); + public static final ASN1ObjectIdentifier mqvSinglePass_sha1kdf_scheme = x9_63_scheme.branch("16"); + + /** + * X9.42 + */ + + static final ASN1ObjectIdentifier ansi_X9_42 = new ASN1ObjectIdentifier("1.2.840.10046"); + + // + // Diffie-Hellman + // + // dhpublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) + // us(840) ansi-x942(10046) number-type(2) 1 } + // + public static final ASN1ObjectIdentifier dhpublicnumber = ansi_X9_42.branch("2.1"); + + public static final ASN1ObjectIdentifier x9_42_schemes = ansi_X9_42.branch("3"); + public static final ASN1ObjectIdentifier dhStatic = x9_42_schemes.branch("1"); + public static final ASN1ObjectIdentifier dhEphem = x9_42_schemes.branch("2"); + public static final ASN1ObjectIdentifier dhOneFlow = x9_42_schemes.branch("3"); + public static final ASN1ObjectIdentifier dhHybrid1 = x9_42_schemes.branch("4"); + public static final ASN1ObjectIdentifier dhHybrid2 = x9_42_schemes.branch("5"); + public static final ASN1ObjectIdentifier dhHybridOneFlow = x9_42_schemes.branch("6"); + public static final ASN1ObjectIdentifier mqv2 = x9_42_schemes.branch("7"); + public static final ASN1ObjectIdentifier mqv1 = x9_42_schemes.branch("8"); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/AsymmetricBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/AsymmetricBlockCipher.java new file mode 100644 index 0000000..565effc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/AsymmetricBlockCipher.java @@ -0,0 +1,45 @@ +package org.bouncycastle.crypto; + + +/** + * base interface that a public/private key block cipher needs + * to conform to. + */ +public interface AsymmetricBlockCipher +{ + /** + * initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param param the key and other data required by the cipher. + */ + public void init(boolean forEncryption, CipherParameters param); + + /** + * returns the largest size an input block can be. + * + * @return maximum size for an input block. + */ + public int getInputBlockSize(); + + /** + * returns the maximum size of the block produced by this cipher. + * + * @return maximum size of the output block produced by the cipher. + */ + public int getOutputBlockSize(); + + /** + * process the block of len bytes stored in in from offset inOff. + * + * @param in the input data + * @param inOff offset into the in array where the data starts + * @param len the length of the block to be processed. + * @return the resulting byte array of the encryption/decryption process. + * @exception InvalidCipherTextException data decrypts improperly. + * @exception DataLengthException the input data is too large for the cipher. + */ + public byte[] processBlock(byte[] in, int inOff, int len) + throws InvalidCipherTextException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java b/common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java new file mode 100644 index 0000000..85bec73 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPair.java @@ -0,0 +1,44 @@ +package org.bouncycastle.crypto; + +/** + * a holding class for public/private parameter pairs. + */ +public class AsymmetricCipherKeyPair +{ + private CipherParameters publicParam; + private CipherParameters privateParam; + + /** + * basic constructor. + * + * @param publicParam a public key parameters object. + * @param privateParam the corresponding private key parameters. + */ + public AsymmetricCipherKeyPair( + CipherParameters publicParam, + CipherParameters privateParam) + { + this.publicParam = publicParam; + this.privateParam = privateParam; + } + + /** + * return the public key parameters. + * + * @return the public key parameters. + */ + public CipherParameters getPublic() + { + return publicParam; + } + + /** + * return the private key parameters. + * + * @return the private key parameters. + */ + public CipherParameters getPrivate() + { + return privateParam; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java new file mode 100644 index 0000000..919db19 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/AsymmetricCipherKeyPairGenerator.java @@ -0,0 +1,22 @@ +package org.bouncycastle.crypto; + +/** + * interface that a public/private key pair generator should conform to. + */ +public interface AsymmetricCipherKeyPairGenerator +{ + /** + * intialise the key pair generator. + * + * @param param the parameters the key pair is to be initialised with. + */ + public void init(KeyGenerationParameters param); + + /** + * return an AsymmetricCipherKeyPair containing the generated keys. + * + * @return an AsymmetricCipherKeyPair containing the generated keys. + */ + public AsymmetricCipherKeyPair generateKeyPair(); +} + diff --git a/common/src/main/java/org/bouncycastle/crypto/BasicAgreement.java b/common/src/main/java/org/bouncycastle/crypto/BasicAgreement.java new file mode 100644 index 0000000..8a98855 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/BasicAgreement.java @@ -0,0 +1,21 @@ +package org.bouncycastle.crypto; + +import javabc.BigInteger; + +/** + * The basic interface that basic Diffie-Hellman implementations + * conforms to. + */ +public interface BasicAgreement +{ + /** + * initialise the agreement engine. + */ + public void init(CipherParameters param); + + /** + * given a public key from a given party calculate the next + * message in the agreement sequence. + */ + public BigInteger calculateAgreement(CipherParameters pubKey); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/BlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/BlockCipher.java new file mode 100644 index 0000000..3cfa25a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/BlockCipher.java @@ -0,0 +1,56 @@ +package org.bouncycastle.crypto; + + +/** + * Block cipher engines are expected to conform to this interface. + */ +public interface BlockCipher +{ + /** + * Initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException; + + /** + * Return the name of the algorithm the cipher implements. + * + * @return the name of the algorithm the cipher implements. + */ + public String getAlgorithmName(); + + /** + * Return the block size for this cipher (in bytes). + * + * @return the block size for this cipher in bytes. + */ + public int getBlockSize(); + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock(byte[] in, int inOff, byte[] out, int outOff) + throws DataLengthException, IllegalStateException; + + /** + * Reset the cipher. After resetting the cipher is in the same state + * as it was after the last init (if there was one). + */ + public void reset(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java new file mode 100644 index 0000000..1bf7ce3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/BufferedAsymmetricBlockCipher.java @@ -0,0 +1,171 @@ +package org.bouncycastle.crypto; + +/** + * a buffer wrapper for an asymmetric block cipher, allowing input + * to be accumulated in a piecemeal fashion until final processing. + */ +public class BufferedAsymmetricBlockCipher +{ + protected byte[] buf; + protected int bufOff; + + private final AsymmetricBlockCipher cipher; + + /** + * base constructor. + * + * @param cipher the cipher this buffering object wraps. + */ + public BufferedAsymmetricBlockCipher( + AsymmetricBlockCipher cipher) + { + this.cipher = cipher; + } + + /** + * return the underlying cipher for the buffer. + * + * @return the underlying cipher for the buffer. + */ + public AsymmetricBlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * return the amount of data sitting in the buffer. + * + * @return the amount of data sitting in the buffer. + */ + public int getBufferPosition() + { + return bufOff; + } + + /** + * initialise the buffer and the underlying cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + */ + public void init( + boolean forEncryption, + CipherParameters params) + { + reset(); + + cipher.init(forEncryption, params); + + // + // we allow for an extra byte where people are using their own padding + // mechanisms on a raw cipher. + // + buf = new byte[cipher.getInputBlockSize() + (forEncryption ? 1 : 0)]; + bufOff = 0; + } + + /** + * returns the largest size an input block can be. + * + * @return maximum size for an input block. + */ + public int getInputBlockSize() + { + return cipher.getInputBlockSize(); + } + + /** + * returns the maximum size of the block produced by this cipher. + * + * @return maximum size of the output block produced by the cipher. + */ + public int getOutputBlockSize() + { + return cipher.getOutputBlockSize(); + } + + /** + * add another byte for processing. + * + * @param in the input byte. + */ + public void processByte( + byte in) + { + if (bufOff >= buf.length) + { + throw new DataLengthException("attempt to process message too long for cipher"); + } + + buf[bufOff++] = in; + } + + /** + * add len bytes to the buffer for processing. + * + * @param in the input data + * @param inOff offset into the in array where the data starts + * @param len the length of the block to be processed. + */ + public void processBytes( + byte[] in, + int inOff, + int len) + { + if (len == 0) + { + return; + } + + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + if (bufOff + len > buf.length) + { + throw new DataLengthException("attempt to process message too long for cipher"); + } + + System.arraycopy(in, inOff, buf, bufOff, len); + bufOff += len; + } + + /** + * process the contents of the buffer using the underlying + * cipher. + * + * @return the result of the encryption/decryption process on the + * buffer. + * @exception InvalidCipherTextException if we are given a garbage block. + */ + public byte[] doFinal() + throws InvalidCipherTextException + { + byte[] out = cipher.processBlock(buf, 0, bufOff); + + reset(); + + return out; + } + + /** + * Reset the buffer and the underlying cipher. + */ + public void reset() + { + /* + * clean the buffer. + */ + if (buf != null) + { + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + } + + bufOff = 0; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/BufferedBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/BufferedBlockCipher.java new file mode 100644 index 0000000..4878786 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/BufferedBlockCipher.java @@ -0,0 +1,313 @@ +package org.bouncycastle.crypto; + + +/** + * A wrapper class that allows block ciphers to be used to process data in + * a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + * buffer is full and more data is being added, or on a doFinal. + *

        + * Note: in the case where the underlying cipher is either a CFB cipher or an + * OFB one the last block may not be a multiple of the block size. + */ +public class BufferedBlockCipher +{ + protected byte[] buf; + protected int bufOff; + + protected boolean forEncryption; + protected BlockCipher cipher; + + protected boolean partialBlockOkay; + protected boolean pgpCFB; + + /** + * constructor for subclasses + */ + protected BufferedBlockCipher() + { + } + + /** + * Create a buffered block cipher without padding. + * + * @param cipher the underlying block cipher this buffering object wraps. + */ + public BufferedBlockCipher( + BlockCipher cipher) + { + this.cipher = cipher; + + buf = new byte[cipher.getBlockSize()]; + bufOff = 0; + + // + // check if we can handle partial blocks on doFinal. + // + String name = cipher.getAlgorithmName(); + int idx = name.indexOf('/') + 1; + + pgpCFB = (idx > 0 && name.startsWith("PGP", idx)); + + if (pgpCFB) + { + partialBlockOkay = true; + } + else + { + partialBlockOkay = (idx > 0 && (name.startsWith("CFB", idx) || name.startsWith("OFB", idx) || name.startsWith("OpenPGP", idx) || name.startsWith("SIC", idx) || name.startsWith("GCTR", idx))); + } + } + + /** + * return the cipher this object wraps. + * + * @return the cipher this object wraps. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + throws IllegalArgumentException + { + this.forEncryption = forEncryption; + + reset(); + + cipher.init(forEncryption, params); + } + + /** + * return the blocksize for the underlying cipher. + * + * @return the blocksize for the underlying cipher. + */ + public int getBlockSize() + { + return cipher.getBlockSize(); + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public int getUpdateOutputSize( + int len) + { + int total = len + bufOff; + int leftOver; + + if (pgpCFB) + { + leftOver = total % buf.length - (cipher.getBlockSize() + 2); + } + else + { + leftOver = total % buf.length; + } + + return total - leftOver; + } + + /** + * return the size of the output buffer required for an update plus a + * doFinal with an input of 'length' bytes. + * + * @param length the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with 'length' bytes of input. + */ + public int getOutputSize( + int length) + { + // Note: Can assume partialBlockOkay is true for purposes of this calculation + return length + bufOff; + } + + /** + * process a single byte, producing an output block if neccessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processByte( + byte in, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + int resultLen = 0; + + buf[bufOff++] = in; + + if (bufOff == buf.length) + { + resultLen = cipher.processBlock(buf, 0, out, outOff); + bufOff = 0; + } + + return resultLen; + } + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = getBlockSize(); + int length = getUpdateOutputSize(len); + + if (length > 0) + { + if ((outOff + length) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + } + + int resultLen = 0; + int gapLen = buf.length - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += cipher.processBlock(buf, 0, out, outOff); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > buf.length) + { + resultLen += cipher.processBlock(in, inOff, out, outOff + resultLen); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + + if (bufOff == buf.length) + { + resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); + bufOff = 0; + } + + return resultLen; + } + + /** + * Process the last block in the buffer. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output, or the input is not block size aligned and should be. + * @exception IllegalStateException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if padding is expected and not found. + * @exception DataLengthException if the input is not block size + * aligned. + */ + public int doFinal( + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException, InvalidCipherTextException + { + try + { + int resultLen = 0; + + if (outOff + bufOff > out.length) + { + throw new DataLengthException("output buffer too short for doFinal()"); + } + + if (bufOff != 0) + { + if (!partialBlockOkay) + { + throw new DataLengthException("data not block size aligned"); + } + + cipher.processBlock(buf, 0, buf, 0); + resultLen = bufOff; + bufOff = 0; + System.arraycopy(buf, 0, out, outOff, resultLen); + } + + return resultLen; + } + finally + { + reset(); + } + } + + /** + * Reset the buffer and cipher. After resetting the object is in the same + * state as it was after the last init (if there was one). + */ + public void reset() + { + // + // clean the buffer. + // + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + + bufOff = 0; + + // + // reset the underlying cipher. + // + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/CipherKeyGenerator.java b/common/src/main/java/org/bouncycastle/crypto/CipherKeyGenerator.java new file mode 100644 index 0000000..1742d6d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/CipherKeyGenerator.java @@ -0,0 +1,38 @@ +package org.bouncycastle.crypto; + +import javabc.SecureRandom; + +/** + * The base class for symmetric, or secret, cipher key generators. + */ +public class CipherKeyGenerator +{ + protected SecureRandom random; + protected int strength; + + /** + * initialise the key generator. + * + * @param param the parameters to be used for key generation + */ + public void init( + KeyGenerationParameters param) + { + this.random = param.getRandom(); + this.strength = (param.getStrength() + 7) / 8; + } + + /** + * generate a secret key. + * + * @return a byte array containing the key value. + */ + public byte[] generateKey() + { + byte[] key = new byte[strength]; + + random.nextBytes(key); + + return key; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/CipherParameters.java b/common/src/main/java/org/bouncycastle/crypto/CipherParameters.java new file mode 100644 index 0000000..5be8730 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/CipherParameters.java @@ -0,0 +1,8 @@ +package org.bouncycastle.crypto; + +/** + * all parameter classes implement this. + */ +public interface CipherParameters +{ +} diff --git a/common/src/main/java/org/bouncycastle/crypto/CryptoException.java b/common/src/main/java/org/bouncycastle/crypto/CryptoException.java new file mode 100644 index 0000000..352c556 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/CryptoException.java @@ -0,0 +1,48 @@ +package org.bouncycastle.crypto; + +/** + * the foundation class for the hard exceptions thrown by the crypto packages. + */ +public class CryptoException + extends Exception +{ + private Throwable cause; + + /** + * base constructor. + */ + public CryptoException() + { + } + + /** + * create a CryptoException with the given message. + * + * @param message the message to be carried with the exception. + */ + public CryptoException( + String message) + { + super(message); + } + + /** + * Create a CryptoException with the given message and underlying cause. + * + * @param message message describing exception. + * @param cause the throwable that was the underlying cause. + */ + public CryptoException( + String message, + Throwable cause) + { + super(message); + + this.cause = cause; + } + + public Throwable getCause() + { + return cause; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/DSA.java b/common/src/main/java/org/bouncycastle/crypto/DSA.java new file mode 100644 index 0000000..4f8ce2a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/DSA.java @@ -0,0 +1,36 @@ +package org.bouncycastle.crypto; + +import javabc.BigInteger; + +/** + * interface for classes implementing algorithms modeled similar to the Digital Signature Alorithm. + */ +public interface DSA +{ + /** + * initialise the signer for signature generation or signature + * verification. + * + * @param forSigning true if we are generating a signature, false + * otherwise. + * @param param key parameters for signature generation. + */ + public void init(boolean forSigning, CipherParameters param); + + /** + * sign the passed in message (usually the output of a hash function). + * + * @param message the message to be signed. + * @return two big integers representing the r and s values respectively. + */ + public BigInteger[] generateSignature(byte[] message); + + /** + * verify the message message against the signature values r and s. + * + * @param message the message that was supposed to have been signed. + * @param r the r signature value. + * @param s the s signature value. + */ + public boolean verifySignature(byte[] message, BigInteger r, BigInteger s); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/DataLengthException.java b/common/src/main/java/org/bouncycastle/crypto/DataLengthException.java new file mode 100644 index 0000000..fbf047c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/DataLengthException.java @@ -0,0 +1,29 @@ +package org.bouncycastle.crypto; + +/** + * this exception is thrown if a buffer that is meant to have output + * copied into it turns out to be too short, or if we've been given + * insufficient input. In general this exception will get thrown rather + * than an ArrayOutOfBounds exception. + */ +public class DataLengthException + extends RuntimeCryptoException +{ + /** + * base constructor. + */ + public DataLengthException() + { + } + + /** + * create a DataLengthException with the given message. + * + * @param message the message to be carried with the exception. + */ + public DataLengthException( + String message) + { + super(message); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/DerivationFunction.java b/common/src/main/java/org/bouncycastle/crypto/DerivationFunction.java new file mode 100644 index 0000000..ef6e29e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/DerivationFunction.java @@ -0,0 +1,17 @@ +package org.bouncycastle.crypto; + +/** + * base interface for general purpose byte derivation functions. + */ +public interface DerivationFunction +{ + public void init(DerivationParameters param); + + /** + * return the message digest used as the basis for the function + */ + public Digest getDigest(); + + public int generateBytes(byte[] out, int outOff, int len) + throws DataLengthException, IllegalArgumentException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/DerivationParameters.java b/common/src/main/java/org/bouncycastle/crypto/DerivationParameters.java new file mode 100644 index 0000000..e11eb86 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/DerivationParameters.java @@ -0,0 +1,8 @@ +package org.bouncycastle.crypto; + +/** + * Parameters for key/byte stream derivation classes + */ +public interface DerivationParameters +{ +} diff --git a/common/src/main/java/org/bouncycastle/crypto/Digest.java b/common/src/main/java/org/bouncycastle/crypto/Digest.java new file mode 100644 index 0000000..f44fad0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/Digest.java @@ -0,0 +1,51 @@ +package org.bouncycastle.crypto; + +/** + * interface that a message digest conforms to. + */ +public interface Digest +{ + /** + * return the algorithm name + * + * @return the algorithm name + */ + public String getAlgorithmName(); + + /** + * return the size, in bytes, of the digest produced by this message digest. + * + * @return the size, in bytes, of the digest produced by this message digest. + */ + public int getDigestSize(); + + /** + * update the message digest with a single byte. + * + * @param in the input byte to be entered. + */ + public void update(byte in); + + /** + * update the message digest with a block of bytes. + * + * @param in the byte array containing the data. + * @param inOff the offset into the byte array where the data starts. + * @param len the length of the data. + */ + public void update(byte[] in, int inOff, int len); + + /** + * close the digest, producing the final digest value. The doFinal + * call leaves the digest reset. + * + * @param out the array the digest is to be copied into. + * @param outOff the offset into the out array the digest is to start at. + */ + public int doFinal(byte[] out, int outOff); + + /** + * reset the digest back to it's initial state. + */ + public void reset(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/ExtendedDigest.java b/common/src/main/java/org/bouncycastle/crypto/ExtendedDigest.java new file mode 100644 index 0000000..c5e9e8b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/ExtendedDigest.java @@ -0,0 +1,13 @@ +package org.bouncycastle.crypto; + +public interface ExtendedDigest + extends Digest +{ + /** + * Return the size in bytes of the internal buffer the digest applies it's compression + * function to. + * + * @return byte length of the digests internal buffer. + */ + public int getByteLength(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/InvalidCipherTextException.java b/common/src/main/java/org/bouncycastle/crypto/InvalidCipherTextException.java new file mode 100644 index 0000000..59e4b26 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/InvalidCipherTextException.java @@ -0,0 +1,27 @@ +package org.bouncycastle.crypto; + +/** + * this exception is thrown whenever we find something we don't expect in a + * message. + */ +public class InvalidCipherTextException + extends CryptoException +{ + /** + * base constructor. + */ + public InvalidCipherTextException() + { + } + + /** + * create a InvalidCipherTextException with the given message. + * + * @param message the message to be carried with the exception. + */ + public InvalidCipherTextException( + String message) + { + super(message); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/KeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/KeyGenerationParameters.java new file mode 100644 index 0000000..ecd8672 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/KeyGenerationParameters.java @@ -0,0 +1,48 @@ +package org.bouncycastle.crypto; + +import javabc.SecureRandom; + +/** + * The base class for parameters to key generators. + */ +public class KeyGenerationParameters +{ + private SecureRandom random; + private int strength; + + /** + * initialise the generator with a source of randomness + * and a strength (in bits). + * + * @param random the random byte source. + * @param strength the size, in bits, of the keys we want to produce. + */ + public KeyGenerationParameters( + SecureRandom random, + int strength) + { + this.random = random; + this.strength = strength; + } + + /** + * return the random source associated with this + * generator. + * + * @return the generators random source. + */ + public SecureRandom getRandom() + { + return random; + } + + /** + * return the bit strength for keys produced by this generator, + * + * @return the strength of the keys this generator produces (in bits). + */ + public int getStrength() + { + return strength; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/Mac.java b/common/src/main/java/org/bouncycastle/crypto/Mac.java new file mode 100644 index 0000000..c00cd58 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/Mac.java @@ -0,0 +1,71 @@ +package org.bouncycastle.crypto; + + +/** + * The base interface for implementations of message authentication codes (MACs). + */ +public interface Mac +{ + /** + * Initialise the MAC. + * + * @param params the key and other data required by the MAC. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init(CipherParameters params) + throws IllegalArgumentException; + + /** + * Return the name of the algorithm the MAC implements. + * + * @return the name of the algorithm the MAC implements. + */ + public String getAlgorithmName(); + + /** + * Return the block size for this MAC (in bytes). + * + * @return the block size for this MAC in bytes. + */ + public int getMacSize(); + + /** + * add a single byte to the mac for processing. + * + * @param in the byte to be processed. + * @exception IllegalStateException if the MAC is not initialised. + */ + public void update(byte in) + throws IllegalStateException; + + /** + * @param in the array containing the input. + * @param inOff the index in the array the data begins at. + * @param len the length of the input starting at inOff. + * @exception IllegalStateException if the MAC is not initialised. + * @exception DataLengthException if there isn't enough data in in. + */ + public void update(byte[] in, int inOff, int len) + throws DataLengthException, IllegalStateException; + + /** + * Compute the final stage of the MAC writing the output to the out + * parameter. + *

        + * doFinal leaves the MAC in the same state it was after the last init. + * + * @param out the array the MAC is to be output to. + * @param outOff the offset into the out buffer the output is to start at. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the MAC is not initialised. + */ + public int doFinal(byte[] out, int outOff) + throws DataLengthException, IllegalStateException; + + /** + * Reset the MAC. At the end of resetting the MAC should be in the + * in the same state it was after the last init (if there was one). + */ + public void reset(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/MaxBytesExceededException.java b/common/src/main/java/org/bouncycastle/crypto/MaxBytesExceededException.java new file mode 100644 index 0000000..bfa1544 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/MaxBytesExceededException.java @@ -0,0 +1,27 @@ +package org.bouncycastle.crypto; + +/** + * this exception is thrown whenever a cipher requires a change of key, iv + * or similar after x amount of bytes enciphered + */ +public class MaxBytesExceededException + extends RuntimeCryptoException +{ + /** + * base constructor. + */ + public MaxBytesExceededException() + { + } + + /** + * create an with the given message. + * + * @param message the message to be carried with the exception. + */ + public MaxBytesExceededException( + String message) + { + super(message); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/PBEParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/PBEParametersGenerator.java new file mode 100644 index 0000000..59765ce --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/PBEParametersGenerator.java @@ -0,0 +1,157 @@ +package org.bouncycastle.crypto; + +import org.bouncycastle.util.Strings; + +/** + * super class for all Password Based Encryption (PBE) parameter generator classes. + */ +public abstract class PBEParametersGenerator +{ + protected byte[] password; + protected byte[] salt; + protected int iterationCount; + + /** + * base constructor. + */ + protected PBEParametersGenerator() + { + } + + /** + * initialise the PBE generator. + * + * @param password the password converted into bytes (see below). + * @param salt the salt to be mixed with the password. + * @param iterationCount the number of iterations the "mixing" function + * is to be applied for. + */ + public void init( + byte[] password, + byte[] salt, + int iterationCount) + { + this.password = password; + this.salt = salt; + this.iterationCount = iterationCount; + } + + /** + * return the password byte array. + * + * @return the password byte array. + */ + public byte[] getPassword() + { + return password; + } + + /** + * return the salt byte array. + * + * @return the salt byte array. + */ + public byte[] getSalt() + { + return salt; + } + + /** + * return the iteration count. + * + * @return the iteration count. + */ + public int getIterationCount() + { + return iterationCount; + } + + /** + * generate derived parameters for a key of length keySize. + * + * @param keySize the length, in bits, of the key required. + * @return a parameters object representing a key. + */ + public abstract CipherParameters generateDerivedParameters(int keySize); + + /** + * generate derived parameters for a key of length keySize, and + * an initialisation vector (IV) of length ivSize. + * + * @param keySize the length, in bits, of the key required. + * @param ivSize the length, in bits, of the iv required. + * @return a parameters object representing a key and an IV. + */ + public abstract CipherParameters generateDerivedParameters(int keySize, int ivSize); + + /** + * generate derived parameters for a key of length keySize, specifically + * for use with a MAC. + * + * @param keySize the length, in bits, of the key required. + * @return a parameters object representing a key. + */ + public abstract CipherParameters generateDerivedMacParameters(int keySize); + + /** + * converts a password to a byte array according to the scheme in + * PKCS5 (ascii, no padding) + * + * @param password a character array representing the password. + * @return a byte array representing the password. + */ + public static byte[] PKCS5PasswordToBytes( + char[] password) + { + byte[] bytes = new byte[password.length]; + + for (int i = 0; i != bytes.length; i++) + { + bytes[i] = (byte)password[i]; + } + + return bytes; + } + + /** + * converts a password to a byte array according to the scheme in + * PKCS5 (UTF-8, no padding) + * + * @param password a character array representing the password. + * @return a byte array representing the password. + */ + public static byte[] PKCS5PasswordToUTF8Bytes( + char[] password) + { + return Strings.toUTF8ByteArray(password); + } + + /** + * converts a password to a byte array according to the scheme in + * PKCS12 (unicode, big endian, 2 zero pad bytes at the end). + * + * @param password a character array representing the password. + * @return a byte array representing the password. + */ + public static byte[] PKCS12PasswordToBytes( + char[] password) + { + if (password.length > 0) + { + // +1 for extra 2 pad bytes. + byte[] bytes = new byte[(password.length + 1) * 2]; + + for (int i = 0; i != password.length; i ++) + { + bytes[i * 2] = (byte)(password[i] >>> 8); + bytes[i * 2 + 1] = (byte)password[i]; + } + + return bytes; + } + else + { + return new byte[0]; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/RuntimeCryptoException.java b/common/src/main/java/org/bouncycastle/crypto/RuntimeCryptoException.java new file mode 100644 index 0000000..c157202 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/RuntimeCryptoException.java @@ -0,0 +1,26 @@ +package org.bouncycastle.crypto; + +/** + * the foundation class for the exceptions thrown by the crypto packages. + */ +public class RuntimeCryptoException + extends RuntimeException +{ + /** + * base constructor. + */ + public RuntimeCryptoException() + { + } + + /** + * create a RuntimeCryptoException with the given message. + * + * @param message the message to be carried with the exception. + */ + public RuntimeCryptoException( + String message) + { + super(message); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/Signer.java b/common/src/main/java/org/bouncycastle/crypto/Signer.java new file mode 100644 index 0000000..357b0da --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/Signer.java @@ -0,0 +1,43 @@ +package org.bouncycastle.crypto; + +/** + * Generic signer interface for hash based and message recovery signers. + */ +public interface Signer +{ + /** + * Initialise the signer for signing or verification. + * + * @param forSigning true if for signing, false otherwise + * @param param necessary parameters. + */ + public void init(boolean forSigning, CipherParameters param); + + /** + * update the internal digest with the byte b + */ + public void update(byte b); + + /** + * update the internal digest with the byte array in + */ + public void update(byte[] in, int off, int len); + + /** + * generate a signature for the message we've been loaded with using + * the key we were initialised with. + */ + public byte[] generateSignature() + throws CryptoException, DataLengthException; + + /** + * return true if the internal state represents the signature described + * in the passed in array. + */ + public boolean verifySignature(byte[] signature); + + /** + * reset the internal state + */ + public void reset(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/SignerWithRecovery.java b/common/src/main/java/org/bouncycastle/crypto/SignerWithRecovery.java new file mode 100644 index 0000000..452b367 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/SignerWithRecovery.java @@ -0,0 +1,34 @@ +package org.bouncycastle.crypto; + +/** + * Signer with message recovery. + */ +public interface SignerWithRecovery + extends Signer +{ + /** + * Returns true if the signer has recovered the full message as + * part of signature verification. + * + * @return true if full message recovered. + */ + public boolean hasFullMessage(); + + /** + * Returns a reference to what message was recovered (if any). + * + * @return full/partial message, null if nothing. + */ + public byte[] getRecoveredMessage(); + + /** + * Perform an update with the recovered message before adding any other data. This must + * be the first update method called, and calling it will result in the signer assuming + * that further calls to update will include message content past what is recoverable. + * + * @param signature the signature that we are in the process of verifying. + * @throws IllegalStateException + */ + public void updateWithRecoveredMessage(byte[] signature) + throws InvalidCipherTextException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/StreamBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/StreamBlockCipher.java new file mode 100644 index 0000000..8fdd232 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/StreamBlockCipher.java @@ -0,0 +1,108 @@ +package org.bouncycastle.crypto; + +/** + * a wrapper for block ciphers with a single byte block size, so that they + * can be treated like stream ciphers. + */ +public class StreamBlockCipher + implements StreamCipher +{ + private BlockCipher cipher; + + private byte[] oneByte = new byte[1]; + + /** + * basic constructor. + * + * @param cipher the block cipher to be wrapped. + * @exception IllegalArgumentException if the cipher has a block size other than + * one. + */ + public StreamBlockCipher( + BlockCipher cipher) + { + if (cipher.getBlockSize() != 1) + { + throw new IllegalArgumentException("block cipher block size != 1."); + } + + this.cipher = cipher; + } + + /** + * initialise the underlying cipher. + * + * @param forEncryption true if we are setting up for encryption, false otherwise. + * @param params the necessary parameters for the underlying cipher to be initialised. + */ + public void init( + boolean forEncryption, + CipherParameters params) + { + cipher.init(forEncryption, params); + } + + /** + * return the name of the algorithm we are wrapping. + * + * @return the name of the algorithm we are wrapping. + */ + public String getAlgorithmName() + { + return cipher.getAlgorithmName(); + } + + /** + * encrypt/decrypt a single byte returning the result. + * + * @param in the byte to be processed. + * @return the result of processing the input byte. + */ + public byte returnByte( + byte in) + { + oneByte[0] = in; + + cipher.processBlock(oneByte, 0, oneByte, 0); + + return oneByte[0]; + } + + /** + * process a block of bytes from in putting the result into out. + * + * @param in the input byte array. + * @param inOff the offset into the in array where the data to be processed starts. + * @param len the number of bytes to be processed. + * @param out the output buffer the processed bytes go into. + * @param outOff the offset into the output byte array the processed data stars at. + * @exception DataLengthException if the output buffer is too small. + */ + public void processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + throws DataLengthException + { + if (outOff + len > out.length) + { + throw new DataLengthException("output buffer too small in processBytes()"); + } + + for (int i = 0; i != len; i++) + { + cipher.processBlock(in, inOff + i, out, outOff + i); + } + } + + /** + * reset the underlying cipher. This leaves it in the same state + * it was at after the last init (if there was one). + */ + public void reset() + { + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/StreamCipher.java b/common/src/main/java/org/bouncycastle/crypto/StreamCipher.java new file mode 100644 index 0000000..2a55d4f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/StreamCipher.java @@ -0,0 +1,53 @@ +package org.bouncycastle.crypto; + +/** + * the interface stream ciphers conform to. + */ +public interface StreamCipher +{ + /** + * Initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException; + + /** + * Return the name of the algorithm the cipher implements. + * + * @return the name of the algorithm the cipher implements. + */ + public String getAlgorithmName(); + + /** + * encrypt/decrypt a single byte returning the result. + * + * @param in the byte to be processed. + * @return the result of processing the input byte. + */ + public byte returnByte(byte in); + + /** + * process a block of bytes from in putting the result into out. + * + * @param in the input byte array. + * @param inOff the offset into the in array where the data to be processed starts. + * @param len the number of bytes to be processed. + * @param out the output buffer the processed bytes go into. + * @param outOff the offset into the output byte array the processed data starts at. + * @exception DataLengthException if the output buffer is too small. + */ + public void processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) + throws DataLengthException; + + /** + * reset the cipher. This leaves it in the same state + * it was at after the last init (if there was one). + */ + public void reset(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/Wrapper.java b/common/src/main/java/org/bouncycastle/crypto/Wrapper.java new file mode 100644 index 0000000..3956a6f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/Wrapper.java @@ -0,0 +1,18 @@ +package org.bouncycastle.crypto; + +public interface Wrapper +{ + public void init(boolean forWrapping, CipherParameters param); + + /** + * Return the name of the algorithm the wrapper implements. + * + * @return the name of the algorithm the wrapper implements. + */ + public String getAlgorithmName(); + + public byte[] wrap(byte[] in, int inOff, int inLen); + + public byte[] unwrap(byte[] in, int inOff, int inLen) + throws InvalidCipherTextException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/DHAgreement.java b/common/src/main/java/org/bouncycastle/crypto/agreement/DHAgreement.java new file mode 100644 index 0000000..bcf8929 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/DHAgreement.java @@ -0,0 +1,94 @@ +package org.bouncycastle.crypto.agreement; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.generators.DHKeyPairGenerator; +import org.bouncycastle.crypto.params.DHKeyGenerationParameters; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +/** + * a Diffie-Hellman key exchange engine. + *

        + * note: This uses MTI/A0 key agreement in order to make the key agreement + * secure against passive attacks. If you're doing Diffie-Hellman and both + * parties have long term public keys you should look at using this. For + * further information have a look at RFC 2631. + *

        + * It's possible to extend this to more than two parties as well, for the moment + * that is left as an exercise for the reader. + */ +public class DHAgreement +{ + private DHPrivateKeyParameters key; + private DHParameters dhParams; + private BigInteger privateValue; + private SecureRandom random; + + public void init( + CipherParameters param) + { + AsymmetricKeyParameter kParam; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + kParam = (AsymmetricKeyParameter)rParam.getParameters(); + } + else + { + this.random = new SecureRandom(); + kParam = (AsymmetricKeyParameter)param; + } + + + if (!(kParam instanceof DHPrivateKeyParameters)) + { + throw new IllegalArgumentException("DHEngine expects DHPrivateKeyParameters"); + } + + this.key = (DHPrivateKeyParameters)kParam; + this.dhParams = key.getParameters(); + } + + /** + * calculate our initial message. + */ + public BigInteger calculateMessage() + { + DHKeyPairGenerator dhGen = new DHKeyPairGenerator(); + dhGen.init(new DHKeyGenerationParameters(random, dhParams)); + AsymmetricCipherKeyPair dhPair = dhGen.generateKeyPair(); + + this.privateValue = ((DHPrivateKeyParameters)dhPair.getPrivate()).getX(); + + return ((DHPublicKeyParameters)dhPair.getPublic()).getY(); + } + + /** + * given a message from a given party and the corresponding public key, + * calculate the next message in the agreement sequence. In this case + * this will represent the shared secret. + */ + public BigInteger calculateAgreement( + DHPublicKeyParameters pub, + BigInteger message) + { + if (!pub.getParameters().equals(dhParams)) + { + throw new IllegalArgumentException("Diffie-Hellman public key has wrong parameters."); + } + + BigInteger p = dhParams.getP(); + + return message.modPow(key.getX(), p).multiply(pub.getY().modPow(privateValue, p)).mod(p); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/DHBasicAgreement.java b/common/src/main/java/org/bouncycastle/crypto/agreement/DHBasicAgreement.java new file mode 100644 index 0000000..d89e37b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/DHBasicAgreement.java @@ -0,0 +1,66 @@ +package org.bouncycastle.crypto.agreement; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +/** + * a Diffie-Hellman key agreement class. + *

        + * note: This is only the basic algorithm, it doesn't take advantage of + * long term public keys if they are available. See the DHAgreement class + * for a "better" implementation. + */ +public class DHBasicAgreement + implements BasicAgreement +{ + private DHPrivateKeyParameters key; + private DHParameters dhParams; + + public void init( + CipherParameters param) + { + AsymmetricKeyParameter kParam; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + kParam = (AsymmetricKeyParameter)rParam.getParameters(); + } + else + { + kParam = (AsymmetricKeyParameter)param; + } + + if (!(kParam instanceof DHPrivateKeyParameters)) + { + throw new IllegalArgumentException("DHEngine expects DHPrivateKeyParameters"); + } + + this.key = (DHPrivateKeyParameters)kParam; + this.dhParams = key.getParameters(); + } + + /** + * given a short term public key from a given party calculate the next + * message in the agreement sequence. + */ + public BigInteger calculateAgreement( + CipherParameters pubKey) + { + DHPublicKeyParameters pub = (DHPublicKeyParameters)pubKey; + + if (!pub.getParameters().equals(dhParams)) + { + throw new IllegalArgumentException("Diffie-Hellman public key has wrong parameters."); + } + + return pub.getY().modPow(key.getX(), dhParams.getP()); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java b/common/src/main/java/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java new file mode 100644 index 0000000..3197c46 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java @@ -0,0 +1,47 @@ +package org.bouncycastle.crypto.agreement; + +import javabc.BigInteger; + +import org.bouncycastle.math.ec.ECPoint; + +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; + +/** + * P1363 7.2.1 ECSVDP-DH + * + * ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + * Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + * and [Kob87]. This primitive derives a shared secret value from one + * party's private key and another party's public key, where both have + * the same set of EC domain parameters. If two parties correctly + * execute this primitive, they will produce the same output. This + * primitive can be invoked by a scheme to derive a shared secret key; + * specifically, it may be used with the schemes ECKAS-DH1 and + * DL/ECKAS-DH2. It assumes that the input keys are valid (see also + * Section 7.2.2). + */ +public class ECDHBasicAgreement + implements BasicAgreement +{ + private ECPrivateKeyParameters key; + + public void init( + CipherParameters key) + { + this.key = (ECPrivateKeyParameters)key; + } + + public BigInteger calculateAgreement( + CipherParameters pubKey) + { + ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; + ECPoint P = pub.getQ().multiply(key.getD()); + + // if (p.isInfinity()) throw new RuntimeException("d*Q == infinity"); + + return P.getX().toBigInteger(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java b/common/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java new file mode 100644 index 0000000..18e32a4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java @@ -0,0 +1,54 @@ +package org.bouncycastle.crypto.agreement; + +import javabc.BigInteger; + +import org.bouncycastle.math.ec.ECPoint; + +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECDomainParameters; + +/** + * P1363 7.2.2 ECSVDP-DHC + * + * ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + * Diffie-Hellman version with cofactor multiplication. It is based on + * the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + * primitive derives a shared secret value from one party's private key + * and another party's public key, where both have the same set of EC + * domain parameters. If two parties correctly execute this primitive, + * they will produce the same output. This primitive can be invoked by a + * scheme to derive a shared secret key; specifically, it may be used + * with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + * validity of the input public key (see also Section 7.2.1). + *

        + * Note: As stated P1363 compatibility mode with ECDH can be preset, and + * in this case the implementation doesn't have a ECDH compatibility mode + * (if you want that just use ECDHBasicAgreement and note they both implement + * BasicAgreement!). + */ +public class ECDHCBasicAgreement + implements BasicAgreement +{ + ECPrivateKeyParameters key; + + public void init( + CipherParameters key) + { + this.key = (ECPrivateKeyParameters)key; + } + + public BigInteger calculateAgreement( + CipherParameters pubKey) + { + ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; + ECDomainParameters params = pub.getParameters(); + ECPoint P = pub.getQ().multiply(params.getH().multiply(key.getD())); + + // if (p.isInfinity()) throw new RuntimeException("Invalid public key"); + + return P.getX().toBigInteger(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java b/common/src/main/java/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java new file mode 100644 index 0000000..60d0255 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/ECMQVBasicAgreement.java @@ -0,0 +1,86 @@ +package org.bouncycastle.crypto.agreement; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.MQVPrivateParameters; +import org.bouncycastle.crypto.params.MQVPublicParameters; +import org.bouncycastle.math.ec.ECAlgorithms; +import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECPoint; + +public class ECMQVBasicAgreement + implements BasicAgreement +{ + MQVPrivateParameters privParams; + + public void init( + CipherParameters key) + { + this.privParams = (MQVPrivateParameters)key; + } + + public BigInteger calculateAgreement(CipherParameters pubKey) + { + MQVPublicParameters pubParams = (MQVPublicParameters)pubKey; + + ECPrivateKeyParameters staticPrivateKey = privParams.getStaticPrivateKey(); + + ECPoint agreement = calculateMqvAgreement(staticPrivateKey.getParameters(), staticPrivateKey, + privParams.getEphemeralPrivateKey(), privParams.getEphemeralPublicKey(), + pubParams.getStaticPublicKey(), pubParams.getEphemeralPublicKey()); + + return agreement.getX().toBigInteger(); + } + + // The ECMQV Primitive as described in SEC-1, 3.4 + private ECPoint calculateMqvAgreement( + ECDomainParameters parameters, + ECPrivateKeyParameters d1U, + ECPrivateKeyParameters d2U, + ECPublicKeyParameters Q2U, + ECPublicKeyParameters Q1V, + ECPublicKeyParameters Q2V) + { + BigInteger n = parameters.getN(); + int e = (n.bitLength() + 1) / 2; + BigInteger powE = ECConstants.ONE.shiftLeft(e); + + // The Q2U public key is optional + ECPoint q; + if (Q2U == null) + { + q = parameters.getG().multiply(d2U.getD()); + } + else + { + q = Q2U.getQ(); + } + + BigInteger x = q.getX().toBigInteger(); + BigInteger xBar = x.mod(powE); + BigInteger Q2UBar = xBar.setBit(e); + BigInteger s = d1U.getD().multiply(Q2UBar).mod(n).add(d2U.getD()).mod(n); + + BigInteger xPrime = Q2V.getQ().getX().toBigInteger(); + BigInteger xPrimeBar = xPrime.mod(powE); + BigInteger Q2VBar = xPrimeBar.setBit(e); + + BigInteger hs = parameters.getH().multiply(s).mod(n); + +// ECPoint p = Q1V.getQ().multiply(Q2VBar).add(Q2V.getQ()).multiply(hs); + ECPoint p = ECAlgorithms.sumOfTwoMultiplies( + Q1V.getQ(), Q2VBar.multiply(hs).mod(n), Q2V.getQ(), hs); + + if (p.isInfinity()) + { + throw new IllegalStateException("Infinity is not a valid agreement value for MQV"); + } + + return p; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Client.java b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Client.java new file mode 100644 index 0000000..5ea8ad5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Client.java @@ -0,0 +1,93 @@ +package org.bouncycastle.crypto.agreement.srp; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Digest; + +/** + * Implements the client side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. + * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper + * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" + */ +public class SRP6Client +{ + protected BigInteger N; + protected BigInteger g; + + protected BigInteger a; + protected BigInteger A; + + protected BigInteger B; + + protected BigInteger x; + protected BigInteger u; + protected BigInteger S; + + protected Digest digest; + protected SecureRandom random; + + public SRP6Client() + { + } + + /** + * Initialises the client to begin new authentication attempt + * @param N The safe prime associated with the client's verifier + * @param g The group parameter associated with the client's verifier + * @param digest The digest algorithm associated with the client's verifier + * @param random For key generation + */ + public void init(BigInteger N, BigInteger g, Digest digest, SecureRandom random) + { + this.N = N; + this.g = g; + this.digest = digest; + this.random = random; + } + + /** + * Generates client's credentials given the client's salt, identity and password + * @param salt The salt used in the client's verifier. + * @param identity The user's identity (eg. username) + * @param password The user's password + * @return Client's public value to send to server + */ + public BigInteger generateClientCredentials(byte[] salt, byte[] identity, byte[] password) + { + this.x = SRP6Util.calculateX(digest, N, salt, identity, password); + this.a = selectPrivateValue(); + this.A = g.modPow(a, N); + + return A; + } + + /** + * Generates client's verification message given the server's credentials + * @param serverB The server's credentials + * @return Client's verification message for the server + * @throws CryptoException If server's credentials are invalid + */ + public BigInteger calculateSecret(BigInteger serverB) throws CryptoException + { + this.B = SRP6Util.validatePublicValue(N, serverB); + this.u = SRP6Util.calculateU(digest, N, A, B); + this.S = calculateS(); + + return S; + } + + protected BigInteger selectPrivateValue() + { + return SRP6Util.generatePrivateValue(digest, N, g, random); + } + + private BigInteger calculateS() + { + BigInteger k = SRP6Util.calculateK(digest, N, g); + BigInteger exp = u.multiply(x).add(a); + BigInteger tmp = g.modPow(x, N).multiply(k).mod(N); + return B.subtract(tmp).mod(N).modPow(exp, N); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Server.java b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Server.java new file mode 100644 index 0000000..348c608 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Server.java @@ -0,0 +1,90 @@ +package org.bouncycastle.crypto.agreement.srp; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Digest; + +/** + * Implements the server side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe. + * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper + * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002" + */ +public class SRP6Server +{ + protected BigInteger N; + protected BigInteger g; + protected BigInteger v; + + protected SecureRandom random; + protected Digest digest; + + protected BigInteger A; + + protected BigInteger b; + protected BigInteger B; + + protected BigInteger u; + protected BigInteger S; + + public SRP6Server() + { + } + + /** + * Initialises the server to accept a new client authentication attempt + * @param N The safe prime associated with the client's verifier + * @param g The group parameter associated with the client's verifier + * @param v The client's verifier + * @param digest The digest algorithm associated with the client's verifier + * @param random For key generation + */ + public void init(BigInteger N, BigInteger g, BigInteger v, Digest digest, SecureRandom random) + { + this.N = N; + this.g = g; + this.v = v; + + this.random = random; + this.digest = digest; + } + + /** + * Generates the server's credentials that are to be sent to the client. + * @return The server's public value to the client + */ + public BigInteger generateServerCredentials() + { + BigInteger k = SRP6Util.calculateK(digest, N, g); + this.b = selectPrivateValue(); + this.B = k.multiply(v).mod(N).add(g.modPow(b, N)).mod(N); + + return B; + } + + /** + * Processes the client's credentials. If valid the shared secret is generated and returned. + * @param clientA The client's credentials + * @return A shared secret BigInteger + * @throws CryptoException If client's credentials are invalid + */ + public BigInteger calculateSecret(BigInteger clientA) throws CryptoException + { + this.A = SRP6Util.validatePublicValue(N, clientA); + this.u = SRP6Util.calculateU(digest, N, A, B); + this.S = calculateS(); + + return S; + } + + protected BigInteger selectPrivateValue() + { + return SRP6Util.generatePrivateValue(digest, N, g, random); + } + + private BigInteger calculateS() + { + return v.modPow(u, N).multiply(A).mod(N).modPow(b, N); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Util.java b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Util.java new file mode 100644 index 0000000..f8941f9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6Util.java @@ -0,0 +1,91 @@ +package org.bouncycastle.crypto.agreement.srp; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.util.BigIntegers; + +public class SRP6Util +{ + private static BigInteger ZERO = BigInteger.valueOf(0); + private static BigInteger ONE = BigInteger.valueOf(1); + + public static BigInteger calculateK(Digest digest, BigInteger N, BigInteger g) + { + return hashPaddedPair(digest, N, N, g); + } + + public static BigInteger calculateU(Digest digest, BigInteger N, BigInteger A, BigInteger B) + { + return hashPaddedPair(digest, N, A, B); + } + + public static BigInteger calculateX(Digest digest, BigInteger N, byte[] salt, byte[] identity, byte[] password) + { + byte[] output = new byte[digest.getDigestSize()]; + + digest.update(identity, 0, identity.length); + digest.update((byte)':'); + digest.update(password, 0, password.length); + digest.doFinal(output, 0); + + digest.update(salt, 0, salt.length); + digest.update(output, 0, output.length); + digest.doFinal(output, 0); + + return new BigInteger(1, output); + } + + public static BigInteger generatePrivateValue(Digest digest, BigInteger N, BigInteger g, SecureRandom random) + { + int minBits = Math.min(256, N.bitLength() / 2); + BigInteger min = ONE.shiftLeft(minBits - 1); + BigInteger max = N.subtract(ONE); + + return BigIntegers.createRandomInRange(min, max, random); + } + + public static BigInteger validatePublicValue(BigInteger N, BigInteger val) + throws CryptoException + { + val = val.mod(N); + + // Check that val % N != 0 + if (val.equals(ZERO)) + { + throw new CryptoException("Invalid public value: 0"); + } + + return val; + } + + private static BigInteger hashPaddedPair(Digest digest, BigInteger N, BigInteger n1, BigInteger n2) + { + int padLength = (N.bitLength() + 7) / 8; + + byte[] n1_bytes = getPadded(n1, padLength); + byte[] n2_bytes = getPadded(n2, padLength); + + digest.update(n1_bytes, 0, n1_bytes.length); + digest.update(n2_bytes, 0, n2_bytes.length); + + byte[] output = new byte[digest.getDigestSize()]; + digest.doFinal(output, 0); + + return new BigInteger(1, output); + } + + private static byte[] getPadded(BigInteger n, int length) + { + byte[] bs = BigIntegers.asUnsignedByteArray(n); + if (bs.length < length) + { + byte[] tmp = new byte[length]; + System.arraycopy(bs, 0, tmp, length - bs.length, bs.length); + bs = tmp; + } + return bs; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java new file mode 100644 index 0000000..30fde0a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/agreement/srp/SRP6VerifierGenerator.java @@ -0,0 +1,47 @@ +package org.bouncycastle.crypto.agreement.srp; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.Digest; + +/** + * Generates new SRP verifier for user + */ +public class SRP6VerifierGenerator +{ + protected BigInteger N; + protected BigInteger g; + protected Digest digest; + + public SRP6VerifierGenerator() + { + } + + /** + * Initialises generator to create new verifiers + * @param N The safe prime to use (see DHParametersGenerator) + * @param g The group parameter to use (see DHParametersGenerator) + * @param digest The digest to use. The same digest type will need to be used later for the actual authentication + * attempt. Also note that the final session key size is dependent on the chosen digest. + */ + public void init(BigInteger N, BigInteger g, Digest digest) + { + this.N = N; + this.g = g; + this.digest = digest; + } + + /** + * Creates a new SRP verifier + * @param salt The salt to use, generally should be large and random + * @param identity The user's identifying information (eg. username) + * @param password The user's password + * @return A new verifier for use in future SRP authentication + */ + public BigInteger generateVerifier(byte[] salt, byte[] identity, byte[] password) + { + BigInteger x = SRP6Util.calculateX(digest, N, salt, identity, password); + + return g.modPow(x, N); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/GeneralDigest.java b/common/src/main/java/org/bouncycastle/crypto/digests/GeneralDigest.java new file mode 100644 index 0000000..f2c9967 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/GeneralDigest.java @@ -0,0 +1,135 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.ExtendedDigest; + +/** + * base implementation of MD4 family style digest as outlined in + * "Handbook of Applied Cryptography", pages 344 - 347. + */ +public abstract class GeneralDigest + implements ExtendedDigest +{ + private static final int BYTE_LENGTH = 64; + private byte[] xBuf; + private int xBufOff; + + private long byteCount; + + /** + * Standard constructor + */ + protected GeneralDigest() + { + xBuf = new byte[4]; + xBufOff = 0; + } + + /** + * Copy constructor. We are using copy constructors in place + * of the Object.clone() interface as this interface is not + * supported by J2ME. + */ + protected GeneralDigest(GeneralDigest t) + { + xBuf = new byte[t.xBuf.length]; + System.arraycopy(t.xBuf, 0, xBuf, 0, t.xBuf.length); + + xBufOff = t.xBufOff; + byteCount = t.byteCount; + } + + public void update( + byte in) + { + xBuf[xBufOff++] = in; + + if (xBufOff == xBuf.length) + { + processWord(xBuf, 0); + xBufOff = 0; + } + + byteCount++; + } + + public void update( + byte[] in, + int inOff, + int len) + { + // + // fill the current word + // + while ((xBufOff != 0) && (len > 0)) + { + update(in[inOff]); + + inOff++; + len--; + } + + // + // process whole words. + // + while (len > xBuf.length) + { + processWord(in, inOff); + + inOff += xBuf.length; + len -= xBuf.length; + byteCount += xBuf.length; + } + + // + // load in the remainder. + // + while (len > 0) + { + update(in[inOff]); + + inOff++; + len--; + } + } + + public void finish() + { + long bitLength = (byteCount << 3); + + // + // add the pad bytes. + // + update((byte)128); + + while (xBufOff != 0) + { + update((byte)0); + } + + processLength(bitLength); + + processBlock(); + } + + public void reset() + { + byteCount = 0; + + xBufOff = 0; + for (int i = 0; i < xBuf.length; i++) + { + xBuf[i] = 0; + } + } + + public int getByteLength() + { + return BYTE_LENGTH; + } + + protected abstract void processWord(byte[] in, int inOff); + + protected abstract void processLength(long bitLength); + + protected abstract void processBlock(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/LongDigest.java b/common/src/main/java/org/bouncycastle/crypto/digests/LongDigest.java new file mode 100644 index 0000000..22d457b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/LongDigest.java @@ -0,0 +1,354 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.ExtendedDigest; +import org.bouncycastle.crypto.util.Pack; + +/** + * Base class for SHA-384 and SHA-512. + */ +public abstract class LongDigest + implements ExtendedDigest +{ + private static final int BYTE_LENGTH = 128; + + private byte[] xBuf; + private int xBufOff; + + private long byteCount1; + private long byteCount2; + + protected long H1, H2, H3, H4, H5, H6, H7, H8; + + private long[] W = new long[80]; + private int wOff; + + /** + * Constructor for variable length word + */ + protected LongDigest() + { + xBuf = new byte[8]; + xBufOff = 0; + + reset(); + } + + /** + * Copy constructor. We are using copy constructors in place + * of the Object.clone() interface as this interface is not + * supported by J2ME. + */ + protected LongDigest(LongDigest t) + { + xBuf = new byte[t.xBuf.length]; + System.arraycopy(t.xBuf, 0, xBuf, 0, t.xBuf.length); + + xBufOff = t.xBufOff; + byteCount1 = t.byteCount1; + byteCount2 = t.byteCount2; + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + + System.arraycopy(t.W, 0, W, 0, t.W.length); + wOff = t.wOff; + } + + public void update( + byte in) + { + xBuf[xBufOff++] = in; + + if (xBufOff == xBuf.length) + { + processWord(xBuf, 0); + xBufOff = 0; + } + + byteCount1++; + } + + public void update( + byte[] in, + int inOff, + int len) + { + // + // fill the current word + // + while ((xBufOff != 0) && (len > 0)) + { + update(in[inOff]); + + inOff++; + len--; + } + + // + // process whole words. + // + while (len > xBuf.length) + { + processWord(in, inOff); + + inOff += xBuf.length; + len -= xBuf.length; + byteCount1 += xBuf.length; + } + + // + // load in the remainder. + // + while (len > 0) + { + update(in[inOff]); + + inOff++; + len--; + } + } + + public void finish() + { + adjustByteCounts(); + + long lowBitLength = byteCount1 << 3; + long hiBitLength = byteCount2; + + // + // add the pad bytes. + // + update((byte)128); + + while (xBufOff != 0) + { + update((byte)0); + } + + processLength(lowBitLength, hiBitLength); + + processBlock(); + } + + public void reset() + { + byteCount1 = 0; + byteCount2 = 0; + + xBufOff = 0; + for (int i = 0; i < xBuf.length; i++) + { + xBuf[i] = 0; + } + + wOff = 0; + for (int i = 0; i != W.length; i++) + { + W[i] = 0; + } + } + + public int getByteLength() + { + return BYTE_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + W[wOff] = Pack.bigEndianToLong(in, inOff); + + if (++wOff == 16) + { + processBlock(); + } + } + + /** + * adjust the byte counts so that byteCount2 represents the + * upper long (less 3 bits) word of the byte count. + */ + private void adjustByteCounts() + { + if (byteCount1 > 0x1fffffffffffffffL) + { + byteCount2 += (byteCount1 >>> 61); + byteCount1 &= 0x1fffffffffffffffL; + } + } + + protected void processLength( + long lowW, + long hiW) + { + if (wOff > 14) + { + processBlock(); + } + + W[14] = hiW; + W[15] = lowW; + } + + protected void processBlock() + { + adjustByteCounts(); + + // + // expand 16 word block into 80 word blocks. + // + for (int t = 16; t <= 79; t++) + { + W[t] = Sigma1(W[t - 2]) + W[t - 7] + Sigma0(W[t - 15]) + W[t - 16]; + } + + // + // set up working variables. + // + long a = H1; + long b = H2; + long c = H3; + long d = H4; + long e = H5; + long f = H6; + long g = H7; + long h = H8; + + int t = 0; + for(int i = 0; i < 10; i ++) + { + // t = 8 * i + h += Sum1(e) + Ch(e, f, g) + K[t] + W[t++]; + d += h; + h += Sum0(a) + Maj(a, b, c); + + // t = 8 * i + 1 + g += Sum1(d) + Ch(d, e, f) + K[t] + W[t++]; + c += g; + g += Sum0(h) + Maj(h, a, b); + + // t = 8 * i + 2 + f += Sum1(c) + Ch(c, d, e) + K[t] + W[t++]; + b += f; + f += Sum0(g) + Maj(g, h, a); + + // t = 8 * i + 3 + e += Sum1(b) + Ch(b, c, d) + K[t] + W[t++]; + a += e; + e += Sum0(f) + Maj(f, g, h); + + // t = 8 * i + 4 + d += Sum1(a) + Ch(a, b, c) + K[t] + W[t++]; + h += d; + d += Sum0(e) + Maj(e, f, g); + + // t = 8 * i + 5 + c += Sum1(h) + Ch(h, a, b) + K[t] + W[t++]; + g += c; + c += Sum0(d) + Maj(d, e, f); + + // t = 8 * i + 6 + b += Sum1(g) + Ch(g, h, a) + K[t] + W[t++]; + f += b; + b += Sum0(c) + Maj(c, d, e); + + // t = 8 * i + 7 + a += Sum1(f) + Ch(f, g, h) + K[t] + W[t++]; + e += a; + a += Sum0(b) + Maj(b, c, d); + } + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + H5 += e; + H6 += f; + H7 += g; + H8 += h; + + // + // reset the offset and clean out the word buffer. + // + wOff = 0; + for (int i = 0; i < 16; i++) + { + W[i] = 0; + } + } + + /* SHA-384 and SHA-512 functions (as for SHA-256 but for longs) */ + private long Ch( + long x, + long y, + long z) + { + return ((x & y) ^ ((~x) & z)); + } + + private long Maj( + long x, + long y, + long z) + { + return ((x & y) ^ (x & z) ^ (y & z)); + } + + private long Sum0( + long x) + { + return ((x << 36)|(x >>> 28)) ^ ((x << 30)|(x >>> 34)) ^ ((x << 25)|(x >>> 39)); + } + + private long Sum1( + long x) + { + return ((x << 50)|(x >>> 14)) ^ ((x << 46)|(x >>> 18)) ^ ((x << 23)|(x >>> 41)); + } + + private long Sigma0( + long x) + { + return ((x << 63)|(x >>> 1)) ^ ((x << 56)|(x >>> 8)) ^ (x >>> 7); + } + + private long Sigma1( + long x) + { + return ((x << 45)|(x >>> 19)) ^ ((x << 3)|(x >>> 61)) ^ (x >>> 6); + } + + /* SHA-384 and SHA-512 Constants + * (represent the first 64 bits of the fractional parts of the + * cube roots of the first sixty-four prime numbers) + */ + static final long K[] = { +0x428a2f98d728ae22L, 0x7137449123ef65cdL, 0xb5c0fbcfec4d3b2fL, 0xe9b5dba58189dbbcL, +0x3956c25bf348b538L, 0x59f111f1b605d019L, 0x923f82a4af194f9bL, 0xab1c5ed5da6d8118L, +0xd807aa98a3030242L, 0x12835b0145706fbeL, 0x243185be4ee4b28cL, 0x550c7dc3d5ffb4e2L, +0x72be5d74f27b896fL, 0x80deb1fe3b1696b1L, 0x9bdc06a725c71235L, 0xc19bf174cf692694L, +0xe49b69c19ef14ad2L, 0xefbe4786384f25e3L, 0x0fc19dc68b8cd5b5L, 0x240ca1cc77ac9c65L, +0x2de92c6f592b0275L, 0x4a7484aa6ea6e483L, 0x5cb0a9dcbd41fbd4L, 0x76f988da831153b5L, +0x983e5152ee66dfabL, 0xa831c66d2db43210L, 0xb00327c898fb213fL, 0xbf597fc7beef0ee4L, +0xc6e00bf33da88fc2L, 0xd5a79147930aa725L, 0x06ca6351e003826fL, 0x142929670a0e6e70L, +0x27b70a8546d22ffcL, 0x2e1b21385c26c926L, 0x4d2c6dfc5ac42aedL, 0x53380d139d95b3dfL, +0x650a73548baf63deL, 0x766a0abb3c77b2a8L, 0x81c2c92e47edaee6L, 0x92722c851482353bL, +0xa2bfe8a14cf10364L, 0xa81a664bbc423001L, 0xc24b8b70d0f89791L, 0xc76c51a30654be30L, +0xd192e819d6ef5218L, 0xd69906245565a910L, 0xf40e35855771202aL, 0x106aa07032bbd1b8L, +0x19a4c116b8d2d0c8L, 0x1e376c085141ab53L, 0x2748774cdf8eeb99L, 0x34b0bcb5e19b48a8L, +0x391c0cb3c5c95a63L, 0x4ed8aa4ae3418acbL, 0x5b9cca4f7763e373L, 0x682e6ff3d6b2b8a3L, +0x748f82ee5defb2fcL, 0x78a5636f43172f60L, 0x84c87814a1f0ab72L, 0x8cc702081a6439ecL, +0x90befffa23631e28L, 0xa4506cebde82bde9L, 0xbef9a3f7b2c67915L, 0xc67178f2e372532bL, +0xca273eceea26619cL, 0xd186b8c721c0c207L, 0xeada7dd6cde0eb1eL, 0xf57d4f7fee6ed178L, +0x06f067aa72176fbaL, 0x0a637dc5a2c898a6L, 0x113f9804bef90daeL, 0x1b710b35131c471bL, +0x28db77f523047d84L, 0x32caab7b40c72493L, 0x3c9ebe0a15c9bebcL, 0x431d67c49c100d4cL, +0x4cc5d4becb3e42b6L, 0x597f299cfc657e2aL, 0x5fcb6fab3ad6faecL, 0x6c44198c4a475817L + }; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/MD2Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/MD2Digest.java new file mode 100644 index 0000000..0edafbc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/MD2Digest.java @@ -0,0 +1,237 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.*; +/** + * implementation of MD2 + * as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + */ +public class MD2Digest + implements ExtendedDigest +{ + private static final int DIGEST_LENGTH = 16; + + /* X buffer */ + private byte[] X = new byte[48]; + private int xOff; + /* M buffer */ + private byte[] M = new byte[16]; + private int mOff; + /* check sum */ + private byte[] C = new byte[16]; + private int COff; + + public MD2Digest() + { + reset(); + } + public MD2Digest(MD2Digest t) + { + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + System.arraycopy(t.M, 0, M, 0, t.M.length); + mOff = t.mOff; + System.arraycopy(t.C, 0, C, 0, t.C.length); + COff = t.COff; + } + /** + * return the algorithm name + * + * @return the algorithm name + */ + public String getAlgorithmName() + { + return "MD2"; + } + /** + * return the size, in bytes, of the digest produced by this message digest. + * + * @return the size, in bytes, of the digest produced by this message digest. + */ + public int getDigestSize() + { + return DIGEST_LENGTH; + } + /** + * close the digest, producing the final digest value. The doFinal + * call leaves the digest reset. + * + * @param out the array the digest is to be copied into. + * @param outOff the offset into the out array the digest is to start at. + */ + public int doFinal(byte[] out, int outOff) + { + // add padding + byte paddingByte = (byte)(M.length-mOff); + for (int i=mOff;i 0)) + { + update(in[inOff]); + inOff++; + len--; + } + + // + // process whole words. + // + while (len > 16) + { + System.arraycopy(in,inOff,M,0,16); + processCheckSum(M); + processBlock(M); + len -= 16; + inOff += 16; + } + + // + // load in the remainder. + // + while (len > 0) + { + update(in[inOff]); + inOff++; + len--; + } + } + protected void processCheckSum(byte[] m) + { + int L = C[15]; + for (int i=0;i<16;i++) + { + C[i] ^= S[(m[i] ^ L) & 0xff]; + L = C[i]; + } + } + protected void processBlock(byte[] m) + { + for (int i=0;i<16;i++) + { + X[i+16] = m[i]; + X[i+32] = (byte)(m[i] ^ X[i]); + } + // encrypt block + int t = 0; + + for (int j=0;j<18;j++) + { + for (int k=0;k<48;k++) + { + t = X[k] ^= S[t]; + t = t & 0xff; + } + t = (t + j)%256; + } + } + // 256-byte random permutation constructed from the digits of PI + private static final byte[] S = { + (byte)41,(byte)46,(byte)67,(byte)201,(byte)162,(byte)216,(byte)124, + (byte)1,(byte)61,(byte)54,(byte)84,(byte)161,(byte)236,(byte)240, + (byte)6,(byte)19,(byte)98,(byte)167,(byte)5,(byte)243,(byte)192, + (byte)199,(byte)115,(byte)140,(byte)152,(byte)147,(byte)43,(byte)217, + (byte)188,(byte)76,(byte)130,(byte)202,(byte)30,(byte)155,(byte)87, + (byte)60,(byte)253,(byte)212,(byte)224,(byte)22,(byte)103,(byte)66, + (byte)111,(byte)24,(byte)138,(byte)23,(byte)229,(byte)18,(byte)190, + (byte)78,(byte)196,(byte)214,(byte)218,(byte)158,(byte)222,(byte)73, + (byte)160,(byte)251,(byte)245,(byte)142,(byte)187,(byte)47,(byte)238, + (byte)122,(byte)169,(byte)104,(byte)121,(byte)145,(byte)21,(byte)178, + (byte)7,(byte)63,(byte)148,(byte)194,(byte)16,(byte)137,(byte)11, + (byte)34,(byte)95,(byte)33,(byte)128,(byte)127,(byte)93,(byte)154, + (byte)90,(byte)144,(byte)50,(byte)39,(byte)53,(byte)62,(byte)204, + (byte)231,(byte)191,(byte)247,(byte)151,(byte)3,(byte)255,(byte)25, + (byte)48,(byte)179,(byte)72,(byte)165,(byte)181,(byte)209,(byte)215, + (byte)94,(byte)146,(byte)42,(byte)172,(byte)86,(byte)170,(byte)198, + (byte)79,(byte)184,(byte)56,(byte)210,(byte)150,(byte)164,(byte)125, + (byte)182,(byte)118,(byte)252,(byte)107,(byte)226,(byte)156,(byte)116, + (byte)4,(byte)241,(byte)69,(byte)157,(byte)112,(byte)89,(byte)100, + (byte)113,(byte)135,(byte)32,(byte)134,(byte)91,(byte)207,(byte)101, + (byte)230,(byte)45,(byte)168,(byte)2,(byte)27,(byte)96,(byte)37, + (byte)173,(byte)174,(byte)176,(byte)185,(byte)246,(byte)28,(byte)70, + (byte)97,(byte)105,(byte)52,(byte)64,(byte)126,(byte)15,(byte)85, + (byte)71,(byte)163,(byte)35,(byte)221,(byte)81,(byte)175,(byte)58, + (byte)195,(byte)92,(byte)249,(byte)206,(byte)186,(byte)197,(byte)234, + (byte)38,(byte)44,(byte)83,(byte)13,(byte)110,(byte)133,(byte)40, + (byte)132, 9,(byte)211,(byte)223,(byte)205,(byte)244,(byte)65, + (byte)129,(byte)77,(byte)82,(byte)106,(byte)220,(byte)55,(byte)200, + (byte)108,(byte)193,(byte)171,(byte)250,(byte)36,(byte)225,(byte)123, + (byte)8,(byte)12,(byte)189,(byte)177,(byte)74,(byte)120,(byte)136, + (byte)149,(byte)139,(byte)227,(byte)99,(byte)232,(byte)109,(byte)233, + (byte)203,(byte)213,(byte)254,(byte)59,(byte)0,(byte)29,(byte)57, + (byte)242,(byte)239,(byte)183,(byte)14,(byte)102,(byte)88,(byte)208, + (byte)228,(byte)166,(byte)119,(byte)114,(byte)248,(byte)235,(byte)117, + (byte)75,(byte)10,(byte)49,(byte)68,(byte)80,(byte)180,(byte)143, + (byte)237,(byte)31,(byte)26,(byte)219,(byte)153,(byte)141,(byte)51, + (byte)159,(byte)17,(byte)131,(byte)20 + }; + + public int getByteLength() + { + return 16; + } +} + + diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/MD4Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/MD4Digest.java new file mode 100644 index 0000000..2a8084f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/MD4Digest.java @@ -0,0 +1,270 @@ +package org.bouncycastle.crypto.digests; + + +/** + * implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + * Computer Science and RSA Data Security, Inc. + *

        + * NOTE: This algorithm is only included for backwards compatability + * with legacy applications, it's not secure, don't use it for anything new! + */ +public class MD4Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 16; + + private int H1, H2, H3, H4; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public MD4Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public MD4Digest(MD4Digest t) + { + super(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "MD4"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) + | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); + + if (xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)(bitLength >>> 32); + } + + private void unpackWord( + int word, + byte[] out, + int outOff) + { + out[outOff] = (byte)word; + out[outOff + 1] = (byte)(word >>> 8); + out[outOff + 2] = (byte)(word >>> 16); + out[outOff + 3] = (byte)(word >>> 24); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + unpackWord(H1, out, outOff); + unpackWord(H2, out, outOff + 4); + unpackWord(H3, out, outOff + 8); + unpackWord(H4, out, outOff + 12); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables to the IV values. + */ + public void reset() + { + super.reset(); + + H1 = 0x67452301; + H2 = 0xefcdab89; + H3 = 0x98badcfe; + H4 = 0x10325476; + + xOff = 0; + + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + // + // round 1 left rotates + // + private static final int S11 = 3; + private static final int S12 = 7; + private static final int S13 = 11; + private static final int S14 = 19; + + // + // round 2 left rotates + // + private static final int S21 = 3; + private static final int S22 = 5; + private static final int S23 = 9; + private static final int S24 = 13; + + // + // round 3 left rotates + // + private static final int S31 = 3; + private static final int S32 = 9; + private static final int S33 = 11; + private static final int S34 = 15; + + /* + * rotate int x left n bits. + */ + private int rotateLeft( + int x, + int n) + { + return (x << n) | (x >>> (32 - n)); + } + + /* + * F, G, H and I are the basic MD4 functions. + */ + private int F( + int u, + int v, + int w) + { + return (u & v) | (~u & w); + } + + private int G( + int u, + int v, + int w) + { + return (u & v) | (u & w) | (v & w); + } + + private int H( + int u, + int v, + int w) + { + return u ^ v ^ w; + } + + protected void processBlock() + { + int a = H1; + int b = H2; + int c = H3; + int d = H4; + + // + // Round 1 - F cycle, 16 times. + // + a = rotateLeft(a + F(b, c, d) + X[ 0], S11); + d = rotateLeft(d + F(a, b, c) + X[ 1], S12); + c = rotateLeft(c + F(d, a, b) + X[ 2], S13); + b = rotateLeft(b + F(c, d, a) + X[ 3], S14); + a = rotateLeft(a + F(b, c, d) + X[ 4], S11); + d = rotateLeft(d + F(a, b, c) + X[ 5], S12); + c = rotateLeft(c + F(d, a, b) + X[ 6], S13); + b = rotateLeft(b + F(c, d, a) + X[ 7], S14); + a = rotateLeft(a + F(b, c, d) + X[ 8], S11); + d = rotateLeft(d + F(a, b, c) + X[ 9], S12); + c = rotateLeft(c + F(d, a, b) + X[10], S13); + b = rotateLeft(b + F(c, d, a) + X[11], S14); + a = rotateLeft(a + F(b, c, d) + X[12], S11); + d = rotateLeft(d + F(a, b, c) + X[13], S12); + c = rotateLeft(c + F(d, a, b) + X[14], S13); + b = rotateLeft(b + F(c, d, a) + X[15], S14); + + // + // Round 2 - G cycle, 16 times. + // + a = rotateLeft(a + G(b, c, d) + X[ 0] + 0x5a827999, S21); + d = rotateLeft(d + G(a, b, c) + X[ 4] + 0x5a827999, S22); + c = rotateLeft(c + G(d, a, b) + X[ 8] + 0x5a827999, S23); + b = rotateLeft(b + G(c, d, a) + X[12] + 0x5a827999, S24); + a = rotateLeft(a + G(b, c, d) + X[ 1] + 0x5a827999, S21); + d = rotateLeft(d + G(a, b, c) + X[ 5] + 0x5a827999, S22); + c = rotateLeft(c + G(d, a, b) + X[ 9] + 0x5a827999, S23); + b = rotateLeft(b + G(c, d, a) + X[13] + 0x5a827999, S24); + a = rotateLeft(a + G(b, c, d) + X[ 2] + 0x5a827999, S21); + d = rotateLeft(d + G(a, b, c) + X[ 6] + 0x5a827999, S22); + c = rotateLeft(c + G(d, a, b) + X[10] + 0x5a827999, S23); + b = rotateLeft(b + G(c, d, a) + X[14] + 0x5a827999, S24); + a = rotateLeft(a + G(b, c, d) + X[ 3] + 0x5a827999, S21); + d = rotateLeft(d + G(a, b, c) + X[ 7] + 0x5a827999, S22); + c = rotateLeft(c + G(d, a, b) + X[11] + 0x5a827999, S23); + b = rotateLeft(b + G(c, d, a) + X[15] + 0x5a827999, S24); + + // + // Round 3 - H cycle, 16 times. + // + a = rotateLeft(a + H(b, c, d) + X[ 0] + 0x6ed9eba1, S31); + d = rotateLeft(d + H(a, b, c) + X[ 8] + 0x6ed9eba1, S32); + c = rotateLeft(c + H(d, a, b) + X[ 4] + 0x6ed9eba1, S33); + b = rotateLeft(b + H(c, d, a) + X[12] + 0x6ed9eba1, S34); + a = rotateLeft(a + H(b, c, d) + X[ 2] + 0x6ed9eba1, S31); + d = rotateLeft(d + H(a, b, c) + X[10] + 0x6ed9eba1, S32); + c = rotateLeft(c + H(d, a, b) + X[ 6] + 0x6ed9eba1, S33); + b = rotateLeft(b + H(c, d, a) + X[14] + 0x6ed9eba1, S34); + a = rotateLeft(a + H(b, c, d) + X[ 1] + 0x6ed9eba1, S31); + d = rotateLeft(d + H(a, b, c) + X[ 9] + 0x6ed9eba1, S32); + c = rotateLeft(c + H(d, a, b) + X[ 5] + 0x6ed9eba1, S33); + b = rotateLeft(b + H(c, d, a) + X[13] + 0x6ed9eba1, S34); + a = rotateLeft(a + H(b, c, d) + X[ 3] + 0x6ed9eba1, S31); + d = rotateLeft(d + H(a, b, c) + X[11] + 0x6ed9eba1, S32); + c = rotateLeft(c + H(d, a, b) + X[ 7] + 0x6ed9eba1, S33); + b = rotateLeft(b + H(c, d, a) + X[15] + 0x6ed9eba1, S34); + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/MD5Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/MD5Digest.java new file mode 100644 index 0000000..05ed27a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/MD5Digest.java @@ -0,0 +1,302 @@ +package org.bouncycastle.crypto.digests; + + +/** + * implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + */ +public class MD5Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 16; + + private int H1, H2, H3, H4; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public MD5Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public MD5Digest(MD5Digest t) + { + super(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "MD5"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) + | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); + + if (xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)(bitLength >>> 32); + } + + private void unpackWord( + int word, + byte[] out, + int outOff) + { + out[outOff] = (byte)word; + out[outOff + 1] = (byte)(word >>> 8); + out[outOff + 2] = (byte)(word >>> 16); + out[outOff + 3] = (byte)(word >>> 24); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + unpackWord(H1, out, outOff); + unpackWord(H2, out, outOff + 4); + unpackWord(H3, out, outOff + 8); + unpackWord(H4, out, outOff + 12); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables to the IV values. + */ + public void reset() + { + super.reset(); + + H1 = 0x67452301; + H2 = 0xefcdab89; + H3 = 0x98badcfe; + H4 = 0x10325476; + + xOff = 0; + + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + // + // round 1 left rotates + // + private static final int S11 = 7; + private static final int S12 = 12; + private static final int S13 = 17; + private static final int S14 = 22; + + // + // round 2 left rotates + // + private static final int S21 = 5; + private static final int S22 = 9; + private static final int S23 = 14; + private static final int S24 = 20; + + // + // round 3 left rotates + // + private static final int S31 = 4; + private static final int S32 = 11; + private static final int S33 = 16; + private static final int S34 = 23; + + // + // round 4 left rotates + // + private static final int S41 = 6; + private static final int S42 = 10; + private static final int S43 = 15; + private static final int S44 = 21; + + /* + * rotate int x left n bits. + */ + private int rotateLeft( + int x, + int n) + { + return (x << n) | (x >>> (32 - n)); + } + + /* + * F, G, H and I are the basic MD5 functions. + */ + private int F( + int u, + int v, + int w) + { + return (u & v) | (~u & w); + } + + private int G( + int u, + int v, + int w) + { + return (u & w) | (v & ~w); + } + + private int H( + int u, + int v, + int w) + { + return u ^ v ^ w; + } + + private int K( + int u, + int v, + int w) + { + return v ^ (u | ~w); + } + + protected void processBlock() + { + int a = H1; + int b = H2; + int c = H3; + int d = H4; + + // + // Round 1 - F cycle, 16 times. + // + a = rotateLeft(a + F(b, c, d) + X[ 0] + 0xd76aa478, S11) + b; + d = rotateLeft(d + F(a, b, c) + X[ 1] + 0xe8c7b756, S12) + a; + c = rotateLeft(c + F(d, a, b) + X[ 2] + 0x242070db, S13) + d; + b = rotateLeft(b + F(c, d, a) + X[ 3] + 0xc1bdceee, S14) + c; + a = rotateLeft(a + F(b, c, d) + X[ 4] + 0xf57c0faf, S11) + b; + d = rotateLeft(d + F(a, b, c) + X[ 5] + 0x4787c62a, S12) + a; + c = rotateLeft(c + F(d, a, b) + X[ 6] + 0xa8304613, S13) + d; + b = rotateLeft(b + F(c, d, a) + X[ 7] + 0xfd469501, S14) + c; + a = rotateLeft(a + F(b, c, d) + X[ 8] + 0x698098d8, S11) + b; + d = rotateLeft(d + F(a, b, c) + X[ 9] + 0x8b44f7af, S12) + a; + c = rotateLeft(c + F(d, a, b) + X[10] + 0xffff5bb1, S13) + d; + b = rotateLeft(b + F(c, d, a) + X[11] + 0x895cd7be, S14) + c; + a = rotateLeft(a + F(b, c, d) + X[12] + 0x6b901122, S11) + b; + d = rotateLeft(d + F(a, b, c) + X[13] + 0xfd987193, S12) + a; + c = rotateLeft(c + F(d, a, b) + X[14] + 0xa679438e, S13) + d; + b = rotateLeft(b + F(c, d, a) + X[15] + 0x49b40821, S14) + c; + + // + // Round 2 - G cycle, 16 times. + // + a = rotateLeft(a + G(b, c, d) + X[ 1] + 0xf61e2562, S21) + b; + d = rotateLeft(d + G(a, b, c) + X[ 6] + 0xc040b340, S22) + a; + c = rotateLeft(c + G(d, a, b) + X[11] + 0x265e5a51, S23) + d; + b = rotateLeft(b + G(c, d, a) + X[ 0] + 0xe9b6c7aa, S24) + c; + a = rotateLeft(a + G(b, c, d) + X[ 5] + 0xd62f105d, S21) + b; + d = rotateLeft(d + G(a, b, c) + X[10] + 0x02441453, S22) + a; + c = rotateLeft(c + G(d, a, b) + X[15] + 0xd8a1e681, S23) + d; + b = rotateLeft(b + G(c, d, a) + X[ 4] + 0xe7d3fbc8, S24) + c; + a = rotateLeft(a + G(b, c, d) + X[ 9] + 0x21e1cde6, S21) + b; + d = rotateLeft(d + G(a, b, c) + X[14] + 0xc33707d6, S22) + a; + c = rotateLeft(c + G(d, a, b) + X[ 3] + 0xf4d50d87, S23) + d; + b = rotateLeft(b + G(c, d, a) + X[ 8] + 0x455a14ed, S24) + c; + a = rotateLeft(a + G(b, c, d) + X[13] + 0xa9e3e905, S21) + b; + d = rotateLeft(d + G(a, b, c) + X[ 2] + 0xfcefa3f8, S22) + a; + c = rotateLeft(c + G(d, a, b) + X[ 7] + 0x676f02d9, S23) + d; + b = rotateLeft(b + G(c, d, a) + X[12] + 0x8d2a4c8a, S24) + c; + + // + // Round 3 - H cycle, 16 times. + // + a = rotateLeft(a + H(b, c, d) + X[ 5] + 0xfffa3942, S31) + b; + d = rotateLeft(d + H(a, b, c) + X[ 8] + 0x8771f681, S32) + a; + c = rotateLeft(c + H(d, a, b) + X[11] + 0x6d9d6122, S33) + d; + b = rotateLeft(b + H(c, d, a) + X[14] + 0xfde5380c, S34) + c; + a = rotateLeft(a + H(b, c, d) + X[ 1] + 0xa4beea44, S31) + b; + d = rotateLeft(d + H(a, b, c) + X[ 4] + 0x4bdecfa9, S32) + a; + c = rotateLeft(c + H(d, a, b) + X[ 7] + 0xf6bb4b60, S33) + d; + b = rotateLeft(b + H(c, d, a) + X[10] + 0xbebfbc70, S34) + c; + a = rotateLeft(a + H(b, c, d) + X[13] + 0x289b7ec6, S31) + b; + d = rotateLeft(d + H(a, b, c) + X[ 0] + 0xeaa127fa, S32) + a; + c = rotateLeft(c + H(d, a, b) + X[ 3] + 0xd4ef3085, S33) + d; + b = rotateLeft(b + H(c, d, a) + X[ 6] + 0x04881d05, S34) + c; + a = rotateLeft(a + H(b, c, d) + X[ 9] + 0xd9d4d039, S31) + b; + d = rotateLeft(d + H(a, b, c) + X[12] + 0xe6db99e5, S32) + a; + c = rotateLeft(c + H(d, a, b) + X[15] + 0x1fa27cf8, S33) + d; + b = rotateLeft(b + H(c, d, a) + X[ 2] + 0xc4ac5665, S34) + c; + + // + // Round 4 - K cycle, 16 times. + // + a = rotateLeft(a + K(b, c, d) + X[ 0] + 0xf4292244, S41) + b; + d = rotateLeft(d + K(a, b, c) + X[ 7] + 0x432aff97, S42) + a; + c = rotateLeft(c + K(d, a, b) + X[14] + 0xab9423a7, S43) + d; + b = rotateLeft(b + K(c, d, a) + X[ 5] + 0xfc93a039, S44) + c; + a = rotateLeft(a + K(b, c, d) + X[12] + 0x655b59c3, S41) + b; + d = rotateLeft(d + K(a, b, c) + X[ 3] + 0x8f0ccc92, S42) + a; + c = rotateLeft(c + K(d, a, b) + X[10] + 0xffeff47d, S43) + d; + b = rotateLeft(b + K(c, d, a) + X[ 1] + 0x85845dd1, S44) + c; + a = rotateLeft(a + K(b, c, d) + X[ 8] + 0x6fa87e4f, S41) + b; + d = rotateLeft(d + K(a, b, c) + X[15] + 0xfe2ce6e0, S42) + a; + c = rotateLeft(c + K(d, a, b) + X[ 6] + 0xa3014314, S43) + d; + b = rotateLeft(b + K(c, d, a) + X[13] + 0x4e0811a1, S44) + c; + a = rotateLeft(a + K(b, c, d) + X[ 4] + 0xf7537e82, S41) + b; + d = rotateLeft(d + K(a, b, c) + X[11] + 0xbd3af235, S42) + a; + c = rotateLeft(c + K(d, a, b) + X[ 2] + 0x2ad7d2bb, S43) + d; + b = rotateLeft(b + K(c, d, a) + X[ 9] + 0xeb86d391, S44) + c; + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/NullDigest.java b/common/src/main/java/org/bouncycastle/crypto/digests/NullDigest.java new file mode 100644 index 0000000..6cb0d4a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/NullDigest.java @@ -0,0 +1,48 @@ +package org.bouncycastle.crypto.digests; + +import java.io.ByteArrayOutputStream; + +import org.bouncycastle.crypto.Digest; + + +public class NullDigest + implements Digest +{ + private ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + public String getAlgorithmName() + { + return "NULL"; + } + + public int getDigestSize() + { + return bOut.size(); + } + + public void update(byte in) + { + bOut.write(in); + } + + public void update(byte[] in, int inOff, int len) + { + bOut.write(in, inOff, len); + } + + public int doFinal(byte[] out, int outOff) + { + byte[] res = bOut.toByteArray(); + + System.arraycopy(res, 0, out, outOff, res.length); + + reset(); + + return res.length; + } + + public void reset() + { + bOut.reset(); + } +} \ No newline at end of file diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD128Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD128Digest.java new file mode 100644 index 0000000..46fd8b3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD128Digest.java @@ -0,0 +1,461 @@ +package org.bouncycastle.crypto.digests; + + +/** + * implementation of RIPEMD128 + */ +public class RIPEMD128Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 16; + + private int H0, H1, H2, H3; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public RIPEMD128Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public RIPEMD128Digest(RIPEMD128Digest t) + { + super(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "RIPEMD128"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) + | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); + + if (xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)(bitLength >>> 32); + } + + private void unpackWord( + int word, + byte[] out, + int outOff) + { + out[outOff] = (byte)word; + out[outOff + 1] = (byte)(word >>> 8); + out[outOff + 2] = (byte)(word >>> 16); + out[outOff + 3] = (byte)(word >>> 24); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + unpackWord(H0, out, outOff); + unpackWord(H1, out, outOff + 4); + unpackWord(H2, out, outOff + 8); + unpackWord(H3, out, outOff + 12); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables to the IV values. + */ + public void reset() + { + super.reset(); + + H0 = 0x67452301; + H1 = 0xefcdab89; + H2 = 0x98badcfe; + H3 = 0x10325476; + + xOff = 0; + + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (x >>> (32 - n)); + } + + /* + * f1,f2,f3,f4 are the basic RIPEMD128 functions. + */ + + /* + * F + */ + private int f1( + int x, + int y, + int z) + { + return x ^ y ^ z; + } + + /* + * G + */ + private int f2( + int x, + int y, + int z) + { + return (x & y) | (~x & z); + } + + /* + * H + */ + private int f3( + int x, + int y, + int z) + { + return (x | ~y) ^ z; + } + + /* + * I + */ + private int f4( + int x, + int y, + int z) + { + return (x & z) | (y & ~z); + } + + private int F1( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f1(b, c, d) + x, s); + } + + private int F2( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f2(b, c, d) + x + 0x5a827999, s); + } + + private int F3( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f3(b, c, d) + x + 0x6ed9eba1, s); + } + + private int F4( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f4(b, c, d) + x + 0x8f1bbcdc, s); + } + + private int FF1( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f1(b, c, d) + x, s); + } + + private int FF2( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f2(b, c, d) + x + 0x6d703ef3, s); + } + + private int FF3( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f3(b, c, d) + x + 0x5c4dd124, s); + } + + private int FF4( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f4(b, c, d) + x + 0x50a28be6, s); + } + + protected void processBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + + a = aa = H0; + b = bb = H1; + c = cc = H2; + d = dd = H3; + + // + // Round 1 + // + a = F1(a, b, c, d, X[ 0], 11); + d = F1(d, a, b, c, X[ 1], 14); + c = F1(c, d, a, b, X[ 2], 15); + b = F1(b, c, d, a, X[ 3], 12); + a = F1(a, b, c, d, X[ 4], 5); + d = F1(d, a, b, c, X[ 5], 8); + c = F1(c, d, a, b, X[ 6], 7); + b = F1(b, c, d, a, X[ 7], 9); + a = F1(a, b, c, d, X[ 8], 11); + d = F1(d, a, b, c, X[ 9], 13); + c = F1(c, d, a, b, X[10], 14); + b = F1(b, c, d, a, X[11], 15); + a = F1(a, b, c, d, X[12], 6); + d = F1(d, a, b, c, X[13], 7); + c = F1(c, d, a, b, X[14], 9); + b = F1(b, c, d, a, X[15], 8); + + // + // Round 2 + // + a = F2(a, b, c, d, X[ 7], 7); + d = F2(d, a, b, c, X[ 4], 6); + c = F2(c, d, a, b, X[13], 8); + b = F2(b, c, d, a, X[ 1], 13); + a = F2(a, b, c, d, X[10], 11); + d = F2(d, a, b, c, X[ 6], 9); + c = F2(c, d, a, b, X[15], 7); + b = F2(b, c, d, a, X[ 3], 15); + a = F2(a, b, c, d, X[12], 7); + d = F2(d, a, b, c, X[ 0], 12); + c = F2(c, d, a, b, X[ 9], 15); + b = F2(b, c, d, a, X[ 5], 9); + a = F2(a, b, c, d, X[ 2], 11); + d = F2(d, a, b, c, X[14], 7); + c = F2(c, d, a, b, X[11], 13); + b = F2(b, c, d, a, X[ 8], 12); + + // + // Round 3 + // + a = F3(a, b, c, d, X[ 3], 11); + d = F3(d, a, b, c, X[10], 13); + c = F3(c, d, a, b, X[14], 6); + b = F3(b, c, d, a, X[ 4], 7); + a = F3(a, b, c, d, X[ 9], 14); + d = F3(d, a, b, c, X[15], 9); + c = F3(c, d, a, b, X[ 8], 13); + b = F3(b, c, d, a, X[ 1], 15); + a = F3(a, b, c, d, X[ 2], 14); + d = F3(d, a, b, c, X[ 7], 8); + c = F3(c, d, a, b, X[ 0], 13); + b = F3(b, c, d, a, X[ 6], 6); + a = F3(a, b, c, d, X[13], 5); + d = F3(d, a, b, c, X[11], 12); + c = F3(c, d, a, b, X[ 5], 7); + b = F3(b, c, d, a, X[12], 5); + + // + // Round 4 + // + a = F4(a, b, c, d, X[ 1], 11); + d = F4(d, a, b, c, X[ 9], 12); + c = F4(c, d, a, b, X[11], 14); + b = F4(b, c, d, a, X[10], 15); + a = F4(a, b, c, d, X[ 0], 14); + d = F4(d, a, b, c, X[ 8], 15); + c = F4(c, d, a, b, X[12], 9); + b = F4(b, c, d, a, X[ 4], 8); + a = F4(a, b, c, d, X[13], 9); + d = F4(d, a, b, c, X[ 3], 14); + c = F4(c, d, a, b, X[ 7], 5); + b = F4(b, c, d, a, X[15], 6); + a = F4(a, b, c, d, X[14], 8); + d = F4(d, a, b, c, X[ 5], 6); + c = F4(c, d, a, b, X[ 6], 5); + b = F4(b, c, d, a, X[ 2], 12); + + // + // Parallel round 1 + // + aa = FF4(aa, bb, cc, dd, X[ 5], 8); + dd = FF4(dd, aa, bb, cc, X[14], 9); + cc = FF4(cc, dd, aa, bb, X[ 7], 9); + bb = FF4(bb, cc, dd, aa, X[ 0], 11); + aa = FF4(aa, bb, cc, dd, X[ 9], 13); + dd = FF4(dd, aa, bb, cc, X[ 2], 15); + cc = FF4(cc, dd, aa, bb, X[11], 15); + bb = FF4(bb, cc, dd, aa, X[ 4], 5); + aa = FF4(aa, bb, cc, dd, X[13], 7); + dd = FF4(dd, aa, bb, cc, X[ 6], 7); + cc = FF4(cc, dd, aa, bb, X[15], 8); + bb = FF4(bb, cc, dd, aa, X[ 8], 11); + aa = FF4(aa, bb, cc, dd, X[ 1], 14); + dd = FF4(dd, aa, bb, cc, X[10], 14); + cc = FF4(cc, dd, aa, bb, X[ 3], 12); + bb = FF4(bb, cc, dd, aa, X[12], 6); + + // + // Parallel round 2 + // + aa = FF3(aa, bb, cc, dd, X[ 6], 9); + dd = FF3(dd, aa, bb, cc, X[11], 13); + cc = FF3(cc, dd, aa, bb, X[ 3], 15); + bb = FF3(bb, cc, dd, aa, X[ 7], 7); + aa = FF3(aa, bb, cc, dd, X[ 0], 12); + dd = FF3(dd, aa, bb, cc, X[13], 8); + cc = FF3(cc, dd, aa, bb, X[ 5], 9); + bb = FF3(bb, cc, dd, aa, X[10], 11); + aa = FF3(aa, bb, cc, dd, X[14], 7); + dd = FF3(dd, aa, bb, cc, X[15], 7); + cc = FF3(cc, dd, aa, bb, X[ 8], 12); + bb = FF3(bb, cc, dd, aa, X[12], 7); + aa = FF3(aa, bb, cc, dd, X[ 4], 6); + dd = FF3(dd, aa, bb, cc, X[ 9], 15); + cc = FF3(cc, dd, aa, bb, X[ 1], 13); + bb = FF3(bb, cc, dd, aa, X[ 2], 11); + + // + // Parallel round 3 + // + aa = FF2(aa, bb, cc, dd, X[15], 9); + dd = FF2(dd, aa, bb, cc, X[ 5], 7); + cc = FF2(cc, dd, aa, bb, X[ 1], 15); + bb = FF2(bb, cc, dd, aa, X[ 3], 11); + aa = FF2(aa, bb, cc, dd, X[ 7], 8); + dd = FF2(dd, aa, bb, cc, X[14], 6); + cc = FF2(cc, dd, aa, bb, X[ 6], 6); + bb = FF2(bb, cc, dd, aa, X[ 9], 14); + aa = FF2(aa, bb, cc, dd, X[11], 12); + dd = FF2(dd, aa, bb, cc, X[ 8], 13); + cc = FF2(cc, dd, aa, bb, X[12], 5); + bb = FF2(bb, cc, dd, aa, X[ 2], 14); + aa = FF2(aa, bb, cc, dd, X[10], 13); + dd = FF2(dd, aa, bb, cc, X[ 0], 13); + cc = FF2(cc, dd, aa, bb, X[ 4], 7); + bb = FF2(bb, cc, dd, aa, X[13], 5); + + // + // Parallel round 4 + // + aa = FF1(aa, bb, cc, dd, X[ 8], 15); + dd = FF1(dd, aa, bb, cc, X[ 6], 5); + cc = FF1(cc, dd, aa, bb, X[ 4], 8); + bb = FF1(bb, cc, dd, aa, X[ 1], 11); + aa = FF1(aa, bb, cc, dd, X[ 3], 14); + dd = FF1(dd, aa, bb, cc, X[11], 14); + cc = FF1(cc, dd, aa, bb, X[15], 6); + bb = FF1(bb, cc, dd, aa, X[ 0], 14); + aa = FF1(aa, bb, cc, dd, X[ 5], 6); + dd = FF1(dd, aa, bb, cc, X[12], 9); + cc = FF1(cc, dd, aa, bb, X[ 2], 12); + bb = FF1(bb, cc, dd, aa, X[13], 9); + aa = FF1(aa, bb, cc, dd, X[ 9], 12); + dd = FF1(dd, aa, bb, cc, X[ 7], 5); + cc = FF1(cc, dd, aa, bb, X[10], 15); + bb = FF1(bb, cc, dd, aa, X[14], 8); + + dd += c + H1; // final result for H0 + + // + // combine the results + // + H1 = H2 + d + aa; + H2 = H3 + a + bb; + H3 = H0 + b + cc; + H0 = dd; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD160Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD160Digest.java new file mode 100644 index 0000000..2351357 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD160Digest.java @@ -0,0 +1,422 @@ +package org.bouncycastle.crypto.digests; + + +/** + * implementation of RIPEMD see, + * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + */ +public class RIPEMD160Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 20; + + private int H0, H1, H2, H3, H4; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public RIPEMD160Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public RIPEMD160Digest(RIPEMD160Digest t) + { + super(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "RIPEMD160"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) + | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); + + if (xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)(bitLength >>> 32); + } + + private void unpackWord( + int word, + byte[] out, + int outOff) + { + out[outOff] = (byte)word; + out[outOff + 1] = (byte)(word >>> 8); + out[outOff + 2] = (byte)(word >>> 16); + out[outOff + 3] = (byte)(word >>> 24); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + unpackWord(H0, out, outOff); + unpackWord(H1, out, outOff + 4); + unpackWord(H2, out, outOff + 8); + unpackWord(H3, out, outOff + 12); + unpackWord(H4, out, outOff + 16); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables to the IV values. + */ + public void reset() + { + super.reset(); + + H0 = 0x67452301; + H1 = 0xefcdab89; + H2 = 0x98badcfe; + H3 = 0x10325476; + H4 = 0xc3d2e1f0; + + xOff = 0; + + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (x >>> (32 - n)); + } + + /* + * f1,f2,f3,f4,f5 are the basic RIPEMD160 functions. + */ + + /* + * rounds 0-15 + */ + private int f1( + int x, + int y, + int z) + { + return x ^ y ^ z; + } + + /* + * rounds 16-31 + */ + private int f2( + int x, + int y, + int z) + { + return (x & y) | (~x & z); + } + + /* + * rounds 32-47 + */ + private int f3( + int x, + int y, + int z) + { + return (x | ~y) ^ z; + } + + /* + * rounds 48-63 + */ + private int f4( + int x, + int y, + int z) + { + return (x & z) | (y & ~z); + } + + /* + * rounds 64-79 + */ + private int f5( + int x, + int y, + int z) + { + return x ^ (y | ~z); + } + + protected void processBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + int e, ee; + + a = aa = H0; + b = bb = H1; + c = cc = H2; + d = dd = H3; + e = ee = H4; + + // + // Rounds 1 - 16 + // + // left + a = RL(a + f1(b,c,d) + X[ 0], 11) + e; c = RL(c, 10); + e = RL(e + f1(a,b,c) + X[ 1], 14) + d; b = RL(b, 10); + d = RL(d + f1(e,a,b) + X[ 2], 15) + c; a = RL(a, 10); + c = RL(c + f1(d,e,a) + X[ 3], 12) + b; e = RL(e, 10); + b = RL(b + f1(c,d,e) + X[ 4], 5) + a; d = RL(d, 10); + a = RL(a + f1(b,c,d) + X[ 5], 8) + e; c = RL(c, 10); + e = RL(e + f1(a,b,c) + X[ 6], 7) + d; b = RL(b, 10); + d = RL(d + f1(e,a,b) + X[ 7], 9) + c; a = RL(a, 10); + c = RL(c + f1(d,e,a) + X[ 8], 11) + b; e = RL(e, 10); + b = RL(b + f1(c,d,e) + X[ 9], 13) + a; d = RL(d, 10); + a = RL(a + f1(b,c,d) + X[10], 14) + e; c = RL(c, 10); + e = RL(e + f1(a,b,c) + X[11], 15) + d; b = RL(b, 10); + d = RL(d + f1(e,a,b) + X[12], 6) + c; a = RL(a, 10); + c = RL(c + f1(d,e,a) + X[13], 7) + b; e = RL(e, 10); + b = RL(b + f1(c,d,e) + X[14], 9) + a; d = RL(d, 10); + a = RL(a + f1(b,c,d) + X[15], 8) + e; c = RL(c, 10); + + // right + aa = RL(aa + f5(bb,cc,dd) + X[ 5] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); + ee = RL(ee + f5(aa,bb,cc) + X[14] + 0x50a28be6, 9) + dd; bb = RL(bb, 10); + dd = RL(dd + f5(ee,aa,bb) + X[ 7] + 0x50a28be6, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f5(dd,ee,aa) + X[ 0] + 0x50a28be6, 11) + bb; ee = RL(ee, 10); + bb = RL(bb + f5(cc,dd,ee) + X[ 9] + 0x50a28be6, 13) + aa; dd = RL(dd, 10); + aa = RL(aa + f5(bb,cc,dd) + X[ 2] + 0x50a28be6, 15) + ee; cc = RL(cc, 10); + ee = RL(ee + f5(aa,bb,cc) + X[11] + 0x50a28be6, 15) + dd; bb = RL(bb, 10); + dd = RL(dd + f5(ee,aa,bb) + X[ 4] + 0x50a28be6, 5) + cc; aa = RL(aa, 10); + cc = RL(cc + f5(dd,ee,aa) + X[13] + 0x50a28be6, 7) + bb; ee = RL(ee, 10); + bb = RL(bb + f5(cc,dd,ee) + X[ 6] + 0x50a28be6, 7) + aa; dd = RL(dd, 10); + aa = RL(aa + f5(bb,cc,dd) + X[15] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); + ee = RL(ee + f5(aa,bb,cc) + X[ 8] + 0x50a28be6, 11) + dd; bb = RL(bb, 10); + dd = RL(dd + f5(ee,aa,bb) + X[ 1] + 0x50a28be6, 14) + cc; aa = RL(aa, 10); + cc = RL(cc + f5(dd,ee,aa) + X[10] + 0x50a28be6, 14) + bb; ee = RL(ee, 10); + bb = RL(bb + f5(cc,dd,ee) + X[ 3] + 0x50a28be6, 12) + aa; dd = RL(dd, 10); + aa = RL(aa + f5(bb,cc,dd) + X[12] + 0x50a28be6, 6) + ee; cc = RL(cc, 10); + + // + // Rounds 16-31 + // + // left + e = RL(e + f2(a,b,c) + X[ 7] + 0x5a827999, 7) + d; b = RL(b, 10); + d = RL(d + f2(e,a,b) + X[ 4] + 0x5a827999, 6) + c; a = RL(a, 10); + c = RL(c + f2(d,e,a) + X[13] + 0x5a827999, 8) + b; e = RL(e, 10); + b = RL(b + f2(c,d,e) + X[ 1] + 0x5a827999, 13) + a; d = RL(d, 10); + a = RL(a + f2(b,c,d) + X[10] + 0x5a827999, 11) + e; c = RL(c, 10); + e = RL(e + f2(a,b,c) + X[ 6] + 0x5a827999, 9) + d; b = RL(b, 10); + d = RL(d + f2(e,a,b) + X[15] + 0x5a827999, 7) + c; a = RL(a, 10); + c = RL(c + f2(d,e,a) + X[ 3] + 0x5a827999, 15) + b; e = RL(e, 10); + b = RL(b + f2(c,d,e) + X[12] + 0x5a827999, 7) + a; d = RL(d, 10); + a = RL(a + f2(b,c,d) + X[ 0] + 0x5a827999, 12) + e; c = RL(c, 10); + e = RL(e + f2(a,b,c) + X[ 9] + 0x5a827999, 15) + d; b = RL(b, 10); + d = RL(d + f2(e,a,b) + X[ 5] + 0x5a827999, 9) + c; a = RL(a, 10); + c = RL(c + f2(d,e,a) + X[ 2] + 0x5a827999, 11) + b; e = RL(e, 10); + b = RL(b + f2(c,d,e) + X[14] + 0x5a827999, 7) + a; d = RL(d, 10); + a = RL(a + f2(b,c,d) + X[11] + 0x5a827999, 13) + e; c = RL(c, 10); + e = RL(e + f2(a,b,c) + X[ 8] + 0x5a827999, 12) + d; b = RL(b, 10); + + // right + ee = RL(ee + f4(aa,bb,cc) + X[ 6] + 0x5c4dd124, 9) + dd; bb = RL(bb, 10); + dd = RL(dd + f4(ee,aa,bb) + X[11] + 0x5c4dd124, 13) + cc; aa = RL(aa, 10); + cc = RL(cc + f4(dd,ee,aa) + X[ 3] + 0x5c4dd124, 15) + bb; ee = RL(ee, 10); + bb = RL(bb + f4(cc,dd,ee) + X[ 7] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); + aa = RL(aa + f4(bb,cc,dd) + X[ 0] + 0x5c4dd124, 12) + ee; cc = RL(cc, 10); + ee = RL(ee + f4(aa,bb,cc) + X[13] + 0x5c4dd124, 8) + dd; bb = RL(bb, 10); + dd = RL(dd + f4(ee,aa,bb) + X[ 5] + 0x5c4dd124, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f4(dd,ee,aa) + X[10] + 0x5c4dd124, 11) + bb; ee = RL(ee, 10); + bb = RL(bb + f4(cc,dd,ee) + X[14] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); + aa = RL(aa + f4(bb,cc,dd) + X[15] + 0x5c4dd124, 7) + ee; cc = RL(cc, 10); + ee = RL(ee + f4(aa,bb,cc) + X[ 8] + 0x5c4dd124, 12) + dd; bb = RL(bb, 10); + dd = RL(dd + f4(ee,aa,bb) + X[12] + 0x5c4dd124, 7) + cc; aa = RL(aa, 10); + cc = RL(cc + f4(dd,ee,aa) + X[ 4] + 0x5c4dd124, 6) + bb; ee = RL(ee, 10); + bb = RL(bb + f4(cc,dd,ee) + X[ 9] + 0x5c4dd124, 15) + aa; dd = RL(dd, 10); + aa = RL(aa + f4(bb,cc,dd) + X[ 1] + 0x5c4dd124, 13) + ee; cc = RL(cc, 10); + ee = RL(ee + f4(aa,bb,cc) + X[ 2] + 0x5c4dd124, 11) + dd; bb = RL(bb, 10); + + // + // Rounds 32-47 + // + // left + d = RL(d + f3(e,a,b) + X[ 3] + 0x6ed9eba1, 11) + c; a = RL(a, 10); + c = RL(c + f3(d,e,a) + X[10] + 0x6ed9eba1, 13) + b; e = RL(e, 10); + b = RL(b + f3(c,d,e) + X[14] + 0x6ed9eba1, 6) + a; d = RL(d, 10); + a = RL(a + f3(b,c,d) + X[ 4] + 0x6ed9eba1, 7) + e; c = RL(c, 10); + e = RL(e + f3(a,b,c) + X[ 9] + 0x6ed9eba1, 14) + d; b = RL(b, 10); + d = RL(d + f3(e,a,b) + X[15] + 0x6ed9eba1, 9) + c; a = RL(a, 10); + c = RL(c + f3(d,e,a) + X[ 8] + 0x6ed9eba1, 13) + b; e = RL(e, 10); + b = RL(b + f3(c,d,e) + X[ 1] + 0x6ed9eba1, 15) + a; d = RL(d, 10); + a = RL(a + f3(b,c,d) + X[ 2] + 0x6ed9eba1, 14) + e; c = RL(c, 10); + e = RL(e + f3(a,b,c) + X[ 7] + 0x6ed9eba1, 8) + d; b = RL(b, 10); + d = RL(d + f3(e,a,b) + X[ 0] + 0x6ed9eba1, 13) + c; a = RL(a, 10); + c = RL(c + f3(d,e,a) + X[ 6] + 0x6ed9eba1, 6) + b; e = RL(e, 10); + b = RL(b + f3(c,d,e) + X[13] + 0x6ed9eba1, 5) + a; d = RL(d, 10); + a = RL(a + f3(b,c,d) + X[11] + 0x6ed9eba1, 12) + e; c = RL(c, 10); + e = RL(e + f3(a,b,c) + X[ 5] + 0x6ed9eba1, 7) + d; b = RL(b, 10); + d = RL(d + f3(e,a,b) + X[12] + 0x6ed9eba1, 5) + c; a = RL(a, 10); + + // right + dd = RL(dd + f3(ee,aa,bb) + X[15] + 0x6d703ef3, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f3(dd,ee,aa) + X[ 5] + 0x6d703ef3, 7) + bb; ee = RL(ee, 10); + bb = RL(bb + f3(cc,dd,ee) + X[ 1] + 0x6d703ef3, 15) + aa; dd = RL(dd, 10); + aa = RL(aa + f3(bb,cc,dd) + X[ 3] + 0x6d703ef3, 11) + ee; cc = RL(cc, 10); + ee = RL(ee + f3(aa,bb,cc) + X[ 7] + 0x6d703ef3, 8) + dd; bb = RL(bb, 10); + dd = RL(dd + f3(ee,aa,bb) + X[14] + 0x6d703ef3, 6) + cc; aa = RL(aa, 10); + cc = RL(cc + f3(dd,ee,aa) + X[ 6] + 0x6d703ef3, 6) + bb; ee = RL(ee, 10); + bb = RL(bb + f3(cc,dd,ee) + X[ 9] + 0x6d703ef3, 14) + aa; dd = RL(dd, 10); + aa = RL(aa + f3(bb,cc,dd) + X[11] + 0x6d703ef3, 12) + ee; cc = RL(cc, 10); + ee = RL(ee + f3(aa,bb,cc) + X[ 8] + 0x6d703ef3, 13) + dd; bb = RL(bb, 10); + dd = RL(dd + f3(ee,aa,bb) + X[12] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); + cc = RL(cc + f3(dd,ee,aa) + X[ 2] + 0x6d703ef3, 14) + bb; ee = RL(ee, 10); + bb = RL(bb + f3(cc,dd,ee) + X[10] + 0x6d703ef3, 13) + aa; dd = RL(dd, 10); + aa = RL(aa + f3(bb,cc,dd) + X[ 0] + 0x6d703ef3, 13) + ee; cc = RL(cc, 10); + ee = RL(ee + f3(aa,bb,cc) + X[ 4] + 0x6d703ef3, 7) + dd; bb = RL(bb, 10); + dd = RL(dd + f3(ee,aa,bb) + X[13] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); + + // + // Rounds 48-63 + // + // left + c = RL(c + f4(d,e,a) + X[ 1] + 0x8f1bbcdc, 11) + b; e = RL(e, 10); + b = RL(b + f4(c,d,e) + X[ 9] + 0x8f1bbcdc, 12) + a; d = RL(d, 10); + a = RL(a + f4(b,c,d) + X[11] + 0x8f1bbcdc, 14) + e; c = RL(c, 10); + e = RL(e + f4(a,b,c) + X[10] + 0x8f1bbcdc, 15) + d; b = RL(b, 10); + d = RL(d + f4(e,a,b) + X[ 0] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); + c = RL(c + f4(d,e,a) + X[ 8] + 0x8f1bbcdc, 15) + b; e = RL(e, 10); + b = RL(b + f4(c,d,e) + X[12] + 0x8f1bbcdc, 9) + a; d = RL(d, 10); + a = RL(a + f4(b,c,d) + X[ 4] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); + e = RL(e + f4(a,b,c) + X[13] + 0x8f1bbcdc, 9) + d; b = RL(b, 10); + d = RL(d + f4(e,a,b) + X[ 3] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); + c = RL(c + f4(d,e,a) + X[ 7] + 0x8f1bbcdc, 5) + b; e = RL(e, 10); + b = RL(b + f4(c,d,e) + X[15] + 0x8f1bbcdc, 6) + a; d = RL(d, 10); + a = RL(a + f4(b,c,d) + X[14] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); + e = RL(e + f4(a,b,c) + X[ 5] + 0x8f1bbcdc, 6) + d; b = RL(b, 10); + d = RL(d + f4(e,a,b) + X[ 6] + 0x8f1bbcdc, 5) + c; a = RL(a, 10); + c = RL(c + f4(d,e,a) + X[ 2] + 0x8f1bbcdc, 12) + b; e = RL(e, 10); + + // right + cc = RL(cc + f2(dd,ee,aa) + X[ 8] + 0x7a6d76e9, 15) + bb; ee = RL(ee, 10); + bb = RL(bb + f2(cc,dd,ee) + X[ 6] + 0x7a6d76e9, 5) + aa; dd = RL(dd, 10); + aa = RL(aa + f2(bb,cc,dd) + X[ 4] + 0x7a6d76e9, 8) + ee; cc = RL(cc, 10); + ee = RL(ee + f2(aa,bb,cc) + X[ 1] + 0x7a6d76e9, 11) + dd; bb = RL(bb, 10); + dd = RL(dd + f2(ee,aa,bb) + X[ 3] + 0x7a6d76e9, 14) + cc; aa = RL(aa, 10); + cc = RL(cc + f2(dd,ee,aa) + X[11] + 0x7a6d76e9, 14) + bb; ee = RL(ee, 10); + bb = RL(bb + f2(cc,dd,ee) + X[15] + 0x7a6d76e9, 6) + aa; dd = RL(dd, 10); + aa = RL(aa + f2(bb,cc,dd) + X[ 0] + 0x7a6d76e9, 14) + ee; cc = RL(cc, 10); + ee = RL(ee + f2(aa,bb,cc) + X[ 5] + 0x7a6d76e9, 6) + dd; bb = RL(bb, 10); + dd = RL(dd + f2(ee,aa,bb) + X[12] + 0x7a6d76e9, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f2(dd,ee,aa) + X[ 2] + 0x7a6d76e9, 12) + bb; ee = RL(ee, 10); + bb = RL(bb + f2(cc,dd,ee) + X[13] + 0x7a6d76e9, 9) + aa; dd = RL(dd, 10); + aa = RL(aa + f2(bb,cc,dd) + X[ 9] + 0x7a6d76e9, 12) + ee; cc = RL(cc, 10); + ee = RL(ee + f2(aa,bb,cc) + X[ 7] + 0x7a6d76e9, 5) + dd; bb = RL(bb, 10); + dd = RL(dd + f2(ee,aa,bb) + X[10] + 0x7a6d76e9, 15) + cc; aa = RL(aa, 10); + cc = RL(cc + f2(dd,ee,aa) + X[14] + 0x7a6d76e9, 8) + bb; ee = RL(ee, 10); + + // + // Rounds 64-79 + // + // left + b = RL(b + f5(c,d,e) + X[ 4] + 0xa953fd4e, 9) + a; d = RL(d, 10); + a = RL(a + f5(b,c,d) + X[ 0] + 0xa953fd4e, 15) + e; c = RL(c, 10); + e = RL(e + f5(a,b,c) + X[ 5] + 0xa953fd4e, 5) + d; b = RL(b, 10); + d = RL(d + f5(e,a,b) + X[ 9] + 0xa953fd4e, 11) + c; a = RL(a, 10); + c = RL(c + f5(d,e,a) + X[ 7] + 0xa953fd4e, 6) + b; e = RL(e, 10); + b = RL(b + f5(c,d,e) + X[12] + 0xa953fd4e, 8) + a; d = RL(d, 10); + a = RL(a + f5(b,c,d) + X[ 2] + 0xa953fd4e, 13) + e; c = RL(c, 10); + e = RL(e + f5(a,b,c) + X[10] + 0xa953fd4e, 12) + d; b = RL(b, 10); + d = RL(d + f5(e,a,b) + X[14] + 0xa953fd4e, 5) + c; a = RL(a, 10); + c = RL(c + f5(d,e,a) + X[ 1] + 0xa953fd4e, 12) + b; e = RL(e, 10); + b = RL(b + f5(c,d,e) + X[ 3] + 0xa953fd4e, 13) + a; d = RL(d, 10); + a = RL(a + f5(b,c,d) + X[ 8] + 0xa953fd4e, 14) + e; c = RL(c, 10); + e = RL(e + f5(a,b,c) + X[11] + 0xa953fd4e, 11) + d; b = RL(b, 10); + d = RL(d + f5(e,a,b) + X[ 6] + 0xa953fd4e, 8) + c; a = RL(a, 10); + c = RL(c + f5(d,e,a) + X[15] + 0xa953fd4e, 5) + b; e = RL(e, 10); + b = RL(b + f5(c,d,e) + X[13] + 0xa953fd4e, 6) + a; d = RL(d, 10); + + // right + bb = RL(bb + f1(cc,dd,ee) + X[12], 8) + aa; dd = RL(dd, 10); + aa = RL(aa + f1(bb,cc,dd) + X[15], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + f1(aa,bb,cc) + X[10], 12) + dd; bb = RL(bb, 10); + dd = RL(dd + f1(ee,aa,bb) + X[ 4], 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f1(dd,ee,aa) + X[ 1], 12) + bb; ee = RL(ee, 10); + bb = RL(bb + f1(cc,dd,ee) + X[ 5], 5) + aa; dd = RL(dd, 10); + aa = RL(aa + f1(bb,cc,dd) + X[ 8], 14) + ee; cc = RL(cc, 10); + ee = RL(ee + f1(aa,bb,cc) + X[ 7], 6) + dd; bb = RL(bb, 10); + dd = RL(dd + f1(ee,aa,bb) + X[ 6], 8) + cc; aa = RL(aa, 10); + cc = RL(cc + f1(dd,ee,aa) + X[ 2], 13) + bb; ee = RL(ee, 10); + bb = RL(bb + f1(cc,dd,ee) + X[13], 6) + aa; dd = RL(dd, 10); + aa = RL(aa + f1(bb,cc,dd) + X[14], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + f1(aa,bb,cc) + X[ 0], 15) + dd; bb = RL(bb, 10); + dd = RL(dd + f1(ee,aa,bb) + X[ 3], 13) + cc; aa = RL(aa, 10); + cc = RL(cc + f1(dd,ee,aa) + X[ 9], 11) + bb; ee = RL(ee, 10); + bb = RL(bb + f1(cc,dd,ee) + X[11], 11) + aa; dd = RL(dd, 10); + + dd += c + H1; + H1 = H2 + d + ee; + H2 = H3 + e + aa; + H3 = H4 + a + bb; + H4 = H0 + b + cc; + H0 = dd; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD256Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD256Digest.java new file mode 100644 index 0000000..3d92e4a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD256Digest.java @@ -0,0 +1,476 @@ +package org.bouncycastle.crypto.digests; + + +/** + * implementation of RIPEMD256. + *

        + * note: this algorithm offers the same level of security as RIPEMD128. + */ +public class RIPEMD256Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 32; + + private int H0, H1, H2, H3, H4, H5, H6, H7; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public RIPEMD256Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public RIPEMD256Digest(RIPEMD256Digest t) + { + super(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "RIPEMD256"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) + | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); + + if (xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)(bitLength >>> 32); + } + + private void unpackWord( + int word, + byte[] out, + int outOff) + { + out[outOff] = (byte)word; + out[outOff + 1] = (byte)(word >>> 8); + out[outOff + 2] = (byte)(word >>> 16); + out[outOff + 3] = (byte)(word >>> 24); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + unpackWord(H0, out, outOff); + unpackWord(H1, out, outOff + 4); + unpackWord(H2, out, outOff + 8); + unpackWord(H3, out, outOff + 12); + unpackWord(H4, out, outOff + 16); + unpackWord(H5, out, outOff + 20); + unpackWord(H6, out, outOff + 24); + unpackWord(H7, out, outOff + 28); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables to the IV values. + */ + public void reset() + { + super.reset(); + + H0 = 0x67452301; + H1 = 0xefcdab89; + H2 = 0x98badcfe; + H3 = 0x10325476; + H4 = 0x76543210; + H5 = 0xFEDCBA98; + H6 = 0x89ABCDEF; + H7 = 0x01234567; + + xOff = 0; + + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (x >>> (32 - n)); + } + + /* + * f1,f2,f3,f4 are the basic RIPEMD128 functions. + */ + + /* + * F + */ + private int f1( + int x, + int y, + int z) + { + return x ^ y ^ z; + } + + /* + * G + */ + private int f2( + int x, + int y, + int z) + { + return (x & y) | (~x & z); + } + + /* + * H + */ + private int f3( + int x, + int y, + int z) + { + return (x | ~y) ^ z; + } + + /* + * I + */ + private int f4( + int x, + int y, + int z) + { + return (x & z) | (y & ~z); + } + + private int F1( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f1(b, c, d) + x, s); + } + + private int F2( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f2(b, c, d) + x + 0x5a827999, s); + } + + private int F3( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f3(b, c, d) + x + 0x6ed9eba1, s); + } + + private int F4( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f4(b, c, d) + x + 0x8f1bbcdc, s); + } + + private int FF1( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f1(b, c, d) + x, s); + } + + private int FF2( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f2(b, c, d) + x + 0x6d703ef3, s); + } + + private int FF3( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f3(b, c, d) + x + 0x5c4dd124, s); + } + + private int FF4( + int a, + int b, + int c, + int d, + int x, + int s) + { + return RL(a + f4(b, c, d) + x + 0x50a28be6, s); + } + + protected void processBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + int t; + + a = H0; + b = H1; + c = H2; + d = H3; + aa = H4; + bb = H5; + cc = H6; + dd = H7; + + // + // Round 1 + // + + a = F1(a, b, c, d, X[ 0], 11); + d = F1(d, a, b, c, X[ 1], 14); + c = F1(c, d, a, b, X[ 2], 15); + b = F1(b, c, d, a, X[ 3], 12); + a = F1(a, b, c, d, X[ 4], 5); + d = F1(d, a, b, c, X[ 5], 8); + c = F1(c, d, a, b, X[ 6], 7); + b = F1(b, c, d, a, X[ 7], 9); + a = F1(a, b, c, d, X[ 8], 11); + d = F1(d, a, b, c, X[ 9], 13); + c = F1(c, d, a, b, X[10], 14); + b = F1(b, c, d, a, X[11], 15); + a = F1(a, b, c, d, X[12], 6); + d = F1(d, a, b, c, X[13], 7); + c = F1(c, d, a, b, X[14], 9); + b = F1(b, c, d, a, X[15], 8); + + aa = FF4(aa, bb, cc, dd, X[ 5], 8); + dd = FF4(dd, aa, bb, cc, X[14], 9); + cc = FF4(cc, dd, aa, bb, X[ 7], 9); + bb = FF4(bb, cc, dd, aa, X[ 0], 11); + aa = FF4(aa, bb, cc, dd, X[ 9], 13); + dd = FF4(dd, aa, bb, cc, X[ 2], 15); + cc = FF4(cc, dd, aa, bb, X[11], 15); + bb = FF4(bb, cc, dd, aa, X[ 4], 5); + aa = FF4(aa, bb, cc, dd, X[13], 7); + dd = FF4(dd, aa, bb, cc, X[ 6], 7); + cc = FF4(cc, dd, aa, bb, X[15], 8); + bb = FF4(bb, cc, dd, aa, X[ 8], 11); + aa = FF4(aa, bb, cc, dd, X[ 1], 14); + dd = FF4(dd, aa, bb, cc, X[10], 14); + cc = FF4(cc, dd, aa, bb, X[ 3], 12); + bb = FF4(bb, cc, dd, aa, X[12], 6); + + t = a; a = aa; aa = t; + + // + // Round 2 + // + a = F2(a, b, c, d, X[ 7], 7); + d = F2(d, a, b, c, X[ 4], 6); + c = F2(c, d, a, b, X[13], 8); + b = F2(b, c, d, a, X[ 1], 13); + a = F2(a, b, c, d, X[10], 11); + d = F2(d, a, b, c, X[ 6], 9); + c = F2(c, d, a, b, X[15], 7); + b = F2(b, c, d, a, X[ 3], 15); + a = F2(a, b, c, d, X[12], 7); + d = F2(d, a, b, c, X[ 0], 12); + c = F2(c, d, a, b, X[ 9], 15); + b = F2(b, c, d, a, X[ 5], 9); + a = F2(a, b, c, d, X[ 2], 11); + d = F2(d, a, b, c, X[14], 7); + c = F2(c, d, a, b, X[11], 13); + b = F2(b, c, d, a, X[ 8], 12); + + aa = FF3(aa, bb, cc, dd, X[ 6], 9); + dd = FF3(dd, aa, bb, cc, X[ 11], 13); + cc = FF3(cc, dd, aa, bb, X[3], 15); + bb = FF3(bb, cc, dd, aa, X[ 7], 7); + aa = FF3(aa, bb, cc, dd, X[0], 12); + dd = FF3(dd, aa, bb, cc, X[13], 8); + cc = FF3(cc, dd, aa, bb, X[5], 9); + bb = FF3(bb, cc, dd, aa, X[10], 11); + aa = FF3(aa, bb, cc, dd, X[14], 7); + dd = FF3(dd, aa, bb, cc, X[15], 7); + cc = FF3(cc, dd, aa, bb, X[ 8], 12); + bb = FF3(bb, cc, dd, aa, X[12], 7); + aa = FF3(aa, bb, cc, dd, X[ 4], 6); + dd = FF3(dd, aa, bb, cc, X[ 9], 15); + cc = FF3(cc, dd, aa, bb, X[ 1], 13); + bb = FF3(bb, cc, dd, aa, X[ 2], 11); + + t = b; b = bb; bb = t; + + // + // Round 3 + // + a = F3(a, b, c, d, X[ 3], 11); + d = F3(d, a, b, c, X[10], 13); + c = F3(c, d, a, b, X[14], 6); + b = F3(b, c, d, a, X[ 4], 7); + a = F3(a, b, c, d, X[ 9], 14); + d = F3(d, a, b, c, X[15], 9); + c = F3(c, d, a, b, X[ 8], 13); + b = F3(b, c, d, a, X[ 1], 15); + a = F3(a, b, c, d, X[ 2], 14); + d = F3(d, a, b, c, X[ 7], 8); + c = F3(c, d, a, b, X[ 0], 13); + b = F3(b, c, d, a, X[ 6], 6); + a = F3(a, b, c, d, X[13], 5); + d = F3(d, a, b, c, X[11], 12); + c = F3(c, d, a, b, X[ 5], 7); + b = F3(b, c, d, a, X[12], 5); + + aa = FF2(aa, bb, cc, dd, X[ 15], 9); + dd = FF2(dd, aa, bb, cc, X[5], 7); + cc = FF2(cc, dd, aa, bb, X[1], 15); + bb = FF2(bb, cc, dd, aa, X[ 3], 11); + aa = FF2(aa, bb, cc, dd, X[ 7], 8); + dd = FF2(dd, aa, bb, cc, X[14], 6); + cc = FF2(cc, dd, aa, bb, X[ 6], 6); + bb = FF2(bb, cc, dd, aa, X[ 9], 14); + aa = FF2(aa, bb, cc, dd, X[11], 12); + dd = FF2(dd, aa, bb, cc, X[ 8], 13); + cc = FF2(cc, dd, aa, bb, X[12], 5); + bb = FF2(bb, cc, dd, aa, X[ 2], 14); + aa = FF2(aa, bb, cc, dd, X[10], 13); + dd = FF2(dd, aa, bb, cc, X[ 0], 13); + cc = FF2(cc, dd, aa, bb, X[ 4], 7); + bb = FF2(bb, cc, dd, aa, X[13], 5); + + t = c; c = cc; cc = t; + + // + // Round 4 + // + a = F4(a, b, c, d, X[ 1], 11); + d = F4(d, a, b, c, X[ 9], 12); + c = F4(c, d, a, b, X[11], 14); + b = F4(b, c, d, a, X[10], 15); + a = F4(a, b, c, d, X[ 0], 14); + d = F4(d, a, b, c, X[ 8], 15); + c = F4(c, d, a, b, X[12], 9); + b = F4(b, c, d, a, X[ 4], 8); + a = F4(a, b, c, d, X[13], 9); + d = F4(d, a, b, c, X[ 3], 14); + c = F4(c, d, a, b, X[ 7], 5); + b = F4(b, c, d, a, X[15], 6); + a = F4(a, b, c, d, X[14], 8); + d = F4(d, a, b, c, X[ 5], 6); + c = F4(c, d, a, b, X[ 6], 5); + b = F4(b, c, d, a, X[ 2], 12); + + aa = FF1(aa, bb, cc, dd, X[ 8], 15); + dd = FF1(dd, aa, bb, cc, X[ 6], 5); + cc = FF1(cc, dd, aa, bb, X[ 4], 8); + bb = FF1(bb, cc, dd, aa, X[ 1], 11); + aa = FF1(aa, bb, cc, dd, X[ 3], 14); + dd = FF1(dd, aa, bb, cc, X[11], 14); + cc = FF1(cc, dd, aa, bb, X[15], 6); + bb = FF1(bb, cc, dd, aa, X[ 0], 14); + aa = FF1(aa, bb, cc, dd, X[ 5], 6); + dd = FF1(dd, aa, bb, cc, X[12], 9); + cc = FF1(cc, dd, aa, bb, X[ 2], 12); + bb = FF1(bb, cc, dd, aa, X[13], 9); + aa = FF1(aa, bb, cc, dd, X[ 9], 12); + dd = FF1(dd, aa, bb, cc, X[ 7], 5); + cc = FF1(cc, dd, aa, bb, X[10], 15); + bb = FF1(bb, cc, dd, aa, X[14], 8); + + t = d; d = dd; dd = t; + + H0 += a; + H1 += b; + H2 += c; + H3 += d; + H4 += aa; + H5 += bb; + H6 += cc; + H7 += dd; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD320Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD320Digest.java new file mode 100644 index 0000000..e2cda58 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/RIPEMD320Digest.java @@ -0,0 +1,461 @@ +package org.bouncycastle.crypto.digests; + + +/** + * implementation of RIPEMD 320. + *

        + * Note: this implementation offers the same level of security + * as RIPEMD 160. + */ +public class RIPEMD320Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 40; + + private int H0, H1, H2, H3, H4, H5, H6, H7, H8, H9; // IV's + + private int[] X = new int[16]; + private int xOff; + + /** + * Standard constructor + */ + public RIPEMD320Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public RIPEMD320Digest(RIPEMD320Digest t) + { + super(t); + + H0 = t.H0; + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + H9 = t.H9; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "RIPEMD320"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + X[xOff++] = (in[inOff] & 0xff) | ((in[inOff + 1] & 0xff) << 8) + | ((in[inOff + 2] & 0xff) << 16) | ((in[inOff + 3] & 0xff) << 24); + + if (xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength & 0xffffffff); + X[15] = (int)(bitLength >>> 32); + } + + private void unpackWord( + int word, + byte[] out, + int outOff) + { + out[outOff] = (byte)word; + out[outOff + 1] = (byte)(word >>> 8); + out[outOff + 2] = (byte)(word >>> 16); + out[outOff + 3] = (byte)(word >>> 24); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + unpackWord(H0, out, outOff); + unpackWord(H1, out, outOff + 4); + unpackWord(H2, out, outOff + 8); + unpackWord(H3, out, outOff + 12); + unpackWord(H4, out, outOff + 16); + unpackWord(H5, out, outOff + 20); + unpackWord(H6, out, outOff + 24); + unpackWord(H7, out, outOff + 28); + unpackWord(H8, out, outOff + 32); + unpackWord(H9, out, outOff + 36); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables to the IV values. + */ + public void reset() + { + super.reset(); + + H0 = 0x67452301; + H1 = 0xefcdab89; + H2 = 0x98badcfe; + H3 = 0x10325476; + H4 = 0xc3d2e1f0; + H5 = 0x76543210; + H6 = 0xFEDCBA98; + H7 = 0x89ABCDEF; + H8 = 0x01234567; + H9 = 0x3C2D1E0F; + + xOff = 0; + + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + /* + * rotate int x left n bits. + */ + private int RL( + int x, + int n) + { + return (x << n) | (x >>> (32 - n)); + } + + /* + * f1,f2,f3,f4,f5 are the basic RIPEMD160 functions. + */ + + /* + * rounds 0-15 + */ + private int f1( + int x, + int y, + int z) + { + return x ^ y ^ z; + } + + /* + * rounds 16-31 + */ + private int f2( + int x, + int y, + int z) + { + return (x & y) | (~x & z); + } + + /* + * rounds 32-47 + */ + private int f3( + int x, + int y, + int z) + { + return (x | ~y) ^ z; + } + + /* + * rounds 48-63 + */ + private int f4( + int x, + int y, + int z) + { + return (x & z) | (y & ~z); + } + + /* + * rounds 64-79 + */ + private int f5( + int x, + int y, + int z) + { + return x ^ (y | ~z); + } + + protected void processBlock() + { + int a, aa; + int b, bb; + int c, cc; + int d, dd; + int e, ee; + int t; + + a = H0; + b = H1; + c = H2; + d = H3; + e = H4; + aa = H5; + bb = H6; + cc = H7; + dd = H8; + ee = H9; + + // + // Rounds 1 - 16 + // + // left + a = RL(a + f1(b,c,d) + X[ 0], 11) + e; c = RL(c, 10); + e = RL(e + f1(a,b,c) + X[ 1], 14) + d; b = RL(b, 10); + d = RL(d + f1(e,a,b) + X[ 2], 15) + c; a = RL(a, 10); + c = RL(c + f1(d,e,a) + X[ 3], 12) + b; e = RL(e, 10); + b = RL(b + f1(c,d,e) + X[ 4], 5) + a; d = RL(d, 10); + a = RL(a + f1(b,c,d) + X[ 5], 8) + e; c = RL(c, 10); + e = RL(e + f1(a,b,c) + X[ 6], 7) + d; b = RL(b, 10); + d = RL(d + f1(e,a,b) + X[ 7], 9) + c; a = RL(a, 10); + c = RL(c + f1(d,e,a) + X[ 8], 11) + b; e = RL(e, 10); + b = RL(b + f1(c,d,e) + X[ 9], 13) + a; d = RL(d, 10); + a = RL(a + f1(b,c,d) + X[10], 14) + e; c = RL(c, 10); + e = RL(e + f1(a,b,c) + X[11], 15) + d; b = RL(b, 10); + d = RL(d + f1(e,a,b) + X[12], 6) + c; a = RL(a, 10); + c = RL(c + f1(d,e,a) + X[13], 7) + b; e = RL(e, 10); + b = RL(b + f1(c,d,e) + X[14], 9) + a; d = RL(d, 10); + a = RL(a + f1(b,c,d) + X[15], 8) + e; c = RL(c, 10); + + // right + aa = RL(aa + f5(bb,cc,dd) + X[ 5] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); + ee = RL(ee + f5(aa,bb,cc) + X[14] + 0x50a28be6, 9) + dd; bb = RL(bb, 10); + dd = RL(dd + f5(ee,aa,bb) + X[ 7] + 0x50a28be6, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f5(dd,ee,aa) + X[ 0] + 0x50a28be6, 11) + bb; ee = RL(ee, 10); + bb = RL(bb + f5(cc,dd,ee) + X[ 9] + 0x50a28be6, 13) + aa; dd = RL(dd, 10); + aa = RL(aa + f5(bb,cc,dd) + X[ 2] + 0x50a28be6, 15) + ee; cc = RL(cc, 10); + ee = RL(ee + f5(aa,bb,cc) + X[11] + 0x50a28be6, 15) + dd; bb = RL(bb, 10); + dd = RL(dd + f5(ee,aa,bb) + X[ 4] + 0x50a28be6, 5) + cc; aa = RL(aa, 10); + cc = RL(cc + f5(dd,ee,aa) + X[13] + 0x50a28be6, 7) + bb; ee = RL(ee, 10); + bb = RL(bb + f5(cc,dd,ee) + X[ 6] + 0x50a28be6, 7) + aa; dd = RL(dd, 10); + aa = RL(aa + f5(bb,cc,dd) + X[15] + 0x50a28be6, 8) + ee; cc = RL(cc, 10); + ee = RL(ee + f5(aa,bb,cc) + X[ 8] + 0x50a28be6, 11) + dd; bb = RL(bb, 10); + dd = RL(dd + f5(ee,aa,bb) + X[ 1] + 0x50a28be6, 14) + cc; aa = RL(aa, 10); + cc = RL(cc + f5(dd,ee,aa) + X[10] + 0x50a28be6, 14) + bb; ee = RL(ee, 10); + bb = RL(bb + f5(cc,dd,ee) + X[ 3] + 0x50a28be6, 12) + aa; dd = RL(dd, 10); + aa = RL(aa + f5(bb,cc,dd) + X[12] + 0x50a28be6, 6) + ee; cc = RL(cc, 10); + + t = a; a = aa; aa = t; + + // + // Rounds 16-31 + // + // left + e = RL(e + f2(a,b,c) + X[ 7] + 0x5a827999, 7) + d; b = RL(b, 10); + d = RL(d + f2(e,a,b) + X[ 4] + 0x5a827999, 6) + c; a = RL(a, 10); + c = RL(c + f2(d,e,a) + X[13] + 0x5a827999, 8) + b; e = RL(e, 10); + b = RL(b + f2(c,d,e) + X[ 1] + 0x5a827999, 13) + a; d = RL(d, 10); + a = RL(a + f2(b,c,d) + X[10] + 0x5a827999, 11) + e; c = RL(c, 10); + e = RL(e + f2(a,b,c) + X[ 6] + 0x5a827999, 9) + d; b = RL(b, 10); + d = RL(d + f2(e,a,b) + X[15] + 0x5a827999, 7) + c; a = RL(a, 10); + c = RL(c + f2(d,e,a) + X[ 3] + 0x5a827999, 15) + b; e = RL(e, 10); + b = RL(b + f2(c,d,e) + X[12] + 0x5a827999, 7) + a; d = RL(d, 10); + a = RL(a + f2(b,c,d) + X[ 0] + 0x5a827999, 12) + e; c = RL(c, 10); + e = RL(e + f2(a,b,c) + X[ 9] + 0x5a827999, 15) + d; b = RL(b, 10); + d = RL(d + f2(e,a,b) + X[ 5] + 0x5a827999, 9) + c; a = RL(a, 10); + c = RL(c + f2(d,e,a) + X[ 2] + 0x5a827999, 11) + b; e = RL(e, 10); + b = RL(b + f2(c,d,e) + X[14] + 0x5a827999, 7) + a; d = RL(d, 10); + a = RL(a + f2(b,c,d) + X[11] + 0x5a827999, 13) + e; c = RL(c, 10); + e = RL(e + f2(a,b,c) + X[ 8] + 0x5a827999, 12) + d; b = RL(b, 10); + + // right + ee = RL(ee + f4(aa,bb,cc) + X[ 6] + 0x5c4dd124, 9) + dd; bb = RL(bb, 10); + dd = RL(dd + f4(ee,aa,bb) + X[11] + 0x5c4dd124, 13) + cc; aa = RL(aa, 10); + cc = RL(cc + f4(dd,ee,aa) + X[ 3] + 0x5c4dd124, 15) + bb; ee = RL(ee, 10); + bb = RL(bb + f4(cc,dd,ee) + X[ 7] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); + aa = RL(aa + f4(bb,cc,dd) + X[ 0] + 0x5c4dd124, 12) + ee; cc = RL(cc, 10); + ee = RL(ee + f4(aa,bb,cc) + X[13] + 0x5c4dd124, 8) + dd; bb = RL(bb, 10); + dd = RL(dd + f4(ee,aa,bb) + X[ 5] + 0x5c4dd124, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f4(dd,ee,aa) + X[10] + 0x5c4dd124, 11) + bb; ee = RL(ee, 10); + bb = RL(bb + f4(cc,dd,ee) + X[14] + 0x5c4dd124, 7) + aa; dd = RL(dd, 10); + aa = RL(aa + f4(bb,cc,dd) + X[15] + 0x5c4dd124, 7) + ee; cc = RL(cc, 10); + ee = RL(ee + f4(aa,bb,cc) + X[ 8] + 0x5c4dd124, 12) + dd; bb = RL(bb, 10); + dd = RL(dd + f4(ee,aa,bb) + X[12] + 0x5c4dd124, 7) + cc; aa = RL(aa, 10); + cc = RL(cc + f4(dd,ee,aa) + X[ 4] + 0x5c4dd124, 6) + bb; ee = RL(ee, 10); + bb = RL(bb + f4(cc,dd,ee) + X[ 9] + 0x5c4dd124, 15) + aa; dd = RL(dd, 10); + aa = RL(aa + f4(bb,cc,dd) + X[ 1] + 0x5c4dd124, 13) + ee; cc = RL(cc, 10); + ee = RL(ee + f4(aa,bb,cc) + X[ 2] + 0x5c4dd124, 11) + dd; bb = RL(bb, 10); + + t = b; b = bb; bb = t; + + // + // Rounds 32-47 + // + // left + d = RL(d + f3(e,a,b) + X[ 3] + 0x6ed9eba1, 11) + c; a = RL(a, 10); + c = RL(c + f3(d,e,a) + X[10] + 0x6ed9eba1, 13) + b; e = RL(e, 10); + b = RL(b + f3(c,d,e) + X[14] + 0x6ed9eba1, 6) + a; d = RL(d, 10); + a = RL(a + f3(b,c,d) + X[ 4] + 0x6ed9eba1, 7) + e; c = RL(c, 10); + e = RL(e + f3(a,b,c) + X[ 9] + 0x6ed9eba1, 14) + d; b = RL(b, 10); + d = RL(d + f3(e,a,b) + X[15] + 0x6ed9eba1, 9) + c; a = RL(a, 10); + c = RL(c + f3(d,e,a) + X[ 8] + 0x6ed9eba1, 13) + b; e = RL(e, 10); + b = RL(b + f3(c,d,e) + X[ 1] + 0x6ed9eba1, 15) + a; d = RL(d, 10); + a = RL(a + f3(b,c,d) + X[ 2] + 0x6ed9eba1, 14) + e; c = RL(c, 10); + e = RL(e + f3(a,b,c) + X[ 7] + 0x6ed9eba1, 8) + d; b = RL(b, 10); + d = RL(d + f3(e,a,b) + X[ 0] + 0x6ed9eba1, 13) + c; a = RL(a, 10); + c = RL(c + f3(d,e,a) + X[ 6] + 0x6ed9eba1, 6) + b; e = RL(e, 10); + b = RL(b + f3(c,d,e) + X[13] + 0x6ed9eba1, 5) + a; d = RL(d, 10); + a = RL(a + f3(b,c,d) + X[11] + 0x6ed9eba1, 12) + e; c = RL(c, 10); + e = RL(e + f3(a,b,c) + X[ 5] + 0x6ed9eba1, 7) + d; b = RL(b, 10); + d = RL(d + f3(e,a,b) + X[12] + 0x6ed9eba1, 5) + c; a = RL(a, 10); + + // right + dd = RL(dd + f3(ee,aa,bb) + X[15] + 0x6d703ef3, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f3(dd,ee,aa) + X[ 5] + 0x6d703ef3, 7) + bb; ee = RL(ee, 10); + bb = RL(bb + f3(cc,dd,ee) + X[ 1] + 0x6d703ef3, 15) + aa; dd = RL(dd, 10); + aa = RL(aa + f3(bb,cc,dd) + X[ 3] + 0x6d703ef3, 11) + ee; cc = RL(cc, 10); + ee = RL(ee + f3(aa,bb,cc) + X[ 7] + 0x6d703ef3, 8) + dd; bb = RL(bb, 10); + dd = RL(dd + f3(ee,aa,bb) + X[14] + 0x6d703ef3, 6) + cc; aa = RL(aa, 10); + cc = RL(cc + f3(dd,ee,aa) + X[ 6] + 0x6d703ef3, 6) + bb; ee = RL(ee, 10); + bb = RL(bb + f3(cc,dd,ee) + X[ 9] + 0x6d703ef3, 14) + aa; dd = RL(dd, 10); + aa = RL(aa + f3(bb,cc,dd) + X[11] + 0x6d703ef3, 12) + ee; cc = RL(cc, 10); + ee = RL(ee + f3(aa,bb,cc) + X[ 8] + 0x6d703ef3, 13) + dd; bb = RL(bb, 10); + dd = RL(dd + f3(ee,aa,bb) + X[12] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); + cc = RL(cc + f3(dd,ee,aa) + X[ 2] + 0x6d703ef3, 14) + bb; ee = RL(ee, 10); + bb = RL(bb + f3(cc,dd,ee) + X[10] + 0x6d703ef3, 13) + aa; dd = RL(dd, 10); + aa = RL(aa + f3(bb,cc,dd) + X[ 0] + 0x6d703ef3, 13) + ee; cc = RL(cc, 10); + ee = RL(ee + f3(aa,bb,cc) + X[ 4] + 0x6d703ef3, 7) + dd; bb = RL(bb, 10); + dd = RL(dd + f3(ee,aa,bb) + X[13] + 0x6d703ef3, 5) + cc; aa = RL(aa, 10); + + t = c; c = cc; cc = t; + + // + // Rounds 48-63 + // + // left + c = RL(c + f4(d,e,a) + X[ 1] + 0x8f1bbcdc, 11) + b; e = RL(e, 10); + b = RL(b + f4(c,d,e) + X[ 9] + 0x8f1bbcdc, 12) + a; d = RL(d, 10); + a = RL(a + f4(b,c,d) + X[11] + 0x8f1bbcdc, 14) + e; c = RL(c, 10); + e = RL(e + f4(a,b,c) + X[10] + 0x8f1bbcdc, 15) + d; b = RL(b, 10); + d = RL(d + f4(e,a,b) + X[ 0] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); + c = RL(c + f4(d,e,a) + X[ 8] + 0x8f1bbcdc, 15) + b; e = RL(e, 10); + b = RL(b + f4(c,d,e) + X[12] + 0x8f1bbcdc, 9) + a; d = RL(d, 10); + a = RL(a + f4(b,c,d) + X[ 4] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); + e = RL(e + f4(a,b,c) + X[13] + 0x8f1bbcdc, 9) + d; b = RL(b, 10); + d = RL(d + f4(e,a,b) + X[ 3] + 0x8f1bbcdc, 14) + c; a = RL(a, 10); + c = RL(c + f4(d,e,a) + X[ 7] + 0x8f1bbcdc, 5) + b; e = RL(e, 10); + b = RL(b + f4(c,d,e) + X[15] + 0x8f1bbcdc, 6) + a; d = RL(d, 10); + a = RL(a + f4(b,c,d) + X[14] + 0x8f1bbcdc, 8) + e; c = RL(c, 10); + e = RL(e + f4(a,b,c) + X[ 5] + 0x8f1bbcdc, 6) + d; b = RL(b, 10); + d = RL(d + f4(e,a,b) + X[ 6] + 0x8f1bbcdc, 5) + c; a = RL(a, 10); + c = RL(c + f4(d,e,a) + X[ 2] + 0x8f1bbcdc, 12) + b; e = RL(e, 10); + + // right + cc = RL(cc + f2(dd,ee,aa) + X[ 8] + 0x7a6d76e9, 15) + bb; ee = RL(ee, 10); + bb = RL(bb + f2(cc,dd,ee) + X[ 6] + 0x7a6d76e9, 5) + aa; dd = RL(dd, 10); + aa = RL(aa + f2(bb,cc,dd) + X[ 4] + 0x7a6d76e9, 8) + ee; cc = RL(cc, 10); + ee = RL(ee + f2(aa,bb,cc) + X[ 1] + 0x7a6d76e9, 11) + dd; bb = RL(bb, 10); + dd = RL(dd + f2(ee,aa,bb) + X[ 3] + 0x7a6d76e9, 14) + cc; aa = RL(aa, 10); + cc = RL(cc + f2(dd,ee,aa) + X[11] + 0x7a6d76e9, 14) + bb; ee = RL(ee, 10); + bb = RL(bb + f2(cc,dd,ee) + X[15] + 0x7a6d76e9, 6) + aa; dd = RL(dd, 10); + aa = RL(aa + f2(bb,cc,dd) + X[ 0] + 0x7a6d76e9, 14) + ee; cc = RL(cc, 10); + ee = RL(ee + f2(aa,bb,cc) + X[ 5] + 0x7a6d76e9, 6) + dd; bb = RL(bb, 10); + dd = RL(dd + f2(ee,aa,bb) + X[12] + 0x7a6d76e9, 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f2(dd,ee,aa) + X[ 2] + 0x7a6d76e9, 12) + bb; ee = RL(ee, 10); + bb = RL(bb + f2(cc,dd,ee) + X[13] + 0x7a6d76e9, 9) + aa; dd = RL(dd, 10); + aa = RL(aa + f2(bb,cc,dd) + X[ 9] + 0x7a6d76e9, 12) + ee; cc = RL(cc, 10); + ee = RL(ee + f2(aa,bb,cc) + X[ 7] + 0x7a6d76e9, 5) + dd; bb = RL(bb, 10); + dd = RL(dd + f2(ee,aa,bb) + X[10] + 0x7a6d76e9, 15) + cc; aa = RL(aa, 10); + cc = RL(cc + f2(dd,ee,aa) + X[14] + 0x7a6d76e9, 8) + bb; ee = RL(ee, 10); + + t = d; d = dd; dd = t; + + // + // Rounds 64-79 + // + // left + b = RL(b + f5(c,d,e) + X[ 4] + 0xa953fd4e, 9) + a; d = RL(d, 10); + a = RL(a + f5(b,c,d) + X[ 0] + 0xa953fd4e, 15) + e; c = RL(c, 10); + e = RL(e + f5(a,b,c) + X[ 5] + 0xa953fd4e, 5) + d; b = RL(b, 10); + d = RL(d + f5(e,a,b) + X[ 9] + 0xa953fd4e, 11) + c; a = RL(a, 10); + c = RL(c + f5(d,e,a) + X[ 7] + 0xa953fd4e, 6) + b; e = RL(e, 10); + b = RL(b + f5(c,d,e) + X[12] + 0xa953fd4e, 8) + a; d = RL(d, 10); + a = RL(a + f5(b,c,d) + X[ 2] + 0xa953fd4e, 13) + e; c = RL(c, 10); + e = RL(e + f5(a,b,c) + X[10] + 0xa953fd4e, 12) + d; b = RL(b, 10); + d = RL(d + f5(e,a,b) + X[14] + 0xa953fd4e, 5) + c; a = RL(a, 10); + c = RL(c + f5(d,e,a) + X[ 1] + 0xa953fd4e, 12) + b; e = RL(e, 10); + b = RL(b + f5(c,d,e) + X[ 3] + 0xa953fd4e, 13) + a; d = RL(d, 10); + a = RL(a + f5(b,c,d) + X[ 8] + 0xa953fd4e, 14) + e; c = RL(c, 10); + e = RL(e + f5(a,b,c) + X[11] + 0xa953fd4e, 11) + d; b = RL(b, 10); + d = RL(d + f5(e,a,b) + X[ 6] + 0xa953fd4e, 8) + c; a = RL(a, 10); + c = RL(c + f5(d,e,a) + X[15] + 0xa953fd4e, 5) + b; e = RL(e, 10); + b = RL(b + f5(c,d,e) + X[13] + 0xa953fd4e, 6) + a; d = RL(d, 10); + + // right + bb = RL(bb + f1(cc,dd,ee) + X[12], 8) + aa; dd = RL(dd, 10); + aa = RL(aa + f1(bb,cc,dd) + X[15], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + f1(aa,bb,cc) + X[10], 12) + dd; bb = RL(bb, 10); + dd = RL(dd + f1(ee,aa,bb) + X[ 4], 9) + cc; aa = RL(aa, 10); + cc = RL(cc + f1(dd,ee,aa) + X[ 1], 12) + bb; ee = RL(ee, 10); + bb = RL(bb + f1(cc,dd,ee) + X[ 5], 5) + aa; dd = RL(dd, 10); + aa = RL(aa + f1(bb,cc,dd) + X[ 8], 14) + ee; cc = RL(cc, 10); + ee = RL(ee + f1(aa,bb,cc) + X[ 7], 6) + dd; bb = RL(bb, 10); + dd = RL(dd + f1(ee,aa,bb) + X[ 6], 8) + cc; aa = RL(aa, 10); + cc = RL(cc + f1(dd,ee,aa) + X[ 2], 13) + bb; ee = RL(ee, 10); + bb = RL(bb + f1(cc,dd,ee) + X[13], 6) + aa; dd = RL(dd, 10); + aa = RL(aa + f1(bb,cc,dd) + X[14], 5) + ee; cc = RL(cc, 10); + ee = RL(ee + f1(aa,bb,cc) + X[ 0], 15) + dd; bb = RL(bb, 10); + dd = RL(dd + f1(ee,aa,bb) + X[ 3], 13) + cc; aa = RL(aa, 10); + cc = RL(cc + f1(dd,ee,aa) + X[ 9], 11) + bb; ee = RL(ee, 10); + bb = RL(bb + f1(cc,dd,ee) + X[11], 11) + aa; dd = RL(dd, 10); + + // + // do (e, ee) swap as part of assignment. + // + + H0 += a; + H1 += b; + H2 += c; + H3 += d; + H4 += ee; + H5 += aa; + H6 += bb; + H7 += cc; + H8 += dd; + H9 += e; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/SHA1Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/SHA1Digest.java new file mode 100644 index 0000000..7f8d30a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/SHA1Digest.java @@ -0,0 +1,290 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.util.Pack; + +/** + * implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + * + * It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + * is the "endienness" of the word processing! + */ +public class SHA1Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 20; + + private int H1, H2, H3, H4, H5; + + private int[] X = new int[80]; + private int xOff; + + /** + * Standard constructor + */ + public SHA1Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public SHA1Digest(SHA1Digest t) + { + super(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "SHA-1"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + // Note: Inlined for performance +// X[xOff] = Pack.bigEndianToInt(in, inOff); + int n = in[ inOff] << 24; + n |= (in[++inOff] & 0xff) << 16; + n |= (in[++inOff] & 0xff) << 8; + n |= (in[++inOff] & 0xff); + X[xOff] = n; + + if (++xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength >>> 32); + X[15] = (int)(bitLength & 0xffffffff); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + Pack.intToBigEndian(H1, out, outOff); + Pack.intToBigEndian(H2, out, outOff + 4); + Pack.intToBigEndian(H3, out, outOff + 8); + Pack.intToBigEndian(H4, out, outOff + 12); + Pack.intToBigEndian(H5, out, outOff + 16); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables + */ + public void reset() + { + super.reset(); + + H1 = 0x67452301; + H2 = 0xefcdab89; + H3 = 0x98badcfe; + H4 = 0x10325476; + H5 = 0xc3d2e1f0; + + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + // + // Additive constants + // + private static final int Y1 = 0x5a827999; + private static final int Y2 = 0x6ed9eba1; + private static final int Y3 = 0x8f1bbcdc; + private static final int Y4 = 0xca62c1d6; + + private int f( + int u, + int v, + int w) + { + return ((u & v) | ((~u) & w)); + } + + private int h( + int u, + int v, + int w) + { + return (u ^ v ^ w); + } + + private int g( + int u, + int v, + int w) + { + return ((u & v) | (u & w) | (v & w)); + } + + protected void processBlock() + { + // + // expand 16 word block into 80 word block. + // + for (int i = 16; i < 80; i++) + { + int t = X[i - 3] ^ X[i - 8] ^ X[i - 14] ^ X[i - 16]; + X[i] = t << 1 | t >>> 31; + } + + // + // set up working variables. + // + int A = H1; + int B = H2; + int C = H3; + int D = H4; + int E = H5; + + // + // round 1 + // + int idx = 0; + + for (int j = 0; j < 4; j++) + { + // E = rotateLeft(A, 5) + f(B, C, D) + E + X[idx++] + Y1 + // B = rotateLeft(B, 30) + E += (A << 5 | A >>> 27) + f(B, C, D) + X[idx++] + Y1; + B = B << 30 | B >>> 2; + + D += (E << 5 | E >>> 27) + f(A, B, C) + X[idx++] + Y1; + A = A << 30 | A >>> 2; + + C += (D << 5 | D >>> 27) + f(E, A, B) + X[idx++] + Y1; + E = E << 30 | E >>> 2; + + B += (C << 5 | C >>> 27) + f(D, E, A) + X[idx++] + Y1; + D = D << 30 | D >>> 2; + + A += (B << 5 | B >>> 27) + f(C, D, E) + X[idx++] + Y1; + C = C << 30 | C >>> 2; + } + + // + // round 2 + // + for (int j = 0; j < 4; j++) + { + // E = rotateLeft(A, 5) + h(B, C, D) + E + X[idx++] + Y2 + // B = rotateLeft(B, 30) + E += (A << 5 | A >>> 27) + h(B, C, D) + X[idx++] + Y2; + B = B << 30 | B >>> 2; + + D += (E << 5 | E >>> 27) + h(A, B, C) + X[idx++] + Y2; + A = A << 30 | A >>> 2; + + C += (D << 5 | D >>> 27) + h(E, A, B) + X[idx++] + Y2; + E = E << 30 | E >>> 2; + + B += (C << 5 | C >>> 27) + h(D, E, A) + X[idx++] + Y2; + D = D << 30 | D >>> 2; + + A += (B << 5 | B >>> 27) + h(C, D, E) + X[idx++] + Y2; + C = C << 30 | C >>> 2; + } + + // + // round 3 + // + for (int j = 0; j < 4; j++) + { + // E = rotateLeft(A, 5) + g(B, C, D) + E + X[idx++] + Y3 + // B = rotateLeft(B, 30) + E += (A << 5 | A >>> 27) + g(B, C, D) + X[idx++] + Y3; + B = B << 30 | B >>> 2; + + D += (E << 5 | E >>> 27) + g(A, B, C) + X[idx++] + Y3; + A = A << 30 | A >>> 2; + + C += (D << 5 | D >>> 27) + g(E, A, B) + X[idx++] + Y3; + E = E << 30 | E >>> 2; + + B += (C << 5 | C >>> 27) + g(D, E, A) + X[idx++] + Y3; + D = D << 30 | D >>> 2; + + A += (B << 5 | B >>> 27) + g(C, D, E) + X[idx++] + Y3; + C = C << 30 | C >>> 2; + } + + // + // round 4 + // + for (int j = 0; j <= 3; j++) + { + // E = rotateLeft(A, 5) + h(B, C, D) + E + X[idx++] + Y4 + // B = rotateLeft(B, 30) + E += (A << 5 | A >>> 27) + h(B, C, D) + X[idx++] + Y4; + B = B << 30 | B >>> 2; + + D += (E << 5 | E >>> 27) + h(A, B, C) + X[idx++] + Y4; + A = A << 30 | A >>> 2; + + C += (D << 5 | D >>> 27) + h(E, A, B) + X[idx++] + Y4; + E = E << 30 | E >>> 2; + + B += (C << 5 | C >>> 27) + h(D, E, A) + X[idx++] + Y4; + D = D << 30 | D >>> 2; + + A += (B << 5 | B >>> 27) + h(C, D, E) + X[idx++] + Y4; + C = C << 30 | C >>> 2; + } + + + H1 += A; + H2 += B; + H3 += C; + H4 += D; + H5 += E; + + // + // reset start of the buffer. + // + xOff = 0; + for (int i = 0; i < 16; i++) + { + X[i] = 0; + } + } +} + + + + diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/SHA224Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/SHA224Digest.java new file mode 100644 index 0000000..d144c54 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/SHA224Digest.java @@ -0,0 +1,292 @@ +package org.bouncycastle.crypto.digests; + + +import org.bouncycastle.crypto.digests.GeneralDigest; +import org.bouncycastle.crypto.util.Pack; + + +/** + * SHA-224 as described in RFC 3874 + *

        + *         block  word  digest
        + * SHA-1   512    32    160
        + * SHA-224 512    32    224
        + * SHA-256 512    32    256
        + * SHA-384 1024   64    384
        + * SHA-512 1024   64    512
        + * 
        + */ +public class SHA224Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 28; + + private int H1, H2, H3, H4, H5, H6, H7, H8; + + private int[] X = new int[64]; + private int xOff; + + /** + * Standard constructor + */ + public SHA224Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public SHA224Digest(SHA224Digest t) + { + super(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "SHA-224"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + // Note: Inlined for performance +// X[xOff] = Pack.bigEndianToInt(in, inOff); + int n = in[ inOff] << 24; + n |= (in[++inOff] & 0xff) << 16; + n |= (in[++inOff] & 0xff) << 8; + n |= (in[++inOff] & 0xff); + X[xOff] = n; + + if (++xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength >>> 32); + X[15] = (int)(bitLength & 0xffffffff); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + Pack.intToBigEndian(H1, out, outOff); + Pack.intToBigEndian(H2, out, outOff + 4); + Pack.intToBigEndian(H3, out, outOff + 8); + Pack.intToBigEndian(H4, out, outOff + 12); + Pack.intToBigEndian(H5, out, outOff + 16); + Pack.intToBigEndian(H6, out, outOff + 20); + Pack.intToBigEndian(H7, out, outOff + 24); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables + */ + public void reset() + { + super.reset(); + + /* SHA-224 initial hash value + */ + + H1 = 0xc1059ed8; + H2 = 0x367cd507; + H3 = 0x3070dd17; + H4 = 0xf70e5939; + H5 = 0xffc00b31; + H6 = 0x68581511; + H7 = 0x64f98fa7; + H8 = 0xbefa4fa4; + + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + protected void processBlock() + { + // + // expand 16 word block into 64 word blocks. + // + for (int t = 16; t <= 63; t++) + { + X[t] = Theta1(X[t - 2]) + X[t - 7] + Theta0(X[t - 15]) + X[t - 16]; + } + + // + // set up working variables. + // + int a = H1; + int b = H2; + int c = H3; + int d = H4; + int e = H5; + int f = H6; + int g = H7; + int h = H8; + + + int t = 0; + for(int i = 0; i < 8; i ++) + { + // t = 8 * i + h += Sum1(e) + Ch(e, f, g) + K[t] + X[t]; + d += h; + h += Sum0(a) + Maj(a, b, c); + ++t; + + // t = 8 * i + 1 + g += Sum1(d) + Ch(d, e, f) + K[t] + X[t]; + c += g; + g += Sum0(h) + Maj(h, a, b); + ++t; + + // t = 8 * i + 2 + f += Sum1(c) + Ch(c, d, e) + K[t] + X[t]; + b += f; + f += Sum0(g) + Maj(g, h, a); + ++t; + + // t = 8 * i + 3 + e += Sum1(b) + Ch(b, c, d) + K[t] + X[t]; + a += e; + e += Sum0(f) + Maj(f, g, h); + ++t; + + // t = 8 * i + 4 + d += Sum1(a) + Ch(a, b, c) + K[t] + X[t]; + h += d; + d += Sum0(e) + Maj(e, f, g); + ++t; + + // t = 8 * i + 5 + c += Sum1(h) + Ch(h, a, b) + K[t] + X[t]; + g += c; + c += Sum0(d) + Maj(d, e, f); + ++t; + + // t = 8 * i + 6 + b += Sum1(g) + Ch(g, h, a) + K[t] + X[t]; + f += b; + b += Sum0(c) + Maj(c, d, e); + ++t; + + // t = 8 * i + 7 + a += Sum1(f) + Ch(f, g, h) + K[t] + X[t]; + e += a; + a += Sum0(b) + Maj(b, c, d); + ++t; + } + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + H5 += e; + H6 += f; + H7 += g; + H8 += h; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i < 16; i++) + { + X[i] = 0; + } + } + + /* SHA-224 functions */ + private int Ch( + int x, + int y, + int z) + { + return ((x & y) ^ ((~x) & z)); + } + + private int Maj( + int x, + int y, + int z) + { + return ((x & y) ^ (x & z) ^ (y & z)); + } + + private int Sum0( + int x) + { + return ((x >>> 2) | (x << 30)) ^ ((x >>> 13) | (x << 19)) ^ ((x >>> 22) | (x << 10)); + } + + private int Sum1( + int x) + { + return ((x >>> 6) | (x << 26)) ^ ((x >>> 11) | (x << 21)) ^ ((x >>> 25) | (x << 7)); + } + + private int Theta0( + int x) + { + return ((x >>> 7) | (x << 25)) ^ ((x >>> 18) | (x << 14)) ^ (x >>> 3); + } + + private int Theta1( + int x) + { + return ((x >>> 17) | (x << 15)) ^ ((x >>> 19) | (x << 13)) ^ (x >>> 10); + } + + /* SHA-224 Constants + * (represent the first 32 bits of the fractional parts of the + * cube roots of the first sixty-four prime numbers) + */ + static final int K[] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + }; +} + diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/SHA256Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/SHA256Digest.java new file mode 100644 index 0000000..abd9c1b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/SHA256Digest.java @@ -0,0 +1,295 @@ +package org.bouncycastle.crypto.digests; + + +import org.bouncycastle.crypto.digests.GeneralDigest; +import org.bouncycastle.crypto.util.Pack; + + +/** + * FIPS 180-2 implementation of SHA-256. + * + *
        + *         block  word  digest
        + * SHA-1   512    32    160
        + * SHA-256 512    32    256
        + * SHA-384 1024   64    384
        + * SHA-512 1024   64    512
        + * 
        + */ +public class SHA256Digest + extends GeneralDigest +{ + private static final int DIGEST_LENGTH = 32; + + private int H1, H2, H3, H4, H5, H6, H7, H8; + + private int[] X = new int[64]; + private int xOff; + + /** + * Standard constructor + */ + public SHA256Digest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public SHA256Digest(SHA256Digest t) + { + super(t); + + H1 = t.H1; + H2 = t.H2; + H3 = t.H3; + H4 = t.H4; + H5 = t.H5; + H6 = t.H6; + H7 = t.H7; + H8 = t.H8; + + System.arraycopy(t.X, 0, X, 0, t.X.length); + xOff = t.xOff; + } + + public String getAlgorithmName() + { + return "SHA-256"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + protected void processWord( + byte[] in, + int inOff) + { + // Note: Inlined for performance +// X[xOff] = Pack.bigEndianToInt(in, inOff); + int n = in[inOff] << 24; + n |= (in[++inOff] & 0xff) << 16; + n |= (in[++inOff] & 0xff) << 8; + n |= (in[++inOff] & 0xff); + X[xOff] = n; + + if (++xOff == 16) + { + processBlock(); + } + } + + protected void processLength( + long bitLength) + { + if (xOff > 14) + { + processBlock(); + } + + X[14] = (int)(bitLength >>> 32); + X[15] = (int)(bitLength & 0xffffffff); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + Pack.intToBigEndian(H1, out, outOff); + Pack.intToBigEndian(H2, out, outOff + 4); + Pack.intToBigEndian(H3, out, outOff + 8); + Pack.intToBigEndian(H4, out, outOff + 12); + Pack.intToBigEndian(H5, out, outOff + 16); + Pack.intToBigEndian(H6, out, outOff + 20); + Pack.intToBigEndian(H7, out, outOff + 24); + Pack.intToBigEndian(H8, out, outOff + 28); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables + */ + public void reset() + { + super.reset(); + + /* SHA-256 initial hash value + * The first 32 bits of the fractional parts of the square roots + * of the first eight prime numbers + */ + + H1 = 0x6a09e667; + H2 = 0xbb67ae85; + H3 = 0x3c6ef372; + H4 = 0xa54ff53a; + H5 = 0x510e527f; + H6 = 0x9b05688c; + H7 = 0x1f83d9ab; + H8 = 0x5be0cd19; + + xOff = 0; + for (int i = 0; i != X.length; i++) + { + X[i] = 0; + } + } + + protected void processBlock() + { + // + // expand 16 word block into 64 word blocks. + // + for (int t = 16; t <= 63; t++) + { + X[t] = Theta1(X[t - 2]) + X[t - 7] + Theta0(X[t - 15]) + X[t - 16]; + } + + // + // set up working variables. + // + int a = H1; + int b = H2; + int c = H3; + int d = H4; + int e = H5; + int f = H6; + int g = H7; + int h = H8; + + int t = 0; + for(int i = 0; i < 8; i ++) + { + // t = 8 * i + h += Sum1(e) + Ch(e, f, g) + K[t] + X[t]; + d += h; + h += Sum0(a) + Maj(a, b, c); + ++t; + + // t = 8 * i + 1 + g += Sum1(d) + Ch(d, e, f) + K[t] + X[t]; + c += g; + g += Sum0(h) + Maj(h, a, b); + ++t; + + // t = 8 * i + 2 + f += Sum1(c) + Ch(c, d, e) + K[t] + X[t]; + b += f; + f += Sum0(g) + Maj(g, h, a); + ++t; + + // t = 8 * i + 3 + e += Sum1(b) + Ch(b, c, d) + K[t] + X[t]; + a += e; + e += Sum0(f) + Maj(f, g, h); + ++t; + + // t = 8 * i + 4 + d += Sum1(a) + Ch(a, b, c) + K[t] + X[t]; + h += d; + d += Sum0(e) + Maj(e, f, g); + ++t; + + // t = 8 * i + 5 + c += Sum1(h) + Ch(h, a, b) + K[t] + X[t]; + g += c; + c += Sum0(d) + Maj(d, e, f); + ++t; + + // t = 8 * i + 6 + b += Sum1(g) + Ch(g, h, a) + K[t] + X[t]; + f += b; + b += Sum0(c) + Maj(c, d, e); + ++t; + + // t = 8 * i + 7 + a += Sum1(f) + Ch(f, g, h) + K[t] + X[t]; + e += a; + a += Sum0(b) + Maj(b, c, d); + ++t; + } + + H1 += a; + H2 += b; + H3 += c; + H4 += d; + H5 += e; + H6 += f; + H7 += g; + H8 += h; + + // + // reset the offset and clean out the word buffer. + // + xOff = 0; + for (int i = 0; i < 16; i++) + { + X[i] = 0; + } + } + + /* SHA-256 functions */ + private int Ch( + int x, + int y, + int z) + { + return (x & y) ^ ((~x) & z); + } + + private int Maj( + int x, + int y, + int z) + { + return (x & y) ^ (x & z) ^ (y & z); + } + + private int Sum0( + int x) + { + return ((x >>> 2) | (x << 30)) ^ ((x >>> 13) | (x << 19)) ^ ((x >>> 22) | (x << 10)); + } + + private int Sum1( + int x) + { + return ((x >>> 6) | (x << 26)) ^ ((x >>> 11) | (x << 21)) ^ ((x >>> 25) | (x << 7)); + } + + private int Theta0( + int x) + { + return ((x >>> 7) | (x << 25)) ^ ((x >>> 18) | (x << 14)) ^ (x >>> 3); + } + + private int Theta1( + int x) + { + return ((x >>> 17) | (x << 15)) ^ ((x >>> 19) | (x << 13)) ^ (x >>> 10); + } + + /* SHA-256 Constants + * (represent the first 32 bits of the fractional parts of the + * cube roots of the first sixty-four prime numbers) + */ + static final int K[] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + }; +} + diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/SHA384Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/SHA384Digest.java new file mode 100644 index 0000000..cdd979a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/SHA384Digest.java @@ -0,0 +1,87 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.util.Pack; + + +/** + * FIPS 180-2 implementation of SHA-384. + * + *
        + *         block  word  digest
        + * SHA-1   512    32    160
        + * SHA-256 512    32    256
        + * SHA-384 1024   64    384
        + * SHA-512 1024   64    512
        + * 
        + */ +public class SHA384Digest + extends LongDigest +{ + + private static final int DIGEST_LENGTH = 48; + + /** + * Standard constructor + */ + public SHA384Digest() + { + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public SHA384Digest(SHA384Digest t) + { + super(t); + } + + public String getAlgorithmName() + { + return "SHA-384"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + Pack.longToBigEndian(H1, out, outOff); + Pack.longToBigEndian(H2, out, outOff + 8); + Pack.longToBigEndian(H3, out, outOff + 16); + Pack.longToBigEndian(H4, out, outOff + 24); + Pack.longToBigEndian(H5, out, outOff + 32); + Pack.longToBigEndian(H6, out, outOff + 40); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables + */ + public void reset() + { + super.reset(); + + /* SHA-384 initial hash value + * The first 64 bits of the fractional parts of the square roots + * of the 9th through 16th prime numbers + */ + H1 = 0xcbbb9d5dc1059ed8l; + H2 = 0x629a292a367cd507l; + H3 = 0x9159015a3070dd17l; + H4 = 0x152fecd8f70e5939l; + H5 = 0x67332667ffc00b31l; + H6 = 0x8eb44a8768581511l; + H7 = 0xdb0c2e0d64f98fa7l; + H8 = 0x47b5481dbefa4fa4l; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/SHA512Digest.java b/common/src/main/java/org/bouncycastle/crypto/digests/SHA512Digest.java new file mode 100644 index 0000000..34a8e4e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/SHA512Digest.java @@ -0,0 +1,89 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.util.Pack; + + +/** + * FIPS 180-2 implementation of SHA-512. + * + *
        + *         block  word  digest
        + * SHA-1   512    32    160
        + * SHA-256 512    32    256
        + * SHA-384 1024   64    384
        + * SHA-512 1024   64    512
        + * 
        + */ +public class SHA512Digest + extends LongDigest +{ + private static final int DIGEST_LENGTH = 64; + + /** + * Standard constructor + */ + public SHA512Digest() + { + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public SHA512Digest(SHA512Digest t) + { + super(t); + } + + public String getAlgorithmName() + { + return "SHA-512"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + Pack.longToBigEndian(H1, out, outOff); + Pack.longToBigEndian(H2, out, outOff + 8); + Pack.longToBigEndian(H3, out, outOff + 16); + Pack.longToBigEndian(H4, out, outOff + 24); + Pack.longToBigEndian(H5, out, outOff + 32); + Pack.longToBigEndian(H6, out, outOff + 40); + Pack.longToBigEndian(H7, out, outOff + 48); + Pack.longToBigEndian(H8, out, outOff + 56); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables + */ + public void reset() + { + super.reset(); + + /* SHA-512 initial hash value + * The first 64 bits of the fractional parts of the square roots + * of the first eight prime numbers + */ + H1 = 0x6a09e667f3bcc908L; + H2 = 0xbb67ae8584caa73bL; + H3 = 0x3c6ef372fe94f82bL; + H4 = 0xa54ff53a5f1d36f1L; + H5 = 0x510e527fade682d1L; + H6 = 0x9b05688c2b3e6c1fL; + H7 = 0x1f83d9abfb41bd6bL; + H8 = 0x5be0cd19137e2179L; + } +} + diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/ShortenedDigest.java b/common/src/main/java/org/bouncycastle/crypto/digests/ShortenedDigest.java new file mode 100644 index 0000000..89033e8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/ShortenedDigest.java @@ -0,0 +1,80 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.ExtendedDigest; + +/** + * Wrapper class that reduces the output length of a particular digest to + * only the first n bytes of the digest function. + */ +public class ShortenedDigest + implements ExtendedDigest +{ + private ExtendedDigest baseDigest; + private int length; + + /** + * Base constructor. + * + * @param baseDigest underlying digest to use. + * @param length length in bytes of the output of doFinal. + * @exception IllegalArgumentException if baseDigest is null, or length is greater than baseDigest.getDigestSize(). + */ + public ShortenedDigest( + ExtendedDigest baseDigest, + int length) + { + if (baseDigest == null) + { + throw new IllegalArgumentException("baseDigest must not be null"); + } + + if (length > baseDigest.getDigestSize()) + { + throw new IllegalArgumentException("baseDigest output not large enough to support length"); + } + + this.baseDigest = baseDigest; + this.length = length; + } + + public String getAlgorithmName() + { + return baseDigest.getAlgorithmName() + "(" + length * 8 + ")"; + } + + public int getDigestSize() + { + return length; + } + + public void update(byte in) + { + baseDigest.update(in); + } + + public void update(byte[] in, int inOff, int len) + { + baseDigest.update(in, inOff, len); + } + + public int doFinal(byte[] out, int outOff) + { + byte[] tmp = new byte[baseDigest.getDigestSize()]; + + baseDigest.doFinal(tmp, 0); + + System.arraycopy(tmp, 0, out, outOff, length); + + return length; + } + + public void reset() + { + baseDigest.reset(); + } + + public int getByteLength() + { + return baseDigest.getByteLength(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/TigerDigest.java b/common/src/main/java/org/bouncycastle/crypto/digests/TigerDigest.java new file mode 100644 index 0000000..0062ea9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/TigerDigest.java @@ -0,0 +1,866 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.ExtendedDigest; + +/** + * implementation of Tiger based on: + * + * http://www.cs.technion.ac.il/~biham/Reports/Tiger + */ +public class TigerDigest + implements ExtendedDigest +{ + private static final int BYTE_LENGTH = 64; + + /* + * S-Boxes. + */ + private static final long[] t1 = { + 0x02AAB17CF7E90C5EL /* 0 */, 0xAC424B03E243A8ECL /* 1 */, + 0x72CD5BE30DD5FCD3L /* 2 */, 0x6D019B93F6F97F3AL /* 3 */, + 0xCD9978FFD21F9193L /* 4 */, 0x7573A1C9708029E2L /* 5 */, + 0xB164326B922A83C3L /* 6 */, 0x46883EEE04915870L /* 7 */, + 0xEAACE3057103ECE6L /* 8 */, 0xC54169B808A3535CL /* 9 */, + 0x4CE754918DDEC47CL /* 10 */, 0x0AA2F4DFDC0DF40CL /* 11 */, + 0x10B76F18A74DBEFAL /* 12 */, 0xC6CCB6235AD1AB6AL /* 13 */, + 0x13726121572FE2FFL /* 14 */, 0x1A488C6F199D921EL /* 15 */, + 0x4BC9F9F4DA0007CAL /* 16 */, 0x26F5E6F6E85241C7L /* 17 */, + 0x859079DBEA5947B6L /* 18 */, 0x4F1885C5C99E8C92L /* 19 */, + 0xD78E761EA96F864BL /* 20 */, 0x8E36428C52B5C17DL /* 21 */, + 0x69CF6827373063C1L /* 22 */, 0xB607C93D9BB4C56EL /* 23 */, + 0x7D820E760E76B5EAL /* 24 */, 0x645C9CC6F07FDC42L /* 25 */, + 0xBF38A078243342E0L /* 26 */, 0x5F6B343C9D2E7D04L /* 27 */, + 0xF2C28AEB600B0EC6L /* 28 */, 0x6C0ED85F7254BCACL /* 29 */, + 0x71592281A4DB4FE5L /* 30 */, 0x1967FA69CE0FED9FL /* 31 */, + 0xFD5293F8B96545DBL /* 32 */, 0xC879E9D7F2A7600BL /* 33 */, + 0x860248920193194EL /* 34 */, 0xA4F9533B2D9CC0B3L /* 35 */, + 0x9053836C15957613L /* 36 */, 0xDB6DCF8AFC357BF1L /* 37 */, + 0x18BEEA7A7A370F57L /* 38 */, 0x037117CA50B99066L /* 39 */, + 0x6AB30A9774424A35L /* 40 */, 0xF4E92F02E325249BL /* 41 */, + 0x7739DB07061CCAE1L /* 42 */, 0xD8F3B49CECA42A05L /* 43 */, + 0xBD56BE3F51382F73L /* 44 */, 0x45FAED5843B0BB28L /* 45 */, + 0x1C813D5C11BF1F83L /* 46 */, 0x8AF0E4B6D75FA169L /* 47 */, + 0x33EE18A487AD9999L /* 48 */, 0x3C26E8EAB1C94410L /* 49 */, + 0xB510102BC0A822F9L /* 50 */, 0x141EEF310CE6123BL /* 51 */, + 0xFC65B90059DDB154L /* 52 */, 0xE0158640C5E0E607L /* 53 */, + 0x884E079826C3A3CFL /* 54 */, 0x930D0D9523C535FDL /* 55 */, + 0x35638D754E9A2B00L /* 56 */, 0x4085FCCF40469DD5L /* 57 */, + 0xC4B17AD28BE23A4CL /* 58 */, 0xCAB2F0FC6A3E6A2EL /* 59 */, + 0x2860971A6B943FCDL /* 60 */, 0x3DDE6EE212E30446L /* 61 */, + 0x6222F32AE01765AEL /* 62 */, 0x5D550BB5478308FEL /* 63 */, + 0xA9EFA98DA0EDA22AL /* 64 */, 0xC351A71686C40DA7L /* 65 */, + 0x1105586D9C867C84L /* 66 */, 0xDCFFEE85FDA22853L /* 67 */, + 0xCCFBD0262C5EEF76L /* 68 */, 0xBAF294CB8990D201L /* 69 */, + 0xE69464F52AFAD975L /* 70 */, 0x94B013AFDF133E14L /* 71 */, + 0x06A7D1A32823C958L /* 72 */, 0x6F95FE5130F61119L /* 73 */, + 0xD92AB34E462C06C0L /* 74 */, 0xED7BDE33887C71D2L /* 75 */, + 0x79746D6E6518393EL /* 76 */, 0x5BA419385D713329L /* 77 */, + 0x7C1BA6B948A97564L /* 78 */, 0x31987C197BFDAC67L /* 79 */, + 0xDE6C23C44B053D02L /* 80 */, 0x581C49FED002D64DL /* 81 */, + 0xDD474D6338261571L /* 82 */, 0xAA4546C3E473D062L /* 83 */, + 0x928FCE349455F860L /* 84 */, 0x48161BBACAAB94D9L /* 85 */, + 0x63912430770E6F68L /* 86 */, 0x6EC8A5E602C6641CL /* 87 */, + 0x87282515337DDD2BL /* 88 */, 0x2CDA6B42034B701BL /* 89 */, + 0xB03D37C181CB096DL /* 90 */, 0xE108438266C71C6FL /* 91 */, + 0x2B3180C7EB51B255L /* 92 */, 0xDF92B82F96C08BBCL /* 93 */, + 0x5C68C8C0A632F3BAL /* 94 */, 0x5504CC861C3D0556L /* 95 */, + 0xABBFA4E55FB26B8FL /* 96 */, 0x41848B0AB3BACEB4L /* 97 */, + 0xB334A273AA445D32L /* 98 */, 0xBCA696F0A85AD881L /* 99 */, + 0x24F6EC65B528D56CL /* 100 */, 0x0CE1512E90F4524AL /* 101 */, + 0x4E9DD79D5506D35AL /* 102 */, 0x258905FAC6CE9779L /* 103 */, + 0x2019295B3E109B33L /* 104 */, 0xF8A9478B73A054CCL /* 105 */, + 0x2924F2F934417EB0L /* 106 */, 0x3993357D536D1BC4L /* 107 */, + 0x38A81AC21DB6FF8BL /* 108 */, 0x47C4FBF17D6016BFL /* 109 */, + 0x1E0FAADD7667E3F5L /* 110 */, 0x7ABCFF62938BEB96L /* 111 */, + 0xA78DAD948FC179C9L /* 112 */, 0x8F1F98B72911E50DL /* 113 */, + 0x61E48EAE27121A91L /* 114 */, 0x4D62F7AD31859808L /* 115 */, + 0xECEBA345EF5CEAEBL /* 116 */, 0xF5CEB25EBC9684CEL /* 117 */, + 0xF633E20CB7F76221L /* 118 */, 0xA32CDF06AB8293E4L /* 119 */, + 0x985A202CA5EE2CA4L /* 120 */, 0xCF0B8447CC8A8FB1L /* 121 */, + 0x9F765244979859A3L /* 122 */, 0xA8D516B1A1240017L /* 123 */, + 0x0BD7BA3EBB5DC726L /* 124 */, 0xE54BCA55B86ADB39L /* 125 */, + 0x1D7A3AFD6C478063L /* 126 */, 0x519EC608E7669EDDL /* 127 */, + 0x0E5715A2D149AA23L /* 128 */, 0x177D4571848FF194L /* 129 */, + 0xEEB55F3241014C22L /* 130 */, 0x0F5E5CA13A6E2EC2L /* 131 */, + 0x8029927B75F5C361L /* 132 */, 0xAD139FABC3D6E436L /* 133 */, + 0x0D5DF1A94CCF402FL /* 134 */, 0x3E8BD948BEA5DFC8L /* 135 */, + 0xA5A0D357BD3FF77EL /* 136 */, 0xA2D12E251F74F645L /* 137 */, + 0x66FD9E525E81A082L /* 138 */, 0x2E0C90CE7F687A49L /* 139 */, + 0xC2E8BCBEBA973BC5L /* 140 */, 0x000001BCE509745FL /* 141 */, + 0x423777BBE6DAB3D6L /* 142 */, 0xD1661C7EAEF06EB5L /* 143 */, + 0xA1781F354DAACFD8L /* 144 */, 0x2D11284A2B16AFFCL /* 145 */, + 0xF1FC4F67FA891D1FL /* 146 */, 0x73ECC25DCB920ADAL /* 147 */, + 0xAE610C22C2A12651L /* 148 */, 0x96E0A810D356B78AL /* 149 */, + 0x5A9A381F2FE7870FL /* 150 */, 0xD5AD62EDE94E5530L /* 151 */, + 0xD225E5E8368D1427L /* 152 */, 0x65977B70C7AF4631L /* 153 */, + 0x99F889B2DE39D74FL /* 154 */, 0x233F30BF54E1D143L /* 155 */, + 0x9A9675D3D9A63C97L /* 156 */, 0x5470554FF334F9A8L /* 157 */, + 0x166ACB744A4F5688L /* 158 */, 0x70C74CAAB2E4AEADL /* 159 */, + 0xF0D091646F294D12L /* 160 */, 0x57B82A89684031D1L /* 161 */, + 0xEFD95A5A61BE0B6BL /* 162 */, 0x2FBD12E969F2F29AL /* 163 */, + 0x9BD37013FEFF9FE8L /* 164 */, 0x3F9B0404D6085A06L /* 165 */, + 0x4940C1F3166CFE15L /* 166 */, 0x09542C4DCDF3DEFBL /* 167 */, + 0xB4C5218385CD5CE3L /* 168 */, 0xC935B7DC4462A641L /* 169 */, + 0x3417F8A68ED3B63FL /* 170 */, 0xB80959295B215B40L /* 171 */, + 0xF99CDAEF3B8C8572L /* 172 */, 0x018C0614F8FCB95DL /* 173 */, + 0x1B14ACCD1A3ACDF3L /* 174 */, 0x84D471F200BB732DL /* 175 */, + 0xC1A3110E95E8DA16L /* 176 */, 0x430A7220BF1A82B8L /* 177 */, + 0xB77E090D39DF210EL /* 178 */, 0x5EF4BD9F3CD05E9DL /* 179 */, + 0x9D4FF6DA7E57A444L /* 180 */, 0xDA1D60E183D4A5F8L /* 181 */, + 0xB287C38417998E47L /* 182 */, 0xFE3EDC121BB31886L /* 183 */, + 0xC7FE3CCC980CCBEFL /* 184 */, 0xE46FB590189BFD03L /* 185 */, + 0x3732FD469A4C57DCL /* 186 */, 0x7EF700A07CF1AD65L /* 187 */, + 0x59C64468A31D8859L /* 188 */, 0x762FB0B4D45B61F6L /* 189 */, + 0x155BAED099047718L /* 190 */, 0x68755E4C3D50BAA6L /* 191 */, + 0xE9214E7F22D8B4DFL /* 192 */, 0x2ADDBF532EAC95F4L /* 193 */, + 0x32AE3909B4BD0109L /* 194 */, 0x834DF537B08E3450L /* 195 */, + 0xFA209DA84220728DL /* 196 */, 0x9E691D9B9EFE23F7L /* 197 */, + 0x0446D288C4AE8D7FL /* 198 */, 0x7B4CC524E169785BL /* 199 */, + 0x21D87F0135CA1385L /* 200 */, 0xCEBB400F137B8AA5L /* 201 */, + 0x272E2B66580796BEL /* 202 */, 0x3612264125C2B0DEL /* 203 */, + 0x057702BDAD1EFBB2L /* 204 */, 0xD4BABB8EACF84BE9L /* 205 */, + 0x91583139641BC67BL /* 206 */, 0x8BDC2DE08036E024L /* 207 */, + 0x603C8156F49F68EDL /* 208 */, 0xF7D236F7DBEF5111L /* 209 */, + 0x9727C4598AD21E80L /* 210 */, 0xA08A0896670A5FD7L /* 211 */, + 0xCB4A8F4309EBA9CBL /* 212 */, 0x81AF564B0F7036A1L /* 213 */, + 0xC0B99AA778199ABDL /* 214 */, 0x959F1EC83FC8E952L /* 215 */, + 0x8C505077794A81B9L /* 216 */, 0x3ACAAF8F056338F0L /* 217 */, + 0x07B43F50627A6778L /* 218 */, 0x4A44AB49F5ECCC77L /* 219 */, + 0x3BC3D6E4B679EE98L /* 220 */, 0x9CC0D4D1CF14108CL /* 221 */, + 0x4406C00B206BC8A0L /* 222 */, 0x82A18854C8D72D89L /* 223 */, + 0x67E366B35C3C432CL /* 224 */, 0xB923DD61102B37F2L /* 225 */, + 0x56AB2779D884271DL /* 226 */, 0xBE83E1B0FF1525AFL /* 227 */, + 0xFB7C65D4217E49A9L /* 228 */, 0x6BDBE0E76D48E7D4L /* 229 */, + 0x08DF828745D9179EL /* 230 */, 0x22EA6A9ADD53BD34L /* 231 */, + 0xE36E141C5622200AL /* 232 */, 0x7F805D1B8CB750EEL /* 233 */, + 0xAFE5C7A59F58E837L /* 234 */, 0xE27F996A4FB1C23CL /* 235 */, + 0xD3867DFB0775F0D0L /* 236 */, 0xD0E673DE6E88891AL /* 237 */, + 0x123AEB9EAFB86C25L /* 238 */, 0x30F1D5D5C145B895L /* 239 */, + 0xBB434A2DEE7269E7L /* 240 */, 0x78CB67ECF931FA38L /* 241 */, + 0xF33B0372323BBF9CL /* 242 */, 0x52D66336FB279C74L /* 243 */, + 0x505F33AC0AFB4EAAL /* 244 */, 0xE8A5CD99A2CCE187L /* 245 */, + 0x534974801E2D30BBL /* 246 */, 0x8D2D5711D5876D90L /* 247 */, + 0x1F1A412891BC038EL /* 248 */, 0xD6E2E71D82E56648L /* 249 */, + 0x74036C3A497732B7L /* 250 */, 0x89B67ED96361F5ABL /* 251 */, + 0xFFED95D8F1EA02A2L /* 252 */, 0xE72B3BD61464D43DL /* 253 */, + 0xA6300F170BDC4820L /* 254 */, 0xEBC18760ED78A77AL /* 255 */, + }; + + private static final long[] t2 = { + 0xE6A6BE5A05A12138L /* 256 */, 0xB5A122A5B4F87C98L /* 257 */, + 0x563C6089140B6990L /* 258 */, 0x4C46CB2E391F5DD5L /* 259 */, + 0xD932ADDBC9B79434L /* 260 */, 0x08EA70E42015AFF5L /* 261 */, + 0xD765A6673E478CF1L /* 262 */, 0xC4FB757EAB278D99L /* 263 */, + 0xDF11C6862D6E0692L /* 264 */, 0xDDEB84F10D7F3B16L /* 265 */, + 0x6F2EF604A665EA04L /* 266 */, 0x4A8E0F0FF0E0DFB3L /* 267 */, + 0xA5EDEEF83DBCBA51L /* 268 */, 0xFC4F0A2A0EA4371EL /* 269 */, + 0xE83E1DA85CB38429L /* 270 */, 0xDC8FF882BA1B1CE2L /* 271 */, + 0xCD45505E8353E80DL /* 272 */, 0x18D19A00D4DB0717L /* 273 */, + 0x34A0CFEDA5F38101L /* 274 */, 0x0BE77E518887CAF2L /* 275 */, + 0x1E341438B3C45136L /* 276 */, 0xE05797F49089CCF9L /* 277 */, + 0xFFD23F9DF2591D14L /* 278 */, 0x543DDA228595C5CDL /* 279 */, + 0x661F81FD99052A33L /* 280 */, 0x8736E641DB0F7B76L /* 281 */, + 0x15227725418E5307L /* 282 */, 0xE25F7F46162EB2FAL /* 283 */, + 0x48A8B2126C13D9FEL /* 284 */, 0xAFDC541792E76EEAL /* 285 */, + 0x03D912BFC6D1898FL /* 286 */, 0x31B1AAFA1B83F51BL /* 287 */, + 0xF1AC2796E42AB7D9L /* 288 */, 0x40A3A7D7FCD2EBACL /* 289 */, + 0x1056136D0AFBBCC5L /* 290 */, 0x7889E1DD9A6D0C85L /* 291 */, + 0xD33525782A7974AAL /* 292 */, 0xA7E25D09078AC09BL /* 293 */, + 0xBD4138B3EAC6EDD0L /* 294 */, 0x920ABFBE71EB9E70L /* 295 */, + 0xA2A5D0F54FC2625CL /* 296 */, 0xC054E36B0B1290A3L /* 297 */, + 0xF6DD59FF62FE932BL /* 298 */, 0x3537354511A8AC7DL /* 299 */, + 0xCA845E9172FADCD4L /* 300 */, 0x84F82B60329D20DCL /* 301 */, + 0x79C62CE1CD672F18L /* 302 */, 0x8B09A2ADD124642CL /* 303 */, + 0xD0C1E96A19D9E726L /* 304 */, 0x5A786A9B4BA9500CL /* 305 */, + 0x0E020336634C43F3L /* 306 */, 0xC17B474AEB66D822L /* 307 */, + 0x6A731AE3EC9BAAC2L /* 308 */, 0x8226667AE0840258L /* 309 */, + 0x67D4567691CAECA5L /* 310 */, 0x1D94155C4875ADB5L /* 311 */, + 0x6D00FD985B813FDFL /* 312 */, 0x51286EFCB774CD06L /* 313 */, + 0x5E8834471FA744AFL /* 314 */, 0xF72CA0AEE761AE2EL /* 315 */, + 0xBE40E4CDAEE8E09AL /* 316 */, 0xE9970BBB5118F665L /* 317 */, + 0x726E4BEB33DF1964L /* 318 */, 0x703B000729199762L /* 319 */, + 0x4631D816F5EF30A7L /* 320 */, 0xB880B5B51504A6BEL /* 321 */, + 0x641793C37ED84B6CL /* 322 */, 0x7B21ED77F6E97D96L /* 323 */, + 0x776306312EF96B73L /* 324 */, 0xAE528948E86FF3F4L /* 325 */, + 0x53DBD7F286A3F8F8L /* 326 */, 0x16CADCE74CFC1063L /* 327 */, + 0x005C19BDFA52C6DDL /* 328 */, 0x68868F5D64D46AD3L /* 329 */, + 0x3A9D512CCF1E186AL /* 330 */, 0x367E62C2385660AEL /* 331 */, + 0xE359E7EA77DCB1D7L /* 332 */, 0x526C0773749ABE6EL /* 333 */, + 0x735AE5F9D09F734BL /* 334 */, 0x493FC7CC8A558BA8L /* 335 */, + 0xB0B9C1533041AB45L /* 336 */, 0x321958BA470A59BDL /* 337 */, + 0x852DB00B5F46C393L /* 338 */, 0x91209B2BD336B0E5L /* 339 */, + 0x6E604F7D659EF19FL /* 340 */, 0xB99A8AE2782CCB24L /* 341 */, + 0xCCF52AB6C814C4C7L /* 342 */, 0x4727D9AFBE11727BL /* 343 */, + 0x7E950D0C0121B34DL /* 344 */, 0x756F435670AD471FL /* 345 */, + 0xF5ADD442615A6849L /* 346 */, 0x4E87E09980B9957AL /* 347 */, + 0x2ACFA1DF50AEE355L /* 348 */, 0xD898263AFD2FD556L /* 349 */, + 0xC8F4924DD80C8FD6L /* 350 */, 0xCF99CA3D754A173AL /* 351 */, + 0xFE477BACAF91BF3CL /* 352 */, 0xED5371F6D690C12DL /* 353 */, + 0x831A5C285E687094L /* 354 */, 0xC5D3C90A3708A0A4L /* 355 */, + 0x0F7F903717D06580L /* 356 */, 0x19F9BB13B8FDF27FL /* 357 */, + 0xB1BD6F1B4D502843L /* 358 */, 0x1C761BA38FFF4012L /* 359 */, + 0x0D1530C4E2E21F3BL /* 360 */, 0x8943CE69A7372C8AL /* 361 */, + 0xE5184E11FEB5CE66L /* 362 */, 0x618BDB80BD736621L /* 363 */, + 0x7D29BAD68B574D0BL /* 364 */, 0x81BB613E25E6FE5BL /* 365 */, + 0x071C9C10BC07913FL /* 366 */, 0xC7BEEB7909AC2D97L /* 367 */, + 0xC3E58D353BC5D757L /* 368 */, 0xEB017892F38F61E8L /* 369 */, + 0xD4EFFB9C9B1CC21AL /* 370 */, 0x99727D26F494F7ABL /* 371 */, + 0xA3E063A2956B3E03L /* 372 */, 0x9D4A8B9A4AA09C30L /* 373 */, + 0x3F6AB7D500090FB4L /* 374 */, 0x9CC0F2A057268AC0L /* 375 */, + 0x3DEE9D2DEDBF42D1L /* 376 */, 0x330F49C87960A972L /* 377 */, + 0xC6B2720287421B41L /* 378 */, 0x0AC59EC07C00369CL /* 379 */, + 0xEF4EAC49CB353425L /* 380 */, 0xF450244EEF0129D8L /* 381 */, + 0x8ACC46E5CAF4DEB6L /* 382 */, 0x2FFEAB63989263F7L /* 383 */, + 0x8F7CB9FE5D7A4578L /* 384 */, 0x5BD8F7644E634635L /* 385 */, + 0x427A7315BF2DC900L /* 386 */, 0x17D0C4AA2125261CL /* 387 */, + 0x3992486C93518E50L /* 388 */, 0xB4CBFEE0A2D7D4C3L /* 389 */, + 0x7C75D6202C5DDD8DL /* 390 */, 0xDBC295D8E35B6C61L /* 391 */, + 0x60B369D302032B19L /* 392 */, 0xCE42685FDCE44132L /* 393 */, + 0x06F3DDB9DDF65610L /* 394 */, 0x8EA4D21DB5E148F0L /* 395 */, + 0x20B0FCE62FCD496FL /* 396 */, 0x2C1B912358B0EE31L /* 397 */, + 0xB28317B818F5A308L /* 398 */, 0xA89C1E189CA6D2CFL /* 399 */, + 0x0C6B18576AAADBC8L /* 400 */, 0xB65DEAA91299FAE3L /* 401 */, + 0xFB2B794B7F1027E7L /* 402 */, 0x04E4317F443B5BEBL /* 403 */, + 0x4B852D325939D0A6L /* 404 */, 0xD5AE6BEEFB207FFCL /* 405 */, + 0x309682B281C7D374L /* 406 */, 0xBAE309A194C3B475L /* 407 */, + 0x8CC3F97B13B49F05L /* 408 */, 0x98A9422FF8293967L /* 409 */, + 0x244B16B01076FF7CL /* 410 */, 0xF8BF571C663D67EEL /* 411 */, + 0x1F0D6758EEE30DA1L /* 412 */, 0xC9B611D97ADEB9B7L /* 413 */, + 0xB7AFD5887B6C57A2L /* 414 */, 0x6290AE846B984FE1L /* 415 */, + 0x94DF4CDEACC1A5FDL /* 416 */, 0x058A5BD1C5483AFFL /* 417 */, + 0x63166CC142BA3C37L /* 418 */, 0x8DB8526EB2F76F40L /* 419 */, + 0xE10880036F0D6D4EL /* 420 */, 0x9E0523C9971D311DL /* 421 */, + 0x45EC2824CC7CD691L /* 422 */, 0x575B8359E62382C9L /* 423 */, + 0xFA9E400DC4889995L /* 424 */, 0xD1823ECB45721568L /* 425 */, + 0xDAFD983B8206082FL /* 426 */, 0xAA7D29082386A8CBL /* 427 */, + 0x269FCD4403B87588L /* 428 */, 0x1B91F5F728BDD1E0L /* 429 */, + 0xE4669F39040201F6L /* 430 */, 0x7A1D7C218CF04ADEL /* 431 */, + 0x65623C29D79CE5CEL /* 432 */, 0x2368449096C00BB1L /* 433 */, + 0xAB9BF1879DA503BAL /* 434 */, 0xBC23ECB1A458058EL /* 435 */, + 0x9A58DF01BB401ECCL /* 436 */, 0xA070E868A85F143DL /* 437 */, + 0x4FF188307DF2239EL /* 438 */, 0x14D565B41A641183L /* 439 */, + 0xEE13337452701602L /* 440 */, 0x950E3DCF3F285E09L /* 441 */, + 0x59930254B9C80953L /* 442 */, 0x3BF299408930DA6DL /* 443 */, + 0xA955943F53691387L /* 444 */, 0xA15EDECAA9CB8784L /* 445 */, + 0x29142127352BE9A0L /* 446 */, 0x76F0371FFF4E7AFBL /* 447 */, + 0x0239F450274F2228L /* 448 */, 0xBB073AF01D5E868BL /* 449 */, + 0xBFC80571C10E96C1L /* 450 */, 0xD267088568222E23L /* 451 */, + 0x9671A3D48E80B5B0L /* 452 */, 0x55B5D38AE193BB81L /* 453 */, + 0x693AE2D0A18B04B8L /* 454 */, 0x5C48B4ECADD5335FL /* 455 */, + 0xFD743B194916A1CAL /* 456 */, 0x2577018134BE98C4L /* 457 */, + 0xE77987E83C54A4ADL /* 458 */, 0x28E11014DA33E1B9L /* 459 */, + 0x270CC59E226AA213L /* 460 */, 0x71495F756D1A5F60L /* 461 */, + 0x9BE853FB60AFEF77L /* 462 */, 0xADC786A7F7443DBFL /* 463 */, + 0x0904456173B29A82L /* 464 */, 0x58BC7A66C232BD5EL /* 465 */, + 0xF306558C673AC8B2L /* 466 */, 0x41F639C6B6C9772AL /* 467 */, + 0x216DEFE99FDA35DAL /* 468 */, 0x11640CC71C7BE615L /* 469 */, + 0x93C43694565C5527L /* 470 */, 0xEA038E6246777839L /* 471 */, + 0xF9ABF3CE5A3E2469L /* 472 */, 0x741E768D0FD312D2L /* 473 */, + 0x0144B883CED652C6L /* 474 */, 0xC20B5A5BA33F8552L /* 475 */, + 0x1AE69633C3435A9DL /* 476 */, 0x97A28CA4088CFDECL /* 477 */, + 0x8824A43C1E96F420L /* 478 */, 0x37612FA66EEEA746L /* 479 */, + 0x6B4CB165F9CF0E5AL /* 480 */, 0x43AA1C06A0ABFB4AL /* 481 */, + 0x7F4DC26FF162796BL /* 482 */, 0x6CBACC8E54ED9B0FL /* 483 */, + 0xA6B7FFEFD2BB253EL /* 484 */, 0x2E25BC95B0A29D4FL /* 485 */, + 0x86D6A58BDEF1388CL /* 486 */, 0xDED74AC576B6F054L /* 487 */, + 0x8030BDBC2B45805DL /* 488 */, 0x3C81AF70E94D9289L /* 489 */, + 0x3EFF6DDA9E3100DBL /* 490 */, 0xB38DC39FDFCC8847L /* 491 */, + 0x123885528D17B87EL /* 492 */, 0xF2DA0ED240B1B642L /* 493 */, + 0x44CEFADCD54BF9A9L /* 494 */, 0x1312200E433C7EE6L /* 495 */, + 0x9FFCC84F3A78C748L /* 496 */, 0xF0CD1F72248576BBL /* 497 */, + 0xEC6974053638CFE4L /* 498 */, 0x2BA7B67C0CEC4E4CL /* 499 */, + 0xAC2F4DF3E5CE32EDL /* 500 */, 0xCB33D14326EA4C11L /* 501 */, + 0xA4E9044CC77E58BCL /* 502 */, 0x5F513293D934FCEFL /* 503 */, + 0x5DC9645506E55444L /* 504 */, 0x50DE418F317DE40AL /* 505 */, + 0x388CB31A69DDE259L /* 506 */, 0x2DB4A83455820A86L /* 507 */, + 0x9010A91E84711AE9L /* 508 */, 0x4DF7F0B7B1498371L /* 509 */, + 0xD62A2EABC0977179L /* 510 */, 0x22FAC097AA8D5C0EL /* 511 */, + }; + + private static final long[] t3 = { + 0xF49FCC2FF1DAF39BL /* 512 */, 0x487FD5C66FF29281L /* 513 */, + 0xE8A30667FCDCA83FL /* 514 */, 0x2C9B4BE3D2FCCE63L /* 515 */, + 0xDA3FF74B93FBBBC2L /* 516 */, 0x2FA165D2FE70BA66L /* 517 */, + 0xA103E279970E93D4L /* 518 */, 0xBECDEC77B0E45E71L /* 519 */, + 0xCFB41E723985E497L /* 520 */, 0xB70AAA025EF75017L /* 521 */, + 0xD42309F03840B8E0L /* 522 */, 0x8EFC1AD035898579L /* 523 */, + 0x96C6920BE2B2ABC5L /* 524 */, 0x66AF4163375A9172L /* 525 */, + 0x2174ABDCCA7127FBL /* 526 */, 0xB33CCEA64A72FF41L /* 527 */, + 0xF04A4933083066A5L /* 528 */, 0x8D970ACDD7289AF5L /* 529 */, + 0x8F96E8E031C8C25EL /* 530 */, 0xF3FEC02276875D47L /* 531 */, + 0xEC7BF310056190DDL /* 532 */, 0xF5ADB0AEBB0F1491L /* 533 */, + 0x9B50F8850FD58892L /* 534 */, 0x4975488358B74DE8L /* 535 */, + 0xA3354FF691531C61L /* 536 */, 0x0702BBE481D2C6EEL /* 537 */, + 0x89FB24057DEDED98L /* 538 */, 0xAC3075138596E902L /* 539 */, + 0x1D2D3580172772EDL /* 540 */, 0xEB738FC28E6BC30DL /* 541 */, + 0x5854EF8F63044326L /* 542 */, 0x9E5C52325ADD3BBEL /* 543 */, + 0x90AA53CF325C4623L /* 544 */, 0xC1D24D51349DD067L /* 545 */, + 0x2051CFEEA69EA624L /* 546 */, 0x13220F0A862E7E4FL /* 547 */, + 0xCE39399404E04864L /* 548 */, 0xD9C42CA47086FCB7L /* 549 */, + 0x685AD2238A03E7CCL /* 550 */, 0x066484B2AB2FF1DBL /* 551 */, + 0xFE9D5D70EFBF79ECL /* 552 */, 0x5B13B9DD9C481854L /* 553 */, + 0x15F0D475ED1509ADL /* 554 */, 0x0BEBCD060EC79851L /* 555 */, + 0xD58C6791183AB7F8L /* 556 */, 0xD1187C5052F3EEE4L /* 557 */, + 0xC95D1192E54E82FFL /* 558 */, 0x86EEA14CB9AC6CA2L /* 559 */, + 0x3485BEB153677D5DL /* 560 */, 0xDD191D781F8C492AL /* 561 */, + 0xF60866BAA784EBF9L /* 562 */, 0x518F643BA2D08C74L /* 563 */, + 0x8852E956E1087C22L /* 564 */, 0xA768CB8DC410AE8DL /* 565 */, + 0x38047726BFEC8E1AL /* 566 */, 0xA67738B4CD3B45AAL /* 567 */, + 0xAD16691CEC0DDE19L /* 568 */, 0xC6D4319380462E07L /* 569 */, + 0xC5A5876D0BA61938L /* 570 */, 0x16B9FA1FA58FD840L /* 571 */, + 0x188AB1173CA74F18L /* 572 */, 0xABDA2F98C99C021FL /* 573 */, + 0x3E0580AB134AE816L /* 574 */, 0x5F3B05B773645ABBL /* 575 */, + 0x2501A2BE5575F2F6L /* 576 */, 0x1B2F74004E7E8BA9L /* 577 */, + 0x1CD7580371E8D953L /* 578 */, 0x7F6ED89562764E30L /* 579 */, + 0xB15926FF596F003DL /* 580 */, 0x9F65293DA8C5D6B9L /* 581 */, + 0x6ECEF04DD690F84CL /* 582 */, 0x4782275FFF33AF88L /* 583 */, + 0xE41433083F820801L /* 584 */, 0xFD0DFE409A1AF9B5L /* 585 */, + 0x4325A3342CDB396BL /* 586 */, 0x8AE77E62B301B252L /* 587 */, + 0xC36F9E9F6655615AL /* 588 */, 0x85455A2D92D32C09L /* 589 */, + 0xF2C7DEA949477485L /* 590 */, 0x63CFB4C133A39EBAL /* 591 */, + 0x83B040CC6EBC5462L /* 592 */, 0x3B9454C8FDB326B0L /* 593 */, + 0x56F56A9E87FFD78CL /* 594 */, 0x2DC2940D99F42BC6L /* 595 */, + 0x98F7DF096B096E2DL /* 596 */, 0x19A6E01E3AD852BFL /* 597 */, + 0x42A99CCBDBD4B40BL /* 598 */, 0xA59998AF45E9C559L /* 599 */, + 0x366295E807D93186L /* 600 */, 0x6B48181BFAA1F773L /* 601 */, + 0x1FEC57E2157A0A1DL /* 602 */, 0x4667446AF6201AD5L /* 603 */, + 0xE615EBCACFB0F075L /* 604 */, 0xB8F31F4F68290778L /* 605 */, + 0x22713ED6CE22D11EL /* 606 */, 0x3057C1A72EC3C93BL /* 607 */, + 0xCB46ACC37C3F1F2FL /* 608 */, 0xDBB893FD02AAF50EL /* 609 */, + 0x331FD92E600B9FCFL /* 610 */, 0xA498F96148EA3AD6L /* 611 */, + 0xA8D8426E8B6A83EAL /* 612 */, 0xA089B274B7735CDCL /* 613 */, + 0x87F6B3731E524A11L /* 614 */, 0x118808E5CBC96749L /* 615 */, + 0x9906E4C7B19BD394L /* 616 */, 0xAFED7F7E9B24A20CL /* 617 */, + 0x6509EADEEB3644A7L /* 618 */, 0x6C1EF1D3E8EF0EDEL /* 619 */, + 0xB9C97D43E9798FB4L /* 620 */, 0xA2F2D784740C28A3L /* 621 */, + 0x7B8496476197566FL /* 622 */, 0x7A5BE3E6B65F069DL /* 623 */, + 0xF96330ED78BE6F10L /* 624 */, 0xEEE60DE77A076A15L /* 625 */, + 0x2B4BEE4AA08B9BD0L /* 626 */, 0x6A56A63EC7B8894EL /* 627 */, + 0x02121359BA34FEF4L /* 628 */, 0x4CBF99F8283703FCL /* 629 */, + 0x398071350CAF30C8L /* 630 */, 0xD0A77A89F017687AL /* 631 */, + 0xF1C1A9EB9E423569L /* 632 */, 0x8C7976282DEE8199L /* 633 */, + 0x5D1737A5DD1F7ABDL /* 634 */, 0x4F53433C09A9FA80L /* 635 */, + 0xFA8B0C53DF7CA1D9L /* 636 */, 0x3FD9DCBC886CCB77L /* 637 */, + 0xC040917CA91B4720L /* 638 */, 0x7DD00142F9D1DCDFL /* 639 */, + 0x8476FC1D4F387B58L /* 640 */, 0x23F8E7C5F3316503L /* 641 */, + 0x032A2244E7E37339L /* 642 */, 0x5C87A5D750F5A74BL /* 643 */, + 0x082B4CC43698992EL /* 644 */, 0xDF917BECB858F63CL /* 645 */, + 0x3270B8FC5BF86DDAL /* 646 */, 0x10AE72BB29B5DD76L /* 647 */, + 0x576AC94E7700362BL /* 648 */, 0x1AD112DAC61EFB8FL /* 649 */, + 0x691BC30EC5FAA427L /* 650 */, 0xFF246311CC327143L /* 651 */, + 0x3142368E30E53206L /* 652 */, 0x71380E31E02CA396L /* 653 */, + 0x958D5C960AAD76F1L /* 654 */, 0xF8D6F430C16DA536L /* 655 */, + 0xC8FFD13F1BE7E1D2L /* 656 */, 0x7578AE66004DDBE1L /* 657 */, + 0x05833F01067BE646L /* 658 */, 0xBB34B5AD3BFE586DL /* 659 */, + 0x095F34C9A12B97F0L /* 660 */, 0x247AB64525D60CA8L /* 661 */, + 0xDCDBC6F3017477D1L /* 662 */, 0x4A2E14D4DECAD24DL /* 663 */, + 0xBDB5E6D9BE0A1EEBL /* 664 */, 0x2A7E70F7794301ABL /* 665 */, + 0xDEF42D8A270540FDL /* 666 */, 0x01078EC0A34C22C1L /* 667 */, + 0xE5DE511AF4C16387L /* 668 */, 0x7EBB3A52BD9A330AL /* 669 */, + 0x77697857AA7D6435L /* 670 */, 0x004E831603AE4C32L /* 671 */, + 0xE7A21020AD78E312L /* 672 */, 0x9D41A70C6AB420F2L /* 673 */, + 0x28E06C18EA1141E6L /* 674 */, 0xD2B28CBD984F6B28L /* 675 */, + 0x26B75F6C446E9D83L /* 676 */, 0xBA47568C4D418D7FL /* 677 */, + 0xD80BADBFE6183D8EL /* 678 */, 0x0E206D7F5F166044L /* 679 */, + 0xE258A43911CBCA3EL /* 680 */, 0x723A1746B21DC0BCL /* 681 */, + 0xC7CAA854F5D7CDD3L /* 682 */, 0x7CAC32883D261D9CL /* 683 */, + 0x7690C26423BA942CL /* 684 */, 0x17E55524478042B8L /* 685 */, + 0xE0BE477656A2389FL /* 686 */, 0x4D289B5E67AB2DA0L /* 687 */, + 0x44862B9C8FBBFD31L /* 688 */, 0xB47CC8049D141365L /* 689 */, + 0x822C1B362B91C793L /* 690 */, 0x4EB14655FB13DFD8L /* 691 */, + 0x1ECBBA0714E2A97BL /* 692 */, 0x6143459D5CDE5F14L /* 693 */, + 0x53A8FBF1D5F0AC89L /* 694 */, 0x97EA04D81C5E5B00L /* 695 */, + 0x622181A8D4FDB3F3L /* 696 */, 0xE9BCD341572A1208L /* 697 */, + 0x1411258643CCE58AL /* 698 */, 0x9144C5FEA4C6E0A4L /* 699 */, + 0x0D33D06565CF620FL /* 700 */, 0x54A48D489F219CA1L /* 701 */, + 0xC43E5EAC6D63C821L /* 702 */, 0xA9728B3A72770DAFL /* 703 */, + 0xD7934E7B20DF87EFL /* 704 */, 0xE35503B61A3E86E5L /* 705 */, + 0xCAE321FBC819D504L /* 706 */, 0x129A50B3AC60BFA6L /* 707 */, + 0xCD5E68EA7E9FB6C3L /* 708 */, 0xB01C90199483B1C7L /* 709 */, + 0x3DE93CD5C295376CL /* 710 */, 0xAED52EDF2AB9AD13L /* 711 */, + 0x2E60F512C0A07884L /* 712 */, 0xBC3D86A3E36210C9L /* 713 */, + 0x35269D9B163951CEL /* 714 */, 0x0C7D6E2AD0CDB5FAL /* 715 */, + 0x59E86297D87F5733L /* 716 */, 0x298EF221898DB0E7L /* 717 */, + 0x55000029D1A5AA7EL /* 718 */, 0x8BC08AE1B5061B45L /* 719 */, + 0xC2C31C2B6C92703AL /* 720 */, 0x94CC596BAF25EF42L /* 721 */, + 0x0A1D73DB22540456L /* 722 */, 0x04B6A0F9D9C4179AL /* 723 */, + 0xEFFDAFA2AE3D3C60L /* 724 */, 0xF7C8075BB49496C4L /* 725 */, + 0x9CC5C7141D1CD4E3L /* 726 */, 0x78BD1638218E5534L /* 727 */, + 0xB2F11568F850246AL /* 728 */, 0xEDFABCFA9502BC29L /* 729 */, + 0x796CE5F2DA23051BL /* 730 */, 0xAAE128B0DC93537CL /* 731 */, + 0x3A493DA0EE4B29AEL /* 732 */, 0xB5DF6B2C416895D7L /* 733 */, + 0xFCABBD25122D7F37L /* 734 */, 0x70810B58105DC4B1L /* 735 */, + 0xE10FDD37F7882A90L /* 736 */, 0x524DCAB5518A3F5CL /* 737 */, + 0x3C9E85878451255BL /* 738 */, 0x4029828119BD34E2L /* 739 */, + 0x74A05B6F5D3CECCBL /* 740 */, 0xB610021542E13ECAL /* 741 */, + 0x0FF979D12F59E2ACL /* 742 */, 0x6037DA27E4F9CC50L /* 743 */, + 0x5E92975A0DF1847DL /* 744 */, 0xD66DE190D3E623FEL /* 745 */, + 0x5032D6B87B568048L /* 746 */, 0x9A36B7CE8235216EL /* 747 */, + 0x80272A7A24F64B4AL /* 748 */, 0x93EFED8B8C6916F7L /* 749 */, + 0x37DDBFF44CCE1555L /* 750 */, 0x4B95DB5D4B99BD25L /* 751 */, + 0x92D3FDA169812FC0L /* 752 */, 0xFB1A4A9A90660BB6L /* 753 */, + 0x730C196946A4B9B2L /* 754 */, 0x81E289AA7F49DA68L /* 755 */, + 0x64669A0F83B1A05FL /* 756 */, 0x27B3FF7D9644F48BL /* 757 */, + 0xCC6B615C8DB675B3L /* 758 */, 0x674F20B9BCEBBE95L /* 759 */, + 0x6F31238275655982L /* 760 */, 0x5AE488713E45CF05L /* 761 */, + 0xBF619F9954C21157L /* 762 */, 0xEABAC46040A8EAE9L /* 763 */, + 0x454C6FE9F2C0C1CDL /* 764 */, 0x419CF6496412691CL /* 765 */, + 0xD3DC3BEF265B0F70L /* 766 */, 0x6D0E60F5C3578A9EL /* 767 */, + }; + + private static final long[] t4 = { + 0x5B0E608526323C55L /* 768 */, 0x1A46C1A9FA1B59F5L /* 769 */, + 0xA9E245A17C4C8FFAL /* 770 */, 0x65CA5159DB2955D7L /* 771 */, + 0x05DB0A76CE35AFC2L /* 772 */, 0x81EAC77EA9113D45L /* 773 */, + 0x528EF88AB6AC0A0DL /* 774 */, 0xA09EA253597BE3FFL /* 775 */, + 0x430DDFB3AC48CD56L /* 776 */, 0xC4B3A67AF45CE46FL /* 777 */, + 0x4ECECFD8FBE2D05EL /* 778 */, 0x3EF56F10B39935F0L /* 779 */, + 0x0B22D6829CD619C6L /* 780 */, 0x17FD460A74DF2069L /* 781 */, + 0x6CF8CC8E8510ED40L /* 782 */, 0xD6C824BF3A6ECAA7L /* 783 */, + 0x61243D581A817049L /* 784 */, 0x048BACB6BBC163A2L /* 785 */, + 0xD9A38AC27D44CC32L /* 786 */, 0x7FDDFF5BAAF410ABL /* 787 */, + 0xAD6D495AA804824BL /* 788 */, 0xE1A6A74F2D8C9F94L /* 789 */, + 0xD4F7851235DEE8E3L /* 790 */, 0xFD4B7F886540D893L /* 791 */, + 0x247C20042AA4BFDAL /* 792 */, 0x096EA1C517D1327CL /* 793 */, + 0xD56966B4361A6685L /* 794 */, 0x277DA5C31221057DL /* 795 */, + 0x94D59893A43ACFF7L /* 796 */, 0x64F0C51CCDC02281L /* 797 */, + 0x3D33BCC4FF6189DBL /* 798 */, 0xE005CB184CE66AF1L /* 799 */, + 0xFF5CCD1D1DB99BEAL /* 800 */, 0xB0B854A7FE42980FL /* 801 */, + 0x7BD46A6A718D4B9FL /* 802 */, 0xD10FA8CC22A5FD8CL /* 803 */, + 0xD31484952BE4BD31L /* 804 */, 0xC7FA975FCB243847L /* 805 */, + 0x4886ED1E5846C407L /* 806 */, 0x28CDDB791EB70B04L /* 807 */, + 0xC2B00BE2F573417FL /* 808 */, 0x5C9590452180F877L /* 809 */, + 0x7A6BDDFFF370EB00L /* 810 */, 0xCE509E38D6D9D6A4L /* 811 */, + 0xEBEB0F00647FA702L /* 812 */, 0x1DCC06CF76606F06L /* 813 */, + 0xE4D9F28BA286FF0AL /* 814 */, 0xD85A305DC918C262L /* 815 */, + 0x475B1D8732225F54L /* 816 */, 0x2D4FB51668CCB5FEL /* 817 */, + 0xA679B9D9D72BBA20L /* 818 */, 0x53841C0D912D43A5L /* 819 */, + 0x3B7EAA48BF12A4E8L /* 820 */, 0x781E0E47F22F1DDFL /* 821 */, + 0xEFF20CE60AB50973L /* 822 */, 0x20D261D19DFFB742L /* 823 */, + 0x16A12B03062A2E39L /* 824 */, 0x1960EB2239650495L /* 825 */, + 0x251C16FED50EB8B8L /* 826 */, 0x9AC0C330F826016EL /* 827 */, + 0xED152665953E7671L /* 828 */, 0x02D63194A6369570L /* 829 */, + 0x5074F08394B1C987L /* 830 */, 0x70BA598C90B25CE1L /* 831 */, + 0x794A15810B9742F6L /* 832 */, 0x0D5925E9FCAF8C6CL /* 833 */, + 0x3067716CD868744EL /* 834 */, 0x910AB077E8D7731BL /* 835 */, + 0x6A61BBDB5AC42F61L /* 836 */, 0x93513EFBF0851567L /* 837 */, + 0xF494724B9E83E9D5L /* 838 */, 0xE887E1985C09648DL /* 839 */, + 0x34B1D3C675370CFDL /* 840 */, 0xDC35E433BC0D255DL /* 841 */, + 0xD0AAB84234131BE0L /* 842 */, 0x08042A50B48B7EAFL /* 843 */, + 0x9997C4EE44A3AB35L /* 844 */, 0x829A7B49201799D0L /* 845 */, + 0x263B8307B7C54441L /* 846 */, 0x752F95F4FD6A6CA6L /* 847 */, + 0x927217402C08C6E5L /* 848 */, 0x2A8AB754A795D9EEL /* 849 */, + 0xA442F7552F72943DL /* 850 */, 0x2C31334E19781208L /* 851 */, + 0x4FA98D7CEAEE6291L /* 852 */, 0x55C3862F665DB309L /* 853 */, + 0xBD0610175D53B1F3L /* 854 */, 0x46FE6CB840413F27L /* 855 */, + 0x3FE03792DF0CFA59L /* 856 */, 0xCFE700372EB85E8FL /* 857 */, + 0xA7BE29E7ADBCE118L /* 858 */, 0xE544EE5CDE8431DDL /* 859 */, + 0x8A781B1B41F1873EL /* 860 */, 0xA5C94C78A0D2F0E7L /* 861 */, + 0x39412E2877B60728L /* 862 */, 0xA1265EF3AFC9A62CL /* 863 */, + 0xBCC2770C6A2506C5L /* 864 */, 0x3AB66DD5DCE1CE12L /* 865 */, + 0xE65499D04A675B37L /* 866 */, 0x7D8F523481BFD216L /* 867 */, + 0x0F6F64FCEC15F389L /* 868 */, 0x74EFBE618B5B13C8L /* 869 */, + 0xACDC82B714273E1DL /* 870 */, 0xDD40BFE003199D17L /* 871 */, + 0x37E99257E7E061F8L /* 872 */, 0xFA52626904775AAAL /* 873 */, + 0x8BBBF63A463D56F9L /* 874 */, 0xF0013F1543A26E64L /* 875 */, + 0xA8307E9F879EC898L /* 876 */, 0xCC4C27A4150177CCL /* 877 */, + 0x1B432F2CCA1D3348L /* 878 */, 0xDE1D1F8F9F6FA013L /* 879 */, + 0x606602A047A7DDD6L /* 880 */, 0xD237AB64CC1CB2C7L /* 881 */, + 0x9B938E7225FCD1D3L /* 882 */, 0xEC4E03708E0FF476L /* 883 */, + 0xFEB2FBDA3D03C12DL /* 884 */, 0xAE0BCED2EE43889AL /* 885 */, + 0x22CB8923EBFB4F43L /* 886 */, 0x69360D013CF7396DL /* 887 */, + 0x855E3602D2D4E022L /* 888 */, 0x073805BAD01F784CL /* 889 */, + 0x33E17A133852F546L /* 890 */, 0xDF4874058AC7B638L /* 891 */, + 0xBA92B29C678AA14AL /* 892 */, 0x0CE89FC76CFAADCDL /* 893 */, + 0x5F9D4E0908339E34L /* 894 */, 0xF1AFE9291F5923B9L /* 895 */, + 0x6E3480F60F4A265FL /* 896 */, 0xEEBF3A2AB29B841CL /* 897 */, + 0xE21938A88F91B4ADL /* 898 */, 0x57DFEFF845C6D3C3L /* 899 */, + 0x2F006B0BF62CAAF2L /* 900 */, 0x62F479EF6F75EE78L /* 901 */, + 0x11A55AD41C8916A9L /* 902 */, 0xF229D29084FED453L /* 903 */, + 0x42F1C27B16B000E6L /* 904 */, 0x2B1F76749823C074L /* 905 */, + 0x4B76ECA3C2745360L /* 906 */, 0x8C98F463B91691BDL /* 907 */, + 0x14BCC93CF1ADE66AL /* 908 */, 0x8885213E6D458397L /* 909 */, + 0x8E177DF0274D4711L /* 910 */, 0xB49B73B5503F2951L /* 911 */, + 0x10168168C3F96B6BL /* 912 */, 0x0E3D963B63CAB0AEL /* 913 */, + 0x8DFC4B5655A1DB14L /* 914 */, 0xF789F1356E14DE5CL /* 915 */, + 0x683E68AF4E51DAC1L /* 916 */, 0xC9A84F9D8D4B0FD9L /* 917 */, + 0x3691E03F52A0F9D1L /* 918 */, 0x5ED86E46E1878E80L /* 919 */, + 0x3C711A0E99D07150L /* 920 */, 0x5A0865B20C4E9310L /* 921 */, + 0x56FBFC1FE4F0682EL /* 922 */, 0xEA8D5DE3105EDF9BL /* 923 */, + 0x71ABFDB12379187AL /* 924 */, 0x2EB99DE1BEE77B9CL /* 925 */, + 0x21ECC0EA33CF4523L /* 926 */, 0x59A4D7521805C7A1L /* 927 */, + 0x3896F5EB56AE7C72L /* 928 */, 0xAA638F3DB18F75DCL /* 929 */, + 0x9F39358DABE9808EL /* 930 */, 0xB7DEFA91C00B72ACL /* 931 */, + 0x6B5541FD62492D92L /* 932 */, 0x6DC6DEE8F92E4D5BL /* 933 */, + 0x353F57ABC4BEEA7EL /* 934 */, 0x735769D6DA5690CEL /* 935 */, + 0x0A234AA642391484L /* 936 */, 0xF6F9508028F80D9DL /* 937 */, + 0xB8E319A27AB3F215L /* 938 */, 0x31AD9C1151341A4DL /* 939 */, + 0x773C22A57BEF5805L /* 940 */, 0x45C7561A07968633L /* 941 */, + 0xF913DA9E249DBE36L /* 942 */, 0xDA652D9B78A64C68L /* 943 */, + 0x4C27A97F3BC334EFL /* 944 */, 0x76621220E66B17F4L /* 945 */, + 0x967743899ACD7D0BL /* 946 */, 0xF3EE5BCAE0ED6782L /* 947 */, + 0x409F753600C879FCL /* 948 */, 0x06D09A39B5926DB6L /* 949 */, + 0x6F83AEB0317AC588L /* 950 */, 0x01E6CA4A86381F21L /* 951 */, + 0x66FF3462D19F3025L /* 952 */, 0x72207C24DDFD3BFBL /* 953 */, + 0x4AF6B6D3E2ECE2EBL /* 954 */, 0x9C994DBEC7EA08DEL /* 955 */, + 0x49ACE597B09A8BC4L /* 956 */, 0xB38C4766CF0797BAL /* 957 */, + 0x131B9373C57C2A75L /* 958 */, 0xB1822CCE61931E58L /* 959 */, + 0x9D7555B909BA1C0CL /* 960 */, 0x127FAFDD937D11D2L /* 961 */, + 0x29DA3BADC66D92E4L /* 962 */, 0xA2C1D57154C2ECBCL /* 963 */, + 0x58C5134D82F6FE24L /* 964 */, 0x1C3AE3515B62274FL /* 965 */, + 0xE907C82E01CB8126L /* 966 */, 0xF8ED091913E37FCBL /* 967 */, + 0x3249D8F9C80046C9L /* 968 */, 0x80CF9BEDE388FB63L /* 969 */, + 0x1881539A116CF19EL /* 970 */, 0x5103F3F76BD52457L /* 971 */, + 0x15B7E6F5AE47F7A8L /* 972 */, 0xDBD7C6DED47E9CCFL /* 973 */, + 0x44E55C410228BB1AL /* 974 */, 0xB647D4255EDB4E99L /* 975 */, + 0x5D11882BB8AAFC30L /* 976 */, 0xF5098BBB29D3212AL /* 977 */, + 0x8FB5EA14E90296B3L /* 978 */, 0x677B942157DD025AL /* 979 */, + 0xFB58E7C0A390ACB5L /* 980 */, 0x89D3674C83BD4A01L /* 981 */, + 0x9E2DA4DF4BF3B93BL /* 982 */, 0xFCC41E328CAB4829L /* 983 */, + 0x03F38C96BA582C52L /* 984 */, 0xCAD1BDBD7FD85DB2L /* 985 */, + 0xBBB442C16082AE83L /* 986 */, 0xB95FE86BA5DA9AB0L /* 987 */, + 0xB22E04673771A93FL /* 988 */, 0x845358C9493152D8L /* 989 */, + 0xBE2A488697B4541EL /* 990 */, 0x95A2DC2DD38E6966L /* 991 */, + 0xC02C11AC923C852BL /* 992 */, 0x2388B1990DF2A87BL /* 993 */, + 0x7C8008FA1B4F37BEL /* 994 */, 0x1F70D0C84D54E503L /* 995 */, + 0x5490ADEC7ECE57D4L /* 996 */, 0x002B3C27D9063A3AL /* 997 */, + 0x7EAEA3848030A2BFL /* 998 */, 0xC602326DED2003C0L /* 999 */, + 0x83A7287D69A94086L /* 1000 */, 0xC57A5FCB30F57A8AL /* 1001 */, + 0xB56844E479EBE779L /* 1002 */, 0xA373B40F05DCBCE9L /* 1003 */, + 0xD71A786E88570EE2L /* 1004 */, 0x879CBACDBDE8F6A0L /* 1005 */, + 0x976AD1BCC164A32FL /* 1006 */, 0xAB21E25E9666D78BL /* 1007 */, + 0x901063AAE5E5C33CL /* 1008 */, 0x9818B34448698D90L /* 1009 */, + 0xE36487AE3E1E8ABBL /* 1010 */, 0xAFBDF931893BDCB4L /* 1011 */, + 0x6345A0DC5FBBD519L /* 1012 */, 0x8628FE269B9465CAL /* 1013 */, + 0x1E5D01603F9C51ECL /* 1014 */, 0x4DE44006A15049B7L /* 1015 */, + 0xBF6C70E5F776CBB1L /* 1016 */, 0x411218F2EF552BEDL /* 1017 */, + 0xCB0C0708705A36A3L /* 1018 */, 0xE74D14754F986044L /* 1019 */, + 0xCD56D9430EA8280EL /* 1020 */, 0xC12591D7535F5065L /* 1021 */, + 0xC83223F1720AEF96L /* 1022 */, 0xC3A0396F7363A51FL /* 1023 */ + }; + + private static final int DIGEST_LENGTH = 24; + + // + // registers + // + private long a, b, c; + private long byteCount; + + // + // buffers + // + private byte[] buf = new byte[8]; + private int bOff = 0; + + private long[] x = new long[8]; + private int xOff = 0; + + /** + * Standard constructor + */ + public TigerDigest() + { + reset(); + } + + /** + * Copy constructor. This will copy the state of the provided + * message digest. + */ + public TigerDigest(TigerDigest t) + { + a = t.a; + b = t.b; + c = t.c; + + System.arraycopy(t.x, 0, x, 0, t.x.length); + xOff = t.xOff; + + System.arraycopy(t.buf, 0, buf, 0, t.buf.length); + bOff = t.bOff; + + byteCount = t.byteCount; + } + + public String getAlgorithmName() + { + return "Tiger"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH; + } + + private void processWord( + byte[] b, + int off) + { + x[xOff++] = ((long)(b[off + 7] & 0xff) << 56) + | ((long)(b[off + 6] & 0xff) << 48) + | ((long)(b[off + 5] & 0xff) << 40) + | ((long)(b[off + 4] & 0xff) << 32) + | ((long)(b[off + 3] & 0xff) << 24) + | ((long)(b[off + 2] & 0xff) << 16) + | ((long)(b[off + 1] & 0xff) << 8) + | ((b[off + 0] & 0xff)); + + if (xOff == x.length) + { + processBlock(); + } + + bOff = 0; + } + + public void update( + byte in) + { + buf[bOff++] = in; + + if (bOff == buf.length) + { + processWord(buf, 0); + } + + byteCount++; + } + + public void update( + byte[] in, + int inOff, + int len) + { + // + // fill the current word + // + while ((bOff != 0) && (len > 0)) + { + update(in[inOff]); + + inOff++; + len--; + } + + // + // process whole words. + // + while (len > 8) + { + processWord(in, inOff); + + inOff += 8; + len -= 8; + byteCount += 8; + } + + // + // load in the remainder. + // + while (len > 0) + { + update(in[inOff]); + + inOff++; + len--; + } + } + + private void roundABC( + long x, + long mul) + { + c ^= x ; + a -= t1[(int)c & 0xff] ^ t2[(int)(c >> 16) & 0xff] + ^ t3[(int)(c >> 32) & 0xff] ^ t4[(int)(c >> 48) & 0xff]; + b += t4[(int)(c >> 8) & 0xff] ^ t3[(int)(c >> 24) & 0xff] + ^ t2[(int)(c >> 40) & 0xff] ^ t1[(int)(c >> 56) & 0xff]; + b *= mul; + } + + private void roundBCA( + long x, + long mul) + { + a ^= x ; + b -= t1[(int)a & 0xff] ^ t2[(int)(a >> 16) & 0xff] + ^ t3[(int)(a >> 32) & 0xff] ^ t4[(int)(a >> 48) & 0xff]; + c += t4[(int)(a >> 8) & 0xff] ^ t3[(int)(a >> 24) & 0xff] + ^ t2[(int)(a >> 40) & 0xff] ^ t1[(int)(a >> 56) & 0xff]; + c *= mul; + } + + private void roundCAB( + long x, + long mul) + { + b ^= x ; + c -= t1[(int)b & 0xff] ^ t2[(int)(b >> 16) & 0xff] + ^ t3[(int)(b >> 32) & 0xff] ^ t4[(int)(b >> 48) & 0xff]; + a += t4[(int)(b >> 8) & 0xff] ^ t3[(int)(b >> 24) & 0xff] + ^ t2[(int)(b >> 40) & 0xff] ^ t1[(int)(b >> 56) & 0xff]; + a *= mul; + } + + private void keySchedule() + { + x[0] -= x[7] ^ 0xA5A5A5A5A5A5A5A5L; + x[1] ^= x[0]; + x[2] += x[1]; + x[3] -= x[2] ^ ((~x[1]) << 19); + x[4] ^= x[3]; + x[5] += x[4]; + x[6] -= x[5] ^ ((~x[4]) >>> 23); + x[7] ^= x[6]; + x[0] += x[7]; + x[1] -= x[0] ^ ((~x[7]) << 19); + x[2] ^= x[1]; + x[3] += x[2]; + x[4] -= x[3] ^ ((~x[2]) >>> 23); + x[5] ^= x[4]; + x[6] += x[5]; + x[7] -= x[6] ^ 0x0123456789ABCDEFL; + } + + private void processBlock() + { + // + // save abc + // + long aa = a; + long bb = b; + long cc = c; + + // + // rounds and schedule + // + roundABC(x[0], 5); + roundBCA(x[1], 5); + roundCAB(x[2], 5); + roundABC(x[3], 5); + roundBCA(x[4], 5); + roundCAB(x[5], 5); + roundABC(x[6], 5); + roundBCA(x[7], 5); + + keySchedule(); + + roundCAB(x[0], 7); + roundABC(x[1], 7); + roundBCA(x[2], 7); + roundCAB(x[3], 7); + roundABC(x[4], 7); + roundBCA(x[5], 7); + roundCAB(x[6], 7); + roundABC(x[7], 7); + + keySchedule(); + + roundBCA(x[0], 9); + roundCAB(x[1], 9); + roundABC(x[2], 9); + roundBCA(x[3], 9); + roundCAB(x[4], 9); + roundABC(x[5], 9); + roundBCA(x[6], 9); + roundCAB(x[7], 9); + + // + // feed forward + // + a ^= aa; + b -= bb; + c += cc; + + // + // clear the x buffer + // + xOff = 0; + for (int i = 0; i != x.length; i++) + { + x[i] = 0; + } + } + + public void unpackWord( + long r, + byte[] out, + int outOff) + { + out[outOff + 7] = (byte)(r >> 56); + out[outOff + 6] = (byte)(r >> 48); + out[outOff + 5] = (byte)(r >> 40); + out[outOff + 4] = (byte)(r >> 32); + out[outOff + 3] = (byte)(r >> 24); + out[outOff + 2] = (byte)(r >> 16); + out[outOff + 1] = (byte)(r >> 8); + out[outOff] = (byte)r; + } + + private void processLength( + long bitLength) + { + x[7] = bitLength; + } + + private void finish() + { + long bitLength = (byteCount << 3); + + update((byte)0x01); + + while (bOff != 0) + { + update((byte)0); + } + + processLength(bitLength); + + processBlock(); + } + + public int doFinal( + byte[] out, + int outOff) + { + finish(); + + unpackWord(a, out, outOff); + unpackWord(b, out, outOff + 8); + unpackWord(c, out, outOff + 16); + + reset(); + + return DIGEST_LENGTH; + } + + /** + * reset the chaining variables + */ + public void reset() + { + a = 0x0123456789ABCDEFL; + b = 0xFEDCBA9876543210L; + c = 0xF096A5B4C3B2E187L; + + xOff = 0; + for (int i = 0; i != x.length; i++) + { + x[i] = 0; + } + + bOff = 0; + for (int i = 0; i != buf.length; i++) + { + buf[i] = 0; + } + + byteCount = 0; + } + + public int getByteLength() + { + return BYTE_LENGTH; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/digests/WhirlpoolDigest.java b/common/src/main/java/org/bouncycastle/crypto/digests/WhirlpoolDigest.java new file mode 100644 index 0000000..6d35047 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/digests/WhirlpoolDigest.java @@ -0,0 +1,396 @@ +package org.bouncycastle.crypto.digests; + +import org.bouncycastle.crypto.ExtendedDigest; +import org.bouncycastle.util.Arrays; + + +/** + * Implementation of WhirlpoolDigest, based on Java source published by Barreto + * and Rijmen. + * + */ +public final class WhirlpoolDigest + implements ExtendedDigest +{ + private static final int BYTE_LENGTH = 64; + + private static final int DIGEST_LENGTH_BYTES = 512 / 8; + private static final int ROUNDS = 10; + private static final int REDUCTION_POLYNOMIAL = 0x011d; // 2^8 + 2^4 + 2^3 + 2 + 1; + + private static final int[] SBOX = { + 0x18, 0x23, 0xc6, 0xe8, 0x87, 0xb8, 0x01, 0x4f, 0x36, 0xa6, 0xd2, 0xf5, 0x79, 0x6f, 0x91, 0x52, + 0x60, 0xbc, 0x9b, 0x8e, 0xa3, 0x0c, 0x7b, 0x35, 0x1d, 0xe0, 0xd7, 0xc2, 0x2e, 0x4b, 0xfe, 0x57, + 0x15, 0x77, 0x37, 0xe5, 0x9f, 0xf0, 0x4a, 0xda, 0x58, 0xc9, 0x29, 0x0a, 0xb1, 0xa0, 0x6b, 0x85, + 0xbd, 0x5d, 0x10, 0xf4, 0xcb, 0x3e, 0x05, 0x67, 0xe4, 0x27, 0x41, 0x8b, 0xa7, 0x7d, 0x95, 0xd8, + 0xfb, 0xee, 0x7c, 0x66, 0xdd, 0x17, 0x47, 0x9e, 0xca, 0x2d, 0xbf, 0x07, 0xad, 0x5a, 0x83, 0x33, + 0x63, 0x02, 0xaa, 0x71, 0xc8, 0x19, 0x49, 0xd9, 0xf2, 0xe3, 0x5b, 0x88, 0x9a, 0x26, 0x32, 0xb0, + 0xe9, 0x0f, 0xd5, 0x80, 0xbe, 0xcd, 0x34, 0x48, 0xff, 0x7a, 0x90, 0x5f, 0x20, 0x68, 0x1a, 0xae, + 0xb4, 0x54, 0x93, 0x22, 0x64, 0xf1, 0x73, 0x12, 0x40, 0x08, 0xc3, 0xec, 0xdb, 0xa1, 0x8d, 0x3d, + 0x97, 0x00, 0xcf, 0x2b, 0x76, 0x82, 0xd6, 0x1b, 0xb5, 0xaf, 0x6a, 0x50, 0x45, 0xf3, 0x30, 0xef, + 0x3f, 0x55, 0xa2, 0xea, 0x65, 0xba, 0x2f, 0xc0, 0xde, 0x1c, 0xfd, 0x4d, 0x92, 0x75, 0x06, 0x8a, + 0xb2, 0xe6, 0x0e, 0x1f, 0x62, 0xd4, 0xa8, 0x96, 0xf9, 0xc5, 0x25, 0x59, 0x84, 0x72, 0x39, 0x4c, + 0x5e, 0x78, 0x38, 0x8c, 0xd1, 0xa5, 0xe2, 0x61, 0xb3, 0x21, 0x9c, 0x1e, 0x43, 0xc7, 0xfc, 0x04, + 0x51, 0x99, 0x6d, 0x0d, 0xfa, 0xdf, 0x7e, 0x24, 0x3b, 0xab, 0xce, 0x11, 0x8f, 0x4e, 0xb7, 0xeb, + 0x3c, 0x81, 0x94, 0xf7, 0xb9, 0x13, 0x2c, 0xd3, 0xe7, 0x6e, 0xc4, 0x03, 0x56, 0x44, 0x7f, 0xa9, + 0x2a, 0xbb, 0xc1, 0x53, 0xdc, 0x0b, 0x9d, 0x6c, 0x31, 0x74, 0xf6, 0x46, 0xac, 0x89, 0x14, 0xe1, + 0x16, 0x3a, 0x69, 0x09, 0x70, 0xb6, 0xd0, 0xed, 0xcc, 0x42, 0x98, 0xa4, 0x28, 0x5c, 0xf8, 0x86 + }; + + private static final long[] C0 = new long[256]; + private static final long[] C1 = new long[256]; + private static final long[] C2 = new long[256]; + private static final long[] C3 = new long[256]; + private static final long[] C4 = new long[256]; + private static final long[] C5 = new long[256]; + private static final long[] C6 = new long[256]; + private static final long[] C7 = new long[256]; + + private final long[] _rc = new long[ROUNDS + 1]; + + public WhirlpoolDigest() + { + for (int i = 0; i < 256; i++) + { + int v1 = SBOX[i]; + int v2 = maskWithReductionPolynomial(v1 << 1); + int v4 = maskWithReductionPolynomial(v2 << 1); + int v5 = v4 ^ v1; + int v8 = maskWithReductionPolynomial(v4 << 1); + int v9 = v8 ^ v1; + + C0[i] = packIntoLong(v1, v1, v4, v1, v8, v5, v2, v9); + C1[i] = packIntoLong(v9, v1, v1, v4, v1, v8, v5, v2); + C2[i] = packIntoLong(v2, v9, v1, v1, v4, v1, v8, v5); + C3[i] = packIntoLong(v5, v2, v9, v1, v1, v4, v1, v8); + C4[i] = packIntoLong(v8, v5, v2, v9, v1, v1, v4, v1); + C5[i] = packIntoLong(v1, v8, v5, v2, v9, v1, v1, v4); + C6[i] = packIntoLong(v4, v1, v8, v5, v2, v9, v1, v1); + C7[i] = packIntoLong(v1, v4, v1, v8, v5, v2, v9, v1); + + } + + _rc[0] = 0L; + for (int r = 1; r <= ROUNDS; r++) + { + int i = 8 * (r - 1); + _rc[r] = (C0[i ] & 0xff00000000000000L) ^ + (C1[i + 1] & 0x00ff000000000000L) ^ + (C2[i + 2] & 0x0000ff0000000000L) ^ + (C3[i + 3] & 0x000000ff00000000L) ^ + (C4[i + 4] & 0x00000000ff000000L) ^ + (C5[i + 5] & 0x0000000000ff0000L) ^ + (C6[i + 6] & 0x000000000000ff00L) ^ + (C7[i + 7] & 0x00000000000000ffL); + } + + } + + private long packIntoLong(int b7, int b6, int b5, int b4, int b3, int b2, int b1, int b0) + { + return + ((long)b7 << 56) ^ + ((long)b6 << 48) ^ + ((long)b5 << 40) ^ + ((long)b4 << 32) ^ + ((long)b3 << 24) ^ + ((long)b2 << 16) ^ + ((long)b1 << 8) ^ + b0; + } + + /* + * int's are used to prevent sign extension. The values that are really being used are + * actually just 0..255 + */ + private int maskWithReductionPolynomial(int input) + { + int rv = input; + if (rv >= 0x100L) // high bit set + { + rv ^= REDUCTION_POLYNOMIAL; // reduced by the polynomial + } + return rv; + } + + // --------------------------------------------------------------------------------------// + + // -- buffer information -- + private static final int BITCOUNT_ARRAY_SIZE = 32; + private byte[] _buffer = new byte[64]; + private int _bufferPos = 0; + private short[] _bitCount = new short[BITCOUNT_ARRAY_SIZE]; + + // -- internal hash state -- + private long[] _hash = new long[8]; + private long[] _K = new long[8]; // the round key + private long[] _L = new long[8]; + private long[] _block = new long[8]; // mu (buffer) + private long[] _state = new long[8]; // the current "cipher" state + + + + /** + * Copy constructor. This will copy the state of the provided message + * digest. + */ + public WhirlpoolDigest(WhirlpoolDigest originalDigest) + { + System.arraycopy(originalDigest._rc, 0, _rc, 0, _rc.length); + + System.arraycopy(originalDigest._buffer, 0, _buffer, 0, _buffer.length); + + this._bufferPos = originalDigest._bufferPos; + System.arraycopy(originalDigest._bitCount, 0, _bitCount, 0, _bitCount.length); + + // -- internal hash state -- + System.arraycopy(originalDigest._hash, 0, _hash, 0, _hash.length); + System.arraycopy(originalDigest._K, 0, _K, 0, _K.length); + System.arraycopy(originalDigest._L, 0, _L, 0, _L.length); + System.arraycopy(originalDigest._block, 0, _block, 0, _block.length); + System.arraycopy(originalDigest._state, 0, _state, 0, _state.length); + } + + public String getAlgorithmName() + { + return "Whirlpool"; + } + + public int getDigestSize() + { + return DIGEST_LENGTH_BYTES; + } + + public int doFinal(byte[] out, int outOff) + { + // sets out[outOff] .. out[outOff+DIGEST_LENGTH_BYTES] + finish(); + + for (int i = 0; i < 8; i++) + { + convertLongToByteArray(_hash[i], out, outOff + (i * 8)); + } + + reset(); + return getDigestSize(); + } + + /** + * reset the chaining variables + */ + public void reset() + { + // set variables to null, blank, whatever + _bufferPos = 0; + Arrays.fill(_bitCount, (short)0); + Arrays.fill(_buffer, (byte)0); + Arrays.fill(_hash, 0); + Arrays.fill(_K, 0); + Arrays.fill(_L, 0); + Arrays.fill(_block, 0); + Arrays.fill(_state, 0); + } + + // this takes a buffer of information and fills the block + private void processFilledBuffer(byte[] in, int inOff) + { + // copies into the block... + for (int i = 0; i < _state.length; i++) + { + _block[i] = bytesToLongFromBuffer(_buffer, i * 8); + } + processBlock(); + _bufferPos = 0; + Arrays.fill(_buffer, (byte)0); + } + + private long bytesToLongFromBuffer(byte[] buffer, int startPos) + { + long rv = (((buffer[startPos + 0] & 0xffL) << 56) | + ((buffer[startPos + 1] & 0xffL) << 48) | + ((buffer[startPos + 2] & 0xffL) << 40) | + ((buffer[startPos + 3] & 0xffL) << 32) | + ((buffer[startPos + 4] & 0xffL) << 24) | + ((buffer[startPos + 5] & 0xffL) << 16) | + ((buffer[startPos + 6] & 0xffL) << 8) | + ((buffer[startPos + 7]) & 0xffL)); + + return rv; + } + + private void convertLongToByteArray(long inputLong, byte[] outputArray, int offSet) + { + for (int i = 0; i < 8; i++) + { + outputArray[offSet + i] = (byte)((inputLong >> (56 - (i * 8))) & 0xff); + } + } + + protected void processBlock() + { + // buffer contents have been transferred to the _block[] array via + // processFilledBuffer + + // compute and apply K^0 + for (int i = 0; i < 8; i++) + { + _state[i] = _block[i] ^ (_K[i] = _hash[i]); + } + + // iterate over the rounds + for (int round = 1; round <= ROUNDS; round++) + { + for (int i = 0; i < 8; i++) + { + _L[i] = 0; + _L[i] ^= C0[(int)(_K[(i - 0) & 7] >>> 56) & 0xff]; + _L[i] ^= C1[(int)(_K[(i - 1) & 7] >>> 48) & 0xff]; + _L[i] ^= C2[(int)(_K[(i - 2) & 7] >>> 40) & 0xff]; + _L[i] ^= C3[(int)(_K[(i - 3) & 7] >>> 32) & 0xff]; + _L[i] ^= C4[(int)(_K[(i - 4) & 7] >>> 24) & 0xff]; + _L[i] ^= C5[(int)(_K[(i - 5) & 7] >>> 16) & 0xff]; + _L[i] ^= C6[(int)(_K[(i - 6) & 7] >>> 8) & 0xff]; + _L[i] ^= C7[(int)(_K[(i - 7) & 7]) & 0xff]; + } + + System.arraycopy(_L, 0, _K, 0, _K.length); + + _K[0] ^= _rc[round]; + + // apply the round transformation + for (int i = 0; i < 8; i++) + { + _L[i] = _K[i]; + + _L[i] ^= C0[(int)(_state[(i - 0) & 7] >>> 56) & 0xff]; + _L[i] ^= C1[(int)(_state[(i - 1) & 7] >>> 48) & 0xff]; + _L[i] ^= C2[(int)(_state[(i - 2) & 7] >>> 40) & 0xff]; + _L[i] ^= C3[(int)(_state[(i - 3) & 7] >>> 32) & 0xff]; + _L[i] ^= C4[(int)(_state[(i - 4) & 7] >>> 24) & 0xff]; + _L[i] ^= C5[(int)(_state[(i - 5) & 7] >>> 16) & 0xff]; + _L[i] ^= C6[(int)(_state[(i - 6) & 7] >>> 8) & 0xff]; + _L[i] ^= C7[(int)(_state[(i - 7) & 7]) & 0xff]; + } + + // save the current state + System.arraycopy(_L, 0, _state, 0, _state.length); + } + + // apply Miuaguchi-Preneel compression + for (int i = 0; i < 8; i++) + { + _hash[i] ^= _state[i] ^ _block[i]; + } + + } + + public void update(byte in) + { + _buffer[_bufferPos] = in; + + //System.out.println("adding to buffer = "+_buffer[_bufferPos]); + + ++_bufferPos; + + if (_bufferPos == _buffer.length) + { + processFilledBuffer(_buffer, 0); + } + + increment(); + } + + /* + * increment() can be implemented in this way using 2 arrays or + * by having some temporary variables that are used to set the + * value provided by EIGHT[i] and carry within the loop. + * + * not having done any timing, this seems likely to be faster + * at the slight expense of 32*(sizeof short) bytes + */ + private static final short[] EIGHT = new short[BITCOUNT_ARRAY_SIZE]; + static + { + EIGHT[BITCOUNT_ARRAY_SIZE - 1] = 8; + } + + private void increment() + { + int carry = 0; + for (int i = _bitCount.length - 1; i >= 0; i--) + { + int sum = (_bitCount[i] & 0xff) + EIGHT[i] + carry; + + carry = sum >>> 8; + _bitCount[i] = (short)(sum & 0xff); + } + } + + public void update(byte[] in, int inOff, int len) + { + while (len > 0) + { + update(in[inOff]); + ++inOff; + --len; + } + + } + + private void finish() + { + /* + * this makes a copy of the current bit length. at the expense of an + * object creation of 32 bytes rather than providing a _stopCounting + * boolean which was the alternative I could think of. + */ + byte[] bitLength = copyBitLength(); + + _buffer[_bufferPos++] |= 0x80; + + if (_bufferPos == _buffer.length) + { + processFilledBuffer(_buffer, 0); + } + + /* + * Final block contains + * [ ... data .... ][0][0][0][ length ] + * + * if [ length ] cannot fit. Need to create a new block. + */ + if (_bufferPos > 32) + { + while (_bufferPos != 0) + { + update((byte)0); + } + } + + while (_bufferPos <= 32) + { + update((byte)0); + } + + // copy the length information to the final 32 bytes of the + // 64 byte block.... + System.arraycopy(bitLength, 0, _buffer, 32, bitLength.length); + + processFilledBuffer(_buffer, 0); + } + + private byte[] copyBitLength() + { + byte[] rv = new byte[BITCOUNT_ARRAY_SIZE]; + for (int i = 0; i < rv.length; i++) + { + rv[i] = (byte)(_bitCount[i] & 0xff); + } + return rv; + } + + public int getByteLength() + { + return BYTE_LENGTH; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java b/common/src/main/java/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java new file mode 100644 index 0000000..109ad93 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/encodings/ISO9796d1Encoding.java @@ -0,0 +1,287 @@ +package org.bouncycastle.crypto.encodings; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +/** + * ISO 9796-1 padding. Note in the light of recent results you should + * only use this with RSA (rather than the "simpler" Rabin keys) and you + * should never use it with anything other than a hash (ie. even if the + * message is small don't sign the message, sign it's hash) or some "random" + * value. See your favorite search engine for details. + */ +public class ISO9796d1Encoding + implements AsymmetricBlockCipher +{ + private static final BigInteger SIXTEEN = BigInteger.valueOf(16L); + private static final BigInteger SIX = BigInteger.valueOf(6L); + + private static byte[] shadows = { 0xe, 0x3, 0x5, 0x8, 0x9, 0x4, 0x2, 0xf, + 0x0, 0xd, 0xb, 0x6, 0x7, 0xa, 0xc, 0x1 }; + private static byte[] inverse = { 0x8, 0xf, 0x6, 0x1, 0x5, 0x2, 0xb, 0xc, + 0x3, 0x4, 0xd, 0xa, 0xe, 0x9, 0x0, 0x7 }; + + private AsymmetricBlockCipher engine; + private boolean forEncryption; + private int bitSize; + private int padBits = 0; + private BigInteger modulus; + + public ISO9796d1Encoding( + AsymmetricBlockCipher cipher) + { + this.engine = cipher; + } + + public AsymmetricBlockCipher getUnderlyingCipher() + { + return engine; + } + + public void init( + boolean forEncryption, + CipherParameters param) + { + RSAKeyParameters kParam = null; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + kParam = (RSAKeyParameters)rParam.getParameters(); + } + else + { + kParam = (RSAKeyParameters)param; + } + + engine.init(forEncryption, param); + + modulus = kParam.getModulus(); + bitSize = modulus.bitLength(); + + this.forEncryption = forEncryption; + } + + /** + * return the input block size. The largest message we can process + * is (key_size_in_bits + 3)/16, which in our world comes to + * key_size_in_bytes / 2. + */ + public int getInputBlockSize() + { + int baseBlockSize = engine.getInputBlockSize(); + + if (forEncryption) + { + return (baseBlockSize + 1) / 2; + } + else + { + return baseBlockSize; + } + } + + /** + * return the maximum possible size for the output. + */ + public int getOutputBlockSize() + { + int baseBlockSize = engine.getOutputBlockSize(); + + if (forEncryption) + { + return baseBlockSize; + } + else + { + return (baseBlockSize + 1) / 2; + } + } + + /** + * set the number of bits in the next message to be treated as + * pad bits. + */ + public void setPadBits( + int padBits) + { + if (padBits > 7) + { + throw new IllegalArgumentException("padBits > 7"); + } + + this.padBits = padBits; + } + + /** + * retrieve the number of pad bits in the last decoded message. + */ + public int getPadBits() + { + return padBits; + } + + public byte[] processBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + if (forEncryption) + { + return encodeBlock(in, inOff, inLen); + } + else + { + return decodeBlock(in, inOff, inLen); + } + } + + private byte[] encodeBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + byte[] block = new byte[(bitSize + 7) / 8]; + int r = padBits + 1; + int z = inLen; + int t = (bitSize + 13) / 16; + + for (int i = 0; i < t; i += z) + { + if (i > t - z) + { + System.arraycopy(in, inOff + inLen - (t - i), + block, block.length - t, t - i); + } + else + { + System.arraycopy(in, inOff, block, block.length - (i + z), z); + } + } + + for (int i = block.length - 2 * t; i != block.length; i += 2) + { + byte val = block[block.length - t + i / 2]; + + block[i] = (byte)((shadows[(val & 0xff) >>> 4] << 4) + | shadows[val & 0x0f]); + block[i + 1] = val; + } + + block[block.length - 2 * z] ^= r; + block[block.length - 1] = (byte)((block[block.length - 1] << 4) | 0x06); + + int maxBit = (8 - (bitSize - 1) % 8); + int offSet = 0; + + if (maxBit != 8) + { + block[0] &= 0xff >>> maxBit; + block[0] |= 0x80 >>> maxBit; + } + else + { + block[0] = 0x00; + block[1] |= 0x80; + offSet = 1; + } + + return engine.processBlock(block, offSet, block.length - offSet); + } + + /** + * @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + */ + private byte[] decodeBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + byte[] block = engine.processBlock(in, inOff, inLen); + int r = 1; + int t = (bitSize + 13) / 16; + + BigInteger iS = new BigInteger(1, block); + BigInteger iR; + if (iS.mod(SIXTEEN).equals(SIX)) + { + iR = iS; + } + else if ((modulus.subtract(iS)).mod(SIXTEEN).equals(SIX)) + { + iR = modulus.subtract(iS); + } + else + { + throw new InvalidCipherTextException("resulting integer iS or (modulus - iS) is not congruent to 6 mod 16"); + } + + block = convertOutputDecryptOnly(iR); + + if ((block[block.length - 1] & 0x0f) != 0x6 ) + { + throw new InvalidCipherTextException("invalid forcing byte in block"); + } + + block[block.length - 1] = (byte)(((block[block.length - 1] & 0xff) >>> 4) | ((inverse[(block[block.length - 2] & 0xff) >> 4]) << 4)); + block[0] = (byte)((shadows[(block[1] & 0xff) >>> 4] << 4) + | shadows[block[1] & 0x0f]); + + boolean boundaryFound = false; + int boundary = 0; + + for (int i = block.length - 1; i >= block.length - 2 * t; i -= 2) + { + int val = ((shadows[(block[i] & 0xff) >>> 4] << 4) + | shadows[block[i] & 0x0f]); + + if (((block[i - 1] ^ val) & 0xff) != 0) + { + if (!boundaryFound) + { + boundaryFound = true; + r = (block[i - 1] ^ val) & 0xff; + boundary = i - 1; + } + else + { + throw new InvalidCipherTextException("invalid tsums in block"); + } + } + } + + block[boundary] = 0; + + byte[] nblock = new byte[(block.length - boundary) / 2]; + + for (int i = 0; i < nblock.length; i++) + { + nblock[i] = block[2 * i + boundary + 1]; + } + + padBits = r - 1; + + return nblock; + } + + private static byte[] convertOutputDecryptOnly(BigInteger result) + { + byte[] output = result.toByteArray(); + if (output[0] == 0) // have ended up with an extra zero byte, copy down. + { + byte[] tmp = new byte[output.length - 1]; + System.arraycopy(output, 1, tmp, 0, tmp.length); + return tmp; + } + return output; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/encodings/OAEPEncoding.java b/common/src/main/java/org/bouncycastle/crypto/encodings/OAEPEncoding.java new file mode 100644 index 0000000..97c8d7d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/encodings/OAEPEncoding.java @@ -0,0 +1,348 @@ +package org.bouncycastle.crypto.encodings; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +import javabc.SecureRandom; + +/** + * Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + */ +public class OAEPEncoding + implements AsymmetricBlockCipher +{ + private byte[] defHash; + private Digest hash; + private Digest mgf1Hash; + + private AsymmetricBlockCipher engine; + private SecureRandom random; + private boolean forEncryption; + + public OAEPEncoding( + AsymmetricBlockCipher cipher) + { + this(cipher, new SHA1Digest(), null); + } + + public OAEPEncoding( + AsymmetricBlockCipher cipher, + Digest hash) + { + this(cipher, hash, null); + } + + public OAEPEncoding( + AsymmetricBlockCipher cipher, + Digest hash, + byte[] encodingParams) + { + this(cipher, hash, hash, encodingParams); + } + + public OAEPEncoding( + AsymmetricBlockCipher cipher, + Digest hash, + Digest mgf1Hash, + byte[] encodingParams) + { + this.engine = cipher; + this.hash = hash; + this.mgf1Hash = mgf1Hash; + this.defHash = new byte[hash.getDigestSize()]; + + if (encodingParams != null) + { + hash.update(encodingParams, 0, encodingParams.length); + } + + hash.doFinal(defHash, 0); + } + + public AsymmetricBlockCipher getUnderlyingCipher() + { + return engine; + } + + public void init( + boolean forEncryption, + CipherParameters param) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + } + else + { + this.random = new SecureRandom(); + } + + engine.init(forEncryption, param); + + this.forEncryption = forEncryption; + } + + public int getInputBlockSize() + { + int baseBlockSize = engine.getInputBlockSize(); + + if (forEncryption) + { + return baseBlockSize - 1 - 2 * defHash.length; + } + else + { + return baseBlockSize; + } + } + + public int getOutputBlockSize() + { + int baseBlockSize = engine.getOutputBlockSize(); + + if (forEncryption) + { + return baseBlockSize; + } + else + { + return baseBlockSize - 1 - 2 * defHash.length; + } + } + + public byte[] processBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + if (forEncryption) + { + return encodeBlock(in, inOff, inLen); + } + else + { + return decodeBlock(in, inOff, inLen); + } + } + + public byte[] encodeBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + byte[] block = new byte[getInputBlockSize() + 1 + 2 * defHash.length]; + + // + // copy in the message + // + System.arraycopy(in, inOff, block, block.length - inLen, inLen); + + // + // add sentinel + // + block[block.length - inLen - 1] = 0x01; + + // + // as the block is already zeroed - there's no need to add PS (the >= 0 pad of 0) + // + + // + // add the hash of the encoding params. + // + System.arraycopy(defHash, 0, block, defHash.length, defHash.length); + + // + // generate the seed. + // + byte[] seed = new byte[defHash.length]; + + random.nextBytes(seed); + + // + // mask the message block. + // + byte[] mask = maskGeneratorFunction1(seed, 0, seed.length, block.length - defHash.length); + + for (int i = defHash.length; i != block.length; i++) + { + block[i] ^= mask[i - defHash.length]; + } + + // + // add in the seed + // + System.arraycopy(seed, 0, block, 0, defHash.length); + + // + // mask the seed. + // + mask = maskGeneratorFunction1( + block, defHash.length, block.length - defHash.length, defHash.length); + + for (int i = 0; i != defHash.length; i++) + { + block[i] ^= mask[i]; + } + + return engine.processBlock(block, 0, block.length); + } + + /** + * @exception InvalidCipherTextException if the decrypted block turns out to + * be badly formatted. + */ + public byte[] decodeBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + byte[] data = engine.processBlock(in, inOff, inLen); + byte[] block; + + // + // as we may have zeros in our leading bytes for the block we produced + // on encryption, we need to make sure our decrypted block comes back + // the same size. + // + if (data.length < engine.getOutputBlockSize()) + { + block = new byte[engine.getOutputBlockSize()]; + + System.arraycopy(data, 0, block, block.length - data.length, data.length); + } + else + { + block = data; + } + + if (block.length < (2 * defHash.length) + 1) + { + throw new InvalidCipherTextException("data too short"); + } + + // + // unmask the seed. + // + byte[] mask = maskGeneratorFunction1( + block, defHash.length, block.length - defHash.length, defHash.length); + + for (int i = 0; i != defHash.length; i++) + { + block[i] ^= mask[i]; + } + + // + // unmask the message block. + // + mask = maskGeneratorFunction1(block, 0, defHash.length, block.length - defHash.length); + + for (int i = defHash.length; i != block.length; i++) + { + block[i] ^= mask[i - defHash.length]; + } + + // + // check the hash of the encoding params. + // + for (int i = 0; i != defHash.length; i++) + { + if (defHash[i] != block[defHash.length + i]) + { + throw new InvalidCipherTextException("data hash wrong"); + } + } + + // + // find the data block + // + int start; + + for (start = 2 * defHash.length; start != block.length; start++) + { + if (block[start] != 0) + { + break; + } + } + + if (start >= (block.length - 1) || block[start] != 1) + { + throw new InvalidCipherTextException("data start wrong " + start); + } + + start++; + + // + // extract the data block + // + byte[] output = new byte[block.length - start]; + + System.arraycopy(block, start, output, 0, output.length); + + return output; + } + + /** + * int to octet string. + */ + private void ItoOSP( + int i, + byte[] sp) + { + sp[0] = (byte)(i >>> 24); + sp[1] = (byte)(i >>> 16); + sp[2] = (byte)(i >>> 8); + sp[3] = (byte)(i >>> 0); + } + + /** + * mask generator function, as described in PKCS1v2. + */ + private byte[] maskGeneratorFunction1( + byte[] Z, + int zOff, + int zLen, + int length) + { + byte[] mask = new byte[length]; + byte[] hashBuf = new byte[mgf1Hash.getDigestSize()]; + byte[] C = new byte[4]; + int counter = 0; + + hash.reset(); + + do + { + ItoOSP(counter, C); + + mgf1Hash.update(Z, zOff, zLen); + mgf1Hash.update(C, 0, C.length); + mgf1Hash.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, mask, counter * hashBuf.length, hashBuf.length); + } + while (++counter < (length / hashBuf.length)); + + if ((counter * hashBuf.length) < length) + { + ItoOSP(counter, C); + + mgf1Hash.update(Z, zOff, zLen); + mgf1Hash.update(C, 0, C.length); + mgf1Hash.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, mask, counter * hashBuf.length, mask.length - (counter * hashBuf.length)); + } + + return mask; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/encodings/PKCS1Encoding.java b/common/src/main/java/org/bouncycastle/crypto/encodings/PKCS1Encoding.java new file mode 100644 index 0000000..b9faa33 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/encodings/PKCS1Encoding.java @@ -0,0 +1,238 @@ +package org.bouncycastle.crypto.encodings; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +import javabc.SecureRandom; + +/** + * this does your basic PKCS 1 v1.5 padding - whether or not you should be using this + * depends on your application - see PKCS1 Version 2 for details. + */ +public class PKCS1Encoding + implements AsymmetricBlockCipher +{ + /** + * some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + * work with one of these set the system property org.bouncycastle.pkcs1.strict to false. + *

        + * The system property is checked during construction of the encoding object, it is set to + * true by default. + *

        + */ + public static final String STRICT_LENGTH_ENABLED_PROPERTY = "org.bouncycastle.pkcs1.strict"; + + private static final int HEADER_LENGTH = 10; + + private SecureRandom random; + private AsymmetricBlockCipher engine; + private boolean forEncryption; + private boolean forPrivateKey; + private boolean useStrictLength; + + /** + * Basic constructor. + * @param cipher + */ + public PKCS1Encoding( + AsymmetricBlockCipher cipher) + { + this.engine = cipher; + this.useStrictLength = useStrict(); + } + + // + // for J2ME compatibility + // + private boolean useStrict() + { + String strict = System.getProperty(STRICT_LENGTH_ENABLED_PROPERTY); + + return strict == null || strict.equals("true"); + } + + public AsymmetricBlockCipher getUnderlyingCipher() + { + return engine; + } + + public void init( + boolean forEncryption, + CipherParameters param) + { + AsymmetricKeyParameter kParam; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + kParam = (AsymmetricKeyParameter)rParam.getParameters(); + } + else + { + this.random = new SecureRandom(); + kParam = (AsymmetricKeyParameter)param; + } + + engine.init(forEncryption, param); + + this.forPrivateKey = kParam.isPrivate(); + this.forEncryption = forEncryption; + } + + public int getInputBlockSize() + { + int baseBlockSize = engine.getInputBlockSize(); + + if (forEncryption) + { + return baseBlockSize - HEADER_LENGTH; + } + else + { + return baseBlockSize; + } + } + + public int getOutputBlockSize() + { + int baseBlockSize = engine.getOutputBlockSize(); + + if (forEncryption) + { + return baseBlockSize; + } + else + { + return baseBlockSize - HEADER_LENGTH; + } + } + + public byte[] processBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + if (forEncryption) + { + return encodeBlock(in, inOff, inLen); + } + else + { + return decodeBlock(in, inOff, inLen); + } + } + + private byte[] encodeBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + if (inLen > getInputBlockSize()) + { + throw new IllegalArgumentException("input data too large"); + } + + byte[] block = new byte[engine.getInputBlockSize()]; + + if (forPrivateKey) + { + block[0] = 0x01; // type code 1 + + for (int i = 1; i != block.length - inLen - 1; i++) + { + block[i] = (byte)0xFF; + } + } + else + { + random.nextBytes(block); // random fill + + block[0] = 0x02; // type code 2 + + // + // a zero byte marks the end of the padding, so all + // the pad bytes must be non-zero. + // + for (int i = 1; i != block.length - inLen - 1; i++) + { + while (block[i] == 0) + { + block[i] = (byte)random.nextInt(); + } + } + } + + block[block.length - inLen - 1] = 0x00; // mark the end of the padding + System.arraycopy(in, inOff, block, block.length - inLen, inLen); + + return engine.processBlock(block, 0, block.length); + } + + /** + * @exception InvalidCipherTextException if the decrypted block is not in PKCS1 format. + */ + private byte[] decodeBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + byte[] block = engine.processBlock(in, inOff, inLen); + + if (block.length < getOutputBlockSize()) + { + throw new InvalidCipherTextException("block truncated"); + } + + byte type = block[0]; + + if (type != 1 && type != 2) + { + throw new InvalidCipherTextException("unknown block type"); + } + + if (useStrictLength && block.length != engine.getOutputBlockSize()) + { + throw new InvalidCipherTextException("block incorrect size"); + } + + // + // find and extract the message block. + // + int start; + + for (start = 1; start != block.length; start++) + { + byte pad = block[start]; + + if (pad == 0) + { + break; + } + if (type == 1 && pad != (byte)0xff) + { + throw new InvalidCipherTextException("block padding incorrect"); + } + } + + start++; // data should start at the next byte + + if (start > block.length || start < HEADER_LENGTH) + { + throw new InvalidCipherTextException("no data in block"); + } + + byte[] result = new byte[block.length - start]; + + System.arraycopy(block, start, result, 0, result.length); + + return result; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/AESEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/AESEngine.java new file mode 100644 index 0000000..d9bb482 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/AESEngine.java @@ -0,0 +1,547 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * an implementation of the AES (Rijndael), from FIPS-197. + *

        + * For further details see: http://csrc.nist.gov/encryption/aes/. + * + * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + * http://fp.gladman.plus.com/cryptography_technology/rijndael/ + * + * There are three levels of tradeoff of speed vs memory + * Because java has no preprocessor, they are written as three separate classes from which to choose + * + * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + * and 4 for decryption. + * + * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + * adding 12 rotate operations per round to compute the values contained in the other tables from + * the contents of the first. + * + * The slowest version uses no static tables at all and computes the values in each round. + *

        + * This file contains the middle performance version with 2Kbytes of static tables for round precomputation. + * + */ +public class AESEngine + implements BlockCipher +{ + // The S box + private static final byte[] S = { + (byte)99, (byte)124, (byte)119, (byte)123, (byte)242, (byte)107, (byte)111, (byte)197, + (byte)48, (byte)1, (byte)103, (byte)43, (byte)254, (byte)215, (byte)171, (byte)118, + (byte)202, (byte)130, (byte)201, (byte)125, (byte)250, (byte)89, (byte)71, (byte)240, + (byte)173, (byte)212, (byte)162, (byte)175, (byte)156, (byte)164, (byte)114, (byte)192, + (byte)183, (byte)253, (byte)147, (byte)38, (byte)54, (byte)63, (byte)247, (byte)204, + (byte)52, (byte)165, (byte)229, (byte)241, (byte)113, (byte)216, (byte)49, (byte)21, + (byte)4, (byte)199, (byte)35, (byte)195, (byte)24, (byte)150, (byte)5, (byte)154, + (byte)7, (byte)18, (byte)128, (byte)226, (byte)235, (byte)39, (byte)178, (byte)117, + (byte)9, (byte)131, (byte)44, (byte)26, (byte)27, (byte)110, (byte)90, (byte)160, + (byte)82, (byte)59, (byte)214, (byte)179, (byte)41, (byte)227, (byte)47, (byte)132, + (byte)83, (byte)209, (byte)0, (byte)237, (byte)32, (byte)252, (byte)177, (byte)91, + (byte)106, (byte)203, (byte)190, (byte)57, (byte)74, (byte)76, (byte)88, (byte)207, + (byte)208, (byte)239, (byte)170, (byte)251, (byte)67, (byte)77, (byte)51, (byte)133, + (byte)69, (byte)249, (byte)2, (byte)127, (byte)80, (byte)60, (byte)159, (byte)168, + (byte)81, (byte)163, (byte)64, (byte)143, (byte)146, (byte)157, (byte)56, (byte)245, + (byte)188, (byte)182, (byte)218, (byte)33, (byte)16, (byte)255, (byte)243, (byte)210, + (byte)205, (byte)12, (byte)19, (byte)236, (byte)95, (byte)151, (byte)68, (byte)23, + (byte)196, (byte)167, (byte)126, (byte)61, (byte)100, (byte)93, (byte)25, (byte)115, + (byte)96, (byte)129, (byte)79, (byte)220, (byte)34, (byte)42, (byte)144, (byte)136, + (byte)70, (byte)238, (byte)184, (byte)20, (byte)222, (byte)94, (byte)11, (byte)219, + (byte)224, (byte)50, (byte)58, (byte)10, (byte)73, (byte)6, (byte)36, (byte)92, + (byte)194, (byte)211, (byte)172, (byte)98, (byte)145, (byte)149, (byte)228, (byte)121, + (byte)231, (byte)200, (byte)55, (byte)109, (byte)141, (byte)213, (byte)78, (byte)169, + (byte)108, (byte)86, (byte)244, (byte)234, (byte)101, (byte)122, (byte)174, (byte)8, + (byte)186, (byte)120, (byte)37, (byte)46, (byte)28, (byte)166, (byte)180, (byte)198, + (byte)232, (byte)221, (byte)116, (byte)31, (byte)75, (byte)189, (byte)139, (byte)138, + (byte)112, (byte)62, (byte)181, (byte)102, (byte)72, (byte)3, (byte)246, (byte)14, + (byte)97, (byte)53, (byte)87, (byte)185, (byte)134, (byte)193, (byte)29, (byte)158, + (byte)225, (byte)248, (byte)152, (byte)17, (byte)105, (byte)217, (byte)142, (byte)148, + (byte)155, (byte)30, (byte)135, (byte)233, (byte)206, (byte)85, (byte)40, (byte)223, + (byte)140, (byte)161, (byte)137, (byte)13, (byte)191, (byte)230, (byte)66, (byte)104, + (byte)65, (byte)153, (byte)45, (byte)15, (byte)176, (byte)84, (byte)187, (byte)22, + }; + + // The inverse S-box + private static final byte[] Si = { + (byte)82, (byte)9, (byte)106, (byte)213, (byte)48, (byte)54, (byte)165, (byte)56, + (byte)191, (byte)64, (byte)163, (byte)158, (byte)129, (byte)243, (byte)215, (byte)251, + (byte)124, (byte)227, (byte)57, (byte)130, (byte)155, (byte)47, (byte)255, (byte)135, + (byte)52, (byte)142, (byte)67, (byte)68, (byte)196, (byte)222, (byte)233, (byte)203, + (byte)84, (byte)123, (byte)148, (byte)50, (byte)166, (byte)194, (byte)35, (byte)61, + (byte)238, (byte)76, (byte)149, (byte)11, (byte)66, (byte)250, (byte)195, (byte)78, + (byte)8, (byte)46, (byte)161, (byte)102, (byte)40, (byte)217, (byte)36, (byte)178, + (byte)118, (byte)91, (byte)162, (byte)73, (byte)109, (byte)139, (byte)209, (byte)37, + (byte)114, (byte)248, (byte)246, (byte)100, (byte)134, (byte)104, (byte)152, (byte)22, + (byte)212, (byte)164, (byte)92, (byte)204, (byte)93, (byte)101, (byte)182, (byte)146, + (byte)108, (byte)112, (byte)72, (byte)80, (byte)253, (byte)237, (byte)185, (byte)218, + (byte)94, (byte)21, (byte)70, (byte)87, (byte)167, (byte)141, (byte)157, (byte)132, + (byte)144, (byte)216, (byte)171, (byte)0, (byte)140, (byte)188, (byte)211, (byte)10, + (byte)247, (byte)228, (byte)88, (byte)5, (byte)184, (byte)179, (byte)69, (byte)6, + (byte)208, (byte)44, (byte)30, (byte)143, (byte)202, (byte)63, (byte)15, (byte)2, + (byte)193, (byte)175, (byte)189, (byte)3, (byte)1, (byte)19, (byte)138, (byte)107, + (byte)58, (byte)145, (byte)17, (byte)65, (byte)79, (byte)103, (byte)220, (byte)234, + (byte)151, (byte)242, (byte)207, (byte)206, (byte)240, (byte)180, (byte)230, (byte)115, + (byte)150, (byte)172, (byte)116, (byte)34, (byte)231, (byte)173, (byte)53, (byte)133, + (byte)226, (byte)249, (byte)55, (byte)232, (byte)28, (byte)117, (byte)223, (byte)110, + (byte)71, (byte)241, (byte)26, (byte)113, (byte)29, (byte)41, (byte)197, (byte)137, + (byte)111, (byte)183, (byte)98, (byte)14, (byte)170, (byte)24, (byte)190, (byte)27, + (byte)252, (byte)86, (byte)62, (byte)75, (byte)198, (byte)210, (byte)121, (byte)32, + (byte)154, (byte)219, (byte)192, (byte)254, (byte)120, (byte)205, (byte)90, (byte)244, + (byte)31, (byte)221, (byte)168, (byte)51, (byte)136, (byte)7, (byte)199, (byte)49, + (byte)177, (byte)18, (byte)16, (byte)89, (byte)39, (byte)128, (byte)236, (byte)95, + (byte)96, (byte)81, (byte)127, (byte)169, (byte)25, (byte)181, (byte)74, (byte)13, + (byte)45, (byte)229, (byte)122, (byte)159, (byte)147, (byte)201, (byte)156, (byte)239, + (byte)160, (byte)224, (byte)59, (byte)77, (byte)174, (byte)42, (byte)245, (byte)176, + (byte)200, (byte)235, (byte)187, (byte)60, (byte)131, (byte)83, (byte)153, (byte)97, + (byte)23, (byte)43, (byte)4, (byte)126, (byte)186, (byte)119, (byte)214, (byte)38, + (byte)225, (byte)105, (byte)20, (byte)99, (byte)85, (byte)33, (byte)12, (byte)125, + }; + + // vector used in calculating key schedule (powers of x in GF(256)) + private static final int[] rcon = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; + + // precomputation tables of calculations for rounds + private static final int[] T0 = + { + 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, + 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, + 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, + 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, + 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, 0xecadad41, + 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, + 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, + 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, + 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, + 0x73d8d8ab, 0x53313162, 0x3f15152a, 0x0c040408, 0x52c7c795, + 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, + 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, + 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, + 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, + 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, + 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, + 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, + 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, + 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, + 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, + 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, + 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, + 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, + 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, + 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, + 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, + 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, + 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, + 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, + 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, + 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, + 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, + 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, + 0x0a06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, + 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, + 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, + 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, + 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, + 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, + 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, + 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, + 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, + 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, + 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, + 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, + 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, + 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, + 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, + 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, + 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, + 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, + 0x3a16162c}; + +private static final int[] Tinv0 = + { + 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, + 0xf1459d1f, 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, + 0x9176cc88, 0x254c02f5, 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, + 0x8fa362b5, 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, + 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, 0xe75f8f03, + 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, + 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, + 0xdd71b927, 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, + 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, 0xe07764b1, + 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, 0x58684870, 0x19fd458f, + 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, 0x578f1fe3, + 0x2aab5566, 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, + 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, + 0x92b479a7, 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, + 0x1f6234d1, 0x8afea6c4, 0x9d532e34, 0xa055f3a2, 0x32e18a05, + 0x75ebf6a4, 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, + 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, 0xb58d5491, + 0x055dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, + 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, + 0xdbeec879, 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, + 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, 0xfbff0efd, + 0x5638850f, 0x1ed5ae3d, 0x27392d36, 0x64d90f0a, 0x21a65c68, + 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0x0fe75793, 0xd296eeb4, + 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, + 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0x0b0d090e, + 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, + 0xbbdd99ee, 0xfd607fa3, 0x9f2601f7, 0xbcf5725c, 0xc53b6644, + 0x347efb5b, 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, + 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, 0x7d244a85, + 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, + 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, + 0x2264e947, 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, + 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, + 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, 0xe49d3a2c, 0x0d927850, + 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, 0x5ef7392e, + 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, + 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x097826cd, + 0xf418596e, 0x01b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, + 0x08cfbc21, 0xe6e815ef, 0xd99be7ba, 0xce366f4a, 0xd4099fea, + 0xd67cb029, 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, + 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, 0x4a9804f1, + 0xf7daec41, 0x0e50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, + 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, + 0x7f516546, 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, + 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, 0x8c61d79a, + 0x7a0ca137, 0x8e14f859, 0x893c13eb, 0xee27a9ce, 0x35c961b7, + 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, 0x79ce1418, + 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, + 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, + 0x0c25e2bc, 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, + 0x9ce4b4d8, 0x90c15664, 0x6184cb7b, 0x70b632d5, 0x745c6c48, + 0x4257b8d0}; + + private int shift( + int r, + int shift) + { + return (r >>> shift) | (r << -shift); + } + + /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + + private static final int m1 = 0x80808080; + private static final int m2 = 0x7f7f7f7f; + private static final int m3 = 0x0000001b; + + private int FFmulX(int x) + { + return (((x & m2) << 1) ^ (((x & m1) >>> 7) * m3)); + } + + /* + The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. + + private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } + private static final int m4 = 0x1b1b1b1b; + private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } + + */ + + private int inv_mcol(int x) + { + int f2 = FFmulX(x); + int f4 = FFmulX(f2); + int f8 = FFmulX(f4); + int f9 = x ^ f8; + + return f2 ^ f4 ^ f8 ^ shift(f2 ^ f9, 8) ^ shift(f4 ^ f9, 16) ^ shift(f9, 24); + } + + private int subWord(int x) + { + return (S[x&255]&255 | ((S[(x>>8)&255]&255)<<8) | ((S[(x>>16)&255]&255)<<16) | S[(x>>24)&255]<<24); + } + + /** + * Calculate the necessary round keys + * The number of calculations depends on key size and block size + * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + * This code is written assuming those are the only possible values + */ + private int[][] generateWorkingKey( + byte[] key, + boolean forEncryption) + { + int KC = key.length / 4; // key length in words + int t; + + if (((KC != 4) && (KC != 6) && (KC != 8)) || ((KC * 4) != key.length)) + { + throw new IllegalArgumentException("Key length not 128/192/256 bits."); + } + + ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes + int[][] W = new int[ROUNDS+1][4]; // 4 words in a block + + // + // copy the key into the round key array + // + + t = 0; + int i = 0; + while (i < key.length) + { + W[t >> 2][t & 3] = (key[i]&0xff) | ((key[i+1]&0xff) << 8) | ((key[i+2]&0xff) << 16) | (key[i+3] << 24); + i+=4; + t++; + } + + // + // while not enough round key material calculated + // calculate new values + // + int k = (ROUNDS + 1) << 2; + for (i = KC; (i < k); i++) + { + int temp = W[(i-1)>>2][(i-1)&3]; + if ((i % KC) == 0) + { + temp = subWord(shift(temp, 8)) ^ rcon[(i / KC)-1]; + } + else if ((KC > 6) && ((i % KC) == 4)) + { + temp = subWord(temp); + } + + W[i>>2][i&3] = W[(i - KC)>>2][(i-KC)&3] ^ temp; + } + + if (!forEncryption) + { + for (int j = 1; j < ROUNDS; j++) + { + for (i = 0; i < 4; i++) + { + W[j][i] = inv_mcol(W[j][i]); + } + } + } + + return W; + } + + private int ROUNDS; + private int[][] WorkingKey = null; + private int C0, C1, C2, C3; + private boolean forEncryption; + + private static final int BLOCK_SIZE = 16; + + /** + * default constructor - 128 bit block size. + */ + public AESEngine() + { + } + + /** + * initialise an AES cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + { + if (params instanceof KeyParameter) + { + WorkingKey = generateWorkingKey(((KeyParameter)params).getKey(), forEncryption); + this.forEncryption = forEncryption; + return; + } + + throw new IllegalArgumentException("invalid parameter passed to AES init - " + params.getClass().getName()); + } + + public String getAlgorithmName() + { + return "AES"; + } + + public int getBlockSize() + { + return BLOCK_SIZE; + } + + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + { + if (WorkingKey == null) + { + throw new IllegalStateException("AES engine not initialised"); + } + + if ((inOff + (32 / 2)) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + (32 / 2)) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (forEncryption) + { + unpackBlock(in, inOff); + encryptBlock(WorkingKey); + packBlock(out, outOff); + } + else + { + unpackBlock(in, inOff); + decryptBlock(WorkingKey); + packBlock(out, outOff); + } + + return BLOCK_SIZE; + } + + public void reset() + { + } + + private void unpackBlock( + byte[] bytes, + int off) + { + int index = off; + + C0 = (bytes[index++] & 0xff); + C0 |= (bytes[index++] & 0xff) << 8; + C0 |= (bytes[index++] & 0xff) << 16; + C0 |= bytes[index++] << 24; + + C1 = (bytes[index++] & 0xff); + C1 |= (bytes[index++] & 0xff) << 8; + C1 |= (bytes[index++] & 0xff) << 16; + C1 |= bytes[index++] << 24; + + C2 = (bytes[index++] & 0xff); + C2 |= (bytes[index++] & 0xff) << 8; + C2 |= (bytes[index++] & 0xff) << 16; + C2 |= bytes[index++] << 24; + + C3 = (bytes[index++] & 0xff); + C3 |= (bytes[index++] & 0xff) << 8; + C3 |= (bytes[index++] & 0xff) << 16; + C3 |= bytes[index++] << 24; + } + + private void packBlock( + byte[] bytes, + int off) + { + int index = off; + + bytes[index++] = (byte)C0; + bytes[index++] = (byte)(C0 >> 8); + bytes[index++] = (byte)(C0 >> 16); + bytes[index++] = (byte)(C0 >> 24); + + bytes[index++] = (byte)C1; + bytes[index++] = (byte)(C1 >> 8); + bytes[index++] = (byte)(C1 >> 16); + bytes[index++] = (byte)(C1 >> 24); + + bytes[index++] = (byte)C2; + bytes[index++] = (byte)(C2 >> 8); + bytes[index++] = (byte)(C2 >> 16); + bytes[index++] = (byte)(C2 >> 24); + + bytes[index++] = (byte)C3; + bytes[index++] = (byte)(C3 >> 8); + bytes[index++] = (byte)(C3 >> 16); + bytes[index++] = (byte)(C3 >> 24); + } + + + private void encryptBlock(int[][] KW) + { + int r, r0, r1, r2, r3; + + C0 ^= KW[0][0]; + C1 ^= KW[0][1]; + C2 ^= KW[0][2]; + C3 ^= KW[0][3]; + + r = 1; + + while (r < ROUNDS - 1) + { + r0 = T0[C0&255] ^ shift(T0[(C1>>8)&255], 24) ^ shift(T0[(C2>>16)&255],16) ^ shift(T0[(C3>>24)&255],8) ^ KW[r][0]; + r1 = T0[C1&255] ^ shift(T0[(C2>>8)&255], 24) ^ shift(T0[(C3>>16)&255], 16) ^ shift(T0[(C0>>24)&255], 8) ^ KW[r][1]; + r2 = T0[C2&255] ^ shift(T0[(C3>>8)&255], 24) ^ shift(T0[(C0>>16)&255], 16) ^ shift(T0[(C1>>24)&255], 8) ^ KW[r][2]; + r3 = T0[C3&255] ^ shift(T0[(C0>>8)&255], 24) ^ shift(T0[(C1>>16)&255], 16) ^ shift(T0[(C2>>24)&255], 8) ^ KW[r++][3]; + C0 = T0[r0&255] ^ shift(T0[(r1>>8)&255], 24) ^ shift(T0[(r2>>16)&255], 16) ^ shift(T0[(r3>>24)&255], 8) ^ KW[r][0]; + C1 = T0[r1&255] ^ shift(T0[(r2>>8)&255], 24) ^ shift(T0[(r3>>16)&255], 16) ^ shift(T0[(r0>>24)&255], 8) ^ KW[r][1]; + C2 = T0[r2&255] ^ shift(T0[(r3>>8)&255], 24) ^ shift(T0[(r0>>16)&255], 16) ^ shift(T0[(r1>>24)&255], 8) ^ KW[r][2]; + C3 = T0[r3&255] ^ shift(T0[(r0>>8)&255], 24) ^ shift(T0[(r1>>16)&255], 16) ^ shift(T0[(r2>>24)&255], 8) ^ KW[r++][3]; + } + + r0 = T0[C0&255] ^ shift(T0[(C1>>8)&255], 24) ^ shift(T0[(C2>>16)&255], 16) ^ shift(T0[(C3>>24)&255], 8) ^ KW[r][0]; + r1 = T0[C1&255] ^ shift(T0[(C2>>8)&255], 24) ^ shift(T0[(C3>>16)&255], 16) ^ shift(T0[(C0>>24)&255], 8) ^ KW[r][1]; + r2 = T0[C2&255] ^ shift(T0[(C3>>8)&255], 24) ^ shift(T0[(C0>>16)&255], 16) ^ shift(T0[(C1>>24)&255], 8) ^ KW[r][2]; + r3 = T0[C3&255] ^ shift(T0[(C0>>8)&255], 24) ^ shift(T0[(C1>>16)&255], 16) ^ shift(T0[(C2>>24)&255], 8) ^ KW[r++][3]; + + // the final round's table is a simple function of S so we don't use a whole other four tables for it + + C0 = (S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24) ^ KW[r][0]; + C1 = (S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24) ^ KW[r][1]; + C2 = (S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24) ^ KW[r][2]; + C3 = (S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24) ^ KW[r][3]; + + } + + private void decryptBlock(int[][] KW) + { + int r, r0, r1, r2, r3; + + C0 ^= KW[ROUNDS][0]; + C1 ^= KW[ROUNDS][1]; + C2 ^= KW[ROUNDS][2]; + C3 ^= KW[ROUNDS][3]; + + r = ROUNDS-1; + + while (r>1) + { + r0 = Tinv0[C0&255] ^ shift(Tinv0[(C3>>8)&255], 24) ^ shift(Tinv0[(C2>>16)&255], 16) ^ shift(Tinv0[(C1>>24)&255], 8) ^ KW[r][0]; + r1 = Tinv0[C1&255] ^ shift(Tinv0[(C0>>8)&255], 24) ^ shift(Tinv0[(C3>>16)&255], 16) ^ shift(Tinv0[(C2>>24)&255], 8) ^ KW[r][1]; + r2 = Tinv0[C2&255] ^ shift(Tinv0[(C1>>8)&255], 24) ^ shift(Tinv0[(C0>>16)&255], 16) ^ shift(Tinv0[(C3>>24)&255], 8) ^ KW[r][2]; + r3 = Tinv0[C3&255] ^ shift(Tinv0[(C2>>8)&255], 24) ^ shift(Tinv0[(C1>>16)&255], 16) ^ shift(Tinv0[(C0>>24)&255], 8) ^ KW[r--][3]; + C0 = Tinv0[r0&255] ^ shift(Tinv0[(r3>>8)&255], 24) ^ shift(Tinv0[(r2>>16)&255], 16) ^ shift(Tinv0[(r1>>24)&255], 8) ^ KW[r][0]; + C1 = Tinv0[r1&255] ^ shift(Tinv0[(r0>>8)&255], 24) ^ shift(Tinv0[(r3>>16)&255], 16) ^ shift(Tinv0[(r2>>24)&255], 8) ^ KW[r][1]; + C2 = Tinv0[r2&255] ^ shift(Tinv0[(r1>>8)&255], 24) ^ shift(Tinv0[(r0>>16)&255], 16) ^ shift(Tinv0[(r3>>24)&255], 8) ^ KW[r][2]; + C3 = Tinv0[r3&255] ^ shift(Tinv0[(r2>>8)&255], 24) ^ shift(Tinv0[(r1>>16)&255], 16) ^ shift(Tinv0[(r0>>24)&255], 8) ^ KW[r--][3]; + } + + r0 = Tinv0[C0&255] ^ shift(Tinv0[(C3>>8)&255], 24) ^ shift(Tinv0[(C2>>16)&255], 16) ^ shift(Tinv0[(C1>>24)&255], 8) ^ KW[r][0]; + r1 = Tinv0[C1&255] ^ shift(Tinv0[(C0>>8)&255], 24) ^ shift(Tinv0[(C3>>16)&255], 16) ^ shift(Tinv0[(C2>>24)&255], 8) ^ KW[r][1]; + r2 = Tinv0[C2&255] ^ shift(Tinv0[(C1>>8)&255], 24) ^ shift(Tinv0[(C0>>16)&255], 16) ^ shift(Tinv0[(C3>>24)&255], 8) ^ KW[r][2]; + r3 = Tinv0[C3&255] ^ shift(Tinv0[(C2>>8)&255], 24) ^ shift(Tinv0[(C1>>16)&255], 16) ^ shift(Tinv0[(C0>>24)&255], 8) ^ KW[r][3]; + + // the final round's table is a simple function of Si so we don't use a whole other four tables for it + + C0 = (Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24) ^ KW[0][0]; + C1 = (Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24) ^ KW[0][1]; + C2 = (Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24) ^ KW[0][2]; + C3 = (Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24) ^ KW[0][3]; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/AESFastEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/AESFastEngine.java new file mode 100644 index 0000000..2374be1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/AESFastEngine.java @@ -0,0 +1,876 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * an implementation of the AES (Rijndael), from FIPS-197. + *

        + * For further details see: http://csrc.nist.gov/encryption/aes/. + * + * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + * http://fp.gladman.plus.com/cryptography_technology/rijndael/ + * + * There are three levels of tradeoff of speed vs memory + * Because java has no preprocessor, they are written as three separate classes from which to choose + * + * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + * and 4 for decryption. + * + * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + * adding 12 rotate operations per round to compute the values contained in the other tables from + * the contents of the first + * + * The slowest version uses no static tables at all and computes the values in each round + *

        + * This file contains the fast version with 8Kbytes of static tables for round precomputation + * + */ +public class AESFastEngine + implements BlockCipher +{ + // The S box + private static final byte[] S = { + (byte)99, (byte)124, (byte)119, (byte)123, (byte)242, (byte)107, (byte)111, (byte)197, + (byte)48, (byte)1, (byte)103, (byte)43, (byte)254, (byte)215, (byte)171, (byte)118, + (byte)202, (byte)130, (byte)201, (byte)125, (byte)250, (byte)89, (byte)71, (byte)240, + (byte)173, (byte)212, (byte)162, (byte)175, (byte)156, (byte)164, (byte)114, (byte)192, + (byte)183, (byte)253, (byte)147, (byte)38, (byte)54, (byte)63, (byte)247, (byte)204, + (byte)52, (byte)165, (byte)229, (byte)241, (byte)113, (byte)216, (byte)49, (byte)21, + (byte)4, (byte)199, (byte)35, (byte)195, (byte)24, (byte)150, (byte)5, (byte)154, + (byte)7, (byte)18, (byte)128, (byte)226, (byte)235, (byte)39, (byte)178, (byte)117, + (byte)9, (byte)131, (byte)44, (byte)26, (byte)27, (byte)110, (byte)90, (byte)160, + (byte)82, (byte)59, (byte)214, (byte)179, (byte)41, (byte)227, (byte)47, (byte)132, + (byte)83, (byte)209, (byte)0, (byte)237, (byte)32, (byte)252, (byte)177, (byte)91, + (byte)106, (byte)203, (byte)190, (byte)57, (byte)74, (byte)76, (byte)88, (byte)207, + (byte)208, (byte)239, (byte)170, (byte)251, (byte)67, (byte)77, (byte)51, (byte)133, + (byte)69, (byte)249, (byte)2, (byte)127, (byte)80, (byte)60, (byte)159, (byte)168, + (byte)81, (byte)163, (byte)64, (byte)143, (byte)146, (byte)157, (byte)56, (byte)245, + (byte)188, (byte)182, (byte)218, (byte)33, (byte)16, (byte)255, (byte)243, (byte)210, + (byte)205, (byte)12, (byte)19, (byte)236, (byte)95, (byte)151, (byte)68, (byte)23, + (byte)196, (byte)167, (byte)126, (byte)61, (byte)100, (byte)93, (byte)25, (byte)115, + (byte)96, (byte)129, (byte)79, (byte)220, (byte)34, (byte)42, (byte)144, (byte)136, + (byte)70, (byte)238, (byte)184, (byte)20, (byte)222, (byte)94, (byte)11, (byte)219, + (byte)224, (byte)50, (byte)58, (byte)10, (byte)73, (byte)6, (byte)36, (byte)92, + (byte)194, (byte)211, (byte)172, (byte)98, (byte)145, (byte)149, (byte)228, (byte)121, + (byte)231, (byte)200, (byte)55, (byte)109, (byte)141, (byte)213, (byte)78, (byte)169, + (byte)108, (byte)86, (byte)244, (byte)234, (byte)101, (byte)122, (byte)174, (byte)8, + (byte)186, (byte)120, (byte)37, (byte)46, (byte)28, (byte)166, (byte)180, (byte)198, + (byte)232, (byte)221, (byte)116, (byte)31, (byte)75, (byte)189, (byte)139, (byte)138, + (byte)112, (byte)62, (byte)181, (byte)102, (byte)72, (byte)3, (byte)246, (byte)14, + (byte)97, (byte)53, (byte)87, (byte)185, (byte)134, (byte)193, (byte)29, (byte)158, + (byte)225, (byte)248, (byte)152, (byte)17, (byte)105, (byte)217, (byte)142, (byte)148, + (byte)155, (byte)30, (byte)135, (byte)233, (byte)206, (byte)85, (byte)40, (byte)223, + (byte)140, (byte)161, (byte)137, (byte)13, (byte)191, (byte)230, (byte)66, (byte)104, + (byte)65, (byte)153, (byte)45, (byte)15, (byte)176, (byte)84, (byte)187, (byte)22, + }; + + // The inverse S-box + private static final byte[] Si = { + (byte)82, (byte)9, (byte)106, (byte)213, (byte)48, (byte)54, (byte)165, (byte)56, + (byte)191, (byte)64, (byte)163, (byte)158, (byte)129, (byte)243, (byte)215, (byte)251, + (byte)124, (byte)227, (byte)57, (byte)130, (byte)155, (byte)47, (byte)255, (byte)135, + (byte)52, (byte)142, (byte)67, (byte)68, (byte)196, (byte)222, (byte)233, (byte)203, + (byte)84, (byte)123, (byte)148, (byte)50, (byte)166, (byte)194, (byte)35, (byte)61, + (byte)238, (byte)76, (byte)149, (byte)11, (byte)66, (byte)250, (byte)195, (byte)78, + (byte)8, (byte)46, (byte)161, (byte)102, (byte)40, (byte)217, (byte)36, (byte)178, + (byte)118, (byte)91, (byte)162, (byte)73, (byte)109, (byte)139, (byte)209, (byte)37, + (byte)114, (byte)248, (byte)246, (byte)100, (byte)134, (byte)104, (byte)152, (byte)22, + (byte)212, (byte)164, (byte)92, (byte)204, (byte)93, (byte)101, (byte)182, (byte)146, + (byte)108, (byte)112, (byte)72, (byte)80, (byte)253, (byte)237, (byte)185, (byte)218, + (byte)94, (byte)21, (byte)70, (byte)87, (byte)167, (byte)141, (byte)157, (byte)132, + (byte)144, (byte)216, (byte)171, (byte)0, (byte)140, (byte)188, (byte)211, (byte)10, + (byte)247, (byte)228, (byte)88, (byte)5, (byte)184, (byte)179, (byte)69, (byte)6, + (byte)208, (byte)44, (byte)30, (byte)143, (byte)202, (byte)63, (byte)15, (byte)2, + (byte)193, (byte)175, (byte)189, (byte)3, (byte)1, (byte)19, (byte)138, (byte)107, + (byte)58, (byte)145, (byte)17, (byte)65, (byte)79, (byte)103, (byte)220, (byte)234, + (byte)151, (byte)242, (byte)207, (byte)206, (byte)240, (byte)180, (byte)230, (byte)115, + (byte)150, (byte)172, (byte)116, (byte)34, (byte)231, (byte)173, (byte)53, (byte)133, + (byte)226, (byte)249, (byte)55, (byte)232, (byte)28, (byte)117, (byte)223, (byte)110, + (byte)71, (byte)241, (byte)26, (byte)113, (byte)29, (byte)41, (byte)197, (byte)137, + (byte)111, (byte)183, (byte)98, (byte)14, (byte)170, (byte)24, (byte)190, (byte)27, + (byte)252, (byte)86, (byte)62, (byte)75, (byte)198, (byte)210, (byte)121, (byte)32, + (byte)154, (byte)219, (byte)192, (byte)254, (byte)120, (byte)205, (byte)90, (byte)244, + (byte)31, (byte)221, (byte)168, (byte)51, (byte)136, (byte)7, (byte)199, (byte)49, + (byte)177, (byte)18, (byte)16, (byte)89, (byte)39, (byte)128, (byte)236, (byte)95, + (byte)96, (byte)81, (byte)127, (byte)169, (byte)25, (byte)181, (byte)74, (byte)13, + (byte)45, (byte)229, (byte)122, (byte)159, (byte)147, (byte)201, (byte)156, (byte)239, + (byte)160, (byte)224, (byte)59, (byte)77, (byte)174, (byte)42, (byte)245, (byte)176, + (byte)200, (byte)235, (byte)187, (byte)60, (byte)131, (byte)83, (byte)153, (byte)97, + (byte)23, (byte)43, (byte)4, (byte)126, (byte)186, (byte)119, (byte)214, (byte)38, + (byte)225, (byte)105, (byte)20, (byte)99, (byte)85, (byte)33, (byte)12, (byte)125, + }; + + // vector used in calculating key schedule (powers of x in GF(256)) + private static final int[] rcon = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; + + // precomputation tables of calculations for rounds + private static final int[] T0 = + { + 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, + 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, + 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, + 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, + 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, 0xecadad41, + 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, + 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, + 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, + 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, + 0x73d8d8ab, 0x53313162, 0x3f15152a, 0x0c040408, 0x52c7c795, + 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, + 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, + 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, + 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, + 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, + 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, + 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, + 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, + 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, + 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, + 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, + 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, + 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, + 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, + 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, + 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, + 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, + 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, + 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, + 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, + 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, + 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, + 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, + 0x0a06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, + 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, + 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, + 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, + 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, + 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, + 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, + 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, + 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, + 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, + 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, + 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, + 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, + 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, + 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, + 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, + 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, + 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, + 0x3a16162c}; + + private static final int[] T1 = + { + 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d, 0xf2f2ff0d, + 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154, 0x30306050, 0x01010203, + 0x6767cea9, 0x2b2b567d, 0xfefee719, 0xd7d7b562, 0xabab4de6, + 0x7676ec9a, 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87, + 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b, 0xadad41ec, + 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea, 0x9c9c23bf, 0xa4a453f7, + 0x7272e496, 0xc0c09b5b, 0xb7b775c2, 0xfdfde11c, 0x93933dae, + 0x26264c6a, 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f, + 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908, 0x7171e293, + 0xd8d8ab73, 0x31316253, 0x15152a3f, 0x0404080c, 0xc7c79552, + 0x23234665, 0xc3c39d5e, 0x18183028, 0x969637a1, 0x05050a0f, + 0x9a9a2fb5, 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d, + 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f, 0x0909121b, + 0x83831d9e, 0x2c2c5874, 0x1a1a342e, 0x1b1b362d, 0x6e6edcb2, + 0x5a5ab4ee, 0xa0a05bfb, 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, + 0xb3b37dce, 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397, + 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c, 0x20204060, + 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed, 0x6a6ad4be, 0xcbcb8d46, + 0xbebe67d9, 0x3939724b, 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, + 0xcfcf854a, 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16, + 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194, 0x45458acf, + 0xf9f9e910, 0x02020406, 0x7f7ffe81, 0x5050a0f0, 0x3c3c7844, + 0x9f9f25ba, 0xa8a84be3, 0x5151a2f3, 0xa3a35dfe, 0x404080c0, + 0x8f8f058a, 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104, + 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263, 0x10102030, + 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d, 0xcdcd814c, 0x0c0c1814, + 0x13132635, 0xececc32f, 0x5f5fbee1, 0x979735a2, 0x444488cc, + 0x17172e39, 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47, + 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695, 0x6060c0a0, + 0x81811998, 0x4f4f9ed1, 0xdcdca37f, 0x22224466, 0x2a2a547e, + 0x90903bab, 0x88880b83, 0x46468cca, 0xeeeec729, 0xb8b86bd3, + 0x1414283c, 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76, + 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e, 0x494992db, + 0x06060c0a, 0x2424486c, 0x5c5cb8e4, 0xc2c29f5d, 0xd3d3bd6e, + 0xacac43ef, 0x6262c4a6, 0x919139a8, 0x959531a4, 0xe4e4d337, + 0x7979f28b, 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7, + 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0, 0x6c6cd8b4, + 0x5656acfa, 0xf4f4f307, 0xeaeacf25, 0x6565caaf, 0x7a7af48e, + 0xaeae47e9, 0x08081018, 0xbaba6fd5, 0x7878f088, 0x25254a6f, + 0x2e2e5c72, 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751, + 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21, 0x4b4b96dd, + 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85, 0x7070e090, 0x3e3e7c42, + 0xb5b571c4, 0x6666ccaa, 0x484890d8, 0x03030605, 0xf6f6f701, + 0x0e0e1c12, 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0, + 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9, 0xe1e1d938, + 0xf8f8eb13, 0x98982bb3, 0x11112233, 0x6969d2bb, 0xd9d9a970, + 0x8e8e0789, 0x949433a7, 0x9b9b2db6, 0x1e1e3c22, 0x87871592, + 0xe9e9c920, 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a, + 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17, 0xbfbf65da, + 0xe6e6d731, 0x424284c6, 0x6868d0b8, 0x414182c3, 0x999929b0, + 0x2d2d5a77, 0x0f0f1e11, 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, + 0x16162c3a}; + + private static final int[] T2 = + { + 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b, 0xf2ff0df2, + 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5, 0x30605030, 0x01020301, + 0x67cea967, 0x2b567d2b, 0xfee719fe, 0xd7b562d7, 0xab4de6ab, + 0x76ec9a76, 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d, + 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0, 0xad41ecad, + 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf, 0x9c23bf9c, 0xa453f7a4, + 0x72e49672, 0xc09b5bc0, 0xb775c2b7, 0xfde11cfd, 0x933dae93, + 0x264c6a26, 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc, + 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1, 0x71e29371, + 0xd8ab73d8, 0x31625331, 0x152a3f15, 0x04080c04, 0xc79552c7, + 0x23466523, 0xc39d5ec3, 0x18302818, 0x9637a196, 0x050a0f05, + 0x9a2fb59a, 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2, + 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75, 0x09121b09, + 0x831d9e83, 0x2c58742c, 0x1a342e1a, 0x1b362d1b, 0x6edcb26e, + 0x5ab4ee5a, 0xa05bfba0, 0x52a4f652, 0x3b764d3b, 0xd6b761d6, + 0xb37dceb3, 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784, + 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced, 0x20406020, + 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b, 0x6ad4be6a, 0xcb8d46cb, + 0xbe67d9be, 0x39724b39, 0x4a94de4a, 0x4c98d44c, 0x58b0e858, + 0xcf854acf, 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb, + 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485, 0x458acf45, + 0xf9e910f9, 0x02040602, 0x7ffe817f, 0x50a0f050, 0x3c78443c, + 0x9f25ba9f, 0xa84be3a8, 0x51a2f351, 0xa35dfea3, 0x4080c040, + 0x8f058a8f, 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5, + 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321, 0x10203010, + 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2, 0xcd814ccd, 0x0c18140c, + 0x13263513, 0xecc32fec, 0x5fbee15f, 0x9735a297, 0x4488cc44, + 0x172e3917, 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d, + 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573, 0x60c0a060, + 0x81199881, 0x4f9ed14f, 0xdca37fdc, 0x22446622, 0x2a547e2a, + 0x903bab90, 0x880b8388, 0x468cca46, 0xeec729ee, 0xb86bd3b8, + 0x14283c14, 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db, + 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a, 0x4992db49, + 0x060c0a06, 0x24486c24, 0x5cb8e45c, 0xc29f5dc2, 0xd3bd6ed3, + 0xac43efac, 0x62c4a662, 0x9139a891, 0x9531a495, 0xe4d337e4, + 0x79f28b79, 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d, + 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9, 0x6cd8b46c, + 0x56acfa56, 0xf4f307f4, 0xeacf25ea, 0x65caaf65, 0x7af48e7a, + 0xae47e9ae, 0x08101808, 0xba6fd5ba, 0x78f08878, 0x254a6f25, + 0x2e5c722e, 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6, + 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f, 0x4b96dd4b, + 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a, 0x70e09070, 0x3e7c423e, + 0xb571c4b5, 0x66ccaa66, 0x4890d848, 0x03060503, 0xf6f701f6, + 0x0e1c120e, 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9, + 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e, 0xe1d938e1, + 0xf8eb13f8, 0x982bb398, 0x11223311, 0x69d2bb69, 0xd9a970d9, + 0x8e07898e, 0x9433a794, 0x9b2db69b, 0x1e3c221e, 0x87159287, + 0xe9c920e9, 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf, + 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d, 0xbf65dabf, + 0xe6d731e6, 0x4284c642, 0x68d0b868, 0x4182c341, 0x9929b099, + 0x2d5a772d, 0x0f1e110f, 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, + 0x162c3a16}; + + private static final int[] T3 = + { + 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b, 0xff0df2f2, + 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5, 0x60503030, 0x02030101, + 0xcea96767, 0x567d2b2b, 0xe719fefe, 0xb562d7d7, 0x4de6abab, + 0xec9a7676, 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d, + 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0, 0x41ecadad, + 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf, 0x23bf9c9c, 0x53f7a4a4, + 0xe4967272, 0x9b5bc0c0, 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, + 0x4c6a2626, 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc, + 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1, 0xe2937171, + 0xab73d8d8, 0x62533131, 0x2a3f1515, 0x080c0404, 0x9552c7c7, + 0x46652323, 0x9d5ec3c3, 0x30281818, 0x37a19696, 0x0a0f0505, + 0x2fb59a9a, 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2, + 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575, 0x121b0909, + 0x1d9e8383, 0x58742c2c, 0x342e1a1a, 0x362d1b1b, 0xdcb26e6e, + 0xb4ee5a5a, 0x5bfba0a0, 0xa4f65252, 0x764d3b3b, 0xb761d6d6, + 0x7dceb3b3, 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484, + 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded, 0x40602020, + 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b, 0xd4be6a6a, 0x8d46cbcb, + 0x67d9bebe, 0x724b3939, 0x94de4a4a, 0x98d44c4c, 0xb0e85858, + 0x854acfcf, 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb, + 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585, 0x8acf4545, + 0xe910f9f9, 0x04060202, 0xfe817f7f, 0xa0f05050, 0x78443c3c, + 0x25ba9f9f, 0x4be3a8a8, 0xa2f35151, 0x5dfea3a3, 0x80c04040, + 0x058a8f8f, 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5, + 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121, 0x20301010, + 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2, 0x814ccdcd, 0x18140c0c, + 0x26351313, 0xc32fecec, 0xbee15f5f, 0x35a29797, 0x88cc4444, + 0x2e391717, 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d, + 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373, 0xc0a06060, + 0x19988181, 0x9ed14f4f, 0xa37fdcdc, 0x44662222, 0x547e2a2a, + 0x3bab9090, 0x0b838888, 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, + 0x283c1414, 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb, + 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a, 0x92db4949, + 0x0c0a0606, 0x486c2424, 0xb8e45c5c, 0x9f5dc2c2, 0xbd6ed3d3, + 0x43efacac, 0xc4a66262, 0x39a89191, 0x31a49595, 0xd337e4e4, + 0xf28b7979, 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d, + 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9, 0xd8b46c6c, + 0xacfa5656, 0xf307f4f4, 0xcf25eaea, 0xcaaf6565, 0xf48e7a7a, + 0x47e9aeae, 0x10180808, 0x6fd5baba, 0xf0887878, 0x4a6f2525, + 0x5c722e2e, 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6, + 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f, 0x96dd4b4b, + 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a, 0xe0907070, 0x7c423e3e, + 0x71c4b5b5, 0xccaa6666, 0x90d84848, 0x06050303, 0xf701f6f6, + 0x1c120e0e, 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9, + 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e, 0xd938e1e1, + 0xeb13f8f8, 0x2bb39898, 0x22331111, 0xd2bb6969, 0xa970d9d9, + 0x07898e8e, 0x33a79494, 0x2db69b9b, 0x3c221e1e, 0x15928787, + 0xc920e9e9, 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf, + 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d, 0x65dabfbf, + 0xd731e6e6, 0x84c64242, 0xd0b86868, 0x82c34141, 0x29b09999, + 0x5a772d2d, 0x1e110f0f, 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, + 0x2c3a1616}; + + private static final int[] Tinv0 = + { + 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, + 0xf1459d1f, 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, + 0x9176cc88, 0x254c02f5, 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, + 0x8fa362b5, 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, + 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, 0xe75f8f03, + 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, + 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, + 0xdd71b927, 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, + 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, 0xe07764b1, + 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, 0x58684870, 0x19fd458f, + 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, 0x578f1fe3, + 0x2aab5566, 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, + 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, + 0x92b479a7, 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, + 0x1f6234d1, 0x8afea6c4, 0x9d532e34, 0xa055f3a2, 0x32e18a05, + 0x75ebf6a4, 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, + 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, 0xb58d5491, + 0x055dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, + 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, + 0xdbeec879, 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, + 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, 0xfbff0efd, + 0x5638850f, 0x1ed5ae3d, 0x27392d36, 0x64d90f0a, 0x21a65c68, + 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0x0fe75793, 0xd296eeb4, + 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, + 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0x0b0d090e, + 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, + 0xbbdd99ee, 0xfd607fa3, 0x9f2601f7, 0xbcf5725c, 0xc53b6644, + 0x347efb5b, 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, + 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, 0x7d244a85, + 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, + 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, + 0x2264e947, 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, + 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, + 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, 0xe49d3a2c, 0x0d927850, + 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, 0x5ef7392e, + 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, + 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x097826cd, + 0xf418596e, 0x01b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, + 0x08cfbc21, 0xe6e815ef, 0xd99be7ba, 0xce366f4a, 0xd4099fea, + 0xd67cb029, 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, + 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, 0x4a9804f1, + 0xf7daec41, 0x0e50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, + 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, + 0x7f516546, 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, + 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, 0x8c61d79a, + 0x7a0ca137, 0x8e14f859, 0x893c13eb, 0xee27a9ce, 0x35c961b7, + 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, 0x79ce1418, + 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, + 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, + 0x0c25e2bc, 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, + 0x9ce4b4d8, 0x90c15664, 0x6184cb7b, 0x70b632d5, 0x745c6c48, + 0x4257b8d0}; + + private static final int[] Tinv1 = + { + 0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96, 0x6bab3bcb, + 0x459d1ff1, 0x58faacab, 0x03e34b93, 0xfa302055, 0x6d76adf6, + 0x76cc8891, 0x4c02f525, 0xd7e54ffc, 0xcb2ac5d7, 0x44352680, + 0xa362b58f, 0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1, + 0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6, 0x5f8f03e7, + 0x9c921595, 0x7a6dbfeb, 0x595295da, 0x83bed42d, 0x217458d3, + 0x69e04929, 0xc8c98e44, 0x89c2756a, 0x798ef478, 0x3e58996b, + 0x71b927dd, 0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4, + 0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245, 0x7764b1e0, + 0xae6bbb84, 0xa081fe1c, 0x2b08f994, 0x68487058, 0xfd458f19, + 0x6cde9487, 0xf87b52b7, 0xd373ab23, 0x024b72e2, 0x8f1fe357, + 0xab55662a, 0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5, + 0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c, 0x1ccf8a2b, + 0xb479a792, 0xf207f3f0, 0xe2694ea1, 0xf4da65cd, 0xbe0506d5, + 0x6234d11f, 0xfea6c48a, 0x532e349d, 0x55f3a2a0, 0xe18a0532, + 0xebf6a475, 0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51, + 0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46, 0x8d5491b5, + 0x5dc47105, 0xd406046f, 0x155060ff, 0xfb981924, 0xe9bdd697, + 0x434089cc, 0x9ed96777, 0x42e8b0bd, 0x8b890788, 0x5b19e738, + 0xeec879db, 0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000, + 0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e, 0xff0efdfb, + 0x38850f56, 0xd5ae3d1e, 0x392d3627, 0xd90f0a64, 0xa65c6821, + 0x545b9bd1, 0x2e36243a, 0x670a0cb1, 0xe757930f, 0x96eeb4d2, + 0x919b1b9e, 0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16, + 0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d, 0x0d090e0b, + 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8, 0x19f15785, 0x0775af4c, + 0xdd99eebb, 0x607fa3fd, 0x2601f79f, 0xf5725cbc, 0x3b6644c5, + 0x7efb5b34, 0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863, + 0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420, 0x244a857d, + 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d, 0x2f9e1d4b, 0x30b2dcf3, + 0x52860dec, 0xe3c177d0, 0x16b32b6c, 0xb970a999, 0x489411fa, + 0x64e94722, 0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef, + 0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836, 0x81f5a6cf, + 0xde7aa528, 0x8eb7da26, 0xbfad3fa4, 0x9d3a2ce4, 0x9278500d, + 0xcc5f6a9b, 0x467e5462, 0x138df6c2, 0xb8d890e8, 0xf7392e5e, + 0xafc382f5, 0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3, + 0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b, 0x7826cd09, + 0x18596ef4, 0xb79aec01, 0x9a4f83a8, 0x6e95e665, 0xe6ffaa7e, + 0xcfbc2108, 0xe815efe6, 0x9be7bad9, 0x366f4ace, 0x099fead4, + 0x7cb029d6, 0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0, + 0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315, 0x9804f14a, + 0xdaec41f7, 0x50cd7f0e, 0xf691172f, 0xd64d768d, 0xb0ef434d, + 0x4daacc54, 0x0496e4df, 0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, + 0x5165467f, 0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e, + 0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13, 0x61d79a8c, + 0x0ca1377a, 0x14f8598e, 0x3c13eb89, 0x27a9ceee, 0xc961b735, + 0xe51ce1ed, 0xb1477a3c, 0xdfd29c59, 0x73f2553f, 0xce141879, + 0x37c773bf, 0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886, + 0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f, 0xc31d1672, + 0x25e2bc0c, 0x493c288b, 0x950dff41, 0x01a83971, 0xb30c08de, + 0xe4b4d89c, 0xc1566490, 0x84cb7b61, 0xb632d570, 0x5c6c4874, + 0x57b8d042}; + + private static final int[] Tinv2 = + { + 0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e, 0xab3bcb6b, + 0x9d1ff145, 0xfaacab58, 0xe34b9303, 0x302055fa, 0x76adf66d, + 0xcc889176, 0x02f5254c, 0xe54ffcd7, 0x2ac5d7cb, 0x35268044, + 0x62b58fa3, 0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0, + 0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9, 0x8f03e75f, + 0x9215959c, 0x6dbfeb7a, 0x5295da59, 0xbed42d83, 0x7458d321, + 0xe0492969, 0xc98e44c8, 0xc2756a89, 0x8ef47879, 0x58996b3e, + 0xb927dd71, 0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a, + 0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f, 0x64b1e077, + 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b, 0x48705868, 0x458f19fd, + 0xde94876c, 0x7b52b7f8, 0x73ab23d3, 0x4b72e202, 0x1fe3578f, + 0x55662aab, 0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508, + 0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82, 0xcf8a2b1c, + 0x79a792b4, 0x07f3f0f2, 0x694ea1e2, 0xda65cdf4, 0x0506d5be, + 0x34d11f62, 0xa6c48afe, 0x2e349d53, 0xf3a2a055, 0x8a0532e1, + 0xf6a475eb, 0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110, + 0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd, 0x5491b58d, + 0xc471055d, 0x06046fd4, 0x5060ff15, 0x981924fb, 0xbdd697e9, + 0x4089cc43, 0xd967779e, 0xe8b0bd42, 0x8907888b, 0x19e7385b, + 0xc879dbee, 0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000, + 0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72, 0x0efdfbff, + 0x850f5638, 0xae3d1ed5, 0x2d362739, 0x0f0a64d9, 0x5c6821a6, + 0x5b9bd154, 0x36243a2e, 0x0a0cb167, 0x57930fe7, 0xeeb4d296, + 0x9b1b9e91, 0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a, + 0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17, 0x090e0b0d, + 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9, 0xf1578519, 0x75af4c07, + 0x99eebbdd, 0x7fa3fd60, 0x01f79f26, 0x725cbcf5, 0x6644c53b, + 0xfb5b347e, 0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1, + 0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011, 0x4a857d24, + 0xbbd2f83d, 0xf9ae1132, 0x29c76da1, 0x9e1d4b2f, 0xb2dcf330, + 0x860dec52, 0xc177d0e3, 0xb32b6c16, 0x70a999b9, 0x9411fa48, + 0xe9472264, 0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90, + 0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b, 0xf5a6cf81, + 0x7aa528de, 0xb7da268e, 0xad3fa4bf, 0x3a2ce49d, 0x78500d92, + 0x5f6a9bcc, 0x7e546246, 0x8df6c213, 0xd890e8b8, 0x392e5ef7, + 0xc382f5af, 0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312, + 0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb, 0x26cd0978, + 0x596ef418, 0x9aec01b7, 0x4f83a89a, 0x95e6656e, 0xffaa7ee6, + 0xbc2108cf, 0x15efe6e8, 0xe7bad99b, 0x6f4ace36, 0x9fead409, + 0xb029d67c, 0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066, + 0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8, 0x04f14a98, + 0xec41f7da, 0xcd7f0e50, 0x91172ff6, 0x4d768dd6, 0xef434db0, + 0xaacc544d, 0x96e4df04, 0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, + 0x65467f51, 0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41, + 0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347, 0xd79a8c61, + 0xa1377a0c, 0xf8598e14, 0x13eb893c, 0xa9ceee27, 0x61b735c9, + 0x1ce1ede5, 0x477a3cb1, 0xd29c59df, 0xf2553f73, 0x141879ce, + 0xc773bf37, 0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db, + 0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40, 0x1d1672c3, + 0xe2bc0c25, 0x3c288b49, 0x0dff4195, 0xa8397101, 0x0c08deb3, + 0xb4d89ce4, 0x566490c1, 0xcb7b6184, 0x32d570b6, 0x6c48745c, + 0xb8d04257}; + + private static final int[] Tinv3 = + { + 0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27, 0x3bcb6bab, + 0x1ff1459d, 0xacab58fa, 0x4b9303e3, 0x2055fa30, 0xadf66d76, + 0x889176cc, 0xf5254c02, 0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, + 0xb58fa362, 0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe, + 0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3, 0x03e75f8f, + 0x15959c92, 0xbfeb7a6d, 0x95da5952, 0xd42d83be, 0x58d32174, + 0x492969e0, 0x8e44c8c9, 0x756a89c2, 0xf478798e, 0x996b3e58, + 0x27dd71b9, 0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace, + 0x63184adf, 0xe582311a, 0x97603351, 0x62457f53, 0xb1e07764, + 0xbb84ae6b, 0xfe1ca081, 0xf9942b08, 0x70586848, 0x8f19fd45, + 0x94876cde, 0x52b7f87b, 0xab23d373, 0x72e2024b, 0xe3578f1f, + 0x662aab55, 0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837, + 0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216, 0x8a2b1ccf, + 0xa792b479, 0xf3f0f207, 0x4ea1e269, 0x65cdf4da, 0x06d5be05, + 0xd11f6234, 0xc48afea6, 0x349d532e, 0xa2a055f3, 0x0532e18a, + 0xa475ebf6, 0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e, + 0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6, 0x91b58d54, + 0x71055dc4, 0x046fd406, 0x60ff1550, 0x1924fb98, 0xd697e9bd, + 0x89cc4340, 0x67779ed9, 0xb0bd42e8, 0x07888b89, 0xe7385b19, + 0x79dbeec8, 0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000, + 0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a, 0xfdfbff0e, + 0x0f563885, 0x3d1ed5ae, 0x3627392d, 0x0a64d90f, 0x6821a65c, + 0x9bd1545b, 0x243a2e36, 0x0cb1670a, 0x930fe757, 0xb4d296ee, + 0x1b9e919b, 0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12, + 0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b, 0x0e0b0d09, + 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e, 0x578519f1, 0xaf4c0775, + 0xeebbdd99, 0xa3fd607f, 0xf79f2601, 0x5cbcf572, 0x44c53b66, + 0x5b347efb, 0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4, + 0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6, 0x857d244a, + 0xd2f83dbb, 0xae1132f9, 0xc76da129, 0x1d4b2f9e, 0xdcf330b2, + 0x0dec5286, 0x77d0e3c1, 0x2b6c16b3, 0xa999b970, 0x11fa4894, + 0x472264e9, 0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033, + 0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4, 0xa6cf81f5, + 0xa528de7a, 0xda268eb7, 0x3fa4bfad, 0x2ce49d3a, 0x500d9278, + 0x6a9bcc5f, 0x5462467e, 0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, + 0x82f5afc3, 0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225, + 0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b, 0xcd097826, + 0x6ef41859, 0xec01b79a, 0x83a89a4f, 0xe6656e95, 0xaa7ee6ff, + 0x2108cfbc, 0xefe6e815, 0xbad99be7, 0x4ace366f, 0xead4099f, + 0x29d67cb0, 0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2, + 0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7, 0xf14a9804, + 0x41f7daec, 0x7f0e50cd, 0x172ff691, 0x768dd64d, 0x434db0ef, + 0xcc544daa, 0xe4df0496, 0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, + 0x467f5165, 0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b, + 0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6, 0x9a8c61d7, + 0x377a0ca1, 0x598e14f8, 0xeb893c13, 0xceee27a9, 0xb735c961, + 0xe1ede51c, 0x7a3cb147, 0x9c59dfd2, 0x553f73f2, 0x1879ce14, + 0x73bf37c7, 0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44, + 0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3, 0x1672c31d, + 0xbc0c25e2, 0x288b493c, 0xff41950d, 0x397101a8, 0x08deb30c, + 0xd89ce4b4, 0x6490c156, 0x7b6184cb, 0xd570b632, 0x48745c6c, + 0xd04257b8}; + + private int shift( + int r, + int shift) + { + return (r >>> shift) | (r << -shift); + } + + /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + + private static final int m1 = 0x80808080; + private static final int m2 = 0x7f7f7f7f; + private static final int m3 = 0x0000001b; + + private int FFmulX(int x) + { + return (((x & m2) << 1) ^ (((x & m1) >>> 7) * m3)); + } + + /* + The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. + + private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } + private static final int m4 = 0x1b1b1b1b; + private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } + + */ + + private int inv_mcol(int x) + { + int f2 = FFmulX(x); + int f4 = FFmulX(f2); + int f8 = FFmulX(f4); + int f9 = x ^ f8; + + return f2 ^ f4 ^ f8 ^ shift(f2 ^ f9, 8) ^ shift(f4 ^ f9, 16) ^ shift(f9, 24); + } + + + private int subWord(int x) + { + return (S[x&255]&255 | ((S[(x>>8)&255]&255)<<8) | ((S[(x>>16)&255]&255)<<16) | S[(x>>24)&255]<<24); + } + + /** + * Calculate the necessary round keys + * The number of calculations depends on key size and block size + * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + * This code is written assuming those are the only possible values + */ + private int[][] generateWorkingKey( + byte[] key, + boolean forEncryption) + { + int KC = key.length / 4; // key length in words + int t; + + if (((KC != 4) && (KC != 6) && (KC != 8)) || ((KC * 4) != key.length)) + { + throw new IllegalArgumentException("Key length not 128/192/256 bits."); + } + + ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes + int[][] W = new int[ROUNDS+1][4]; // 4 words in a block + + // + // copy the key into the round key array + // + + t = 0; + int i = 0; + while (i < key.length) + { + W[t >> 2][t & 3] = (key[i]&0xff) | ((key[i+1]&0xff) << 8) | ((key[i+2]&0xff) << 16) | (key[i+3] << 24); + i+=4; + t++; + } + + // + // while not enough round key material calculated + // calculate new values + // + int k = (ROUNDS + 1) << 2; + for (i = KC; (i < k); i++) + { + int temp = W[(i - 1) >> 2][(i - 1) & 3]; + if ((i % KC) == 0) + { + temp = subWord(shift(temp, 8)) ^ rcon[(i / KC) - 1]; + } + else if ((KC > 6) && ((i % KC) == 4)) + { + temp = subWord(temp); + } + + W[i >> 2][i & 3] = W[(i - KC) >> 2][(i - KC) & 3] ^ temp; + } + + if (!forEncryption) + { + for (int j = 1; j < ROUNDS; j++) + { + for (i = 0; i < 4; i++) + { + W[j][i] = inv_mcol(W[j][i]); + } + } + } + + return W; + } + + private int ROUNDS; + private int[][] WorkingKey = null; + private int C0, C1, C2, C3; + private boolean forEncryption; + + private static final int BLOCK_SIZE = 16; + + /** + * default constructor - 128 bit block size. + */ + public AESFastEngine() + { + } + + /** + * initialise an AES cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + { + if (params instanceof KeyParameter) + { + WorkingKey = generateWorkingKey(((KeyParameter)params).getKey(), forEncryption); + this.forEncryption = forEncryption; + return; + } + + throw new IllegalArgumentException("invalid parameter passed to AES init - " + params.getClass().getName()); + } + + public String getAlgorithmName() + { + return "AES"; + } + + public int getBlockSize() + { + return BLOCK_SIZE; + } + + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + { + if (WorkingKey == null) + { + throw new IllegalStateException("AES engine not initialised"); + } + + if ((inOff + (32 / 2)) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + (32 / 2)) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (forEncryption) + { + unpackBlock(in, inOff); + encryptBlock(WorkingKey); + packBlock(out, outOff); + } + else + { + unpackBlock(in, inOff); + decryptBlock(WorkingKey); + packBlock(out, outOff); + } + + return BLOCK_SIZE; + } + + public void reset() + { + } + + private void unpackBlock( + byte[] bytes, + int off) + { + int index = off; + + C0 = (bytes[index++] & 0xff); + C0 |= (bytes[index++] & 0xff) << 8; + C0 |= (bytes[index++] & 0xff) << 16; + C0 |= bytes[index++] << 24; + + C1 = (bytes[index++] & 0xff); + C1 |= (bytes[index++] & 0xff) << 8; + C1 |= (bytes[index++] & 0xff) << 16; + C1 |= bytes[index++] << 24; + + C2 = (bytes[index++] & 0xff); + C2 |= (bytes[index++] & 0xff) << 8; + C2 |= (bytes[index++] & 0xff) << 16; + C2 |= bytes[index++] << 24; + + C3 = (bytes[index++] & 0xff); + C3 |= (bytes[index++] & 0xff) << 8; + C3 |= (bytes[index++] & 0xff) << 16; + C3 |= bytes[index++] << 24; + } + + private void packBlock( + byte[] bytes, + int off) + { + int index = off; + + bytes[index++] = (byte)C0; + bytes[index++] = (byte)(C0 >> 8); + bytes[index++] = (byte)(C0 >> 16); + bytes[index++] = (byte)(C0 >> 24); + + bytes[index++] = (byte)C1; + bytes[index++] = (byte)(C1 >> 8); + bytes[index++] = (byte)(C1 >> 16); + bytes[index++] = (byte)(C1 >> 24); + + bytes[index++] = (byte)C2; + bytes[index++] = (byte)(C2 >> 8); + bytes[index++] = (byte)(C2 >> 16); + bytes[index++] = (byte)(C2 >> 24); + + bytes[index++] = (byte)C3; + bytes[index++] = (byte)(C3 >> 8); + bytes[index++] = (byte)(C3 >> 16); + bytes[index++] = (byte)(C3 >> 24); + } + + private void encryptBlock(int[][] KW) + { + int r, r0, r1, r2, r3; + + C0 ^= KW[0][0]; + C1 ^= KW[0][1]; + C2 ^= KW[0][2]; + C3 ^= KW[0][3]; + + r = 1; + while (r < ROUNDS - 1) + { + r0 = T0[C0&255] ^ T1[(C1>>8)&255] ^ T2[(C2>>16)&255] ^ T3[(C3>>24)&255] ^ KW[r][0]; + r1 = T0[C1&255] ^ T1[(C2>>8)&255] ^ T2[(C3>>16)&255] ^ T3[(C0>>24)&255] ^ KW[r][1]; + r2 = T0[C2&255] ^ T1[(C3>>8)&255] ^ T2[(C0>>16)&255] ^ T3[(C1>>24)&255] ^ KW[r][2]; + r3 = T0[C3&255] ^ T1[(C0>>8)&255] ^ T2[(C1>>16)&255] ^ T3[(C2>>24)&255] ^ KW[r++][3]; + C0 = T0[r0&255] ^ T1[(r1>>8)&255] ^ T2[(r2>>16)&255] ^ T3[(r3>>24)&255] ^ KW[r][0]; + C1 = T0[r1&255] ^ T1[(r2>>8)&255] ^ T2[(r3>>16)&255] ^ T3[(r0>>24)&255] ^ KW[r][1]; + C2 = T0[r2&255] ^ T1[(r3>>8)&255] ^ T2[(r0>>16)&255] ^ T3[(r1>>24)&255] ^ KW[r][2]; + C3 = T0[r3&255] ^ T1[(r0>>8)&255] ^ T2[(r1>>16)&255] ^ T3[(r2>>24)&255] ^ KW[r++][3]; + } + + r0 = T0[C0&255] ^ T1[(C1>>8)&255] ^ T2[(C2>>16)&255] ^ T3[(C3>>24)&255] ^ KW[r][0]; + r1 = T0[C1&255] ^ T1[(C2>>8)&255] ^ T2[(C3>>16)&255] ^ T3[(C0>>24)&255] ^ KW[r][1]; + r2 = T0[C2&255] ^ T1[(C3>>8)&255] ^ T2[(C0>>16)&255] ^ T3[(C1>>24)&255] ^ KW[r][2]; + r3 = T0[C3&255] ^ T1[(C0>>8)&255] ^ T2[(C1>>16)&255] ^ T3[(C2>>24)&255] ^ KW[r++][3]; + + // the final round's table is a simple function of S so we don't use a whole other four tables for it + + C0 = (S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24) ^ KW[r][0]; + C1 = (S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24) ^ KW[r][1]; + C2 = (S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24) ^ KW[r][2]; + C3 = (S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24) ^ KW[r][3]; + + } + + private void decryptBlock(int[][] KW) + { + int r0, r1, r2, r3; + + C0 ^= KW[ROUNDS][0]; + C1 ^= KW[ROUNDS][1]; + C2 ^= KW[ROUNDS][2]; + C3 ^= KW[ROUNDS][3]; + + int r = ROUNDS-1; + + while (r>1) + { + r0 = Tinv0[C0&255] ^ Tinv1[(C3>>8)&255] ^ Tinv2[(C2>>16)&255] ^ Tinv3[(C1>>24)&255] ^ KW[r][0]; + r1 = Tinv0[C1&255] ^ Tinv1[(C0>>8)&255] ^ Tinv2[(C3>>16)&255] ^ Tinv3[(C2>>24)&255] ^ KW[r][1]; + r2 = Tinv0[C2&255] ^ Tinv1[(C1>>8)&255] ^ Tinv2[(C0>>16)&255] ^ Tinv3[(C3>>24)&255] ^ KW[r][2]; + r3 = Tinv0[C3&255] ^ Tinv1[(C2>>8)&255] ^ Tinv2[(C1>>16)&255] ^ Tinv3[(C0>>24)&255] ^ KW[r--][3]; + C0 = Tinv0[r0&255] ^ Tinv1[(r3>>8)&255] ^ Tinv2[(r2>>16)&255] ^ Tinv3[(r1>>24)&255] ^ KW[r][0]; + C1 = Tinv0[r1&255] ^ Tinv1[(r0>>8)&255] ^ Tinv2[(r3>>16)&255] ^ Tinv3[(r2>>24)&255] ^ KW[r][1]; + C2 = Tinv0[r2&255] ^ Tinv1[(r1>>8)&255] ^ Tinv2[(r0>>16)&255] ^ Tinv3[(r3>>24)&255] ^ KW[r][2]; + C3 = Tinv0[r3&255] ^ Tinv1[(r2>>8)&255] ^ Tinv2[(r1>>16)&255] ^ Tinv3[(r0>>24)&255] ^ KW[r--][3]; + } + + r0 = Tinv0[C0&255] ^ Tinv1[(C3>>8)&255] ^ Tinv2[(C2>>16)&255] ^ Tinv3[(C1>>24)&255] ^ KW[r][0]; + r1 = Tinv0[C1&255] ^ Tinv1[(C0>>8)&255] ^ Tinv2[(C3>>16)&255] ^ Tinv3[(C2>>24)&255] ^ KW[r][1]; + r2 = Tinv0[C2&255] ^ Tinv1[(C1>>8)&255] ^ Tinv2[(C0>>16)&255] ^ Tinv3[(C3>>24)&255] ^ KW[r][2]; + r3 = Tinv0[C3&255] ^ Tinv1[(C2>>8)&255] ^ Tinv2[(C1>>16)&255] ^ Tinv3[(C0>>24)&255] ^ KW[r][3]; + + // the final round's table is a simple function of Si so we don't use a whole other four tables for it + + C0 = (Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24) ^ KW[0][0]; + C1 = (Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24) ^ KW[0][1]; + C2 = (Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24) ^ KW[0][2]; + C3 = (Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24) ^ KW[0][3]; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/AESLightEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/AESLightEngine.java new file mode 100644 index 0000000..afd37ba --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/AESLightEngine.java @@ -0,0 +1,440 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * an implementation of the AES (Rijndael), from FIPS-197. + *

        + * For further details see: http://csrc.nist.gov/encryption/aes/. + * + * This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + * http://fp.gladman.plus.com/cryptography_technology/rijndael/ + * + * There are three levels of tradeoff of speed vs memory + * Because java has no preprocessor, they are written as three separate classes from which to choose + * + * The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + * and 4 for decryption. + * + * The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + * adding 12 rotate operations per round to compute the values contained in the other tables from + * the contents of the first + * + * The slowest version uses no static tables at all and computes the values + * in each round. + *

        + * This file contains the slowest performance version with no static tables + * for round precomputation, but it has the smallest foot print. + * + */ +public class AESLightEngine + implements BlockCipher +{ + // The S box + private static final byte[] S = { + (byte)99, (byte)124, (byte)119, (byte)123, (byte)242, (byte)107, (byte)111, (byte)197, + (byte)48, (byte)1, (byte)103, (byte)43, (byte)254, (byte)215, (byte)171, (byte)118, + (byte)202, (byte)130, (byte)201, (byte)125, (byte)250, (byte)89, (byte)71, (byte)240, + (byte)173, (byte)212, (byte)162, (byte)175, (byte)156, (byte)164, (byte)114, (byte)192, + (byte)183, (byte)253, (byte)147, (byte)38, (byte)54, (byte)63, (byte)247, (byte)204, + (byte)52, (byte)165, (byte)229, (byte)241, (byte)113, (byte)216, (byte)49, (byte)21, + (byte)4, (byte)199, (byte)35, (byte)195, (byte)24, (byte)150, (byte)5, (byte)154, + (byte)7, (byte)18, (byte)128, (byte)226, (byte)235, (byte)39, (byte)178, (byte)117, + (byte)9, (byte)131, (byte)44, (byte)26, (byte)27, (byte)110, (byte)90, (byte)160, + (byte)82, (byte)59, (byte)214, (byte)179, (byte)41, (byte)227, (byte)47, (byte)132, + (byte)83, (byte)209, (byte)0, (byte)237, (byte)32, (byte)252, (byte)177, (byte)91, + (byte)106, (byte)203, (byte)190, (byte)57, (byte)74, (byte)76, (byte)88, (byte)207, + (byte)208, (byte)239, (byte)170, (byte)251, (byte)67, (byte)77, (byte)51, (byte)133, + (byte)69, (byte)249, (byte)2, (byte)127, (byte)80, (byte)60, (byte)159, (byte)168, + (byte)81, (byte)163, (byte)64, (byte)143, (byte)146, (byte)157, (byte)56, (byte)245, + (byte)188, (byte)182, (byte)218, (byte)33, (byte)16, (byte)255, (byte)243, (byte)210, + (byte)205, (byte)12, (byte)19, (byte)236, (byte)95, (byte)151, (byte)68, (byte)23, + (byte)196, (byte)167, (byte)126, (byte)61, (byte)100, (byte)93, (byte)25, (byte)115, + (byte)96, (byte)129, (byte)79, (byte)220, (byte)34, (byte)42, (byte)144, (byte)136, + (byte)70, (byte)238, (byte)184, (byte)20, (byte)222, (byte)94, (byte)11, (byte)219, + (byte)224, (byte)50, (byte)58, (byte)10, (byte)73, (byte)6, (byte)36, (byte)92, + (byte)194, (byte)211, (byte)172, (byte)98, (byte)145, (byte)149, (byte)228, (byte)121, + (byte)231, (byte)200, (byte)55, (byte)109, (byte)141, (byte)213, (byte)78, (byte)169, + (byte)108, (byte)86, (byte)244, (byte)234, (byte)101, (byte)122, (byte)174, (byte)8, + (byte)186, (byte)120, (byte)37, (byte)46, (byte)28, (byte)166, (byte)180, (byte)198, + (byte)232, (byte)221, (byte)116, (byte)31, (byte)75, (byte)189, (byte)139, (byte)138, + (byte)112, (byte)62, (byte)181, (byte)102, (byte)72, (byte)3, (byte)246, (byte)14, + (byte)97, (byte)53, (byte)87, (byte)185, (byte)134, (byte)193, (byte)29, (byte)158, + (byte)225, (byte)248, (byte)152, (byte)17, (byte)105, (byte)217, (byte)142, (byte)148, + (byte)155, (byte)30, (byte)135, (byte)233, (byte)206, (byte)85, (byte)40, (byte)223, + (byte)140, (byte)161, (byte)137, (byte)13, (byte)191, (byte)230, (byte)66, (byte)104, + (byte)65, (byte)153, (byte)45, (byte)15, (byte)176, (byte)84, (byte)187, (byte)22, + }; + + // The inverse S-box + private static final byte[] Si = { + (byte)82, (byte)9, (byte)106, (byte)213, (byte)48, (byte)54, (byte)165, (byte)56, + (byte)191, (byte)64, (byte)163, (byte)158, (byte)129, (byte)243, (byte)215, (byte)251, + (byte)124, (byte)227, (byte)57, (byte)130, (byte)155, (byte)47, (byte)255, (byte)135, + (byte)52, (byte)142, (byte)67, (byte)68, (byte)196, (byte)222, (byte)233, (byte)203, + (byte)84, (byte)123, (byte)148, (byte)50, (byte)166, (byte)194, (byte)35, (byte)61, + (byte)238, (byte)76, (byte)149, (byte)11, (byte)66, (byte)250, (byte)195, (byte)78, + (byte)8, (byte)46, (byte)161, (byte)102, (byte)40, (byte)217, (byte)36, (byte)178, + (byte)118, (byte)91, (byte)162, (byte)73, (byte)109, (byte)139, (byte)209, (byte)37, + (byte)114, (byte)248, (byte)246, (byte)100, (byte)134, (byte)104, (byte)152, (byte)22, + (byte)212, (byte)164, (byte)92, (byte)204, (byte)93, (byte)101, (byte)182, (byte)146, + (byte)108, (byte)112, (byte)72, (byte)80, (byte)253, (byte)237, (byte)185, (byte)218, + (byte)94, (byte)21, (byte)70, (byte)87, (byte)167, (byte)141, (byte)157, (byte)132, + (byte)144, (byte)216, (byte)171, (byte)0, (byte)140, (byte)188, (byte)211, (byte)10, + (byte)247, (byte)228, (byte)88, (byte)5, (byte)184, (byte)179, (byte)69, (byte)6, + (byte)208, (byte)44, (byte)30, (byte)143, (byte)202, (byte)63, (byte)15, (byte)2, + (byte)193, (byte)175, (byte)189, (byte)3, (byte)1, (byte)19, (byte)138, (byte)107, + (byte)58, (byte)145, (byte)17, (byte)65, (byte)79, (byte)103, (byte)220, (byte)234, + (byte)151, (byte)242, (byte)207, (byte)206, (byte)240, (byte)180, (byte)230, (byte)115, + (byte)150, (byte)172, (byte)116, (byte)34, (byte)231, (byte)173, (byte)53, (byte)133, + (byte)226, (byte)249, (byte)55, (byte)232, (byte)28, (byte)117, (byte)223, (byte)110, + (byte)71, (byte)241, (byte)26, (byte)113, (byte)29, (byte)41, (byte)197, (byte)137, + (byte)111, (byte)183, (byte)98, (byte)14, (byte)170, (byte)24, (byte)190, (byte)27, + (byte)252, (byte)86, (byte)62, (byte)75, (byte)198, (byte)210, (byte)121, (byte)32, + (byte)154, (byte)219, (byte)192, (byte)254, (byte)120, (byte)205, (byte)90, (byte)244, + (byte)31, (byte)221, (byte)168, (byte)51, (byte)136, (byte)7, (byte)199, (byte)49, + (byte)177, (byte)18, (byte)16, (byte)89, (byte)39, (byte)128, (byte)236, (byte)95, + (byte)96, (byte)81, (byte)127, (byte)169, (byte)25, (byte)181, (byte)74, (byte)13, + (byte)45, (byte)229, (byte)122, (byte)159, (byte)147, (byte)201, (byte)156, (byte)239, + (byte)160, (byte)224, (byte)59, (byte)77, (byte)174, (byte)42, (byte)245, (byte)176, + (byte)200, (byte)235, (byte)187, (byte)60, (byte)131, (byte)83, (byte)153, (byte)97, + (byte)23, (byte)43, (byte)4, (byte)126, (byte)186, (byte)119, (byte)214, (byte)38, + (byte)225, (byte)105, (byte)20, (byte)99, (byte)85, (byte)33, (byte)12, (byte)125, + }; + + // vector used in calculating key schedule (powers of x in GF(256)) + private static final int[] rcon = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; + + private int shift( + int r, + int shift) + { + return (r >>> shift) | (r << -shift); + } + + /* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + + private static final int m1 = 0x80808080; + private static final int m2 = 0x7f7f7f7f; + private static final int m3 = 0x0000001b; + + private int FFmulX(int x) + { + return (((x & m2) << 1) ^ (((x & m1) >>> 7) * m3)); + } + + /* + The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. + + private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); } + private static final int m4 = 0x1b1b1b1b; + private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); } + + */ + + private int mcol(int x) + { + int f2 = FFmulX(x); + return f2 ^ shift(x ^ f2, 8) ^ shift(x, 16) ^ shift(x, 24); + } + + private int inv_mcol(int x) + { + int f2 = FFmulX(x); + int f4 = FFmulX(f2); + int f8 = FFmulX(f4); + int f9 = x ^ f8; + + return f2 ^ f4 ^ f8 ^ shift(f2 ^ f9, 8) ^ shift(f4 ^ f9, 16) ^ shift(f9, 24); + } + + + private int subWord(int x) + { + return (S[x&255]&255 | ((S[(x>>8)&255]&255)<<8) | ((S[(x>>16)&255]&255)<<16) | S[(x>>24)&255]<<24); + } + + /** + * Calculate the necessary round keys + * The number of calculations depends on key size and block size + * AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + * This code is written assuming those are the only possible values + */ + private int[][] generateWorkingKey( + byte[] key, + boolean forEncryption) + { + int KC = key.length / 4; // key length in words + int t; + + if (((KC != 4) && (KC != 6) && (KC != 8)) || ((KC * 4) != key.length)) + { + throw new IllegalArgumentException("Key length not 128/192/256 bits."); + } + + ROUNDS = KC + 6; // This is not always true for the generalized Rijndael that allows larger block sizes + int[][] W = new int[ROUNDS+1][4]; // 4 words in a block + + // + // copy the key into the round key array + // + + t = 0; + int i = 0; + while (i < key.length) + { + W[t >> 2][t & 3] = (key[i]&0xff) | ((key[i+1]&0xff) << 8) | ((key[i+2]&0xff) << 16) | (key[i+3] << 24); + i+=4; + t++; + } + + // + // while not enough round key material calculated + // calculate new values + // + int k = (ROUNDS + 1) << 2; + for (i = KC; (i < k); i++) + { + int temp = W[(i-1)>>2][(i-1)&3]; + if ((i % KC) == 0) + { + temp = subWord(shift(temp, 8)) ^ rcon[(i / KC)-1]; + } + else if ((KC > 6) && ((i % KC) == 4)) + { + temp = subWord(temp); + } + + W[i>>2][i&3] = W[(i - KC)>>2][(i-KC)&3] ^ temp; + } + + if (!forEncryption) + { + for (int j = 1; j < ROUNDS; j++) + { + for (i = 0; i < 4; i++) + { + W[j][i] = inv_mcol(W[j][i]); + } + } + } + + return W; + } + + private int ROUNDS; + private int[][] WorkingKey = null; + private int C0, C1, C2, C3; + private boolean forEncryption; + + private static final int BLOCK_SIZE = 16; + + /** + * default constructor - 128 bit block size. + */ + public AESLightEngine() + { + } + + /** + * initialise an AES cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + { + if (params instanceof KeyParameter) + { + WorkingKey = generateWorkingKey(((KeyParameter)params).getKey(), forEncryption); + this.forEncryption = forEncryption; + return; + } + + throw new IllegalArgumentException("invalid parameter passed to AES init - " + params.getClass().getName()); + } + + public String getAlgorithmName() + { + return "AES"; + } + + public int getBlockSize() + { + return BLOCK_SIZE; + } + + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + { + if (WorkingKey == null) + { + throw new IllegalStateException("AES engine not initialised"); + } + + if ((inOff + (32 / 2)) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + (32 / 2)) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (forEncryption) + { + unpackBlock(in, inOff); + encryptBlock(WorkingKey); + packBlock(out, outOff); + } + else + { + unpackBlock(in, inOff); + decryptBlock(WorkingKey); + packBlock(out, outOff); + } + + return BLOCK_SIZE; + } + + public void reset() + { + } + + private void unpackBlock( + byte[] bytes, + int off) + { + int index = off; + + C0 = (bytes[index++] & 0xff); + C0 |= (bytes[index++] & 0xff) << 8; + C0 |= (bytes[index++] & 0xff) << 16; + C0 |= bytes[index++] << 24; + + C1 = (bytes[index++] & 0xff); + C1 |= (bytes[index++] & 0xff) << 8; + C1 |= (bytes[index++] & 0xff) << 16; + C1 |= bytes[index++] << 24; + + C2 = (bytes[index++] & 0xff); + C2 |= (bytes[index++] & 0xff) << 8; + C2 |= (bytes[index++] & 0xff) << 16; + C2 |= bytes[index++] << 24; + + C3 = (bytes[index++] & 0xff); + C3 |= (bytes[index++] & 0xff) << 8; + C3 |= (bytes[index++] & 0xff) << 16; + C3 |= bytes[index++] << 24; + } + + private void packBlock( + byte[] bytes, + int off) + { + int index = off; + + bytes[index++] = (byte)C0; + bytes[index++] = (byte)(C0 >> 8); + bytes[index++] = (byte)(C0 >> 16); + bytes[index++] = (byte)(C0 >> 24); + + bytes[index++] = (byte)C1; + bytes[index++] = (byte)(C1 >> 8); + bytes[index++] = (byte)(C1 >> 16); + bytes[index++] = (byte)(C1 >> 24); + + bytes[index++] = (byte)C2; + bytes[index++] = (byte)(C2 >> 8); + bytes[index++] = (byte)(C2 >> 16); + bytes[index++] = (byte)(C2 >> 24); + + bytes[index++] = (byte)C3; + bytes[index++] = (byte)(C3 >> 8); + bytes[index++] = (byte)(C3 >> 16); + bytes[index++] = (byte)(C3 >> 24); + } + + private void encryptBlock(int[][] KW) + { + int r, r0, r1, r2, r3; + + C0 ^= KW[0][0]; + C1 ^= KW[0][1]; + C2 ^= KW[0][2]; + C3 ^= KW[0][3]; + + for (r = 1; r < ROUNDS - 1;) + { + r0 = mcol((S[C0&255]&255) ^ ((S[(C1>>8)&255]&255)<<8) ^ ((S[(C2>>16)&255]&255)<<16) ^ (S[(C3>>24)&255]<<24)) ^ KW[r][0]; + r1 = mcol((S[C1&255]&255) ^ ((S[(C2>>8)&255]&255)<<8) ^ ((S[(C3>>16)&255]&255)<<16) ^ (S[(C0>>24)&255]<<24)) ^ KW[r][1]; + r2 = mcol((S[C2&255]&255) ^ ((S[(C3>>8)&255]&255)<<8) ^ ((S[(C0>>16)&255]&255)<<16) ^ (S[(C1>>24)&255]<<24)) ^ KW[r][2]; + r3 = mcol((S[C3&255]&255) ^ ((S[(C0>>8)&255]&255)<<8) ^ ((S[(C1>>16)&255]&255)<<16) ^ (S[(C2>>24)&255]<<24)) ^ KW[r++][3]; + C0 = mcol((S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24)) ^ KW[r][0]; + C1 = mcol((S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24)) ^ KW[r][1]; + C2 = mcol((S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24)) ^ KW[r][2]; + C3 = mcol((S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24)) ^ KW[r++][3]; + } + + r0 = mcol((S[C0&255]&255) ^ ((S[(C1>>8)&255]&255)<<8) ^ ((S[(C2>>16)&255]&255)<<16) ^ (S[(C3>>24)&255]<<24)) ^ KW[r][0]; + r1 = mcol((S[C1&255]&255) ^ ((S[(C2>>8)&255]&255)<<8) ^ ((S[(C3>>16)&255]&255)<<16) ^ (S[(C0>>24)&255]<<24)) ^ KW[r][1]; + r2 = mcol((S[C2&255]&255) ^ ((S[(C3>>8)&255]&255)<<8) ^ ((S[(C0>>16)&255]&255)<<16) ^ (S[(C1>>24)&255]<<24)) ^ KW[r][2]; + r3 = mcol((S[C3&255]&255) ^ ((S[(C0>>8)&255]&255)<<8) ^ ((S[(C1>>16)&255]&255)<<16) ^ (S[(C2>>24)&255]<<24)) ^ KW[r++][3]; + + // the final round is a simple function of S + + C0 = (S[r0&255]&255) ^ ((S[(r1>>8)&255]&255)<<8) ^ ((S[(r2>>16)&255]&255)<<16) ^ (S[(r3>>24)&255]<<24) ^ KW[r][0]; + C1 = (S[r1&255]&255) ^ ((S[(r2>>8)&255]&255)<<8) ^ ((S[(r3>>16)&255]&255)<<16) ^ (S[(r0>>24)&255]<<24) ^ KW[r][1]; + C2 = (S[r2&255]&255) ^ ((S[(r3>>8)&255]&255)<<8) ^ ((S[(r0>>16)&255]&255)<<16) ^ (S[(r1>>24)&255]<<24) ^ KW[r][2]; + C3 = (S[r3&255]&255) ^ ((S[(r0>>8)&255]&255)<<8) ^ ((S[(r1>>16)&255]&255)<<16) ^ (S[(r2>>24)&255]<<24) ^ KW[r][3]; + + } + + private void decryptBlock(int[][] KW) + { + int r, r0, r1, r2, r3; + + C0 ^= KW[ROUNDS][0]; + C1 ^= KW[ROUNDS][1]; + C2 ^= KW[ROUNDS][2]; + C3 ^= KW[ROUNDS][3]; + + for (r = ROUNDS-1; r>1;) + { + r0 = inv_mcol((Si[C0&255]&255) ^ ((Si[(C3>>8)&255]&255)<<8) ^ ((Si[(C2>>16)&255]&255)<<16) ^ (Si[(C1>>24)&255]<<24)) ^ KW[r][0]; + r1 = inv_mcol((Si[C1&255]&255) ^ ((Si[(C0>>8)&255]&255)<<8) ^ ((Si[(C3>>16)&255]&255)<<16) ^ (Si[(C2>>24)&255]<<24)) ^ KW[r][1]; + r2 = inv_mcol((Si[C2&255]&255) ^ ((Si[(C1>>8)&255]&255)<<8) ^ ((Si[(C0>>16)&255]&255)<<16) ^ (Si[(C3>>24)&255]<<24)) ^ KW[r][2]; + r3 = inv_mcol((Si[C3&255]&255) ^ ((Si[(C2>>8)&255]&255)<<8) ^ ((Si[(C1>>16)&255]&255)<<16) ^ (Si[(C0>>24)&255]<<24)) ^ KW[r--][3]; + C0 = inv_mcol((Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24)) ^ KW[r][0]; + C1 = inv_mcol((Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24)) ^ KW[r][1]; + C2 = inv_mcol((Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24)) ^ KW[r][2]; + C3 = inv_mcol((Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24)) ^ KW[r--][3]; + } + + r0 = inv_mcol((Si[C0&255]&255) ^ ((Si[(C3>>8)&255]&255)<<8) ^ ((Si[(C2>>16)&255]&255)<<16) ^ (Si[(C1>>24)&255]<<24)) ^ KW[r][0]; + r1 = inv_mcol((Si[C1&255]&255) ^ ((Si[(C0>>8)&255]&255)<<8) ^ ((Si[(C3>>16)&255]&255)<<16) ^ (Si[(C2>>24)&255]<<24)) ^ KW[r][1]; + r2 = inv_mcol((Si[C2&255]&255) ^ ((Si[(C1>>8)&255]&255)<<8) ^ ((Si[(C0>>16)&255]&255)<<16) ^ (Si[(C3>>24)&255]<<24)) ^ KW[r][2]; + r3 = inv_mcol((Si[C3&255]&255) ^ ((Si[(C2>>8)&255]&255)<<8) ^ ((Si[(C1>>16)&255]&255)<<16) ^ (Si[(C0>>24)&255]<<24)) ^ KW[r][3]; + + // the final round's table is a simple function of Si + + C0 = (Si[r0&255]&255) ^ ((Si[(r3>>8)&255]&255)<<8) ^ ((Si[(r2>>16)&255]&255)<<16) ^ (Si[(r1>>24)&255]<<24) ^ KW[0][0]; + C1 = (Si[r1&255]&255) ^ ((Si[(r0>>8)&255]&255)<<8) ^ ((Si[(r3>>16)&255]&255)<<16) ^ (Si[(r2>>24)&255]<<24) ^ KW[0][1]; + C2 = (Si[r2&255]&255) ^ ((Si[(r1>>8)&255]&255)<<8) ^ ((Si[(r0>>16)&255]&255)<<16) ^ (Si[(r3>>24)&255]<<24) ^ KW[0][2]; + C3 = (Si[r3&255]&255) ^ ((Si[(r2>>8)&255]&255)<<8) ^ ((Si[(r1>>16)&255]&255)<<16) ^ (Si[(r0>>24)&255]<<24) ^ KW[0][3]; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/AESWrapEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/AESWrapEngine.java new file mode 100644 index 0000000..5d316ac --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/AESWrapEngine.java @@ -0,0 +1,16 @@ +package org.bouncycastle.crypto.engines; + +/** + * an implementation of the AES Key Wrapper from the NIST Key Wrap + * Specification. + *

        + * For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + */ +public class AESWrapEngine + extends RFC3394WrapEngine +{ + public AESWrapEngine() + { + super(new AESEngine()); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/BlowfishEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/BlowfishEngine.java new file mode 100644 index 0000000..6ee1c49 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/BlowfishEngine.java @@ -0,0 +1,576 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * A class that provides Blowfish key encryption operations, + * such as encoding data and generating keys. + * All the algorithms herein are from Applied Cryptography + * and implement a simplified cryptography interface. + */ +public final class BlowfishEngine +implements BlockCipher +{ + private final static int[] + KP = { + 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, + 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, + 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, + 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, + 0x9216D5D9, 0x8979FB1B + }, + + KS0 = { + 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, + 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, + 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, + 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, + 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, + 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, + 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, + 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, + 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, + 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, + 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, + 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, + 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, + 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, + 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, + 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, + 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, + 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, + 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, + 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, + 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, + 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, + 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, + 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, + 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, + 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, + 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, + 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, + 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, + 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, + 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, + 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, + 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, + 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, + 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, + 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, + 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, + 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, + 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, + 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, + 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, + 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, + 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, + 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, + 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, + 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, + 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, + 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, + 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, + 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, + 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, + 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, + 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, + 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, + 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, + 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, + 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, + 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, + 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, + 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, + 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, + 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, + 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, + 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A + }, + + KS1 = { + 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, + 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, + 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, + 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, + 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, + 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, + 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, + 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, + 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, + 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, + 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, + 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, + 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, + 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, + 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, + 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, + 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, + 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, + 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, + 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, + 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, + 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, + 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, + 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, + 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, + 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, + 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, + 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, + 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, + 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, + 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, + 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, + 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, + 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, + 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, + 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, + 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, + 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, + 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, + 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, + 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, + 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, + 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, + 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, + 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, + 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, + 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, + 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, + 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, + 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, + 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, + 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, + 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, + 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, + 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, + 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, + 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, + 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, + 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, + 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, + 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, + 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, + 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, + 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 + }, + + KS2 = { + 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, + 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, + 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, + 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, + 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, + 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, + 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, + 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, + 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, + 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, + 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, + 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, + 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, + 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, + 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, + 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, + 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, + 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, + 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, + 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, + 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, + 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, + 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, + 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, + 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, + 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, + 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, + 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, + 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, + 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, + 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, + 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, + 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, + 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, + 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, + 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, + 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, + 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, + 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, + 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, + 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, + 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, + 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, + 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, + 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, + 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, + 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, + 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, + 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, + 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, + 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, + 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, + 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, + 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, + 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, + 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, + 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, + 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, + 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, + 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, + 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, + 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, + 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, + 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 + }, + + KS3 = { + 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, + 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, + 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, + 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, + 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, + 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, + 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, + 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, + 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, + 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, + 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, + 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, + 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, + 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, + 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, + 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, + 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, + 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, + 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, + 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, + 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, + 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, + 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, + 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, + 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, + 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, + 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, + 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, + 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, + 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, + 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, + 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, + 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, + 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, + 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, + 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, + 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, + 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, + 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, + 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, + 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, + 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, + 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, + 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, + 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, + 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, + 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, + 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, + 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, + 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, + 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, + 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, + 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, + 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, + 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, + 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, + 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, + 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, + 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, + 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, + 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, + 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, + 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, + 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 + }; + + //==================================== + // Useful constants + //==================================== + + private static final int ROUNDS = 16; + private static final int BLOCK_SIZE = 8; // bytes = 64 bits + private static final int SBOX_SK = 256; + private static final int P_SZ = ROUNDS+2; + + private final int[] S0, S1, S2, S3; // the s-boxes + private final int[] P; // the p-array + + private boolean encrypting = false; + + private byte[] workingKey = null; + + public BlowfishEngine() + { + S0 = new int[SBOX_SK]; + S1 = new int[SBOX_SK]; + S2 = new int[SBOX_SK]; + S3 = new int[SBOX_SK]; + P = new int[P_SZ]; + } + + /** + * initialise a Blowfish cipher. + * + * @param encrypting whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean encrypting, + CipherParameters params) + { + if (params instanceof KeyParameter) + { + this.encrypting = encrypting; + this.workingKey = ((KeyParameter)params).getKey(); + setKey(this.workingKey); + + return; + } + + throw new IllegalArgumentException("invalid parameter passed to Blowfish init - " + params.getClass().getName()); + } + + public String getAlgorithmName() + { + return "Blowfish"; + } + + public final int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + { + if (workingKey == null) + { + throw new IllegalStateException("Blowfish not initialised"); + } + + if ((inOff + BLOCK_SIZE) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + BLOCK_SIZE) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (encrypting) + { + encryptBlock(in, inOff, out, outOff); + } + else + { + decryptBlock(in, inOff, out, outOff); + } + + return BLOCK_SIZE; + } + + public void reset() + { + } + + public int getBlockSize() + { + return BLOCK_SIZE; + } + + //================================== + // Private Implementation + //================================== + + private int F(int x) + { + return (((S0[(x >>> 24)] + S1[(x >>> 16) & 0xff]) + ^ S2[(x >>> 8) & 0xff]) + S3[x & 0xff]); + } + + /** + * apply the encryption cycle to each value pair in the table. + */ + private void processTable( + int xl, + int xr, + int[] table) + { + int size = table.length; + + for (int s = 0; s < size; s += 2) + { + xl ^= P[0]; + + for (int i = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + table[s] = xr; + table[s + 1] = xl; + + xr = xl; // end of cycle swap + xl = table[s]; + } + } + + private void setKey(byte[] key) + { + /* + * - comments are from _Applied Crypto_, Schneier, p338 + * please be careful comparing the two, AC numbers the + * arrays from 1, the enclosed code from 0. + * + * (1) + * Initialise the S-boxes and the P-array, with a fixed string + * This string contains the hexadecimal digits of pi (3.141...) + */ + System.arraycopy(KS0, 0, S0, 0, SBOX_SK); + System.arraycopy(KS1, 0, S1, 0, SBOX_SK); + System.arraycopy(KS2, 0, S2, 0, SBOX_SK); + System.arraycopy(KS3, 0, S3, 0, SBOX_SK); + + System.arraycopy(KP, 0, P, 0, P_SZ); + + /* + * (2) + * Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with the + * second 32-bits of the key, and so on for all bits of the key + * (up to P[17]). Repeatedly cycle through the key bits until the + * entire P-array has been XOR-ed with the key bits + */ + int keyLength = key.length; + int keyIndex = 0; + + for (int i=0; i < P_SZ; i++) + { + // get the 32 bits of the key, in 4 * 8 bit chunks + int data = 0x0000000; + for (int j=0; j < 4; j++) + { + // create a 32 bit block + data = (data << 8) | (key[keyIndex++] & 0xff); + + // wrap when we get to the end of the key + if (keyIndex >= keyLength) + { + keyIndex = 0; + } + } + // XOR the newly created 32 bit chunk onto the P-array + P[i] ^= data; + } + + /* + * (3) + * Encrypt the all-zero string with the Blowfish algorithm, using + * the subkeys described in (1) and (2) + * + * (4) + * Replace P1 and P2 with the output of step (3) + * + * (5) + * Encrypt the output of step(3) using the Blowfish algorithm, + * with the modified subkeys. + * + * (6) + * Replace P3 and P4 with the output of step (5) + * + * (7) + * Continue the process, replacing all elements of the P-array + * and then all four S-boxes in order, with the output of the + * continuously changing Blowfish algorithm + */ + + processTable(0, 0, P); + processTable(P[P_SZ - 2], P[P_SZ - 1], S0); + processTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1); + processTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2); + processTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3); + } + + /** + * Encrypt the given input starting at the given offset and place + * the result in the provided buffer starting at the given offset. + * The input will be an exact multiple of our blocksize. + */ + private void encryptBlock( + byte[] src, + int srcIndex, + byte[] dst, + int dstIndex) + { + int xl = BytesTo32bits(src, srcIndex); + int xr = BytesTo32bits(src, srcIndex+4); + + xl ^= P[0]; + + for (int i = 1; i < ROUNDS; i += 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i + 1]; + } + + xr ^= P[ROUNDS + 1]; + + Bits32ToBytes(xr, dst, dstIndex); + Bits32ToBytes(xl, dst, dstIndex + 4); + } + + /** + * Decrypt the given input starting at the given offset and place + * the result in the provided buffer starting at the given offset. + * The input will be an exact multiple of our blocksize. + */ + private void decryptBlock( + byte[] src, + int srcIndex, + byte[] dst, + int dstIndex) + { + int xl = BytesTo32bits(src, srcIndex); + int xr = BytesTo32bits(src, srcIndex + 4); + + xl ^= P[ROUNDS + 1]; + + for (int i = ROUNDS; i > 0 ; i -= 2) + { + xr ^= F(xl) ^ P[i]; + xl ^= F(xr) ^ P[i - 1]; + } + + xr ^= P[0]; + + Bits32ToBytes(xr, dst, dstIndex); + Bits32ToBytes(xl, dst, dstIndex+4); + } + + private int BytesTo32bits(byte[] b, int i) + { + return ((b[i] & 0xff) << 24) | + ((b[i+1] & 0xff) << 16) | + ((b[i+2] & 0xff) << 8) | + ((b[i+3] & 0xff)); + } + + private void Bits32ToBytes(int in, byte[] b, int offset) + { + b[offset + 3] = (byte)in; + b[offset + 2] = (byte)(in >> 8); + b[offset + 1] = (byte)(in >> 16); + b[offset] = (byte)(in >> 24); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/DESEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/DESEngine.java new file mode 100644 index 0000000..b04911c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/DESEngine.java @@ -0,0 +1,494 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * a class that provides a basic DES engine. + */ +public class DESEngine + implements BlockCipher +{ + protected static final int BLOCK_SIZE = 8; + + private int[] workingKey = null; + + /** + * standard constructor. + */ + public DESEngine() + { + } + + /** + * initialise a DES cipher. + * + * @param encrypting whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean encrypting, + CipherParameters params) + { + if (params instanceof KeyParameter) + { + if (((KeyParameter)params).getKey().length > 8) + { + throw new IllegalArgumentException("DES key too long - should be 8 bytes"); + } + + workingKey = generateWorkingKey(encrypting, + ((KeyParameter)params).getKey()); + + return; + } + + throw new IllegalArgumentException("invalid parameter passed to DES init - " + params.getClass().getName()); + } + + public String getAlgorithmName() + { + return "DES"; + } + + public int getBlockSize() + { + return BLOCK_SIZE; + } + + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + { + if (workingKey == null) + { + throw new IllegalStateException("DES engine not initialised"); + } + + if ((inOff + BLOCK_SIZE) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + BLOCK_SIZE) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + desFunc(workingKey, in, inOff, out, outOff); + + return BLOCK_SIZE; + } + + public void reset() + { + } + + /** + * what follows is mainly taken from "Applied Cryptography", by + * Bruce Schneier, however it also bears great resemblance to Richard + * Outerbridge's D3DES... + */ + +// private static final short[] Df_Key = +// { +// 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, +// 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10, +// 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 +// }; + + private static final short[] bytebit = + { + 0200, 0100, 040, 020, 010, 04, 02, 01 + }; + + private static final int[] bigbyte = + { + 0x800000, 0x400000, 0x200000, 0x100000, + 0x80000, 0x40000, 0x20000, 0x10000, + 0x8000, 0x4000, 0x2000, 0x1000, + 0x800, 0x400, 0x200, 0x100, + 0x80, 0x40, 0x20, 0x10, + 0x8, 0x4, 0x2, 0x1 + }; + + /* + * Use the key schedule specified in the Standard (ANSI X3.92-1981). + */ + + private static final byte[] pc1 = + { + 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, + 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, + 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, + 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 + }; + + private static final byte[] totrot = + { + 1, 2, 4, 6, 8, 10, 12, 14, + 15, 17, 19, 21, 23, 25, 27, 28 + }; + + private static final byte[] pc2 = + { + 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, + 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, + 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, + 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 + }; + + private static final int[] SP1 = { + 0x01010400, 0x00000000, 0x00010000, 0x01010404, + 0x01010004, 0x00010404, 0x00000004, 0x00010000, + 0x00000400, 0x01010400, 0x01010404, 0x00000400, + 0x01000404, 0x01010004, 0x01000000, 0x00000004, + 0x00000404, 0x01000400, 0x01000400, 0x00010400, + 0x00010400, 0x01010000, 0x01010000, 0x01000404, + 0x00010004, 0x01000004, 0x01000004, 0x00010004, + 0x00000000, 0x00000404, 0x00010404, 0x01000000, + 0x00010000, 0x01010404, 0x00000004, 0x01010000, + 0x01010400, 0x01000000, 0x01000000, 0x00000400, + 0x01010004, 0x00010000, 0x00010400, 0x01000004, + 0x00000400, 0x00000004, 0x01000404, 0x00010404, + 0x01010404, 0x00010004, 0x01010000, 0x01000404, + 0x01000004, 0x00000404, 0x00010404, 0x01010400, + 0x00000404, 0x01000400, 0x01000400, 0x00000000, + 0x00010004, 0x00010400, 0x00000000, 0x01010004 + }; + + private static final int[] SP2 = { + 0x80108020, 0x80008000, 0x00008000, 0x00108020, + 0x00100000, 0x00000020, 0x80100020, 0x80008020, + 0x80000020, 0x80108020, 0x80108000, 0x80000000, + 0x80008000, 0x00100000, 0x00000020, 0x80100020, + 0x00108000, 0x00100020, 0x80008020, 0x00000000, + 0x80000000, 0x00008000, 0x00108020, 0x80100000, + 0x00100020, 0x80000020, 0x00000000, 0x00108000, + 0x00008020, 0x80108000, 0x80100000, 0x00008020, + 0x00000000, 0x00108020, 0x80100020, 0x00100000, + 0x80008020, 0x80100000, 0x80108000, 0x00008000, + 0x80100000, 0x80008000, 0x00000020, 0x80108020, + 0x00108020, 0x00000020, 0x00008000, 0x80000000, + 0x00008020, 0x80108000, 0x00100000, 0x80000020, + 0x00100020, 0x80008020, 0x80000020, 0x00100020, + 0x00108000, 0x00000000, 0x80008000, 0x00008020, + 0x80000000, 0x80100020, 0x80108020, 0x00108000 + }; + + private static final int[] SP3 = { + 0x00000208, 0x08020200, 0x00000000, 0x08020008, + 0x08000200, 0x00000000, 0x00020208, 0x08000200, + 0x00020008, 0x08000008, 0x08000008, 0x00020000, + 0x08020208, 0x00020008, 0x08020000, 0x00000208, + 0x08000000, 0x00000008, 0x08020200, 0x00000200, + 0x00020200, 0x08020000, 0x08020008, 0x00020208, + 0x08000208, 0x00020200, 0x00020000, 0x08000208, + 0x00000008, 0x08020208, 0x00000200, 0x08000000, + 0x08020200, 0x08000000, 0x00020008, 0x00000208, + 0x00020000, 0x08020200, 0x08000200, 0x00000000, + 0x00000200, 0x00020008, 0x08020208, 0x08000200, + 0x08000008, 0x00000200, 0x00000000, 0x08020008, + 0x08000208, 0x00020000, 0x08000000, 0x08020208, + 0x00000008, 0x00020208, 0x00020200, 0x08000008, + 0x08020000, 0x08000208, 0x00000208, 0x08020000, + 0x00020208, 0x00000008, 0x08020008, 0x00020200 + }; + + private static final int[] SP4 = { + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802080, 0x00800081, 0x00800001, 0x00002001, + 0x00000000, 0x00802000, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00800080, 0x00800001, + 0x00000001, 0x00002000, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002001, 0x00002080, + 0x00800081, 0x00000001, 0x00002080, 0x00800080, + 0x00002000, 0x00802080, 0x00802081, 0x00000081, + 0x00800080, 0x00800001, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00000000, 0x00802000, + 0x00002080, 0x00800080, 0x00800081, 0x00000001, + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802081, 0x00000081, 0x00000001, 0x00002000, + 0x00800001, 0x00002001, 0x00802080, 0x00800081, + 0x00002001, 0x00002080, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002000, 0x00802080 + }; + + private static final int[] SP5 = { + 0x00000100, 0x02080100, 0x02080000, 0x42000100, + 0x00080000, 0x00000100, 0x40000000, 0x02080000, + 0x40080100, 0x00080000, 0x02000100, 0x40080100, + 0x42000100, 0x42080000, 0x00080100, 0x40000000, + 0x02000000, 0x40080000, 0x40080000, 0x00000000, + 0x40000100, 0x42080100, 0x42080100, 0x02000100, + 0x42080000, 0x40000100, 0x00000000, 0x42000000, + 0x02080100, 0x02000000, 0x42000000, 0x00080100, + 0x00080000, 0x42000100, 0x00000100, 0x02000000, + 0x40000000, 0x02080000, 0x42000100, 0x40080100, + 0x02000100, 0x40000000, 0x42080000, 0x02080100, + 0x40080100, 0x00000100, 0x02000000, 0x42080000, + 0x42080100, 0x00080100, 0x42000000, 0x42080100, + 0x02080000, 0x00000000, 0x40080000, 0x42000000, + 0x00080100, 0x02000100, 0x40000100, 0x00080000, + 0x00000000, 0x40080000, 0x02080100, 0x40000100 + }; + + private static final int[] SP6 = { + 0x20000010, 0x20400000, 0x00004000, 0x20404010, + 0x20400000, 0x00000010, 0x20404010, 0x00400000, + 0x20004000, 0x00404010, 0x00400000, 0x20000010, + 0x00400010, 0x20004000, 0x20000000, 0x00004010, + 0x00000000, 0x00400010, 0x20004010, 0x00004000, + 0x00404000, 0x20004010, 0x00000010, 0x20400010, + 0x20400010, 0x00000000, 0x00404010, 0x20404000, + 0x00004010, 0x00404000, 0x20404000, 0x20000000, + 0x20004000, 0x00000010, 0x20400010, 0x00404000, + 0x20404010, 0x00400000, 0x00004010, 0x20000010, + 0x00400000, 0x20004000, 0x20000000, 0x00004010, + 0x20000010, 0x20404010, 0x00404000, 0x20400000, + 0x00404010, 0x20404000, 0x00000000, 0x20400010, + 0x00000010, 0x00004000, 0x20400000, 0x00404010, + 0x00004000, 0x00400010, 0x20004010, 0x00000000, + 0x20404000, 0x20000000, 0x00400010, 0x20004010 + }; + + private static final int[] SP7 = { + 0x00200000, 0x04200002, 0x04000802, 0x00000000, + 0x00000800, 0x04000802, 0x00200802, 0x04200800, + 0x04200802, 0x00200000, 0x00000000, 0x04000002, + 0x00000002, 0x04000000, 0x04200002, 0x00000802, + 0x04000800, 0x00200802, 0x00200002, 0x04000800, + 0x04000002, 0x04200000, 0x04200800, 0x00200002, + 0x04200000, 0x00000800, 0x00000802, 0x04200802, + 0x00200800, 0x00000002, 0x04000000, 0x00200800, + 0x04000000, 0x00200800, 0x00200000, 0x04000802, + 0x04000802, 0x04200002, 0x04200002, 0x00000002, + 0x00200002, 0x04000000, 0x04000800, 0x00200000, + 0x04200800, 0x00000802, 0x00200802, 0x04200800, + 0x00000802, 0x04000002, 0x04200802, 0x04200000, + 0x00200800, 0x00000000, 0x00000002, 0x04200802, + 0x00000000, 0x00200802, 0x04200000, 0x00000800, + 0x04000002, 0x04000800, 0x00000800, 0x00200002 + }; + + private static final int[] SP8 = { + 0x10001040, 0x00001000, 0x00040000, 0x10041040, + 0x10000000, 0x10001040, 0x00000040, 0x10000000, + 0x00040040, 0x10040000, 0x10041040, 0x00041000, + 0x10041000, 0x00041040, 0x00001000, 0x00000040, + 0x10040000, 0x10000040, 0x10001000, 0x00001040, + 0x00041000, 0x00040040, 0x10040040, 0x10041000, + 0x00001040, 0x00000000, 0x00000000, 0x10040040, + 0x10000040, 0x10001000, 0x00041040, 0x00040000, + 0x00041040, 0x00040000, 0x10041000, 0x00001000, + 0x00000040, 0x10040040, 0x00001000, 0x00041040, + 0x10001000, 0x00000040, 0x10000040, 0x10040000, + 0x10040040, 0x10000000, 0x00040000, 0x10001040, + 0x00000000, 0x10041040, 0x00040040, 0x10000040, + 0x10040000, 0x10001000, 0x10001040, 0x00000000, + 0x10041040, 0x00041000, 0x00041000, 0x00001040, + 0x00001040, 0x00040040, 0x10000000, 0x10041000 + }; + + /** + * generate an integer based working key based on our secret key + * and what we processing we are planning to do. + * + * Acknowledgements for this routine go to James Gillogly & Phil Karn. + * (whoever, and wherever they are!). + */ + protected int[] generateWorkingKey( + boolean encrypting, + byte[] key) + { + int[] newKey = new int[32]; + boolean[] pc1m = new boolean[56], + pcr = new boolean[56]; + + for (int j = 0; j < 56; j++) + { + int l = pc1[j]; + + pc1m[j] = ((key[l >>> 3] & bytebit[l & 07]) != 0); + } + + for (int i = 0; i < 16; i++) + { + int l, m, n; + + if (encrypting) + { + m = i << 1; + } + else + { + m = (15 - i) << 1; + } + + n = m + 1; + newKey[m] = newKey[n] = 0; + + for (int j = 0; j < 28; j++) + { + l = j + totrot[i]; + if (l < 28) + { + pcr[j] = pc1m[l]; + } + else + { + pcr[j] = pc1m[l - 28]; + } + } + + for (int j = 28; j < 56; j++) + { + l = j + totrot[i]; + if (l < 56) + { + pcr[j] = pc1m[l]; + } + else + { + pcr[j] = pc1m[l - 28]; + } + } + + for (int j = 0; j < 24; j++) + { + if (pcr[pc2[j]]) + { + newKey[m] |= bigbyte[j]; + } + + if (pcr[pc2[j + 24]]) + { + newKey[n] |= bigbyte[j]; + } + } + } + + // + // store the processed key + // + for (int i = 0; i != 32; i += 2) + { + int i1, i2; + + i1 = newKey[i]; + i2 = newKey[i + 1]; + + newKey[i] = ((i1 & 0x00fc0000) << 6) | ((i1 & 0x00000fc0) << 10) + | ((i2 & 0x00fc0000) >>> 10) | ((i2 & 0x00000fc0) >>> 6); + + newKey[i + 1] = ((i1 & 0x0003f000) << 12) | ((i1 & 0x0000003f) << 16) + | ((i2 & 0x0003f000) >>> 4) | (i2 & 0x0000003f); + } + + return newKey; + } + + /** + * the DES engine. + */ + protected void desFunc( + int[] wKey, + byte[] in, + int inOff, + byte[] out, + int outOff) + { + int work, right, left; + + left = (in[inOff + 0] & 0xff) << 24; + left |= (in[inOff + 1] & 0xff) << 16; + left |= (in[inOff + 2] & 0xff) << 8; + left |= (in[inOff + 3] & 0xff); + + right = (in[inOff + 4] & 0xff) << 24; + right |= (in[inOff + 5] & 0xff) << 16; + right |= (in[inOff + 6] & 0xff) << 8; + right |= (in[inOff + 7] & 0xff); + + work = ((left >>> 4) ^ right) & 0x0f0f0f0f; + right ^= work; + left ^= (work << 4); + work = ((left >>> 16) ^ right) & 0x0000ffff; + right ^= work; + left ^= (work << 16); + work = ((right >>> 2) ^ left) & 0x33333333; + left ^= work; + right ^= (work << 2); + work = ((right >>> 8) ^ left) & 0x00ff00ff; + left ^= work; + right ^= (work << 8); + right = ((right << 1) | ((right >>> 31) & 1)) & 0xffffffff; + work = (left ^ right) & 0xaaaaaaaa; + left ^= work; + right ^= work; + left = ((left << 1) | ((left >>> 31) & 1)) & 0xffffffff; + + for (int round = 0; round < 8; round++) + { + int fval; + + work = (right << 28) | (right >>> 4); + work ^= wKey[round * 4 + 0]; + fval = SP7[ work & 0x3f]; + fval |= SP5[(work >>> 8) & 0x3f]; + fval |= SP3[(work >>> 16) & 0x3f]; + fval |= SP1[(work >>> 24) & 0x3f]; + work = right ^ wKey[round * 4 + 1]; + fval |= SP8[ work & 0x3f]; + fval |= SP6[(work >>> 8) & 0x3f]; + fval |= SP4[(work >>> 16) & 0x3f]; + fval |= SP2[(work >>> 24) & 0x3f]; + left ^= fval; + work = (left << 28) | (left >>> 4); + work ^= wKey[round * 4 + 2]; + fval = SP7[ work & 0x3f]; + fval |= SP5[(work >>> 8) & 0x3f]; + fval |= SP3[(work >>> 16) & 0x3f]; + fval |= SP1[(work >>> 24) & 0x3f]; + work = left ^ wKey[round * 4 + 3]; + fval |= SP8[ work & 0x3f]; + fval |= SP6[(work >>> 8) & 0x3f]; + fval |= SP4[(work >>> 16) & 0x3f]; + fval |= SP2[(work >>> 24) & 0x3f]; + right ^= fval; + } + + right = (right << 31) | (right >>> 1); + work = (left ^ right) & 0xaaaaaaaa; + left ^= work; + right ^= work; + left = (left << 31) | (left >>> 1); + work = ((left >>> 8) ^ right) & 0x00ff00ff; + right ^= work; + left ^= (work << 8); + work = ((left >>> 2) ^ right) & 0x33333333; + right ^= work; + left ^= (work << 2); + work = ((right >>> 16) ^ left) & 0x0000ffff; + left ^= work; + right ^= (work << 16); + work = ((right >>> 4) ^ left) & 0x0f0f0f0f; + left ^= work; + right ^= (work << 4); + + out[outOff + 0] = (byte)((right >>> 24) & 0xff); + out[outOff + 1] = (byte)((right >>> 16) & 0xff); + out[outOff + 2] = (byte)((right >>> 8) & 0xff); + out[outOff + 3] = (byte)(right & 0xff); + out[outOff + 4] = (byte)((left >>> 24) & 0xff); + out[outOff + 5] = (byte)((left >>> 16) & 0xff); + out[outOff + 6] = (byte)((left >>> 8) & 0xff); + out[outOff + 7] = (byte)(left & 0xff); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/DESedeEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/DESedeEngine.java new file mode 100644 index 0000000..d1935ec --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/DESedeEngine.java @@ -0,0 +1,126 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * a class that provides a basic DESede (or Triple DES) engine. + */ +public class DESedeEngine + extends DESEngine +{ + protected static final int BLOCK_SIZE = 8; + + private int[] workingKey1 = null; + private int[] workingKey2 = null; + private int[] workingKey3 = null; + + private boolean forEncryption; + + /** + * standard constructor. + */ + public DESedeEngine() + { + } + + /** + * initialise a DESede cipher. + * + * @param encrypting whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean encrypting, + CipherParameters params) + { + if (!(params instanceof KeyParameter)) + { + throw new IllegalArgumentException("invalid parameter passed to DESede init - " + params.getClass().getName()); + } + + byte[] keyMaster = ((KeyParameter)params).getKey(); + + if (keyMaster.length != 24 && keyMaster.length != 16) + { + throw new IllegalArgumentException("key size must be 16 or 24 bytes."); + } + + this.forEncryption = encrypting; + + byte[] key1 = new byte[8]; + System.arraycopy(keyMaster, 0, key1, 0, key1.length); + workingKey1 = generateWorkingKey(encrypting, key1); + + byte[] key2 = new byte[8]; + System.arraycopy(keyMaster, 8, key2, 0, key2.length); + workingKey2 = generateWorkingKey(!encrypting, key2); + + if (keyMaster.length == 24) + { + byte[] key3 = new byte[8]; + System.arraycopy(keyMaster, 16, key3, 0, key3.length); + workingKey3 = generateWorkingKey(encrypting, key3); + } + else // 16 byte key + { + workingKey3 = workingKey1; + } + } + + public String getAlgorithmName() + { + return "DESede"; + } + + public int getBlockSize() + { + return BLOCK_SIZE; + } + + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + { + if (workingKey1 == null) + { + throw new IllegalStateException("DESede engine not initialised"); + } + + if ((inOff + BLOCK_SIZE) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + BLOCK_SIZE) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + byte[] temp = new byte[BLOCK_SIZE]; + + if (forEncryption) + { + desFunc(workingKey1, in, inOff, temp, 0); + desFunc(workingKey2, temp, 0, temp, 0); + desFunc(workingKey3, temp, 0, out, outOff); + } + else + { + desFunc(workingKey3, in, inOff, temp, 0); + desFunc(workingKey2, temp, 0, temp, 0); + desFunc(workingKey1, temp, 0, out, outOff); + } + + return BLOCK_SIZE; + } + + public void reset() + { + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/DESedeWrapEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/DESedeWrapEngine.java new file mode 100644 index 0000000..9d571c3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/DESedeWrapEngine.java @@ -0,0 +1,348 @@ +package org.bouncycastle.crypto.engines; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.Wrapper; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.modes.CBCBlockCipher; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.util.Arrays; + +/** + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

        + * Note: + *

          + *
        • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage. + *
        • if you are using this to wrap triple-des keys you need to set the + * parity bits on the key and, if it's a two-key triple-des key, pad it + * yourself. + *
        + */ +public class DESedeWrapEngine + implements Wrapper +{ + /** Field engine */ + private CBCBlockCipher engine; + + /** Field param */ + private KeyParameter param; + + /** Field paramPlusIV */ + private ParametersWithIV paramPlusIV; + + /** Field iv */ + private byte[] iv; + + /** Field forWrapping */ + private boolean forWrapping; + + /** Field IV2 */ + private static final byte[] IV2 = { (byte) 0x4a, (byte) 0xdd, (byte) 0xa2, + (byte) 0x2c, (byte) 0x79, (byte) 0xe8, + (byte) 0x21, (byte) 0x05 }; + + // + // checksum digest + // + Digest sha1 = new SHA1Digest(); + byte[] digest = new byte[20]; + + /** + * Method init + * + * @param forWrapping + * @param param + */ + public void init(boolean forWrapping, CipherParameters param) + { + + this.forWrapping = forWrapping; + this.engine = new CBCBlockCipher(new DESedeEngine()); + + SecureRandom sr; + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom pr = (ParametersWithRandom) param; + param = pr.getParameters(); + sr = pr.getRandom(); + } + else + { + sr = new SecureRandom(); + } + + if (param instanceof KeyParameter) + { + this.param = (KeyParameter)param; + + if (this.forWrapping) + { + + // Hm, we have no IV but we want to wrap ?!? + // well, then we have to create our own IV. + this.iv = new byte[8]; + sr.nextBytes(iv); + + this.paramPlusIV = new ParametersWithIV(this.param, this.iv); + } + } + else if (param instanceof ParametersWithIV) + { + this.paramPlusIV = (ParametersWithIV)param; + this.iv = this.paramPlusIV.getIV(); + this.param = (KeyParameter)this.paramPlusIV.getParameters(); + + if (this.forWrapping) + { + if ((this.iv == null) || (this.iv.length != 8)) + { + throw new IllegalArgumentException("IV is not 8 octets"); + } + } + else + { + throw new IllegalArgumentException( + "You should not supply an IV for unwrapping"); + } + } + } + + /** + * Method getAlgorithmName + * + * @return the algorithm name "DESede". + */ + public String getAlgorithmName() + { + return "DESede"; + } + + /** + * Method wrap + * + * @param in + * @param inOff + * @param inLen + * @return the wrapped bytes. + */ + public byte[] wrap(byte[] in, int inOff, int inLen) + { + if (!forWrapping) + { + throw new IllegalStateException("Not initialized for wrapping"); + } + + byte keyToBeWrapped[] = new byte[inLen]; + + System.arraycopy(in, inOff, keyToBeWrapped, 0, inLen); + + // Compute the CMS Key Checksum, (section 5.6.1), call this CKS. + byte[] CKS = calculateCMSKeyChecksum(keyToBeWrapped); + + // Let WKCKS = WK || CKS where || is concatenation. + byte[] WKCKS = new byte[keyToBeWrapped.length + CKS.length]; + + System.arraycopy(keyToBeWrapped, 0, WKCKS, 0, keyToBeWrapped.length); + System.arraycopy(CKS, 0, WKCKS, keyToBeWrapped.length, CKS.length); + + // Encrypt WKCKS in CBC mode using KEK as the key and IV as the + // initialization vector. Call the results TEMP1. + + int blockSize = engine.getBlockSize(); + + if (WKCKS.length % blockSize != 0) + { + throw new IllegalStateException("Not multiple of block length"); + } + + engine.init(true, paramPlusIV); + + byte TEMP1[] = new byte[WKCKS.length]; + + for (int currentBytePos = 0; currentBytePos != WKCKS.length; currentBytePos += blockSize) + { + engine.processBlock(WKCKS, currentBytePos, TEMP1, currentBytePos); + } + + // Let TEMP2 = IV || TEMP1. + byte[] TEMP2 = new byte[this.iv.length + TEMP1.length]; + + System.arraycopy(this.iv, 0, TEMP2, 0, this.iv.length); + System.arraycopy(TEMP1, 0, TEMP2, this.iv.length, TEMP1.length); + + // Reverse the order of the octets in TEMP2 and call the result TEMP3. + byte[] TEMP3 = reverse(TEMP2); + + // Encrypt TEMP3 in CBC mode using the KEK and an initialization vector + // of 0x 4a dd a2 2c 79 e8 21 05. The resulting cipher text is the desired + // result. It is 40 octets long if a 168 bit key is being wrapped. + ParametersWithIV param2 = new ParametersWithIV(this.param, IV2); + + this.engine.init(true, param2); + + for (int currentBytePos = 0; currentBytePos != TEMP3.length; currentBytePos += blockSize) + { + engine.processBlock(TEMP3, currentBytePos, TEMP3, currentBytePos); + } + + return TEMP3; + } + + /** + * Method unwrap + * + * @param in + * @param inOff + * @param inLen + * @return the unwrapped bytes. + * @throws InvalidCipherTextException + */ + public byte[] unwrap(byte[] in, int inOff, int inLen) + throws InvalidCipherTextException + { + if (forWrapping) + { + throw new IllegalStateException("Not set for unwrapping"); + } + + if (in == null) + { + throw new InvalidCipherTextException("Null pointer as ciphertext"); + } + + final int blockSize = engine.getBlockSize(); + if (inLen % blockSize != 0) + { + throw new InvalidCipherTextException("Ciphertext not multiple of " + blockSize); + } + + /* + // Check if the length of the cipher text is reasonable given the key + // type. It must be 40 bytes for a 168 bit key and either 32, 40, or + // 48 bytes for a 128, 192, or 256 bit key. If the length is not supported + // or inconsistent with the algorithm for which the key is intended, + // return error. + // + // we do not accept 168 bit keys. it has to be 192 bit. + int lengthA = (estimatedKeyLengthInBit / 8) + 16; + int lengthB = estimatedKeyLengthInBit % 8; + + if ((lengthA != keyToBeUnwrapped.length) || (lengthB != 0)) { + throw new XMLSecurityException("empty"); + } + */ + + // Decrypt the cipher text with TRIPLedeS in CBC mode using the KEK + // and an initialization vector (IV) of 0x4adda22c79e82105. Call the output TEMP3. + ParametersWithIV param2 = new ParametersWithIV(this.param, IV2); + + this.engine.init(false, param2); + + byte TEMP3[] = new byte[inLen]; + + for (int currentBytePos = 0; currentBytePos != inLen; currentBytePos += blockSize) + { + engine.processBlock(in, inOff + currentBytePos, TEMP3, currentBytePos); + } + + // Reverse the order of the octets in TEMP3 and call the result TEMP2. + byte[] TEMP2 = reverse(TEMP3); + + // Decompose TEMP2 into IV, the first 8 octets, and TEMP1, the remaining octets. + this.iv = new byte[8]; + + byte[] TEMP1 = new byte[TEMP2.length - 8]; + + System.arraycopy(TEMP2, 0, this.iv, 0, 8); + System.arraycopy(TEMP2, 8, TEMP1, 0, TEMP2.length - 8); + + // Decrypt TEMP1 using TRIPLedeS in CBC mode using the KEK and the IV + // found in the previous step. Call the result WKCKS. + this.paramPlusIV = new ParametersWithIV(this.param, this.iv); + + this.engine.init(false, this.paramPlusIV); + + byte[] WKCKS = new byte[TEMP1.length]; + + for (int currentBytePos = 0; currentBytePos != WKCKS.length; currentBytePos += blockSize) + { + engine.processBlock(TEMP1, currentBytePos, WKCKS, currentBytePos); + } + + // Decompose WKCKS. CKS is the last 8 octets and WK, the wrapped key, are + // those octets before the CKS. + byte[] result = new byte[WKCKS.length - 8]; + byte[] CKStoBeVerified = new byte[8]; + + System.arraycopy(WKCKS, 0, result, 0, WKCKS.length - 8); + System.arraycopy(WKCKS, WKCKS.length - 8, CKStoBeVerified, 0, 8); + + // Calculate a CMS Key Checksum, (section 5.6.1), over the WK and compare + // with the CKS extracted in the above step. If they are not equal, return error. + if (!checkCMSKeyChecksum(result, CKStoBeVerified)) + { + throw new InvalidCipherTextException( + "Checksum inside ciphertext is corrupted"); + } + + // WK is the wrapped key, now extracted for use in data decryption. + return result; + } + + /** + * Some key wrap algorithms make use of the Key Checksum defined + * in CMS [CMS-Algorithms]. This is used to provide an integrity + * check value for the key being wrapped. The algorithm is + * + * - Compute the 20 octet SHA-1 hash on the key being wrapped. + * - Use the first 8 octets of this hash as the checksum value. + * + * @param key + * @return the CMS checksum. + * @throws RuntimeException + * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + */ + private byte[] calculateCMSKeyChecksum( + byte[] key) + { + byte[] result = new byte[8]; + + sha1.update(key, 0, key.length); + sha1.doFinal(digest, 0); + + System.arraycopy(digest, 0, result, 0, 8); + + return result; + } + + /** + * @param key + * @param checksum + * @return true if okay, false otherwise. + * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + */ + private boolean checkCMSKeyChecksum( + byte[] key, + byte[] checksum) + { + return Arrays.constantTimeAreEqual(calculateCMSKeyChecksum(key), checksum); + } + + private static byte[] reverse(byte[] bs) + { + byte[] result = new byte[bs.length]; + for (int i = 0; i < bs.length; i++) + { + result[i] = bs[bs.length - (i + 1)]; + } + return result; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/HC128Engine.java b/common/src/main/java/org/bouncycastle/crypto/engines/HC128Engine.java new file mode 100644 index 0000000..bf9a1b0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/HC128Engine.java @@ -0,0 +1,256 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.StreamCipher; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * HC-128 is a software-efficient stream cipher created by Hongjun Wu. It + * generates keystream from a 128-bit secret key and a 128-bit initialization + * vector. + *

        + * http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf + *

        + * It is a third phase candidate in the eStream contest, and is patent-free. + * No attacks are known as of today (April 2007). See + * + * http://www.ecrypt.eu.org/stream/hcp3.html + *

        + */ +public class HC128Engine + implements StreamCipher +{ + private int[] p = new int[512]; + private int[] q = new int[512]; + private int cnt = 0; + + private static int f1(int x) + { + return rotateRight(x, 7) ^ rotateRight(x, 18) + ^ (x >>> 3); + } + + private static int f2(int x) + { + return rotateRight(x, 17) ^ rotateRight(x, 19) + ^ (x >>> 10); + } + + private int g1(int x, int y, int z) + { + return (rotateRight(x, 10) ^ rotateRight(z, 23)) + + rotateRight(y, 8); + } + + private int g2(int x, int y, int z) + { + return (rotateLeft(x, 10) ^ rotateLeft(z, 23)) + rotateLeft(y, 8); + } + + private static int rotateLeft( + int x, + int bits) + { + return (x << bits) | (x >>> -bits); + } + + private static int rotateRight( + int x, + int bits) + { + return (x >>> bits) | (x << -bits); + } + + private int h1(int x) + { + return q[x & 0xFF] + q[((x >> 16) & 0xFF) + 256]; + } + + private int h2(int x) + { + return p[x & 0xFF] + p[((x >> 16) & 0xFF) + 256]; + } + + private static int mod1024(int x) + { + return x & 0x3FF; + } + + private static int mod512(int x) + { + return x & 0x1FF; + } + + private static int dim(int x, int y) + { + return mod512(x - y); + } + + private int step() + { + int j = mod512(cnt); + int ret; + if (cnt < 512) + { + p[j] += g1(p[dim(j, 3)], p[dim(j, 10)], p[dim(j, 511)]); + ret = h1(p[dim(j, 12)]) ^ p[j]; + } + else + { + q[j] += g2(q[dim(j, 3)], q[dim(j, 10)], q[dim(j, 511)]); + ret = h2(q[dim(j, 12)]) ^ q[j]; + } + cnt = mod1024(cnt + 1); + return ret; + } + + private byte[] key, iv; + private boolean initialised; + + private void init() + { + if (key.length != 16) + { + throw new java.lang.IllegalArgumentException( + "The key must be 128 bits long"); + } + + cnt = 0; + + int[] w = new int[1280]; + + for (int i = 0; i < 16; i++) + { + w[i >> 2] |= (key[i] & 0xff) << (8 * (i & 0x3)); + } + System.arraycopy(w, 0, w, 4, 4); + + for (int i = 0; i < iv.length && i < 16; i++) + { + w[(i >> 2) + 8] |= (iv[i] & 0xff) << (8 * (i & 0x3)); + } + System.arraycopy(w, 8, w, 12, 4); + + for (int i = 16; i < 1280; i++) + { + w[i] = f2(w[i - 2]) + w[i - 7] + f1(w[i - 15]) + w[i - 16] + i; + } + + System.arraycopy(w, 256, p, 0, 512); + System.arraycopy(w, 768, q, 0, 512); + + for (int i = 0; i < 512; i++) + { + p[i] = step(); + } + for (int i = 0; i < 512; i++) + { + q[i] = step(); + } + + cnt = 0; + } + + public String getAlgorithmName() + { + return "HC-128"; + } + + /** + * Initialise a HC-128 cipher. + * + * @param forEncryption whether or not we are for encryption. Irrelevant, as + * encryption and decryption are the same. + * @param params the parameters required to set up the cipher. + * @throws IllegalArgumentException if the params argument is + * inappropriate (ie. the key is not 128 bit long). + */ + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException + { + CipherParameters keyParam = params; + + if (params instanceof ParametersWithIV) + { + iv = ((ParametersWithIV)params).getIV(); + keyParam = ((ParametersWithIV)params).getParameters(); + } + else + { + iv = new byte[0]; + } + + if (keyParam instanceof KeyParameter) + { + key = ((KeyParameter)keyParam).getKey(); + init(); + } + else + { + throw new IllegalArgumentException( + "Invalid parameter passed to HC128 init - " + + params.getClass().getName()); + } + + initialised = true; + } + + private byte[] buf = new byte[4]; + private int idx = 0; + + private byte getByte() + { + if (idx == 0) + { + int step = step(); + buf[0] = (byte)(step & 0xFF); + step >>= 8; + buf[1] = (byte)(step & 0xFF); + step >>= 8; + buf[2] = (byte)(step & 0xFF); + step >>= 8; + buf[3] = (byte)(step & 0xFF); + } + byte ret = buf[idx]; + idx = idx + 1 & 0x3; + return ret; + } + + public void processBytes(byte[] in, int inOff, int len, byte[] out, + int outOff) throws DataLengthException + { + if (!initialised) + { + throw new IllegalStateException(getAlgorithmName() + + " not initialised"); + } + + if ((inOff + len) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + len) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + for (int i = 0; i < len; i++) + { + out[outOff + i] = (byte)(in[inOff + i] ^ getByte()); + } + } + + public void reset() + { + idx = 0; + init(); + } + + public byte returnByte(byte in) + { + return (byte)(in ^ getByte()); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/HC256Engine.java b/common/src/main/java/org/bouncycastle/crypto/engines/HC256Engine.java new file mode 100644 index 0000000..5b78687 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/HC256Engine.java @@ -0,0 +1,243 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.StreamCipher; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * HC-256 is a software-efficient stream cipher created by Hongjun Wu. It + * generates keystream from a 256-bit secret key and a 256-bit initialization + * vector. + *

        + * http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf + *

        + * Its brother, HC-128, is a third phase candidate in the eStream contest. + * The algorithm is patent-free. No attacks are known as of today (April 2007). + * See + * + * http://www.ecrypt.eu.org/stream/hcp3.html + *

        + */ +public class HC256Engine + implements StreamCipher +{ + private int[] p = new int[1024]; + private int[] q = new int[1024]; + private int cnt = 0; + + private int step() + { + int j = cnt & 0x3FF; + int ret; + if (cnt < 1024) + { + int x = p[(j - 3 & 0x3FF)]; + int y = p[(j - 1023 & 0x3FF)]; + p[j] += p[(j - 10 & 0x3FF)] + + (rotateRight(x, 10) ^ rotateRight(y, 23)) + + q[((x ^ y) & 0x3FF)]; + + x = p[(j - 12 & 0x3FF)]; + ret = (q[x & 0xFF] + q[((x >> 8) & 0xFF) + 256] + + q[((x >> 16) & 0xFF) + 512] + q[((x >> 24) & 0xFF) + 768]) + ^ p[j]; + } + else + { + int x = q[(j - 3 & 0x3FF)]; + int y = q[(j - 1023 & 0x3FF)]; + q[j] += q[(j - 10 & 0x3FF)] + + (rotateRight(x, 10) ^ rotateRight(y, 23)) + + p[((x ^ y) & 0x3FF)]; + + x = q[(j - 12 & 0x3FF)]; + ret = (p[x & 0xFF] + p[((x >> 8) & 0xFF) + 256] + + p[((x >> 16) & 0xFF) + 512] + p[((x >> 24) & 0xFF) + 768]) + ^ q[j]; + } + cnt = cnt + 1 & 0x7FF; + return ret; + } + + private byte[] key, iv; + private boolean initialised; + + private void init() + { + if (key.length != 32 && key.length != 16) + { + throw new IllegalArgumentException( + "The key must be 128/256 bits long"); + } + + if (iv.length < 16) + { + throw new IllegalArgumentException( + "The IV must be at least 128 bits long"); + } + + if (key.length != 32) + { + byte[] k = new byte[32]; + + System.arraycopy(key, 0, k, 0, key.length); + System.arraycopy(key, 0, k, 16, key.length); + + key = k; + } + + if (iv.length < 32) + { + byte[] newIV = new byte[32]; + + System.arraycopy(iv, 0, newIV, 0, iv.length); + System.arraycopy(iv, 0, newIV, iv.length, newIV.length - iv.length); + + iv = newIV; + } + + cnt = 0; + + int[] w = new int[2560]; + + for (int i = 0; i < 32; i++) + { + w[i >> 2] |= (key[i] & 0xff) << (8 * (i & 0x3)); + } + + for (int i = 0; i < 32; i++) + { + w[(i >> 2) + 8] |= (iv[i] & 0xff) << (8 * (i & 0x3)); + } + + for (int i = 16; i < 2560; i++) + { + int x = w[i - 2]; + int y = w[i - 15]; + w[i] = (rotateRight(x, 17) ^ rotateRight(x, 19) ^ (x >>> 10)) + + w[i - 7] + + (rotateRight(y, 7) ^ rotateRight(y, 18) ^ (y >>> 3)) + + w[i - 16] + i; + } + + System.arraycopy(w, 512, p, 0, 1024); + System.arraycopy(w, 1536, q, 0, 1024); + + for (int i = 0; i < 4096; i++) + { + step(); + } + + cnt = 0; + } + + public String getAlgorithmName() + { + return "HC-256"; + } + + /** + * Initialise a HC-256 cipher. + * + * @param forEncryption whether or not we are for encryption. Irrelevant, as + * encryption and decryption are the same. + * @param params the parameters required to set up the cipher. + * @throws IllegalArgumentException if the params argument is + * inappropriate (ie. the key is not 256 bit long). + */ + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException + { + CipherParameters keyParam = params; + + if (params instanceof ParametersWithIV) + { + iv = ((ParametersWithIV)params).getIV(); + keyParam = ((ParametersWithIV)params).getParameters(); + } + else + { + iv = new byte[0]; + } + + if (keyParam instanceof KeyParameter) + { + key = ((KeyParameter)keyParam).getKey(); + init(); + } + else + { + throw new IllegalArgumentException( + "Invalid parameter passed to HC256 init - " + + params.getClass().getName()); + } + + initialised = true; + } + + private byte[] buf = new byte[4]; + private int idx = 0; + + private byte getByte() + { + if (idx == 0) + { + int step = step(); + buf[0] = (byte)(step & 0xFF); + step >>= 8; + buf[1] = (byte)(step & 0xFF); + step >>= 8; + buf[2] = (byte)(step & 0xFF); + step >>= 8; + buf[3] = (byte)(step & 0xFF); + } + byte ret = buf[idx]; + idx = idx + 1 & 0x3; + return ret; + } + + public void processBytes(byte[] in, int inOff, int len, byte[] out, + int outOff) throws DataLengthException + { + if (!initialised) + { + throw new IllegalStateException(getAlgorithmName() + + " not initialised"); + } + + if ((inOff + len) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + len) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + for (int i = 0; i < len; i++) + { + out[outOff + i] = (byte)(in[inOff + i] ^ getByte()); + } + } + + public void reset() + { + idx = 0; + init(); + } + + public byte returnByte(byte in) + { + return (byte)(in ^ getByte()); + } + + private static int rotateRight( + int x, + int bits) + { + return (x >>> bits) | (x << -bits); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/IDEAEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/IDEAEngine.java new file mode 100644 index 0000000..34e2817 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/IDEAEngine.java @@ -0,0 +1,366 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * A class that provides a basic International Data Encryption Algorithm (IDEA) engine. + *

        + * This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + * implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (baring 1 typo at the + * end of the mulinv function!). + *

        + * It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ + *

        + * Note 1: This algorithm is patented in the USA, Japan, and Europe including + * at least Austria, France, Germany, Italy, Netherlands, Spain, Sweden, Switzerland + * and the United Kingdom. Non-commercial use is free, however any commercial + * products are liable for royalties. Please see + * www.mediacrypt.com for + * further details. This announcement has been included at the request of + * the patent holders. + *

        + * Note 2: Due to the requests concerning the above, this algorithm is now only + * included in the extended Bouncy Castle provider and JCE signed jars. It is + * not included in the default distributions. + */ +public class IDEAEngine + implements BlockCipher +{ + protected static final int BLOCK_SIZE = 8; + + private int[] workingKey = null; + + /** + * standard constructor. + */ + public IDEAEngine() + { + } + + /** + * initialise an IDEA cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + { + if (params instanceof KeyParameter) + { + workingKey = generateWorkingKey(forEncryption, + ((KeyParameter)params).getKey()); + return; + } + + throw new IllegalArgumentException("invalid parameter passed to IDEA init - " + params.getClass().getName()); + } + + public String getAlgorithmName() + { + return "IDEA"; + } + + public int getBlockSize() + { + return BLOCK_SIZE; + } + + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + { + if (workingKey == null) + { + throw new IllegalStateException("IDEA engine not initialised"); + } + + if ((inOff + BLOCK_SIZE) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + BLOCK_SIZE) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + ideaFunc(workingKey, in, inOff, out, outOff); + + return BLOCK_SIZE; + } + + public void reset() + { + } + + private static final int MASK = 0xffff; + private static final int BASE = 0x10001; + + private int bytesToWord( + byte[] in, + int inOff) + { + return ((in[inOff] << 8) & 0xff00) + (in[inOff + 1] & 0xff); + } + + private void wordToBytes( + int word, + byte[] out, + int outOff) + { + out[outOff] = (byte)(word >>> 8); + out[outOff + 1] = (byte)word; + } + + /** + * return x = x * y where the multiplication is done modulo + * 65537 (0x10001) (as defined in the IDEA specification) and + * a zero input is taken to be 65536 (0x10000). + * + * @param x the x value + * @param y the y value + * @return x = x * y + */ + private int mul( + int x, + int y) + { + if (x == 0) + { + x = (BASE - y); + } + else if (y == 0) + { + x = (BASE - x); + } + else + { + int p = x * y; + + y = p & MASK; + x = p >>> 16; + x = y - x + ((y < x) ? 1 : 0); + } + + return x & MASK; + } + + private void ideaFunc( + int[] workingKey, + byte[] in, + int inOff, + byte[] out, + int outOff) + { + int x0, x1, x2, x3, t0, t1; + int keyOff = 0; + + x0 = bytesToWord(in, inOff); + x1 = bytesToWord(in, inOff + 2); + x2 = bytesToWord(in, inOff + 4); + x3 = bytesToWord(in, inOff + 6); + + for (int round = 0; round < 8; round++) + { + x0 = mul(x0, workingKey[keyOff++]); + x1 += workingKey[keyOff++]; + x1 &= MASK; + x2 += workingKey[keyOff++]; + x2 &= MASK; + x3 = mul(x3, workingKey[keyOff++]); + + t0 = x1; + t1 = x2; + x2 ^= x0; + x1 ^= x3; + + x2 = mul(x2, workingKey[keyOff++]); + x1 += x2; + x1 &= MASK; + + x1 = mul(x1, workingKey[keyOff++]); + x2 += x1; + x2 &= MASK; + + x0 ^= x1; + x3 ^= x2; + x1 ^= t1; + x2 ^= t0; + } + + wordToBytes(mul(x0, workingKey[keyOff++]), out, outOff); + wordToBytes(x2 + workingKey[keyOff++], out, outOff + 2); /* NB: Order */ + wordToBytes(x1 + workingKey[keyOff++], out, outOff + 4); + wordToBytes(mul(x3, workingKey[keyOff]), out, outOff + 6); + } + + /** + * The following function is used to expand the user key to the encryption + * subkey. The first 16 bytes are the user key, and the rest of the subkey + * is calculated by rotating the previous 16 bytes by 25 bits to the left, + * and so on until the subkey is completed. + */ + private int[] expandKey( + byte[] uKey) + { + int[] key = new int[52]; + + if (uKey.length < 16) + { + byte[] tmp = new byte[16]; + + System.arraycopy(uKey, 0, tmp, tmp.length - uKey.length, uKey.length); + + uKey = tmp; + } + + for (int i = 0; i < 8; i++) + { + key[i] = bytesToWord(uKey, i * 2); + } + + for (int i = 8; i < 52; i++) + { + if ((i & 7) < 6) + { + key[i] = ((key[i - 7] & 127) << 9 | key[i - 6] >> 7) & MASK; + } + else if ((i & 7) == 6) + { + key[i] = ((key[i - 7] & 127) << 9 | key[i - 14] >> 7) & MASK; + } + else + { + key[i] = ((key[i - 15] & 127) << 9 | key[i - 14] >> 7) & MASK; + } + } + + return key; + } + + /** + * This function computes multiplicative inverse using Euclid's Greatest + * Common Divisor algorithm. Zero and one are self inverse. + *

        + * i.e. x * mulInv(x) == 1 (modulo BASE) + */ + private int mulInv( + int x) + { + int t0, t1, q, y; + + if (x < 2) + { + return x; + } + + t0 = 1; + t1 = BASE / x; + y = BASE % x; + + while (y != 1) + { + q = x / y; + x = x % y; + t0 = (t0 + (t1 * q)) & MASK; + if (x == 1) + { + return t0; + } + q = y / x; + y = y % x; + t1 = (t1 + (t0 * q)) & MASK; + } + + return (1 - t1) & MASK; + } + + /** + * Return the additive inverse of x. + *

        + * i.e. x + addInv(x) == 0 + */ + int addInv( + int x) + { + return (0 - x) & MASK; + } + + /** + * The function to invert the encryption subkey to the decryption subkey. + * It also involves the multiplicative inverse and the additive inverse functions. + */ + private int[] invertKey( + int[] inKey) + { + int t1, t2, t3, t4; + int p = 52; /* We work backwards */ + int[] key = new int[52]; + int inOff = 0; + + t1 = mulInv(inKey[inOff++]); + t2 = addInv(inKey[inOff++]); + t3 = addInv(inKey[inOff++]); + t4 = mulInv(inKey[inOff++]); + key[--p] = t4; + key[--p] = t3; + key[--p] = t2; + key[--p] = t1; + + for (int round = 1; round < 8; round++) + { + t1 = inKey[inOff++]; + t2 = inKey[inOff++]; + key[--p] = t2; + key[--p] = t1; + + t1 = mulInv(inKey[inOff++]); + t2 = addInv(inKey[inOff++]); + t3 = addInv(inKey[inOff++]); + t4 = mulInv(inKey[inOff++]); + key[--p] = t4; + key[--p] = t2; /* NB: Order */ + key[--p] = t3; + key[--p] = t1; + } + + t1 = inKey[inOff++]; + t2 = inKey[inOff++]; + key[--p] = t2; + key[--p] = t1; + + t1 = mulInv(inKey[inOff++]); + t2 = addInv(inKey[inOff++]); + t3 = addInv(inKey[inOff++]); + t4 = mulInv(inKey[inOff]); + key[--p] = t4; + key[--p] = t3; + key[--p] = t2; + key[--p] = t1; + + return key; + } + + private int[] generateWorkingKey( + boolean forEncryption, + byte[] userKey) + { + if (forEncryption) + { + return expandKey(userKey); + } + else + { + return invertKey(expandKey(userKey)); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/IESEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/IESEngine.java new file mode 100644 index 0000000..ae03040 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/IESEngine.java @@ -0,0 +1,256 @@ +package org.bouncycastle.crypto.engines; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.BufferedBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DerivationFunction; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.params.IESParameters; +import org.bouncycastle.crypto.params.IESWithCipherParameters; +import org.bouncycastle.crypto.params.KDFParameters; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.util.BigIntegers; + +/** + * support class for constructing integrated encryption ciphers + * for doing basic message exchanges on top of key agreement ciphers + */ +public class IESEngine +{ + BasicAgreement agree; + DerivationFunction kdf; + Mac mac; + BufferedBlockCipher cipher; + byte[] macBuf; + + boolean forEncryption; + CipherParameters privParam, pubParam; + IESParameters param; + + /** + * set up for use with stream mode, where the key derivation function + * is used to provide a stream of bytes to xor with the message. + * + * @param agree the key agreement used as the basis for the encryption + * @param kdf the key derivation function used for byte generation + * @param mac the message authentication code generator for the message + */ + public IESEngine( + BasicAgreement agree, + DerivationFunction kdf, + Mac mac) + { + this.agree = agree; + this.kdf = kdf; + this.mac = mac; + this.macBuf = new byte[mac.getMacSize()]; + this.cipher = null; + } + + /** + * set up for use in conjunction with a block cipher to handle the + * message. + * + * @param agree the key agreement used as the basis for the encryption + * @param kdf the key derivation function used for byte generation + * @param mac the message authentication code generator for the message + * @param cipher the cipher to used for encrypting the message + */ + public IESEngine( + BasicAgreement agree, + DerivationFunction kdf, + Mac mac, + BufferedBlockCipher cipher) + { + this.agree = agree; + this.kdf = kdf; + this.mac = mac; + this.macBuf = new byte[mac.getMacSize()]; + this.cipher = cipher; + } + + /** + * Initialise the encryptor. + * + * @param forEncryption whether or not this is encryption/decryption. + * @param privParam our private key parameters + * @param pubParam the recipient's/sender's public key parameters + * @param param encoding and derivation parameters. + */ + public void init( + boolean forEncryption, + CipherParameters privParam, + CipherParameters pubParam, + CipherParameters param) + { + this.forEncryption = forEncryption; + this.privParam = privParam; + this.pubParam = pubParam; + this.param = (IESParameters)param; + } + + private byte[] decryptBlock( + byte[] in_enc, + int inOff, + int inLen, + byte[] z) + throws InvalidCipherTextException + { + byte[] M = null; + KeyParameter macKey = null; + KDFParameters kParam = new KDFParameters(z, param.getDerivationV()); + int macKeySize = param.getMacKeySize(); + + kdf.init(kParam); + + inLen -= mac.getMacSize(); + + if (cipher == null) // stream mode + { + byte[] buf = generateKdfBytes(kParam, inLen + (macKeySize / 8)); + + M = new byte[inLen]; + + for (int i = 0; i != inLen; i++) + { + M[i] = (byte)(in_enc[inOff + i] ^ buf[i]); + } + + macKey = new KeyParameter(buf, inLen, (macKeySize / 8)); + } + else + { + int cipherKeySize = ((IESWithCipherParameters)param).getCipherKeySize(); + byte[] buf = generateKdfBytes(kParam, (cipherKeySize / 8) + (macKeySize / 8)); + + cipher.init(false, new KeyParameter(buf, 0, (cipherKeySize / 8))); + + byte[] tmp = new byte[cipher.getOutputSize(inLen)]; + + int len = cipher.processBytes(in_enc, inOff, inLen, tmp, 0); + + len += cipher.doFinal(tmp, len); + + M = new byte[len]; + + System.arraycopy(tmp, 0, M, 0, len); + + macKey = new KeyParameter(buf, (cipherKeySize / 8), (macKeySize / 8)); + } + + byte[] macIV = param.getEncodingV(); + + mac.init(macKey); + mac.update(in_enc, inOff, inLen); + mac.update(macIV, 0, macIV.length); + mac.doFinal(macBuf, 0); + + inOff += inLen; + + for (int t = 0; t < macBuf.length; t++) + { + if (macBuf[t] != in_enc[inOff + t]) + { + throw (new InvalidCipherTextException("Mac codes failed to equal.")); + } + } + + return M; + } + + private byte[] encryptBlock( + byte[] in, + int inOff, + int inLen, + byte[] z) + throws InvalidCipherTextException + { + byte[] C = null; + KeyParameter macKey = null; + KDFParameters kParam = new KDFParameters(z, param.getDerivationV()); + int c_text_length = 0; + int macKeySize = param.getMacKeySize(); + + if (cipher == null) // stream mode + { + byte[] buf = generateKdfBytes(kParam, inLen + (macKeySize / 8)); + + C = new byte[inLen + mac.getMacSize()]; + c_text_length = inLen; + + for (int i = 0; i != inLen; i++) + { + C[i] = (byte)(in[inOff + i] ^ buf[i]); + } + + macKey = new KeyParameter(buf, inLen, (macKeySize / 8)); + } + else + { + int cipherKeySize = ((IESWithCipherParameters)param).getCipherKeySize(); + byte[] buf = generateKdfBytes(kParam, (cipherKeySize / 8) + (macKeySize / 8)); + + cipher.init(true, new KeyParameter(buf, 0, (cipherKeySize / 8))); + + c_text_length = cipher.getOutputSize(inLen); + + byte[] tmp = new byte[c_text_length]; + + int len = cipher.processBytes(in, inOff, inLen, tmp, 0); + + len += cipher.doFinal(tmp, len); + + C = new byte[len + mac.getMacSize()]; + c_text_length = len; + + System.arraycopy(tmp, 0, C, 0, len); + + macKey = new KeyParameter(buf, (cipherKeySize / 8), (macKeySize / 8)); + } + + byte[] macIV = param.getEncodingV(); + + mac.init(macKey); + mac.update(C, 0, c_text_length); + mac.update(macIV, 0, macIV.length); + // + // return the message and it's MAC + // + mac.doFinal(C, c_text_length); + return C; + } + + private byte[] generateKdfBytes( + KDFParameters kParam, + int length) + { + byte[] buf = new byte[length]; + + kdf.init(kParam); + + kdf.generateBytes(buf, 0, buf.length); + + return buf; + } + + public byte[] processBlock( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + agree.init(privParam); + + BigInteger z = agree.calculateAgreement(pubParam); + + // TODO Is a fixed length result expected? + byte[] zBytes = BigIntegers.asUnsignedByteArray(z); + + return forEncryption + ? encryptBlock(in, inOff, inLen, zBytes) + : decryptBlock(in, inOff, inLen, zBytes); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/NullEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/NullEngine.java new file mode 100644 index 0000000..4e8f7d0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/NullEngine.java @@ -0,0 +1,84 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; + +/** + * The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + * Provided for the sake of completeness. + */ +public class NullEngine implements BlockCipher +{ + private boolean initialised; + protected static final int BLOCK_SIZE = 1; + + /** + * Standard constructor. + */ + public NullEngine() + { + super(); + } + + /* (non-Javadoc) + * @see org.bouncycastle.crypto.BlockCipher#init(boolean, org.bouncycastle.crypto.CipherParameters) + */ + public void init(boolean forEncryption, CipherParameters params) throws IllegalArgumentException + { + // we don't mind any parameters that may come in + this.initialised = true; + } + + /* (non-Javadoc) + * @see org.bouncycastle.crypto.BlockCipher#getAlgorithmName() + */ + public String getAlgorithmName() + { + return "Null"; + } + + /* (non-Javadoc) + * @see org.bouncycastle.crypto.BlockCipher#getBlockSize() + */ + public int getBlockSize() + { + return BLOCK_SIZE; + } + + /* (non-Javadoc) + * @see org.bouncycastle.crypto.BlockCipher#processBlock(byte[], int, byte[], int) + */ + public int processBlock(byte[] in, int inOff, byte[] out, int outOff) + throws DataLengthException, IllegalStateException + { + if (!initialised) + { + throw new IllegalStateException("Null engine not initialised"); + } + if ((inOff + BLOCK_SIZE) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + BLOCK_SIZE) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + for (int i = 0; i < BLOCK_SIZE; ++i) + { + out[outOff + i] = in[inOff + i]; + } + + return BLOCK_SIZE; + } + + /* (non-Javadoc) + * @see org.bouncycastle.crypto.BlockCipher#reset() + */ + public void reset() + { + // nothing needs to be done + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java new file mode 100644 index 0000000..c630dad --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/RFC3211WrapEngine.java @@ -0,0 +1,175 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.Wrapper; +import org.bouncycastle.crypto.modes.CBCBlockCipher; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +import javabc.SecureRandom; + +/** + * an implementation of the RFC 3211 Key Wrap + * Specification. + */ +public class RFC3211WrapEngine + implements Wrapper +{ + private CBCBlockCipher engine; + private ParametersWithIV param; + private boolean forWrapping; + private SecureRandom rand; + + public RFC3211WrapEngine(BlockCipher engine) + { + this.engine = new CBCBlockCipher(engine); + } + + public void init( + boolean forWrapping, + CipherParameters param) + { + this.forWrapping = forWrapping; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom p = (ParametersWithRandom)param; + + rand = p.getRandom(); + this.param = (ParametersWithIV)p.getParameters(); + } + else + { + if (forWrapping) + { + rand = new SecureRandom(); + } + + this.param = (ParametersWithIV)param; + } + } + + public String getAlgorithmName() + { + return engine.getUnderlyingCipher().getAlgorithmName() + "/RFC3211Wrap"; + } + + public byte[] wrap( + byte[] in, + int inOff, + int inLen) + { + if (!forWrapping) + { + throw new IllegalStateException("not set for wrapping"); + } + + engine.init(true, param); + + int blockSize = engine.getBlockSize(); + byte[] cekBlock; + + if (inLen + 4 < blockSize * 2) + { + cekBlock = new byte[blockSize * 2]; + } + else + { + cekBlock = new byte[(inLen + 4) % blockSize == 0 ? inLen + 4 : ((inLen + 4) / blockSize + 1) * blockSize]; + } + + cekBlock[0] = (byte)inLen; + cekBlock[1] = (byte)~in[inOff]; + cekBlock[2] = (byte)~in[inOff + 1]; + cekBlock[3] = (byte)~in[inOff + 2]; + + System.arraycopy(in, inOff, cekBlock, 4, inLen); + + for (int i = inLen + 4; i < cekBlock.length; i++) + { + cekBlock[i] = (byte)rand.nextInt(); + } + + for (int i = 0; i < cekBlock.length; i += blockSize) + { + engine.processBlock(cekBlock, i, cekBlock, i); + } + + for (int i = 0; i < cekBlock.length; i += blockSize) + { + engine.processBlock(cekBlock, i, cekBlock, i); + } + + return cekBlock; + } + + public byte[] unwrap( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + if (forWrapping) + { + throw new IllegalStateException("not set for unwrapping"); + } + + int blockSize = engine.getBlockSize(); + + if (inLen < 2 * blockSize) + { + throw new InvalidCipherTextException("input too short"); + } + + byte[] cekBlock = new byte[inLen]; + byte[] iv = new byte[blockSize]; + + System.arraycopy(in, inOff, cekBlock, 0, inLen); + System.arraycopy(in, inOff, iv, 0, iv.length); + + engine.init(false, new ParametersWithIV(param.getParameters(), iv)); + + for (int i = blockSize; i < cekBlock.length; i += blockSize) + { + engine.processBlock(cekBlock, i, cekBlock, i); + } + + System.arraycopy(cekBlock, cekBlock.length - iv.length, iv, 0, iv.length); + + engine.init(false, new ParametersWithIV(param.getParameters(), iv)); + + engine.processBlock(cekBlock, 0, cekBlock, 0); + + engine.init(false, param); + + for (int i = 0; i < cekBlock.length; i += blockSize) + { + engine.processBlock(cekBlock, i, cekBlock, i); + } + + if ((cekBlock[0] & 0xff) > cekBlock.length - 4) + { + throw new InvalidCipherTextException("wrapped key corrupted"); + } + + byte[] key = new byte[cekBlock[0] & 0xff]; + + System.arraycopy(cekBlock, 4, key, 0, cekBlock[0]); + + // Note: Using constant time comparison + int nonEqual = 0; + for (int i = 0; i != 3; i++) + { + byte check = (byte)~cekBlock[1 + i]; + nonEqual |= (check ^ key[i]); + } + if (nonEqual != 0) + { + throw new InvalidCipherTextException("wrapped key fails checksum"); + } + + return key; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java new file mode 100644 index 0000000..540bd25 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/RFC3394WrapEngine.java @@ -0,0 +1,177 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.Wrapper; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.util.Arrays; + +/** + * an implementation of the AES Key Wrapper from the NIST Key Wrap + * Specification as described in RFC 3394. + *

        + * For further details see: http://www.ietf.org/rfc/rfc3394.txt + * and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + */ +public class RFC3394WrapEngine + implements Wrapper +{ + private BlockCipher engine; + private KeyParameter param; + private boolean forWrapping; + + private byte[] iv = { + (byte)0xa6, (byte)0xa6, (byte)0xa6, (byte)0xa6, + (byte)0xa6, (byte)0xa6, (byte)0xa6, (byte)0xa6 }; + + public RFC3394WrapEngine(BlockCipher engine) + { + this.engine = engine; + } + + public void init( + boolean forWrapping, + CipherParameters param) + { + this.forWrapping = forWrapping; + + if (param instanceof ParametersWithRandom) + { + param = ((ParametersWithRandom) param).getParameters(); + } + + if (param instanceof KeyParameter) + { + this.param = (KeyParameter)param; + } + else if (param instanceof ParametersWithIV) + { + this.iv = ((ParametersWithIV)param).getIV(); + this.param = (KeyParameter)((ParametersWithIV) param).getParameters(); + if (this.iv.length != 8) + { + throw new IllegalArgumentException("IV not equal to 8"); + } + } + } + + public String getAlgorithmName() + { + return engine.getAlgorithmName(); + } + + public byte[] wrap( + byte[] in, + int inOff, + int inLen) + { + if (!forWrapping) + { + throw new IllegalStateException("not set for wrapping"); + } + + int n = inLen / 8; + + if ((n * 8) != inLen) + { + throw new DataLengthException("wrap data must be a multiple of 8 bytes"); + } + + byte[] block = new byte[inLen + iv.length]; + byte[] buf = new byte[8 + iv.length]; + + System.arraycopy(iv, 0, block, 0, iv.length); + System.arraycopy(in, 0, block, iv.length, inLen); + + engine.init(true, param); + + for (int j = 0; j != 6; j++) + { + for (int i = 1; i <= n; i++) + { + System.arraycopy(block, 0, buf, 0, iv.length); + System.arraycopy(block, 8 * i, buf, iv.length, 8); + engine.processBlock(buf, 0, buf, 0); + + int t = n * j + i; + for (int k = 1; t != 0; k++) + { + byte v = (byte)t; + + buf[iv.length - k] ^= v; + + t >>>= 8; + } + + System.arraycopy(buf, 0, block, 0, 8); + System.arraycopy(buf, 8, block, 8 * i, 8); + } + } + + return block; + } + + public byte[] unwrap( + byte[] in, + int inOff, + int inLen) + throws InvalidCipherTextException + { + if (forWrapping) + { + throw new IllegalStateException("not set for unwrapping"); + } + + int n = inLen / 8; + + if ((n * 8) != inLen) + { + throw new InvalidCipherTextException("unwrap data must be a multiple of 8 bytes"); + } + + byte[] block = new byte[inLen - iv.length]; + byte[] a = new byte[iv.length]; + byte[] buf = new byte[8 + iv.length]; + + System.arraycopy(in, 0, a, 0, iv.length); + System.arraycopy(in, iv.length, block, 0, inLen - iv.length); + + engine.init(false, param); + + n = n - 1; + + for (int j = 5; j >= 0; j--) + { + for (int i = n; i >= 1; i--) + { + System.arraycopy(a, 0, buf, 0, iv.length); + System.arraycopy(block, 8 * (i - 1), buf, iv.length, 8); + + int t = n * j + i; + for (int k = 1; t != 0; k++) + { + byte v = (byte)t; + + buf[iv.length - k] ^= v; + + t >>>= 8; + } + + engine.processBlock(buf, 0, buf, 0); + System.arraycopy(buf, 0, a, 0, 8); + System.arraycopy(buf, 8, block, 8 * (i - 1), 8); + } + } + + if (!Arrays.constantTimeAreEqual(a, iv)) + { + throw new InvalidCipherTextException("checksum failed"); + } + + return block; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/RSABlindedEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/RSABlindedEngine.java new file mode 100644 index 0000000..d7449c1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/RSABlindedEngine.java @@ -0,0 +1,126 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSAKeyParameters; +import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; +import org.bouncycastle.util.BigIntegers; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * this does your basic RSA algorithm with blinding + */ +public class RSABlindedEngine + implements AsymmetricBlockCipher +{ + private static BigInteger ONE = BigInteger.valueOf(1); + + private RSACoreEngine core = new RSACoreEngine(); + private RSAKeyParameters key; + private SecureRandom random; + + /** + * initialise the RSA engine. + * + * @param forEncryption true if we are encrypting, false otherwise. + * @param param the necessary RSA key parameters. + */ + public void init( + boolean forEncryption, + CipherParameters param) + { + core.init(forEncryption, param); + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + key = (RSAKeyParameters)rParam.getParameters(); + random = rParam.getRandom(); + } + else + { + key = (RSAKeyParameters)param; + random = new SecureRandom(); + } + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public int getInputBlockSize() + { + return core.getInputBlockSize(); + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public int getOutputBlockSize() + { + return core.getOutputBlockSize(); + } + + /** + * Process a single block using the basic RSA algorithm. + * + * @param in the input array. + * @param inOff the offset into the input buffer where the data starts. + * @param inLen the length of the data to be processed. + * @return the result of the RSA process. + * @exception DataLengthException the input block is too large. + */ + public byte[] processBlock( + byte[] in, + int inOff, + int inLen) + { + if (key == null) + { + throw new IllegalStateException("RSA engine not initialised"); + } + + BigInteger input = core.convertInput(in, inOff, inLen); + + BigInteger result; + if (key instanceof RSAPrivateCrtKeyParameters) + { + RSAPrivateCrtKeyParameters k = (RSAPrivateCrtKeyParameters)key; + + BigInteger e = k.getPublicExponent(); + if (e != null) // can't do blinding without a public exponent + { + BigInteger m = k.getModulus(); + BigInteger r = BigIntegers.createRandomInRange(ONE, m.subtract(ONE), random); + + BigInteger blindedInput = r.modPow(e, m).multiply(input).mod(m); + BigInteger blindedResult = core.processBlock(blindedInput); + + BigInteger rInv = r.modInverse(m); + result = blindedResult.multiply(rInv).mod(m); + } + else + { + result = core.processBlock(input); + } + } + else + { + result = core.processBlock(input); + } + + return core.convertOutput(result); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/RSABlindingEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/RSABlindingEngine.java new file mode 100644 index 0000000..e0d6814 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/RSABlindingEngine.java @@ -0,0 +1,137 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSABlindingParameters; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +import javabc.BigInteger; + +/** + * This does your basic RSA Chaum's blinding and unblinding as outlined in + * "Handbook of Applied Cryptography", page 475. You need to use this if you are + * trying to get another party to generate signatures without them being aware + * of the message they are signing. + */ +public class RSABlindingEngine + implements AsymmetricBlockCipher +{ + private RSACoreEngine core = new RSACoreEngine(); + + private RSAKeyParameters key; + private BigInteger blindingFactor; + + private boolean forEncryption; + + /** + * Initialise the blinding engine. + * + * @param forEncryption true if we are encrypting (blinding), false otherwise. + * @param param the necessary RSA key parameters. + */ + public void init( + boolean forEncryption, + CipherParameters param) + { + RSABlindingParameters p; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + p = (RSABlindingParameters)rParam.getParameters(); + } + else + { + p = (RSABlindingParameters)param; + } + + core.init(forEncryption, p.getPublicKey()); + + this.forEncryption = forEncryption; + this.key = p.getPublicKey(); + this.blindingFactor = p.getBlindingFactor(); + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public int getInputBlockSize() + { + return core.getInputBlockSize(); + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public int getOutputBlockSize() + { + return core.getOutputBlockSize(); + } + + /** + * Process a single block using the RSA blinding algorithm. + * + * @param in the input array. + * @param inOff the offset into the input buffer where the data starts. + * @param inLen the length of the data to be processed. + * @return the result of the RSA process. + * @throws DataLengthException the input block is too large. + */ + public byte[] processBlock( + byte[] in, + int inOff, + int inLen) + { + BigInteger msg = core.convertInput(in, inOff, inLen); + + if (forEncryption) + { + msg = blindMessage(msg); + } + else + { + msg = unblindMessage(msg); + } + + return core.convertOutput(msg); + } + + /* + * Blind message with the blind factor. + */ + private BigInteger blindMessage( + BigInteger msg) + { + BigInteger blindMsg = blindingFactor; + blindMsg = msg.multiply(blindMsg.modPow(key.getExponent(), key.getModulus())); + blindMsg = blindMsg.mod(key.getModulus()); + + return blindMsg; + } + + /* + * Unblind the message blinded with the blind factor. + */ + private BigInteger unblindMessage( + BigInteger blindedMsg) + { + BigInteger m = key.getModulus(); + BigInteger msg = blindedMsg; + BigInteger blindFactorInverse = blindingFactor.modInverse(m); + msg = msg.multiply(blindFactorInverse); + msg = msg.mod(m); + + return msg; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/RSACoreEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/RSACoreEngine.java new file mode 100644 index 0000000..886530c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/RSACoreEngine.java @@ -0,0 +1,203 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSAKeyParameters; +import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; + +import javabc.BigInteger; + +/** + * this does your basic RSA algorithm. + */ +class RSACoreEngine +{ + private RSAKeyParameters key; + private boolean forEncryption; + + /** + * initialise the RSA engine. + * + * @param forEncryption true if we are encrypting, false otherwise. + * @param param the necessary RSA key parameters. + */ + public void init( + boolean forEncryption, + CipherParameters param) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + key = (RSAKeyParameters)rParam.getParameters(); + } + else + { + key = (RSAKeyParameters)param; + } + + this.forEncryption = forEncryption; + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public int getInputBlockSize() + { + int bitSize = key.getModulus().bitLength(); + + if (forEncryption) + { + return (bitSize + 7) / 8 - 1; + } + else + { + return (bitSize + 7) / 8; + } + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public int getOutputBlockSize() + { + int bitSize = key.getModulus().bitLength(); + + if (forEncryption) + { + return (bitSize + 7) / 8; + } + else + { + return (bitSize + 7) / 8 - 1; + } + } + + public BigInteger convertInput( + byte[] in, + int inOff, + int inLen) + { + if (inLen > (getInputBlockSize() + 1)) + { + throw new DataLengthException("input too large for RSA cipher."); + } + else if (inLen == (getInputBlockSize() + 1) && !forEncryption) + { + throw new DataLengthException("input too large for RSA cipher."); + } + + byte[] block; + + if (inOff != 0 || inLen != in.length) + { + block = new byte[inLen]; + + System.arraycopy(in, inOff, block, 0, inLen); + } + else + { + block = in; + } + + BigInteger res = new BigInteger(1, block); + if (res.compareTo(key.getModulus()) >= 0) + { + throw new DataLengthException("input too large for RSA cipher."); + } + + return res; + } + + public byte[] convertOutput( + BigInteger result) + { + byte[] output = result.toByteArray(); + + if (forEncryption) + { + if (output[0] == 0 && output.length > getOutputBlockSize()) // have ended up with an extra zero byte, copy down. + { + byte[] tmp = new byte[output.length - 1]; + + System.arraycopy(output, 1, tmp, 0, tmp.length); + + return tmp; + } + + if (output.length < getOutputBlockSize()) // have ended up with less bytes than normal, lengthen + { + byte[] tmp = new byte[getOutputBlockSize()]; + + System.arraycopy(output, 0, tmp, tmp.length - output.length, output.length); + + return tmp; + } + } + else + { + if (output[0] == 0) // have ended up with an extra zero byte, copy down. + { + byte[] tmp = new byte[output.length - 1]; + + System.arraycopy(output, 1, tmp, 0, tmp.length); + + return tmp; + } + } + + return output; + } + + public BigInteger processBlock(BigInteger input) + { + if (key instanceof RSAPrivateCrtKeyParameters) + { + // + // we have the extra factors, use the Chinese Remainder Theorem - the author + // wishes to express his thanks to Dirk Bonekaemper at rtsffm.com for + // advice regarding the expression of this. + // + RSAPrivateCrtKeyParameters crtKey = (RSAPrivateCrtKeyParameters)key; + + BigInteger p = crtKey.getP(); + BigInteger q = crtKey.getQ(); + BigInteger dP = crtKey.getDP(); + BigInteger dQ = crtKey.getDQ(); + BigInteger qInv = crtKey.getQInv(); + + BigInteger mP, mQ, h, m; + + // mP = ((input mod p) ^ dP)) mod p + mP = (input.remainder(p)).modPow(dP, p); + + // mQ = ((input mod q) ^ dQ)) mod q + mQ = (input.remainder(q)).modPow(dQ, q); + + // h = qInv * (mP - mQ) mod p + h = mP.subtract(mQ); + h = h.multiply(qInv); + h = h.mod(p); // mod (in Java) returns the positive residual + + // m = h * q + mQ + m = h.multiply(q); + m = m.add(mQ); + + return m; + } + else + { + return input.modPow( + key.getExponent(), key.getModulus()); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/RSAEngine.java b/common/src/main/java/org/bouncycastle/crypto/engines/RSAEngine.java new file mode 100644 index 0000000..009dcd4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/RSAEngine.java @@ -0,0 +1,78 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; + +/** + * this does your basic RSA algorithm. + */ +public class RSAEngine + implements AsymmetricBlockCipher +{ + private RSACoreEngine core; + + /** + * initialise the RSA engine. + * + * @param forEncryption true if we are encrypting, false otherwise. + * @param param the necessary RSA key parameters. + */ + public void init( + boolean forEncryption, + CipherParameters param) + { + if (core == null) + { + core = new RSACoreEngine(); + } + + core.init(forEncryption, param); + } + + /** + * Return the maximum size for an input block to this engine. + * For RSA this is always one byte less than the key size on + * encryption, and the same length as the key size on decryption. + * + * @return maximum size for an input block. + */ + public int getInputBlockSize() + { + return core.getInputBlockSize(); + } + + /** + * Return the maximum size for an output block to this engine. + * For RSA this is always one byte less than the key size on + * decryption, and the same length as the key size on encryption. + * + * @return maximum size for an output block. + */ + public int getOutputBlockSize() + { + return core.getOutputBlockSize(); + } + + /** + * Process a single block using the basic RSA algorithm. + * + * @param in the input array. + * @param inOff the offset into the input buffer where the data starts. + * @param inLen the length of the data to be processed. + * @return the result of the RSA process. + * @exception DataLengthException the input block is too large. + */ + public byte[] processBlock( + byte[] in, + int inOff, + int inLen) + { + if (core == null) + { + throw new IllegalStateException("RSA engine not initialised"); + } + + return core.convertOutput(core.processBlock(core.convertInput(in, inOff, inLen))); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/engines/Salsa20Engine.java b/common/src/main/java/org/bouncycastle/crypto/engines/Salsa20Engine.java new file mode 100644 index 0000000..896d72f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/engines/Salsa20Engine.java @@ -0,0 +1,318 @@ +package org.bouncycastle.crypto.engines; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.MaxBytesExceededException; +import org.bouncycastle.crypto.StreamCipher; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.util.Pack; +import org.bouncycastle.util.Strings; + +/** + * Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + */ + +public class Salsa20Engine + implements StreamCipher +{ + /** Constants */ + private final static int STATE_SIZE = 16; // 16, 32 bit ints = 64 bytes + + private final static byte[] + sigma = Strings.toByteArray("expand 32-byte k"), + tau = Strings.toByteArray("expand 16-byte k"); + + /* + * variables to hold the state of the engine + * during encryption and decryption + */ + private int index = 0; + private int[] engineState = new int[STATE_SIZE]; // state + private int[] x = new int[STATE_SIZE] ; // internal buffer + private byte[] keyStream = new byte[STATE_SIZE * 4], // expanded state, 64 bytes + workingKey = null, + workingIV = null; + private boolean initialised = false; + + /* + * internal counter + */ + private int cW0, cW1, cW2; + + /** + * initialise a Salsa20 cipher. + * + * @param forEncryption whether or not we are for encryption. + * @param params the parameters required to set up the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + { + /* + * Salsa20 encryption and decryption is completely + * symmetrical, so the 'forEncryption' is + * irrelevant. (Like 90% of stream ciphers) + */ + + if (!(params instanceof ParametersWithIV)) + { + throw new IllegalArgumentException("Salsa20 Init parameters must include an IV"); + } + + ParametersWithIV ivParams = (ParametersWithIV) params; + + byte[] iv = ivParams.getIV(); + + if (iv == null || iv.length != 8) + { + throw new IllegalArgumentException("Salsa20 requires exactly 8 bytes of IV"); + } + + if (!(ivParams.getParameters() instanceof KeyParameter)) + { + throw new IllegalArgumentException("Salsa20 Init parameters must include a key"); + } + + KeyParameter key = (KeyParameter) ivParams.getParameters(); + + workingKey = key.getKey(); + workingIV = iv; + + setKey(workingKey, workingIV); + } + + public String getAlgorithmName() + { + return "Salsa20"; + } + + public byte returnByte(byte in) + { + if (limitExceeded()) + { + throw new MaxBytesExceededException("2^70 byte limit per IV; Change IV"); + } + + if (index == 0) + { + generateKeyStream(keyStream); + + if (++engineState[8] == 0) + { + ++engineState[9]; + } + } + + byte out = (byte)(keyStream[index]^in); + index = (index + 1) & 63; + + return out; + } + + public void processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + { + if (!initialised) + { + throw new IllegalStateException(getAlgorithmName()+" not initialised"); + } + + if ((inOff + len) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + len) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (limitExceeded(len)) + { + throw new MaxBytesExceededException("2^70 byte limit per IV would be exceeded; Change IV"); + } + + for (int i = 0; i < len; i++) + { + if (index == 0) + { + generateKeyStream(keyStream); + + if (++engineState[8] == 0) + { + ++engineState[9]; + } + } + + out[i+outOff] = (byte)(keyStream[index]^in[i+inOff]); + index = (index + 1) & 63; + } + } + + public void reset() + { + setKey(workingKey, workingIV); + } + + // Private implementation + + private void setKey(byte[] keyBytes, byte[] ivBytes) + { + workingKey = keyBytes; + workingIV = ivBytes; + + index = 0; + resetCounter(); + int offset = 0; + byte[] constants; + + // Key + engineState[1] = Pack.littleEndianToInt(workingKey, 0); + engineState[2] = Pack.littleEndianToInt(workingKey, 4); + engineState[3] = Pack.littleEndianToInt(workingKey, 8); + engineState[4] = Pack.littleEndianToInt(workingKey, 12); + + if (workingKey.length == 32) + { + constants = sigma; + offset = 16; + } + else + { + constants = tau; + } + + engineState[11] = Pack.littleEndianToInt(workingKey, offset); + engineState[12] = Pack.littleEndianToInt(workingKey, offset+4); + engineState[13] = Pack.littleEndianToInt(workingKey, offset+8); + engineState[14] = Pack.littleEndianToInt(workingKey, offset+12); + engineState[0 ] = Pack.littleEndianToInt(constants, 0); + engineState[5 ] = Pack.littleEndianToInt(constants, 4); + engineState[10] = Pack.littleEndianToInt(constants, 8); + engineState[15] = Pack.littleEndianToInt(constants, 12); + + // IV + engineState[6] = Pack.littleEndianToInt(workingIV, 0); + engineState[7] = Pack.littleEndianToInt(workingIV, 4); + engineState[8] = engineState[9] = 0; + + initialised = true; + } + + private void generateKeyStream(byte[] output) + { + salsaCore(20, engineState, x); + Pack.intToLittleEndian(x, output, 0); + } + + /** + * Salsa20 function + * + * @param input input data + * + * @return keystream + */ + public static void salsaCore(int rounds, int[] input, int[] x) + { + System.arraycopy(input, 0, x, 0, input.length); + + for (int i = rounds; i > 0; i -= 2) + { + x[ 4] ^= rotl((x[ 0]+x[12]), 7); + x[ 8] ^= rotl((x[ 4]+x[ 0]), 9); + x[12] ^= rotl((x[ 8]+x[ 4]),13); + x[ 0] ^= rotl((x[12]+x[ 8]),18); + x[ 9] ^= rotl((x[ 5]+x[ 1]), 7); + x[13] ^= rotl((x[ 9]+x[ 5]), 9); + x[ 1] ^= rotl((x[13]+x[ 9]),13); + x[ 5] ^= rotl((x[ 1]+x[13]),18); + x[14] ^= rotl((x[10]+x[ 6]), 7); + x[ 2] ^= rotl((x[14]+x[10]), 9); + x[ 6] ^= rotl((x[ 2]+x[14]),13); + x[10] ^= rotl((x[ 6]+x[ 2]),18); + x[ 3] ^= rotl((x[15]+x[11]), 7); + x[ 7] ^= rotl((x[ 3]+x[15]), 9); + x[11] ^= rotl((x[ 7]+x[ 3]),13); + x[15] ^= rotl((x[11]+x[ 7]),18); + x[ 1] ^= rotl((x[ 0]+x[ 3]), 7); + x[ 2] ^= rotl((x[ 1]+x[ 0]), 9); + x[ 3] ^= rotl((x[ 2]+x[ 1]),13); + x[ 0] ^= rotl((x[ 3]+x[ 2]),18); + x[ 6] ^= rotl((x[ 5]+x[ 4]), 7); + x[ 7] ^= rotl((x[ 6]+x[ 5]), 9); + x[ 4] ^= rotl((x[ 7]+x[ 6]),13); + x[ 5] ^= rotl((x[ 4]+x[ 7]),18); + x[11] ^= rotl((x[10]+x[ 9]), 7); + x[ 8] ^= rotl((x[11]+x[10]), 9); + x[ 9] ^= rotl((x[ 8]+x[11]),13); + x[10] ^= rotl((x[ 9]+x[ 8]),18); + x[12] ^= rotl((x[15]+x[14]), 7); + x[13] ^= rotl((x[12]+x[15]), 9); + x[14] ^= rotl((x[13]+x[12]),13); + x[15] ^= rotl((x[14]+x[13]),18); + } + + for (int i = 0; i < STATE_SIZE; ++i) + { + x[i] += input[i]; + } + } + + /** + * Rotate left + * + * @param x value to rotate + * @param y amount to rotate x + * + * @return rotated x + */ + private static int rotl(int x, int y) + { + return (x << y) | (x >>> -y); + } + + private void resetCounter() + { + cW0 = 0; + cW1 = 0; + cW2 = 0; + } + + private boolean limitExceeded() + { + if (++cW0 == 0) + { + if (++cW1 == 0) + { + return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) + } + } + + return false; + } + + /* + * this relies on the fact len will always be positive. + */ + private boolean limitExceeded(int len) + { + cW0 += len; + if (cW0 < len && cW0 >= 0) + { + if (++cW1 == 0) + { + return (++cW2 & 0x20) != 0; // 2^(32 + 32 + 6) + } + } + + return false; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java new file mode 100644 index 0000000..268ae9b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/BaseKDFBytesGenerator.java @@ -0,0 +1,142 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.DerivationFunction; +import org.bouncycastle.crypto.DerivationParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.params.ISO18033KDFParameters; +import org.bouncycastle.crypto.params.KDFParameters; + +/** + * Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 + *
        + * This implementation is based on ISO 18033/P1363a. + */ +public class BaseKDFBytesGenerator + implements DerivationFunction +{ + private int counterStart; + private Digest digest; + private byte[] shared; + private byte[] iv; + + /** + * Construct a KDF Parameters generator. + *

        + * @param counterStart value of counter. + * @param digest the digest to be used as the source of derived keys. + */ + protected BaseKDFBytesGenerator( + int counterStart, + Digest digest) + { + this.counterStart = counterStart; + this.digest = digest; + } + + public void init( + DerivationParameters param) + { + if (param instanceof KDFParameters) + { + KDFParameters p = (KDFParameters)param; + + shared = p.getSharedSecret(); + iv = p.getIV(); + } + else if (param instanceof ISO18033KDFParameters) + { + ISO18033KDFParameters p = (ISO18033KDFParameters)param; + + shared = p.getSeed(); + iv = null; + } + else + { + throw new IllegalArgumentException("KDF parameters required for KDF2Generator"); + } + } + + /** + * return the underlying digest. + */ + public Digest getDigest() + { + return digest; + } + + /** + * fill len bytes of the output buffer with bytes generated from + * the derivation function. + * + * @throws IllegalArgumentException if the size of the request will cause an overflow. + * @throws DataLengthException if the out buffer is too small. + */ + public int generateBytes( + byte[] out, + int outOff, + int len) + throws DataLengthException, IllegalArgumentException + { + if ((out.length - len) < outOff) + { + throw new DataLengthException("output buffer too small"); + } + + long oBytes = len; + int outLen = digest.getDigestSize(); + + // + // this is at odds with the standard implementation, the + // maximum value should be hBits * (2^32 - 1) where hBits + // is the digest output size in bits. We can't have an + // array with a long index at the moment... + // + if (oBytes > ((2L << 32) - 1)) + { + throw new IllegalArgumentException("Output length too large"); + } + + int cThreshold = (int)((oBytes + outLen - 1) / outLen); + + byte[] dig = null; + + dig = new byte[digest.getDigestSize()]; + + int counter = counterStart; + + for (int i = 0; i < cThreshold; i++) + { + digest.update(shared, 0, shared.length); + + digest.update((byte)(counter >> 24)); + digest.update((byte)(counter >> 16)); + digest.update((byte)(counter >> 8)); + digest.update((byte)counter); + + if (iv != null) + { + digest.update(iv, 0, iv.length); + } + + digest.doFinal(dig, 0); + + if (len > outLen) + { + System.arraycopy(dig, 0, out, outOff, outLen); + outOff += outLen; + len -= outLen; + } + else + { + System.arraycopy(dig, 0, out, outOff, len); + } + + counter++; + } + + digest.reset(); + + return len; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DESKeyGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/DESKeyGenerator.java new file mode 100644 index 0000000..7111118 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DESKeyGenerator.java @@ -0,0 +1,48 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.CipherKeyGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.DESParameters; + +public class DESKeyGenerator + extends CipherKeyGenerator +{ + /** + * initialise the key generator - if strength is set to zero + * the key generated will be 64 bits in size, otherwise + * strength can be 64 or 56 bits (if you don't count the parity bits). + * + * @param param the parameters to be used for key generation + */ + public void init( + KeyGenerationParameters param) + { + super.init(param); + + if (strength == 0 || strength == (56 / 8)) + { + strength = DESParameters.DES_KEY_LENGTH; + } + else if (strength != DESParameters.DES_KEY_LENGTH) + { + throw new IllegalArgumentException("DES key must be " + + (DESParameters.DES_KEY_LENGTH * 8) + + " bits long."); + } + } + + public byte[] generateKey() + { + byte[] newKey = new byte[DESParameters.DES_KEY_LENGTH]; + + do + { + random.nextBytes(newKey); + + DESParameters.setOddParity(newKey); + } + while (DESParameters.isWeakKey(newKey, 0)); + + return newKey; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java new file mode 100644 index 0000000..3cab983 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DESedeKeyGenerator.java @@ -0,0 +1,56 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.DESedeParameters; + +public class DESedeKeyGenerator + extends DESKeyGenerator +{ + /** + * initialise the key generator - if strength is set to zero + * the key generated will be 192 bits in size, otherwise + * strength can be 128 or 192 (or 112 or 168 if you don't count + * parity bits), depending on whether you wish to do 2-key or 3-key + * triple DES. + * + * @param param the parameters to be used for key generation + */ + public void init( + KeyGenerationParameters param) + { + this.random = param.getRandom(); + this.strength = (param.getStrength() + 7) / 8; + + if (strength == 0 || strength == (168 / 8)) + { + strength = DESedeParameters.DES_EDE_KEY_LENGTH; + } + else if (strength == (112 / 8)) + { + strength = 2 * DESedeParameters.DES_KEY_LENGTH; + } + else if (strength != DESedeParameters.DES_EDE_KEY_LENGTH + && strength != (2 * DESedeParameters.DES_KEY_LENGTH)) + { + throw new IllegalArgumentException("DESede key must be " + + (DESedeParameters.DES_EDE_KEY_LENGTH * 8) + " or " + + (2 * 8 * DESedeParameters.DES_KEY_LENGTH) + + " bits long."); + } + } + + public byte[] generateKey() + { + byte[] newKey = new byte[strength]; + + do + { + random.nextBytes(newKey); + + DESedeParameters.setOddParity(newKey); + } + while (DESedeParameters.isWeakKey(newKey, 0, newKey.length)); + + return newKey; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java new file mode 100644 index 0000000..269d33b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DHBasicKeyPairGenerator.java @@ -0,0 +1,42 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.DHKeyGenerationParameters; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; + +import javabc.BigInteger; + +/** + * a basic Diffie-Hellman key pair generator. + * + * This generates keys consistent for use with the basic algorithm for + * Diffie-Hellman. + */ +public class DHBasicKeyPairGenerator + implements AsymmetricCipherKeyPairGenerator +{ + private DHKeyGenerationParameters param; + + public void init( + KeyGenerationParameters param) + { + this.param = (DHKeyGenerationParameters)param; + } + + public AsymmetricCipherKeyPair generateKeyPair() + { + DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE; + DHParameters dhp = param.getParameters(); + + BigInteger x = helper.calculatePrivate(dhp, param.getRandom()); + BigInteger y = helper.calculatePublic(dhp, x); + + return new AsymmetricCipherKeyPair( + new DHPublicKeyParameters(y, dhp), + new DHPrivateKeyParameters(x, dhp)); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java b/common/src/main/java/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java new file mode 100644 index 0000000..b749b16 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DHKeyGeneratorHelper.java @@ -0,0 +1,51 @@ +package org.bouncycastle.crypto.generators; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.util.BigIntegers; + +class DHKeyGeneratorHelper +{ + static final DHKeyGeneratorHelper INSTANCE = new DHKeyGeneratorHelper(); + + private static final BigInteger ONE = BigInteger.valueOf(1); + private static final BigInteger TWO = BigInteger.valueOf(2); + + private DHKeyGeneratorHelper() + { + } + + BigInteger calculatePrivate(DHParameters dhParams, SecureRandom random) + { + BigInteger p = dhParams.getP(); + int limit = dhParams.getL(); + + if (limit != 0) + { + return new BigInteger(limit, random).setBit(limit - 1); + } + + BigInteger min = TWO; + int m = dhParams.getM(); + if (m != 0) + { + min = ONE.shiftLeft(m - 1); + } + + BigInteger max = p.subtract(TWO); + BigInteger q = dhParams.getQ(); + if (q != null) + { + max = q.subtract(TWO); + } + + return BigIntegers.createRandomInRange(min, max, random); + } + + BigInteger calculatePublic(DHParameters dhParams, BigInteger x) + { + return dhParams.getG().modPow(x, dhParams.getP()); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java new file mode 100644 index 0000000..4b3c87e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DHKeyPairGenerator.java @@ -0,0 +1,42 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.DHKeyGenerationParameters; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; + +import javabc.BigInteger; + +/** + * a Diffie-Hellman key pair generator. + * + * This generates keys consistent for use in the MTI/A0 key agreement protocol + * as described in "Handbook of Applied Cryptography", Pages 516-519. + */ +public class DHKeyPairGenerator + implements AsymmetricCipherKeyPairGenerator +{ + private DHKeyGenerationParameters param; + + public void init( + KeyGenerationParameters param) + { + this.param = (DHKeyGenerationParameters)param; + } + + public AsymmetricCipherKeyPair generateKeyPair() + { + DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE; + DHParameters dhp = param.getParameters(); + + BigInteger x = helper.calculatePrivate(dhp, param.getRandom()); + BigInteger y = helper.calculatePublic(dhp, x); + + return new AsymmetricCipherKeyPair( + new DHPublicKeyParameters(y, dhp), + new DHPrivateKeyParameters(x, dhp)); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DHParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/DHParametersGenerator.java new file mode 100644 index 0000000..508ff74 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DHParametersGenerator.java @@ -0,0 +1,52 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.params.DHParameters; + +import javabc.BigInteger; +import javabc.SecureRandom; + +public class DHParametersGenerator +{ + private int size; + private int certainty; + private SecureRandom random; + + private static final BigInteger TWO = BigInteger.valueOf(2); + + /** + * Initialise the parameters generator. + * + * @param size bit length for the prime p + * @param certainty level of certainty for the prime number tests + * @param random a source of randomness + */ + public void init( + int size, + int certainty, + SecureRandom random) + { + this.size = size; + this.certainty = certainty; + this.random = random; + } + + /** + * which generates the p and g values from the given parameters, + * returning the DHParameters object. + *

        + * Note: can take a while... + */ + public DHParameters generateParameters() + { + // + // find a safe prime p where p = 2*q + 1, where p and q are prime. + // + BigInteger[] safePrimes = DHParametersHelper.generateSafePrimes(size, certainty, random); + + BigInteger p = safePrimes[0]; + BigInteger q = safePrimes[1]; + BigInteger g = DHParametersHelper.selectGenerator(p, q, random); + + return new DHParameters(p, g, q, TWO, null); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DHParametersHelper.java b/common/src/main/java/org/bouncycastle/crypto/generators/DHParametersHelper.java new file mode 100644 index 0000000..834f2a3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DHParametersHelper.java @@ -0,0 +1,73 @@ +package org.bouncycastle.crypto.generators; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.util.BigIntegers; + +class DHParametersHelper +{ + private static final BigInteger ONE = BigInteger.valueOf(1); + private static final BigInteger TWO = BigInteger.valueOf(2); + + /* + * Finds a pair of prime BigInteger's {p, q: p = 2q + 1} + * + * (see: Handbook of Applied Cryptography 4.86) + */ + static BigInteger[] generateSafePrimes(int size, int certainty, SecureRandom random) + { + BigInteger p, q; + int qLength = size - 1; + + for (;;) + { + q = new BigInteger(qLength, 2, random); + + // p <- 2q + 1 + p = q.shiftLeft(1).add(ONE); + + if (p.isProbablePrime(certainty) && (certainty <= 2 || q.isProbablePrime(certainty))) + { + break; + } + } + + return new BigInteger[] { p, q }; + } + + /* + * Select a high order element of the multiplicative group Zp* + * + * p and q must be s.t. p = 2*q + 1, where p and q are prime (see generateSafePrimes) + */ + static BigInteger selectGenerator(BigInteger p, BigInteger q, SecureRandom random) + { + BigInteger pMinusTwo = p.subtract(TWO); + BigInteger g; + + /* + * (see: Handbook of Applied Cryptography 4.80) + */ +// do +// { +// g = BigIntegers.createRandomInRange(TWO, pMinusTwo, random); +// } +// while (g.modPow(TWO, p).equals(ONE) || g.modPow(q, p).equals(ONE)); + + + /* + * RFC 2631 2.2.1.2 (and see: Handbook of Applied Cryptography 4.81) + */ + do + { + BigInteger h = BigIntegers.createRandomInRange(TWO, pMinusTwo, random); + + g = h.modPow(TWO, p); + } + while (g.equals(ONE)); + + + return g; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java new file mode 100644 index 0000000..6fa8115 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DSAKeyPairGenerator.java @@ -0,0 +1,61 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.DSAKeyGenerationParameters; +import org.bouncycastle.crypto.params.DSAParameters; +import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; +import org.bouncycastle.crypto.params.DSAPublicKeyParameters; +import org.bouncycastle.util.BigIntegers; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * a DSA key pair generator. + * + * This generates DSA keys in line with the method described + * in FIPS 186-3 B.1 FFC Key Pair Generation. + */ +public class DSAKeyPairGenerator + implements AsymmetricCipherKeyPairGenerator +{ + private static final BigInteger ONE = BigInteger.valueOf(1); + + private DSAKeyGenerationParameters param; + + public void init( + KeyGenerationParameters param) + { + this.param = (DSAKeyGenerationParameters)param; + } + + public AsymmetricCipherKeyPair generateKeyPair() + { + DSAParameters dsaParams = param.getParameters(); + + BigInteger x = generatePrivateKey(dsaParams.getQ(), param.getRandom()); + BigInteger y = calculatePublicKey(dsaParams.getP(), dsaParams.getG(), x); + + return new AsymmetricCipherKeyPair( + new DSAPublicKeyParameters(y, dsaParams), + new DSAPrivateKeyParameters(x, dsaParams)); + } + + private static BigInteger generatePrivateKey(BigInteger q, SecureRandom random) + { + // TODO Prefer this method? (change test cases that used fixed random) + // B.1.1 Key Pair Generation Using Extra Random Bits +// BigInteger c = new BigInteger(q.bitLength() + 64, random); +// return c.mod(q.subtract(ONE)).add(ONE); + + // B.1.2 Key Pair Generation by Testing Candidates + return BigIntegers.createRandomInRange(ONE, q.subtract(ONE), random); + } + + private static BigInteger calculatePublicKey(BigInteger p, BigInteger g, BigInteger x) + { + return g.modPow(x, p); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/DSAParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/DSAParametersGenerator.java new file mode 100644 index 0000000..3d5fd68 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/DSAParametersGenerator.java @@ -0,0 +1,335 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.digests.SHA256Digest; +import org.bouncycastle.crypto.params.DSAParameters; +import org.bouncycastle.crypto.params.DSAValidationParameters; +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.BigIntegers; + +import javabc.BigInteger; +import javabc.SecureRandom; + +// TODO Update javadoc to mention FIPS 186-3 when done +/** + * generate suitable parameters for DSA, in line with FIPS 186-2. + */ +public class DSAParametersGenerator +{ + private int L, N; + private int certainty; + private SecureRandom random; + + private static final BigInteger ZERO = BigInteger.valueOf(0); + private static final BigInteger ONE = BigInteger.valueOf(1); + private static final BigInteger TWO = BigInteger.valueOf(2); + + /** + * initialise the key generator. + * + * @param size size of the key (range 2^512 -> 2^1024 - 64 bit increments) + * @param certainty measure of robustness of prime (for FIPS 186-2 compliance this should be at least 80). + * @param random random byte source. + */ + public void init( + int size, + int certainty, + SecureRandom random) + { + init(size, getDefaultN(size), certainty, random); + } + + // TODO Make public to enable support for DSA keys > 1024 bits + private void init( + int L, + int N, + int certainty, + SecureRandom random) + { + // TODO Check that the (L, N) pair is in the list of acceptable (L, N pairs) (see Section 4.2) + // TODO Should we enforce the minimum 'certainty' values as per C.3 Table C.1? + + this.L = L; + this.N = N; + this.certainty = certainty; + this.random = random; + } + + /** + * which generates the p and g values from the given parameters, + * returning the DSAParameters object. + *

        + * Note: can take a while... + */ + public DSAParameters generateParameters() + { + return L > 1024 + ? generateParameters_FIPS186_3() + : generateParameters_FIPS186_2(); + } + + private DSAParameters generateParameters_FIPS186_2() + { + byte[] seed = new byte[20]; + byte[] part1 = new byte[20]; + byte[] part2 = new byte[20]; + byte[] u = new byte[20]; + SHA1Digest sha1 = new SHA1Digest(); + int n = (L - 1) / 160; + byte[] w = new byte[L / 8]; + + for (;;) + { + random.nextBytes(seed); + + hash(sha1, seed, part1); + System.arraycopy(seed, 0, part2, 0, seed.length); + inc(part2); + hash(sha1, part2, part2); + + for (int i = 0; i != u.length; i++) + { + u[i] = (byte)(part1[i] ^ part2[i]); + } + + u[0] |= (byte)0x80; + u[19] |= (byte)0x01; + + BigInteger q = new BigInteger(1, u); + + if (!q.isProbablePrime(certainty)) + { + continue; + } + + byte[] offset = Arrays.clone(seed); + inc(offset); + + for (int counter = 0; counter < 4096; ++counter) + { + for (int k = 0; k < n; k++) + { + inc(offset); + hash(sha1, offset, part1); + System.arraycopy(part1, 0, w, w.length - (k + 1) * part1.length, part1.length); + } + + inc(offset); + hash(sha1, offset, part1); + System.arraycopy(part1, part1.length - ((w.length - (n) * part1.length)), w, 0, w.length - n * part1.length); + + w[0] |= (byte)0x80; + + BigInteger x = new BigInteger(1, w); + + BigInteger c = x.mod(q.shiftLeft(1)); + + BigInteger p = x.subtract(c.subtract(ONE)); + + if (p.bitLength() != L) + { + continue; + } + + if (p.isProbablePrime(certainty)) + { + BigInteger g = calculateGenerator_FIPS186_2(p, q, random); + + return new DSAParameters(p, q, g, new DSAValidationParameters(seed, counter)); + } + } + } + } + + private static BigInteger calculateGenerator_FIPS186_2(BigInteger p, BigInteger q, SecureRandom r) + { + BigInteger e = p.subtract(ONE).divide(q); + BigInteger pSub2 = p.subtract(TWO); + + for (;;) + { + BigInteger h = BigIntegers.createRandomInRange(TWO, pSub2, r); + BigInteger g = h.modPow(e, p); + if (g.bitLength() > 1) + { + return g; + } + } + } + + /** + * generate suitable parameters for DSA, in line with + * FIPS 186-3 A.1 Generation of the FFC Primes p and q. + */ + private DSAParameters generateParameters_FIPS186_3() + { +// A.1.1.2 Generation of the Probable Primes p and q Using an Approved Hash Function + // FIXME This should be configurable (digest size in bits must be >= N) + Digest d = new SHA256Digest(); + int outlen = d.getDigestSize() * 8; + +// 1. Check that the (L, N) pair is in the list of acceptable (L, N pairs) (see Section 4.2). If +// the pair is not in the list, then return INVALID. + // Note: checked at initialisation + +// 2. If (seedlen < N), then return INVALID. + // FIXME This should be configurable (must be >= N) + int seedlen = N; + byte[] seed = new byte[seedlen / 8]; + + int n = (L - 1) / outlen; + + int b = (L - 1) % outlen; + + byte[] output = new byte[d.getDigestSize()]; + for (;;) + { +// 5. Get an arbitrary sequence of seedlen bits as the domain_parameter_seed. + random.nextBytes(seed); + +// 6. U = Hash (domain_parameter_seed) mod 2^(N–1). + hash(d, seed, output); + BigInteger U = new BigInteger(1, output).mod(ONE.shiftLeft(N - 1)); + +// 7. q = 2^(N–1) + U + 1 – ( U mod 2). + BigInteger q = ONE.shiftLeft(N - 1).add(U).add(ONE).subtract(U.mod(TWO)); + +// 8. Test whether or not q is prime as specified in Appendix C.3. + // TODO Review C.3 for primality checking + if (!q.isProbablePrime(certainty)) + { +// 9. If q is not a prime, then go to step 5. + continue; + } + +// 10. offset = 1. + // Note: 'offset' value managed incrementally + byte[] offset = Arrays.clone(seed); + +// 11. For counter = 0 to (4L – 1) do + int counterLimit = 4 * L; + for (int counter = 0; counter < counterLimit; ++counter) + { +// 11.1 For j = 0 to n do +// Vj = Hash ((domain_parameter_seed + offset + j) mod 2^seedlen). +// 11.2 W = V0 + (V1 ∗ 2^outlen) + ... + (V^(n–1) ∗ 2^((n–1) ∗ outlen)) + ((Vn mod 2^b) ∗ 2^(n ∗ outlen)). + // TODO Assemble w as a byte array + BigInteger W = ZERO; + for (int j = 0, exp = 0; j <= n; ++j, exp += outlen) + { + inc(offset); + hash(d, offset, output); + + BigInteger Vj = new BigInteger(1, output); + if (j == n) + { + Vj = Vj.mod(ONE.shiftLeft(b)); + } + + W = W.add(Vj.shiftLeft(exp)); + } + +// 11.3 X = W + 2^(L–1). Comment: 0 ≤ W < 2L–1; hence, 2L–1 ≤ X < 2L. + BigInteger X = W.add(ONE.shiftLeft(L - 1)); + +// 11.4 c = X mod 2q. + BigInteger c = X.mod(q.shiftLeft(1)); + +// 11.5 p = X - (c - 1). Comment: p ≡ 1 (mod 2q). + BigInteger p = X.subtract(c.subtract(ONE)); + +// 11.6 If (p < 2^(L - 1)), then go to step 11.9 + if (p.bitLength() != L) + { + continue; + } + +// 11.7 Test whether or not p is prime as specified in Appendix C.3. + // TODO Review C.3 for primality checking + if (p.isProbablePrime(certainty)) + { +// 11.8 If p is determined to be prime, then return VALID and the values of p, q and +// (optionally) the values of domain_parameter_seed and counter. + // TODO Make configurable (8-bit unsigned)? +// int index = 1; +// BigInteger g = calculateGenerator_FIPS186_3_Verifiable(d, p, q, seed, index); +// if (g != null) +// { +// // TODO Should 'index' be a part of the validation parameters? +// return new DSAParameters(p, q, g, new DSAValidationParameters(seed, counter)); +// } + + BigInteger g = calculateGenerator_FIPS186_3_Unverifiable(p, q, random); + return new DSAParameters(p, q, g, new DSAValidationParameters(seed, counter)); + } + +// 11.9 offset = offset + n + 1. Comment: Increment offset; then, as part of +// the loop in step 11, increment counter; if +// counter < 4L, repeat steps 11.1 through 11.8. + // Note: 'offset' value already incremented in inner loop + } +// 12. Go to step 5. + } + } + + private static BigInteger calculateGenerator_FIPS186_3_Unverifiable(BigInteger p, BigInteger q, + SecureRandom r) + { + return calculateGenerator_FIPS186_2(p, q, r); + } + +// private static BigInteger calculateGenerator_FIPS186_3_Verifiable(Digest d, BigInteger p, BigInteger q, +// byte[] seed, int index) +// { +//// A.2.3 Verifiable Canonical Generation of the Generator g +// BigInteger e = p.subtract(ONE).divide(q); +// byte[] ggen = Hex.decode("6767656E"); +// +// // 7. U = domain_parameter_seed || "ggen" || index || count. +// byte[] U = new byte[seed.length + ggen.length + 1 + 2]; +// System.arraycopy(seed, 0, U, 0, seed.length); +// System.arraycopy(ggen, 0, U, seed.length, ggen.length); +// U[U.length - 3] = (byte)index; +// +// byte[] w = new byte[d.getDigestSize()]; +// for (int count = 1; count < (1 << 16); ++count) +// { +// inc(U); +// hash(d, U, w); +// BigInteger W = new BigInteger(1, w); +// BigInteger g = W.modPow(e, p); +// if (g.compareTo(TWO) >= 0) +// { +// return g; +// } +// } +// +// return null; +// } + + private static void hash(Digest d, byte[] input, byte[] output) + { + d.update(input, 0, input.length); + d.doFinal(output, 0); + } + + private static int getDefaultN(int L) + { + return L > 1024 ? 256 : 160; + } + + private static void inc(byte[] buf) + { + for (int i = buf.length - 1; i >= 0; --i) + { + byte b = (byte)((buf[i] + 1) & 0xff); + buf[i] = b; + + if (b != 0) + { + break; + } + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java new file mode 100644 index 0000000..afc94e6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/ECKeyPairGenerator.java @@ -0,0 +1,53 @@ +package org.bouncycastle.crypto.generators; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECKeyGenerationParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECPoint; + +public class ECKeyPairGenerator + implements AsymmetricCipherKeyPairGenerator, ECConstants +{ + ECDomainParameters params; + SecureRandom random; + + public void init( + KeyGenerationParameters param) + { + ECKeyGenerationParameters ecP = (ECKeyGenerationParameters)param; + + this.random = ecP.getRandom(); + this.params = ecP.getDomainParameters(); + } + + /** + * Given the domain parameters this routine generates an EC key + * pair in accordance with X9.62 section 5.2.1 pages 26, 27. + */ + public AsymmetricCipherKeyPair generateKeyPair() + { + BigInteger n = params.getN(); + int nBitLength = n.bitLength(); + BigInteger d; + + do + { + d = new BigInteger(nBitLength, random); + } + while (d.equals(ZERO) || (d.compareTo(n) >= 0)); + + ECPoint Q = params.getG().multiply(d); + + return new AsymmetricCipherKeyPair( + new ECPublicKeyParameters(Q, params), + new ECPrivateKeyParameters(d, params)); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java new file mode 100644 index 0000000..7aba2e1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/ElGamalKeyPairGenerator.java @@ -0,0 +1,44 @@ +package org.bouncycastle.crypto.generators; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.ElGamalKeyGenerationParameters; +import org.bouncycastle.crypto.params.ElGamalParameters; +import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; +import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; + +/** + * a ElGamal key pair generator. + *

        + * This generates keys consistent for use with ElGamal as described in + * page 164 of "Handbook of Applied Cryptography". + */ +public class ElGamalKeyPairGenerator + implements AsymmetricCipherKeyPairGenerator +{ + private ElGamalKeyGenerationParameters param; + + public void init( + KeyGenerationParameters param) + { + this.param = (ElGamalKeyGenerationParameters)param; + } + + public AsymmetricCipherKeyPair generateKeyPair() + { + DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.INSTANCE; + ElGamalParameters egp = param.getParameters(); + DHParameters dhp = new DHParameters(egp.getP(), egp.getG(), null, egp.getL()); + + BigInteger x = helper.calculatePrivate(dhp, param.getRandom()); + BigInteger y = helper.calculatePublic(dhp, x); + + return new AsymmetricCipherKeyPair( + new ElGamalPublicKeyParameters(y, egp), + new ElGamalPrivateKeyParameters(x, egp)); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java new file mode 100644 index 0000000..1981ca2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/ElGamalParametersGenerator.java @@ -0,0 +1,43 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.params.ElGamalParameters; + +import javabc.BigInteger; +import javabc.SecureRandom; + +public class ElGamalParametersGenerator +{ + private int size; + private int certainty; + private SecureRandom random; + + public void init( + int size, + int certainty, + SecureRandom random) + { + this.size = size; + this.certainty = certainty; + this.random = random; + } + + /** + * which generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

        + * Note: can take a while... + */ + public ElGamalParameters generateParameters() + { + // + // find a safe prime p where p = 2*q + 1, where p and q are prime. + // + BigInteger[] safePrimes = DHParametersHelper.generateSafePrimes(size, certainty, random); + + BigInteger p = safePrimes[0]; + BigInteger q = safePrimes[1]; + BigInteger g = DHParametersHelper.selectGenerator(p, q, random); + + return new ElGamalParameters(p, g); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java new file mode 100644 index 0000000..c49b4e0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/GOST3410KeyPairGenerator.java @@ -0,0 +1,57 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.GOST3410KeyGenerationParameters; +import org.bouncycastle.crypto.params.GOST3410Parameters; +import org.bouncycastle.crypto.params.GOST3410PrivateKeyParameters; +import org.bouncycastle.crypto.params.GOST3410PublicKeyParameters; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * a GOST3410 key pair generator. + * This generates GOST3410 keys in line with the method described + * in GOST R 34.10-94. + */ +public class GOST3410KeyPairGenerator + implements AsymmetricCipherKeyPairGenerator + { + private static final BigInteger ZERO = BigInteger.valueOf(0); + + private GOST3410KeyGenerationParameters param; + + public void init( + KeyGenerationParameters param) + { + this.param = (GOST3410KeyGenerationParameters)param; + } + + public AsymmetricCipherKeyPair generateKeyPair() + { + BigInteger p, q, a, x, y; + GOST3410Parameters GOST3410Params = param.getParameters(); + SecureRandom random = param.getRandom(); + + q = GOST3410Params.getQ(); + p = GOST3410Params.getP(); + a = GOST3410Params.getA(); + + do + { + x = new BigInteger(256, random); + } + while (x.equals(ZERO) || x.compareTo(q) >= 0); + + // + // calculate the public key. + // + y = a.modPow(x, p); + + return new AsymmetricCipherKeyPair( + new GOST3410PublicKeyParameters(y, GOST3410Params), + new GOST3410PrivateKeyParameters(x, GOST3410Params)); + } + } diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java new file mode 100644 index 0000000..49e3b0b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/GOST3410ParametersGenerator.java @@ -0,0 +1,541 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.params.GOST3410Parameters; +import org.bouncycastle.crypto.params.GOST3410ValidationParameters; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * generate suitable parameters for GOST3410. + */ +public class GOST3410ParametersGenerator +{ + private int size; + private int typeproc; + private SecureRandom init_random; + + private static final BigInteger ONE = BigInteger.valueOf(1); + private static final BigInteger TWO = BigInteger.valueOf(2); + + /** + * initialise the key generator. + * + * @param size size of the key + * @param typeproc type procedure A,B = 1; A',B' - else + * @param random random byte source. + */ + public void init( + int size, + int typeproc, + SecureRandom random) + { + this.size = size; + this.typeproc = typeproc; + this.init_random = random; + } + + //Procedure A + private int procedure_A(int x0, int c, BigInteger[] pq, int size) + { + //Verify and perform condition: 065536) + { + x0 = init_random.nextInt()/32768; + } + + while((c<0 || c>65536) || (c/2==0)) + { + c = init_random.nextInt()/32768 + 1; + } + + BigInteger C = new BigInteger(Integer.toString(c)); + BigInteger constA16 = new BigInteger("19381"); + + //step1 + BigInteger[] y = new BigInteger[1]; // begin length = 1 + y[0] = new BigInteger(Integer.toString(x0)); + + //step 2 + int[] t = new int[1]; // t - orders; begin length = 1 + t[0] = size; + int s = 0; + for (int i=0; t[i]>=17; i++) + { + // extension array t + int tmp_t[] = new int[t.length + 1]; /////////////// + System.arraycopy(t,0,tmp_t,0,t.length); // extension + t = new int[tmp_t.length]; // array t + System.arraycopy(tmp_t, 0, t, 0, tmp_t.length); /////////////// + + t[i+1] = t[i]/2; + s = i+1; + } + + //step3 + BigInteger p[] = new BigInteger[s+1]; + p[s] = new BigInteger("8003",16); //set min prime number length 16 bit + + int m = s-1; //step4 + + for (int i=0; i=0) + { + break; //step 14 + } + else + { + pq[0] = p[0]; + pq[1] = p[1]; + return y[0].intValue(); //return for procedure B step 2 + } + } + } + return y[0].intValue(); + } + + //Procedure A' + private long procedure_Aa(long x0, long c, BigInteger[] pq, int size) + { + //Verify and perform condition: 04294967296L) + { + x0 = init_random.nextInt()*2; + } + + while((c<0 || c>4294967296L) || (c/2==0)) + { + c = init_random.nextInt()*2+1; + } + + BigInteger C = new BigInteger(Long.toString(c)); + BigInteger constA32 = new BigInteger("97781173"); + + //step1 + BigInteger[] y = new BigInteger[1]; // begin length = 1 + y[0] = new BigInteger(Long.toString(x0)); + + //step 2 + int[] t = new int[1]; // t - orders; begin length = 1 + t[0] = size; + int s = 0; + for (int i=0; t[i]>=33; i++) + { + // extension array t + int tmp_t[] = new int[t.length + 1]; /////////////// + System.arraycopy(t,0,tmp_t,0,t.length); // extension + t = new int[tmp_t.length]; // array t + System.arraycopy(tmp_t, 0, t, 0, tmp_t.length); /////////////// + + t[i+1] = t[i]/2; + s = i+1; + } + + //step3 + BigInteger p[] = new BigInteger[s+1]; + p[s] = new BigInteger("8000000B",16); //set min prime number length 32 bit + + int m = s-1; //step4 + + for (int i=0; i=0) + { + break; //step 14 + } + else + { + pq[0] = p[0]; + pq[1] = p[1]; + return y[0].longValue(); //return for procedure B' step 2 + } + } + } + return y[0].longValue(); + } + + //Procedure B + private void procedure_B(int x0, int c, BigInteger[] pq) + { + //Verify and perform condition: 065536) + { + x0 = init_random.nextInt()/32768; + } + + while((c<0 || c>65536) || (c/2==0)) + { + c = init_random.nextInt()/32768 + 1; + } + + BigInteger [] qp = new BigInteger[2]; + BigInteger q = null, Q = null, p = null; + BigInteger C = new BigInteger(Integer.toString(c)); + BigInteger constA16 = new BigInteger("19381"); + + //step1 + x0 = procedure_A(x0, c, qp, 256); + q = qp[0]; + + //step2 + x0 = procedure_A(x0, c, qp, 512); + Q = qp[0]; + + BigInteger[] y = new BigInteger[65]; + y[0] = new BigInteger(Integer.toString(x0)); + + int tp = 1024; + + step3: for(;;) + { + //step 3 + for (int j=0; j<64; j++) + { + y[j+1] = (y[j].multiply(constA16).add(C)).mod(TWO.pow(16)); + } + + //step 4 + BigInteger Y = new BigInteger("0"); + + for (int j=0; j<64; j++) + { + Y = Y.add(y[j].multiply(TWO.pow(16*j))); + } + + y[0] = y[64]; //step 5 + + //step 6 + BigInteger N = TWO.pow(tp-1).divide(q.multiply(Q)). + add((TWO.pow(tp-1).multiply(Y)). + divide(q.multiply(Q).multiply(TWO.pow(1024)))); + + if (N.mod(TWO).compareTo(ONE)==0) + { + N = N.add(ONE); + } + + int k = 0; //step 7 + + step8: for(;;) + { + //step 11 + p = q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))).add(ONE); + + if (p.compareTo(TWO.pow(tp))==1) + { + continue step3; //step 9 + } + + //step10 + if ((TWO.modPow(q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)==0) && + (TWO.modPow(q.multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)!=0)) + { + pq[0] = p; + pq[1] = q; + return; + } + else + { + k += 2; + continue step8; + } + } + } + } + + //Procedure B' + private void procedure_Bb(long x0, long c, BigInteger[] pq) + { + //Verify and perform condition: 04294967296L) + { + x0 = init_random.nextInt()*2; + } + + while((c<0 || c>4294967296L) || (c/2==0)) + { + c = init_random.nextInt()*2+1; + } + + BigInteger [] qp = new BigInteger[2]; + BigInteger q = null, Q = null, p = null; + BigInteger C = new BigInteger(Long.toString(c)); + BigInteger constA32 = new BigInteger("97781173"); + + //step1 + x0 = procedure_Aa(x0, c, qp, 256); + q = qp[0]; + + //step2 + x0 = procedure_Aa(x0, c, qp, 512); + Q = qp[0]; + + BigInteger[] y = new BigInteger[33]; + y[0] = new BigInteger(Long.toString(x0)); + + int tp = 1024; + + step3: for(;;) + { + //step 3 + for (int j=0; j<32; j++) + { + y[j+1] = (y[j].multiply(constA32).add(C)).mod(TWO.pow(32)); + } + + //step 4 + BigInteger Y = new BigInteger("0"); + for (int j=0; j<32; j++) + { + Y = Y.add(y[j].multiply(TWO.pow(32*j))); + } + + y[0] = y[32]; //step 5 + + //step 6 + BigInteger N = TWO.pow(tp-1).divide(q.multiply(Q)). + add((TWO.pow(tp-1).multiply(Y)). + divide(q.multiply(Q).multiply(TWO.pow(1024)))); + + if (N.mod(TWO).compareTo(ONE)==0) + { + N = N.add(ONE); + } + + int k = 0; //step 7 + + step8: for(;;) + { + //step 11 + p = q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))).add(ONE); + + if (p.compareTo(TWO.pow(tp))==1) + { + continue step3; //step 9 + } + + //step10 + if ((TWO.modPow(q.multiply(Q).multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)==0) && + (TWO.modPow(q.multiply(N.add(BigInteger.valueOf(k))),p).compareTo(ONE)!=0)) + { + pq[0] = p; + pq[1] = q; + return; + } + else + { + k += 2; + continue step8; + } + } + } + } + + + /** + * Procedure C + * procedure generates the a value from the given p,q, + * returning the a value. + */ + private BigInteger procedure_C(BigInteger p, BigInteger q) + { + BigInteger pSub1 = p.subtract(ONE); + BigInteger pSub1DivQ = pSub1.divide(q); + int length = p.bitLength(); + + for(;;) + { + BigInteger d = new BigInteger(length, init_random); + + // 1 < d < p-1 + if (d.compareTo(ONE) > 0 && d.compareTo(pSub1) < 0) + { + BigInteger a = d.modPow(pSub1DivQ, p); + + if (a.compareTo(ONE) != 0) + { + return a; + } + } + } + } + + /** + * which generates the p , q and a values from the given parameters, + * returning the GOST3410Parameters object. + */ + public GOST3410Parameters generateParameters() + { + BigInteger [] pq = new BigInteger[2]; + BigInteger q = null, p = null, a = null; + + int x0, c; + long x0L, cL; + + if (typeproc==1) + { + x0 = init_random.nextInt(); + c = init_random.nextInt(); + + switch(size) + { + case 512: + procedure_A(x0, c, pq, 512); + break; + case 1024: + procedure_B(x0, c, pq); + break; + default: + throw new IllegalArgumentException("Ooops! key size 512 or 1024 bit."); + } + p = pq[0]; q = pq[1]; + a = procedure_C(p, q); + //System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16)); + //System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a); + return new GOST3410Parameters(p, q, a, new GOST3410ValidationParameters(x0, c)); + } + else + { + x0L = init_random.nextLong(); + cL = init_random.nextLong(); + + switch(size) + { + case 512: + procedure_Aa(x0L, cL, pq, 512); + break; + case 1024: + procedure_Bb(x0L, cL, pq); + break; + default: + throw new IllegalStateException("Ooops! key size 512 or 1024 bit."); + } + p = pq[0]; q = pq[1]; + a = procedure_C(p, q); + //System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16)); + //System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a); + return new GOST3410Parameters(p, q, a, new GOST3410ValidationParameters(x0L, cL)); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java new file mode 100644 index 0000000..7789b7b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/KDF1BytesGenerator.java @@ -0,0 +1,23 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.Digest; + +/** + * KDF1 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 + *
        + * This implementation is based on ISO 18033/IEEE P1363a. + */ +public class KDF1BytesGenerator + extends BaseKDFBytesGenerator +{ + /** + * Construct a KDF1 byte generator. + *

        + * @param digest the digest to be used as the source of derived keys. + */ + public KDF1BytesGenerator( + Digest digest) + { + super(0, digest); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java new file mode 100644 index 0000000..ac0c64a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/KDF2BytesGenerator.java @@ -0,0 +1,24 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.Digest; + +/** + * KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 + *
        + * This implementation is based on IEEE P1363/ISO 18033. + */ +public class KDF2BytesGenerator + extends BaseKDFBytesGenerator +{ + /** + * Construct a KDF2 bytes generator. Generates key material + * according to IEEE P1363 or ISO 18033 depending on the initialisation. + *

        + * @param digest the digest to be used as the source of derived keys. + */ + public KDF2BytesGenerator( + Digest digest) + { + super(1, digest); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java new file mode 100644 index 0000000..e93c0d7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/MGF1BytesGenerator.java @@ -0,0 +1,114 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.DerivationFunction; +import org.bouncycastle.crypto.DerivationParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.params.MGFParameters; + +/** + * Generator for MGF1 as defined in PKCS 1v2 + */ +public class MGF1BytesGenerator + implements DerivationFunction +{ + private Digest digest; + private byte[] seed; + private int hLen; + + /** + * @param digest the digest to be used as the source of generated bytes + */ + public MGF1BytesGenerator( + Digest digest) + { + this.digest = digest; + this.hLen = digest.getDigestSize(); + } + + public void init( + DerivationParameters param) + { + if (!(param instanceof MGFParameters)) + { + throw new IllegalArgumentException("MGF parameters required for MGF1Generator"); + } + + MGFParameters p = (MGFParameters)param; + + seed = p.getSeed(); + } + + /** + * return the underlying digest. + */ + public Digest getDigest() + { + return digest; + } + + /** + * int to octet string. + */ + private void ItoOSP( + int i, + byte[] sp) + { + sp[0] = (byte)(i >>> 24); + sp[1] = (byte)(i >>> 16); + sp[2] = (byte)(i >>> 8); + sp[3] = (byte)(i >>> 0); + } + + /** + * fill len bytes of the output buffer with bytes generated from + * the derivation function. + * + * @throws DataLengthException if the out buffer is too small. + */ + public int generateBytes( + byte[] out, + int outOff, + int len) + throws DataLengthException, IllegalArgumentException + { + if ((out.length - len) < outOff) + { + throw new DataLengthException("output buffer too small"); + } + + byte[] hashBuf = new byte[hLen]; + byte[] C = new byte[4]; + int counter = 0; + + digest.reset(); + + if (len > hLen) + { + do + { + ItoOSP(counter, C); + + digest.update(seed, 0, seed.length); + digest.update(C, 0, C.length); + digest.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, out, outOff + counter * hLen, hLen); + } + while (++counter < (len / hLen)); + } + + if ((counter * hLen) < len) + { + ItoOSP(counter, C); + + digest.update(seed, 0, seed.length); + digest.update(C, 0, C.length); + digest.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, out, outOff + counter * hLen, len - (counter * hLen)); + } + + return len; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java new file mode 100644 index 0000000..6700cf3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/NaccacheSternKeyPairGenerator.java @@ -0,0 +1,365 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.NaccacheSternKeyGenerationParameters; +import org.bouncycastle.crypto.params.NaccacheSternKeyParameters; +import org.bouncycastle.crypto.params.NaccacheSternPrivateKeyParameters; + +import javabc.BigInteger; +import javabc.SecureRandom; +import java.util.Vector; + +/** + * Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ +public class NaccacheSternKeyPairGenerator + implements AsymmetricCipherKeyPairGenerator +{ + + private static int[] smallPrimes = + { + 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, + 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, + 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, + 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, + 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, + 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, + 541, 547, 557 + }; + + private NaccacheSternKeyGenerationParameters param; + + private static final BigInteger ONE = BigInteger.valueOf(1); // JDK 1.1 compatibility + + /* + * (non-Javadoc) + * + * @see org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator#init(org.bouncycastle.crypto.KeyGenerationParameters) + */ + public void init(KeyGenerationParameters param) + { + this.param = (NaccacheSternKeyGenerationParameters)param; + } + + /* + * (non-Javadoc) + * + * @see org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator#generateKeyPair() + */ + public AsymmetricCipherKeyPair generateKeyPair() + { + int strength = param.getStrength(); + SecureRandom rand = param.getRandom(); + int certainty = param.getCertainty(); + boolean debug = param.isDebug(); + + if (debug) + { + System.out.println("Fetching first " + param.getCntSmallPrimes() + " primes."); + } + + Vector smallPrimes = findFirstPrimes(param.getCntSmallPrimes()); + smallPrimes = permuteList(smallPrimes, rand); + + BigInteger u = ONE; + BigInteger v = ONE; + + for (int i = 0; i < smallPrimes.size() / 2; i++) + { + u = u.multiply((BigInteger)smallPrimes.elementAt(i)); + } + for (int i = smallPrimes.size() / 2; i < smallPrimes.size(); i++) + { + v = v.multiply((BigInteger)smallPrimes.elementAt(i)); + } + + BigInteger sigma = u.multiply(v); + + // n = (2 a u p_ + 1 ) ( 2 b v q_ + 1) + // -> |n| = strength + // |2| = 1 in bits + // -> |a| * |b| = |n| - |u| - |v| - |p_| - |q_| - |2| -|2| + // remainingStrength = strength - sigma.bitLength() - p_.bitLength() - + // q_.bitLength() - 1 -1 + int remainingStrength = strength - sigma.bitLength() - 48; + BigInteger a = generatePrime(remainingStrength / 2 + 1, certainty, rand); + BigInteger b = generatePrime(remainingStrength / 2 + 1, certainty, rand); + + BigInteger p_; + BigInteger q_; + BigInteger p; + BigInteger q; + long tries = 0; + if (debug) + { + System.out.println("generating p and q"); + } + + BigInteger _2au = a.multiply(u).shiftLeft(1); + BigInteger _2bv = b.multiply(v).shiftLeft(1); + + for (;;) + { + tries++; + + p_ = generatePrime(24, certainty, rand); + + p = p_.multiply(_2au).add(ONE); + + if (!p.isProbablePrime(certainty)) + { + continue; + } + + for (;;) + { + q_ = generatePrime(24, certainty, rand); + + if (p_.equals(q_)) + { + continue; + } + + q = q_.multiply(_2bv).add(ONE); + + if (q.isProbablePrime(certainty)) + { + break; + } + } + + if (!sigma.gcd(p_.multiply(q_)).equals(ONE)) + { + // System.out.println("sigma.gcd(p_.mult(q_)) != 1!\n p_: " + p_ + // +"\n q_: "+ q_ ); + continue; + } + + if (p.multiply(q).bitLength() < strength) + { + if (debug) + { + System.out.println("key size too small. Should be " + strength + " but is actually " + + p.multiply(q).bitLength()); + } + continue; + } + break; + } + + if (debug) + { + System.out.println("needed " + tries + " tries to generate p and q."); + } + + BigInteger n = p.multiply(q); + BigInteger phi_n = p.subtract(ONE).multiply(q.subtract(ONE)); + BigInteger g; + tries = 0; + if (debug) + { + System.out.println("generating g"); + } + for (;;) + { + + Vector gParts = new Vector(); + for (int ind = 0; ind != smallPrimes.size(); ind++) + { + BigInteger i = (BigInteger)smallPrimes.elementAt(ind); + BigInteger e = phi_n.divide(i); + + for (;;) + { + tries++; + g = new BigInteger(strength, certainty, rand); + if (g.modPow(e, n).equals(ONE)) + { + continue; + } + gParts.addElement(g); + break; + } + } + g = ONE; + for (int i = 0; i < smallPrimes.size(); i++) + { + g = g.multiply(((BigInteger)gParts.elementAt(i)).modPow(sigma.divide((BigInteger)smallPrimes.elementAt(i)), n)).mod(n); + } + + // make sure that g is not divisible by p_i or q_i + boolean divisible = false; + for (int i = 0; i < smallPrimes.size(); i++) + { + if (g.modPow(phi_n.divide((BigInteger)smallPrimes.elementAt(i)), n).equals(ONE)) + { + if (debug) + { + System.out.println("g has order phi(n)/" + smallPrimes.elementAt(i) + "\n g: " + g); + } + divisible = true; + break; + } + } + + if (divisible) + { + continue; + } + + // make sure that g has order > phi_n/4 + + if (g.modPow(phi_n.divide(BigInteger.valueOf(4)), n).equals(ONE)) + { + if (debug) + { + System.out.println("g has order phi(n)/4\n g:" + g); + } + continue; + } + + if (g.modPow(phi_n.divide(p_), n).equals(ONE)) + { + if (debug) + { + System.out.println("g has order phi(n)/p'\n g: " + g); + } + continue; + } + if (g.modPow(phi_n.divide(q_), n).equals(ONE)) + { + if (debug) + { + System.out.println("g has order phi(n)/q'\n g: " + g); + } + continue; + } + if (g.modPow(phi_n.divide(a), n).equals(ONE)) + { + if (debug) + { + System.out.println("g has order phi(n)/a\n g: " + g); + } + continue; + } + if (g.modPow(phi_n.divide(b), n).equals(ONE)) + { + if (debug) + { + System.out.println("g has order phi(n)/b\n g: " + g); + } + continue; + } + break; + } + if (debug) + { + System.out.println("needed " + tries + " tries to generate g"); + System.out.println(); + System.out.println("found new NaccacheStern cipher variables:"); + System.out.println("smallPrimes: " + smallPrimes); + System.out.println("sigma:...... " + sigma + " (" + sigma.bitLength() + " bits)"); + System.out.println("a:.......... " + a); + System.out.println("b:.......... " + b); + System.out.println("p':......... " + p_); + System.out.println("q':......... " + q_); + System.out.println("p:.......... " + p); + System.out.println("q:.......... " + q); + System.out.println("n:.......... " + n); + System.out.println("phi(n):..... " + phi_n); + System.out.println("g:.......... " + g); + System.out.println(); + } + + return new AsymmetricCipherKeyPair(new NaccacheSternKeyParameters(false, g, n, sigma.bitLength()), + new NaccacheSternPrivateKeyParameters(g, n, sigma.bitLength(), smallPrimes, phi_n)); + } + + private static BigInteger generatePrime( + int bitLength, + int certainty, + SecureRandom rand) + { + BigInteger p_ = new BigInteger(bitLength, certainty, rand); + while (p_.bitLength() != bitLength) + { + p_ = new BigInteger(bitLength, certainty, rand); + } + return p_; + } + + /** + * Generates a permuted ArrayList from the original one. The original List + * is not modified + * + * @param arr + * the ArrayList to be permuted + * @param rand + * the source of Randomness for permutation + * @return a new ArrayList with the permuted elements. + */ + private static Vector permuteList( + Vector arr, + SecureRandom rand) + { + Vector retval = new Vector(); + Vector tmp = new Vector(); + for (int i = 0; i < arr.size(); i++) + { + tmp.addElement(arr.elementAt(i)); + } + retval.addElement(tmp.elementAt(0)); + tmp.removeElementAt(0); + while (tmp.size() != 0) + { + retval.insertElementAt(tmp.elementAt(0), getInt(rand, retval.size() + 1)); + tmp.removeElementAt(0); + } + return retval; + } + + private static int getInt( + SecureRandom rand, + int n) + { + if ((n & -n) == n) + { + return (int)((n * (long)(rand.nextInt() & 0x7fffffff)) >> 31); + } + + int bits, val; + do + { + bits = rand.nextInt() & 0x7fffffff; + val = bits % n; + } + while (bits - val + (n-1) < 0); + + return val; + } + + /** + * Finds the first 'count' primes starting with 3 + * + * @param count + * the number of primes to find + * @return a vector containing the found primes as Integer + */ + private static Vector findFirstPrimes( + int count) + { + Vector primes = new Vector(count); + + for (int i = 0; i != count; i++) + { + primes.addElement(BigInteger.valueOf(smallPrimes[i])); + } + + return primes; + } + +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java new file mode 100644 index 0000000..8a4d28a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java @@ -0,0 +1,131 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.PBEParametersGenerator; +import org.bouncycastle.crypto.digests.MD5Digest; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * Generator for PBE derived keys and ivs as usd by OpenSSL. + *

        + * The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + * iteration count of 1. + *

        + */ +public class OpenSSLPBEParametersGenerator + extends PBEParametersGenerator +{ + private Digest digest = new MD5Digest(); + + /** + * Construct a OpenSSL Parameters generator. + */ + public OpenSSLPBEParametersGenerator() + { + } + + /** + * Initialise - note the iteration count for this algorithm is fixed at 1. + * + * @param password password to use. + * @param salt salt to use. + */ + public void init( + byte[] password, + byte[] salt) + { + super.init(password, salt, 1); + } + + /** + * the derived key function, the ith hash of the password and the salt. + */ + private byte[] generateDerivedKey( + int bytesNeeded) + { + byte[] buf = new byte[digest.getDigestSize()]; + byte[] key = new byte[bytesNeeded]; + int offset = 0; + + for (;;) + { + digest.update(password, 0, password.length); + digest.update(salt, 0, salt.length); + + digest.doFinal(buf, 0); + + int len = (bytesNeeded > buf.length) ? buf.length : bytesNeeded; + System.arraycopy(buf, 0, key, offset, len); + offset += len; + + // check if we need any more + bytesNeeded -= len; + if (bytesNeeded == 0) + { + break; + } + + // do another round + digest.reset(); + digest.update(buf, 0, buf.length); + } + + return key; + } + + /** + * Generate a key parameter derived from the password, salt, and iteration + * count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + * @exception IllegalArgumentException if the key length larger than the base hash size. + */ + public CipherParameters generateDerivedParameters( + int keySize) + { + keySize = keySize / 8; + + byte[] dKey = generateDerivedKey(keySize); + + return new KeyParameter(dKey, 0, keySize); + } + + /** + * Generate a key with initialisation vector parameter derived from + * the password, salt, and iteration count we are currently initialised + * with. + * + * @param keySize the size of the key we want (in bits) + * @param ivSize the size of the iv we want (in bits) + * @return a ParametersWithIV object. + * @exception IllegalArgumentException if keySize + ivSize is larger than the base hash size. + */ + public CipherParameters generateDerivedParameters( + int keySize, + int ivSize) + { + keySize = keySize / 8; + ivSize = ivSize / 8; + + byte[] dKey = generateDerivedKey(keySize + ivSize); + + return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the password, + * salt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + * @exception IllegalArgumentException if the key length larger than the base hash size. + */ + public CipherParameters generateDerivedMacParameters( + int keySize) + { + return generateDerivedParameters(keySize); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java new file mode 100644 index 0000000..8fb1cc8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator.java @@ -0,0 +1,221 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.ExtendedDigest; +import org.bouncycastle.crypto.PBEParametersGenerator; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * Generator for PBE derived keys and ivs as defined by PKCS 12 V1.0. + *

        + * The document this implementation is based on can be found at + * + * RSA's PKCS12 Page + */ +public class PKCS12ParametersGenerator + extends PBEParametersGenerator +{ + public static final int KEY_MATERIAL = 1; + public static final int IV_MATERIAL = 2; + public static final int MAC_MATERIAL = 3; + + private Digest digest; + + private int u; + private int v; + + /** + * Construct a PKCS 12 Parameters generator. This constructor will + * accept any digest which also implements ExtendedDigest. + * + * @param digest the digest to be used as the source of derived keys. + * @exception IllegalArgumentException if an unknown digest is passed in. + */ + public PKCS12ParametersGenerator( + Digest digest) + { + this.digest = digest; + if (digest instanceof ExtendedDigest) + { + u = digest.getDigestSize(); + v = ((ExtendedDigest)digest).getByteLength(); + } + else + { + throw new IllegalArgumentException("Digest " + digest.getAlgorithmName() + " unsupported"); + } + } + + /** + * add a + b + 1, returning the result in a. The a value is treated + * as a BigInteger of length (b.length * 8) bits. The result is + * modulo 2^b.length in case of overflow. + */ + private void adjust( + byte[] a, + int aOff, + byte[] b) + { + int x = (b[b.length - 1] & 0xff) + (a[aOff + b.length - 1] & 0xff) + 1; + + a[aOff + b.length - 1] = (byte)x; + x >>>= 8; + + for (int i = b.length - 2; i >= 0; i--) + { + x += (b[i] & 0xff) + (a[aOff + i] & 0xff); + a[aOff + i] = (byte)x; + x >>>= 8; + } + } + + /** + * generation of a derived key ala PKCS12 V1.0. + */ + private byte[] generateDerivedKey( + int idByte, + int n) + { + byte[] D = new byte[v]; + byte[] dKey = new byte[n]; + + for (int i = 0; i != D.length; i++) + { + D[i] = (byte)idByte; + } + + byte[] S; + + if ((salt != null) && (salt.length != 0)) + { + S = new byte[v * ((salt.length + v - 1) / v)]; + + for (int i = 0; i != S.length; i++) + { + S[i] = salt[i % salt.length]; + } + } + else + { + S = new byte[0]; + } + + byte[] P; + + if ((password != null) && (password.length != 0)) + { + P = new byte[v * ((password.length + v - 1) / v)]; + + for (int i = 0; i != P.length; i++) + { + P[i] = password[i % password.length]; + } + } + else + { + P = new byte[0]; + } + + byte[] I = new byte[S.length + P.length]; + + System.arraycopy(S, 0, I, 0, S.length); + System.arraycopy(P, 0, I, S.length, P.length); + + byte[] B = new byte[v]; + int c = (n + u - 1) / u; + + for (int i = 1; i <= c; i++) + { + byte[] A = new byte[u]; + + digest.update(D, 0, D.length); + digest.update(I, 0, I.length); + digest.doFinal(A, 0); + for (int j = 1; j < iterationCount; j++) + { + digest.update(A, 0, A.length); + digest.doFinal(A, 0); + } + + for (int j = 0; j != B.length; j++) + { + B[j] = A[j % A.length]; + } + + for (int j = 0; j != I.length / v; j++) + { + adjust(I, j * v, B); + } + + if (i == c) + { + System.arraycopy(A, 0, dKey, (i - 1) * u, dKey.length - ((i - 1) * u)); + } + else + { + System.arraycopy(A, 0, dKey, (i - 1) * u, A.length); + } + } + + return dKey; + } + + /** + * Generate a key parameter derived from the password, salt, and iteration + * count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + */ + public CipherParameters generateDerivedParameters( + int keySize) + { + keySize = keySize / 8; + + byte[] dKey = generateDerivedKey(KEY_MATERIAL, keySize); + + return new KeyParameter(dKey, 0, keySize); + } + + /** + * Generate a key with initialisation vector parameter derived from + * the password, salt, and iteration count we are currently initialised + * with. + * + * @param keySize the size of the key we want (in bits) + * @param ivSize the size of the iv we want (in bits) + * @return a ParametersWithIV object. + */ + public CipherParameters generateDerivedParameters( + int keySize, + int ivSize) + { + keySize = keySize / 8; + ivSize = ivSize / 8; + + byte[] dKey = generateDerivedKey(KEY_MATERIAL, keySize); + + byte[] iv = generateDerivedKey(IV_MATERIAL, ivSize); + + return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), iv, 0, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the password, + * salt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + */ + public CipherParameters generateDerivedMacParameters( + int keySize) + { + keySize = keySize / 8; + + byte[] dKey = generateDerivedKey(MAC_MATERIAL, keySize); + + return new KeyParameter(dKey, 0, keySize); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java new file mode 100644 index 0000000..1c62ecc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S1ParametersGenerator.java @@ -0,0 +1,119 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.PBEParametersGenerator; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * Generator for PBE derived keys and ivs as defined by PKCS 5 V2.0 Scheme 1. + * Note this generator is limited to the size of the hash produced by the + * digest used to drive it. + *

        + * The document this implementation is based on can be found at + * + * RSA's PKCS5 Page + */ +public class PKCS5S1ParametersGenerator + extends PBEParametersGenerator +{ + private Digest digest; + + /** + * Construct a PKCS 5 Scheme 1 Parameters generator. + * + * @param digest the digest to be used as the source of derived keys. + */ + public PKCS5S1ParametersGenerator( + Digest digest) + { + this.digest = digest; + } + + /** + * the derived key function, the ith hash of the password and the salt. + */ + private byte[] generateDerivedKey() + { + byte[] digestBytes = new byte[digest.getDigestSize()]; + + digest.update(password, 0, password.length); + digest.update(salt, 0, salt.length); + + digest.doFinal(digestBytes, 0); + for (int i = 1; i < iterationCount; i++) + { + digest.update(digestBytes, 0, digestBytes.length); + digest.doFinal(digestBytes, 0); + } + + return digestBytes; + } + + /** + * Generate a key parameter derived from the password, salt, and iteration + * count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + * @exception IllegalArgumentException if the key length larger than the base hash size. + */ + public CipherParameters generateDerivedParameters( + int keySize) + { + keySize = keySize / 8; + + if (keySize > digest.getDigestSize()) + { + throw new IllegalArgumentException( + "Can't generate a derived key " + keySize + " bytes long."); + } + + byte[] dKey = generateDerivedKey(); + + return new KeyParameter(dKey, 0, keySize); + } + + /** + * Generate a key with initialisation vector parameter derived from + * the password, salt, and iteration count we are currently initialised + * with. + * + * @param keySize the size of the key we want (in bits) + * @param ivSize the size of the iv we want (in bits) + * @return a ParametersWithIV object. + * @exception IllegalArgumentException if keySize + ivSize is larger than the base hash size. + */ + public CipherParameters generateDerivedParameters( + int keySize, + int ivSize) + { + keySize = keySize / 8; + ivSize = ivSize / 8; + + if ((keySize + ivSize) > digest.getDigestSize()) + { + throw new IllegalArgumentException( + "Can't generate a derived key " + (keySize + ivSize) + " bytes long."); + } + + byte[] dKey = generateDerivedKey(); + + return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the password, + * salt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + * @exception IllegalArgumentException if the key length larger than the base hash size. + */ + public CipherParameters generateDerivedMacParameters( + int keySize) + { + return generateDerivedParameters(keySize); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java new file mode 100644 index 0000000..a717332 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java @@ -0,0 +1,158 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.PBEParametersGenerator; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.macs.HMac; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * Generator for PBE derived keys and ivs as defined by PKCS 5 V2.0 Scheme 2. + * This generator uses a SHA-1 HMac as the calculation function. + *

        + * The document this implementation is based on can be found at + * + * RSA's PKCS5 Page + */ +public class PKCS5S2ParametersGenerator + extends PBEParametersGenerator +{ + private Mac hMac; + + /** + * construct a PKCS5 Scheme 2 Parameters generator. + */ + public PKCS5S2ParametersGenerator() + { + this(new SHA1Digest()); + } + + public PKCS5S2ParametersGenerator(Digest digest) + { + hMac = new HMac(digest); + } + + private void F( + byte[] P, + byte[] S, + int c, + byte[] iBuf, + byte[] out, + int outOff) + { + byte[] state = new byte[hMac.getMacSize()]; + CipherParameters param = new KeyParameter(P); + + hMac.init(param); + + if (S != null) + { + hMac.update(S, 0, S.length); + } + + hMac.update(iBuf, 0, iBuf.length); + + hMac.doFinal(state, 0); + + System.arraycopy(state, 0, out, outOff, state.length); + + if (c == 0) + { + throw new IllegalArgumentException("iteration count must be at least 1."); + } + + for (int count = 1; count < c; count++) + { + hMac.init(param); + hMac.update(state, 0, state.length); + hMac.doFinal(state, 0); + + for (int j = 0; j != state.length; j++) + { + out[outOff + j] ^= state[j]; + } + } + } + + private void intToOctet( + byte[] buf, + int i) + { + buf[0] = (byte)(i >>> 24); + buf[1] = (byte)(i >>> 16); + buf[2] = (byte)(i >>> 8); + buf[3] = (byte)i; + } + + private byte[] generateDerivedKey( + int dkLen) + { + int hLen = hMac.getMacSize(); + int l = (dkLen + hLen - 1) / hLen; + byte[] iBuf = new byte[4]; + byte[] out = new byte[l * hLen]; + + for (int i = 1; i <= l; i++) + { + intToOctet(iBuf, i); + + F(password, salt, iterationCount, iBuf, out, (i - 1) * hLen); + } + + return out; + } + + /** + * Generate a key parameter derived from the password, salt, and iteration + * count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + */ + public CipherParameters generateDerivedParameters( + int keySize) + { + keySize = keySize / 8; + + byte[] dKey = generateDerivedKey(keySize); + + return new KeyParameter(dKey, 0, keySize); + } + + /** + * Generate a key with initialisation vector parameter derived from + * the password, salt, and iteration count we are currently initialised + * with. + * + * @param keySize the size of the key we want (in bits) + * @param ivSize the size of the iv we want (in bits) + * @return a ParametersWithIV object. + */ + public CipherParameters generateDerivedParameters( + int keySize, + int ivSize) + { + keySize = keySize / 8; + ivSize = ivSize / 8; + + byte[] dKey = generateDerivedKey(keySize + ivSize); + + return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize); + } + + /** + * Generate a key parameter for use with a MAC derived from the password, + * salt, and iteration count we are currently initialised with. + * + * @param keySize the size of the key we want (in bits) + * @return a KeyParameter object. + */ + public CipherParameters generateDerivedMacParameters( + int keySize) + { + return generateDerivedParameters(keySize); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java new file mode 100644 index 0000000..92d5df7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/RSABlindingFactorGenerator.java @@ -0,0 +1,77 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSAKeyParameters; +import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * Generate a random factor suitable for use with RSA blind signatures + * as outlined in Chaum's blinding and unblinding as outlined in + * "Handbook of Applied Cryptography", page 475. + */ +public class RSABlindingFactorGenerator +{ + private static BigInteger ZERO = BigInteger.valueOf(0); + private static BigInteger ONE = BigInteger.valueOf(1); + + private RSAKeyParameters key; + private SecureRandom random; + + /** + * Initialise the factor generator + * + * @param param the necessary RSA key parameters. + */ + public void init( + CipherParameters param) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + key = (RSAKeyParameters)rParam.getParameters(); + random = rParam.getRandom(); + } + else + { + key = (RSAKeyParameters)param; + random = new SecureRandom(); + } + + if (key instanceof RSAPrivateCrtKeyParameters) + { + throw new IllegalArgumentException("generator requires RSA public key"); + } + } + + /** + * Generate a suitable blind factor for the public key the generator was initialised with. + * + * @return a random blind factor + */ + public BigInteger generateBlindingFactor() + { + if (key == null) + { + throw new IllegalStateException("generator not initialised"); + } + + BigInteger m = key.getModulus(); + int length = m.bitLength() - 1; // must be less than m.bitLength() + BigInteger factor; + BigInteger gcd; + + do + { + factor = new BigInteger(length, random); + gcd = factor.gcd(m); + } + while (factor.equals(ZERO) || factor.equals(ONE) || !gcd.equals(ONE)); + + return factor; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java b/common/src/main/java/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java new file mode 100644 index 0000000..728f6ff --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/RSAKeyPairGenerator.java @@ -0,0 +1,147 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.params.RSAKeyGenerationParameters; +import org.bouncycastle.crypto.params.RSAKeyParameters; +import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; + +import javabc.BigInteger; + +/** + * an RSA key pair generator. + */ +public class RSAKeyPairGenerator + implements AsymmetricCipherKeyPairGenerator +{ + private static final BigInteger ONE = BigInteger.valueOf(1); + + private RSAKeyGenerationParameters param; + + public void init( + KeyGenerationParameters param) + { + this.param = (RSAKeyGenerationParameters)param; + } + + public AsymmetricCipherKeyPair generateKeyPair() + { + BigInteger p, q, n, d, e, pSub1, qSub1, phi; + + // + // p and q values should have a length of half the strength in bits + // + int strength = param.getStrength(); + int pbitlength = (strength + 1) / 2; + int qbitlength = strength - pbitlength; + int mindiffbits = strength / 3; + + e = param.getPublicExponent(); + + // TODO Consider generating safe primes for p, q (see DHParametersHelper.generateSafePrimes) + // (then p-1 and q-1 will not consist of only small factors - see "Pollard's algorithm") + + // + // generate p, prime and (p-1) relatively prime to e + // + for (;;) + { + p = new BigInteger(pbitlength, 1, param.getRandom()); + + if (p.mod(e).equals(ONE)) + { + continue; + } + + if (!p.isProbablePrime(param.getCertainty())) + { + continue; + } + + if (e.gcd(p.subtract(ONE)).equals(ONE)) + { + break; + } + } + + // + // generate a modulus of the required length + // + for (;;) + { + // generate q, prime and (q-1) relatively prime to e, + // and not equal to p + // + for (;;) + { + q = new BigInteger(qbitlength, 1, param.getRandom()); + + if (q.subtract(p).abs().bitLength() < mindiffbits) + { + continue; + } + + if (q.mod(e).equals(ONE)) + { + continue; + } + + if (!q.isProbablePrime(param.getCertainty())) + { + continue; + } + + if (e.gcd(q.subtract(ONE)).equals(ONE)) + { + break; + } + } + + // + // calculate the modulus + // + n = p.multiply(q); + + if (n.bitLength() == param.getStrength()) + { + break; + } + + // + // if we get here our primes aren't big enough, make the largest + // of the two p and try again + // + p = p.max(q); + } + + if (p.compareTo(q) < 0) + { + phi = p; + p = q; + q = phi; + } + + pSub1 = p.subtract(ONE); + qSub1 = q.subtract(ONE); + phi = pSub1.multiply(qSub1); + + // + // calculate the private exponent + // + d = e.modInverse(phi); + + // + // calculate the CRT factors + // + BigInteger dP, dQ, qInv; + + dP = d.remainder(pSub1); + dQ = d.remainder(qSub1); + qInv = q.modInverse(p); + + return new AsymmetricCipherKeyPair( + new RSAKeyParameters(false, n, e), + new RSAPrivateCrtKeyParameters(n, e, d, p, q, dP, dQ, qInv)); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/generators/SCrypt.java b/common/src/main/java/org/bouncycastle/crypto/generators/SCrypt.java new file mode 100644 index 0000000..da22fa4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/generators/SCrypt.java @@ -0,0 +1,147 @@ +package org.bouncycastle.crypto.generators; + +import org.bouncycastle.crypto.PBEParametersGenerator; +import org.bouncycastle.crypto.digests.SHA256Digest; +import org.bouncycastle.crypto.engines.Salsa20Engine; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.util.Pack; +import org.bouncycastle.util.Arrays; + +public class SCrypt +{ + // TODO Validate arguments + public static byte[] generate(byte[] P, byte[] S, int N, int r, int p, int dkLen) + { + return MFcrypt(P, S, N, r, p, dkLen); + } + + private static byte[] MFcrypt(byte[] P, byte[] S, int N, int r, int p, int dkLen) + { + int MFLenBytes = r * 128; + byte[] bytes = SingleIterationPBKDF2(P, S, p * MFLenBytes); + + int[] B = null; + + try + { + int BLen = bytes.length >>> 2; + B = new int[BLen]; + + Pack.littleEndianToInt(bytes, 0, B); + + int MFLenWords = MFLenBytes >>> 2; + for (int BOff = 0; BOff < BLen; BOff += MFLenWords) + { + // TODO These can be done in parallel threads + SMix(B, BOff, N, r); + } + + Pack.intToLittleEndian(B, bytes, 0); + + return SingleIterationPBKDF2(P, bytes, dkLen); + } + finally + { + Clear(bytes); + Clear(B); + } + } + + private static byte[] SingleIterationPBKDF2(byte[] P, byte[] S, int dkLen) + { + PBEParametersGenerator pGen = new PKCS5S2ParametersGenerator(new SHA256Digest()); + pGen.init(P, S, 1); + KeyParameter key = (KeyParameter) pGen.generateDerivedMacParameters(dkLen * 8); + return key.getKey(); + } + + private static void SMix(int[] B, int BOff, int N, int r) + { + int BCount = r * 32; + + int[] blockX1 = new int[16]; + int[] blockX2 = new int[16]; + int[] blockY = new int[BCount]; + + int[] X = new int[BCount]; + int[][] V = new int[N][]; + + try + { + System.arraycopy(B, BOff, X, 0, BCount); + + for (int i = 0; i < N; ++i) + { + V[i] = Arrays.clone(X); + BlockMix(X, blockX1, blockX2, blockY, r); + } + + int mask = N - 1; + for (int i = 0; i < N; ++i) + { + int j = X[BCount - 16] & mask; + Xor(X, V[j], 0, X); + BlockMix(X, blockX1, blockX2, blockY, r); + } + + System.arraycopy(X, 0, B, BOff, BCount); + } + finally + { + ClearAll(V); + ClearAll(new int[][]{ X, blockX1, blockX2, blockY }); + } + } + + private static void BlockMix(int[] B, int[] X1, int[] X2, int[] Y, int r) + { + System.arraycopy(B, B.length - 16, X1, 0, 16); + + int BOff = 0, YOff = 0, halfLen = B.length >>> 1; + + for (int i = 2 * r; i > 0; --i) + { + Xor(X1, B, BOff, X2); + + Salsa20Engine.salsaCore(8, X2, X1); + System.arraycopy(X1, 0, Y, YOff, 16); + + YOff = halfLen + BOff - YOff; + BOff += 16; + } + + System.arraycopy(Y, 0, B, 0, Y.length); + } + + private static void Xor(int[] a, int[] b, int bOff, int[] output) + { + for (int i = output.length - 1; i >= 0; --i) + { + output[i] = a[i] ^ b[bOff + i]; + } + } + + private static void Clear(byte[] array) + { + if (array != null) + { + Arrays.fill(array, (byte)0); + } + } + + private static void Clear(int[] array) + { + if (array != null) + { + Arrays.fill(array, 0); + } + } + + private static void ClearAll(int[][] arrays) + { + for (int i = 0; i < arrays.length; ++i) + { + Clear(arrays[i]); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/CipherInputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/CipherInputStream.java new file mode 100644 index 0000000..2eb8664 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/CipherInputStream.java @@ -0,0 +1,244 @@ +package org.bouncycastle.crypto.io; + +import javabc.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.crypto.BufferedBlockCipher; +import org.bouncycastle.crypto.StreamCipher; + +/** + * A CipherInputStream is composed of an InputStream and a BufferedBlockCipher so + * that read() methods return data that are read in from the + * underlying InputStream but have been additionally processed by the + * Cipher. The Cipher must be fully initialized before being used by + * a CipherInputStream. + *

        + * For example, if the Cipher is initialized for decryption, the + * CipherInputStream will attempt to read in data and decrypt them, + * before returning the decrypted data. + */ +public class CipherInputStream + extends FilterInputStream +{ + private BufferedBlockCipher bufferedBlockCipher; + private StreamCipher streamCipher; + + private byte[] buf; + private byte[] inBuf; + + private int bufOff; + private int maxBuf; + private boolean finalized; + + private static final int INPUT_BUF_SIZE = 2048; + + /** + * Constructs a CipherInputStream from an InputStream and a + * BufferedBlockCipher. + */ + public CipherInputStream( + InputStream is, + BufferedBlockCipher cipher) + { + super(is); + + this.bufferedBlockCipher = cipher; + + buf = new byte[cipher.getOutputSize(INPUT_BUF_SIZE)]; + inBuf = new byte[INPUT_BUF_SIZE]; + } + + public CipherInputStream( + InputStream is, + StreamCipher cipher) + { + super(is); + + this.streamCipher = cipher; + + buf = new byte[INPUT_BUF_SIZE]; + inBuf = new byte[INPUT_BUF_SIZE]; + } + + /** + * grab the next chunk of input from the underlying input stream + */ + private int nextChunk() + throws IOException + { + int available = super.available(); + + // must always try to read 1 byte! + // some buggy InputStreams return < 0! + if (available <= 0) + { + available = 1; + } + + if (available > inBuf.length) + { + available = super.read(inBuf, 0, inBuf.length); + } + else + { + available = super.read(inBuf, 0, available); + } + + if (available < 0) + { + if (finalized) + { + return -1; + } + + try + { + if (bufferedBlockCipher != null) + { + maxBuf = bufferedBlockCipher.doFinal(buf, 0); + } + else + { + maxBuf = 0; // a stream cipher + } + } + catch (Exception e) + { + throw new IOException("error processing stream: " + e.toString()); + } + + bufOff = 0; + + finalized = true; + + if (bufOff == maxBuf) + { + return -1; + } + } + else + { + bufOff = 0; + + try + { + if (bufferedBlockCipher != null) + { + maxBuf = bufferedBlockCipher.processBytes(inBuf, 0, available, buf, 0); + } + else + { + streamCipher.processBytes(inBuf, 0, available, buf, 0); + maxBuf = available; + } + } + catch (Exception e) + { + throw new IOException("error processing stream: " + e.toString()); + } + + if (maxBuf == 0) // not enough bytes read for first block... + { + return nextChunk(); + } + } + + return maxBuf; + } + + public int read() + throws IOException + { + if (bufOff == maxBuf) + { + if (nextChunk() < 0) + { + return -1; + } + } + + return buf[bufOff++] & 0xff; + } + + public int read( + byte[] b) + throws IOException + { + return read(b, 0, b.length); + } + + public int read( + byte[] b, + int off, + int len) + throws IOException + { + if (bufOff == maxBuf) + { + if (nextChunk() < 0) + { + return -1; + } + } + + int available = maxBuf - bufOff; + + if (len > available) + { + System.arraycopy(buf, bufOff, b, off, available); + bufOff = maxBuf; + + return available; + } + else + { + System.arraycopy(buf, bufOff, b, off, len); + bufOff += len; + + return len; + } + } + + public long skip( + long n) + throws IOException + { + if (n <= 0) + { + return 0; + } + + int available = maxBuf - bufOff; + + if (n > available) + { + bufOff = maxBuf; + + return available; + } + else + { + bufOff += (int)n; + + return (int)n; + } + } + + public int available() + throws IOException + { + return maxBuf - bufOff; + } + + public void close() + throws IOException + { + super.close(); + } + + public boolean markSupported() + { + return false; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/CipherOutputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/CipherOutputStream.java new file mode 100644 index 0000000..c286e20 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/CipherOutputStream.java @@ -0,0 +1,188 @@ +package org.bouncycastle.crypto.io; + +import javabc.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import org.bouncycastle.crypto.BufferedBlockCipher; +import org.bouncycastle.crypto.StreamCipher; + +public class CipherOutputStream + extends FilterOutputStream +{ + private BufferedBlockCipher bufferedBlockCipher; + private StreamCipher streamCipher; + + private byte[] oneByte = new byte[1]; + private byte[] buf; + + /** + * Constructs a CipherOutputStream from an OutputStream and a + * BufferedBlockCipher. + */ + public CipherOutputStream( + OutputStream os, + BufferedBlockCipher cipher) + { + super(os); + this.bufferedBlockCipher = cipher; + this.buf = new byte[cipher.getBlockSize()]; + } + + /** + * Constructs a CipherOutputStream from an OutputStream and a + * BufferedBlockCipher. + */ + public CipherOutputStream( + OutputStream os, + StreamCipher cipher) + { + super(os); + this.streamCipher = cipher; + } + + /** + * Writes the specified byte to this output stream. + * + * @param b the byte. + * @exception java.io.IOException if an I/O error occurs. + */ + public void write( + int b) + throws IOException + { + oneByte[0] = (byte)b; + + if (bufferedBlockCipher != null) + { + int len = bufferedBlockCipher.processBytes(oneByte, 0, 1, buf, 0); + + if (len != 0) + { + out.write(buf, 0, len); + } + } + else + { + out.write(streamCipher.returnByte((byte)b)); + } + } + + /** + * Writes b.length bytes from the specified byte array + * to this output stream. + *

        + * The write method of + * CipherOutputStream calls the write + * method of three arguments with the three arguments + * b, 0, and b.length. + * + * @param b the data. + * @exception java.io.IOException if an I/O error occurs. + * @see #write(byte[], int, int) + */ + public void write( + byte[] b) + throws IOException + { + write(b, 0, b.length); + } + + /** + * Writes len bytes from the specified byte array + * starting at offset off to this output stream. + * + * @param b the data. + * @param off the start offset in the data. + * @param len the number of bytes to write. + * @exception java.io.IOException if an I/O error occurs. + */ + public void write( + byte[] b, + int off, + int len) + throws IOException + { + if (bufferedBlockCipher != null) + { + byte[] buf = new byte[bufferedBlockCipher.getOutputSize(len)]; + + int outLen = bufferedBlockCipher.processBytes(b, off, len, buf, 0); + + if (outLen != 0) + { + out.write(buf, 0, outLen); + } + } + else + { + byte[] buf = new byte[len]; + + streamCipher.processBytes(b, off, len, buf, 0); + + out.write(buf, 0, len); + } + } + + /** + * Flushes this output stream by forcing any buffered output bytes + * that have already been processed by the encapsulated cipher object + * to be written out. + * + *

        + * Any bytes buffered by the encapsulated cipher + * and waiting to be processed by it will not be written out. For example, + * if the encapsulated cipher is a block cipher, and the total number of + * bytes written using one of the write methods is less than + * the cipher's block size, no bytes will be written out. + * + * @exception java.io.IOException if an I/O error occurs. + */ + public void flush() + throws IOException + { + super.flush(); + } + + /** + * Closes this output stream and releases any system resources + * associated with this stream. + *

        + * This method invokes the doFinal method of the encapsulated + * cipher object, which causes any bytes buffered by the encapsulated + * cipher to be processed. The result is written out by calling the + * flush method of this output stream. + *

        + * This method resets the encapsulated cipher object to its initial state + * and calls the close method of the underlying output + * stream. + * + * @exception java.io.IOException if an I/O error occurs. + */ + public void close() + throws IOException + { + try + { + if (bufferedBlockCipher != null) + { + byte[] buf = new byte[bufferedBlockCipher.getOutputSize(0)]; + + int outLen = bufferedBlockCipher.doFinal(buf, 0); + + if (outLen != 0) + { + out.write(buf, 0, outLen); + } + } + } + catch (Exception e) + { + throw new IOException("Error closing stream: " + e.toString()); + } + + flush(); + + super.close(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/DigestInputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/DigestInputStream.java new file mode 100644 index 0000000..c02ae1a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/DigestInputStream.java @@ -0,0 +1,52 @@ +package org.bouncycastle.crypto.io; + +import javabc.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.crypto.Digest; + +public class DigestInputStream + extends FilterInputStream +{ + protected Digest digest; + + public DigestInputStream( + InputStream stream, + Digest digest) + { + super(stream); + this.digest = digest; + } + + public int read() + throws IOException + { + int b = in.read(); + + if (b >= 0) + { + digest.update((byte)b); + } + return b; + } + + public int read( + byte[] b, + int off, + int len) + throws IOException + { + int n = in.read(b, off, len); + if (n > 0) + { + digest.update(b, off, n); + } + return n; + } + + public Digest getDigest() + { + return digest; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/DigestOutputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/DigestOutputStream.java new file mode 100644 index 0000000..23c7e53 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/DigestOutputStream.java @@ -0,0 +1,42 @@ +package org.bouncycastle.crypto.io; + +import java.io.IOException; +import java.io.OutputStream; + +import org.bouncycastle.crypto.Digest; + +public class DigestOutputStream + extends OutputStream +{ + protected Digest digest; + + public DigestOutputStream( + Digest Digest) + { + this.digest = Digest; + } + + public void write(int b) + throws IOException + { + digest.update((byte)b); + } + + public void write( + byte[] b, + int off, + int len) + throws IOException + { + digest.update(b, off, len); + } + + public byte[] getDigest() + { + byte[] res = new byte[digest.getDigestSize()]; + + digest.doFinal(res, 0); + + return res; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/MacInputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/MacInputStream.java new file mode 100644 index 0000000..31f4116 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/MacInputStream.java @@ -0,0 +1,52 @@ +package org.bouncycastle.crypto.io; + +import javabc.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.crypto.Mac; + +public class MacInputStream + extends FilterInputStream +{ + protected Mac mac; + + public MacInputStream( + InputStream stream, + Mac mac) + { + super(stream); + this.mac = mac; + } + + public int read() + throws IOException + { + int b = in.read(); + + if (b >= 0) + { + mac.update((byte)b); + } + return b; + } + + public int read( + byte[] b, + int off, + int len) + throws IOException + { + int n = in.read(b, off, len); + if (n >= 0) + { + mac.update(b, off, n); + } + return n; + } + + public Mac getMac() + { + return mac; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/MacOutputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/MacOutputStream.java new file mode 100644 index 0000000..0f0e7db --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/MacOutputStream.java @@ -0,0 +1,42 @@ +package org.bouncycastle.crypto.io; + +import java.io.IOException; +import java.io.OutputStream; + +import org.bouncycastle.crypto.Mac; + +public class MacOutputStream + extends OutputStream +{ + protected Mac mac; + + public MacOutputStream( + Mac mac) + { + this.mac = mac; + } + + public void write(int b) + throws IOException + { + mac.update((byte)b); + } + + public void write( + byte[] b, + int off, + int len) + throws IOException + { + mac.update(b, off, len); + } + + public byte[] getMac() + { + byte[] res = new byte[mac.getMacSize()]; + + mac.doFinal(res, 0); + + return res; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/SignerInputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/SignerInputStream.java new file mode 100644 index 0000000..7fac9a8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/SignerInputStream.java @@ -0,0 +1,52 @@ +package org.bouncycastle.crypto.io; + +import javabc.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.crypto.Signer; + +public class SignerInputStream + extends FilterInputStream +{ + protected Signer signer; + + public SignerInputStream( + InputStream stream, + Signer signer) + { + super(stream); + this.signer = signer; + } + + public int read() + throws IOException + { + int b = in.read(); + + if (b >= 0) + { + signer.update((byte)b); + } + return b; + } + + public int read( + byte[] b, + int off, + int len) + throws IOException + { + int n = in.read(b, off, len); + if (n > 0) + { + signer.update(b, off, n); + } + return n; + } + + public Signer getSigner() + { + return signer; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/io/SignerOutputStream.java b/common/src/main/java/org/bouncycastle/crypto/io/SignerOutputStream.java new file mode 100644 index 0000000..1c21b5d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/io/SignerOutputStream.java @@ -0,0 +1,38 @@ +package org.bouncycastle.crypto.io; + +import java.io.IOException; +import java.io.OutputStream; + +import org.bouncycastle.crypto.Signer; + +public class SignerOutputStream + extends OutputStream +{ + protected Signer signer; + + public SignerOutputStream( + Signer Signer) + { + this.signer = Signer; + } + + public void write(int b) + throws IOException + { + signer.update((byte)b); + } + + public void write( + byte[] b, + int off, + int len) + throws IOException + { + signer.update(b, off, len); + } + + public Signer getSigner() + { + return signer; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/BlockCipherMac.java b/common/src/main/java/org/bouncycastle/crypto/macs/BlockCipherMac.java new file mode 100644 index 0000000..6de39a8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/BlockCipherMac.java @@ -0,0 +1,174 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.modes.CBCBlockCipher; + +public class BlockCipherMac + implements Mac +{ + private byte[] mac; + + private byte[] buf; + private int bufOff; + private BlockCipher cipher; + + private int macSize; + + /** + * create a standard MAC based on a block cipher. This will produce an + * authentication code half the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @deprecated use CBCBlockCipherMac + */ + public BlockCipherMac( + BlockCipher cipher) + { + this(cipher, (cipher.getBlockSize() * 8) / 2); + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. + *

        + * Note: the size of the MAC must be at least 16 bits (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + * @deprecated use CBCBlockCipherMac + */ + public BlockCipherMac( + BlockCipher cipher, + int macSizeInBits) + { + if ((macSizeInBits % 8) != 0) + { + throw new IllegalArgumentException("MAC size must be multiple of 8"); + } + + this.cipher = new CBCBlockCipher(cipher); + this.macSize = macSizeInBits / 8; + + mac = new byte[cipher.getBlockSize()]; + + buf = new byte[cipher.getBlockSize()]; + bufOff = 0; + } + + public String getAlgorithmName() + { + return cipher.getAlgorithmName(); + } + + public void init( + CipherParameters params) + { + reset(); + + cipher.init(true, params); + } + + public int getMacSize() + { + return macSize; + } + + public void update( + byte in) + { + if (bufOff == buf.length) + { + cipher.processBlock(buf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = in; + } + + public void update( + byte[] in, + int inOff, + int len) + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = cipher.getBlockSize(); + int resultLen = 0; + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += cipher.processBlock(buf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + resultLen += cipher.processBlock(in, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + public int doFinal( + byte[] out, + int outOff) + { + int blockSize = cipher.getBlockSize(); + + // + // pad with zeroes + // + while (bufOff < blockSize) + { + buf[bufOff] = 0; + bufOff++; + } + + cipher.processBlock(buf, 0, mac, 0); + + System.arraycopy(mac, 0, out, outOff, macSize); + + reset(); + + return macSize; + } + + /** + * Reset the mac generator. + */ + public void reset() + { + /* + * clean the buffer. + */ + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + + bufOff = 0; + + /* + * reset the underlying cipher. + */ + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java b/common/src/main/java/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java new file mode 100644 index 0000000..9bf6cb0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/CBCBlockCipherMac.java @@ -0,0 +1,229 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.modes.CBCBlockCipher; +import org.bouncycastle.crypto.paddings.BlockCipherPadding; + +/** + * standard CBC Block Cipher MAC - if no padding is specified the default of + * pad of zeroes is used. + */ +public class CBCBlockCipherMac + implements Mac +{ + private byte[] mac; + + private byte[] buf; + private int bufOff; + private BlockCipher cipher; + private BlockCipherPadding padding; + + private int macSize; + + /** + * create a standard MAC based on a CBC block cipher. This will produce an + * authentication code half the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + */ + public CBCBlockCipherMac( + BlockCipher cipher) + { + this(cipher, (cipher.getBlockSize() * 8) / 2, null); + } + + /** + * create a standard MAC based on a CBC block cipher. This will produce an + * authentication code half the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param padding the padding to be used to complete the last block. + */ + public CBCBlockCipherMac( + BlockCipher cipher, + BlockCipherPadding padding) + { + this(cipher, (cipher.getBlockSize() * 8) / 2, padding); + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CBC mode as the basis for the + * MAC generation. + *

        + * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + */ + public CBCBlockCipherMac( + BlockCipher cipher, + int macSizeInBits) + { + this(cipher, macSizeInBits, null); + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CBC mode as the basis for the + * MAC generation. + *

        + * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + * @param padding the padding to be used to complete the last block. + */ + public CBCBlockCipherMac( + BlockCipher cipher, + int macSizeInBits, + BlockCipherPadding padding) + { + if ((macSizeInBits % 8) != 0) + { + throw new IllegalArgumentException("MAC size must be multiple of 8"); + } + + this.cipher = new CBCBlockCipher(cipher); + this.padding = padding; + this.macSize = macSizeInBits / 8; + + mac = new byte[cipher.getBlockSize()]; + + buf = new byte[cipher.getBlockSize()]; + bufOff = 0; + } + + public String getAlgorithmName() + { + return cipher.getAlgorithmName(); + } + + public void init( + CipherParameters params) + { + reset(); + + cipher.init(true, params); + } + + public int getMacSize() + { + return macSize; + } + + public void update( + byte in) + { + if (bufOff == buf.length) + { + cipher.processBlock(buf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = in; + } + + public void update( + byte[] in, + int inOff, + int len) + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = cipher.getBlockSize(); + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + cipher.processBlock(buf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + cipher.processBlock(in, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + public int doFinal( + byte[] out, + int outOff) + { + int blockSize = cipher.getBlockSize(); + + if (padding == null) + { + // + // pad with zeroes + // + while (bufOff < blockSize) + { + buf[bufOff] = 0; + bufOff++; + } + } + else + { + if (bufOff == blockSize) + { + cipher.processBlock(buf, 0, mac, 0); + bufOff = 0; + } + + padding.addPadding(buf, bufOff); + } + + cipher.processBlock(buf, 0, mac, 0); + + System.arraycopy(mac, 0, out, outOff, macSize); + + reset(); + + return macSize; + } + + /** + * Reset the mac generator. + */ + public void reset() + { + /* + * clean the buffer. + */ + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + + bufOff = 0; + + /* + * reset the underlying cipher. + */ + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java b/common/src/main/java/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java new file mode 100644 index 0000000..d7ad612 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/CFBBlockCipherMac.java @@ -0,0 +1,388 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.paddings.BlockCipherPadding; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. + */ +class MacCFBBlockCipher +{ + private byte[] IV; + private byte[] cfbV; + private byte[] cfbOutV; + + private int blockSize; + private BlockCipher cipher = null; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + * @param blockSize the block size in bits (note: a multiple of 8) + */ + public MacCFBBlockCipher( + BlockCipher cipher, + int bitBlockSize) + { + this.cipher = cipher; + this.blockSize = bitBlockSize / 8; + + this.IV = new byte[cipher.getBlockSize()]; + this.cfbV = new byte[cipher.getBlockSize()]; + this.cfbOutV = new byte[cipher.getBlockSize()]; + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param param the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + CipherParameters params) + throws IllegalArgumentException + { + if (params instanceof ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)params; + byte[] iv = ivParam.getIV(); + + if (iv.length < IV.length) + { + System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); + } + else + { + System.arraycopy(iv, 0, IV, 0, IV.length); + } + + reset(); + + cipher.init(true, ivParam.getParameters()); + } + else + { + reset(); + + cipher.init(true, params); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/CFB" + * and the block size in bits. + */ + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/CFB" + (blockSize * 8); + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int getBlockSize() + { + return blockSize; + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + cipher.processBlock(cfbV, 0, cfbOutV, 0); + + // + // XOR the cfbV with the plaintext producing the cipher text + // + for (int i = 0; i < blockSize; i++) + { + out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]); + } + + // + // change over the input block. + // + System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length - blockSize); + System.arraycopy(out, outOff, cfbV, cfbV.length - blockSize, blockSize); + + return blockSize; + } + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void reset() + { + System.arraycopy(IV, 0, cfbV, 0, IV.length); + + cipher.reset(); + } + + void getMacBlock( + byte[] mac) + { + cipher.processBlock(cfbV, 0, mac, 0); + } +} + +public class CFBBlockCipherMac + implements Mac +{ + private byte[] mac; + + private byte[] buf; + private int bufOff; + private MacCFBBlockCipher cipher; + private BlockCipherPadding padding = null; + + + private int macSize; + + /** + * create a standard MAC based on a CFB block cipher. This will produce an + * authentication code half the length of the block size of the cipher, with + * the CFB mode set to 8 bits. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + */ + public CFBBlockCipherMac( + BlockCipher cipher) + { + this(cipher, 8, (cipher.getBlockSize() * 8) / 2, null); + } + + /** + * create a standard MAC based on a CFB block cipher. This will produce an + * authentication code half the length of the block size of the cipher, with + * the CFB mode set to 8 bits. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param padding the padding to be used. + */ + public CFBBlockCipherMac( + BlockCipher cipher, + BlockCipherPadding padding) + { + this(cipher, 8, (cipher.getBlockSize() * 8) / 2, padding); + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CFB mode as the basis for the + * MAC generation. + *

        + * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param cfbBitSize the size of an output block produced by the CFB mode. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + */ + public CFBBlockCipherMac( + BlockCipher cipher, + int cfbBitSize, + int macSizeInBits) + { + this(cipher, cfbBitSize, macSizeInBits, null); + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses CFB mode as the basis for the + * MAC generation. + *

        + * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param cfbBitSize the size of an output block produced by the CFB mode. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + * @param padding a padding to be used. + */ + public CFBBlockCipherMac( + BlockCipher cipher, + int cfbBitSize, + int macSizeInBits, + BlockCipherPadding padding) + { + if ((macSizeInBits % 8) != 0) + { + throw new IllegalArgumentException("MAC size must be multiple of 8"); + } + + mac = new byte[cipher.getBlockSize()]; + + this.cipher = new MacCFBBlockCipher(cipher, cfbBitSize); + this.padding = padding; + this.macSize = macSizeInBits / 8; + + buf = new byte[this.cipher.getBlockSize()]; + bufOff = 0; + } + + public String getAlgorithmName() + { + return cipher.getAlgorithmName(); + } + + public void init( + CipherParameters params) + { + reset(); + + cipher.init(params); + } + + public int getMacSize() + { + return macSize; + } + + public void update( + byte in) + { + if (bufOff == buf.length) + { + cipher.processBlock(buf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = in; + } + + public void update( + byte[] in, + int inOff, + int len) + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = cipher.getBlockSize(); + int resultLen = 0; + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += cipher.processBlock(buf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + resultLen += cipher.processBlock(in, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + public int doFinal( + byte[] out, + int outOff) + { + int blockSize = cipher.getBlockSize(); + + // + // pad with zeroes + // + if (this.padding == null) + { + while (bufOff < blockSize) + { + buf[bufOff] = 0; + bufOff++; + } + } + else + { + padding.addPadding(buf, bufOff); + } + + cipher.processBlock(buf, 0, mac, 0); + + cipher.getMacBlock(mac); + + System.arraycopy(mac, 0, out, outOff, macSize); + + reset(); + + return macSize; + } + + /** + * Reset the mac generator. + */ + public void reset() + { + /* + * clean the buffer. + */ + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + + bufOff = 0; + + /* + * reset the underlying cipher. + */ + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/CMac.java b/common/src/main/java/org/bouncycastle/crypto/macs/CMac.java new file mode 100644 index 0000000..c5bc504 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/CMac.java @@ -0,0 +1,237 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.modes.CBCBlockCipher; +import org.bouncycastle.crypto.paddings.ISO7816d4Padding; + +/** + * CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html + *

        + * CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC + *

        + * CMAC is a NIST recomendation - see + * csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf + *

        + * CMAC/OMAC1 is a blockcipher-based message authentication code designed and + * analyzed by Tetsu Iwata and Kaoru Kurosawa. + *

        + * CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + * Authentication Code). OMAC stands for One-Key CBC MAC. + *

        + * It supports 128- or 64-bits block ciphers, with any key size, and returns + * a MAC with dimension less or equal to the block size of the underlying + * cipher. + *

        + */ +public class CMac implements Mac +{ + private static final byte CONSTANT_128 = (byte)0x87; + private static final byte CONSTANT_64 = (byte)0x1b; + + private byte[] ZEROES; + + private byte[] mac; + + private byte[] buf; + private int bufOff; + private BlockCipher cipher; + + private int macSize; + + private byte[] L, Lu, Lu2; + + /** + * create a standard MAC based on a CBC block cipher (64 or 128 bit block). + * This will produce an authentication code the length of the block size + * of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + */ + public CMac(BlockCipher cipher) + { + this(cipher, cipher.getBlockSize() * 8); + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. + *

        + * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8 and <= 128. + */ + public CMac(BlockCipher cipher, int macSizeInBits) + { + if ((macSizeInBits % 8) != 0) + { + throw new IllegalArgumentException("MAC size must be multiple of 8"); + } + + if (macSizeInBits > (cipher.getBlockSize() * 8)) + { + throw new IllegalArgumentException( + "MAC size must be less or equal to " + + (cipher.getBlockSize() * 8)); + } + + if (cipher.getBlockSize() != 8 && cipher.getBlockSize() != 16) + { + throw new IllegalArgumentException( + "Block size must be either 64 or 128 bits"); + } + + this.cipher = new CBCBlockCipher(cipher); + this.macSize = macSizeInBits / 8; + + mac = new byte[cipher.getBlockSize()]; + + buf = new byte[cipher.getBlockSize()]; + + ZEROES = new byte[cipher.getBlockSize()]; + + bufOff = 0; + } + + public String getAlgorithmName() + { + return cipher.getAlgorithmName(); + } + + private byte[] doubleLu(byte[] in) + { + int FirstBit = (in[0] & 0xFF) >> 7; + byte[] ret = new byte[in.length]; + for (int i = 0; i < in.length - 1; i++) + { + ret[i] = (byte)((in[i] << 1) + ((in[i + 1] & 0xFF) >> 7)); + } + ret[in.length - 1] = (byte)(in[in.length - 1] << 1); + if (FirstBit == 1) + { + ret[in.length - 1] ^= in.length == 16 ? CONSTANT_128 : CONSTANT_64; + } + return ret; + } + + public void init(CipherParameters params) + { + reset(); + + cipher.init(true, params); + + //initializes the L, Lu, Lu2 numbers + L = new byte[ZEROES.length]; + cipher.processBlock(ZEROES, 0, L, 0); + Lu = doubleLu(L); + Lu2 = doubleLu(Lu); + + cipher.init(true, params); + } + + public int getMacSize() + { + return macSize; + } + + public void update(byte in) + { + if (bufOff == buf.length) + { + cipher.processBlock(buf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = in; + } + + public void update(byte[] in, int inOff, int len) + { + if (len < 0) + { + throw new IllegalArgumentException( + "Can't have a negative input length!"); + } + + int blockSize = cipher.getBlockSize(); + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + cipher.processBlock(buf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + cipher.processBlock(in, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + public int doFinal(byte[] out, int outOff) + { + int blockSize = cipher.getBlockSize(); + + byte[] lu; + if (bufOff == blockSize) + { + lu = Lu; + } + else + { + new ISO7816d4Padding().addPadding(buf, bufOff); + lu = Lu2; + } + + for (int i = 0; i < mac.length; i++) + { + buf[i] ^= lu[i]; + } + + cipher.processBlock(buf, 0, mac, 0); + + System.arraycopy(mac, 0, out, outOff, macSize); + + reset(); + + return macSize; + } + + /** + * Reset the mac generator. + */ + public void reset() + { + /* + * clean the buffer. + */ + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + + bufOff = 0; + + /* + * reset the underlying cipher. + */ + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/GOST28147Mac.java b/common/src/main/java/org/bouncycastle/crypto/macs/GOST28147Mac.java new file mode 100644 index 0000000..b71975b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/GOST28147Mac.java @@ -0,0 +1,298 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithSBox; + +/** + * implementation of GOST 28147-89 MAC + */ +public class GOST28147Mac + implements Mac +{ + private int blockSize = 8; + private int macSize = 4; + private int bufOff; + private byte[] buf; + private byte[] mac; + private boolean firstStep = true; + private int[] workingKey = null; + + // + // This is default S-box - E_A. + private byte S[] = { + 0x9,0x6,0x3,0x2,0x8,0xB,0x1,0x7,0xA,0x4,0xE,0xF,0xC,0x0,0xD,0x5, + 0x3,0x7,0xE,0x9,0x8,0xA,0xF,0x0,0x5,0x2,0x6,0xC,0xB,0x4,0xD,0x1, + 0xE,0x4,0x6,0x2,0xB,0x3,0xD,0x8,0xC,0xF,0x5,0xA,0x0,0x7,0x1,0x9, + 0xE,0x7,0xA,0xC,0xD,0x1,0x3,0x9,0x0,0x2,0xB,0x4,0xF,0x8,0x5,0x6, + 0xB,0x5,0x1,0x9,0x8,0xD,0xF,0x0,0xE,0x4,0x2,0x3,0xC,0x7,0xA,0x6, + 0x3,0xA,0xD,0xC,0x1,0x2,0x0,0xB,0x7,0x5,0x9,0x4,0x8,0xF,0xE,0x6, + 0x1,0xD,0x2,0x9,0x7,0xA,0x6,0x0,0x8,0xC,0x4,0x5,0xF,0x3,0xB,0xE, + 0xB,0xA,0xF,0x5,0x0,0xC,0xE,0x8,0x6,0x2,0x3,0x9,0x1,0x7,0xD,0x4 + }; + + public GOST28147Mac() + { + mac = new byte[blockSize]; + + buf = new byte[blockSize]; + bufOff = 0; + } + + private int[] generateWorkingKey( + byte[] userKey) + { + if (userKey.length != 32) + { + throw new IllegalArgumentException("Key length invalid. Key needs to be 32 byte - 256 bit!!!"); + } + + int key[] = new int[8]; + for(int i=0; i!=8; i++) + { + key[i] = bytesToint(userKey,i*4); + } + + return key; + } + + public void init( + CipherParameters params) + throws IllegalArgumentException + { + reset(); + buf = new byte[blockSize]; + if (params instanceof ParametersWithSBox) + { + ParametersWithSBox param = (ParametersWithSBox)params; + + // + // Set the S-Box + // + System.arraycopy(param.getSBox(), 0, this.S, 0, param.getSBox().length); + + // + // set key if there is one + // + if (param.getParameters() != null) + { + workingKey = generateWorkingKey(((KeyParameter)param.getParameters()).getKey()); + } + } + else if (params instanceof KeyParameter) + { + workingKey = generateWorkingKey(((KeyParameter)params).getKey()); + } + else + { + throw new IllegalArgumentException("invalid parameter passed to GOST28147 init - " + params.getClass().getName()); + } + } + + public String getAlgorithmName() + { + return "GOST28147Mac"; + } + + public int getMacSize() + { + return macSize; + } + + private int gost28147_mainStep(int n1, int key) + { + int cm = (key + n1); // CM1 + + // S-box replacing + + int om = S[ 0 + ((cm >> (0 * 4)) & 0xF)] << (0 * 4); + om += S[ 16 + ((cm >> (1 * 4)) & 0xF)] << (1 * 4); + om += S[ 32 + ((cm >> (2 * 4)) & 0xF)] << (2 * 4); + om += S[ 48 + ((cm >> (3 * 4)) & 0xF)] << (3 * 4); + om += S[ 64 + ((cm >> (4 * 4)) & 0xF)] << (4 * 4); + om += S[ 80 + ((cm >> (5 * 4)) & 0xF)] << (5 * 4); + om += S[ 96 + ((cm >> (6 * 4)) & 0xF)] << (6 * 4); + om += S[112 + ((cm >> (7 * 4)) & 0xF)] << (7 * 4); + + return om << 11 | om >>> (32-11); // 11-leftshift + } + + private void gost28147MacFunc( + int[] workingKey, + byte[] in, + int inOff, + byte[] out, + int outOff) + { + int N1, N2, tmp; //tmp -> for saving N1 + N1 = bytesToint(in, inOff); + N2 = bytesToint(in, inOff + 4); + + for(int k = 0; k < 2; k++) // 1-16 steps + { + for(int j = 0; j < 8; j++) + { + tmp = N1; + N1 = N2 ^ gost28147_mainStep(N1, workingKey[j]); // CM2 + N2 = tmp; + } + } + + intTobytes(N1, out, outOff); + intTobytes(N2, out, outOff + 4); + } + + //array of bytes to type int + private int bytesToint( + byte[] in, + int inOff) + { + return ((in[inOff + 3] << 24) & 0xff000000) + ((in[inOff + 2] << 16) & 0xff0000) + + ((in[inOff + 1] << 8) & 0xff00) + (in[inOff] & 0xff); + } + + //int to array of bytes + private void intTobytes( + int num, + byte[] out, + int outOff) + { + out[outOff + 3] = (byte)(num >>> 24); + out[outOff + 2] = (byte)(num >>> 16); + out[outOff + 1] = (byte)(num >>> 8); + out[outOff] = (byte)num; + } + + private byte[] CM5func(byte[] buf, int bufOff, byte[] mac) + { + byte[] sum = new byte[buf.length - bufOff]; + + System.arraycopy(buf, bufOff, sum, 0, mac.length); + + for (int i = 0; i != mac.length; i++) + { + sum[i] = (byte)(sum[i] ^ mac[i]); + } + + return sum; + } + + public void update(byte in) + throws IllegalStateException + { + if (bufOff == buf.length) + { + byte[] sumbuf = new byte[buf.length]; + System.arraycopy(buf, 0, sumbuf, 0, mac.length); + + if (firstStep) + { + firstStep = false; + } + else + { + sumbuf = CM5func(buf, 0, mac); + } + + gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = in; + } + + public void update(byte[] in, int inOff, int len) + throws DataLengthException, IllegalStateException + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + byte[] sumbuf = new byte[buf.length]; + System.arraycopy(buf, 0, sumbuf, 0, mac.length); + + if (firstStep) + { + firstStep = false; + } + else + { + sumbuf = CM5func(buf, 0, mac); + } + + gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + sumbuf = CM5func(in, inOff, mac); + gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + public int doFinal(byte[] out, int outOff) + throws DataLengthException, IllegalStateException + { + //padding with zero + while (bufOff < blockSize) + { + buf[bufOff] = 0; + bufOff++; + } + + byte[] sumbuf = new byte[buf.length]; + System.arraycopy(buf, 0, sumbuf, 0, mac.length); + + if (firstStep) + { + firstStep = false; + } + else + { + sumbuf = CM5func(buf, 0, mac); + } + + gost28147MacFunc(workingKey, sumbuf, 0, mac, 0); + + System.arraycopy(mac, (mac.length/2)-macSize, out, outOff, macSize); + + reset(); + + return macSize; + } + + public void reset() + { + /* + * clean the buffer. + */ + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + + bufOff = 0; + + firstStep = true; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/HMac.java b/common/src/main/java/org/bouncycastle/crypto/macs/HMac.java new file mode 100644 index 0000000..0bd4d39 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/HMac.java @@ -0,0 +1,199 @@ +package org.bouncycastle.crypto.macs; + +import java.util.Hashtable; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.ExtendedDigest; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * HMAC implementation based on RFC2104 + * + * H(K XOR opad, H(K XOR ipad, text)) + */ +public class HMac + implements Mac +{ + private final static byte IPAD = (byte)0x36; + private final static byte OPAD = (byte)0x5C; + + private Digest digest; + private int digestSize; + private int blockLength; + + private byte[] inputPad; + private byte[] outputPad; + + private static Hashtable blockLengths; + + static + { + blockLengths = new Hashtable(); + + blockLengths.put("GOST3411", new Integer(32)); + + blockLengths.put("MD2", new Integer(16)); + blockLengths.put("MD4", new Integer(64)); + blockLengths.put("MD5", new Integer(64)); + + blockLengths.put("RIPEMD128", new Integer(64)); + blockLengths.put("RIPEMD160", new Integer(64)); + + blockLengths.put("SHA-1", new Integer(64)); + blockLengths.put("SHA-224", new Integer(64)); + blockLengths.put("SHA-256", new Integer(64)); + blockLengths.put("SHA-384", new Integer(128)); + blockLengths.put("SHA-512", new Integer(128)); + + blockLengths.put("Tiger", new Integer(64)); + blockLengths.put("Whirlpool", new Integer(64)); + } + + private static int getByteLength( + Digest digest) + { + if (digest instanceof ExtendedDigest) + { + return ((ExtendedDigest)digest).getByteLength(); + } + + Integer b = (Integer)blockLengths.get(digest.getAlgorithmName()); + + if (b == null) + { + throw new IllegalArgumentException("unknown digest passed: " + digest.getAlgorithmName()); + } + + return b.intValue(); + } + + /** + * Base constructor for one of the standard digest algorithms that the + * byteLength of the algorithm is know for. + * + * @param digest the digest. + */ + public HMac( + Digest digest) + { + this(digest, getByteLength(digest)); + } + + private HMac( + Digest digest, + int byteLength) + { + this.digest = digest; + digestSize = digest.getDigestSize(); + + this.blockLength = byteLength; + + inputPad = new byte[blockLength]; + outputPad = new byte[blockLength]; + } + + public String getAlgorithmName() + { + return digest.getAlgorithmName() + "/HMAC"; + } + + public Digest getUnderlyingDigest() + { + return digest; + } + + public void init( + CipherParameters params) + { + digest.reset(); + + byte[] key = ((KeyParameter)params).getKey(); + + if (key.length > blockLength) + { + digest.update(key, 0, key.length); + digest.doFinal(inputPad, 0); + for (int i = digestSize; i < inputPad.length; i++) + { + inputPad[i] = 0; + } + } + else + { + System.arraycopy(key, 0, inputPad, 0, key.length); + for (int i = key.length; i < inputPad.length; i++) + { + inputPad[i] = 0; + } + } + + outputPad = new byte[inputPad.length]; + System.arraycopy(inputPad, 0, outputPad, 0, inputPad.length); + + for (int i = 0; i < inputPad.length; i++) + { + inputPad[i] ^= IPAD; + } + + for (int i = 0; i < outputPad.length; i++) + { + outputPad[i] ^= OPAD; + } + + digest.update(inputPad, 0, inputPad.length); + } + + public int getMacSize() + { + return digestSize; + } + + public void update( + byte in) + { + digest.update(in); + } + + public void update( + byte[] in, + int inOff, + int len) + { + digest.update(in, inOff, len); + } + + public int doFinal( + byte[] out, + int outOff) + { + byte[] tmp = new byte[digestSize]; + digest.doFinal(tmp, 0); + + digest.update(outputPad, 0, outputPad.length); + digest.update(tmp, 0, tmp.length); + + int len = digest.doFinal(out, outOff); + + reset(); + + return len; + } + + /** + * Reset the mac generator. + */ + public void reset() + { + /* + * reset the underlying digest. + */ + digest.reset(); + + /* + * reinitialize the digest. + */ + digest.update(inputPad, 0, inputPad.length); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java b/common/src/main/java/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java new file mode 100644 index 0000000..330b39e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java @@ -0,0 +1,305 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.engines.DESEngine; +import org.bouncycastle.crypto.modes.CBCBlockCipher; +import org.bouncycastle.crypto.paddings.BlockCipherPadding; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * DES based CBC Block Cipher MAC according to ISO9797, algorithm 3 (ANSI X9.19 Retail MAC) + * + * This could as well be derived from CBCBlockCipherMac, but then the property mac in the base + * class must be changed to protected + */ + +public class ISO9797Alg3Mac + implements Mac +{ + private byte[] mac; + + private byte[] buf; + private int bufOff; + private BlockCipher cipher; + private BlockCipherPadding padding; + + private int macSize; + private KeyParameter lastKey2; + private KeyParameter lastKey3; + + /** + * create a Retail-MAC based on a CBC block cipher. This will produce an + * authentication code of the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. This must + * be DESEngine. + */ + public ISO9797Alg3Mac( + BlockCipher cipher) + { + this(cipher, cipher.getBlockSize() * 8, null); + } + + /** + * create a Retail-MAC based on a CBC block cipher. This will produce an + * authentication code of the length of the block size of the cipher. + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param padding the padding to be used to complete the last block. + */ + public ISO9797Alg3Mac( + BlockCipher cipher, + BlockCipherPadding padding) + { + this(cipher, cipher.getBlockSize() * 8, padding); + } + + /** + * create a Retail-MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses single DES CBC mode as the basis for the + * MAC generation. + *

        + * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + */ + public ISO9797Alg3Mac( + BlockCipher cipher, + int macSizeInBits) + { + this(cipher, macSizeInBits, null); + } + + /** + * create a standard MAC based on a block cipher with the size of the + * MAC been given in bits. This class uses single DES CBC mode as the basis for the + * MAC generation. The final block is decrypted and then encrypted using the + * middle and right part of the key. + *

        + * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81), + * or 16 bits if being used as a data authenticator (FIPS Publication 113), + * and in general should be less than the size of the block cipher as it reduces + * the chance of an exhaustive attack (see Handbook of Applied Cryptography). + * + * @param cipher the cipher to be used as the basis of the MAC generation. + * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8. + * @param padding the padding to be used to complete the last block. + */ + public ISO9797Alg3Mac( + BlockCipher cipher, + int macSizeInBits, + BlockCipherPadding padding) + { + if ((macSizeInBits % 8) != 0) + { + throw new IllegalArgumentException("MAC size must be multiple of 8"); + } + + if (!(cipher instanceof DESEngine)) + { + throw new IllegalArgumentException("cipher must be instance of DESEngine"); + } + + this.cipher = new CBCBlockCipher(cipher); + this.padding = padding; + this.macSize = macSizeInBits / 8; + + mac = new byte[cipher.getBlockSize()]; + + buf = new byte[cipher.getBlockSize()]; + bufOff = 0; + } + + public String getAlgorithmName() + { + return "ISO9797Alg3"; + } + + public void init(CipherParameters params) + { + reset(); + + if (!(params instanceof KeyParameter || params instanceof ParametersWithIV)) + { + throw new IllegalArgumentException( + "params must be an instance of KeyParameter or ParametersWithIV"); + } + + // KeyParameter must contain a double or triple length DES key, + // however the underlying cipher is a single DES. The middle and + // right key are used only in the final step. + + KeyParameter kp; + + if (params instanceof KeyParameter) + { + kp = (KeyParameter)params; + } + else + { + kp = (KeyParameter)((ParametersWithIV)params).getParameters(); + } + + KeyParameter key1; + byte[] keyvalue = kp.getKey(); + + if (keyvalue.length == 16) + { // Double length DES key + key1 = new KeyParameter(keyvalue, 0, 8); + this.lastKey2 = new KeyParameter(keyvalue, 8, 8); + this.lastKey3 = key1; + } + else if (keyvalue.length == 24) + { // Triple length DES key + key1 = new KeyParameter(keyvalue, 0, 8); + this.lastKey2 = new KeyParameter(keyvalue, 8, 8); + this.lastKey3 = new KeyParameter(keyvalue, 16, 8); + } + else + { + throw new IllegalArgumentException( + "Key must be either 112 or 168 bit long"); + } + + if (params instanceof ParametersWithIV) + { + cipher.init(true, new ParametersWithIV(key1, ((ParametersWithIV)params).getIV())); + } + else + { + cipher.init(true, key1); + } + } + + public int getMacSize() + { + return macSize; + } + + public void update( + byte in) + { + if (bufOff == buf.length) + { + cipher.processBlock(buf, 0, mac, 0); + bufOff = 0; + } + + buf[bufOff++] = in; + } + + + public void update( + byte[] in, + int inOff, + int len) + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = cipher.getBlockSize(); + int resultLen = 0; + int gapLen = blockSize - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += cipher.processBlock(buf, 0, mac, 0); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + resultLen += cipher.processBlock(in, inOff, mac, 0); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + public int doFinal( + byte[] out, + int outOff) + { + int blockSize = cipher.getBlockSize(); + + if (padding == null) + { + // + // pad with zeroes + // + while (bufOff < blockSize) + { + buf[bufOff] = 0; + bufOff++; + } + } + else + { + if (bufOff == blockSize) + { + cipher.processBlock(buf, 0, mac, 0); + bufOff = 0; + } + + padding.addPadding(buf, bufOff); + } + + cipher.processBlock(buf, 0, mac, 0); + + // Added to code from base class + DESEngine deseng = new DESEngine(); + + deseng.init(false, this.lastKey2); + deseng.processBlock(mac, 0, mac, 0); + + deseng.init(true, this.lastKey3); + deseng.processBlock(mac, 0, mac, 0); + // **** + + System.arraycopy(mac, 0, out, outOff, macSize); + + reset(); + + return macSize; + } + + + /** + * Reset the mac generator. + */ + public void reset() + { + /* + * clean the buffer. + */ + for (int i = 0; i < buf.length; i++) + { + buf[i] = 0; + } + + bufOff = 0; + + /* + * reset the underlying cipher. + */ + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/OldHMac.java b/common/src/main/java/org/bouncycastle/crypto/macs/OldHMac.java new file mode 100644 index 0000000..7463afd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/OldHMac.java @@ -0,0 +1,138 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.params.KeyParameter; + +/** + * HMAC implementation based on RFC2104 + * + * H(K XOR opad, H(K XOR ipad, text)) + */ +public class OldHMac +implements Mac +{ + private final static int BLOCK_LENGTH = 64; + + private final static byte IPAD = (byte)0x36; + private final static byte OPAD = (byte)0x5C; + + private Digest digest; + private int digestSize; + private byte[] inputPad = new byte[BLOCK_LENGTH]; + private byte[] outputPad = new byte[BLOCK_LENGTH]; + + /** + * @deprecated uses incorrect pad for SHA-512 and SHA-384 use HMac. + */ + public OldHMac( + Digest digest) + { + this.digest = digest; + digestSize = digest.getDigestSize(); + } + + public String getAlgorithmName() + { + return digest.getAlgorithmName() + "/HMAC"; + } + + public Digest getUnderlyingDigest() + { + return digest; + } + + public void init( + CipherParameters params) + { + digest.reset(); + + byte[] key = ((KeyParameter)params).getKey(); + + if (key.length > BLOCK_LENGTH) + { + digest.update(key, 0, key.length); + digest.doFinal(inputPad, 0); + for (int i = digestSize; i < inputPad.length; i++) + { + inputPad[i] = 0; + } + } + else + { + System.arraycopy(key, 0, inputPad, 0, key.length); + for (int i = key.length; i < inputPad.length; i++) + { + inputPad[i] = 0; + } + } + + outputPad = new byte[inputPad.length]; + System.arraycopy(inputPad, 0, outputPad, 0, inputPad.length); + + for (int i = 0; i < inputPad.length; i++) + { + inputPad[i] ^= IPAD; + } + + for (int i = 0; i < outputPad.length; i++) + { + outputPad[i] ^= OPAD; + } + + digest.update(inputPad, 0, inputPad.length); + } + + public int getMacSize() + { + return digestSize; + } + + public void update( + byte in) + { + digest.update(in); + } + + public void update( + byte[] in, + int inOff, + int len) + { + digest.update(in, inOff, len); + } + + public int doFinal( + byte[] out, + int outOff) + { + byte[] tmp = new byte[digestSize]; + digest.doFinal(tmp, 0); + + digest.update(outputPad, 0, outputPad.length); + digest.update(tmp, 0, tmp.length); + + int len = digest.doFinal(out, outOff); + + reset(); + + return len; + } + + /** + * Reset the mac generator. + */ + public void reset() + { + /* + * reset the underlying digest. + */ + digest.reset(); + + /* + * reinitialize the digest. + */ + digest.update(inputPad, 0, inputPad.length); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/macs/VMPCMac.java b/common/src/main/java/org/bouncycastle/crypto/macs/VMPCMac.java new file mode 100644 index 0000000..58d06d0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/macs/VMPCMac.java @@ -0,0 +1,186 @@ +package org.bouncycastle.crypto.macs; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; + +public class VMPCMac implements Mac +{ + private byte g; + + private byte n = 0; + private byte[] P = null; + private byte s = 0; + + private byte[] T; + private byte[] workingIV; + + private byte[] workingKey; + + private byte x1, x2, x3, x4; + + public int doFinal(byte[] out, int outOff) + throws DataLengthException, IllegalStateException + { + // Execute the Post-Processing Phase + for (int r = 1; r < 25; r++) + { + s = P[(s + P[n & 0xff]) & 0xff]; + + x4 = P[(x4 + x3 + r) & 0xff]; + x3 = P[(x3 + x2 + r) & 0xff]; + x2 = P[(x2 + x1 + r) & 0xff]; + x1 = P[(x1 + s + r) & 0xff]; + T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1); + T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2); + T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3); + T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4); + g = (byte) ((g + 4) & 0x1f); + + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte) ((n + 1) & 0xff); + } + + // Input T to the IV-phase of the VMPC KSA + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + T[m & 0x1f]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + // Store 20 new outputs of the VMPC Stream Cipher in table M + byte[] M = new byte[20]; + for (int i = 0; i < 20; i++) + { + s = P[(s + P[i & 0xff]) & 0xff]; + M[i] = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]; + + byte temp = P[i & 0xff]; + P[i & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + System.arraycopy(M, 0, out, outOff, M.length); + reset(); + + return M.length; + } + + public String getAlgorithmName() + { + return "VMPC-MAC"; + } + + public int getMacSize() + { + return 20; + } + + public void init(CipherParameters params) throws IllegalArgumentException + { + if (!(params instanceof ParametersWithIV)) + { + throw new IllegalArgumentException( + "VMPC-MAC Init parameters must include an IV"); + } + + ParametersWithIV ivParams = (ParametersWithIV) params; + KeyParameter key = (KeyParameter) ivParams.getParameters(); + + if (!(ivParams.getParameters() instanceof KeyParameter)) + { + throw new IllegalArgumentException( + "VMPC-MAC Init parameters must include a key"); + } + + this.workingIV = ivParams.getIV(); + + if (workingIV == null || workingIV.length < 1 || workingIV.length > 768) + { + throw new IllegalArgumentException( + "VMPC-MAC requires 1 to 768 bytes of IV"); + } + + this.workingKey = key.getKey(); + + reset(); + + } + + private void initKey(byte[] keyBytes, byte[] ivBytes) + { + s = 0; + P = new byte[256]; + for (int i = 0; i < 256; i++) + { + P[i] = (byte) i; + } + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + for (int m = 0; m < 768; m++) + { + s = P[(s + P[m & 0xff] + ivBytes[m % ivBytes.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + n = 0; + } + + public void reset() + { + initKey(this.workingKey, this.workingIV); + g = x1 = x2 = x3 = x4 = n = 0; + T = new byte[32]; + for (int i = 0; i < 32; i++) + { + T[i] = 0; + } + } + + public void update(byte in) throws IllegalStateException + { + s = P[(s + P[n & 0xff]) & 0xff]; + byte c = (byte) (in ^ P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]); + + x4 = P[(x4 + x3) & 0xff]; + x3 = P[(x3 + x2) & 0xff]; + x2 = P[(x2 + x1) & 0xff]; + x1 = P[(x1 + s + c) & 0xff]; + T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1); + T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2); + T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3); + T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4); + g = (byte) ((g + 4) & 0x1f); + + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte) ((n + 1) & 0xff); + } + + public void update(byte[] in, int inOff, int len) + throws DataLengthException, IllegalStateException + { + if ((inOff + len) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + for (int i = 0; i < len; i++) + { + update(in[i]); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/AEADBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/AEADBlockCipher.java new file mode 100644 index 0000000..3c3bf34 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/AEADBlockCipher.java @@ -0,0 +1,108 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A block cipher mode that includes authenticated encryption with a streaming mode and optional associated data. + * @see org.bouncycastle.crypto.params.AEADParameters + */ +public interface AEADBlockCipher +{ + /** + * initialise the underlying cipher. Parameter can either be an AEADParameters or a ParametersWithIV object. + * + * @param forEncryption true if we are setting up for encryption, false otherwise. + * @param params the necessary parameters for the underlying cipher to be initialised. + * @exception IllegalArgumentException if the params argument is inappropriate. + */ + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException; + + /** + * Return the name of the algorithm. + * + * @return the algorithm name. + */ + public String getAlgorithmName(); + + /** + * return the cipher this object wraps. + * + * @return the cipher this object wraps. + */ + public BlockCipher getUnderlyingCipher(); + + /** + * encrypt/decrypt a single byte. + * + * @param in the byte to be processed. + * @param out the output buffer the processed byte goes into. + * @param outOff the offset into the output byte array the processed data starts at. + * @return the number of bytes written to out. + * @exception DataLengthException if the output buffer is too small. + */ + public int processByte(byte in, byte[] out, int outOff) + throws DataLengthException; + + /** + * process a block of bytes from in putting the result into out. + * + * @param in the input byte array. + * @param inOff the offset into the in array where the data to be processed starts. + * @param len the number of bytes to be processed. + * @param out the output buffer the processed bytes go into. + * @param outOff the offset into the output byte array the processed data starts at. + * @return the number of bytes written to out. + * @exception DataLengthException if the output buffer is too small. + */ + public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) + throws DataLengthException; + + /** + * Finish the operation either appending or verifying the MAC at the end of the data. + * + * @param out space for any resulting output data. + * @param outOff offset into out to start copying the data at. + * @return number of bytes written into out. + * @throws IllegalStateException if the cipher is in an inappropriate state. + * @throws org.bouncycastle.crypto.InvalidCipherTextException if the MAC fails to match. + */ + public int doFinal(byte[] out, int outOff) + throws IllegalStateException, InvalidCipherTextException; + + /** + * Return the value of the MAC associated with the last stream processed. + * + * @return MAC for plaintext data. + */ + public byte[] getMac(); + + /** + * return the size of the output buffer required for a processBytes + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to processBytes + * with len bytes of input. + */ + public int getUpdateOutputSize(int len); + + /** + * return the size of the output buffer required for a processBytes plus a + * doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to processBytes and doFinal + * with len bytes of input. + */ + public int getOutputSize(int len); + + /** + * Reset the cipher. After resetting the cipher is in the same state + * as it was after the last init (if there was one). + */ + public void reset(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/CBCBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/CBCBlockCipher.java new file mode 100644 index 0000000..1219f6d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/CBCBlockCipher.java @@ -0,0 +1,253 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.util.Arrays; + +/** + * implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + */ +public class CBCBlockCipher + implements BlockCipher +{ + private byte[] IV; + private byte[] cbcV; + private byte[] cbcNextV; + + private int blockSize; + private BlockCipher cipher = null; + private boolean encrypting; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of chaining. + */ + public CBCBlockCipher( + BlockCipher cipher) + { + this.cipher = cipher; + this.blockSize = cipher.getBlockSize(); + + this.IV = new byte[blockSize]; + this.cbcV = new byte[blockSize]; + this.cbcNextV = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * + * @param encrypting if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean encrypting, + CipherParameters params) + throws IllegalArgumentException + { + boolean oldEncrypting = this.encrypting; + + this.encrypting = encrypting; + + if (params instanceof ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)params; + byte[] iv = ivParam.getIV(); + + if (iv.length != blockSize) + { + throw new IllegalArgumentException("initialisation vector must be the same length as block size"); + } + + System.arraycopy(iv, 0, IV, 0, iv.length); + + reset(); + + // if null it's an IV changed only. + if (ivParam.getParameters() != null) + { + cipher.init(encrypting, ivParam.getParameters()); + } + else if (oldEncrypting != encrypting) + { + throw new IllegalArgumentException("cannot change encrypting state without providing key."); + } + } + else + { + reset(); + + // if it;s null key is to be reused. + if (params != null) + { + cipher.init(encrypting, params); + } + else if (oldEncrypting != encrypting) + { + throw new IllegalArgumentException("cannot change encrypting state without providing key."); + } + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/CBC". + */ + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/CBC"; + } + + /** + * return the block size of the underlying cipher. + * + * @return the block size of the underlying cipher. + */ + public int getBlockSize() + { + return cipher.getBlockSize(); + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + return (encrypting) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); + } + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void reset() + { + System.arraycopy(IV, 0, cbcV, 0, IV.length); + Arrays.fill(cbcNextV, (byte)0); + + cipher.reset(); + } + + /** + * Do the appropriate chaining step for CBC mode encryption. + * + * @param in the array containing the data to be encrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int encryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + /* + * XOR the cbcV and the input, + * then encrypt the cbcV + */ + for (int i = 0; i < blockSize; i++) + { + cbcV[i] ^= in[inOff + i]; + } + + int length = cipher.processBlock(cbcV, 0, out, outOff); + + /* + * copy ciphertext to cbcV + */ + System.arraycopy(out, outOff, cbcV, 0, cbcV.length); + + return length; + } + + /** + * Do the appropriate chaining step for CBC mode decryption. + * + * @param in the array containing the data to be decrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the decrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int decryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + System.arraycopy(in, inOff, cbcNextV, 0, blockSize); + + int length = cipher.processBlock(in, inOff, out, outOff); + + /* + * XOR the cbcV and the output + */ + for (int i = 0; i < blockSize; i++) + { + out[outOff + i] ^= cbcV[i]; + } + + /* + * swap the back up buffer into next position + */ + byte[] tmp; + + tmp = cbcV; + cbcV = cbcNextV; + cbcNextV = tmp; + + return length; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/CCMBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/CCMBlockCipher.java new file mode 100644 index 0000000..bedc3d1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/CCMBlockCipher.java @@ -0,0 +1,338 @@ +package org.bouncycastle.crypto.modes; + +import java.io.ByteArrayOutputStream; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.macs.CBCBlockCipherMac; +import org.bouncycastle.crypto.params.AEADParameters; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.util.Arrays; + +/** + * Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + * NIST Special Publication 800-38C. + *

        + * Note: this mode is a packet mode - it needs all the data up front. + */ +public class CCMBlockCipher + implements AEADBlockCipher +{ + private BlockCipher cipher; + private int blockSize; + private boolean forEncryption; + private byte[] nonce; + private byte[] associatedText; + private int macSize; + private CipherParameters keyParam; + private byte[] macBlock; + private ByteArrayOutputStream data = new ByteArrayOutputStream(); + + /** + * Basic constructor. + * + * @param c the block cipher to be used. + */ + public CCMBlockCipher(BlockCipher c) + { + this.cipher = c; + this.blockSize = c.getBlockSize(); + this.macBlock = new byte[blockSize]; + + if (blockSize != 16) + { + throw new IllegalArgumentException("cipher required with a block size of 16."); + } + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException + { + this.forEncryption = forEncryption; + + if (params instanceof AEADParameters) + { + AEADParameters param = (AEADParameters)params; + + nonce = param.getNonce(); + associatedText = param.getAssociatedText(); + macSize = param.getMacSize() / 8; + keyParam = param.getKey(); + } + else if (params instanceof ParametersWithIV) + { + ParametersWithIV param = (ParametersWithIV)params; + + nonce = param.getIV(); + associatedText = null; + macSize = macBlock.length / 2; + keyParam = param.getParameters(); + } + else + { + throw new IllegalArgumentException("invalid parameters passed to CCM"); + } + } + + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/CCM"; + } + + public int processByte(byte in, byte[] out, int outOff) + throws DataLengthException, IllegalStateException + { + data.write(in); + + return 0; + } + + public int processBytes(byte[] in, int inOff, int inLen, byte[] out, int outOff) + throws DataLengthException, IllegalStateException + { + data.write(in, inOff, inLen); + + return 0; + } + + public int doFinal(byte[] out, int outOff) + throws IllegalStateException, InvalidCipherTextException + { + byte[] text = data.toByteArray(); + byte[] enc = processPacket(text, 0, text.length); + + System.arraycopy(enc, 0, out, outOff, enc.length); + + reset(); + + return enc.length; + } + + public void reset() + { + cipher.reset(); + data.reset(); + } + + /** + * Returns a byte array containing the mac calculated as part of the + * last encrypt or decrypt operation. + * + * @return the last mac calculated. + */ + public byte[] getMac() + { + byte[] mac = new byte[macSize]; + + System.arraycopy(macBlock, 0, mac, 0, mac.length); + + return mac; + } + + public int getUpdateOutputSize(int len) + { + return 0; + } + + public int getOutputSize(int len) + { + if (forEncryption) + { + return data.size() + len + macSize; + } + else + { + return data.size() + len - macSize; + } + } + + public byte[] processPacket(byte[] in, int inOff, int inLen) + throws IllegalStateException, InvalidCipherTextException + { + if (keyParam == null) + { + throw new IllegalStateException("CCM cipher unitialized."); + } + + BlockCipher ctrCipher = new SICBlockCipher(cipher); + byte[] iv = new byte[blockSize]; + byte[] out; + + iv[0] = (byte)(((15 - nonce.length) - 1) & 0x7); + + System.arraycopy(nonce, 0, iv, 1, nonce.length); + + ctrCipher.init(forEncryption, new ParametersWithIV(keyParam, iv)); + + if (forEncryption) + { + int index = inOff; + int outOff = 0; + + out = new byte[inLen + macSize]; + + calculateMac(in, inOff, inLen, macBlock); + + ctrCipher.processBlock(macBlock, 0, macBlock, 0); // S0 + + while (index < inLen - blockSize) // S1... + { + ctrCipher.processBlock(in, index, out, outOff); + outOff += blockSize; + index += blockSize; + } + + byte[] block = new byte[blockSize]; + + System.arraycopy(in, index, block, 0, inLen - index); + + ctrCipher.processBlock(block, 0, block, 0); + + System.arraycopy(block, 0, out, outOff, inLen - index); + + outOff += inLen - index; + + System.arraycopy(macBlock, 0, out, outOff, out.length - outOff); + } + else + { + int index = inOff; + int outOff = 0; + + out = new byte[inLen - macSize]; + + System.arraycopy(in, inOff + inLen - macSize, macBlock, 0, macSize); + + ctrCipher.processBlock(macBlock, 0, macBlock, 0); + + for (int i = macSize; i != macBlock.length; i++) + { + macBlock[i] = 0; + } + + while (outOff < out.length - blockSize) + { + ctrCipher.processBlock(in, index, out, outOff); + outOff += blockSize; + index += blockSize; + } + + byte[] block = new byte[blockSize]; + + System.arraycopy(in, index, block, 0, out.length - outOff); + + ctrCipher.processBlock(block, 0, block, 0); + + System.arraycopy(block, 0, out, outOff, out.length - outOff); + + byte[] calculatedMacBlock = new byte[blockSize]; + + calculateMac(out, 0, out.length, calculatedMacBlock); + + if (!Arrays.constantTimeAreEqual(macBlock, calculatedMacBlock)) + { + throw new InvalidCipherTextException("mac check in CCM failed"); + } + } + + return out; + } + + private int calculateMac(byte[] data, int dataOff, int dataLen, byte[] macBlock) + { + Mac cMac = new CBCBlockCipherMac(cipher, macSize * 8); + + cMac.init(keyParam); + + // + // build b0 + // + byte[] b0 = new byte[16]; + + if (hasAssociatedText()) + { + b0[0] |= 0x40; + } + + b0[0] |= (((cMac.getMacSize() - 2) / 2) & 0x7) << 3; + + b0[0] |= ((15 - nonce.length) - 1) & 0x7; + + System.arraycopy(nonce, 0, b0, 1, nonce.length); + + int q = dataLen; + int count = 1; + while (q > 0) + { + b0[b0.length - count] = (byte)(q & 0xff); + q >>>= 8; + count++; + } + + cMac.update(b0, 0, b0.length); + + // + // process associated text + // + if (hasAssociatedText()) + { + int extra; + + if (associatedText.length < ((1 << 16) - (1 << 8))) + { + cMac.update((byte)(associatedText.length >> 8)); + cMac.update((byte)associatedText.length); + + extra = 2; + } + else // can't go any higher than 2^32 + { + cMac.update((byte)0xff); + cMac.update((byte)0xfe); + cMac.update((byte)(associatedText.length >> 24)); + cMac.update((byte)(associatedText.length >> 16)); + cMac.update((byte)(associatedText.length >> 8)); + cMac.update((byte)associatedText.length); + + extra = 6; + } + + cMac.update(associatedText, 0, associatedText.length); + + extra = (extra + associatedText.length) % 16; + if (extra != 0) + { + for (int i = 0; i != 16 - extra; i++) + { + cMac.update((byte)0x00); + } + } + } + + // + // add the text + // + cMac.update(data, dataOff, dataLen); + + return cMac.doFinal(macBlock, 0); + } + + private boolean hasAssociatedText() + { + return associatedText != null && associatedText.length != 0; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/CFBBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/CFBBlockCipher.java new file mode 100644 index 0000000..0af49f4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/CFBBlockCipher.java @@ -0,0 +1,254 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * implements a Cipher-FeedBack (CFB) mode on top of a simple cipher. + */ +public class CFBBlockCipher + implements BlockCipher +{ + private byte[] IV; + private byte[] cfbV; + private byte[] cfbOutV; + + private int blockSize; + private BlockCipher cipher = null; + private boolean encrypting; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + * @param bitBlockSize the block size in bits (note: a multiple of 8) + */ + public CFBBlockCipher( + BlockCipher cipher, + int bitBlockSize) + { + this.cipher = cipher; + this.blockSize = bitBlockSize / 8; + + this.IV = new byte[cipher.getBlockSize()]; + this.cfbV = new byte[cipher.getBlockSize()]; + this.cfbOutV = new byte[cipher.getBlockSize()]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param encrypting if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean encrypting, + CipherParameters params) + throws IllegalArgumentException + { + this.encrypting = encrypting; + + if (params instanceof ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)params; + byte[] iv = ivParam.getIV(); + + if (iv.length < IV.length) + { + // prepend the supplied IV with zeros (per FIPS PUB 81) + System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); + for (int i = 0; i < IV.length - iv.length; i++) + { + IV[i] = 0; + } + } + else + { + System.arraycopy(iv, 0, IV, 0, IV.length); + } + + reset(); + + // if null it's an IV changed only. + if (ivParam.getParameters() != null) + { + cipher.init(true, ivParam.getParameters()); + } + } + else + { + reset(); + + cipher.init(true, params); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/CFB" + * and the block size in bits. + */ + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/CFB" + (blockSize * 8); + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int getBlockSize() + { + return blockSize; + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + return (encrypting) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); + } + + /** + * Do the appropriate processing for CFB mode encryption. + * + * @param in the array containing the data to be encrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int encryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + cipher.processBlock(cfbV, 0, cfbOutV, 0); + + // + // XOR the cfbV with the plaintext producing the ciphertext + // + for (int i = 0; i < blockSize; i++) + { + out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]); + } + + // + // change over the input block. + // + System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length - blockSize); + System.arraycopy(out, outOff, cfbV, cfbV.length - blockSize, blockSize); + + return blockSize; + } + + /** + * Do the appropriate processing for CFB mode decryption. + * + * @param in the array containing the data to be decrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int decryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + cipher.processBlock(cfbV, 0, cfbOutV, 0); + + // + // change over the input block. + // + System.arraycopy(cfbV, blockSize, cfbV, 0, cfbV.length - blockSize); + System.arraycopy(in, inOff, cfbV, cfbV.length - blockSize, blockSize); + + // + // XOR the cfbV with the ciphertext producing the plaintext + // + for (int i = 0; i < blockSize; i++) + { + out[outOff + i] = (byte)(cfbOutV[i] ^ in[inOff + i]); + } + + return blockSize; + } + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void reset() + { + System.arraycopy(IV, 0, cfbV, 0, IV.length); + + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/CTSBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/CTSBlockCipher.java new file mode 100644 index 0000000..b8e5b61 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/CTSBlockCipher.java @@ -0,0 +1,265 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.BufferedBlockCipher; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A Cipher Text Stealing (CTS) mode cipher. CTS allows block ciphers to + * be used to produce cipher text which is the same length as the plain text. + */ +public class CTSBlockCipher + extends BufferedBlockCipher +{ + private int blockSize; + + /** + * Create a buffered block cipher that uses Cipher Text Stealing + * + * @param cipher the underlying block cipher this buffering object wraps. + */ + public CTSBlockCipher( + BlockCipher cipher) + { + if ((cipher instanceof OFBBlockCipher) || (cipher instanceof CFBBlockCipher)) + { + throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers"); + } + + this.cipher = cipher; + + blockSize = cipher.getBlockSize(); + + buf = new byte[blockSize * 2]; + bufOff = 0; + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public int getUpdateOutputSize( + int len) + { + int total = len + bufOff; + int leftOver = total % buf.length; + + if (leftOver == 0) + { + return total - buf.length; + } + + return total - leftOver; + } + + /** + * return the size of the output buffer required for an update plus a + * doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with len bytes of input. + */ + public int getOutputSize( + int len) + { + return len + bufOff; + } + + /** + * process a single byte, producing an output block if neccessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processByte( + byte in, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + int resultLen = 0; + + if (bufOff == buf.length) + { + resultLen = cipher.processBlock(buf, 0, out, outOff); + System.arraycopy(buf, blockSize, buf, 0, blockSize); + + bufOff = blockSize; + } + + buf[bufOff++] = in; + + return resultLen; + } + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = getBlockSize(); + int length = getUpdateOutputSize(len); + + if (length > 0) + { + if ((outOff + length) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + } + + int resultLen = 0; + int gapLen = buf.length - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += cipher.processBlock(buf, 0, out, outOff); + System.arraycopy(buf, blockSize, buf, 0, blockSize); + + bufOff = blockSize; + + len -= gapLen; + inOff += gapLen; + + while (len > blockSize) + { + System.arraycopy(in, inOff, buf, bufOff, blockSize); + resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); + System.arraycopy(buf, blockSize, buf, 0, blockSize); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + + return resultLen; + } + + /** + * Process the last block in the buffer. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output. + * @exception IllegalStateException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if cipher text decrypts wrongly (in + * case the exception will never get thrown). + */ + public int doFinal( + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException, InvalidCipherTextException + { + if (bufOff + outOff > out.length) + { + throw new DataLengthException("output buffer to small in doFinal"); + } + + int blockSize = cipher.getBlockSize(); + int len = bufOff - blockSize; + byte[] block = new byte[blockSize]; + + if (forEncryption) + { + cipher.processBlock(buf, 0, block, 0); + + if (bufOff < blockSize) + { + throw new DataLengthException("need at least one block of input for CTS"); + } + + for (int i = bufOff; i != buf.length; i++) + { + buf[i] = block[i - blockSize]; + } + + for (int i = blockSize; i != bufOff; i++) + { + buf[i] ^= block[i - blockSize]; + } + + if (cipher instanceof CBCBlockCipher) + { + BlockCipher c = ((CBCBlockCipher)cipher).getUnderlyingCipher(); + + c.processBlock(buf, blockSize, out, outOff); + } + else + { + cipher.processBlock(buf, blockSize, out, outOff); + } + + System.arraycopy(block, 0, out, outOff + blockSize, len); + } + else + { + byte[] lastBlock = new byte[blockSize]; + + if (cipher instanceof CBCBlockCipher) + { + BlockCipher c = ((CBCBlockCipher)cipher).getUnderlyingCipher(); + + c.processBlock(buf, 0, block, 0); + } + else + { + cipher.processBlock(buf, 0, block, 0); + } + + for (int i = blockSize; i != bufOff; i++) + { + lastBlock[i - blockSize] = (byte)(block[i - blockSize] ^ buf[i]); + } + + System.arraycopy(buf, blockSize, block, 0, len); + + cipher.processBlock(block, 0, out, outOff); + System.arraycopy(lastBlock, 0, out, outOff + blockSize, len); + } + + int offset = bufOff; + + reset(); + + return offset; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/EAXBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/EAXBlockCipher.java new file mode 100644 index 0000000..327026e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/EAXBlockCipher.java @@ -0,0 +1,304 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.macs.CMac; +import org.bouncycastle.crypto.params.AEADParameters; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.util.Arrays; + +/** + * A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + * Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + * + * http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + * + * EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + * cipher to encrypt and authenticate data. It's on-line (the length of a + * message isn't needed to begin processing it), has good performances, it's + * simple and provably secure (provided the underlying block cipher is secure). + * + * Of course, this implementations is NOT thread-safe. + */ +public class EAXBlockCipher + implements AEADBlockCipher +{ + private static final byte nTAG = 0x0; + + private static final byte hTAG = 0x1; + + private static final byte cTAG = 0x2; + + private SICBlockCipher cipher; + + private boolean forEncryption; + + private int blockSize; + + private Mac mac; + + private byte[] nonceMac; + private byte[] associatedTextMac; + private byte[] macBlock; + + private int macSize; + private byte[] bufBlock; + private int bufOff; + + /** + * Constructor that accepts an instance of a block cipher engine. + * + * @param cipher the engine to use + */ + public EAXBlockCipher(BlockCipher cipher) + { + blockSize = cipher.getBlockSize(); + mac = new CMac(cipher); + macBlock = new byte[blockSize]; + bufBlock = new byte[blockSize * 2]; + associatedTextMac = new byte[mac.getMacSize()]; + nonceMac = new byte[mac.getMacSize()]; + this.cipher = new SICBlockCipher(cipher); + } + + public String getAlgorithmName() + { + return cipher.getUnderlyingCipher().getAlgorithmName() + "/EAX"; + } + + public BlockCipher getUnderlyingCipher() + { + return cipher.getUnderlyingCipher(); + } + + public int getBlockSize() + { + return cipher.getBlockSize(); + } + + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException + { + this.forEncryption = forEncryption; + + byte[] nonce, associatedText; + CipherParameters keyParam; + + if (params instanceof AEADParameters) + { + AEADParameters param = (AEADParameters)params; + + nonce = param.getNonce(); + associatedText = param.getAssociatedText(); + macSize = param.getMacSize() / 8; + keyParam = param.getKey(); + } + else if (params instanceof ParametersWithIV) + { + ParametersWithIV param = (ParametersWithIV)params; + + nonce = param.getIV(); + associatedText = new byte[0]; + macSize = mac.getMacSize() / 2; + keyParam = param.getParameters(); + } + else + { + throw new IllegalArgumentException("invalid parameters passed to EAX"); + } + + byte[] tag = new byte[blockSize]; + + mac.init(keyParam); + tag[blockSize - 1] = hTAG; + mac.update(tag, 0, blockSize); + mac.update(associatedText, 0, associatedText.length); + mac.doFinal(associatedTextMac, 0); + + tag[blockSize - 1] = nTAG; + mac.update(tag, 0, blockSize); + mac.update(nonce, 0, nonce.length); + mac.doFinal(nonceMac, 0); + + tag[blockSize - 1] = cTAG; + mac.update(tag, 0, blockSize); + + cipher.init(true, new ParametersWithIV(keyParam, nonceMac)); + } + + private void calculateMac() + { + byte[] outC = new byte[blockSize]; + mac.doFinal(outC, 0); + + for (int i = 0; i < macBlock.length; i++) + { + macBlock[i] = (byte)(nonceMac[i] ^ associatedTextMac[i] ^ outC[i]); + } + } + + public void reset() + { + reset(true); + } + + private void reset( + boolean clearMac) + { + cipher.reset(); + mac.reset(); + + bufOff = 0; + Arrays.fill(bufBlock, (byte)0); + + if (clearMac) + { + Arrays.fill(macBlock, (byte)0); + } + + byte[] tag = new byte[blockSize]; + tag[blockSize - 1] = cTAG; + mac.update(tag, 0, blockSize); + } + + public int processByte(byte in, byte[] out, int outOff) + throws DataLengthException + { + return process(in, out, outOff); + } + + public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) + throws DataLengthException + { + int resultLen = 0; + + for (int i = 0; i != len; i++) + { + resultLen += process(in[inOff + i], out, outOff + resultLen); + } + + return resultLen; + } + + public int doFinal(byte[] out, int outOff) + throws IllegalStateException, InvalidCipherTextException + { + int extra = bufOff; + byte[] tmp = new byte[bufBlock.length]; + + bufOff = 0; + + if (forEncryption) + { + cipher.processBlock(bufBlock, 0, tmp, 0); + cipher.processBlock(bufBlock, blockSize, tmp, blockSize); + + System.arraycopy(tmp, 0, out, outOff, extra); + + mac.update(tmp, 0, extra); + + calculateMac(); + + System.arraycopy(macBlock, 0, out, outOff + extra, macSize); + + reset(false); + + return extra + macSize; + } + else + { + if (extra > macSize) + { + mac.update(bufBlock, 0, extra - macSize); + + cipher.processBlock(bufBlock, 0, tmp, 0); + cipher.processBlock(bufBlock, blockSize, tmp, blockSize); + + System.arraycopy(tmp, 0, out, outOff, extra - macSize); + } + + calculateMac(); + + if (!verifyMac(bufBlock, extra - macSize)) + { + throw new InvalidCipherTextException("mac check in EAX failed"); + } + + reset(false); + + return extra - macSize; + } + } + + public byte[] getMac() + { + byte[] mac = new byte[macSize]; + + System.arraycopy(macBlock, 0, mac, 0, macSize); + + return mac; + } + + public int getUpdateOutputSize(int len) + { + return ((len + bufOff) / blockSize) * blockSize; + } + + public int getOutputSize(int len) + { + if (forEncryption) + { + return len + bufOff + macSize; + } + else + { + return len + bufOff - macSize; + } + } + + private int process(byte b, byte[] out, int outOff) + { + bufBlock[bufOff++] = b; + + if (bufOff == bufBlock.length) + { + int size; + + if (forEncryption) + { + size = cipher.processBlock(bufBlock, 0, out, outOff); + + mac.update(out, outOff, blockSize); + } + else + { + mac.update(bufBlock, 0, blockSize); + + size = cipher.processBlock(bufBlock, 0, out, outOff); + } + + bufOff = blockSize; + System.arraycopy(bufBlock, blockSize, bufBlock, 0, blockSize); + + return size; + } + + return 0; + } + + private boolean verifyMac(byte[] mac, int off) + { + for (int i = 0; i < macSize; i++) + { + if (macBlock[i] != mac[off + i]) + { + return false; + } + } + + return true; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/GCMBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/GCMBlockCipher.java new file mode 100644 index 0000000..7c98efa --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/GCMBlockCipher.java @@ -0,0 +1,421 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.modes.gcm.GCMMultiplier; +import org.bouncycastle.crypto.modes.gcm.Tables8kGCMMultiplier; +import org.bouncycastle.crypto.params.AEADParameters; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.crypto.util.Pack; +import org.bouncycastle.util.Arrays; + +/** + * Implements the Galois/Counter mode (GCM) detailed in + * NIST Special Publication 800-38D. + */ +public class GCMBlockCipher + implements AEADBlockCipher +{ + private static final int BLOCK_SIZE = 16; + private static final byte[] ZEROES = new byte[BLOCK_SIZE]; + + // not final due to a compiler bug + private BlockCipher cipher; + private GCMMultiplier multiplier; + + // These fields are set by init and not modified by processing + private boolean forEncryption; + private int macSize; + private byte[] nonce; + private byte[] A; + private byte[] H; + private byte[] initS; + private byte[] J0; + + // These fields are modified during processing + private byte[] bufBlock; + private byte[] macBlock; + private byte[] S; + private byte[] counter; + private int bufOff; + private long totalLength; + + public GCMBlockCipher(BlockCipher c) + { + this(c, null); + } + + public GCMBlockCipher(BlockCipher c, GCMMultiplier m) + { + if (c.getBlockSize() != BLOCK_SIZE) + { + throw new IllegalArgumentException( + "cipher required with a block size of " + BLOCK_SIZE + "."); + } + + if (m == null) + { + // TODO Consider a static property specifying default multiplier + m = new Tables8kGCMMultiplier(); + } + + this.cipher = c; + this.multiplier = m; + } + + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/GCM"; + } + + public void init(boolean forEncryption, CipherParameters params) + throws IllegalArgumentException + { + this.forEncryption = forEncryption; + this.macBlock = null; + + KeyParameter keyParam; + + if (params instanceof AEADParameters) + { + AEADParameters param = (AEADParameters)params; + + nonce = param.getNonce(); + A = param.getAssociatedText(); + + int macSizeBits = param.getMacSize(); + if (macSizeBits < 96 || macSizeBits > 128 || macSizeBits % 8 != 0) + { + throw new IllegalArgumentException("Invalid value for MAC size: " + macSizeBits); + } + + macSize = macSizeBits / 8; + keyParam = param.getKey(); + } + else if (params instanceof ParametersWithIV) + { + ParametersWithIV param = (ParametersWithIV)params; + + nonce = param.getIV(); + A = null; + macSize = 16; + keyParam = (KeyParameter)param.getParameters(); + } + else + { + throw new IllegalArgumentException("invalid parameters passed to GCM"); + } + + int bufLength = forEncryption ? BLOCK_SIZE : (BLOCK_SIZE + macSize); + this.bufBlock = new byte[bufLength]; + + if (nonce == null || nonce.length < 1) + { + throw new IllegalArgumentException("IV must be at least 1 byte"); + } + + if (A == null) + { + // Avoid lots of null checks + A = new byte[0]; + } + + // Cipher always used in forward mode + // if keyParam is null we're reusing the last key. + if (keyParam != null) + { + cipher.init(true, keyParam); + } + + // TODO This should be configurable by init parameters + // (but must be 16 if nonce length not 12) (BLOCK_SIZE?) +// this.tagLength = 16; + + this.H = new byte[BLOCK_SIZE]; + cipher.processBlock(ZEROES, 0, H, 0); + multiplier.init(H); + + this.initS = gHASH(A); + + if (nonce.length == 12) + { + this.J0 = new byte[16]; + System.arraycopy(nonce, 0, J0, 0, nonce.length); + this.J0[15] = 0x01; + } + else + { + this.J0 = gHASH(nonce); + byte[] X = new byte[16]; + packLength((long)nonce.length * 8, X, 8); + xor(this.J0, X); + multiplier.multiplyH(this.J0); + } + + this.S = Arrays.clone(initS); + this.counter = Arrays.clone(J0); + this.bufOff = 0; + this.totalLength = 0; + } + + public byte[] getMac() + { + return Arrays.clone(macBlock); + } + + public int getOutputSize(int len) + { + if (forEncryption) + { + return len + bufOff + macSize; + } + + return len + bufOff - macSize; + } + + public int getUpdateOutputSize(int len) + { + return ((len + bufOff) / BLOCK_SIZE) * BLOCK_SIZE; + } + + public int processByte(byte in, byte[] out, int outOff) + throws DataLengthException + { + return process(in, out, outOff); + } + + public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) + throws DataLengthException + { + int resultLen = 0; + + for (int i = 0; i != len; i++) + { +// resultLen += process(in[inOff + i], out, outOff + resultLen); + bufBlock[bufOff++] = in[inOff + i]; + + if (bufOff == bufBlock.length) + { + gCTRBlock(bufBlock, BLOCK_SIZE, out, outOff + resultLen); + if (!forEncryption) + { + System.arraycopy(bufBlock, BLOCK_SIZE, bufBlock, 0, macSize); + } +// bufOff = 0; + bufOff = bufBlock.length - BLOCK_SIZE; +// return bufBlock.Length; + resultLen += BLOCK_SIZE; + } + } + + return resultLen; + } + + private int process(byte in, byte[] out, int outOff) + throws DataLengthException + { + bufBlock[bufOff++] = in; + + if (bufOff == bufBlock.length) + { + gCTRBlock(bufBlock, BLOCK_SIZE, out, outOff); + if (!forEncryption) + { + System.arraycopy(bufBlock, BLOCK_SIZE, bufBlock, 0, macSize); + } +// bufOff = 0; + bufOff = bufBlock.length - BLOCK_SIZE; +// return bufBlock.length; + return BLOCK_SIZE; + } + + return 0; + } + + public int doFinal(byte[] out, int outOff) + throws IllegalStateException, InvalidCipherTextException + { + int extra = bufOff; + if (!forEncryption) + { + if (extra < macSize) + { + throw new InvalidCipherTextException("data too short"); + } + extra -= macSize; + } + + if (extra > 0) + { + byte[] tmp = new byte[BLOCK_SIZE]; + System.arraycopy(bufBlock, 0, tmp, 0, extra); + gCTRBlock(tmp, extra, out, outOff); + } + + // Final gHASH + byte[] X = new byte[16]; + packLength((long)A.length * 8, X, 0); + packLength(totalLength * 8, X, 8); + + xor(S, X); + multiplier.multiplyH(S); + + // TODO Fix this if tagLength becomes configurable + // T = MSBt(GCTRk(J0,S)) + byte[] tag = new byte[BLOCK_SIZE]; + cipher.processBlock(J0, 0, tag, 0); + xor(tag, S); + + int resultLen = extra; + + // We place into macBlock our calculated value for T + this.macBlock = new byte[macSize]; + System.arraycopy(tag, 0, macBlock, 0, macSize); + + if (forEncryption) + { + // Append T to the message + System.arraycopy(macBlock, 0, out, outOff + bufOff, macSize); + resultLen += macSize; + } + else + { + // Retrieve the T value from the message and compare to calculated one + byte[] msgMac = new byte[macSize]; + System.arraycopy(bufBlock, extra, msgMac, 0, macSize); + if (!Arrays.constantTimeAreEqual(this.macBlock, msgMac)) + { + throw new InvalidCipherTextException("mac check in GCM failed"); + } + } + + reset(false); + + return resultLen; + } + + public void reset() + { + reset(true); + } + + private void reset( + boolean clearMac) + { + S = Arrays.clone(initS); + counter = Arrays.clone(J0); + bufOff = 0; + totalLength = 0; + + if (bufBlock != null) + { + Arrays.fill(bufBlock, (byte)0); + } + + if (clearMac) + { + macBlock = null; + } + + cipher.reset(); + } + + private void gCTRBlock(byte[] buf, int bufCount, byte[] out, int outOff) + { +// inc(counter); + for (int i = 15; i >= 12; --i) + { + byte b = (byte)((counter[i] + 1) & 0xff); + counter[i] = b; + + if (b != 0) + { + break; + } + } + + byte[] tmp = new byte[BLOCK_SIZE]; + cipher.processBlock(counter, 0, tmp, 0); + + byte[] hashBytes; + if (forEncryption) + { + System.arraycopy(ZEROES, bufCount, tmp, bufCount, BLOCK_SIZE - bufCount); + hashBytes = tmp; + } + else + { + hashBytes = buf; + } + + for (int i = bufCount - 1; i >= 0; --i) + { + tmp[i] ^= buf[i]; + out[outOff + i] = tmp[i]; + } + +// gHASHBlock(hashBytes); + xor(S, hashBytes); + multiplier.multiplyH(S); + + totalLength += bufCount; + } + + private byte[] gHASH(byte[] b) + { + byte[] Y = new byte[16]; + + for (int pos = 0; pos < b.length; pos += 16) + { + byte[] X = new byte[16]; + int num = Math.min(b.length - pos, 16); + System.arraycopy(b, pos, X, 0, num); + xor(Y, X); + multiplier.multiplyH(Y); + } + + return Y; + } + +// private void gHASHBlock(byte[] block) +// { +// xor(S, block); +// multiplier.multiplyH(S); +// } + +// private static void inc(byte[] block) +// { +// for (int i = 15; i >= 12; --i) +// { +// byte b = (byte)((block[i] + 1) & 0xff); +// block[i] = b; +// +// if (b != 0) +// { +// break; +// } +// } +// } + + private static void xor(byte[] block, byte[] val) + { + for (int i = 15; i >= 0; --i) + { + block[i] ^= val[i]; + } + } + + private static void packLength(long count, byte[] bs, int off) + { + Pack.intToBigEndian((int)(count >>> 32), bs, off); + Pack.intToBigEndian((int)count, bs, off + 4); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/GOFBBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/GOFBBlockCipher.java new file mode 100644 index 0000000..1178974 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/GOFBBlockCipher.java @@ -0,0 +1,234 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * implements the GOST 28147 OFB counter mode (GCTR). + */ +public class GOFBBlockCipher + implements BlockCipher +{ + private byte[] IV; + private byte[] ofbV; + private byte[] ofbOutV; + + private final int blockSize; + private final BlockCipher cipher; + + boolean firstStep = true; + int N3; + int N4; + static final int C1 = 16843012; //00000001000000010000000100000100 + static final int C2 = 16843009; //00000001000000010000000100000001 + + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * counter mode (must have a 64 bit block size). + */ + public GOFBBlockCipher( + BlockCipher cipher) + { + this.cipher = cipher; + this.blockSize = cipher.getBlockSize(); + + if (blockSize != 8) + { + throw new IllegalArgumentException("GCTR only for 64 bit block ciphers"); + } + + this.IV = new byte[cipher.getBlockSize()]; + this.ofbV = new byte[cipher.getBlockSize()]; + this.ofbOutV = new byte[cipher.getBlockSize()]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param encrypting if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean encrypting, //ignored by this CTR mode + CipherParameters params) + throws IllegalArgumentException + { + firstStep = true; + N3 = 0; + N4 = 0; + + if (params instanceof ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)params; + byte[] iv = ivParam.getIV(); + + if (iv.length < IV.length) + { + // prepend the supplied IV with zeros (per FIPS PUB 81) + System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); + for (int i = 0; i < IV.length - iv.length; i++) + { + IV[i] = 0; + } + } + else + { + System.arraycopy(iv, 0, IV, 0, IV.length); + } + + reset(); + + // if params is null we reuse the current working key. + if (ivParam.getParameters() != null) + { + cipher.init(true, ivParam.getParameters()); + } + } + else + { + reset(); + + // if params is null we reuse the current working key. + if (params != null) + { + cipher.init(true, params); + } + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/GCTR" + * and the block size in bits + */ + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/GCTR"; + } + + + /** + * return the block size we are operating at (in bytes). + * + * @return the block size we are operating at (in bytes). + */ + public int getBlockSize() + { + return blockSize; + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (firstStep) + { + firstStep = false; + cipher.processBlock(ofbV, 0, ofbOutV, 0); + N3 = bytesToint(ofbOutV, 0); + N4 = bytesToint(ofbOutV, 4); + } + N3 += C2; + N4 += C1; + intTobytes(N3, ofbV, 0); + intTobytes(N4, ofbV, 4); + + cipher.processBlock(ofbV, 0, ofbOutV, 0); + + // + // XOR the ofbV with the plaintext producing the cipher text (and + // the next input block). + // + for (int i = 0; i < blockSize; i++) + { + out[outOff + i] = (byte)(ofbOutV[i] ^ in[inOff + i]); + } + + // + // change over the input block. + // + System.arraycopy(ofbV, blockSize, ofbV, 0, ofbV.length - blockSize); + System.arraycopy(ofbOutV, 0, ofbV, ofbV.length - blockSize, blockSize); + + return blockSize; + } + + /** + * reset the feedback vector back to the IV and reset the underlying + * cipher. + */ + public void reset() + { + System.arraycopy(IV, 0, ofbV, 0, IV.length); + + cipher.reset(); + } + + //array of bytes to type int + private int bytesToint( + byte[] in, + int inOff) + { + return ((in[inOff + 3] << 24) & 0xff000000) + ((in[inOff + 2] << 16) & 0xff0000) + + ((in[inOff + 1] << 8) & 0xff00) + (in[inOff] & 0xff); + } + + //int to array of bytes + private void intTobytes( + int num, + byte[] out, + int outOff) + { + out[outOff + 3] = (byte)(num >>> 24); + out[outOff + 2] = (byte)(num >>> 16); + out[outOff + 1] = (byte)(num >>> 8); + out[outOff] = (byte)num; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/OFBBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/OFBBlockCipher.java new file mode 100644 index 0000000..728a2e7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/OFBBlockCipher.java @@ -0,0 +1,183 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * implements a Output-FeedBack (OFB) mode on top of a simple cipher. + */ +public class OFBBlockCipher + implements BlockCipher +{ + private byte[] IV; + private byte[] ofbV; + private byte[] ofbOutV; + + private final int blockSize; + private final BlockCipher cipher; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + * @param blockSize the block size in bits (note: a multiple of 8) + */ + public OFBBlockCipher( + BlockCipher cipher, + int blockSize) + { + this.cipher = cipher; + this.blockSize = blockSize / 8; + + this.IV = new byte[cipher.getBlockSize()]; + this.ofbV = new byte[cipher.getBlockSize()]; + this.ofbOutV = new byte[cipher.getBlockSize()]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param encrypting if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean encrypting, //ignored by this OFB mode + CipherParameters params) + throws IllegalArgumentException + { + if (params instanceof ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)params; + byte[] iv = ivParam.getIV(); + + if (iv.length < IV.length) + { + // prepend the supplied IV with zeros (per FIPS PUB 81) + System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); + for (int i = 0; i < IV.length - iv.length; i++) + { + IV[i] = 0; + } + } + else + { + System.arraycopy(iv, 0, IV, 0, IV.length); + } + + reset(); + + // if null it's an IV changed only. + if (ivParam.getParameters() != null) + { + cipher.init(true, ivParam.getParameters()); + } + } + else + { + reset(); + + cipher.init(true, params); + } + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/OFB" + * and the block size in bits + */ + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/OFB" + (blockSize * 8); + } + + + /** + * return the block size we are operating at (in bytes). + * + * @return the block size we are operating at (in bytes). + */ + public int getBlockSize() + { + return blockSize; + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + cipher.processBlock(ofbV, 0, ofbOutV, 0); + + // + // XOR the ofbV with the plaintext producing the cipher text (and + // the next input block). + // + for (int i = 0; i < blockSize; i++) + { + out[outOff + i] = (byte)(ofbOutV[i] ^ in[inOff + i]); + } + + // + // change over the input block. + // + System.arraycopy(ofbV, blockSize, ofbV, 0, ofbV.length - blockSize); + System.arraycopy(ofbOutV, 0, ofbV, ofbV.length - blockSize, blockSize); + + return blockSize; + } + + /** + * reset the feedback vector back to the IV and reset the underlying + * cipher. + */ + public void reset() + { + System.arraycopy(IV, 0, ofbV, 0, IV.length); + + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java new file mode 100644 index 0000000..e48731b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/OpenPGPCFBBlockCipher.java @@ -0,0 +1,312 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; + +/** + * Implements OpenPGP's rather strange version of Cipher-FeedBack (CFB) mode + * on top of a simple cipher. This class assumes the IV has been prepended + * to the data stream already, and just accomodates the reset after + * (blockSize + 2) bytes have been read. + *

        + * For further info see RFC 2440. + */ +public class OpenPGPCFBBlockCipher + implements BlockCipher +{ + private byte[] IV; + private byte[] FR; + private byte[] FRE; + + private BlockCipher cipher; + + private int count; + private int blockSize; + private boolean forEncryption; + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + */ + public OpenPGPCFBBlockCipher( + BlockCipher cipher) + { + this.cipher = cipher; + + this.blockSize = cipher.getBlockSize(); + this.IV = new byte[blockSize]; + this.FR = new byte[blockSize]; + this.FRE = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/PGPCFB" + * and the block size in bits. + */ + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/OpenPGPCFB"; + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int getBlockSize() + { + return cipher.getBlockSize(); + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + return (forEncryption) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); + } + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void reset() + { + count = 0; + + System.arraycopy(IV, 0, FR, 0, FR.length); + + cipher.reset(); + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + throws IllegalArgumentException + { + this.forEncryption = forEncryption; + + reset(); + + cipher.init(true, params); + } + + /** + * Encrypt one byte of data according to CFB mode. + * @param data the byte to encrypt + * @param blockOff offset in the current block + * @return the encrypted byte + */ + private byte encryptByte(byte data, int blockOff) + { + return (byte)(FRE[blockOff] ^ data); + } + + /** + * Do the appropriate processing for CFB IV mode encryption. + * + * @param in the array containing the data to be encrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int encryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (count > blockSize) + { + FR[blockSize - 2] = out[outOff] = encryptByte(in[inOff], blockSize - 2); + FR[blockSize - 1] = out[outOff + 1] = encryptByte(in[inOff + 1], blockSize - 1); + + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + FR[n - 2] = out[outOff + n] = encryptByte(in[inOff + n], n - 2); + } + } + else if (count == 0) + { + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize; n++) + { + FR[n] = out[outOff + n] = encryptByte(in[inOff + n], n); + } + + count += blockSize; + } + else if (count == blockSize) + { + cipher.processBlock(FR, 0, FRE, 0); + + out[outOff] = encryptByte(in[inOff], 0); + out[outOff + 1] = encryptByte(in[inOff + 1], 1); + + // + // do reset + // + System.arraycopy(FR, 2, FR, 0, blockSize - 2); + System.arraycopy(out, outOff, FR, blockSize - 2, 2); + + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + FR[n - 2] = out[outOff + n] = encryptByte(in[inOff + n], n - 2); + } + + count += blockSize; + } + + return blockSize; + } + + /** + * Do the appropriate processing for CFB IV mode decryption. + * + * @param in the array containing the data to be decrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int decryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (count > blockSize) + { + byte inVal = in[inOff]; + FR[blockSize - 2] = inVal; + out[outOff] = encryptByte(inVal, blockSize - 2); + + inVal = in[inOff + 1]; + FR[blockSize - 1] = inVal; + out[outOff + 1] = encryptByte(inVal, blockSize - 1); + + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + inVal = in[inOff + n]; + FR[n - 2] = inVal; + out[outOff + n] = encryptByte(inVal, n - 2); + } + } + else if (count == 0) + { + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize; n++) + { + FR[n] = in[inOff + n]; + out[n] = encryptByte(in[inOff + n], n); + } + + count += blockSize; + } + else if (count == blockSize) + { + cipher.processBlock(FR, 0, FRE, 0); + + byte inVal1 = in[inOff]; + byte inVal2 = in[inOff + 1]; + out[outOff ] = encryptByte(inVal1, 0); + out[outOff + 1] = encryptByte(inVal2, 1); + + System.arraycopy(FR, 2, FR, 0, blockSize - 2); + + FR[blockSize - 2] = inVal1; + FR[blockSize - 1] = inVal2; + + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 2; n < blockSize; n++) + { + byte inVal = in[inOff + n]; + FR[n - 2] = inVal; + out[outOff + n] = encryptByte(inVal, n - 2); + } + + count += blockSize; + } + + return blockSize; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java new file mode 100644 index 0000000..18e612b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/PGPCFBBlockCipher.java @@ -0,0 +1,450 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * Implements OpenPGP's rather strange version of Cipher-FeedBack (CFB) mode on top of a simple cipher. For further info see RFC 2440. + */ +public class PGPCFBBlockCipher + implements BlockCipher +{ + private byte[] IV; + private byte[] FR; + private byte[] FRE; + private byte[] tmp; + + private BlockCipher cipher; + + private int count; + private int blockSize; + private boolean forEncryption; + + private boolean inlineIv; // if false we don't need to prepend an IV + + /** + * Basic constructor. + * + * @param cipher the block cipher to be used as the basis of the + * feedback mode. + * @param inlineIv if true this is for PGP CFB with a prepended iv. + */ + public PGPCFBBlockCipher( + BlockCipher cipher, + boolean inlineIv) + { + this.cipher = cipher; + this.inlineIv = inlineIv; + + this.blockSize = cipher.getBlockSize(); + this.IV = new byte[blockSize]; + this.FR = new byte[blockSize]; + this.FRE = new byte[blockSize]; + this.tmp = new byte[blockSize]; + } + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + /** + * return the algorithm name and mode. + * + * @return the name of the underlying algorithm followed by "/PGPCFB" + * and the block size in bits. + */ + public String getAlgorithmName() + { + if (inlineIv) + { + return cipher.getAlgorithmName() + "/PGPCFBwithIV"; + } + else + { + return cipher.getAlgorithmName() + "/PGPCFB"; + } + } + + /** + * return the block size we are operating at. + * + * @return the block size we are operating at (in bytes). + */ + public int getBlockSize() + { + return cipher.getBlockSize(); + } + + /** + * Process one block of input from the array in and write it to + * the out array. + * + * @param in the array containing the input data. + * @param inOff offset into the in array the data starts at. + * @param out the array the output data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + public int processBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if (inlineIv) + { + return (forEncryption) ? encryptBlockWithIV(in, inOff, out, outOff) : decryptBlockWithIV(in, inOff, out, outOff); + } + else + { + return (forEncryption) ? encryptBlock(in, inOff, out, outOff) : decryptBlock(in, inOff, out, outOff); + } + } + + /** + * reset the chaining vector back to the IV and reset the underlying + * cipher. + */ + public void reset() + { + count = 0; + + for (int i = 0; i != FR.length; i++) + { + if (inlineIv) + { + FR[i] = 0; + } + else + { + FR[i] = IV[i]; // if simple mode, key is IV (even if this is zero) + } + } + + cipher.reset(); + } + + /** + * Initialise the cipher and, possibly, the initialisation vector (IV). + * If an IV isn't passed as part of the parameter, the IV will be all zeros. + * An IV which is too short is handled in FIPS compliant fashion. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + throws IllegalArgumentException + { + this.forEncryption = forEncryption; + + if (params instanceof ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)params; + byte[] iv = ivParam.getIV(); + + if (iv.length < IV.length) + { + // prepend the supplied IV with zeros (per FIPS PUB 81) + System.arraycopy(iv, 0, IV, IV.length - iv.length, iv.length); + for (int i = 0; i < IV.length - iv.length; i++) + { + IV[i] = 0; + } + } + else + { + System.arraycopy(iv, 0, IV, 0, IV.length); + } + + reset(); + + cipher.init(true, ivParam.getParameters()); + } + else + { + reset(); + + cipher.init(true, params); + } + } + + /** + * Encrypt one byte of data according to CFB mode. + * @param data the byte to encrypt + * @param blockOff where am i in the current block, determines when to resync the block + * @returns the encrypted byte + */ + private byte encryptByte(byte data, int blockOff) + { + return (byte)(FRE[blockOff] ^ data); + } + + /** + * Do the appropriate processing for CFB IV mode encryption. + * + * @param in the array containing the data to be encrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int encryptBlockWithIV( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (count == 0) + { + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize; n++) + { + out[outOff + n] = encryptByte(IV[n], n); + } + + System.arraycopy(out, outOff, FR, 0, blockSize); + + cipher.processBlock(FR, 0, FRE, 0); + + out[outOff + blockSize] = encryptByte(IV[blockSize - 2], 0); + out[outOff + blockSize + 1] = encryptByte(IV[blockSize - 1], 1); + + System.arraycopy(out, outOff + 2, FR, 0, blockSize); + + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize; n++) + { + out[outOff + blockSize + 2 + n] = encryptByte(in[inOff + n], n); + } + + System.arraycopy(out, outOff + blockSize + 2, FR, 0, blockSize); + + count += 2 * blockSize + 2; + + return 2 * blockSize + 2; + } + else if (count >= blockSize + 2) + { + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize; n++) + { + out[outOff + n] = encryptByte(in[inOff + n], n); + } + + System.arraycopy(out, outOff, FR, 0, blockSize); + } + + return blockSize; + } + + /** + * Do the appropriate processing for CFB IV mode decryption. + * + * @param in the array containing the data to be decrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int decryptBlockWithIV( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + if (count == 0) + { + for (int n = 0; n < blockSize; n++) + { + FR[n] = in[inOff + n]; + } + + cipher.processBlock(FR, 0, FRE, 0); + + count += blockSize; + + return 0; + } + else if (count == blockSize) + { + // copy in buffer so that this mode works if in and out are the same + System.arraycopy(in, inOff, tmp, 0, blockSize); + + System.arraycopy(FR, 2, FR, 0, blockSize - 2); + + FR[blockSize - 2] = tmp[0]; + FR[blockSize - 1] = tmp[1]; + + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize - 2; n++) + { + out[outOff + n] = encryptByte(tmp[n + 2], n); + } + + System.arraycopy(tmp, 2, FR, 0, blockSize - 2); + + count += 2; + + return blockSize - 2; + } + else if (count >= blockSize + 2) + { + // copy in buffer so that this mode works if in and out are the same + System.arraycopy(in, inOff, tmp, 0, blockSize); + + out[outOff + 0] = encryptByte(tmp[0], blockSize - 2); + out[outOff + 1] = encryptByte(tmp[1], blockSize - 1); + + System.arraycopy(tmp, 0, FR, blockSize - 2, 2); + + cipher.processBlock(FR, 0, FRE, 0); + + for (int n = 0; n < blockSize - 2; n++) + { + out[outOff + n + 2] = encryptByte(tmp[n + 2], n); + } + + System.arraycopy(tmp, 2, FR, 0, blockSize - 2); + + } + + return blockSize; + } + + /** + * Do the appropriate processing for CFB mode encryption. + * + * @param in the array containing the data to be encrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int encryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + cipher.processBlock(FR, 0, FRE, 0); + for (int n = 0; n < blockSize; n++) + { + out[outOff + n] = encryptByte(in[inOff + n], n); + } + + for (int n = 0; n < blockSize; n++) + { + FR[n] = out[outOff + n]; + } + + return blockSize; + + } + + /** + * Do the appropriate processing for CFB mode decryption. + * + * @param in the array containing the data to be decrypted. + * @param inOff offset into the in array the data starts at. + * @param out the array the encrypted data will be copied into. + * @param outOff the offset into the out array the output will start at. + * @exception DataLengthException if there isn't enough data in in, or + * space in out. + * @exception IllegalStateException if the cipher isn't initialised. + * @return the number of bytes processed and produced. + */ + private int decryptBlock( + byte[] in, + int inOff, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if ((inOff + blockSize) > in.length) + { + throw new DataLengthException("input buffer too short"); + } + + if ((outOff + blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + cipher.processBlock(FR, 0, FRE, 0); + for (int n = 0; n < blockSize; n++) + { + out[outOff + n] = encryptByte(in[inOff + n], n); + } + + for (int n = 0; n < blockSize; n++) + { + FR[n] = in[inOff + n]; + } + + return blockSize; + + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/PaddedBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/PaddedBlockCipher.java new file mode 100644 index 0000000..f15ed67 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/PaddedBlockCipher.java @@ -0,0 +1,253 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.BufferedBlockCipher; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A wrapper class that allows block ciphers to be used to process data in + * a piecemeal fashion with PKCS5/PKCS7 padding. The PaddedBlockCipher + * outputs a block only when the buffer is full and more data is being added, + * or on a doFinal (unless the current block in the buffer is a pad block). + * The padding mechanism used is the one outlined in PKCS5/PKCS7. + * + * @deprecated use org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher instead. + */ +public class PaddedBlockCipher + extends BufferedBlockCipher +{ + /** + * Create a buffered block cipher with, or without, padding. + * + * @param cipher the underlying block cipher this buffering object wraps. + */ + public PaddedBlockCipher( + BlockCipher cipher) + { + this.cipher = cipher; + + buf = new byte[cipher.getBlockSize()]; + bufOff = 0; + } + + /** + * return the size of the output buffer required for an update plus a + * doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with len bytes of input. + */ + public int getOutputSize( + int len) + { + int total = len + bufOff; + int leftOver = total % buf.length; + + if (leftOver == 0) + { + if (forEncryption) + { + return total + buf.length; + } + + return total; + } + + return total - leftOver + buf.length; + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public int getUpdateOutputSize( + int len) + { + int total = len + bufOff; + int leftOver = total % buf.length; + + if (leftOver == 0) + { + return total - buf.length; + } + + return total - leftOver; + } + + /** + * process a single byte, producing an output block if neccessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processByte( + byte in, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + int resultLen = 0; + + if (bufOff == buf.length) + { + resultLen = cipher.processBlock(buf, 0, out, outOff); + bufOff = 0; + } + + buf[bufOff++] = in; + + return resultLen; + } + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = getBlockSize(); + int length = getUpdateOutputSize(len); + + if (length > 0) + { + if ((outOff + length) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + } + + int resultLen = 0; + int gapLen = buf.length - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += cipher.processBlock(buf, 0, out, outOff); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > buf.length) + { + resultLen += cipher.processBlock(in, inOff, out, outOff + resultLen); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + + return resultLen; + } + + /** + * Process the last block in the buffer. If the buffer is currently + * full and padding needs to be added a call to doFinal will produce + * 2 * getBlockSize() bytes. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @exception DataLengthException if there is insufficient space in out for + * the output or we are decrypting and the input is not block size aligned. + * @exception IllegalStateException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if padding is expected and not found. + */ + public int doFinal( + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException, InvalidCipherTextException + { + int blockSize = cipher.getBlockSize(); + int resultLen = 0; + + if (forEncryption) + { + if (bufOff == blockSize) + { + if ((outOff + 2 * blockSize) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + + resultLen = cipher.processBlock(buf, 0, out, outOff); + bufOff = 0; + } + + // + // add PKCS7 padding + // + byte code = (byte)(blockSize - bufOff); + + while (bufOff < blockSize) + { + buf[bufOff] = code; + bufOff++; + } + + resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); + } + else + { + if (bufOff == blockSize) + { + resultLen = cipher.processBlock(buf, 0, buf, 0); + bufOff = 0; + } + else + { + throw new DataLengthException("last block incomplete in decryption"); + } + + // + // remove PKCS7 padding + // + int count = buf[blockSize - 1] & 0xff; + + if ((count < 0) || (count > blockSize)) + { + throw new InvalidCipherTextException("pad block corrupted"); + } + + resultLen -= count; + + System.arraycopy(buf, 0, out, outOff, resultLen); + } + + reset(); + + return resultLen; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/SICBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/modes/SICBlockCipher.java new file mode 100644 index 0000000..af9f18d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/SICBlockCipher.java @@ -0,0 +1,124 @@ +package org.bouncycastle.crypto.modes; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.params.ParametersWithIV; + +/** + * Implements the Segmented Integer Counter (SIC) mode on top of a simple + * block cipher. This mode is also known as CTR mode. + */ +public class SICBlockCipher implements BlockCipher +{ + private final BlockCipher cipher; + private final int blockSize; + + private byte[] IV; + private byte[] counter; + private byte[] counterOut; + + + /** + * Basic constructor. + * + * @param c the block cipher to be used. + */ + public SICBlockCipher(BlockCipher c) + { + this.cipher = c; + this.blockSize = cipher.getBlockSize(); + this.IV = new byte[blockSize]; + this.counter = new byte[blockSize]; + this.counterOut = new byte[blockSize]; + } + + + /** + * return the underlying block cipher that we are wrapping. + * + * @return the underlying block cipher that we are wrapping. + */ + public BlockCipher getUnderlyingCipher() + { + return cipher; + } + + + public void init( + boolean forEncryption, //ignored by this CTR mode + CipherParameters params) + throws IllegalArgumentException + { + if (params instanceof ParametersWithIV) + { + ParametersWithIV ivParam = (ParametersWithIV)params; + byte[] iv = ivParam.getIV(); + System.arraycopy(iv, 0, IV, 0, IV.length); + + reset(); + + // if null it's an IV changed only. + if (ivParam.getParameters() != null) + { + cipher.init(true, ivParam.getParameters()); + } + } + else + { + throw new IllegalArgumentException("SIC mode requires ParametersWithIV"); + } + } + + public String getAlgorithmName() + { + return cipher.getAlgorithmName() + "/SIC"; + } + + public int getBlockSize() + { + return cipher.getBlockSize(); + } + + + public int processBlock(byte[] in, int inOff, byte[] out, int outOff) + throws DataLengthException, IllegalStateException + { + cipher.processBlock(counter, 0, counterOut, 0); + + // + // XOR the counterOut with the plaintext producing the cipher text + // + for (int i = 0; i < counterOut.length; i++) + { + out[outOff + i] = (byte)(counterOut[i] ^ in[inOff + i]); + } + + int carry = 1; + + for (int i = counter.length - 1; i >= 0; i--) + { + int x = (counter[i] & 0xff) + carry; + + if (x > 0xff) + { + carry = 1; + } + else + { + carry = 0; + } + + counter[i] = (byte)x; + } + + return counter.length; + } + + + public void reset() + { + System.arraycopy(IV, 0, counter, 0, counter.length); + cipher.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java new file mode 100644 index 0000000..f2be2fc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java @@ -0,0 +1,36 @@ +package org.bouncycastle.crypto.modes.gcm; + +import org.bouncycastle.util.Arrays; + +public class BasicGCMExponentiator implements GCMExponentiator +{ + private byte[] x; + + public void init(byte[] x) + { + this.x = Arrays.clone(x); + } + + public void exponentiateX(long pow, byte[] output) + { + // Initial value is little-endian 1 + byte[] y = GCMUtil.oneAsBytes(); + + if (pow > 0) + { + byte[] powX = Arrays.clone(x); + do + { + if ((pow & 1L) != 0) + { + GCMUtil.multiply(y, powX); + } + GCMUtil.multiply(powX, powX); + pow >>>= 1; + } + while (pow > 0); + } + + System.arraycopy(y, 0, output, 0, 16); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java new file mode 100644 index 0000000..a98d5b2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java @@ -0,0 +1,18 @@ +package org.bouncycastle.crypto.modes.gcm; + +import org.bouncycastle.util.Arrays; + +public class BasicGCMMultiplier implements GCMMultiplier +{ + private byte[] H; + + public void init(byte[] H) + { + this.H = Arrays.clone(H); + } + + public void multiplyH(byte[] x) + { + GCMUtil.multiply(x, H); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java new file mode 100644 index 0000000..e1cc5c7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java @@ -0,0 +1,7 @@ +package org.bouncycastle.crypto.modes.gcm; + +public interface GCMExponentiator +{ + void init(byte[] x); + void exponentiateX(long pow, byte[] output); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java new file mode 100644 index 0000000..f52f610 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java @@ -0,0 +1,7 @@ +package org.bouncycastle.crypto.modes.gcm; + +public interface GCMMultiplier +{ + void init(byte[] H); + void multiplyH(byte[] x); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java new file mode 100644 index 0000000..ce02be4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java @@ -0,0 +1,155 @@ +package org.bouncycastle.crypto.modes.gcm; + +import org.bouncycastle.crypto.util.Pack; +import org.bouncycastle.util.Arrays; + +abstract class GCMUtil +{ + static byte[] oneAsBytes() + { + byte[] tmp = new byte[16]; + tmp[0] = (byte)0x80; + return tmp; + } + + static int[] oneAsInts() + { + int[] tmp = new int[4]; + tmp[0] = 0x80000000; + return tmp; + } + + static int[] asInts(byte[] bs) + { + int[] us = new int[4]; + us[0] = Pack.bigEndianToInt(bs, 0); + us[1] = Pack.bigEndianToInt(bs, 4); + us[2] = Pack.bigEndianToInt(bs, 8); + us[3] = Pack.bigEndianToInt(bs, 12); + return us; + } + + static void multiply(byte[] block, byte[] val) + { + byte[] tmp = Arrays.clone(block); + byte[] c = new byte[16]; + + for (int i = 0; i < 16; ++i) + { + byte bits = val[i]; + for (int j = 7; j >= 0; --j) + { + if ((bits & (1 << j)) != 0) + { + xor(c, tmp); + } + + boolean lsb = (tmp[15] & 1) != 0; + shiftRight(tmp); + if (lsb) + { + // R = new byte[]{ 0xe1, ... }; +// GCMUtil.xor(v, R); + tmp[0] ^= (byte)0xe1; + } + } + } + + System.arraycopy(c, 0, block, 0, 16); + } + + // P is the value with only bit i=1 set + static void multiplyP(int[] x) + { + boolean lsb = (x[3] & 1) != 0; + shiftRight(x); + if (lsb) + { + // R = new int[]{ 0xe1000000, 0, 0, 0 }; +// xor(v, R); + x[0] ^= 0xe1000000; + } + } + + static void multiplyP8(int[] x) + { +// for (int i = 8; i != 0; --i) +// { +// multiplyP(x); +// } + + int lsw = x[3]; + shiftRightN(x, 8); + for (int i = 7; i >= 0; --i) + { + if ((lsw & (1 << i)) != 0) + { + x[0] ^= (0xe1000000 >>> (7 - i)); + } + } + } + + static void shiftRight(byte[] block) + { + int i = 0; + int bit = 0; + for (;;) + { + int b = block[i] & 0xff; + block[i] = (byte) ((b >>> 1) | bit); + if (++i == 16) + { + break; + } + bit = (b & 1) << 7; + } + } + + static void shiftRight(int[] block) + { + int i = 0; + int bit = 0; + for (;;) + { + int b = block[i]; + block[i] = (b >>> 1) | bit; + if (++i == 4) + { + break; + } + bit = b << 31; + } + } + + static void shiftRightN(int[] block, int n) + { + int i = 0; + int bits = 0; + for (;;) + { + int b = block[i]; + block[i] = (b >>> n) | bits; + if (++i == 4) + { + break; + } + bits = b << (32 - n); + } + } + + static void xor(byte[] block, byte[] val) + { + for (int i = 15; i >= 0; --i) + { + block[i] ^= val[i]; + } + } + + static void xor(int[] block, int[] val) + { + for (int i = 3; i >= 0; --i) + { + block[i] ^= val[i]; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java new file mode 100644 index 0000000..ca07597 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java @@ -0,0 +1,40 @@ +package org.bouncycastle.crypto.modes.gcm; + +import org.bouncycastle.util.Arrays; + +public class Tables1kGCMExponentiator implements GCMExponentiator +{ + // A lookup table of the power-of-two powers of 'x' + byte[][] lookupPowX2 = new byte[64][]; + + public void init(byte[] x) + { + lookupPowX2[0] = GCMUtil.oneAsBytes(); + lookupPowX2[1] = Arrays.clone(x); + + for (int i = 2; i != 64; ++i) + { + byte[] tmp = Arrays.clone(lookupPowX2[i - 1]); + GCMUtil.multiply(tmp, tmp); + lookupPowX2[i] = tmp; + } + } + + public void exponentiateX(long pow, byte[] output) + { + byte[] y = GCMUtil.oneAsBytes(); + int powX2 = 1; + + while (pow > 0) + { + if ((pow & 1L) != 0) + { + GCMUtil.multiply(y, lookupPowX2[powX2]); + } + ++powX2; + pow >>>= 1; + } + + System.arraycopy(y, 0, output, 0, 16); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java new file mode 100644 index 0000000..92a1074 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java @@ -0,0 +1,78 @@ +package org.bouncycastle.crypto.modes.gcm; + +import org.bouncycastle.crypto.util.Pack; + +public class Tables64kGCMMultiplier + implements GCMMultiplier +{ + private final int[][][] M = new int[16][][]; + public Tables64kGCMMultiplier() { + // workaround for Windows Phone + for(int iter = 0 ; iter < M.length ; iter++) { + M[iter] = new int[256][]; + } + } + + public void init(byte[] H) + { + M[0][0] = new int[4]; + M[0][128] = GCMUtil.asInts(H); + for (int j = 64; j >= 1; j >>= 1) + { + int[] tmp = new int[4]; + System.arraycopy(M[0][j + j], 0, tmp, 0, 4); + + GCMUtil.multiplyP(tmp); + M[0][j] = tmp; + } + + int i = 0; + for (;;) + { + for (int j = 2; j < 256; j += j) + { + for (int k = 1; k < j; ++k) + { + int[] tmp = new int[4]; + System.arraycopy(M[i][j], 0, tmp, 0, 4); + + GCMUtil.xor(tmp, M[i][k]); + M[i][j + k] = tmp; + } + } + + if (++i == 16) + { + return; + } + + M[i][0] = new int[4]; + for (int j = 128; j > 0; j >>= 1) + { + int[] tmp = new int[4]; + System.arraycopy(M[i - 1][j], 0, tmp, 0, 4); + + GCMUtil.multiplyP8(tmp); + M[i][j] = tmp; + } + } + } + + public void multiplyH(byte[] x) + { +// assert x.Length == 16; + + int[] z = new int[4]; + for (int i = 15; i >= 0; --i) + { +// GCMUtil.xor(z, M[i][x[i] & 0xff]); + int[] m = M[i][x[i] & 0xff]; + z[0] ^= m[0]; + z[1] ^= m[1]; + z[2] ^= m[2]; + z[3] ^= m[3]; + } + + Pack.intToBigEndian(z, x, 0); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java new file mode 100644 index 0000000..0366073 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java @@ -0,0 +1,106 @@ +package org.bouncycastle.crypto.modes.gcm; + +import org.bouncycastle.crypto.util.Pack; + +public class Tables8kGCMMultiplier implements GCMMultiplier +{ + private final int[][][] M = new int[32][][]; + + public Tables8kGCMMultiplier() { + // workaround for Windows Phone + for(int iter = 0 ; iter < M.length ; iter++) { + M[iter] = new int[16][]; + } + } + + public void init(byte[] H) + { + M[0][0] = new int[4]; + M[1][0] = new int[4]; + M[1][8] = GCMUtil.asInts(H); + + for (int j = 4; j >= 1; j >>= 1) + { + int[] tmp = new int[4]; + System.arraycopy(M[1][j + j], 0, tmp, 0, 4); + + GCMUtil.multiplyP(tmp); + M[1][j] = tmp; + } + + { + int[] tmp = new int[4]; + System.arraycopy(M[1][1], 0, tmp, 0, 4); + + GCMUtil.multiplyP(tmp); + M[0][8] = tmp; + } + + for (int j = 4; j >= 1; j >>= 1) + { + int[] tmp = new int[4]; + System.arraycopy(M[0][j + j], 0, tmp, 0, 4); + + GCMUtil.multiplyP(tmp); + M[0][j] = tmp; + } + + int i = 0; + for (;;) + { + for (int j = 2; j < 16; j += j) + { + for (int k = 1; k < j; ++k) + { + int[] tmp = new int[4]; + System.arraycopy(M[i][j], 0, tmp, 0, 4); + + GCMUtil.xor(tmp, M[i][k]); + M[i][j + k] = tmp; + } + } + + if (++i == 32) + { + return; + } + + if (i > 1) + { + M[i][0] = new int[4]; + for(int j = 8; j > 0; j >>= 1) + { + int[] tmp = new int[4]; + System.arraycopy(M[i - 2][j], 0, tmp, 0, 4); + + GCMUtil.multiplyP8(tmp); + M[i][j] = tmp; + } + } + } + } + + public void multiplyH(byte[] x) + { +// assert x.Length == 16; + + int[] z = new int[4]; + for (int i = 15; i >= 0; --i) + { +// GCMUtil.xor(z, M[i + i][x[i] & 0x0f]); + int[] m = M[i + i][x[i] & 0x0f]; + z[0] ^= m[0]; + z[1] ^= m[1]; + z[2] ^= m[2]; + z[3] ^= m[3]; +// GCMUtil.xor(z, M[i + i + 1][(x[i] & 0xf0) >>> 4]); + m = M[i + i + 1][(x[i] & 0xf0) >>> 4]; + z[0] ^= m[0]; + z[1] ^= m[1]; + z[2] ^= m[2]; + z[3] ^= m[3]; + } + + Pack.intToBigEndian(z, x, 0); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/BlockCipherPadding.java b/common/src/main/java/org/bouncycastle/crypto/paddings/BlockCipherPadding.java new file mode 100644 index 0000000..b80bd21 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/BlockCipherPadding.java @@ -0,0 +1,48 @@ +package org.bouncycastle.crypto.paddings; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * Block cipher padders are expected to conform to this interface + */ +public interface BlockCipherPadding +{ + /** + * Initialise the padder. + * + * @param random the source of randomness for the padding, if required. + */ + public void init(SecureRandom random) + throws IllegalArgumentException; + + /** + * Return the name of the algorithm the cipher implements. + * + * @return the name of the algorithm the cipher implements. + */ + public String getPaddingName(); + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + *

        + * Note: this assumes that the last block of plain text is always + * passed to it inside in. i.e. if inOff is zero, indicating the + * entire block is to be overwritten with padding the value of in + * should be the same as the last block of plain text. The reason + * for this is that some modes such as "trailing bit compliment" + * base the padding on the last byte of plain text. + *

        + */ + public int addPadding(byte[] in, int inOff); + + /** + * return the number of pad bytes present in the block. + * @exception InvalidCipherTextException if the padding is badly formed + * or invalid. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java b/common/src/main/java/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java new file mode 100644 index 0000000..f4dfe53 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/ISO10126d2Padding.java @@ -0,0 +1,79 @@ +package org.bouncycastle.crypto.paddings; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A padder that adds ISO10126-2 padding to a block. + */ +public class ISO10126d2Padding + implements BlockCipherPadding +{ + SecureRandom random; + + /** + * Initialise the padder. + * + * @param random a SecureRandom if available. + */ + public void init(SecureRandom random) + throws IllegalArgumentException + { + if (random != null) + { + this.random = random; + } + else + { + this.random = new SecureRandom(); + } + } + + /** + * Return the name of the algorithm the padder implements. + * + * @return the name of the algorithm the padder implements. + */ + public String getPaddingName() + { + return "ISO10126-2"; + } + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + */ + public int addPadding( + byte[] in, + int inOff) + { + byte code = (byte)(in.length - inOff); + + while (inOff < (in.length - 1)) + { + in[inOff] = (byte)random.nextInt(); + inOff++; + } + + in[inOff] = code; + + return code; + } + + /** + * return the number of pad bytes present in the block. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException + { + int count = in[in.length - 1] & 0xff; + + if (count > in.length) + { + throw new InvalidCipherTextException("pad block corrupted"); + } + + return count; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java b/common/src/main/java/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java new file mode 100644 index 0000000..3e39331 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/ISO7816d4Padding.java @@ -0,0 +1,77 @@ +package org.bouncycastle.crypto.paddings; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A padder that adds the padding according to the scheme referenced in + * ISO 7814-4 - scheme 2 from ISO 9797-1. The first byte is 0x80, rest is 0x00 + */ +public class ISO7816d4Padding + implements BlockCipherPadding +{ + /** + * Initialise the padder. + * + * @param random - a SecureRandom if available. + */ + public void init(SecureRandom random) + throws IllegalArgumentException + { + // nothing to do. + } + + /** + * Return the name of the algorithm the padder implements. + * + * @return the name of the algorithm the padder implements. + */ + public String getPaddingName() + { + return "ISO7816-4"; + } + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + */ + public int addPadding( + byte[] in, + int inOff) + { + int added = (in.length - inOff); + + in [inOff]= (byte) 0x80; + inOff ++; + + while (inOff < in.length) + { + in[inOff] = (byte) 0; + inOff++; + } + + return added; + } + + /** + * return the number of pad bytes present in the block. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException + { + int count = in.length - 1; + + while (count > 0 && in[count] == 0) + { + count--; + } + + if (in[count] != (byte)0x80) + { + throw new InvalidCipherTextException("pad block corrupted"); + } + + return in.length - count; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/PKCS7Padding.java b/common/src/main/java/org/bouncycastle/crypto/paddings/PKCS7Padding.java new file mode 100644 index 0000000..a38953f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/PKCS7Padding.java @@ -0,0 +1,76 @@ +package org.bouncycastle.crypto.paddings; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A padder that adds PKCS7/PKCS5 padding to a block. + */ +public class PKCS7Padding + implements BlockCipherPadding +{ + /** + * Initialise the padder. + * + * @param random - a SecureRandom if available. + */ + public void init(SecureRandom random) + throws IllegalArgumentException + { + // nothing to do. + } + + /** + * Return the name of the algorithm the padder implements. + * + * @return the name of the algorithm the padder implements. + */ + public String getPaddingName() + { + return "PKCS7"; + } + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + */ + public int addPadding( + byte[] in, + int inOff) + { + byte code = (byte)(in.length - inOff); + + while (inOff < in.length) + { + in[inOff] = code; + inOff++; + } + + return code; + } + + /** + * return the number of pad bytes present in the block. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException + { + int count = in[in.length - 1] & 0xff; + + if (count > in.length || count == 0) + { + throw new InvalidCipherTextException("pad block corrupted"); + } + + for (int i = 1; i <= count; i++) + { + if (in[in.length - i] != count) + { + throw new InvalidCipherTextException("pad block corrupted"); + } + } + + return count; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java new file mode 100644 index 0000000..ec412b9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/PaddedBufferedBlockCipher.java @@ -0,0 +1,298 @@ +package org.bouncycastle.crypto.paddings; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.BufferedBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +/** + * A wrapper class that allows block ciphers to be used to process data in + * a piecemeal fashion with padding. The PaddedBufferedBlockCipher + * outputs a block only when the buffer is full and more data is being added, + * or on a doFinal (unless the current block in the buffer is a pad block). + * The default padding mechanism used is the one outlined in PKCS5/PKCS7. + */ +public class PaddedBufferedBlockCipher + extends BufferedBlockCipher +{ + BlockCipherPadding padding; + + /** + * Create a buffered block cipher with the desired padding. + * + * @param cipher the underlying block cipher this buffering object wraps. + * @param padding the padding type. + */ + public PaddedBufferedBlockCipher( + BlockCipher cipher, + BlockCipherPadding padding) + { + this.cipher = cipher; + this.padding = padding; + + buf = new byte[cipher.getBlockSize()]; + bufOff = 0; + } + + /** + * Create a buffered block cipher PKCS7 padding + * + * @param cipher the underlying block cipher this buffering object wraps. + */ + public PaddedBufferedBlockCipher( + BlockCipher cipher) + { + this(cipher, new PKCS7Padding()); + } + + /** + * initialise the cipher. + * + * @param forEncryption if true the cipher is initialised for + * encryption, if false for decryption. + * @param params the key and other data required by the cipher. + * @exception IllegalArgumentException if the params argument is + * inappropriate. + */ + public void init( + boolean forEncryption, + CipherParameters params) + throws IllegalArgumentException + { + this.forEncryption = forEncryption; + + reset(); + + if (params instanceof ParametersWithRandom) + { + ParametersWithRandom p = (ParametersWithRandom)params; + + padding.init(p.getRandom()); + + cipher.init(forEncryption, p.getParameters()); + } + else + { + padding.init(null); + + cipher.init(forEncryption, params); + } + } + + /** + * return the minimum size of the output buffer required for an update + * plus a doFinal with an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update and doFinal + * with len bytes of input. + */ + public int getOutputSize( + int len) + { + int total = len + bufOff; + int leftOver = total % buf.length; + + if (leftOver == 0) + { + if (forEncryption) + { + return total + buf.length; + } + + return total; + } + + return total - leftOver + buf.length; + } + + /** + * return the size of the output buffer required for an update + * an input of len bytes. + * + * @param len the length of the input. + * @return the space required to accommodate a call to update + * with len bytes of input. + */ + public int getUpdateOutputSize( + int len) + { + int total = len + bufOff; + int leftOver = total % buf.length; + + if (leftOver == 0) + { + return total - buf.length; + } + + return total - leftOver; + } + + /** + * process a single byte, producing an output block if neccessary. + * + * @param in the input byte. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processByte( + byte in, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + int resultLen = 0; + + if (bufOff == buf.length) + { + resultLen = cipher.processBlock(buf, 0, out, outOff); + bufOff = 0; + } + + buf[bufOff++] = in; + + return resultLen; + } + + /** + * process an array of bytes, producing output if necessary. + * + * @param in the input byte array. + * @param inOff the offset at which the input data starts. + * @param len the number of bytes to be copied out of the input array. + * @param out the space for any output that might be produced. + * @param outOff the offset from which the output will be copied. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there isn't enough space in out. + * @exception IllegalStateException if the cipher isn't initialised. + */ + public int processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int blockSize = getBlockSize(); + int length = getUpdateOutputSize(len); + + if (length > 0) + { + if ((outOff + length) > out.length) + { + throw new DataLengthException("output buffer too short"); + } + } + + int resultLen = 0; + int gapLen = buf.length - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += cipher.processBlock(buf, 0, out, outOff); + + bufOff = 0; + len -= gapLen; + inOff += gapLen; + + while (len > buf.length) + { + resultLen += cipher.processBlock(in, inOff, out, outOff + resultLen); + + len -= blockSize; + inOff += blockSize; + } + } + + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + + return resultLen; + } + + /** + * Process the last block in the buffer. If the buffer is currently + * full and padding needs to be added a call to doFinal will produce + * 2 * getBlockSize() bytes. + * + * @param out the array the block currently being held is copied into. + * @param outOff the offset at which the copying starts. + * @return the number of output bytes copied to out. + * @exception DataLengthException if there is insufficient space in out for + * the output or we are decrypting and the input is not block size aligned. + * @exception IllegalStateException if the underlying cipher is not + * initialised. + * @exception InvalidCipherTextException if padding is expected and not found. + */ + public int doFinal( + byte[] out, + int outOff) + throws DataLengthException, IllegalStateException, InvalidCipherTextException + { + int blockSize = cipher.getBlockSize(); + int resultLen = 0; + + if (forEncryption) + { + if (bufOff == blockSize) + { + if ((outOff + 2 * blockSize) > out.length) + { + reset(); + + throw new DataLengthException("output buffer too short"); + } + + resultLen = cipher.processBlock(buf, 0, out, outOff); + bufOff = 0; + } + + padding.addPadding(buf, bufOff); + + resultLen += cipher.processBlock(buf, 0, out, outOff + resultLen); + + reset(); + } + else + { + if (bufOff == blockSize) + { + resultLen = cipher.processBlock(buf, 0, buf, 0); + bufOff = 0; + } + else + { + reset(); + + throw new DataLengthException("last block incomplete in decryption"); + } + + try + { + resultLen -= padding.padCount(buf); + + System.arraycopy(buf, 0, out, outOff, resultLen); + } + finally + { + reset(); + } + } + + return resultLen; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/TBCPadding.java b/common/src/main/java/org/bouncycastle/crypto/paddings/TBCPadding.java new file mode 100644 index 0000000..eddd5ad --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/TBCPadding.java @@ -0,0 +1,89 @@ +package org.bouncycastle.crypto.paddings; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A padder that adds Trailing-Bit-Compliment padding to a block. + *

        + * This padding pads the block out with the compliment of the last bit + * of the plain text. + *

        + */ +public class TBCPadding + implements BlockCipherPadding +{ + /** + * Initialise the padder. + * + * @param random - a SecureRandom if available. + */ + public void init(SecureRandom random) + throws IllegalArgumentException + { + // nothing to do. + } + + /** + * Return the name of the algorithm the padder implements. + * + * @return the name of the algorithm the padder implements. + */ + public String getPaddingName() + { + return "TBC"; + } + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + *

        + * Note: this assumes that the last block of plain text is always + * passed to it inside in. i.e. if inOff is zero, indicating the + * entire block is to be overwritten with padding the value of in + * should be the same as the last block of plain text. + *

        + */ + public int addPadding( + byte[] in, + int inOff) + { + int count = in.length - inOff; + byte code; + + if (inOff > 0) + { + code = (byte)((in[inOff - 1] & 0x01) == 0 ? 0xff : 0x00); + } + else + { + code = (byte)((in[in.length - 1] & 0x01) == 0 ? 0xff : 0x00); + } + + while (inOff < in.length) + { + in[inOff] = code; + inOff++; + } + + return count; + } + + /** + * return the number of pad bytes present in the block. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException + { + byte code = in[in.length - 1]; + + int index = in.length - 1; + while (index > 0 && in[index - 1] == code) + { + index--; + } + + return in.length - index; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/X923Padding.java b/common/src/main/java/org/bouncycastle/crypto/paddings/X923Padding.java new file mode 100644 index 0000000..d213220 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/X923Padding.java @@ -0,0 +1,80 @@ +package org.bouncycastle.crypto.paddings; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A padder that adds X9.23 padding to a block - if a SecureRandom is + * passed in random padding is assumed, otherwise padding with zeros is used. + */ +public class X923Padding + implements BlockCipherPadding +{ + SecureRandom random = null; + + /** + * Initialise the padder. + * + * @param random a SecureRandom if one is available. + */ + public void init(SecureRandom random) + throws IllegalArgumentException + { + this.random = random; + } + + /** + * Return the name of the algorithm the padder implements. + * + * @return the name of the algorithm the padder implements. + */ + public String getPaddingName() + { + return "X9.23"; + } + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + */ + public int addPadding( + byte[] in, + int inOff) + { + byte code = (byte)(in.length - inOff); + + while (inOff < in.length - 1) + { + if (random == null) + { + in[inOff] = 0; + } + else + { + in[inOff] = (byte)random.nextInt(); + } + inOff++; + } + + in[inOff] = code; + + return code; + } + + /** + * return the number of pad bytes present in the block. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException + { + int count = in[in.length - 1] & 0xff; + + if (count > in.length) + { + throw new InvalidCipherTextException("pad block corrupted"); + } + + return count; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/paddings/ZeroBytePadding.java b/common/src/main/java/org/bouncycastle/crypto/paddings/ZeroBytePadding.java new file mode 100644 index 0000000..4ba8da5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/paddings/ZeroBytePadding.java @@ -0,0 +1,73 @@ +package org.bouncycastle.crypto.paddings; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.InvalidCipherTextException; + +/** + * A padder that adds NULL byte padding to a block. + */ +public class ZeroBytePadding + implements BlockCipherPadding +{ + /** + * Initialise the padder. + * + * @param random - a SecureRandom if available. + */ + public void init(SecureRandom random) + throws IllegalArgumentException + { + // nothing to do. + } + + /** + * Return the name of the algorithm the padder implements. + * + * @return the name of the algorithm the padder implements. + */ + public String getPaddingName() + { + return "ZeroByte"; + } + + /** + * add the pad bytes to the passed in block, returning the + * number of bytes added. + */ + public int addPadding( + byte[] in, + int inOff) + { + int added = (in.length - inOff); + + while (inOff < in.length) + { + in[inOff] = (byte) 0; + inOff++; + } + + return added; + } + + /** + * return the number of pad bytes present in the block. + */ + public int padCount(byte[] in) + throws InvalidCipherTextException + { + int count = in.length; + + while (count > 0) + { + if (in[count - 1] != 0) + { + break; + } + + count--; + } + + return in.length - count; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/AEADParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/AEADParameters.java new file mode 100644 index 0000000..b60ef40 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/AEADParameters.java @@ -0,0 +1,48 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class AEADParameters + implements CipherParameters +{ + private byte[] associatedText; + private byte[] nonce; + private KeyParameter key; + private int macSize; + + /** + * Base constructor. + * + * @param key key to be used by underlying cipher + * @param macSize macSize in bits + * @param nonce nonce to be used + * @param associatedText associated text, if any + */ + public AEADParameters(KeyParameter key, int macSize, byte[] nonce, byte[] associatedText) + { + this.key = key; + this.nonce = nonce; + this.macSize = macSize; + this.associatedText = associatedText; + } + + public KeyParameter getKey() + { + return key; + } + + public int getMacSize() + { + return macSize; + } + + public byte[] getAssociatedText() + { + return associatedText; + } + + public byte[] getNonce() + { + return nonce; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java b/common/src/main/java/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java new file mode 100644 index 0000000..03ba725 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/AsymmetricKeyParameter.java @@ -0,0 +1,20 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class AsymmetricKeyParameter + implements CipherParameters +{ + boolean privateKey; + + public AsymmetricKeyParameter( + boolean privateKey) + { + this.privateKey = privateKey; + } + + public boolean isPrivate() + { + return privateKey; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/CCMParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/CCMParameters.java new file mode 100644 index 0000000..520062c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/CCMParameters.java @@ -0,0 +1,18 @@ +package org.bouncycastle.crypto.params; + +public class CCMParameters + extends AEADParameters +{ + /** + * Base constructor. + * + * @param key key to be used by underlying cipher + * @param macSize macSize in bits + * @param nonce nonce to be used + * @param associatedText associated text, if any + */ + public CCMParameters(KeyParameter key, int macSize, byte[] nonce, byte[] associatedText) + { + super(key, macSize, nonce, associatedText); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DESParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DESParameters.java new file mode 100644 index 0000000..5bee360 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DESParameters.java @@ -0,0 +1,107 @@ +package org.bouncycastle.crypto.params; + +public class DESParameters + extends KeyParameter +{ + public DESParameters( + byte[] key) + { + super(key); + + if (isWeakKey(key, 0)) + { + throw new IllegalArgumentException("attempt to create weak DES key"); + } + } + + /* + * DES Key length in bytes. + */ + static public final int DES_KEY_LENGTH = 8; + + /* + * Table of weak and semi-weak keys taken from Schneier pp281 + */ + static private final int N_DES_WEAK_KEYS = 16; + + static private byte[] DES_weak_keys = + { + /* weak keys */ + (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01, (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01, + (byte)0x1f,(byte)0x1f,(byte)0x1f,(byte)0x1f, (byte)0x0e,(byte)0x0e,(byte)0x0e,(byte)0x0e, + (byte)0xe0,(byte)0xe0,(byte)0xe0,(byte)0xe0, (byte)0xf1,(byte)0xf1,(byte)0xf1,(byte)0xf1, + (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe, (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe, + + /* semi-weak keys */ + (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe, (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe, + (byte)0x1f,(byte)0xe0,(byte)0x1f,(byte)0xe0, (byte)0x0e,(byte)0xf1,(byte)0x0e,(byte)0xf1, + (byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xe0, (byte)0x01,(byte)0xf1,(byte)0x01,(byte)0xf1, + (byte)0x1f,(byte)0xfe,(byte)0x1f,(byte)0xfe, (byte)0x0e,(byte)0xfe,(byte)0x0e,(byte)0xfe, + (byte)0x01,(byte)0x1f,(byte)0x01,(byte)0x1f, (byte)0x01,(byte)0x0e,(byte)0x01,(byte)0x0e, + (byte)0xe0,(byte)0xfe,(byte)0xe0,(byte)0xfe, (byte)0xf1,(byte)0xfe,(byte)0xf1,(byte)0xfe, + (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01, (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01, + (byte)0xe0,(byte)0x1f,(byte)0xe0,(byte)0x1f, (byte)0xf1,(byte)0x0e,(byte)0xf1,(byte)0x0e, + (byte)0xe0,(byte)0x01,(byte)0xe0,(byte)0x01, (byte)0xf1,(byte)0x01,(byte)0xf1,(byte)0x01, + (byte)0xfe,(byte)0x1f,(byte)0xfe,(byte)0x1f, (byte)0xfe,(byte)0x0e,(byte)0xfe,(byte)0x0e, + (byte)0x1f,(byte)0x01,(byte)0x1f,(byte)0x01, (byte)0x0e,(byte)0x01,(byte)0x0e,(byte)0x01, + (byte)0xfe,(byte)0xe0,(byte)0xfe,(byte)0xe0, (byte)0xfe,(byte)0xf1,(byte)0xfe,(byte)0xf1 + }; + + /** + * DES has 16 weak keys. This method will check + * if the given DES key material is weak or semi-weak. + * Key material that is too short is regarded as weak. + *

        + * See "Applied + * Cryptography" by Bruce Schneier for more information. + * + * @return true if the given DES key material is weak or semi-weak, + * false otherwise. + */ + public static boolean isWeakKey( + byte[] key, + int offset) + { + if (key.length - offset < DES_KEY_LENGTH) + { + throw new IllegalArgumentException("key material too short."); + } + + nextkey: for (int i = 0; i < N_DES_WEAK_KEYS; i++) + { + for (int j = 0; j < DES_KEY_LENGTH; j++) + { + if (key[j + offset] != DES_weak_keys[i * DES_KEY_LENGTH + j]) + { + continue nextkey; + } + } + + return true; + } + return false; + } + + /** + * DES Keys use the LSB as the odd parity bit. This can + * be used to check for corrupt keys. + * + * @param bytes the byte array to set the parity on. + */ + public static void setOddParity( + byte[] bytes) + { + for (int i = 0; i < bytes.length; i++) + { + int b = bytes[i]; + bytes[i] = (byte)((b & 0xfe) | + ((((b >> 1) ^ + (b >> 2) ^ + (b >> 3) ^ + (b >> 4) ^ + (b >> 5) ^ + (b >> 6) ^ + (b >> 7)) ^ 0x01) & 0x01)); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DESedeParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DESedeParameters.java new file mode 100644 index 0000000..3a4bbfc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DESedeParameters.java @@ -0,0 +1,57 @@ +package org.bouncycastle.crypto.params; + +public class DESedeParameters + extends DESParameters +{ + /* + * DES-EDE Key length in bytes. + */ + static public final int DES_EDE_KEY_LENGTH = 24; + + public DESedeParameters( + byte[] key) + { + super(key); + + if (isWeakKey(key, 0, key.length)) + { + throw new IllegalArgumentException("attempt to create weak DESede key"); + } + } + + /** + * return true if the passed in key is a DES-EDE weak key. + * + * @param key bytes making up the key + * @param offset offset into the byte array the key starts at + * @param length number of bytes making up the key + */ + public static boolean isWeakKey( + byte[] key, + int offset, + int length) + { + for (int i = offset; i < length; i += DES_KEY_LENGTH) + { + if (DESParameters.isWeakKey(key, i)) + { + return true; + } + } + + return false; + } + + /** + * return true if the passed in key is a DES-EDE weak key. + * + * @param key bytes making up the key + * @param offset offset into the byte array the key starts at + */ + public static boolean isWeakKey( + byte[] key, + int offset) + { + return isWeakKey(key, offset, key.length - offset); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java new file mode 100644 index 0000000..873f06e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DHKeyGenerationParameters.java @@ -0,0 +1,30 @@ +package org.bouncycastle.crypto.params; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.KeyGenerationParameters; + +public class DHKeyGenerationParameters + extends KeyGenerationParameters +{ + private DHParameters params; + + public DHKeyGenerationParameters( + SecureRandom random, + DHParameters params) + { + super(random, getStrength(params)); + + this.params = params; + } + + public DHParameters getParameters() + { + return params; + } + + static int getStrength(DHParameters params) + { + return params.getL() != 0 ? params.getL() : params.getP().bitLength(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DHKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DHKeyParameters.java new file mode 100644 index 0000000..e686f35 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DHKeyParameters.java @@ -0,0 +1,54 @@ +package org.bouncycastle.crypto.params; + + +public class DHKeyParameters + extends AsymmetricKeyParameter +{ + private DHParameters params; + + protected DHKeyParameters( + boolean isPrivate, + DHParameters params) + { + super(isPrivate); + + this.params = params; + } + + public DHParameters getParameters() + { + return params; + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof DHKeyParameters)) + { + return false; + } + + DHKeyParameters dhKey = (DHKeyParameters)obj; + + if (params == null) + { + return dhKey.getParameters() == null; + } + else + { + return params.equals(dhKey.getParameters()); + } + } + + public int hashCode() + { + int code = isPrivate() ? 0 : 1; + + if (params != null) + { + code ^= params.hashCode(); + } + + return code; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DHParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DHParameters.java new file mode 100644 index 0000000..0917fbf --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DHParameters.java @@ -0,0 +1,189 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.CipherParameters; + +public class DHParameters + implements CipherParameters +{ + private static final int DEFAULT_MINIMUM_LENGTH = 160; + + // not final due to compiler bug in "simpler" JDKs + private BigInteger g; + private BigInteger p; + private BigInteger q; + private BigInteger j; + private int m; + private int l; + private DHValidationParameters validation; + + private static int getDefaultMParam( + int lParam) + { + if (lParam == 0) + { + return DEFAULT_MINIMUM_LENGTH; + } + + return lParam < DEFAULT_MINIMUM_LENGTH ? lParam : DEFAULT_MINIMUM_LENGTH; + } + + public DHParameters( + BigInteger p, + BigInteger g) + { + this(p, g, null, 0); + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q) + { + this(p, g, q, 0); + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + int l) + { + this(p, g, q, getDefaultMParam(l), l, null, null); + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + int m, + int l) + { + this(p, g, q, m, l, null, null); + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + BigInteger j, + DHValidationParameters validation) + { + this(p, g, q, DEFAULT_MINIMUM_LENGTH, 0, j, validation); + } + + public DHParameters( + BigInteger p, + BigInteger g, + BigInteger q, + int m, + int l, + BigInteger j, + DHValidationParameters validation) + { + if (l != 0) + { + BigInteger bigL = BigInteger.valueOf(2L ^ (l - 1)); + if (bigL.compareTo(p) == 1) + { + throw new IllegalArgumentException("when l value specified, it must satisfy 2^(l-1) <= p"); + } + if (l < m) + { + throw new IllegalArgumentException("when l value specified, it may not be less than m value"); + } + } + + this.g = g; + this.p = p; + this.q = q; + this.m = m; + this.l = l; + this.j = j; + this.validation = validation; + } + + public BigInteger getP() + { + return p; + } + + public BigInteger getG() + { + return g; + } + + public BigInteger getQ() + { + return q; + } + + /** + * Return the subgroup factor J. + * + * @return subgroup factor + */ + public BigInteger getJ() + { + return j; + } + + /** + * Return the minimum length of the private value. + * + * @return the minimum length of the private value in bits. + */ + public int getM() + { + return m; + } + + /** + * Return the private value length in bits - if set, zero otherwise + * + * @return the private value length in bits, zero otherwise. + */ + public int getL() + { + return l; + } + + public DHValidationParameters getValidationParameters() + { + return validation; + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof DHParameters)) + { + return false; + } + + DHParameters pm = (DHParameters)obj; + + if (this.getQ() != null) + { + if (!this.getQ().equals(pm.getQ())) + { + return false; + } + } + else + { + if (pm.getQ() != null) + { + return false; + } + } + + return pm.getP().equals(p) && pm.getG().equals(g); + } + + public int hashCode() + { + return getP().hashCode() ^ getG().hashCode() ^ (getQ() != null ? getQ().hashCode() : 0); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java new file mode 100644 index 0000000..dbd7f7d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DHPrivateKeyParameters.java @@ -0,0 +1,41 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class DHPrivateKeyParameters + extends DHKeyParameters +{ + private BigInteger x; + + public DHPrivateKeyParameters( + BigInteger x, + DHParameters params) + { + super(true, params); + + this.x = x; + } + + public BigInteger getX() + { + return x; + } + + public int hashCode() + { + return x.hashCode() ^ super.hashCode(); + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof DHPrivateKeyParameters)) + { + return false; + } + + DHPrivateKeyParameters other = (DHPrivateKeyParameters)obj; + + return other.getX().equals(this.x) && super.equals(obj); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DHPublicKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DHPublicKeyParameters.java new file mode 100644 index 0000000..dc0e258 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DHPublicKeyParameters.java @@ -0,0 +1,41 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class DHPublicKeyParameters + extends DHKeyParameters +{ + private BigInteger y; + + public DHPublicKeyParameters( + BigInteger y, + DHParameters params) + { + super(false, params); + + this.y = y; + } + + public BigInteger getY() + { + return y; + } + + public int hashCode() + { + return y.hashCode() ^ super.hashCode(); + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof DHPublicKeyParameters)) + { + return false; + } + + DHPublicKeyParameters other = (DHPublicKeyParameters)obj; + + return other.getY().equals(y) && super.equals(obj); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DHValidationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DHValidationParameters.java new file mode 100644 index 0000000..b22f7a0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DHValidationParameters.java @@ -0,0 +1,50 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.util.Arrays; + +public class DHValidationParameters +{ + private byte[] seed; + private int counter; + + public DHValidationParameters( + byte[] seed, + int counter) + { + this.seed = seed; + this.counter = counter; + } + + public int getCounter() + { + return counter; + } + + public byte[] getSeed() + { + return seed; + } + + public boolean equals( + Object o) + { + if (!(o instanceof DHValidationParameters)) + { + return false; + } + + DHValidationParameters other = (DHValidationParameters)o; + + if (other.counter != this.counter) + { + return false; + } + + return Arrays.areEqual(this.seed, other.seed); + } + + public int hashCode() + { + return counter ^ Arrays.hashCode(seed); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java new file mode 100644 index 0000000..f212739 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DSAKeyGenerationParameters.java @@ -0,0 +1,25 @@ +package org.bouncycastle.crypto.params; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.KeyGenerationParameters; + +public class DSAKeyGenerationParameters + extends KeyGenerationParameters +{ + private DSAParameters params; + + public DSAKeyGenerationParameters( + SecureRandom random, + DSAParameters params) + { + super(random, params.getP().bitLength() - 1); + + this.params = params; + } + + public DSAParameters getParameters() + { + return params; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DSAKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DSAKeyParameters.java new file mode 100644 index 0000000..11bb9d9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DSAKeyParameters.java @@ -0,0 +1,21 @@ +package org.bouncycastle.crypto.params; + +public class DSAKeyParameters + extends AsymmetricKeyParameter +{ + private DSAParameters params; + + public DSAKeyParameters( + boolean isPrivate, + DSAParameters params) + { + super(isPrivate); + + this.params = params; + } + + public DSAParameters getParameters() + { + return params; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DSAParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DSAParameters.java new file mode 100644 index 0000000..d79372f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DSAParameters.java @@ -0,0 +1,74 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.CipherParameters; + +public class DSAParameters + implements CipherParameters +{ + private BigInteger g; + private BigInteger q; + private BigInteger p; + private DSAValidationParameters validation; + + public DSAParameters( + BigInteger p, + BigInteger q, + BigInteger g) + { + this.g = g; + this.p = p; + this.q = q; + } + + public DSAParameters( + BigInteger p, + BigInteger q, + BigInteger g, + DSAValidationParameters params) + { + this.g = g; + this.p = p; + this.q = q; + this.validation = params; + } + + public BigInteger getP() + { + return p; + } + + public BigInteger getQ() + { + return q; + } + + public BigInteger getG() + { + return g; + } + + public DSAValidationParameters getValidationParameters() + { + return validation; + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof DSAParameters)) + { + return false; + } + + DSAParameters pm = (DSAParameters)obj; + + return (pm.getP().equals(p) && pm.getQ().equals(q) && pm.getG().equals(g)); + } + + public int hashCode() + { + return getP().hashCode() ^ getQ().hashCode() ^ getG().hashCode(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java new file mode 100644 index 0000000..b985422 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DSAPrivateKeyParameters.java @@ -0,0 +1,23 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class DSAPrivateKeyParameters + extends DSAKeyParameters +{ + private BigInteger x; + + public DSAPrivateKeyParameters( + BigInteger x, + DSAParameters params) + { + super(true, params); + + this.x = x; + } + + public BigInteger getX() + { + return x; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java new file mode 100644 index 0000000..238b083 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java @@ -0,0 +1,23 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class DSAPublicKeyParameters + extends DSAKeyParameters +{ + private BigInteger y; + + public DSAPublicKeyParameters( + BigInteger y, + DSAParameters params) + { + super(false, params); + + this.y = y; + } + + public BigInteger getY() + { + return y; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/DSAValidationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/DSAValidationParameters.java new file mode 100644 index 0000000..1cc4b93 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/DSAValidationParameters.java @@ -0,0 +1,50 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.util.Arrays; + +public class DSAValidationParameters +{ + private byte[] seed; + private int counter; + + public DSAValidationParameters( + byte[] seed, + int counter) + { + this.seed = seed; + this.counter = counter; + } + + public int getCounter() + { + return counter; + } + + public byte[] getSeed() + { + return seed; + } + + public int hashCode() + { + return counter ^ Arrays.hashCode(seed); + } + + public boolean equals( + Object o) + { + if (!(o instanceof DSAValidationParameters)) + { + return false; + } + + DSAValidationParameters other = (DSAValidationParameters)o; + + if (other.counter != this.counter) + { + return false; + } + + return Arrays.areEqual(this.seed, other.seed); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ECDomainParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ECDomainParameters.java new file mode 100644 index 0000000..e6bae75 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ECDomainParameters.java @@ -0,0 +1,81 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECCurve; +import org.bouncycastle.math.ec.ECPoint; + +public class ECDomainParameters + implements ECConstants +{ + ECCurve curve; + byte[] seed; + ECPoint G; + BigInteger n; + BigInteger h; + + public ECDomainParameters( + ECCurve curve, + ECPoint G, + BigInteger n) + { + this.curve = curve; + this.G = G; + this.n = n; + this.h = ONE; + this.seed = null; + } + + public ECDomainParameters( + ECCurve curve, + ECPoint G, + BigInteger n, + BigInteger h) + { + this.curve = curve; + this.G = G; + this.n = n; + this.h = h; + this.seed = null; + } + + public ECDomainParameters( + ECCurve curve, + ECPoint G, + BigInteger n, + BigInteger h, + byte[] seed) + { + this.curve = curve; + this.G = G; + this.n = n; + this.h = h; + this.seed = seed; + } + + public ECCurve getCurve() + { + return curve; + } + + public ECPoint getG() + { + return G; + } + + public BigInteger getN() + { + return n; + } + + public BigInteger getH() + { + return h; + } + + public byte[] getSeed() + { + return seed; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java new file mode 100644 index 0000000..eaa5c0a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ECKeyGenerationParameters.java @@ -0,0 +1,25 @@ +package org.bouncycastle.crypto.params; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.KeyGenerationParameters; + +public class ECKeyGenerationParameters + extends KeyGenerationParameters +{ + private ECDomainParameters domainParams; + + public ECKeyGenerationParameters( + ECDomainParameters domainParams, + SecureRandom random) + { + super(random, domainParams.getN().bitLength()); + + this.domainParams = domainParams; + } + + public ECDomainParameters getDomainParameters() + { + return domainParams; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ECKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ECKeyParameters.java new file mode 100644 index 0000000..19825c5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ECKeyParameters.java @@ -0,0 +1,21 @@ +package org.bouncycastle.crypto.params; + +public class ECKeyParameters + extends AsymmetricKeyParameter +{ + ECDomainParameters params; + + protected ECKeyParameters( + boolean isPrivate, + ECDomainParameters params) + { + super(isPrivate); + + this.params = params; + } + + public ECDomainParameters getParameters() + { + return params; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java new file mode 100644 index 0000000..e8501d6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ECPrivateKeyParameters.java @@ -0,0 +1,22 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class ECPrivateKeyParameters + extends ECKeyParameters +{ + BigInteger d; + + public ECPrivateKeyParameters( + BigInteger d, + ECDomainParameters params) + { + super(true, params); + this.d = d; + } + + public BigInteger getD() + { + return d; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ECPublicKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ECPublicKeyParameters.java new file mode 100644 index 0000000..5fbea19 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ECPublicKeyParameters.java @@ -0,0 +1,22 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.math.ec.ECPoint; + +public class ECPublicKeyParameters + extends ECKeyParameters +{ + ECPoint Q; + + public ECPublicKeyParameters( + ECPoint Q, + ECDomainParameters params) + { + super(false, params); + this.Q = Q; + } + + public ECPoint getQ() + { + return Q; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java new file mode 100644 index 0000000..fef0fb5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyGenerationParameters.java @@ -0,0 +1,30 @@ +package org.bouncycastle.crypto.params; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.KeyGenerationParameters; + +public class ElGamalKeyGenerationParameters + extends KeyGenerationParameters +{ + private ElGamalParameters params; + + public ElGamalKeyGenerationParameters( + SecureRandom random, + ElGamalParameters params) + { + super(random, getStrength(params)); + + this.params = params; + } + + public ElGamalParameters getParameters() + { + return params; + } + + static int getStrength(ElGamalParameters params) + { + return params.getL() != 0 ? params.getL() : params.getP().bitLength(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyParameters.java new file mode 100644 index 0000000..7250693 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalKeyParameters.java @@ -0,0 +1,47 @@ +package org.bouncycastle.crypto.params; + + +public class ElGamalKeyParameters + extends AsymmetricKeyParameter +{ + private ElGamalParameters params; + + protected ElGamalKeyParameters( + boolean isPrivate, + ElGamalParameters params) + { + super(isPrivate); + + this.params = params; + } + + public ElGamalParameters getParameters() + { + return params; + } + + public int hashCode() + { + return (params != null) ? params.hashCode() : 0; + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof ElGamalKeyParameters)) + { + return false; + } + + ElGamalKeyParameters dhKey = (ElGamalKeyParameters)obj; + + if (params == null) + { + return dhKey.getParameters() == null; + } + else + { + return params.equals(dhKey.getParameters()); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ElGamalParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalParameters.java new file mode 100644 index 0000000..512dec6 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalParameters.java @@ -0,0 +1,69 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.CipherParameters; + +public class ElGamalParameters + implements CipherParameters +{ + private BigInteger g; + private BigInteger p; + private int l; + + public ElGamalParameters( + BigInteger p, + BigInteger g) + { + this(p, g, 0); + } + + public ElGamalParameters( + BigInteger p, + BigInteger g, + int l) + { + this.g = g; + this.p = p; + this.l = l; + } + + public BigInteger getP() + { + return p; + } + + /** + * return the generator - g + */ + public BigInteger getG() + { + return g; + } + + /** + * return private value limit - l + */ + public int getL() + { + return l; + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof ElGamalParameters)) + { + return false; + } + + ElGamalParameters pm = (ElGamalParameters)obj; + + return pm.getP().equals(p) && pm.getG().equals(g) && pm.getL() == l; + } + + public int hashCode() + { + return (getP().hashCode() ^ getG().hashCode()) + l; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java new file mode 100644 index 0000000..46df30e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalPrivateKeyParameters.java @@ -0,0 +1,46 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class ElGamalPrivateKeyParameters + extends ElGamalKeyParameters +{ + private BigInteger x; + + public ElGamalPrivateKeyParameters( + BigInteger x, + ElGamalParameters params) + { + super(true, params); + + this.x = x; + } + + public BigInteger getX() + { + return x; + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof ElGamalPrivateKeyParameters)) + { + return false; + } + + ElGamalPrivateKeyParameters pKey = (ElGamalPrivateKeyParameters)obj; + + if (!pKey.getX().equals(x)) + { + return false; + } + + return super.equals(obj); + } + + public int hashCode() + { + return getX().hashCode(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java new file mode 100644 index 0000000..b06b0f5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ElGamalPublicKeyParameters.java @@ -0,0 +1,41 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class ElGamalPublicKeyParameters + extends ElGamalKeyParameters +{ + private BigInteger y; + + public ElGamalPublicKeyParameters( + BigInteger y, + ElGamalParameters params) + { + super(false, params); + + this.y = y; + } + + public BigInteger getY() + { + return y; + } + + public int hashCode() + { + return y.hashCode() ^ super.hashCode(); + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof ElGamalPublicKeyParameters)) + { + return false; + } + + ElGamalPublicKeyParameters other = (ElGamalPublicKeyParameters)obj; + + return other.getY().equals(y) && super.equals(obj); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java new file mode 100644 index 0000000..0dc6f10 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyGenerationParameters.java @@ -0,0 +1,25 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.KeyGenerationParameters; + +import javabc.SecureRandom; + +public class GOST3410KeyGenerationParameters + extends KeyGenerationParameters +{ + private GOST3410Parameters params; + + public GOST3410KeyGenerationParameters( + SecureRandom random, + GOST3410Parameters params) + { + super(random, params.getP().bitLength() - 1); + + this.params = params; + } + + public GOST3410Parameters getParameters() + { + return params; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyParameters.java new file mode 100644 index 0000000..6716924 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410KeyParameters.java @@ -0,0 +1,21 @@ +package org.bouncycastle.crypto.params; + +public class GOST3410KeyParameters + extends AsymmetricKeyParameter +{ + private GOST3410Parameters params; + + public GOST3410KeyParameters( + boolean isPrivate, + GOST3410Parameters params) + { + super(isPrivate); + + this.params = params; + } + + public GOST3410Parameters getParameters() + { + return params; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/GOST3410Parameters.java b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410Parameters.java new file mode 100644 index 0000000..d55cad5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410Parameters.java @@ -0,0 +1,74 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +import javabc.BigInteger; + +public class GOST3410Parameters + implements CipherParameters +{ + private BigInteger p; + private BigInteger q; + private BigInteger a; + private GOST3410ValidationParameters validation; + + public GOST3410Parameters( + BigInteger p, + BigInteger q, + BigInteger a) + { + this.p = p; + this.q = q; + this.a = a; + } + + public GOST3410Parameters( + BigInteger p, + BigInteger q, + BigInteger a, + GOST3410ValidationParameters params) + { + this.a = a; + this.p = p; + this.q = q; + this.validation = params; + } + + public BigInteger getP() + { + return p; + } + + public BigInteger getQ() + { + return q; + } + + public BigInteger getA() + { + return a; + } + + public GOST3410ValidationParameters getValidationParameters() + { + return validation; + } + + public int hashCode() + { + return p.hashCode() ^ q.hashCode() ^ a.hashCode(); + } + + public boolean equals( + Object obj) + { + if (!(obj instanceof GOST3410Parameters)) + { + return false; + } + + GOST3410Parameters pm = (GOST3410Parameters)obj; + + return (pm.getP().equals(p) && pm.getQ().equals(q) && pm.getA().equals(a)); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java new file mode 100644 index 0000000..df9f6f7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410PrivateKeyParameters.java @@ -0,0 +1,23 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class GOST3410PrivateKeyParameters + extends GOST3410KeyParameters +{ + private BigInteger x; + + public GOST3410PrivateKeyParameters( + BigInteger x, + GOST3410Parameters params) + { + super(true, params); + + this.x = x; + } + + public BigInteger getX() + { + return x; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java new file mode 100644 index 0000000..4ea66df --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410PublicKeyParameters.java @@ -0,0 +1,23 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class GOST3410PublicKeyParameters + extends GOST3410KeyParameters +{ + private BigInteger y; + + public GOST3410PublicKeyParameters( + BigInteger y, + GOST3410Parameters params) + { + super(false, params); + + this.y = y; + } + + public BigInteger getY() + { + return y; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java new file mode 100644 index 0000000..c2a4fb5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/GOST3410ValidationParameters.java @@ -0,0 +1,84 @@ +package org.bouncycastle.crypto.params; + +public class GOST3410ValidationParameters +{ + private int x0; + private int c; + private long x0L; + private long cL; + + + public GOST3410ValidationParameters( + int x0, + int c) + { + this.x0 = x0; + this.c = c; + } + + public GOST3410ValidationParameters( + long x0L, + long cL) + { + this.x0L = x0L; + this.cL = cL; + } + + public int getC() + { + return c; + } + + public int getX0() + { + return x0; + } + + public long getCL() + { + return cL; + } + + public long getX0L() + { + return x0L; + } + + public boolean equals( + Object o) + { + if (!(o instanceof GOST3410ValidationParameters)) + { + return false; + } + + GOST3410ValidationParameters other = (GOST3410ValidationParameters)o; + + if (other.c != this.c) + { + return false; + } + + if (other.x0 != this.x0) + { + return false; + } + + if (other.cL != this.cL) + { + return false; + } + + if (other.x0L != this.x0L) + { + return false; + } + + return true; + } + + public int hashCode() + { + return x0 ^ c ^ (int) x0L ^ (int)(x0L >> 32) ^ (int) cL ^ (int)(cL >> 32); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/IESParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/IESParameters.java new file mode 100644 index 0000000..0600b34 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/IESParameters.java @@ -0,0 +1,44 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +/** + * parameters for using an integrated cipher in stream mode. + */ +public class IESParameters + implements CipherParameters +{ + private byte[] derivation; + private byte[] encoding; + private int macKeySize; + + /** + * @param derivation the derivation parameter for the KDF function. + * @param encoding the encoding parameter for the KDF function. + * @param macKeySize the size of the MAC key (in bits). + */ + public IESParameters( + byte[] derivation, + byte[] encoding, + int macKeySize) + { + this.derivation = derivation; + this.encoding = encoding; + this.macKeySize = macKeySize; + } + + public byte[] getDerivationV() + { + return derivation; + } + + public byte[] getEncodingV() + { + return encoding; + } + + public int getMacKeySize() + { + return macKeySize; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/IESWithCipherParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/IESWithCipherParameters.java new file mode 100644 index 0000000..ef61b2c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/IESWithCipherParameters.java @@ -0,0 +1,30 @@ +package org.bouncycastle.crypto.params; + + +public class IESWithCipherParameters + extends IESParameters +{ + private int cipherKeySize; + + /** + * @param derivation the derivation parameter for the KDF function. + * @param encoding the encoding parameter for the KDF function. + * @param macKeySize the size of the MAC key (in bits). + * @param cipherKeySize the size of the associated Cipher key (in bits). + */ + public IESWithCipherParameters( + byte[] derivation, + byte[] encoding, + int macKeySize, + int cipherKeySize) + { + super(derivation, encoding, macKeySize); + + this.cipherKeySize = cipherKeySize; + } + + public int getCipherKeySize() + { + return cipherKeySize; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ISO18033KDFParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/ISO18033KDFParameters.java new file mode 100644 index 0000000..8dffe2e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ISO18033KDFParameters.java @@ -0,0 +1,23 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.DerivationParameters; + +/** + * parameters for Key derivation functions for ISO-18033 + */ +public class ISO18033KDFParameters + implements DerivationParameters +{ + byte[] seed; + + public ISO18033KDFParameters( + byte[] seed) + { + this.seed = seed; + } + + public byte[] getSeed() + { + return seed; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/KDFParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/KDFParameters.java new file mode 100644 index 0000000..f3bac64 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/KDFParameters.java @@ -0,0 +1,31 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.DerivationParameters; + +/** + * parameters for Key derivation functions for IEEE P1363a + */ +public class KDFParameters + implements DerivationParameters +{ + byte[] iv; + byte[] shared; + + public KDFParameters( + byte[] shared, + byte[] iv) + { + this.shared = shared; + this.iv = iv; + } + + public byte[] getSharedSecret() + { + return shared; + } + + public byte[] getIV() + { + return iv; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/KeyParameter.java b/common/src/main/java/org/bouncycastle/crypto/params/KeyParameter.java new file mode 100644 index 0000000..5c4fe0e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/KeyParameter.java @@ -0,0 +1,30 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class KeyParameter + implements CipherParameters +{ + private byte[] key; + + public KeyParameter( + byte[] key) + { + this(key, 0, key.length); + } + + public KeyParameter( + byte[] key, + int keyOff, + int keyLen) + { + this.key = new byte[keyLen]; + + System.arraycopy(key, keyOff, this.key, 0, keyLen); + } + + public byte[] getKey() + { + return key; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/MGFParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/MGFParameters.java new file mode 100644 index 0000000..847bd98 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/MGFParameters.java @@ -0,0 +1,32 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.DerivationParameters; + +/** + * parameters for mask derivation functions. + */ +public class MGFParameters + implements DerivationParameters +{ + byte[] seed; + + public MGFParameters( + byte[] seed) + { + this(seed, 0, seed.length); + } + + public MGFParameters( + byte[] seed, + int off, + int len) + { + this.seed = new byte[len]; + System.arraycopy(seed, off, this.seed, 0, len); + } + + public byte[] getSeed() + { + return seed; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/MQVPrivateParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/MQVPrivateParameters.java new file mode 100644 index 0000000..832c07f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/MQVPrivateParameters.java @@ -0,0 +1,43 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class MQVPrivateParameters + implements CipherParameters +{ + private ECPrivateKeyParameters staticPrivateKey; + private ECPrivateKeyParameters ephemeralPrivateKey; + private ECPublicKeyParameters ephemeralPublicKey; + + public MQVPrivateParameters( + ECPrivateKeyParameters staticPrivateKey, + ECPrivateKeyParameters ephemeralPrivateKey) + { + this(staticPrivateKey, ephemeralPrivateKey, null); + } + + public MQVPrivateParameters( + ECPrivateKeyParameters staticPrivateKey, + ECPrivateKeyParameters ephemeralPrivateKey, + ECPublicKeyParameters ephemeralPublicKey) + { + this.staticPrivateKey = staticPrivateKey; + this.ephemeralPrivateKey = ephemeralPrivateKey; + this.ephemeralPublicKey = ephemeralPublicKey; + } + + public ECPrivateKeyParameters getStaticPrivateKey() + { + return staticPrivateKey; + } + + public ECPrivateKeyParameters getEphemeralPrivateKey() + { + return ephemeralPrivateKey; + } + + public ECPublicKeyParameters getEphemeralPublicKey() + { + return ephemeralPublicKey; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/MQVPublicParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/MQVPublicParameters.java new file mode 100644 index 0000000..b3b2467 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/MQVPublicParameters.java @@ -0,0 +1,28 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class MQVPublicParameters + implements CipherParameters +{ + private ECPublicKeyParameters staticPublicKey; + private ECPublicKeyParameters ephemeralPublicKey; + + public MQVPublicParameters( + ECPublicKeyParameters staticPublicKey, + ECPublicKeyParameters ephemeralPublicKey) + { + this.staticPublicKey = staticPublicKey; + this.ephemeralPublicKey = ephemeralPublicKey; + } + + public ECPublicKeyParameters getStaticPublicKey() + { + return staticPublicKey; + } + + public ECPublicKeyParameters getEphemeralPublicKey() + { + return ephemeralPublicKey; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java new file mode 100644 index 0000000..68bc254 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyGenerationParameters.java @@ -0,0 +1,97 @@ +package org.bouncycastle.crypto.params; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.KeyGenerationParameters; + +/** + * Parameters for NaccacheStern public private key generation. For details on + * this cipher, please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ +public class NaccacheSternKeyGenerationParameters extends KeyGenerationParameters +{ + + // private BigInteger publicExponent; + private int certainty; + + private int cntSmallPrimes; + + private boolean debug = false; + + /** + * Parameters for generating a NaccacheStern KeyPair. + * + * @param random + * The source of randomness + * @param strength + * The desired strength of the Key in Bits + * @param certainty + * the probability that the generated primes are not really prime + * as integer: 2^(-certainty) is then the probability + * @param cntSmallPrimes + * How many small key factors are desired + */ + public NaccacheSternKeyGenerationParameters(SecureRandom random, int strength, int certainty, int cntSmallPrimes) + { + this(random, strength, certainty, cntSmallPrimes, false); + } + + /** + * Parameters for a NaccacheStern KeyPair. + * + * @param random + * The source of randomness + * @param strength + * The desired strength of the Key in Bits + * @param certainty + * the probability that the generated primes are not really prime + * as integer: 2^(-certainty) is then the probability + * @param cntSmallPrimes + * How many small key factors are desired + * @param debug + * Turn debugging on or off (reveals secret information, use with + * caution) + */ + public NaccacheSternKeyGenerationParameters(SecureRandom random, + int strength, int certainty, int cntSmallPrimes, boolean debug) + { + super(random, strength); + + this.certainty = certainty; + if (cntSmallPrimes % 2 == 1) + { + throw new IllegalArgumentException("cntSmallPrimes must be a multiple of 2"); + } + if (cntSmallPrimes < 30) + { + throw new IllegalArgumentException("cntSmallPrimes must be >= 30 for security reasons"); + } + this.cntSmallPrimes = cntSmallPrimes; + + this.debug = debug; + } + + /** + * @return Returns the certainty. + */ + public int getCertainty() + { + return certainty; + } + + /** + * @return Returns the cntSmallPrimes. + */ + public int getCntSmallPrimes() + { + return cntSmallPrimes; + } + + public boolean isDebug() + { + return debug; + } + +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java new file mode 100644 index 0000000..c075d60 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternKeyParameters.java @@ -0,0 +1,53 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +/** + * Public key parameters for NaccacheStern cipher. For details on this cipher, + * please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ +public class NaccacheSternKeyParameters extends AsymmetricKeyParameter +{ + + private BigInteger g, n; + + int lowerSigmaBound; + + /** + * @param privateKey + */ + public NaccacheSternKeyParameters(boolean privateKey, BigInteger g, BigInteger n, int lowerSigmaBound) + { + super(privateKey); + this.g = g; + this.n = n; + this.lowerSigmaBound = lowerSigmaBound; + } + + /** + * @return Returns the g. + */ + public BigInteger getG() + { + return g; + } + + /** + * @return Returns the lowerSigmaBound. + */ + public int getLowerSigmaBound() + { + return lowerSigmaBound; + } + + /** + * @return Returns the n. + */ + public BigInteger getModulus() + { + return n; + } + +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java new file mode 100644 index 0000000..f91eb8a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/NaccacheSternPrivateKeyParameters.java @@ -0,0 +1,50 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; +import java.util.Vector; + +/** + * Private key parameters for NaccacheStern cipher. For details on this cipher, + * please see + * + * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + */ +public class NaccacheSternPrivateKeyParameters extends NaccacheSternKeyParameters +{ + private BigInteger phi_n; + private Vector smallPrimes; + + /** + * Constructs a NaccacheSternPrivateKey + * + * @param g + * the public enryption parameter g + * @param n + * the public modulus n = p*q + * @param lowerSigmaBound + * the public lower sigma bound up to which data can be encrypted + * @param smallPrimes + * the small primes, of which sigma is constructed in the right + * order + * @param phi_n + * the private modulus phi(n) = (p-1)(q-1) + */ + public NaccacheSternPrivateKeyParameters(BigInteger g, BigInteger n, + int lowerSigmaBound, Vector smallPrimes, + BigInteger phi_n) + { + super(true, g, n, lowerSigmaBound); + this.smallPrimes = smallPrimes; + this.phi_n = phi_n; + } + + public BigInteger getPhi_n() + { + return phi_n; + } + + public Vector getSmallPrimes() + { + return smallPrimes; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithIV.java b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithIV.java new file mode 100644 index 0000000..4a1e6e9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithIV.java @@ -0,0 +1,39 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class ParametersWithIV + implements CipherParameters +{ + private byte[] iv; + private CipherParameters parameters; + + public ParametersWithIV( + CipherParameters parameters, + byte[] iv) + { + this(parameters, iv, 0, iv.length); + } + + public ParametersWithIV( + CipherParameters parameters, + byte[] iv, + int ivOff, + int ivLen) + { + this.iv = new byte[ivLen]; + this.parameters = parameters; + + System.arraycopy(iv, ivOff, this.iv, 0, ivLen); + } + + public byte[] getIV() + { + return iv; + } + + public CipherParameters getParameters() + { + return parameters; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithRandom.java b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithRandom.java new file mode 100644 index 0000000..d5510ed --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithRandom.java @@ -0,0 +1,36 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +import javabc.SecureRandom; + +public class ParametersWithRandom + implements CipherParameters +{ + private SecureRandom random; + private CipherParameters parameters; + + public ParametersWithRandom( + CipherParameters parameters, + SecureRandom random) + { + this.random = random; + this.parameters = parameters; + } + + public ParametersWithRandom( + CipherParameters parameters) + { + this(parameters, new SecureRandom()); + } + + public SecureRandom getRandom() + { + return random; + } + + public CipherParameters getParameters() + { + return parameters; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSBox.java b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSBox.java new file mode 100644 index 0000000..b226a9d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSBox.java @@ -0,0 +1,28 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class ParametersWithSBox + implements CipherParameters +{ + private CipherParameters parameters; + private byte[] sBox; + + public ParametersWithSBox( + CipherParameters parameters, + byte[] sBox) + { + this.parameters = parameters; + this.sBox = sBox; + } + + public byte[] getSBox() + { + return sBox; + } + + public CipherParameters getParameters() + { + return parameters; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSalt.java b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSalt.java new file mode 100644 index 0000000..73765dd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/ParametersWithSalt.java @@ -0,0 +1,42 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +/** + * Cipher parameters with a fixed salt value associated with them. + */ +public class ParametersWithSalt + implements CipherParameters +{ + private byte[] salt; + private CipherParameters parameters; + + public ParametersWithSalt( + CipherParameters parameters, + byte[] salt) + { + this(parameters, salt, 0, salt.length); + } + + public ParametersWithSalt( + CipherParameters parameters, + byte[] salt, + int saltOff, + int saltLen) + { + this.salt = new byte[saltLen]; + this.parameters = parameters; + + System.arraycopy(salt, saltOff, this.salt, 0, saltLen); + } + + public byte[] getSalt() + { + return salt; + } + + public CipherParameters getParameters() + { + return parameters; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/RC2Parameters.java b/common/src/main/java/org/bouncycastle/crypto/params/RC2Parameters.java new file mode 100644 index 0000000..dc33ec5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/RC2Parameters.java @@ -0,0 +1,36 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class RC2Parameters + implements CipherParameters +{ + private byte[] key; + private int bits; + + public RC2Parameters( + byte[] key) + { + this(key, (key.length > 128) ? 1024 : (key.length * 8)); + } + + public RC2Parameters( + byte[] key, + int bits) + { + this.key = new byte[key.length]; + this.bits = bits; + + System.arraycopy(key, 0, this.key, 0, key.length); + } + + public byte[] getKey() + { + return key; + } + + public int getEffectiveKeyBits() + { + return bits; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/RC5Parameters.java b/common/src/main/java/org/bouncycastle/crypto/params/RC5Parameters.java new file mode 100644 index 0000000..6cbd57f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/RC5Parameters.java @@ -0,0 +1,35 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +public class RC5Parameters + implements CipherParameters +{ + private byte[] key; + private int rounds; + + public RC5Parameters( + byte[] key, + int rounds) + { + if (key.length > 255) + { + throw new IllegalArgumentException("RC5 key length can be no greater than 255"); + } + + this.key = new byte[key.length]; + this.rounds = rounds; + + System.arraycopy(key, 0, this.key, 0, key.length); + } + + public byte[] getKey() + { + return key; + } + + public int getRounds() + { + return rounds; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/RSABlindingParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/RSABlindingParameters.java new file mode 100644 index 0000000..2fafacb --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/RSABlindingParameters.java @@ -0,0 +1,35 @@ +package org.bouncycastle.crypto.params; + +import org.bouncycastle.crypto.CipherParameters; + +import javabc.BigInteger; + +public class RSABlindingParameters + implements CipherParameters +{ + private RSAKeyParameters publicKey; + private BigInteger blindingFactor; + + public RSABlindingParameters( + RSAKeyParameters publicKey, + BigInteger blindingFactor) + { + if (publicKey instanceof RSAPrivateCrtKeyParameters) + { + throw new IllegalArgumentException("RSA parameters should be for a public key"); + } + + this.publicKey = publicKey; + this.blindingFactor = blindingFactor; + } + + public RSAKeyParameters getPublicKey() + { + return publicKey; + } + + public BigInteger getBlindingFactor() + { + return blindingFactor; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java new file mode 100644 index 0000000..fd9b1c8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/RSAKeyGenerationParameters.java @@ -0,0 +1,48 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.KeyGenerationParameters; + +public class RSAKeyGenerationParameters + extends KeyGenerationParameters +{ + private BigInteger publicExponent; + private int certainty; + + public RSAKeyGenerationParameters( + BigInteger publicExponent, + SecureRandom random, + int strength, + int certainty) + { + super(random, strength); + + if (strength < 12) + { + throw new IllegalArgumentException("key strength too small"); + } + + // + // public exponent cannot be even + // + if (!publicExponent.testBit(0)) + { + throw new IllegalArgumentException("public exponent cannot be even"); + } + + this.publicExponent = publicExponent; + this.certainty = certainty; + } + + public BigInteger getPublicExponent() + { + return publicExponent; + } + + public int getCertainty() + { + return certainty; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/RSAKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/RSAKeyParameters.java new file mode 100644 index 0000000..591f2a5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/RSAKeyParameters.java @@ -0,0 +1,31 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class RSAKeyParameters + extends AsymmetricKeyParameter +{ + private BigInteger modulus; + private BigInteger exponent; + + public RSAKeyParameters( + boolean isPrivate, + BigInteger modulus, + BigInteger exponent) + { + super(isPrivate); + + this.modulus = modulus; + this.exponent = exponent; + } + + public BigInteger getModulus() + { + return modulus; + } + + public BigInteger getExponent() + { + return exponent; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java b/common/src/main/java/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java new file mode 100644 index 0000000..d97cd3e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/params/RSAPrivateCrtKeyParameters.java @@ -0,0 +1,67 @@ +package org.bouncycastle.crypto.params; + +import javabc.BigInteger; + +public class RSAPrivateCrtKeyParameters + extends RSAKeyParameters +{ + private BigInteger e; + private BigInteger p; + private BigInteger q; + private BigInteger dP; + private BigInteger dQ; + private BigInteger qInv; + + /** + * + */ + public RSAPrivateCrtKeyParameters( + BigInteger modulus, + BigInteger publicExponent, + BigInteger privateExponent, + BigInteger p, + BigInteger q, + BigInteger dP, + BigInteger dQ, + BigInteger qInv) + { + super(true, modulus, privateExponent); + + this.e = publicExponent; + this.p = p; + this.q = q; + this.dP = dP; + this.dQ = dQ; + this.qInv = qInv; + } + + public BigInteger getPublicExponent() + { + return e; + } + + public BigInteger getP() + { + return p; + } + + public BigInteger getQ() + { + return q; + } + + public BigInteger getDP() + { + return dP; + } + + public BigInteger getDQ() + { + return dQ; + } + + public BigInteger getQInv() + { + return qInv; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/prng/DigestRandomGenerator.java b/common/src/main/java/org/bouncycastle/crypto/prng/DigestRandomGenerator.java new file mode 100644 index 0000000..f36b62c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/prng/DigestRandomGenerator.java @@ -0,0 +1,123 @@ +package org.bouncycastle.crypto.prng; + +import org.bouncycastle.crypto.Digest; + +/** + * Random generation based on the digest with counter. Calling addSeedMaterial will + * always increase the entropy of the hash. + *

        + * Internal access to the digest is synchronized so a single one of these can be shared. + *

        + */ +public class DigestRandomGenerator + implements RandomGenerator +{ + private static long CYCLE_COUNT = 10; + + private long stateCounter; + private long seedCounter; + private Digest digest; + private byte[] state; + private byte[] seed; + + // public constructors + public DigestRandomGenerator( + Digest digest) + { + this.digest = digest; + + this.seed = new byte[digest.getDigestSize()]; + this.seedCounter = 1; + + this.state = new byte[digest.getDigestSize()]; + this.stateCounter = 1; + } + + public void addSeedMaterial(byte[] inSeed) + { + synchronized (this) + { + digestUpdate(inSeed); + digestUpdate(seed); + digestDoFinal(seed); + } + } + + public void addSeedMaterial(long rSeed) + { + synchronized (this) + { + digestAddCounter(rSeed); + digestUpdate(seed); + + digestDoFinal(seed); + } + } + + public void nextBytes(byte[] bytes) + { + nextBytes(bytes, 0, bytes.length); + } + + public void nextBytes(byte[] bytes, int start, int len) + { + synchronized (this) + { + int stateOff = 0; + + generateState(); + + int end = start + len; + for (int i = start; i != end; i++) + { + if (stateOff == state.length) + { + generateState(); + stateOff = 0; + } + bytes[i] = state[stateOff++]; + } + } + } + + private void cycleSeed() + { + digestUpdate(seed); + digestAddCounter(seedCounter++); + + digestDoFinal(seed); + } + + private void generateState() + { + digestAddCounter(stateCounter++); + digestUpdate(state); + digestUpdate(seed); + + digestDoFinal(state); + + if ((stateCounter % CYCLE_COUNT) == 0) + { + cycleSeed(); + } + } + + private void digestAddCounter(long seed) + { + for (int i = 0; i != 8; i++) + { + digest.update((byte)seed); + seed >>>= 8; + } + } + + private void digestUpdate(byte[] inSeed) + { + digest.update(inSeed, 0, inSeed.length); + } + + private void digestDoFinal(byte[] result) + { + digest.doFinal(result, 0); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/prng/RandomGenerator.java b/common/src/main/java/org/bouncycastle/crypto/prng/RandomGenerator.java new file mode 100644 index 0000000..47ff68e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/prng/RandomGenerator.java @@ -0,0 +1,38 @@ +package org.bouncycastle.crypto.prng; + +/** + * Generic interface for objects generating random bytes. + */ +public interface RandomGenerator +{ + /** + * Add more seed material to the generator. + * + * @param seed a byte array to be mixed into the generator's state. + */ + void addSeedMaterial(byte[] seed); + + /** + * Add more seed material to the generator. + * + * @param seed a long value to be mixed into the generator's state. + */ + void addSeedMaterial(long seed); + + /** + * Fill bytes with random values. + * + * @param bytes byte array to be filled. + */ + void nextBytes(byte[] bytes); + + /** + * Fill part of bytes with random values. + * + * @param bytes byte array to be filled. + * @param start index to start filling at. + * @param len length of segment to fill. + */ + void nextBytes(byte[] bytes, int start, int len); + +} diff --git a/common/src/main/java/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java b/common/src/main/java/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java new file mode 100644 index 0000000..fbb2639 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/prng/ReversedWindowGenerator.java @@ -0,0 +1,111 @@ +package org.bouncycastle.crypto.prng; + +/** + * Takes bytes generated by an underling RandomGenerator and reverses the order in + * each small window (of configurable size). + *

        + * Access to internals is synchronized so a single one of these can be shared. + *

        + */ +public class ReversedWindowGenerator + implements RandomGenerator +{ + private final RandomGenerator generator; + + private byte[] window; + private int windowCount; + + public ReversedWindowGenerator( + RandomGenerator generator, + int windowSize) + { + if (generator == null) + { + throw new IllegalArgumentException("generator cannot be null"); + } + if (windowSize < 2) + { + throw new IllegalArgumentException("windowSize must be at least 2"); + } + + this.generator = generator; + this.window = new byte[windowSize]; + } + + /** + * Add more seed material to the generator. + * + * @param seed a byte array to be mixed into the generator's state. + */ + public void addSeedMaterial( + byte[] seed) + { + synchronized (this) + { + windowCount = 0; + generator.addSeedMaterial(seed); + } + } + + /** + * Add more seed material to the generator. + * + * @param seed a long value to be mixed into the generator's state. + */ + public void addSeedMaterial( + long seed) + { + synchronized (this) + { + windowCount = 0; + generator.addSeedMaterial(seed); + } + } + + /** + * Fill bytes with random values. + * + * @param bytes byte array to be filled. + */ + public void nextBytes( + byte[] bytes) + { + doNextBytes(bytes, 0, bytes.length); + } + + /** + * Fill part of bytes with random values. + * + * @param bytes byte array to be filled. + * @param start index to start filling at. + * @param len length of segment to fill. + */ + public void nextBytes( + byte[] bytes, + int start, + int len) + { + doNextBytes(bytes, start, len); + } + + private void doNextBytes( + byte[] bytes, + int start, + int len) + { + synchronized (this) + { + int done = 0; + while (done < len) + { + if (windowCount < 1) + { + generator.nextBytes(window, 0, window.length); + windowCount = window.length; + } + + bytes[start + done++] = window[--windowCount]; + } + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java b/common/src/main/java/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java new file mode 100644 index 0000000..6b2d5ec --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/prng/ThreadedSeedGenerator.java @@ -0,0 +1,95 @@ +package org.bouncycastle.crypto.prng; + +/** + * A thread based seed generator - one source of randomness. + *

        + * Based on an idea from Marcus Lippert. + *

        + */ +public class ThreadedSeedGenerator +{ + private class SeedGenerator + implements Runnable + { + private volatile int counter = 0; + private volatile boolean stop = false; + + public void run() + { + while (!this.stop) + { + this.counter++; + } + + } + + public byte[] generateSeed( + int numbytes, + boolean fast) + { + Thread t = new Thread(this); + byte[] result = new byte[numbytes]; + this.counter = 0; + this.stop = false; + int last = 0; + int end; + + t.start(); + if(fast) + { + end = numbytes; + } + else + { + end = numbytes * 8; + } + for (int i = 0; i < end; i++) + { + while (this.counter == last) + { + try + { + Thread.sleep(1); + } + catch (InterruptedException e) + { + // ignore + } + } + last = this.counter; + if (fast) + { + result[i] = (byte) (last & 0xff); + } + else + { + int bytepos = i/8; + result[bytepos] = (byte) ((result[bytepos] << 1) | (last & 1)); + } + + } + stop = true; + return result; + } + } + + /** + * Generate seed bytes. Set fast to false for best quality. + *

        + * If fast is set to true, the code should be round about 8 times faster when + * generating a long sequence of random bytes. 20 bytes of random values using + * the fast mode take less than half a second on a Nokia e70. If fast is set to false, + * it takes round about 2500 ms. + *

        + * @param numBytes the number of bytes to generate + * @param fast true if fast mode should be used + */ + public byte[] generateSeed( + int numBytes, + boolean fast) + { + SeedGenerator gen = new SeedGenerator(); + + return gen.generateSeed(numBytes, fast); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java b/common/src/main/java/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java new file mode 100644 index 0000000..d218e97 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/prng/VMPCRandomGenerator.java @@ -0,0 +1,131 @@ +package org.bouncycastle.crypto.prng; + +public class VMPCRandomGenerator implements RandomGenerator +{ + private byte n = 0; + + /** + * Permutation generated by code: + * // First 1850 fractional digit of Pi number. + * byte[] key = new BigInteger("14159265358979323846...5068006422512520511").toByteArray(); + * s = 0; + * P = new byte[256]; + * for (int i = 0; i < 256; i++) { + * P[i] = (byte) i; + * } + * for (int m = 0; m < 768; m++) { + * s = P[(s + P[m & 0xff] + key[m % key.length]) & 0xff]; + * byte temp = P[m & 0xff]; + * P[m & 0xff] = P[s & 0xff]; + * P[s & 0xff] = temp; + * } + */ + private byte[] P = + { + (byte) 0xbb, (byte) 0x2c, (byte) 0x62, (byte) 0x7f, + (byte) 0xb5, (byte) 0xaa, (byte) 0xd4, (byte) 0x0d, (byte) 0x81, + (byte) 0xfe, (byte) 0xb2, (byte) 0x82, (byte) 0xcb, (byte) 0xa0, + (byte) 0xa1, (byte) 0x08, (byte) 0x18, (byte) 0x71, (byte) 0x56, + (byte) 0xe8, (byte) 0x49, (byte) 0x02, (byte) 0x10, (byte) 0xc4, + (byte) 0xde, (byte) 0x35, (byte) 0xa5, (byte) 0xec, (byte) 0x80, + (byte) 0x12, (byte) 0xb8, (byte) 0x69, (byte) 0xda, (byte) 0x2f, + (byte) 0x75, (byte) 0xcc, (byte) 0xa2, (byte) 0x09, (byte) 0x36, + (byte) 0x03, (byte) 0x61, (byte) 0x2d, (byte) 0xfd, (byte) 0xe0, + (byte) 0xdd, (byte) 0x05, (byte) 0x43, (byte) 0x90, (byte) 0xad, + (byte) 0xc8, (byte) 0xe1, (byte) 0xaf, (byte) 0x57, (byte) 0x9b, + (byte) 0x4c, (byte) 0xd8, (byte) 0x51, (byte) 0xae, (byte) 0x50, + (byte) 0x85, (byte) 0x3c, (byte) 0x0a, (byte) 0xe4, (byte) 0xf3, + (byte) 0x9c, (byte) 0x26, (byte) 0x23, (byte) 0x53, (byte) 0xc9, + (byte) 0x83, (byte) 0x97, (byte) 0x46, (byte) 0xb1, (byte) 0x99, + (byte) 0x64, (byte) 0x31, (byte) 0x77, (byte) 0xd5, (byte) 0x1d, + (byte) 0xd6, (byte) 0x78, (byte) 0xbd, (byte) 0x5e, (byte) 0xb0, + (byte) 0x8a, (byte) 0x22, (byte) 0x38, (byte) 0xf8, (byte) 0x68, + (byte) 0x2b, (byte) 0x2a, (byte) 0xc5, (byte) 0xd3, (byte) 0xf7, + (byte) 0xbc, (byte) 0x6f, (byte) 0xdf, (byte) 0x04, (byte) 0xe5, + (byte) 0x95, (byte) 0x3e, (byte) 0x25, (byte) 0x86, (byte) 0xa6, + (byte) 0x0b, (byte) 0x8f, (byte) 0xf1, (byte) 0x24, (byte) 0x0e, + (byte) 0xd7, (byte) 0x40, (byte) 0xb3, (byte) 0xcf, (byte) 0x7e, + (byte) 0x06, (byte) 0x15, (byte) 0x9a, (byte) 0x4d, (byte) 0x1c, + (byte) 0xa3, (byte) 0xdb, (byte) 0x32, (byte) 0x92, (byte) 0x58, + (byte) 0x11, (byte) 0x27, (byte) 0xf4, (byte) 0x59, (byte) 0xd0, + (byte) 0x4e, (byte) 0x6a, (byte) 0x17, (byte) 0x5b, (byte) 0xac, + (byte) 0xff, (byte) 0x07, (byte) 0xc0, (byte) 0x65, (byte) 0x79, + (byte) 0xfc, (byte) 0xc7, (byte) 0xcd, (byte) 0x76, (byte) 0x42, + (byte) 0x5d, (byte) 0xe7, (byte) 0x3a, (byte) 0x34, (byte) 0x7a, + (byte) 0x30, (byte) 0x28, (byte) 0x0f, (byte) 0x73, (byte) 0x01, + (byte) 0xf9, (byte) 0xd1, (byte) 0xd2, (byte) 0x19, (byte) 0xe9, + (byte) 0x91, (byte) 0xb9, (byte) 0x5a, (byte) 0xed, (byte) 0x41, + (byte) 0x6d, (byte) 0xb4, (byte) 0xc3, (byte) 0x9e, (byte) 0xbf, + (byte) 0x63, (byte) 0xfa, (byte) 0x1f, (byte) 0x33, (byte) 0x60, + (byte) 0x47, (byte) 0x89, (byte) 0xf0, (byte) 0x96, (byte) 0x1a, + (byte) 0x5f, (byte) 0x93, (byte) 0x3d, (byte) 0x37, (byte) 0x4b, + (byte) 0xd9, (byte) 0xa8, (byte) 0xc1, (byte) 0x1b, (byte) 0xf6, + (byte) 0x39, (byte) 0x8b, (byte) 0xb7, (byte) 0x0c, (byte) 0x20, + (byte) 0xce, (byte) 0x88, (byte) 0x6e, (byte) 0xb6, (byte) 0x74, + (byte) 0x8e, (byte) 0x8d, (byte) 0x16, (byte) 0x29, (byte) 0xf2, + (byte) 0x87, (byte) 0xf5, (byte) 0xeb, (byte) 0x70, (byte) 0xe3, + (byte) 0xfb, (byte) 0x55, (byte) 0x9f, (byte) 0xc6, (byte) 0x44, + (byte) 0x4a, (byte) 0x45, (byte) 0x7d, (byte) 0xe2, (byte) 0x6b, + (byte) 0x5c, (byte) 0x6c, (byte) 0x66, (byte) 0xa9, (byte) 0x8c, + (byte) 0xee, (byte) 0x84, (byte) 0x13, (byte) 0xa7, (byte) 0x1e, + (byte) 0x9d, (byte) 0xdc, (byte) 0x67, (byte) 0x48, (byte) 0xba, + (byte) 0x2e, (byte) 0xe6, (byte) 0xa4, (byte) 0xab, (byte) 0x7c, + (byte) 0x94, (byte) 0x00, (byte) 0x21, (byte) 0xef, (byte) 0xea, + (byte) 0xbe, (byte) 0xca, (byte) 0x72, (byte) 0x4f, (byte) 0x52, + (byte) 0x98, (byte) 0x3f, (byte) 0xc2, (byte) 0x14, (byte) 0x7b, + (byte) 0x3b, (byte) 0x54 }; + + /** + * Value generated in the same way as {@link VMPCRandomGenerator#P}; + */ + private byte s = (byte) 0xbe; + + public VMPCRandomGenerator() + { + } + + public void addSeedMaterial(byte[] seed) + { + for (int m = 0; m < seed.length; m++) + { + s = P[(s + P[n & 0xff] + seed[m]) & 0xff]; + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte) ((n + 1) & 0xff); + } + } + + public void addSeedMaterial(long seed) + { + byte[] s = new byte[4]; + s[3] = (byte) (seed & 0x000000ff); + s[2] = (byte) ((seed & 0x0000ff00) >> 8); + s[1] = (byte) ((seed & 0x00ff0000) >> 16); + s[0] = (byte) ((seed & 0xff000000) >> 24); + addSeedMaterial(s); + } + + public void nextBytes(byte[] bytes) + { + nextBytes(bytes, 0, bytes.length); + } + + public void nextBytes(byte[] bytes, int start, int len) + { + synchronized (P) + { + int end = start + len; + for (int i = start; i != end; i++) + { + s = P[(s + P[n & 0xff]) & 0xff]; + bytes[i] = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]; + byte temp = P[n & 0xff]; + P[n & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + n = (byte) ((n + 1) & 0xff); + } + } + } + +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/DSADigestSigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/DSADigestSigner.java new file mode 100644 index 0000000..9d6c2e2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/DSADigestSigner.java @@ -0,0 +1,163 @@ +package org.bouncycastle.crypto.signers; + +import java.io.IOException; +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERInteger; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +public class DSADigestSigner + implements Signer +{ + private final Digest digest; + private final DSA dsaSigner; + private boolean forSigning; + + public DSADigestSigner( + DSA signer, + Digest digest) + { + this.digest = digest; + this.dsaSigner = signer; + } + + public void init( + boolean forSigning, + CipherParameters parameters) + { + this.forSigning = forSigning; + + AsymmetricKeyParameter k; + + if (parameters instanceof ParametersWithRandom) + { + k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).getParameters(); + } + else + { + k = (AsymmetricKeyParameter)parameters; + } + + if (forSigning && !k.isPrivate()) + { + throw new IllegalArgumentException("Signing Requires Private Key."); + } + + if (!forSigning && k.isPrivate()) + { + throw new IllegalArgumentException("Verification Requires Public Key."); + } + + reset(); + + dsaSigner.init(forSigning, parameters); + } + + /** + * update the internal digest with the byte b + */ + public void update( + byte input) + { + digest.update(input); + } + + /** + * update the internal digest with the byte array in + */ + public void update( + byte[] input, + int inOff, + int length) + { + digest.update(input, inOff, length); + } + + /** + * Generate a signature for the message we've been loaded with using + * the key we were initialised with. + */ + public byte[] generateSignature() + { + if (!forSigning) + { + throw new IllegalStateException("DSADigestSigner not initialised for signature generation."); + } + + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + + BigInteger[] sig = dsaSigner.generateSignature(hash); + + try + { + return derEncode(sig[0], sig[1]); + } + catch (IOException e) + { + throw new IllegalStateException("unable to encode signature"); + } + } + + public boolean verifySignature( + byte[] signature) + { + if (forSigning) + { + throw new IllegalStateException("DSADigestSigner not initialised for verification"); + } + + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + + try + { + BigInteger[] sig = derDecode(signature); + return dsaSigner.verifySignature(hash, sig[0], sig[1]); + } + catch (IOException e) + { + return false; + } + } + + public void reset() + { + digest.reset(); + } + + private byte[] derEncode( + BigInteger r, + BigInteger s) + throws IOException + { + ASN1EncodableVector v = new ASN1EncodableVector(); + v.add(new DERInteger(r)); + v.add(new DERInteger(s)); + + return new DERSequence(v).getEncoded(ASN1Encoding.DER); + } + + private BigInteger[] derDecode( + byte[] encoding) + throws IOException + { + ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(encoding); + + return new BigInteger[] + { + ((DERInteger)s.getObjectAt(0)).getValue(), + ((DERInteger)s.getObjectAt(1)).getValue() + }; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/DSASigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/DSASigner.java new file mode 100644 index 0000000..6d6add9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/DSASigner.java @@ -0,0 +1,138 @@ +package org.bouncycastle.crypto.signers; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.params.DSAKeyParameters; +import org.bouncycastle.crypto.params.DSAParameters; +import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; +import org.bouncycastle.crypto.params.DSAPublicKeyParameters; +import org.bouncycastle.crypto.params.ParametersWithRandom; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * The Digital Signature Algorithm - as described in "Handbook of Applied + * Cryptography", pages 452 - 453. + */ +public class DSASigner + implements DSA +{ + DSAKeyParameters key; + + SecureRandom random; + + public void init( + boolean forSigning, + CipherParameters param) + { + if (forSigning) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + this.key = (DSAPrivateKeyParameters)rParam.getParameters(); + } + else + { + this.random = new SecureRandom(); + this.key = (DSAPrivateKeyParameters)param; + } + } + else + { + this.key = (DSAPublicKeyParameters)param; + } + } + + /** + * generate a signature for the given message using the key we were + * initialised with. For conventional DSA the message should be a SHA-1 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public BigInteger[] generateSignature( + byte[] message) + { + DSAParameters params = key.getParameters(); + BigInteger m = calculateE(params.getQ(), message); + BigInteger k; + int qBitLength = params.getQ().bitLength(); + + do + { + k = new BigInteger(qBitLength, random); + } + while (k.compareTo(params.getQ()) >= 0); + + BigInteger r = params.getG().modPow(k, params.getP()).mod(params.getQ()); + + k = k.modInverse(params.getQ()).multiply( + m.add(((DSAPrivateKeyParameters)key).getX().multiply(r))); + + BigInteger s = k.mod(params.getQ()); + + BigInteger[] res = new BigInteger[2]; + + res[0] = r; + res[1] = s; + + return res; + } + + /** + * return true if the value r and s represent a DSA signature for + * the passed in message for standard DSA the message should be a + * SHA-1 hash of the real message to be verified. + */ + public boolean verifySignature( + byte[] message, + BigInteger r, + BigInteger s) + { + DSAParameters params = key.getParameters(); + BigInteger m = calculateE(params.getQ(), message); + BigInteger zero = BigInteger.valueOf(0); + + if (zero.compareTo(r) >= 0 || params.getQ().compareTo(r) <= 0) + { + return false; + } + + if (zero.compareTo(s) >= 0 || params.getQ().compareTo(s) <= 0) + { + return false; + } + + BigInteger w = s.modInverse(params.getQ()); + + BigInteger u1 = m.multiply(w).mod(params.getQ()); + BigInteger u2 = r.multiply(w).mod(params.getQ()); + + u1 = params.getG().modPow(u1, params.getP()); + u2 = ((DSAPublicKeyParameters)key).getY().modPow(u2, params.getP()); + + BigInteger v = u1.multiply(u2).mod(params.getP()).mod(params.getQ()); + + return v.equals(r); + } + + private BigInteger calculateE(BigInteger n, byte[] message) + { + if (n.bitLength() >= message.length * 8) + { + return new BigInteger(1, message); + } + else + { + byte[] trunc = new byte[n.bitLength() / 8]; + + System.arraycopy(message, 0, trunc, 0, trunc.length); + + return new BigInteger(1, trunc); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java new file mode 100644 index 0000000..22d670c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/ECDSASigner.java @@ -0,0 +1,163 @@ +package org.bouncycastle.crypto.signers; + +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.params.ECKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.math.ec.ECAlgorithms; +import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECPoint; + +/** + * EC-DSA as described in X9.62 + */ +public class ECDSASigner + implements ECConstants, DSA +{ + ECKeyParameters key; + + SecureRandom random; + + public void init( + boolean forSigning, + CipherParameters param) + { + if (forSigning) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + this.key = (ECPrivateKeyParameters)rParam.getParameters(); + } + else + { + this.random = new SecureRandom(); + this.key = (ECPrivateKeyParameters)param; + } + } + else + { + this.key = (ECPublicKeyParameters)param; + } + } + + // 5.3 pg 28 + /** + * generate a signature for the given message using the key we were + * initialised with. For conventional DSA the message should be a SHA-1 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public BigInteger[] generateSignature( + byte[] message) + { + BigInteger n = key.getParameters().getN(); + BigInteger e = calculateE(n, message); + BigInteger r = null; + BigInteger s = null; + + // 5.3.2 + do // generate s + { + BigInteger k = null; + int nBitLength = n.bitLength(); + + do // generate r + { + do + { + k = new BigInteger(nBitLength, random); + } + while (k.equals(ZERO) || k.compareTo(n) >= 0); + + ECPoint p = key.getParameters().getG().multiply(k); + + // 5.3.3 + BigInteger x = p.getX().toBigInteger(); + + r = x.mod(n); + } + while (r.equals(ZERO)); + + BigInteger d = ((ECPrivateKeyParameters)key).getD(); + + s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n); + } + while (s.equals(ZERO)); + + BigInteger[] res = new BigInteger[2]; + + res[0] = r; + res[1] = s; + + return res; + } + + // 5.4 pg 29 + /** + * return true if the value r and s represent a DSA signature for + * the passed in message (for standard DSA the message should be + * a SHA-1 hash of the real message to be verified). + */ + public boolean verifySignature( + byte[] message, + BigInteger r, + BigInteger s) + { + BigInteger n = key.getParameters().getN(); + BigInteger e = calculateE(n, message); + + // r in the range [1,n-1] + if (r.compareTo(ONE) < 0 || r.compareTo(n) >= 0) + { + return false; + } + + // s in the range [1,n-1] + if (s.compareTo(ONE) < 0 || s.compareTo(n) >= 0) + { + return false; + } + + BigInteger c = s.modInverse(n); + + BigInteger u1 = e.multiply(c).mod(n); + BigInteger u2 = r.multiply(c).mod(n); + + ECPoint G = key.getParameters().getG(); + ECPoint Q = ((ECPublicKeyParameters)key).getQ(); + + ECPoint point = ECAlgorithms.sumOfTwoMultiplies(G, u1, Q, u2); + + BigInteger v = point.getX().toBigInteger().mod(n); + + return v.equals(r); + } + + private BigInteger calculateE(BigInteger n, byte[] message) + { + int log2n = n.bitLength(); + int messageBitLength = message.length * 8; + + if (log2n >= messageBitLength) + { + return new BigInteger(1, message); + } + else + { + BigInteger trunc = new BigInteger(1, message); + + trunc = trunc.shiftRight(messageBitLength - log2n); + + return trunc; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java b/common/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java new file mode 100644 index 0000000..fe1e44a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/ECGOST3410Signer.java @@ -0,0 +1,152 @@ +package org.bouncycastle.crypto.signers; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.params.ECKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.math.ec.ECAlgorithms; +import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECPoint; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * GOST R 34.10-2001 Signature Algorithm + */ +public class ECGOST3410Signer + implements DSA +{ + ECKeyParameters key; + + SecureRandom random; + + public void init( + boolean forSigning, + CipherParameters param) + { + if (forSigning) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + this.key = (ECPrivateKeyParameters)rParam.getParameters(); + } + else + { + this.random = new SecureRandom(); + this.key = (ECPrivateKeyParameters)param; + } + } + else + { + this.key = (ECPublicKeyParameters)param; + } + } + + /** + * generate a signature for the given message using the key we were + * initialised with. For conventional GOST3410 the message should be a GOST3411 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public BigInteger[] generateSignature( + byte[] message) + { + byte[] mRev = new byte[message.length]; // conversion is little-endian + for (int i = 0; i != mRev.length; i++) + { + mRev[i] = message[mRev.length - 1 - i]; + } + + BigInteger e = new BigInteger(1, mRev); + BigInteger n = key.getParameters().getN(); + + BigInteger r = null; + BigInteger s = null; + + do // generate s + { + BigInteger k = null; + + do // generate r + { + do + { + k = new BigInteger(n.bitLength(), random); + } + while (k.equals(ECConstants.ZERO)); + + ECPoint p = key.getParameters().getG().multiply(k); + + BigInteger x = p.getX().toBigInteger(); + + r = x.mod(n); + } + while (r.equals(ECConstants.ZERO)); + + BigInteger d = ((ECPrivateKeyParameters)key).getD(); + + s = (k.multiply(e)).add(d.multiply(r)).mod(n); + } + while (s.equals(ECConstants.ZERO)); + + BigInteger[] res = new BigInteger[2]; + + res[0] = r; + res[1] = s; + + return res; + } + + /** + * return true if the value r and s represent a GOST3410 signature for + * the passed in message (for standard GOST3410 the message should be + * a GOST3411 hash of the real message to be verified). + */ + public boolean verifySignature( + byte[] message, + BigInteger r, + BigInteger s) + { + byte[] mRev = new byte[message.length]; // conversion is little-endian + for (int i = 0; i != mRev.length; i++) + { + mRev[i] = message[mRev.length - 1 - i]; + } + + BigInteger e = new BigInteger(1, mRev); + BigInteger n = key.getParameters().getN(); + + // r in the range [1,n-1] + if (r.compareTo(ECConstants.ONE) < 0 || r.compareTo(n) >= 0) + { + return false; + } + + // s in the range [1,n-1] + if (s.compareTo(ECConstants.ONE) < 0 || s.compareTo(n) >= 0) + { + return false; + } + + BigInteger v = e.modInverse(n); + + BigInteger z1 = s.multiply(v).mod(n); + BigInteger z2 = (n.subtract(r)).multiply(v).mod(n); + + ECPoint G = key.getParameters().getG(); // P + ECPoint Q = ((ECPublicKeyParameters)key).getQ(); + + ECPoint point = ECAlgorithms.sumOfTwoMultiplies(G, z1, Q, z2); + + BigInteger R = point.getX().toBigInteger().mod(n); + + return R.equals(r); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/ECNRSigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/ECNRSigner.java new file mode 100644 index 0000000..496f22e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/ECNRSigner.java @@ -0,0 +1,182 @@ +package org.bouncycastle.crypto.signers; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.generators.ECKeyPairGenerator; +import org.bouncycastle.crypto.params.ECKeyGenerationParameters; +import org.bouncycastle.crypto.params.ECKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.math.ec.ECAlgorithms; +import org.bouncycastle.math.ec.ECConstants; +import org.bouncycastle.math.ec.ECPoint; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * EC-NR as described in IEEE 1363-2000 + */ +public class ECNRSigner + implements DSA +{ + private boolean forSigning; + private ECKeyParameters key; + private SecureRandom random; + + public void init( + boolean forSigning, + CipherParameters param) + { + this.forSigning = forSigning; + + if (forSigning) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + this.key = (ECPrivateKeyParameters)rParam.getParameters(); + } + else + { + this.random = new SecureRandom(); + this.key = (ECPrivateKeyParameters)param; + } + } + else + { + this.key = (ECPublicKeyParameters)param; + } + } + + // Section 7.2.5 ECSP-NR, pg 34 + /** + * generate a signature for the given message using the key we were + * initialised with. Generally, the order of the curve should be at + * least as long as the hash of the message of interest, and with + * ECNR it *must* be at least as long. + * + * @param digest the digest to be signed. + * @exception DataLengthException if the digest is longer than the key allows + */ + public BigInteger[] generateSignature( + byte[] digest) + { + if (! this.forSigning) + { + throw new IllegalStateException("not initialised for signing"); + } + + BigInteger n = ((ECPrivateKeyParameters)this.key).getParameters().getN(); + int nBitLength = n.bitLength(); + + BigInteger e = new BigInteger(1, digest); + int eBitLength = e.bitLength(); + + ECPrivateKeyParameters privKey = (ECPrivateKeyParameters)key; + + if (eBitLength > nBitLength) + { + throw new DataLengthException("input too large for ECNR key."); + } + + BigInteger r = null; + BigInteger s = null; + + AsymmetricCipherKeyPair tempPair; + do // generate r + { + // generate another, but very temporary, key pair using + // the same EC parameters + ECKeyPairGenerator keyGen = new ECKeyPairGenerator(); + + keyGen.init(new ECKeyGenerationParameters(privKey.getParameters(), this.random)); + + tempPair = keyGen.generateKeyPair(); + + // BigInteger Vx = tempPair.getPublic().getW().getAffineX(); + ECPublicKeyParameters V = (ECPublicKeyParameters)tempPair.getPublic(); // get temp's public key + BigInteger Vx = V.getQ().getX().toBigInteger(); // get the point's x coordinate + + r = Vx.add(e).mod(n); + } + while (r.equals(ECConstants.ZERO)); + + // generate s + BigInteger x = privKey.getD(); // private key value + BigInteger u = ((ECPrivateKeyParameters)tempPair.getPrivate()).getD(); // temp's private key value + s = u.subtract(r.multiply(x)).mod(n); + + BigInteger[] res = new BigInteger[2]; + res[0] = r; + res[1] = s; + + return res; + } + + // Section 7.2.6 ECVP-NR, pg 35 + /** + * return true if the value r and s represent a signature for the + * message passed in. Generally, the order of the curve should be at + * least as long as the hash of the message of interest, and with + * ECNR, it *must* be at least as long. But just in case the signer + * applied mod(n) to the longer digest, this implementation will + * apply mod(n) during verification. + * + * @param digest the digest to be verified. + * @param r the r value of the signature. + * @param s the s value of the signature. + * @exception DataLengthException if the digest is longer than the key allows + */ + public boolean verifySignature( + byte[] digest, + BigInteger r, + BigInteger s) + { + if (this.forSigning) + { + throw new IllegalStateException("not initialised for verifying"); + } + + ECPublicKeyParameters pubKey = (ECPublicKeyParameters)key; + BigInteger n = pubKey.getParameters().getN(); + int nBitLength = n.bitLength(); + + BigInteger e = new BigInteger(1, digest); + int eBitLength = e.bitLength(); + + if (eBitLength > nBitLength) + { + throw new DataLengthException("input too large for ECNR key."); + } + + // r in the range [1,n-1] + if (r.compareTo(ECConstants.ONE) < 0 || r.compareTo(n) >= 0) + { + return false; + } + + // s in the range [0,n-1] NB: ECNR spec says 0 + if (s.compareTo(ECConstants.ZERO) < 0 || s.compareTo(n) >= 0) + { + return false; + } + + // compute P = sG + rW + + ECPoint G = pubKey.getParameters().getG(); + ECPoint W = pubKey.getQ(); + // calculate P using Bouncy math + ECPoint P = ECAlgorithms.sumOfTwoMultiplies(G, s, W, r); + + BigInteger x = P.getX().toBigInteger(); + BigInteger t = r.subtract(x).mod(n); + + return t.equals(e); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/GOST3410Signer.java b/common/src/main/java/org/bouncycastle/crypto/signers/GOST3410Signer.java new file mode 100644 index 0000000..bd9dd1e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/GOST3410Signer.java @@ -0,0 +1,127 @@ +package org.bouncycastle.crypto.signers; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.params.*; + +import javabc.SecureRandom; +import javabc.BigInteger; + +/** + * GOST R 34.10-94 Signature Algorithm + */ +public class GOST3410Signer + implements DSA +{ + GOST3410KeyParameters key; + + SecureRandom random; + + public void init( + boolean forSigning, + CipherParameters param) + { + if (forSigning) + { + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom rParam = (ParametersWithRandom)param; + + this.random = rParam.getRandom(); + this.key = (GOST3410PrivateKeyParameters)rParam.getParameters(); + } + else + { + this.random = new SecureRandom(); + this.key = (GOST3410PrivateKeyParameters)param; + } + } + else + { + this.key = (GOST3410PublicKeyParameters)param; + } + } + + /** + * generate a signature for the given message using the key we were + * initialised with. For conventional GOST3410 the message should be a GOST3411 + * hash of the message of interest. + * + * @param message the message that will be verified later. + */ + public BigInteger[] generateSignature( + byte[] message) + { + byte[] mRev = new byte[message.length]; // conversion is little-endian + for (int i = 0; i != mRev.length; i++) + { + mRev[i] = message[mRev.length - 1 - i]; + } + + BigInteger m = new BigInteger(1, mRev); + GOST3410Parameters params = key.getParameters(); + BigInteger k; + + do + { + k = new BigInteger(params.getQ().bitLength(), random); + } + while (k.compareTo(params.getQ()) >= 0); + + BigInteger r = params.getA().modPow(k, params.getP()).mod(params.getQ()); + + BigInteger s = k.multiply(m). + add(((GOST3410PrivateKeyParameters)key).getX().multiply(r)). + mod(params.getQ()); + + BigInteger[] res = new BigInteger[2]; + + res[0] = r; + res[1] = s; + + return res; + } + + /** + * return true if the value r and s represent a GOST3410 signature for + * the passed in message for standard GOST3410 the message should be a + * GOST3411 hash of the real message to be verified. + */ + public boolean verifySignature( + byte[] message, + BigInteger r, + BigInteger s) + { + byte[] mRev = new byte[message.length]; // conversion is little-endian + for (int i = 0; i != mRev.length; i++) + { + mRev[i] = message[mRev.length - 1 - i]; + } + + BigInteger m = new BigInteger(1, mRev); + GOST3410Parameters params = key.getParameters(); + BigInteger zero = BigInteger.valueOf(0); + + if (zero.compareTo(r) >= 0 || params.getQ().compareTo(r) <= 0) + { + return false; + } + + if (zero.compareTo(s) >= 0 || params.getQ().compareTo(s) <= 0) + { + return false; + } + + BigInteger v = m.modPow(params.getQ().subtract(new BigInteger("2")),params.getQ()); + + BigInteger z1 = s.multiply(v).mod(params.getQ()); + BigInteger z2 = (params.getQ().subtract(r)).multiply(v).mod(params.getQ()); + + z1 = params.getA().modPow(z1, params.getP()); + z2 = ((GOST3410PublicKeyParameters)key).getY().modPow(z2, params.getP()); + + BigInteger u = z1.multiply(z2).mod(params.getP()).mod(params.getQ()); + + return u.equals(r); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/GenericSigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/GenericSigner.java new file mode 100644 index 0000000..6819e14 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/GenericSigner.java @@ -0,0 +1,136 @@ +package org.bouncycastle.crypto.signers; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.util.Arrays; + +public class GenericSigner + implements Signer +{ + private final AsymmetricBlockCipher engine; + private final Digest digest; + private boolean forSigning; + + public GenericSigner( + AsymmetricBlockCipher engine, + Digest digest) + { + this.engine = engine; + this.digest = digest; + } + + /** + * initialise the signer for signing or verification. + * + * @param forSigning + * true if for signing, false otherwise + * @param parameters + * necessary parameters. + */ + public void init( + boolean forSigning, + CipherParameters parameters) + { + this.forSigning = forSigning; + AsymmetricKeyParameter k; + + if (parameters instanceof ParametersWithRandom) + { + k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).getParameters(); + } + else + { + k = (AsymmetricKeyParameter)parameters; + } + + if (forSigning && !k.isPrivate()) + { + throw new IllegalArgumentException("signing requires private key"); + } + + if (!forSigning && k.isPrivate()) + { + throw new IllegalArgumentException("verification requires public key"); + } + + reset(); + + engine.init(forSigning, parameters); + } + + /** + * update the internal digest with the byte b + */ + public void update( + byte input) + { + digest.update(input); + } + + /** + * update the internal digest with the byte array in + */ + public void update( + byte[] input, + int inOff, + int length) + { + digest.update(input, inOff, length); + } + + /** + * Generate a signature for the message we've been loaded with using the key + * we were initialised with. + */ + public byte[] generateSignature() + throws CryptoException, DataLengthException + { + if (!forSigning) + { + throw new IllegalStateException("GenericSigner not initialised for signature generation."); + } + + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + + return engine.processBlock(hash, 0, hash.length); + } + + /** + * return true if the internal state represents the signature described in + * the passed in array. + */ + public boolean verifySignature( + byte[] signature) + { + if (forSigning) + { + throw new IllegalStateException("GenericSigner not initialised for verification"); + } + + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + + try + { + byte[] sig = engine.processBlock(signature, 0, signature.length); + + return Arrays.constantTimeAreEqual(sig, hash); + } + catch (Exception e) + { + return false; + } + } + + public void reset() + { + digest.reset(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java new file mode 100644 index 0000000..dbb9ab8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2PSSSigner.java @@ -0,0 +1,621 @@ +package org.bouncycastle.crypto.signers; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.SignerWithRecovery; +import org.bouncycastle.crypto.digests.RIPEMD128Digest; +import org.bouncycastle.crypto.digests.RIPEMD160Digest; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.ParametersWithSalt; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +/** + * ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). + *

        + * Note: the usual length for the salt is the length of the hash + * function used in bytes. + */ +public class ISO9796d2PSSSigner + implements SignerWithRecovery +{ + static final public int TRAILER_IMPLICIT = 0xBC; + static final public int TRAILER_RIPEMD160 = 0x31CC; + static final public int TRAILER_RIPEMD128 = 0x32CC; + static final public int TRAILER_SHA1 = 0x33CC; + + private Digest digest; + private AsymmetricBlockCipher cipher; + + private SecureRandom random; + private byte[] standardSalt; + + private int hLen; + private int trailer; + private int keyBits; + private byte[] block; + private byte[] mBuf; + private int messageLength; + private int saltLength; + private boolean fullMessage; + private byte[] recoveredMessage; + + /** + * Generate a signer for the with either implicit or explicit trailers + * for ISO9796-2, scheme 2 or 3. + * + * @param cipher base cipher to use for signature creation/verification + * @param digest digest to use. + * @param saltLength length of salt in bytes. + * @param implicit whether or not the trailer is implicit or gives the hash. + */ + public ISO9796d2PSSSigner( + AsymmetricBlockCipher cipher, + Digest digest, + int saltLength, + boolean implicit) + { + this.cipher = cipher; + this.digest = digest; + this.hLen = digest.getDigestSize(); + this.saltLength = saltLength; + + if (implicit) + { + trailer = TRAILER_IMPLICIT; + } + else + { + if (digest instanceof SHA1Digest) + { + trailer = TRAILER_SHA1; + } + else if (digest instanceof RIPEMD160Digest) + { + trailer = TRAILER_RIPEMD160; + } + else if (digest instanceof RIPEMD128Digest) + { + trailer = TRAILER_RIPEMD128; + } + else + { + throw new IllegalArgumentException("no valid trailer for digest"); + } + } + } + + /** + * Constructor for a signer with an explicit digest trailer. + * + * @param cipher cipher to use. + * @param digest digest to sign with. + * @param saltLength length of salt in bytes. + */ + public ISO9796d2PSSSigner( + AsymmetricBlockCipher cipher, + Digest digest, + int saltLength) + { + this(cipher, digest, saltLength, false); + } + + /** + * Initialise the signer. + * + * @param forSigning true if for signing, false if for verification. + * @param param parameters for signature generation/verification. If the + * parameters are for generation they should be a ParametersWithRandom, + * a ParametersWithSalt, or just an RSAKeyParameters object. If RSAKeyParameters + * are passed in a SecureRandom will be created. + * @exception IllegalArgumentException if wrong parameter type or a fixed + * salt is passed in which is the wrong length. + */ + public void init( + boolean forSigning, + CipherParameters param) + { + RSAKeyParameters kParam; + int lengthOfSalt = saltLength; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom p = (ParametersWithRandom)param; + + kParam = (RSAKeyParameters)p.getParameters(); + if (forSigning) + { + random = p.getRandom(); + } + } + else if (param instanceof ParametersWithSalt) + { + ParametersWithSalt p = (ParametersWithSalt)param; + + kParam = (RSAKeyParameters)p.getParameters(); + standardSalt = p.getSalt(); + lengthOfSalt = standardSalt.length; + if (standardSalt.length != saltLength) + { + throw new IllegalArgumentException("Fixed salt is of wrong length"); + } + } + else + { + kParam = (RSAKeyParameters)param; + if (forSigning) + { + random = new SecureRandom(); + } + } + + cipher.init(forSigning, kParam); + + keyBits = kParam.getModulus().bitLength(); + + block = new byte[(keyBits + 7) / 8]; + + if (trailer == TRAILER_IMPLICIT) + { + mBuf = new byte[block.length - digest.getDigestSize() - lengthOfSalt - 1 - 1]; + } + else + { + mBuf = new byte[block.length - digest.getDigestSize() - lengthOfSalt - 1 - 2]; + } + + reset(); + } + + /** + * compare two byte arrays - constant time + */ + private boolean isSameAs( + byte[] a, + byte[] b) + { + boolean isOkay = true; + + if (messageLength != b.length) + { + isOkay = false; + } + + for (int i = 0; i != b.length; i++) + { + if (a[i] != b[i]) + { + isOkay = false; + } + } + + return isOkay; + } + + /** + * clear possible sensitive data + */ + private void clearBlock( + byte[] block) + { + for (int i = 0; i != block.length; i++) + { + block[i] = 0; + } + } + + public void updateWithRecoveredMessage(byte[] signature) + throws InvalidCipherTextException + { + throw new RuntimeException("not implemented"); // TODO: + } + + /** + * update the internal digest with the byte b + */ + public void update( + byte b) + { + if (messageLength < mBuf.length) + { + mBuf[messageLength++] = b; + } + else + { + digest.update(b); + } + } + + /** + * update the internal digest with the byte array in + */ + public void update( + byte[] in, + int off, + int len) + { + while (len > 0 && messageLength < mBuf.length) + { + this.update(in[off]); + off++; + len--; + } + + if (len > 0) + { + digest.update(in, off, len); + } + } + + /** + * reset the internal state + */ + public void reset() + { + digest.reset(); + messageLength = 0; + if (mBuf != null) + { + clearBlock(mBuf); + } + if (recoveredMessage != null) + { + clearBlock(recoveredMessage); + recoveredMessage = null; + } + fullMessage = false; + } + + /** + * generate a signature for the loaded message using the key we were + * initialised with. + */ + public byte[] generateSignature() + throws CryptoException + { + int digSize = digest.getDigestSize(); + + byte[] m2Hash = new byte[digSize]; + + digest.doFinal(m2Hash, 0); + + byte[] C = new byte[8]; + LtoOSP(messageLength * 8, C); + + digest.update(C, 0, C.length); + + digest.update(mBuf, 0, messageLength); + + digest.update(m2Hash, 0, m2Hash.length); + + byte[] salt; + + if (standardSalt != null) + { + salt = standardSalt; + } + else + { + salt = new byte[saltLength]; + random.nextBytes(salt); + } + + digest.update(salt, 0, salt.length); + + byte[] hash = new byte[digest.getDigestSize()]; + + digest.doFinal(hash, 0); + + int tLength = 2; + if (trailer == TRAILER_IMPLICIT) + { + tLength = 1; + } + + int off = block.length - messageLength - salt.length - hLen - tLength - 1; + + block[off] = 0x01; + + System.arraycopy(mBuf, 0, block, off + 1, messageLength); + System.arraycopy(salt, 0, block, off + 1 + messageLength, salt.length); + + byte[] dbMask = maskGeneratorFunction1(hash, 0, hash.length, block.length - hLen - tLength); + for (int i = 0; i != dbMask.length; i++) + { + block[i] ^= dbMask[i]; + } + + System.arraycopy(hash, 0, block, block.length - hLen - tLength, hLen); + + if (trailer == TRAILER_IMPLICIT) + { + block[block.length - 1] = (byte)TRAILER_IMPLICIT; + } + else + { + block[block.length - 2] = (byte)(trailer >>> 8); + block[block.length - 1] = (byte)trailer; + } + + block[0] &= 0x7f; + + byte[] b = cipher.processBlock(block, 0, block.length); + + clearBlock(mBuf); + clearBlock(block); + messageLength = 0; + + return b; + } + + /** + * return true if the signature represents a ISO9796-2 signature + * for the passed in message. + */ + public boolean verifySignature( + byte[] signature) + { + byte[] block; + + try + { + block = cipher.processBlock(signature, 0, signature.length); + } + catch (Exception e) + { + return false; + } + + // + // adjust block size for leading zeroes if necessary + // + if (block.length < (keyBits + 7) / 8) + { + byte[] tmp = new byte[(keyBits + 7) / 8]; + + System.arraycopy(block, 0, tmp, tmp.length - block.length, block.length); + clearBlock(block); + block = tmp; + } + + int tLength; + + if (((block[block.length - 1] & 0xFF) ^ 0xBC) == 0) + { + tLength = 1; + } + else + { + int sigTrail = ((block[block.length - 2] & 0xFF) << 8) | (block[block.length - 1] & 0xFF); + + switch (sigTrail) + { + case TRAILER_RIPEMD160: + if (!(digest instanceof RIPEMD160Digest)) + { + throw new IllegalStateException("signer should be initialised with RIPEMD160"); + } + break; + case TRAILER_SHA1: + if (!(digest instanceof SHA1Digest)) + { + throw new IllegalStateException("signer should be initialised with SHA1"); + } + break; + case TRAILER_RIPEMD128: + if (!(digest instanceof RIPEMD128Digest)) + { + throw new IllegalStateException("signer should be initialised with RIPEMD128"); + } + break; + default: + throw new IllegalArgumentException("unrecognised hash in signature"); + } + + tLength = 2; + } + + // + // calculate H(m2) + // + byte[] m2Hash = new byte[hLen]; + digest.doFinal(m2Hash, 0); + + // + // remove the mask + // + byte[] dbMask = maskGeneratorFunction1(block, block.length - hLen - tLength, hLen, block.length - hLen - tLength); + for (int i = 0; i != dbMask.length; i++) + { + block[i] ^= dbMask[i]; + } + + block[0] &= 0x7f; + + // + // find out how much padding we've got + // + int mStart = 0; + for (; mStart != block.length; mStart++) + { + if (block[mStart] == 0x01) + { + break; + } + } + + mStart++; + + if (mStart >= block.length) + { + clearBlock(block); + return false; + } + + fullMessage = (mStart > 1); + + recoveredMessage = new byte[dbMask.length - mStart - saltLength]; + + System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); + + // + // check the hashes + // + byte[] C = new byte[8]; + LtoOSP(recoveredMessage.length * 8, C); + + digest.update(C, 0, C.length); + + if (recoveredMessage.length != 0) + { + digest.update(recoveredMessage, 0, recoveredMessage.length); + } + + digest.update(m2Hash, 0, m2Hash.length); + + // Update for the salt + digest.update(block, mStart + recoveredMessage.length, saltLength); + + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + + int off = block.length - tLength - hash.length; + + boolean isOkay = true; + + for (int i = 0; i != hash.length; i++) + { + if (hash[i] != block[off + i]) + { + isOkay = false; + } + } + + clearBlock(block); + clearBlock(hash); + + if (!isOkay) + { + fullMessage = false; + clearBlock(recoveredMessage); + return false; + } + + // + // if they've input a message check what we've recovered against + // what was input. + // + if (messageLength != 0) + { + if (!isSameAs(mBuf, recoveredMessage)) + { + clearBlock(mBuf); + return false; + } + + messageLength = 0; + } + + clearBlock(mBuf); + return true; + } + + /** + * Return true if the full message was recoveredMessage. + * + * @return true on full message recovery, false otherwise, or if not sure. + * @see org.bouncycastle.crypto.SignerWithRecovery#hasFullMessage() + */ + public boolean hasFullMessage() + { + return fullMessage; + } + + /** + * Return a reference to the recoveredMessage message. + * + * @return the full/partial recoveredMessage message. + * @see org.bouncycastle.crypto.SignerWithRecovery#getRecoveredMessage() + */ + public byte[] getRecoveredMessage() + { + return recoveredMessage; + } + + /** + * int to octet string. + */ + private void ItoOSP( + int i, + byte[] sp) + { + sp[0] = (byte)(i >>> 24); + sp[1] = (byte)(i >>> 16); + sp[2] = (byte)(i >>> 8); + sp[3] = (byte)(i >>> 0); + } + + /** + * long to octet string. + */ + private void LtoOSP( + long l, + byte[] sp) + { + sp[0] = (byte)(l >>> 56); + sp[1] = (byte)(l >>> 48); + sp[2] = (byte)(l >>> 40); + sp[3] = (byte)(l >>> 32); + sp[4] = (byte)(l >>> 24); + sp[5] = (byte)(l >>> 16); + sp[6] = (byte)(l >>> 8); + sp[7] = (byte)(l >>> 0); + } + /** + * mask generator function, as described in PKCS1v2. + */ + private byte[] maskGeneratorFunction1( + byte[] Z, + int zOff, + int zLen, + int length) + { + byte[] mask = new byte[length]; + byte[] hashBuf = new byte[hLen]; + byte[] C = new byte[4]; + int counter = 0; + + digest.reset(); + + while (counter < (length / hLen)) + { + ItoOSP(counter, C); + + digest.update(Z, zOff, zLen); + digest.update(C, 0, C.length); + digest.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, mask, counter * hLen, hLen); + + counter++; + } + + if ((counter * hLen) < length) + { + ItoOSP(counter, C); + + digest.update(Z, zOff, zLen); + digest.update(C, 0, C.length); + digest.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, mask, counter * hLen, mask.length - (counter * hLen)); + } + + return mask; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2Signer.java b/common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2Signer.java new file mode 100644 index 0000000..9aab4ff --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/ISO9796d2Signer.java @@ -0,0 +1,614 @@ +package org.bouncycastle.crypto.signers; + +import java.util.Hashtable; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.SignerWithRecovery; +import org.bouncycastle.crypto.params.RSAKeyParameters; +import org.bouncycastle.util.Arrays; + +/** + * ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + */ +public class ISO9796d2Signer + implements SignerWithRecovery +{ + static final public int TRAILER_IMPLICIT = 0xBC; + static final public int TRAILER_RIPEMD160 = 0x31CC; + static final public int TRAILER_RIPEMD128 = 0x32CC; + static final public int TRAILER_SHA1 = 0x33CC; + static final public int TRAILER_SHA256 = 0x34CC; + static final public int TRAILER_SHA512 = 0x35CC; + static final public int TRAILER_SHA384 = 0x36CC; + static final public int TRAILER_WHIRLPOOL = 0x37CC; + + private static Hashtable trailerMap = new Hashtable(); + + static + { + trailerMap.put("RIPEMD128", new Integer(TRAILER_RIPEMD128)); + trailerMap.put("RIPEMD160", new Integer(TRAILER_RIPEMD160)); + + trailerMap.put("SHA-1", new Integer(TRAILER_SHA1)); + trailerMap.put("SHA-256", new Integer(TRAILER_SHA256)); + trailerMap.put("SHA-384", new Integer(TRAILER_SHA384)); + trailerMap.put("SHA-512", new Integer(TRAILER_SHA512)); + + trailerMap.put("Whirlpool", new Integer(TRAILER_WHIRLPOOL)); + } + + private Digest digest; + private AsymmetricBlockCipher cipher; + + private int trailer; + private int keyBits; + private byte[] block; + private byte[] mBuf; + private int messageLength; + private boolean fullMessage; + private byte[] recoveredMessage; + + private byte[] preSig; + private byte[] preBlock; + + /** + * Generate a signer for the with either implicit or explicit trailers + * for ISO9796-2. + * + * @param cipher base cipher to use for signature creation/verification + * @param digest digest to use. + * @param implicit whether or not the trailer is implicit or gives the hash. + */ + public ISO9796d2Signer( + AsymmetricBlockCipher cipher, + Digest digest, + boolean implicit) + { + this.cipher = cipher; + this.digest = digest; + + if (implicit) + { + trailer = TRAILER_IMPLICIT; + } + else + { + Integer trailerObj = (Integer)trailerMap.get(digest.getAlgorithmName()); + + if (trailerObj != null) + { + trailer = trailerObj.intValue(); + } + else + { + throw new IllegalArgumentException("no valid trailer for digest"); + } + } + } + + /** + * Constructor for a signer with an explicit digest trailer. + * + * @param cipher cipher to use. + * @param digest digest to sign with. + */ + public ISO9796d2Signer( + AsymmetricBlockCipher cipher, + Digest digest) + { + this(cipher, digest, false); + } + + public void init( + boolean forSigning, + CipherParameters param) + { + RSAKeyParameters kParam = (RSAKeyParameters)param; + + cipher.init(forSigning, kParam); + + keyBits = kParam.getModulus().bitLength(); + + block = new byte[(keyBits + 7) / 8]; + + if (trailer == TRAILER_IMPLICIT) + { + mBuf = new byte[block.length - digest.getDigestSize() - 2]; + } + else + { + mBuf = new byte[block.length - digest.getDigestSize() - 3]; + } + + reset(); + } + + /** + * compare two byte arrays - constant time + */ + private boolean isSameAs( + byte[] a, + byte[] b) + { + boolean isOkay = true; + + if (messageLength > mBuf.length) + { + if (mBuf.length > b.length) + { + isOkay = false; + } + + for (int i = 0; i != mBuf.length; i++) + { + if (a[i] != b[i]) + { + isOkay = false; + } + } + } + else + { + if (messageLength != b.length) + { + isOkay = false; + } + + for (int i = 0; i != b.length; i++) + { + if (a[i] != b[i]) + { + isOkay = false; + } + } + } + + return isOkay; + } + + /** + * clear possible sensitive data + */ + private void clearBlock( + byte[] block) + { + for (int i = 0; i != block.length; i++) + { + block[i] = 0; + } + } + + public void updateWithRecoveredMessage(byte[] signature) + throws InvalidCipherTextException + { + byte[] block = cipher.processBlock(signature, 0, signature.length); + + if (((block[0] & 0xC0) ^ 0x40) != 0) + { + throw new InvalidCipherTextException("malformed signature"); + } + + if (((block[block.length - 1] & 0xF) ^ 0xC) != 0) + { + throw new InvalidCipherTextException("malformed signature"); + } + + int delta = 0; + + if (((block[block.length - 1] & 0xFF) ^ 0xBC) == 0) + { + delta = 1; + } + else + { + int sigTrail = ((block[block.length - 2] & 0xFF) << 8) | (block[block.length - 1] & 0xFF); + Integer trailerObj = (Integer)trailerMap.get(digest.getAlgorithmName()); + + if (trailerObj != null) + { + if (sigTrail != trailerObj.intValue()) + { + throw new IllegalStateException("signer initialised with wrong digest for trailer " + sigTrail); + } + } + else + { + throw new IllegalArgumentException("unrecognised hash in signature"); + } + + delta = 2; + } + + // + // find out how much padding we've got + // + int mStart = 0; + + for (mStart = 0; mStart != block.length; mStart++) + { + if (((block[mStart] & 0x0f) ^ 0x0a) == 0) + { + break; + } + } + + mStart++; + + int off = block.length - delta - digest.getDigestSize(); + + // + // there must be at least one byte of message string + // + if ((off - mStart) <= 0) + { + throw new InvalidCipherTextException("malformed block"); + } + + // + // if we contain the whole message as well, check the hash of that. + // + if ((block[0] & 0x20) == 0) + { + fullMessage = true; + + recoveredMessage = new byte[off - mStart]; + System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); + } + else + { + fullMessage = false; + + recoveredMessage = new byte[off - mStart]; + System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); + } + + preSig = signature; + preBlock = block; + + digest.update(recoveredMessage, 0, recoveredMessage.length); + messageLength = recoveredMessage.length; + } + + /** + * update the internal digest with the byte b + */ + public void update( + byte b) + { + digest.update(b); + + if (preSig == null && messageLength < mBuf.length) + { + mBuf[messageLength] = b; + } + + messageLength++; + } + + /** + * update the internal digest with the byte array in + */ + public void update( + byte[] in, + int off, + int len) + { + digest.update(in, off, len); + + if (preSig == null && messageLength < mBuf.length) + { + for (int i = 0; i < len && (i + messageLength) < mBuf.length; i++) + { + mBuf[messageLength + i] = in[off + i]; + } + } + + messageLength += len; + } + + /** + * reset the internal state + */ + public void reset() + { + digest.reset(); + messageLength = 0; + clearBlock(mBuf); + + if (recoveredMessage != null) + { + clearBlock(recoveredMessage); + } + + recoveredMessage = null; + fullMessage = false; + } + + /** + * generate a signature for the loaded message using the key we were + * initialised with. + */ + public byte[] generateSignature() + throws CryptoException + { + int digSize = digest.getDigestSize(); + + int t = 0; + int delta = 0; + + if (trailer == TRAILER_IMPLICIT) + { + t = 8; + delta = block.length - digSize - 1; + digest.doFinal(block, delta); + block[block.length - 1] = (byte)TRAILER_IMPLICIT; + } + else + { + t = 16; + delta = block.length - digSize - 2; + digest.doFinal(block, delta); + block[block.length - 2] = (byte)(trailer >>> 8); + block[block.length - 1] = (byte)trailer; + } + + byte header = 0; + int x = (digSize + messageLength) * 8 + t + 4 - keyBits; + + if (x > 0) + { + int mR = messageLength - ((x + 7) / 8); + header = 0x60; + + delta -= mR; + + System.arraycopy(mBuf, 0, block, delta, mR); + } + else + { + header = 0x40; + delta -= messageLength; + + System.arraycopy(mBuf, 0, block, delta, messageLength); + } + + if ((delta - 1) > 0) + { + for (int i = delta - 1; i != 0; i--) + { + block[i] = (byte)0xbb; + } + block[delta - 1] ^= (byte)0x01; + block[0] = (byte)0x0b; + block[0] |= header; + } + else + { + block[0] = (byte)0x0a; + block[0] |= header; + } + + byte[] b = cipher.processBlock(block, 0, block.length); + + clearBlock(mBuf); + clearBlock(block); + + return b; + } + + /** + * return true if the signature represents a ISO9796-2 signature + * for the passed in message. + */ + public boolean verifySignature( + byte[] signature) + { + byte[] block = null; + boolean updateWithRecoveredCalled; + + if (preSig == null) + { + updateWithRecoveredCalled = false; + try + { + block = cipher.processBlock(signature, 0, signature.length); + } + catch (Exception e) + { + return false; + } + } + else + { + if (!Arrays.areEqual(preSig, signature)) + { + throw new IllegalStateException("updateWithRecoveredMessage called on different signature"); + } + + updateWithRecoveredCalled = true; + block = preBlock; + + preSig = null; + preBlock = null; + } + + if (((block[0] & 0xC0) ^ 0x40) != 0) + { + return returnFalse(block); + } + + if (((block[block.length - 1] & 0xF) ^ 0xC) != 0) + { + return returnFalse(block); + } + + int delta = 0; + + if (((block[block.length - 1] & 0xFF) ^ 0xBC) == 0) + { + delta = 1; + } + else + { + int sigTrail = ((block[block.length - 2] & 0xFF) << 8) | (block[block.length - 1] & 0xFF); + Integer trailerObj = (Integer)trailerMap.get(digest.getAlgorithmName()); + + if (trailerObj != null) + { + if (sigTrail != trailerObj.intValue()) + { + throw new IllegalStateException("signer initialised with wrong digest for trailer " + sigTrail); + } + } + else + { + throw new IllegalArgumentException("unrecognised hash in signature"); + } + + delta = 2; + } + + // + // find out how much padding we've got + // + int mStart = 0; + + for (mStart = 0; mStart != block.length; mStart++) + { + if (((block[mStart] & 0x0f) ^ 0x0a) == 0) + { + break; + } + } + + mStart++; + + // + // check the hashes + // + byte[] hash = new byte[digest.getDigestSize()]; + + int off = block.length - delta - hash.length; + + // + // there must be at least one byte of message string + // + if ((off - mStart) <= 0) + { + return returnFalse(block); + } + + // + // if we contain the whole message as well, check the hash of that. + // + if ((block[0] & 0x20) == 0) + { + fullMessage = true; + + // check right number of bytes passed in. + if (messageLength > off - mStart) + { + return returnFalse(block); + } + + digest.reset(); + digest.update(block, mStart, off - mStart); + digest.doFinal(hash, 0); + + boolean isOkay = true; + + for (int i = 0; i != hash.length; i++) + { + block[off + i] ^= hash[i]; + if (block[off + i] != 0) + { + isOkay = false; + } + } + + if (!isOkay) + { + return returnFalse(block); + } + + recoveredMessage = new byte[off - mStart]; + System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); + } + else + { + fullMessage = false; + + digest.doFinal(hash, 0); + + boolean isOkay = true; + + for (int i = 0; i != hash.length; i++) + { + block[off + i] ^= hash[i]; + if (block[off + i] != 0) + { + isOkay = false; + } + } + + if (!isOkay) + { + return returnFalse(block); + } + + recoveredMessage = new byte[off - mStart]; + System.arraycopy(block, mStart, recoveredMessage, 0, recoveredMessage.length); + } + + // + // if they've input a message check what we've recovered against + // what was input. + // + if (messageLength != 0 && !updateWithRecoveredCalled) + { + if (!isSameAs(mBuf, recoveredMessage)) + { + return returnFalse(block); + } + } + + clearBlock(mBuf); + clearBlock(block); + + return true; + } + + private boolean returnFalse(byte[] block) + { + clearBlock(mBuf); + clearBlock(block); + + return false; + } + + /** + * Return true if the full message was recoveredMessage. + * + * @return true on full message recovery, false otherwise. + * @see org.bouncycastle.crypto.SignerWithRecovery#hasFullMessage() + */ + public boolean hasFullMessage() + { + return fullMessage; + } + + /** + * Return a reference to the recoveredMessage message. + * + * @return the full/partial recoveredMessage message. + * @see org.bouncycastle.crypto.SignerWithRecovery#getRecoveredMessage() + */ + public byte[] getRecoveredMessage() + { + return recoveredMessage; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/PSSSigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/PSSSigner.java new file mode 100644 index 0000000..8501f70 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/PSSSigner.java @@ -0,0 +1,348 @@ +package org.bouncycastle.crypto.signers; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSABlindingParameters; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +/** + * RSA-PSS as described in PKCS# 1 v 2.1. + *

        + * Note: the usual value for the salt length is the number of + * bytes in the hash function. + */ +public class PSSSigner + implements Signer +{ + static final public byte TRAILER_IMPLICIT = (byte)0xBC; + + private Digest contentDigest; + private Digest mgfDigest; + private AsymmetricBlockCipher cipher; + private SecureRandom random; + + private int hLen; + private int mgfhLen; + private int sLen; + private int emBits; + private byte[] salt; + private byte[] mDash; + private byte[] block; + private byte trailer; + + /** + * basic constructor + * + * @param cipher the asymmetric cipher to use. + * @param digest the digest to use. + * @param sLen the length of the salt to use (in bytes). + */ + public PSSSigner( + AsymmetricBlockCipher cipher, + Digest digest, + int sLen) + { + this(cipher, digest, sLen, TRAILER_IMPLICIT); + } + + public PSSSigner( + AsymmetricBlockCipher cipher, + Digest contentDigest, + Digest mgfDigest, + int sLen) + { + this(cipher, contentDigest, mgfDigest, sLen, TRAILER_IMPLICIT); + } + + public PSSSigner( + AsymmetricBlockCipher cipher, + Digest digest, + int sLen, + byte trailer) + { + this(cipher, digest, digest, sLen, trailer); + } + + public PSSSigner( + AsymmetricBlockCipher cipher, + Digest contentDigest, + Digest mgfDigest, + int sLen, + byte trailer) + { + this.cipher = cipher; + this.contentDigest = contentDigest; + this.mgfDigest = mgfDigest; + this.hLen = contentDigest.getDigestSize(); + this.mgfhLen = mgfDigest.getDigestSize(); + this.sLen = sLen; + this.salt = new byte[sLen]; + this.mDash = new byte[8 + sLen + hLen]; + this.trailer = trailer; + } + + public void init( + boolean forSigning, + CipherParameters param) + { + CipherParameters params; + + if (param instanceof ParametersWithRandom) + { + ParametersWithRandom p = (ParametersWithRandom)param; + + params = p.getParameters(); + random = p.getRandom(); + } + else + { + params = param; + if (forSigning) + { + random = new SecureRandom(); + } + } + + cipher.init(forSigning, params); + + RSAKeyParameters kParam; + + if (params instanceof RSABlindingParameters) + { + kParam = ((RSABlindingParameters)params).getPublicKey(); + } + else + { + kParam = (RSAKeyParameters)params; + } + + emBits = kParam.getModulus().bitLength() - 1; + + if (emBits < (8 * hLen + 8 * sLen + 9)) + { + throw new IllegalArgumentException("key too small for specified hash and salt lengths"); + } + + block = new byte[(emBits + 7) / 8]; + + reset(); + } + + /** + * clear possible sensitive data + */ + private void clearBlock( + byte[] block) + { + for (int i = 0; i != block.length; i++) + { + block[i] = 0; + } + } + + /** + * update the internal digest with the byte b + */ + public void update( + byte b) + { + contentDigest.update(b); + } + + /** + * update the internal digest with the byte array in + */ + public void update( + byte[] in, + int off, + int len) + { + contentDigest.update(in, off, len); + } + + /** + * reset the internal state + */ + public void reset() + { + contentDigest.reset(); + } + + /** + * generate a signature for the message we've been loaded with using + * the key we were initialised with. + */ + public byte[] generateSignature() + throws CryptoException, DataLengthException + { + contentDigest.doFinal(mDash, mDash.length - hLen - sLen); + + if (sLen != 0) + { + random.nextBytes(salt); + + System.arraycopy(salt, 0, mDash, mDash.length - sLen, sLen); + } + + byte[] h = new byte[hLen]; + + contentDigest.update(mDash, 0, mDash.length); + + contentDigest.doFinal(h, 0); + + block[block.length - sLen - 1 - hLen - 1] = 0x01; + System.arraycopy(salt, 0, block, block.length - sLen - hLen - 1, sLen); + + byte[] dbMask = maskGeneratorFunction1(h, 0, h.length, block.length - hLen - 1); + for (int i = 0; i != dbMask.length; i++) + { + block[i] ^= dbMask[i]; + } + + block[0] &= (0xff >> ((block.length * 8) - emBits)); + + System.arraycopy(h, 0, block, block.length - hLen - 1, hLen); + + block[block.length - 1] = trailer; + + byte[] b = cipher.processBlock(block, 0, block.length); + + clearBlock(block); + + return b; + } + + /** + * return true if the internal state represents the signature described + * in the passed in array. + */ + public boolean verifySignature( + byte[] signature) + { + contentDigest.doFinal(mDash, mDash.length - hLen - sLen); + + try + { + byte[] b = cipher.processBlock(signature, 0, signature.length); + System.arraycopy(b, 0, block, block.length - b.length, b.length); + } + catch (Exception e) + { + return false; + } + + if (block[block.length - 1] != trailer) + { + clearBlock(block); + return false; + } + + byte[] dbMask = maskGeneratorFunction1(block, block.length - hLen - 1, hLen, block.length - hLen - 1); + + for (int i = 0; i != dbMask.length; i++) + { + block[i] ^= dbMask[i]; + } + + block[0] &= (0xff >> ((block.length * 8) - emBits)); + + for (int i = 0; i != block.length - hLen - sLen - 2; i++) + { + if (block[i] != 0) + { + clearBlock(block); + return false; + } + } + + if (block[block.length - hLen - sLen - 2] != 0x01) + { + clearBlock(block); + return false; + } + + System.arraycopy(block, block.length - sLen - hLen - 1, mDash, mDash.length - sLen, sLen); + + contentDigest.update(mDash, 0, mDash.length); + contentDigest.doFinal(mDash, mDash.length - hLen); + + for (int i = block.length - hLen - 1, j = mDash.length - hLen; + j != mDash.length; i++, j++) + { + if ((block[i] ^ mDash[j]) != 0) + { + clearBlock(mDash); + clearBlock(block); + return false; + } + } + + clearBlock(mDash); + clearBlock(block); + + return true; + } + + /** + * int to octet string. + */ + private void ItoOSP( + int i, + byte[] sp) + { + sp[0] = (byte)(i >>> 24); + sp[1] = (byte)(i >>> 16); + sp[2] = (byte)(i >>> 8); + sp[3] = (byte)(i >>> 0); + } + + /** + * mask generator function, as described in PKCS1v2. + */ + private byte[] maskGeneratorFunction1( + byte[] Z, + int zOff, + int zLen, + int length) + { + byte[] mask = new byte[length]; + byte[] hashBuf = new byte[mgfhLen]; + byte[] C = new byte[4]; + int counter = 0; + + mgfDigest.reset(); + + while (counter < (length / mgfhLen)) + { + ItoOSP(counter, C); + + mgfDigest.update(Z, zOff, zLen); + mgfDigest.update(C, 0, C.length); + mgfDigest.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, mask, counter * mgfhLen, mgfhLen); + + counter++; + } + + if ((counter * mgfhLen) < length) + { + ItoOSP(counter, C); + + mgfDigest.update(Z, zOff, zLen); + mgfDigest.update(C, 0, C.length); + mgfDigest.doFinal(hashBuf, 0); + + System.arraycopy(hashBuf, 0, mask, counter * mgfhLen, mask.length - (counter * mgfhLen)); + } + + return mask; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/signers/RSADigestSigner.java b/common/src/main/java/org/bouncycastle/crypto/signers/RSADigestSigner.java new file mode 100644 index 0000000..c1ae411 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/signers/RSADigestSigner.java @@ -0,0 +1,223 @@ +package org.bouncycastle.crypto.signers; + +import java.io.IOException; +import java.util.Hashtable; + +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.DERNull; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import org.bouncycastle.asn1.x509.DigestInfo; +import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; +import org.bouncycastle.crypto.AsymmetricBlockCipher; +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.DataLengthException; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.encodings.PKCS1Encoding; +import org.bouncycastle.crypto.engines.RSABlindedEngine; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.util.Arrays; + +public class RSADigestSigner + implements Signer +{ + private final AsymmetricBlockCipher rsaEngine = new PKCS1Encoding(new RSABlindedEngine()); + private final AlgorithmIdentifier algId; + private final Digest digest; + private boolean forSigning; + + private static final Hashtable oidMap = new Hashtable(); + + /* + * Load OID table. + */ + static + { + + oidMap.put("SHA-1", X509ObjectIdentifiers.id_SHA1); + + oidMap.put("MD2", PKCSObjectIdentifiers.md2); + oidMap.put("MD4", PKCSObjectIdentifiers.md4); + oidMap.put("MD5", PKCSObjectIdentifiers.md5); + } + + public RSADigestSigner( + Digest digest) + { + this.digest = digest; + + algId = new AlgorithmIdentifier((ASN1ObjectIdentifier)oidMap.get(digest.getAlgorithmName()), DERNull.INSTANCE); + } + + /** + * @deprecated + */ + public String getAlgorithmName() + { + return digest.getAlgorithmName() + "withRSA"; + } + + /** + * initialise the signer for signing or verification. + * + * @param forSigning + * true if for signing, false otherwise + * @param parameters + * necessary parameters. + */ + public void init( + boolean forSigning, + CipherParameters parameters) + { + this.forSigning = forSigning; + AsymmetricKeyParameter k; + + if (parameters instanceof ParametersWithRandom) + { + k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).getParameters(); + } + else + { + k = (AsymmetricKeyParameter)parameters; + } + + if (forSigning && !k.isPrivate()) + { + throw new IllegalArgumentException("signing requires private key"); + } + + if (!forSigning && k.isPrivate()) + { + throw new IllegalArgumentException("verification requires public key"); + } + + reset(); + + rsaEngine.init(forSigning, parameters); + } + + /** + * update the internal digest with the byte b + */ + public void update( + byte input) + { + digest.update(input); + } + + /** + * update the internal digest with the byte array in + */ + public void update( + byte[] input, + int inOff, + int length) + { + digest.update(input, inOff, length); + } + + /** + * Generate a signature for the message we've been loaded with using the key + * we were initialised with. + */ + public byte[] generateSignature() + throws CryptoException, DataLengthException + { + if (!forSigning) + { + throw new IllegalStateException("RSADigestSigner not initialised for signature generation."); + } + + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + + try + { + byte[] data = derEncode(hash); + return rsaEngine.processBlock(data, 0, data.length); + } + catch (IOException e) + { + throw new CryptoException("unable to encode signature: " + e.getMessage(), e); + } + } + + /** + * return true if the internal state represents the signature described in + * the passed in array. + */ + public boolean verifySignature( + byte[] signature) + { + if (forSigning) + { + throw new IllegalStateException("RSADigestSigner not initialised for verification"); + } + + byte[] hash = new byte[digest.getDigestSize()]; + + digest.doFinal(hash, 0); + + byte[] sig; + byte[] expected; + + try + { + sig = rsaEngine.processBlock(signature, 0, signature.length); + expected = derEncode(hash); + } + catch (Exception e) + { + return false; + } + + if (sig.length == expected.length) + { + return Arrays.constantTimeAreEqual(sig, expected); + } + else if (sig.length == expected.length - 2) // NULL left out + { + int sigOffset = sig.length - hash.length - 2; + int expectedOffset = expected.length - hash.length - 2; + + expected[1] -= 2; // adjust lengths + expected[3] -= 2; + + int nonEqual = 0; + + for (int i = 0; i < hash.length; i++) + { + nonEqual |= (sig[sigOffset + i] ^ expected[expectedOffset + i]); + } + + for (int i = 0; i < sigOffset; i++) + { + nonEqual |= (sig[i] ^ expected[i]); // check header less NULL + } + + return nonEqual == 0; + } + else + { + return false; + } + } + + public void reset() + { + digest.reset(); + } + + private byte[] derEncode( + byte[] hash) + throws IOException + { + DigestInfo dInfo = new DigestInfo(algId, hash); + + return dInfo.getEncoded(ASN1Encoding.DER); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/AlertDescription.java b/common/src/main/java/org/bouncycastle/crypto/tls/AlertDescription.java new file mode 100644 index 0000000..e562ff9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/AlertDescription.java @@ -0,0 +1,47 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 2246 7.2 + */ +public class AlertDescription +{ + public static final short close_notify = 0; + public static final short unexpected_message = 10; + public static final short bad_record_mac = 20; + public static final short decryption_failed = 21; + public static final short record_overflow = 22; + public static final short decompression_failure = 30; + public static final short handshake_failure = 40; + /* no_certificate(41) is specific to SSLv3 */ + public static final short no_certificate = 41; + public static final short bad_certificate = 42; + public static final short unsupported_certificate = 43; + public static final short certificate_revoked = 44; + public static final short certificate_expired = 45; + public static final short certificate_unknown = 46; + public static final short illegal_parameter = 47; + public static final short unknown_ca = 48; + public static final short access_denied = 49; + public static final short decode_error = 50; + public static final short decrypt_error = 51; + public static final short export_restriction = 60; + public static final short protocol_version = 70; + public static final short insufficient_security = 71; + public static final short internal_error = 80; + public static final short user_canceled = 90; + public static final short no_renegotiation = 100; + + /* + * RFC 3546 + */ + public static final short unsupported_extension = 110; + public static final short certificate_unobtainable = 111; + public static final short unrecognized_name = 112; + public static final short bad_certificate_status_response = 113; + public static final short bad_certificate_hash_value = 114; + + /* + * RFC 4279 + */ + public static final short unknown_psk_identity = 115; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/AlertLevel.java b/common/src/main/java/org/bouncycastle/crypto/tls/AlertLevel.java new file mode 100644 index 0000000..b0b131d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/AlertLevel.java @@ -0,0 +1,10 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 2246 7.2 + */ +public class AlertLevel +{ + public static final short warning = 1; + public static final short fatal = 2; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java b/common/src/main/java/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java new file mode 100644 index 0000000..42fc818 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/AlwaysValidVerifyer.java @@ -0,0 +1,25 @@ +package org.bouncycastle.crypto.tls; + +import org.bouncycastle.asn1.x509.X509CertificateStructure; + +/** + * A certificate verifyer, that will always return true. + * + *

        + * DO NOT USE THIS FILE UNLESS YOU KNOW EXACTLY WHAT YOU ARE DOING.
        + * 
        + * + * @deprecated Perform certificate verification in TlsAuthentication implementation + */ +public class AlwaysValidVerifyer implements CertificateVerifyer +{ + /** + * Return true. + * + * @see org.bouncycastle.crypto.tls.CertificateVerifyer#isValid(org.bouncycastle.asn1.x509.X509CertificateStructure[]) + */ + public boolean isValid(X509CertificateStructure[] certs) + { + return true; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/ByteQueue.java b/common/src/main/java/org/bouncycastle/crypto/tls/ByteQueue.java new file mode 100644 index 0000000..f017897 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/ByteQueue.java @@ -0,0 +1,123 @@ +package org.bouncycastle.crypto.tls; + +/** + * A queue for bytes. This file could be more optimized. + */ +public class ByteQueue +{ + /** + * @return The smallest number which can be written as 2^x which is bigger than i. + */ + public static final int nextTwoPow(int i) + { + /* + * This code is based of a lot of code I found on the Internet which mostly + * referenced a book called "Hacking delight". + */ + i |= (i >> 1); + i |= (i >> 2); + i |= (i >> 4); + i |= (i >> 8); + i |= (i >> 16); + return i + 1; + } + + /** + * The initial size for our buffer. + */ + private static final int INITBUFSIZE = 1024; + + /** + * The buffer where we store our data. + */ + private byte[] databuf = new byte[ByteQueue.INITBUFSIZE]; + + /** + * How many bytes at the beginning of the buffer are skipped. + */ + private int skipped = 0; + + /** + * How many bytes in the buffer are valid data. + */ + private int available = 0; + + /** + * Read data from the buffer. + * + * @param buf The buffer where the read data will be copied to. + * @param offset How many bytes to skip at the beginning of buf. + * @param len How many bytes to read at all. + * @param skip How many bytes from our data to skip. + */ + public void read(byte[] buf, int offset, int len, int skip) + { + if ((available - skip) < len) + { + throw new TlsRuntimeException("Not enough data to read"); + } + if ((buf.length - offset) < len) + { + throw new TlsRuntimeException("Buffer size of " + buf.length + + " is too small for a read of " + len + " bytes"); + } + System.arraycopy(databuf, skipped + skip, buf, offset, len); + return; + } + + /** + * Add some data to our buffer. + * + * @param data A byte-array to read data from. + * @param offset How many bytes to skip at the beginning of the array. + * @param len How many bytes to read from the array. + */ + public void addData(byte[] data, int offset, int len) + { + if ((skipped + available + len) > databuf.length) + { + byte[] tmp = new byte[ByteQueue.nextTwoPow(data.length)]; + System.arraycopy(databuf, skipped, tmp, 0, available); + skipped = 0; + databuf = tmp; + } + System.arraycopy(data, offset, databuf, skipped + available, len); + available += len; + } + + /** + * Remove some bytes from our data from the beginning. + * + * @param i How many bytes to remove. + */ + public void removeData(int i) + { + if (i > available) + { + throw new TlsRuntimeException("Cannot remove " + i + " bytes, only got " + available); + } + + /* + * Skip the data. + */ + available -= i; + skipped += i; + + /* + * If more than half of our data is skipped, we will move the data in the buffer. + */ + if (skipped > (databuf.length / 2)) + { + System.arraycopy(databuf, skipped, databuf, 0, available); + skipped = 0; + } + } + + /** + * @return The number of bytes which are available in this buffer. + */ + public int size() + { + return available; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/Certificate.java b/common/src/main/java/org/bouncycastle/crypto/tls/Certificate.java new file mode 100644 index 0000000..c9c118f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/Certificate.java @@ -0,0 +1,121 @@ +package org.bouncycastle.crypto.tls; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Encoding; +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.x509.X509CertificateStructure; + +/** + * A representation for a certificate chain as used by a tls server. + */ +public class Certificate +{ + public static final Certificate EMPTY_CHAIN = new Certificate(new X509CertificateStructure[0]); + + /** + * The certificates. + */ + protected X509CertificateStructure[] certs; + + /** + * Parse the ServerCertificate message. + * + * @param is The stream where to parse from. + * @return A Certificate object with the certs, the server has sended. + * @throws IOException If something goes wrong during parsing. + */ + protected static Certificate parse(InputStream is) throws IOException + { + X509CertificateStructure[] certs; + int left = TlsUtils.readUint24(is); + if (left == 0) + { + return EMPTY_CHAIN; + } + Vector tmp = new Vector(); + while (left > 0) + { + int size = TlsUtils.readUint24(is); + left -= 3 + size; + byte[] buf = new byte[size]; + TlsUtils.readFully(buf, is); + ByteArrayInputStream bis = new ByteArrayInputStream(buf); + ASN1InputStream ais = new ASN1InputStream(bis); + ASN1Primitive o = ais.readObject(); + tmp.addElement(X509CertificateStructure.getInstance(o)); + if (bis.available() > 0) + { + throw new IllegalArgumentException( + "Sorry, there is garbage data left after the certificate"); + } + } + certs = new X509CertificateStructure[tmp.size()]; + for (int i = 0; i < tmp.size(); i++) + { + certs[i] = (X509CertificateStructure)tmp.elementAt(i); + } + return new Certificate(certs); + } + + /** + * Encodes version of the ClientCertificate message + * + * @param os stream to write the message to + * @throws IOException If something goes wrong + */ + protected void encode(OutputStream os) throws IOException + { + Vector encCerts = new Vector(); + int totalSize = 0; + for (int i = 0; i < this.certs.length; ++i) + { + byte[] encCert = certs[i].getEncoded(ASN1Encoding.DER); + encCerts.addElement(encCert); + totalSize += encCert.length + 3; + } + + TlsUtils.writeUint24(totalSize, os); + + for (int i = 0; i < encCerts.size(); ++i) + { + byte[] encCert = (byte[])encCerts.elementAt(i); + TlsUtils.writeOpaque24(encCert, os); + } + } + + /** + * Private constructor from a cert array. + * + * @param certs The certs the chain should contain. + */ + public Certificate(X509CertificateStructure[] certs) + { + if (certs == null) + { + throw new IllegalArgumentException("'certs' cannot be null"); + } + + this.certs = certs; + } + + /** + * @return An array which contains the certs, this chain contains. + */ + public X509CertificateStructure[] getCerts() + { + X509CertificateStructure[] result = new X509CertificateStructure[certs.length]; + System.arraycopy(certs, 0, result, 0, certs.length); + return result; + } + + public boolean isEmpty() + { + return certs.length == 0; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/CertificateRequest.java b/common/src/main/java/org/bouncycastle/crypto/tls/CertificateRequest.java new file mode 100644 index 0000000..294fe28 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/CertificateRequest.java @@ -0,0 +1,28 @@ +package org.bouncycastle.crypto.tls; + +import java.util.Vector; + +public class CertificateRequest +{ + private short[] certificateTypes; + private Vector certificateAuthorities; + + public CertificateRequest(short[] certificateTypes, Vector certificateAuthorities) + { + this.certificateTypes = certificateTypes; + this.certificateAuthorities = certificateAuthorities; + } + + public short[] getCertificateTypes() + { + return certificateTypes; + } + + /** + * @return Vector of X500Name + */ + public Vector getCertificateAuthorities() + { + return certificateAuthorities; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/CertificateVerifyer.java b/common/src/main/java/org/bouncycastle/crypto/tls/CertificateVerifyer.java new file mode 100644 index 0000000..e3902d4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/CertificateVerifyer.java @@ -0,0 +1,18 @@ +package org.bouncycastle.crypto.tls; + +import org.bouncycastle.asn1.x509.X509CertificateStructure; + +/** + * This should be implemented by any class which can find out, if a given certificate + * chain is being accepted by an client. + * + * @deprecated Perform certificate verification in TlsAuthentication implementation + */ +public interface CertificateVerifyer +{ + /** + * @param certs The certs, which are part of the chain. + * @return True, if the chain is accepted, false otherwise. + */ + public boolean isValid(X509CertificateStructure[] certs); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/CipherSuite.java b/common/src/main/java/org/bouncycastle/crypto/tls/CipherSuite.java new file mode 100644 index 0000000..114ca45 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/CipherSuite.java @@ -0,0 +1,135 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 2246 A.5 + */ +public class CipherSuite +{ + public static final int TLS_NULL_WITH_NULL_NULL = 0x0000; + public static final int TLS_RSA_WITH_NULL_MD5 = 0x0001; + public static final int TLS_RSA_WITH_NULL_SHA = 0x0002; + public static final int TLS_RSA_EXPORT_WITH_RC4_40_MD5 = 0x0003; + public static final int TLS_RSA_WITH_RC4_128_MD5 = 0x0004; + public static final int TLS_RSA_WITH_RC4_128_SHA = 0x0005; + public static final int TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x0006; + public static final int TLS_RSA_WITH_IDEA_CBC_SHA = 0x0007; + public static final int TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0008; + public static final int TLS_RSA_WITH_DES_CBC_SHA = 0x0009; + public static final int TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A; + public static final int TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x000B; + public static final int TLS_DH_DSS_WITH_DES_CBC_SHA = 0x000C; + public static final int TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x000D; + public static final int TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x000E; + public static final int TLS_DH_RSA_WITH_DES_CBC_SHA = 0x000F; + public static final int TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x0010; + public static final int TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0011; + public static final int TLS_DHE_DSS_WITH_DES_CBC_SHA = 0x0012; + public static final int TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x0013; + public static final int TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0014; + public static final int TLS_DHE_RSA_WITH_DES_CBC_SHA = 0x0015; + public static final int TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016; + public static final int TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x0017; + public static final int TLS_DH_anon_WITH_RC4_128_MD5 = 0x0018; + public static final int TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x0019; + public static final int TLS_DH_anon_WITH_DES_CBC_SHA = 0x001A; + public static final int TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x001B; + + /* + * RFC 3268 + */ + public static final int TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F; + public static final int TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x0030; + public static final int TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x0031; + public static final int TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032; + public static final int TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033; + public static final int TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x0034; + public static final int TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035; + public static final int TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x0036; + public static final int TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x0037; + public static final int TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038; + public static final int TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039; + public static final int TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x003A; + + /* + * RFC 4279 + */ + public static final int TLS_PSK_WITH_RC4_128_SHA = 0x008A; + public static final int TLS_PSK_WITH_3DES_EDE_CBC_SHA = 0x008B; + public static final int TLS_PSK_WITH_AES_128_CBC_SHA = 0x008C; + public static final int TLS_PSK_WITH_AES_256_CBC_SHA = 0x008D; + public static final int TLS_DHE_PSK_WITH_RC4_128_SHA = 0x008E; + public static final int TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA = 0x008F; + public static final int TLS_DHE_PSK_WITH_AES_128_CBC_SHA = 0x0090; + public static final int TLS_DHE_PSK_WITH_AES_256_CBC_SHA = 0x0091; + public static final int TLS_RSA_PSK_WITH_RC4_128_SHA = 0x0092; + public static final int TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA = 0x0093; + public static final int TLS_RSA_PSK_WITH_AES_128_CBC_SHA = 0x0094; + public static final int TLS_RSA_PSK_WITH_AES_256_CBC_SHA = 0x0095; + + /* + * RFC 4492 + */ + public static final int TLS_ECDH_ECDSA_WITH_NULL_SHA = 0xC001; + public static final int TLS_ECDH_ECDSA_WITH_RC4_128_SHA = 0xC002; + public static final int TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA = 0xC003; + public static final int TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = 0xC004; + public static final int TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = 0xC005; + public static final int TLS_ECDHE_ECDSA_WITH_NULL_SHA = 0xC006; + public static final int TLS_ECDHE_ECDSA_WITH_RC4_128_SHA = 0xC007; + public static final int TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA = 0xC008; + public static final int TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009; + public static final int TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A; + public static final int TLS_ECDH_RSA_WITH_NULL_SHA = 0xC00B; + public static final int TLS_ECDH_RSA_WITH_RC4_128_SHA = 0xC00C; + public static final int TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA = 0xC00D; + public static final int TLS_ECDH_RSA_WITH_AES_128_CBC_SHA = 0xC00E; + public static final int TLS_ECDH_RSA_WITH_AES_256_CBC_SHA = 0xC00F; + public static final int TLS_ECDHE_RSA_WITH_NULL_SHA = 0xC010; + public static final int TLS_ECDHE_RSA_WITH_RC4_128_SHA = 0xC011; + public static final int TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA = 0xC012; + public static final int TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013; + public static final int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014; + public static final int TLS_ECDH_anon_WITH_NULL_SHA = 0xC015; + public static final int TLS_ECDH_anon_WITH_RC4_128_SHA = 0xC016; + public static final int TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA = 0xC017; + public static final int TLS_ECDH_anon_WITH_AES_128_CBC_SHA = 0xC018; + public static final int TLS_ECDH_anon_WITH_AES_256_CBC_SHA = 0xC019; + + /* + * RFC 5054 + */ + public static final int TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0xC01A; + public static final int TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0xC01B; + public static final int TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA = 0xC01C; + public static final int TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0xC01D; + public static final int TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0xC01E; + public static final int TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA = 0xC01F; + public static final int TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0xC020; + public static final int TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0xC021; + public static final int TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA = 0xC022; + + /* + * RFC 5289 + */ + public static final int TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023; + public static final int TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024; + public static final int TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC025; + public static final int TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC026; + public static final int TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027; + public static final int TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028; + public static final int TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = 0xC029; + public static final int TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = 0xC02A; + public static final int TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B; + public static final int TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C; + public static final int TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02D; + public static final int TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02E; + public static final int TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F; + public static final int TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030; + public static final int TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = 0xC031; + public static final int TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = 0xC032; + + /* + * RFC 5746 + */ + public static final int TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/ClientCertificateType.java b/common/src/main/java/org/bouncycastle/crypto/tls/ClientCertificateType.java new file mode 100644 index 0000000..57dcd0d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/ClientCertificateType.java @@ -0,0 +1,19 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 2246 7.4.4 + */ +public class ClientCertificateType +{ + public static final short rsa_sign = 1; + public static final short dss_sign = 2; + public static final short rsa_fixed_dh = 3; + public static final short dss_fixed_dh = 4; + + /* + * RFC 4492 5.5 + */ + public static final short ecdsa_sign = 64; + public static final short rsa_fixed_ecdh = 65; + public static final short ecdsa_fixed_ecdh = 66; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/CombinedHash.java b/common/src/main/java/org/bouncycastle/crypto/tls/CombinedHash.java new file mode 100644 index 0000000..d4db1bd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/CombinedHash.java @@ -0,0 +1,114 @@ +package org.bouncycastle.crypto.tls; + +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.MD5Digest; +import org.bouncycastle.crypto.digests.SHA1Digest; + +/** + * A combined hash, which implements md5(m) || sha1(m). + */ +class CombinedHash implements Digest +{ + protected TlsClientContext context; + protected MD5Digest md5; + protected SHA1Digest sha1; + + CombinedHash() + { + this.md5 = new MD5Digest(); + this.sha1 = new SHA1Digest(); + } + + CombinedHash(TlsClientContext context) + { + this.context = context; + this.md5 = new MD5Digest(); + this.sha1 = new SHA1Digest(); + } + + CombinedHash(CombinedHash t) + { + this.context = t.context; + this.md5 = new MD5Digest(t.md5); + this.sha1 = new SHA1Digest(t.sha1); + } + + /** + * @see org.bouncycastle.crypto.Digest#getAlgorithmName() + */ + public String getAlgorithmName() + { + return md5.getAlgorithmName() + " and " + sha1.getAlgorithmName(); + } + + /** + * @see org.bouncycastle.crypto.Digest#getDigestSize() + */ + public int getDigestSize() + { + return 16 + 20; + } + + /** + * @see org.bouncycastle.crypto.Digest#update(byte) + */ + public void update(byte in) + { + md5.update(in); + sha1.update(in); + } + + /** + * @see org.bouncycastle.crypto.Digest#update(byte[],int,int) + */ + public void update(byte[] in, int inOff, int len) + { + md5.update(in, inOff, len); + sha1.update(in, inOff, len); + } + + /** + * @see org.bouncycastle.crypto.Digest#doFinal(byte[],int) + */ + public int doFinal(byte[] out, int outOff) + { + if (context != null) + { + boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (!isTls) + { + ssl3Complete(md5, SSL3Mac.MD5_IPAD, SSL3Mac.MD5_OPAD); + ssl3Complete(sha1, SSL3Mac.SHA1_IPAD, SSL3Mac.SHA1_OPAD); + } + } + + int i1 = md5.doFinal(out, outOff); + int i2 = sha1.doFinal(out, outOff + 16); + return i1 + i2; + } + + /** + * @see org.bouncycastle.crypto.Digest#reset() + */ + public void reset() + { + md5.reset(); + sha1.reset(); + } + + protected void ssl3Complete(Digest d, byte[] ipad, byte[] opad) + { + byte[] secret = context.getSecurityParameters().masterSecret; + + d.update(secret, 0, secret.length); + d.update(ipad, 0, ipad.length); + + byte[] tmp = new byte[d.getDigestSize()]; + d.doFinal(tmp, 0); + + d.update(secret, 0, secret.length); + d.update(opad, 0, opad.length); + d.update(tmp, 0, tmp.length); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/CompressionMethod.java b/common/src/main/java/org/bouncycastle/crypto/tls/CompressionMethod.java new file mode 100644 index 0000000..50be7a3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/CompressionMethod.java @@ -0,0 +1,19 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 2246 6.1 + */ +public class CompressionMethod +{ + public static final short NULL = 0; + + /* + * RFC 3749 2 + */ + public static final short DEFLATE = 1; + + /* + * Values from 224 decimal (0xE0) through 255 decimal (0xFF) + * inclusive are reserved for private use. + */ +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/ContentType.java b/common/src/main/java/org/bouncycastle/crypto/tls/ContentType.java new file mode 100644 index 0000000..d814eac --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/ContentType.java @@ -0,0 +1,12 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 2246 6.2.1 + */ +public class ContentType +{ + public static final short change_cipher_spec = 20; + public static final short alert = 21; + public static final short handshake = 22; + public static final short application_data = 23; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java new file mode 100644 index 0000000..a91a53c --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsAgreementCredentials.java @@ -0,0 +1,68 @@ +package org.bouncycastle.crypto.tls; + +import javabc.BigInteger; + +import org.bouncycastle.crypto.BasicAgreement; +import org.bouncycastle.crypto.agreement.DHBasicAgreement; +import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.util.BigIntegers; + +public class DefaultTlsAgreementCredentials implements TlsAgreementCredentials +{ + protected Certificate clientCert; + protected AsymmetricKeyParameter clientPrivateKey; + + protected BasicAgreement basicAgreement; + + public DefaultTlsAgreementCredentials(Certificate clientCertificate, AsymmetricKeyParameter clientPrivateKey) + { + if (clientCertificate == null) + { + throw new IllegalArgumentException("'clientCertificate' cannot be null"); + } + if (clientCertificate.certs.length == 0) + { + throw new IllegalArgumentException("'clientCertificate' cannot be empty"); + } + if (clientPrivateKey == null) + { + throw new IllegalArgumentException("'clientPrivateKey' cannot be null"); + } + if (!clientPrivateKey.isPrivate()) + { + throw new IllegalArgumentException("'clientPrivateKey' must be private"); + } + + if (clientPrivateKey instanceof DHPrivateKeyParameters) + { + basicAgreement = new DHBasicAgreement(); + } + else if (clientPrivateKey instanceof ECPrivateKeyParameters) + { + basicAgreement = new ECDHBasicAgreement(); + } + else + { + throw new IllegalArgumentException("'clientPrivateKey' type not supported: " + + clientPrivateKey.getClass().getName()); + } + + this.clientCert = clientCertificate; + this.clientPrivateKey = clientPrivateKey; + } + + public Certificate getCertificate() + { + return clientCert; + } + + public byte[] generateAgreement(AsymmetricKeyParameter serverPublicKey) + { + basicAgreement.init(clientPrivateKey); + BigInteger agreementValue = basicAgreement.calculateAgreement(serverPublicKey); + return BigIntegers.asUnsignedByteArray(agreementValue); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java new file mode 100644 index 0000000..cdf1f73 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsCipherFactory.java @@ -0,0 +1,70 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.MD5Digest; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.digests.SHA256Digest; +import org.bouncycastle.crypto.digests.SHA384Digest; +import org.bouncycastle.crypto.engines.AESFastEngine; +import org.bouncycastle.crypto.engines.DESedeEngine; +import org.bouncycastle.crypto.modes.CBCBlockCipher; + +public class DefaultTlsCipherFactory implements TlsCipherFactory +{ + public TlsCipher createCipher(TlsClientContext context, int encryptionAlgorithm, int digestAlgorithm) throws IOException + { + switch (encryptionAlgorithm) + { + case EncryptionAlgorithm._3DES_EDE_CBC: + return createDESedeCipher(context, 24, digestAlgorithm); + case EncryptionAlgorithm.AES_128_CBC: + return createAESCipher(context, 16, digestAlgorithm); + case EncryptionAlgorithm.AES_256_CBC: + return createAESCipher(context, 32, digestAlgorithm); + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + protected TlsCipher createAESCipher(TlsClientContext context, int cipherKeySize, int digestAlgorithm) throws IOException + { + return new TlsBlockCipher(context, createAESBlockCipher(), + createAESBlockCipher(), createDigest(digestAlgorithm), createDigest(digestAlgorithm), cipherKeySize); + } + + protected TlsCipher createDESedeCipher(TlsClientContext context, int cipherKeySize, int digestAlgorithm) throws IOException + { + return new TlsBlockCipher(context, createDESedeBlockCipher(), + createDESedeBlockCipher(), createDigest(digestAlgorithm), createDigest(digestAlgorithm), cipherKeySize); + } + + protected BlockCipher createAESBlockCipher() + { + return new CBCBlockCipher(new AESFastEngine()); + } + + protected BlockCipher createDESedeBlockCipher() + { + return new CBCBlockCipher(new DESedeEngine()); + } + + protected Digest createDigest(int digestAlgorithm) throws IOException + { + switch (digestAlgorithm) + { + case DigestAlgorithm.MD5: + return new MD5Digest(); + case DigestAlgorithm.SHA: + return new SHA1Digest(); + case DigestAlgorithm.SHA256: + return new SHA256Digest(); + case DigestAlgorithm.SHA384: + return new SHA384Digest(); + default: + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsClient.java b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsClient.java new file mode 100644 index 0000000..9e41e37 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsClient.java @@ -0,0 +1,251 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.util.Hashtable; + +public abstract class DefaultTlsClient implements TlsClient +{ + protected TlsCipherFactory cipherFactory; + + protected TlsClientContext context; + + protected int selectedCipherSuite; + protected int selectedCompressionMethod; + + public DefaultTlsClient() + { + this(new DefaultTlsCipherFactory()); + } + + public DefaultTlsClient(TlsCipherFactory cipherFactory) + { + this.cipherFactory = cipherFactory; + } + + public void init(TlsClientContext context) + { + this.context = context; + } + + public ProtocolVersion getClientVersion() + { + return ProtocolVersion.TLSv10; + } + + public int[] getCipherSuites() + { + return new int[] { + CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, + CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA, + }; + } + + public Hashtable getClientExtensions() + { + return null; + } + + public short[] getCompressionMethods() + { + return new short[] { CompressionMethod.NULL }; + } + + public void notifyServerVersion(ProtocolVersion serverVersion) throws IOException + { + if (!ProtocolVersion.TLSv10.equals(serverVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + + public void notifySessionID(byte[] sessionID) + { + // Currently ignored + } + + public void notifySelectedCipherSuite(int selectedCipherSuite) + { + this.selectedCipherSuite = selectedCipherSuite; + } + + public void notifySelectedCompressionMethod(short selectedCompressionMethod) + { + this.selectedCompressionMethod = selectedCompressionMethod; + } + + public void notifySecureRenegotiation(boolean secureRenegotiation) throws IOException + { + if (!secureRenegotiation) + { + /* + * RFC 5746 3.4. If the extension is not present, the server does not support + * secure renegotiation; set secure_renegotiation flag to FALSE. In this case, + * some clients may want to terminate the handshake instead of continuing; see + * Section 4.1 for discussion. + */ +// throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + + public void processServerExtensions(Hashtable serverExtensions) + { + } + + public TlsKeyExchange getKeyExchange() throws IOException + { + switch (selectedCipherSuite) + { + case CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA: + return createRSAKeyExchange(); + + case CipherSuite.TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA: + return createDHKeyExchange(KeyExchangeAlgorithm.DH_DSS); + + case CipherSuite.TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA: + return createDHKeyExchange(KeyExchangeAlgorithm.DH_RSA); + + case CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA: + return createDHEKeyExchange(KeyExchangeAlgorithm.DHE_DSS); + + case CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + return createDHEKeyExchange(KeyExchangeAlgorithm.DHE_RSA); + + case CipherSuite.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: + return createECDHKeyExchange(KeyExchangeAlgorithm.ECDH_ECDSA); + + case CipherSuite.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + return createECDHEKeyExchange(KeyExchangeAlgorithm.ECDHE_ECDSA); + + case CipherSuite.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: + return createECDHKeyExchange(KeyExchangeAlgorithm.ECDH_RSA); + + case CipherSuite.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + return createECDHEKeyExchange(KeyExchangeAlgorithm.ECDHE_RSA); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected cipher suite was in the list of client-offered cipher + * suites, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public TlsCompression getCompression() throws IOException + { + switch (selectedCompressionMethod) + { + case CompressionMethod.NULL: + return new TlsNullCompression(); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected compression method was in the list of client-offered compression + * methods, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public TlsCipher getCipher() throws IOException + { + switch (selectedCipherSuite) + { + case CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm._3DES_EDE_CBC, DigestAlgorithm.SHA); + + case CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_128_CBC, DigestAlgorithm.SHA); + + case CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_DSS_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_256_CBC, DigestAlgorithm.SHA); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected cipher suite was in the list of client-offered cipher + * suites, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + protected TlsKeyExchange createDHKeyExchange(int keyExchange) + { + return new TlsDHKeyExchange(context, keyExchange); + } + + protected TlsKeyExchange createDHEKeyExchange(int keyExchange) + { + return new TlsDHEKeyExchange(context, keyExchange); + } + + protected TlsKeyExchange createECDHKeyExchange(int keyExchange) + { + return new TlsECDHKeyExchange(context, keyExchange); + } + + protected TlsKeyExchange createECDHEKeyExchange(int keyExchange) + { + return new TlsECDHEKeyExchange(context, keyExchange); + } + + protected TlsKeyExchange createRSAKeyExchange() + { + return new TlsRSAKeyExchange(context); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java new file mode 100644 index 0000000..b26a18a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.java @@ -0,0 +1,79 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +public class DefaultTlsSignerCredentials implements TlsSignerCredentials +{ + protected TlsClientContext context; + protected Certificate clientCert; + protected AsymmetricKeyParameter clientPrivateKey; + + protected TlsSigner clientSigner; + + public DefaultTlsSignerCredentials(TlsClientContext context, Certificate clientCertificate, + AsymmetricKeyParameter clientPrivateKey) + { + if (clientCertificate == null) + { + throw new IllegalArgumentException("'clientCertificate' cannot be null"); + } + if (clientCertificate.certs.length == 0) + { + throw new IllegalArgumentException("'clientCertificate' cannot be empty"); + } + if (clientPrivateKey == null) + { + throw new IllegalArgumentException("'clientPrivateKey' cannot be null"); + } + if (!clientPrivateKey.isPrivate()) + { + throw new IllegalArgumentException("'clientPrivateKey' must be private"); + } + + if (clientPrivateKey instanceof RSAKeyParameters) + { + clientSigner = new TlsRSASigner(); + } + else if (clientPrivateKey instanceof DSAPrivateKeyParameters) + { + clientSigner = new TlsDSSSigner(); + } + else if (clientPrivateKey instanceof ECPrivateKeyParameters) + { + clientSigner = new TlsECDSASigner(); + } + else + { + throw new IllegalArgumentException("'clientPrivateKey' type not supported: " + + clientPrivateKey.getClass().getName()); + } + + this.context = context; + this.clientCert = clientCertificate; + this.clientPrivateKey = clientPrivateKey; + } + + public Certificate getCertificate() + { + return clientCert; + } + + public byte[] generateCertificateSignature(byte[] md5andsha1) throws IOException + { + try + { + return clientSigner.calculateRawSignature(context.getSecureRandom(), clientPrivateKey, + md5andsha1); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/DigestAlgorithm.java b/common/src/main/java/org/bouncycastle/crypto/tls/DigestAlgorithm.java new file mode 100644 index 0000000..25f4631 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/DigestAlgorithm.java @@ -0,0 +1,18 @@ +package org.bouncycastle.crypto.tls; + +public class DigestAlgorithm +{ + /* + * Note that the values here are implementation-specific and arbitrary. + * It is recommended not to depend on the particular values (e.g. serialization). + */ + public static final int NULL = 0; + public static final int MD5 = 1; + public static final int SHA = 2; + + /* + * RFC 5289 + */ + public static final int SHA256 = 3; + public static final int SHA384 = 4; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/ECCurveType.java b/common/src/main/java/org/bouncycastle/crypto/tls/ECCurveType.java new file mode 100644 index 0000000..0b6542f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/ECCurveType.java @@ -0,0 +1,28 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 4492 5.4 + */ +public class ECCurveType +{ + /** + * Indicates the elliptic curve domain parameters are conveyed verbosely, and the + * underlying finite field is a prime field. + */ + public static final short explicit_prime = 1; + + /** + * Indicates the elliptic curve domain parameters are conveyed verbosely, and the + * underlying finite field is a characteristic-2 field. + */ + public static final short explicit_char2 = 2; + + /** + * Indicates that a named curve is used. This option SHOULD be used when applicable. + */ + public static final short named_curve = 3; + + /* + * Values 248 through 255 are reserved for private use. + */ +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/ECPointFormat.java b/common/src/main/java/org/bouncycastle/crypto/tls/ECPointFormat.java new file mode 100644 index 0000000..969d42e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/ECPointFormat.java @@ -0,0 +1,15 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 4492 5.1.2 + */ +public class ECPointFormat +{ + public static final short uncompressed = 0; + public static final short ansiX962_compressed_prime = 1; + public static final short ansiX962_compressed_char2 = 2; + + /* + * reserved (248..255) + */ +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java b/common/src/main/java/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java new file mode 100644 index 0000000..4d8fa68 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/EncryptionAlgorithm.java @@ -0,0 +1,29 @@ +package org.bouncycastle.crypto.tls; + +public class EncryptionAlgorithm +{ + /* + * Note that the values here are implementation-specific and arbitrary. + * It is recommended not to depend on the particular values (e.g. serialization). + */ + public static final int NULL = 0; + public static final int RC4_40 = 1; + public static final int RC4_128 = 2; + public static final int RC2_CBC_40 = 3; + public static final int IDEA_CBC = 4; + public static final int DES40_CBC = 5; + public static final int DES_CBC = 6; + public static final int _3DES_EDE_CBC = 7; + + /* + * RFC 3268 + */ + public static final int AES_128_CBC = 8; + public static final int AES_256_CBC = 9; + + /* + * RFC 5289 + */ + public static final int AES_128_GCM = 10; + public static final int AES_256_GCM = 11; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/ExtensionType.java b/common/src/main/java/org/bouncycastle/crypto/tls/ExtensionType.java new file mode 100644 index 0000000..204f92a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/ExtensionType.java @@ -0,0 +1,30 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 4366 2.3 + */ +public class ExtensionType +{ + public static final int server_name = 0; + public static final int max_fragment_length = 1; + public static final int client_certificate_url = 2; + public static final int trusted_ca_keys = 3; + public static final int truncated_hmac = 4; + public static final int status_request = 5; + + /* + * RFC 4492 + */ + public static final int elliptic_curves = 10; + public static final int ec_point_formats = 11; + + /* + * RFC 5054 2.8.1 + */ + public static final int srp = 12; + + /* + * RFC 5746 6 + */ + public static final int renegotiation_info = 0xff01; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/HandshakeType.java b/common/src/main/java/org/bouncycastle/crypto/tls/HandshakeType.java new file mode 100644 index 0000000..14e271d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/HandshakeType.java @@ -0,0 +1,18 @@ +package org.bouncycastle.crypto.tls; + +/** + * RFC 2246 7.4 + */ +public class HandshakeType +{ + public static final short hello_request = 0; + public static final short client_hello = 1; + public static final short server_hello = 2; + public static final short certificate = 11; + public static final short server_key_exchange = 12; + public static final short certificate_request = 13; + public static final short server_hello_done = 14; + public static final short certificate_verify = 15; + public static final short client_key_exchange = 16; + public static final short finished = 20; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java b/common/src/main/java/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java new file mode 100644 index 0000000..6415663 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/KeyExchangeAlgorithm.java @@ -0,0 +1,33 @@ +package org.bouncycastle.crypto.tls; + +public class KeyExchangeAlgorithm +{ + /* + * Note that the values here are implementation-specific and arbitrary. + * It is recommended not to depend on the particular values (e.g. serialization). + */ + public static final int NULL = 0; + public static final int RSA = 1; + public static final int RSA_EXPORT = 2; + public static final int DHE_DSS = 3; + public static final int DHE_DSS_EXPORT = 4; + public static final int DHE_RSA = 5; + public static final int DHE_RSA_EXPORT = 6; + public static final int DH_DSS = 7; + public static final int DH_DSS_EXPORT = 8; + public static final int DH_RSA = 9; + public static final int DH_RSA_EXPORT = 10; + public static final int DH_anon = 11; + public static final int DH_anon_EXPORT = 12; + public static final int PSK = 13; + public static final int DHE_PSK = 14; + public static final int RSA_PSK = 15; + public static final int ECDH_ECDSA = 16; + public static final int ECDHE_ECDSA = 17; + public static final int ECDH_RSA = 18; + public static final int ECDHE_RSA = 19; + public static final int ECDH_anon = 20; + public static final int SRP = 21; + public static final int SRP_DSS = 22; + public static final int SRP_RSA = 23; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java b/common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java new file mode 100644 index 0000000..75e7474 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsAuthentication.java @@ -0,0 +1,32 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +/** + * A temporary class to wrap old CertificateVerifyer stuff for new TlsAuthentication + * + * @deprecated + */ +public class LegacyTlsAuthentication implements TlsAuthentication +{ + protected CertificateVerifyer verifyer; + + public LegacyTlsAuthentication(CertificateVerifyer verifyer) + { + this.verifyer = verifyer; + } + + public void notifyServerCertificate(Certificate serverCertificate) throws IOException + { + if (!this.verifyer.isValid(serverCertificate.getCerts())) + { + throw new TlsFatalAlert(AlertDescription.user_canceled); + } + } + + public TlsCredentials getClientCredentials(CertificateRequest certificateRequest) + throws IOException + { + return null; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsClient.java b/common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsClient.java new file mode 100644 index 0000000..2af98b8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/LegacyTlsClient.java @@ -0,0 +1,29 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +/** + * A temporary class to use LegacyTlsAuthentication + * + * @deprecated + */ +public class LegacyTlsClient extends DefaultTlsClient +{ + /** @deprecated */ + protected CertificateVerifyer verifyer; + + /** + * @deprecated + */ + public LegacyTlsClient(CertificateVerifyer verifyer) + { + super(); + + this.verifyer = verifyer; + } + + public TlsAuthentication getAuthentication() throws IOException + { + return new LegacyTlsAuthentication(verifyer); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/NamedCurve.java b/common/src/main/java/org/bouncycastle/crypto/tls/NamedCurve.java new file mode 100644 index 0000000..bebabcb --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/NamedCurve.java @@ -0,0 +1,100 @@ +package org.bouncycastle.crypto.tls; + +import org.bouncycastle.asn1.sec.SECNamedCurves; +import org.bouncycastle.asn1.x9.X9ECParameters; +import org.bouncycastle.crypto.params.ECDomainParameters; + +/** + * RFC 4492 5.1.1 + * + * The named curves defined here are those specified in SEC 2 [13]. Note that many of + * these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + * through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + * client supports arbitrary prime and characteristic-2 curves, respectively (the curve + * parameters must be encoded explicitly in ECParameters). + */ +public class NamedCurve +{ + public static final int sect163k1 = 1; + public static final int sect163r1 = 2; + public static final int sect163r2 = 3; + public static final int sect193r1 = 4; + public static final int sect193r2 = 5; + public static final int sect233k1 = 6; + public static final int sect233r1 = 7; + public static final int sect239k1 = 8; + public static final int sect283k1 = 9; + public static final int sect283r1 = 10; + public static final int sect409k1 = 11; + public static final int sect409r1 = 12; + public static final int sect571k1 = 13; + public static final int sect571r1 = 14; + public static final int secp160k1 = 15; + public static final int secp160r1 = 16; + public static final int secp160r2 = 17; + public static final int secp192k1 = 18; + public static final int secp192r1 = 19; + public static final int secp224k1 = 20; + public static final int secp224r1 = 21; + public static final int secp256k1 = 22; + public static final int secp256r1 = 23; + public static final int secp384r1 = 24; + public static final int secp521r1 = 25; + + /* + * reserved (0xFE00..0xFEFF) + */ + + public static final int arbitrary_explicit_prime_curves = 0xFF01; + public static final int arbitrary_explicit_char2_curves = 0xFF02; + + private static final String[] curveNames = new String[] { + "sect163k1", + "sect163r1", + "sect163r2", + "sect193r1", + "sect193r2", + "sect233k1", + "sect233r1", + "sect239k1", + "sect283k1", + "sect283r1", + "sect409k1", + "sect409r1", + "sect571k1", + "sect571r1", + "secp160k1", + "secp160r1", + "secp160r2", + "secp192k1", + "secp192r1", + "secp224k1", + "secp224r1", + "secp256k1", + "secp256r1", + "secp384r1", + "secp521r1", }; + + static ECDomainParameters getECParameters(int namedCurve) + { + int index = namedCurve - 1; + if (index < 0 || index >= curveNames.length) + { + return null; + } + + String curveName = curveNames[index]; + + // Lazily created the first time a particular curve is accessed + X9ECParameters ecP = SECNamedCurves.getByName(curveName); + + if (ecP == null) + { + return null; + } + + // It's a bit inefficient to do this conversion every time + return new ECDomainParameters(ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), + ecP.getSeed()); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/PSKTlsClient.java b/common/src/main/java/org/bouncycastle/crypto/tls/PSKTlsClient.java new file mode 100644 index 0000000..57043cc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/PSKTlsClient.java @@ -0,0 +1,192 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.util.Hashtable; + +public class PSKTlsClient implements TlsClient +{ + protected TlsCipherFactory cipherFactory; + protected TlsPSKIdentity pskIdentity; + + protected TlsClientContext context; + + protected int selectedCompressionMethod; + protected int selectedCipherSuite; + + public PSKTlsClient(TlsPSKIdentity pskIdentity) + { + this(new DefaultTlsCipherFactory(), pskIdentity); + } + + public PSKTlsClient(TlsCipherFactory cipherFactory, TlsPSKIdentity pskIdentity) + { + this.cipherFactory = cipherFactory; + this.pskIdentity = pskIdentity; + } + + public ProtocolVersion getClientVersion() + { + return ProtocolVersion.TLSv10; + } + + public void init(TlsClientContext context) + { + this.context = context; + } + + public int[] getCipherSuites() + { + return new int[] { + CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, + CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, + CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA, }; + } + + public Hashtable getClientExtensions() throws IOException + { + return null; + } + + public short[] getCompressionMethods() + { + return new short[] { CompressionMethod.NULL }; + } + + public void notifyServerVersion(ProtocolVersion serverVersion) throws IOException + { + if (!ProtocolVersion.TLSv10.equals(serverVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + + public void notifySessionID(byte[] sessionID) + { + // Currently ignored + } + + public void notifySelectedCipherSuite(int selectedCipherSuite) + { + this.selectedCipherSuite = selectedCipherSuite; + } + + public void notifySelectedCompressionMethod(short selectedCompressionMethod) + { + this.selectedCompressionMethod = selectedCompressionMethod; + } + + public void notifySecureRenegotiation(boolean secureRenegotiation) throws IOException + { + if (!secureRenegotiation) + { + /* + * RFC 5746 3.4. If the extension is not present, the server does not support + * secure renegotiation; set secure_renegotiation flag to FALSE. In this case, + * some clients may want to terminate the handshake instead of continuing; see + * Section 4.1 for discussion. + */ +// throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + + public void processServerExtensions(Hashtable serverExtensions) + { + } + + public TlsKeyExchange getKeyExchange() throws IOException + { + switch (selectedCipherSuite) + { + case CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA: + return createPSKKeyExchange(KeyExchangeAlgorithm.PSK); + + case CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA: + return createPSKKeyExchange(KeyExchangeAlgorithm.RSA_PSK); + + case CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA: + return createPSKKeyExchange(KeyExchangeAlgorithm.DHE_PSK); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected cipher suite was in the list of client-offered cipher + * suites, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public TlsAuthentication getAuthentication() throws IOException + { + return null; + } + + public TlsCompression getCompression() throws IOException + { + switch (selectedCompressionMethod) + { + case CompressionMethod.NULL: + return new TlsNullCompression(); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected compression method was in the list of client-offered compression + * methods, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public TlsCipher getCipher() throws IOException + { + switch (selectedCipherSuite) + { + case CipherSuite.TLS_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm._3DES_EDE_CBC, + DigestAlgorithm.SHA); + + case CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_128_CBC, + DigestAlgorithm.SHA); + + case CipherSuite.TLS_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_RSA_PSK_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_DHE_PSK_WITH_AES_256_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_256_CBC, + DigestAlgorithm.SHA); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected cipher suite was in the list of client-offered cipher + * suites, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + protected TlsKeyExchange createPSKKeyExchange(int keyExchange) + { + return new TlsPSKKeyExchange(context, keyExchange, pskIdentity); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/ProtocolVersion.java b/common/src/main/java/org/bouncycastle/crypto/tls/ProtocolVersion.java new file mode 100644 index 0000000..e7f1557 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/ProtocolVersion.java @@ -0,0 +1,64 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +public class ProtocolVersion +{ + public static final ProtocolVersion SSLv3 = new ProtocolVersion(0x0300); + public static final ProtocolVersion TLSv10 = new ProtocolVersion(0x0301); + public static final ProtocolVersion TLSv11 = new ProtocolVersion(0x0302); + public static final ProtocolVersion TLSv12 = new ProtocolVersion(0x0303); + + private int version; + + private ProtocolVersion(int v) + { + version = v & 0xffff; + } + + public int getFullVersion() + { + return version; + } + + public int getMajorVersion() + { + return version >> 8; + } + + public int getMinorVersion() + { + return version & 0xff; + } + + public boolean equals(Object obj) + { + return this == obj; + } + + public int hashCode() + { + return version; + } + + public static ProtocolVersion get(int major, int minor) throws IOException + { + switch (major) + { + case 3: + switch (minor) + { + case 0: + return SSLv3; + case 1: + return TLSv10; + case 2: + return TLSv11; + case 3: + return TLSv12; + } + } + + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/RecordStream.java b/common/src/main/java/org/bouncycastle/crypto/tls/RecordStream.java new file mode 100644 index 0000000..fe5ca2f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/RecordStream.java @@ -0,0 +1,191 @@ +package org.bouncycastle.crypto.tls; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.bouncycastle.crypto.Digest; + +/** + * An implementation of the TLS 1.0 record layer, allowing downgrade to SSLv3. + */ +class RecordStream +{ + private TlsProtocolHandler handler; + private InputStream is; + private OutputStream os; + private TlsCompression readCompression = null; + private TlsCompression writeCompression = null; + private TlsCipher readCipher = null; + private TlsCipher writeCipher = null; + private ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + private TlsClientContext context = null; + private CombinedHash hash = null; + + RecordStream(TlsProtocolHandler handler, InputStream is, OutputStream os) + { + this.handler = handler; + this.is = is; + this.os = os; + this.readCompression = new TlsNullCompression(); + this.writeCompression = this.readCompression; + this.readCipher = new TlsNullCipher(); + this.writeCipher = this.readCipher; + } + + void init(TlsClientContext context) + { + this.context = context; + this.hash = new CombinedHash(context); + } + + void clientCipherSpecDecided(TlsCompression tlsCompression, TlsCipher tlsCipher) + { + this.writeCompression = tlsCompression; + this.writeCipher = tlsCipher; + } + + void serverClientSpecReceived() + { + this.readCompression = this.writeCompression; + this.readCipher = this.writeCipher; + } + + public void readData() throws IOException + { + short type = TlsUtils.readUint8(is); + + // TODO In light of versioning and SSLv3, what should we expect here? + ProtocolVersion expectedVersion = ProtocolVersion.TLSv10; //context.getServerVersion(); + if (!expectedVersion.equals(TlsUtils.readVersion(is))) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + int size = TlsUtils.readUint16(is); + byte[] buf = decodeAndVerify(type, is, size); + handler.processData(type, buf, 0, buf.length); + } + + protected byte[] decodeAndVerify(short type, InputStream is, int len) throws IOException + { + byte[] buf = new byte[len]; + TlsUtils.readFully(buf, is); + byte[] decoded = readCipher.decodeCiphertext(type, buf, 0, buf.length); + + OutputStream cOut = readCompression.decompress(buffer); + + if (cOut == buffer) + { + return decoded; + } + + cOut.write(decoded, 0, decoded.length); + cOut.flush(); + return getBufferContents(); + } + + protected void writeMessage(short type, byte[] message, int offset, int len) throws IOException + { + if (type == ContentType.handshake) + { + updateHandshakeData(message, offset, len); + } + + OutputStream cOut = writeCompression.compress(buffer); + + byte[] ciphertext; + if (cOut == buffer) + { + ciphertext = writeCipher.encodePlaintext(type, message, offset, len); + } + else + { + cOut.write(message, offset, len); + cOut.flush(); + byte[] compressed = getBufferContents(); + ciphertext = writeCipher.encodePlaintext(type, compressed, 0, compressed.length); + } + + byte[] writeMessage = new byte[ciphertext.length + 5]; + TlsUtils.writeUint8(type, writeMessage, 0); + // TODO In light of versioning, what should we send here? +// TlsUtils.writeVersion(context.getServerVersion(), writeMessage, 1); + TlsUtils.writeVersion(ProtocolVersion.TLSv10, writeMessage, 1); + TlsUtils.writeUint16(ciphertext.length, writeMessage, 3); + System.arraycopy(ciphertext, 0, writeMessage, 5, ciphertext.length); + os.write(writeMessage); + os.flush(); + } + + void updateHandshakeData(byte[] message, int offset, int len) + { + hash.update(message, offset, len); + } + + /** + * 'sender' only relevant to SSLv3 + */ + byte[] getCurrentHash(byte[] sender) + { + Digest d = new CombinedHash(hash); + + boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (!isTls) + { + if (sender != null) + { + d.update(sender, 0, sender.length); + } + } + + return doFinal(d); + } + + protected void close() throws IOException + { + IOException e = null; + try + { + is.close(); + } + catch (IOException ex) + { + e = ex; + } + try + { + os.close(); + } + catch (IOException ex) + { + e = ex; + } + if (e != null) + { + throw e; + } + } + + protected void flush() throws IOException + { + os.flush(); + } + + private byte[] getBufferContents() + { + byte[] contents = buffer.toByteArray(); + buffer.reset(); + return contents; + } + + private static byte[] doFinal(Digest d) + { + byte[] bs = new byte[d.getDigestSize()]; + d.doFinal(bs, 0); + return bs; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/SRPTlsClient.java b/common/src/main/java/org/bouncycastle/crypto/tls/SRPTlsClient.java new file mode 100644 index 0000000..f4f27c4 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/SRPTlsClient.java @@ -0,0 +1,201 @@ +package org.bouncycastle.crypto.tls; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Hashtable; + +import org.bouncycastle.util.Arrays; + +public abstract class SRPTlsClient implements TlsClient +{ + public static final Integer EXT_SRP = new Integer(ExtensionType.srp); + + protected TlsCipherFactory cipherFactory; + protected byte[] identity; + protected byte[] password; + + protected TlsClientContext context; + + protected int selectedCompressionMethod; + protected int selectedCipherSuite; + + public SRPTlsClient(byte[] identity, byte[] password) + { + this(new DefaultTlsCipherFactory(), identity, password); + } + + public SRPTlsClient(TlsCipherFactory cipherFactory, byte[] identity, byte[] password) + { + this.cipherFactory = cipherFactory; + this.identity = Arrays.clone(identity); + this.password = Arrays.clone(password); + } + + public void init(TlsClientContext context) + { + this.context = context; + } + + public ProtocolVersion getClientVersion() + { + return ProtocolVersion.TLSv10; + } + + public int[] getCipherSuites() + { + return new int[] { + CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, + CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, + CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA, + CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA, + CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA, }; + } + + public Hashtable getClientExtensions() throws IOException + { + Hashtable clientExtensions = new Hashtable(); + + ByteArrayOutputStream srpData = new ByteArrayOutputStream(); + TlsUtils.writeOpaque8(this.identity, srpData); + clientExtensions.put(EXT_SRP, srpData.toByteArray()); + + return clientExtensions; + } + + public short[] getCompressionMethods() + { + return new short[] { CompressionMethod.NULL }; + } + + public void notifyServerVersion(ProtocolVersion serverVersion) throws IOException + { + if (!ProtocolVersion.TLSv10.equals(serverVersion)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + + public void notifySessionID(byte[] sessionID) + { + // Currently ignored + } + + public void notifySelectedCipherSuite(int selectedCipherSuite) + { + this.selectedCipherSuite = selectedCipherSuite; + } + + public void notifySelectedCompressionMethod(short selectedCompressionMethod) + { + this.selectedCompressionMethod = selectedCompressionMethod; + } + + public void notifySecureRenegotiation(boolean secureRenegotiation) throws IOException + { + if (!secureRenegotiation) + { + /* + * RFC 5746 3.4. If the extension is not present, the server does not support + * secure renegotiation; set secure_renegotiation flag to FALSE. In this case, + * some clients may want to terminate the handshake instead of continuing; see + * Section 4.1 for discussion. + */ +// throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + } + + public void processServerExtensions(Hashtable serverExtensions) + { + // There is no server response for the SRP extension + } + + public TlsKeyExchange getKeyExchange() throws IOException + { + switch (selectedCipherSuite) + { + case CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA: + return createSRPKeyExchange(KeyExchangeAlgorithm.SRP); + + case CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA: + return createSRPKeyExchange(KeyExchangeAlgorithm.SRP_RSA); + + case CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA: + return createSRPKeyExchange(KeyExchangeAlgorithm.SRP_DSS); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected cipher suite was in the list of client-offered cipher + * suites, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public TlsCompression getCompression() throws IOException + { + switch (selectedCompressionMethod) + { + case CompressionMethod.NULL: + return new TlsNullCompression(); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected compression method was in the list of client-offered compression + * methods, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public TlsCipher getCipher() throws IOException + { + switch (selectedCipherSuite) + { + case CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm._3DES_EDE_CBC, + DigestAlgorithm.SHA); + + case CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_128_CBC, + DigestAlgorithm.SHA); + + case CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA: + case CipherSuite.TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA: + return cipherFactory.createCipher(context, EncryptionAlgorithm.AES_256_CBC, + DigestAlgorithm.SHA); + + default: + /* + * Note: internal error here; the TlsProtocolHandler verifies that the + * server-selected cipher suite was in the list of client-offered cipher + * suites, so if we now can't produce an implementation, we shouldn't have + * offered it! + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + protected TlsKeyExchange createSRPKeyExchange(int keyExchange) + { + return new TlsSRPKeyExchange(context, keyExchange, identity, password); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/SSL3Mac.java b/common/src/main/java/org/bouncycastle/crypto/tls/SSL3Mac.java new file mode 100644 index 0000000..63e33fd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/SSL3Mac.java @@ -0,0 +1,117 @@ +package org.bouncycastle.crypto.tls; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.util.Arrays; + +/** + * HMAC implementation based on original internet draft for HMAC (RFC 2104) + * + * The difference is that padding is concatentated versus XORed with the key + * + * H(K + opad, H(K + ipad, text)) + */ +public class SSL3Mac implements Mac +{ + private final static byte IPAD = (byte)0x36; + private final static byte OPAD = (byte)0x5C; + + static final byte[] MD5_IPAD = genPad(IPAD, 48); + static final byte[] MD5_OPAD = genPad(OPAD, 48); + static final byte[] SHA1_IPAD = genPad(IPAD, 40); + static final byte[] SHA1_OPAD = genPad(OPAD, 40); + + private Digest digest; + + private byte[] secret; + private byte[] ipad, opad; + + /** + * Base constructor for one of the standard digest algorithms that the byteLength of + * the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + * + * @param digest the digest. + */ + public SSL3Mac(Digest digest) + { + this.digest = digest; + + if (digest.getDigestSize() == 20) + { + this.ipad = SHA1_IPAD; + this.opad = SHA1_OPAD; + } + else + { + this.ipad = MD5_IPAD; + this.opad = MD5_OPAD; + } + } + + public String getAlgorithmName() + { + return digest.getAlgorithmName() + "/SSL3MAC"; + } + + public Digest getUnderlyingDigest() + { + return digest; + } + + public void init(CipherParameters params) + { + secret = Arrays.clone(((KeyParameter)params).getKey()); + + reset(); + } + + public int getMacSize() + { + return digest.getDigestSize(); + } + + public void update(byte in) + { + digest.update(in); + } + + public void update(byte[] in, int inOff, int len) + { + digest.update(in, inOff, len); + } + + public int doFinal(byte[] out, int outOff) + { + byte[] tmp = new byte[digest.getDigestSize()]; + digest.doFinal(tmp, 0); + + digest.update(secret, 0, secret.length); + digest.update(opad, 0, opad.length); + digest.update(tmp, 0, tmp.length); + + int len = digest.doFinal(out, outOff); + + reset(); + + return len; + } + + /** + * Reset the mac generator. + */ + public void reset() + { + digest.reset(); + digest.update(secret, 0, secret.length); + digest.update(ipad, 0, ipad.length); + } + + private static byte[] genPad(byte b, int count) + { + byte[] padding = new byte[count]; + Arrays.fill(padding, b); + return padding; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/SecurityParameters.java b/common/src/main/java/org/bouncycastle/crypto/tls/SecurityParameters.java new file mode 100644 index 0000000..b3c433d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/SecurityParameters.java @@ -0,0 +1,23 @@ +package org.bouncycastle.crypto.tls; + +public class SecurityParameters +{ + byte[] clientRandom = null; + byte[] serverRandom = null; + byte[] masterSecret = null; + + public byte[] getClientRandom() + { + return clientRandom; + } + + public byte[] getServerRandom() + { + return serverRandom; + } + + public byte[] getMasterSecret() + { + return masterSecret; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java new file mode 100644 index 0000000..9e70ed0 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsAgreementCredentials.java @@ -0,0 +1,10 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; + +public interface TlsAgreementCredentials extends TlsCredentials +{ + byte[] generateAgreement(AsymmetricKeyParameter serverPublicKey) throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsAuthentication.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsAuthentication.java new file mode 100644 index 0000000..e280009 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsAuthentication.java @@ -0,0 +1,24 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +public interface TlsAuthentication +{ + /** + * Called by the protocol handler to report the server certificate + * Note: this method is responsible for certificate verification and validation + * + * @param serverCertificate the server certificate received + * @throws IOException + */ + void notifyServerCertificate(Certificate serverCertificate) throws IOException; + + /** + * Return client credentials in response to server's certificate request + * + * @param certificateRequest details of the certificate request + * @return a TlsCredentials object or null for no client authentication + * @throws IOException + */ + TlsCredentials getClientCredentials(CertificateRequest certificateRequest) throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsBlockCipher.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsBlockCipher.java new file mode 100644 index 0000000..dd1a963 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsBlockCipher.java @@ -0,0 +1,240 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.BlockCipher; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.util.Arrays; + +/** + * A generic TLS 1.0 / SSLv3 block cipher. + * This can be used for AES or 3DES for example. + */ +public class TlsBlockCipher implements TlsCipher +{ + protected TlsClientContext context; + + protected BlockCipher encryptCipher; + protected BlockCipher decryptCipher; + + protected TlsMac writeMac; + protected TlsMac readMac; + + public TlsMac getWriteMac() + { + return writeMac; + } + + public TlsMac getReadMac() + { + return readMac; + } + + public TlsBlockCipher(TlsClientContext context, BlockCipher encryptCipher, + BlockCipher decryptCipher, Digest writeDigest, Digest readDigest, int cipherKeySize) + { + this.context = context; + this.encryptCipher = encryptCipher; + this.decryptCipher = decryptCipher; + + int key_block_size = (2 * cipherKeySize) + writeDigest.getDigestSize() + + readDigest.getDigestSize() + encryptCipher.getBlockSize() + + decryptCipher.getBlockSize(); + + byte[] key_block = TlsUtils.calculateKeyBlock(context, key_block_size); + + int offset = 0; + + // Init MACs + writeMac = new TlsMac(context, writeDigest, key_block, offset, writeDigest.getDigestSize()); + offset += writeDigest.getDigestSize(); + readMac = new TlsMac(context, readDigest, key_block, offset, readDigest.getDigestSize()); + offset += readDigest.getDigestSize(); + + // Init Ciphers + this.initCipher(true, encryptCipher, key_block, cipherKeySize, offset, offset + + (cipherKeySize * 2)); + offset += cipherKeySize; + this.initCipher(false, decryptCipher, key_block, cipherKeySize, offset, offset + + cipherKeySize + encryptCipher.getBlockSize()); + + } + + protected void initCipher(boolean forEncryption, BlockCipher cipher, byte[] key_block, + int key_size, int key_offset, int iv_offset) + { + KeyParameter key_parameter = new KeyParameter(key_block, key_offset, key_size); + ParametersWithIV parameters_with_iv = new ParametersWithIV(key_parameter, key_block, + iv_offset, cipher.getBlockSize()); + cipher.init(forEncryption, parameters_with_iv); + } + + public byte[] encodePlaintext(short type, byte[] plaintext, int offset, int len) + { + int blocksize = encryptCipher.getBlockSize(); + int minPaddingSize = blocksize - ((len + writeMac.getSize() + 1) % blocksize); + int paddingSize = minPaddingSize; + + boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (isTls) + { + // Add a random number of extra blocks worth of padding + int maxExtraPadBlocks = (255 - minPaddingSize) / blocksize; + int actualExtraPadBlocks = chooseExtraPadBlocks(context.getSecureRandom(), maxExtraPadBlocks); + paddingSize += (actualExtraPadBlocks * blocksize); + } + + int totalsize = len + writeMac.getSize() + paddingSize + 1; + byte[] outbuf = new byte[totalsize]; + System.arraycopy(plaintext, offset, outbuf, 0, len); + byte[] mac = writeMac.calculateMac(type, plaintext, offset, len); + System.arraycopy(mac, 0, outbuf, len, mac.length); + int paddoffset = len + mac.length; + for (int i = 0; i <= paddingSize; i++) + { + outbuf[i + paddoffset] = (byte)paddingSize; + } + for (int i = 0; i < totalsize; i += blocksize) + { + encryptCipher.processBlock(outbuf, i, outbuf, i); + } + return outbuf; + } + + public byte[] decodeCiphertext(short type, byte[] ciphertext, int offset, int len) + throws IOException + { + // TODO TLS 1.1 (RFC 4346) introduces an explicit IV + + int minLength = readMac.getSize() + 1; + int blocksize = decryptCipher.getBlockSize(); + boolean decrypterror = false; + + /* + * ciphertext must be at least (macsize + 1) bytes long + */ + if (len < minLength) + { + throw new TlsFatalAlert(AlertDescription.decode_error); + } + + /* + * ciphertext must be a multiple of blocksize + */ + if (len % blocksize != 0) + { + throw new TlsFatalAlert(AlertDescription.decryption_failed); + } + + /* + * Decrypt all the ciphertext using the blockcipher + */ + for (int i = 0; i < len; i += blocksize) + { + decryptCipher.processBlock(ciphertext, i + offset, ciphertext, i + offset); + } + + /* + * Check if padding is correct + */ + int lastByteOffset = offset + len - 1; + + byte paddingsizebyte = ciphertext[lastByteOffset]; + + // Note: interpret as unsigned byte + int paddingsize = paddingsizebyte & 0xff; + + boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + int maxPaddingSize = len - minLength; + if (!isTls) + { + maxPaddingSize = Math.min(maxPaddingSize, blocksize); + } + + if (paddingsize > maxPaddingSize) + { + decrypterror = true; + paddingsize = 0; + } + else if (isTls) + { + /* + * Now, check all the padding-bytes (constant-time comparison). + * (Skipped for SSLv3, where the padding may be anything) + */ + byte diff = 0; + for (int i = lastByteOffset - paddingsize; i < lastByteOffset; ++i) + { + diff |= (ciphertext[i] ^ paddingsizebyte); + } + if (diff != 0) + { + /* Wrong padding */ + decrypterror = true; + paddingsize = 0; + } + } + + /* + * We now don't care if padding verification has failed or not, we will calculate + * the mac to give an attacker no kind of timing profile he can use to find out if + * mac verification failed or padding verification failed. + */ + int plaintextlength = len - minLength - paddingsize; + byte[] calculatedMac = readMac.calculateMac(type, ciphertext, offset, plaintextlength); + + /* + * Check all bytes in the mac (constant-time comparison). + */ + byte[] decryptedMac = new byte[calculatedMac.length]; + System.arraycopy(ciphertext, offset + plaintextlength, decryptedMac, 0, + calculatedMac.length); + + if (!Arrays.constantTimeAreEqual(calculatedMac, decryptedMac)) + { + decrypterror = true; + } + + /* + * Now, it is safe to fail. + */ + if (decrypterror) + { + throw new TlsFatalAlert(AlertDescription.bad_record_mac); + } + + byte[] plaintext = new byte[plaintextlength]; + System.arraycopy(ciphertext, offset, plaintext, 0, plaintextlength); + return plaintext; + } + + protected int chooseExtraPadBlocks(SecureRandom r, int max) + { +// return r.nextInt(max + 1); + + int x = r.nextInt(); + int n = lowestBitSet(x); + return Math.min(n, max); + } + + protected int lowestBitSet(int x) + { + if (x == 0) + { + return 32; + } + + int n = 0; + while ((x & 1) == 0) + { + ++n; + x >>= 1; + } + return n; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsCipher.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCipher.java new file mode 100644 index 0000000..559914b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCipher.java @@ -0,0 +1,10 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +public interface TlsCipher +{ + byte[] encodePlaintext(short type, byte[] plaintext, int offset, int len) throws IOException; + + byte[] decodeCiphertext(short type, byte[] ciphertext, int offset, int len) throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsCipherFactory.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCipherFactory.java new file mode 100644 index 0000000..77ea8f3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCipherFactory.java @@ -0,0 +1,11 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +public interface TlsCipherFactory +{ + /** + * See enumeration classes EncryptionAlgorithm and DigestAlgorithm for appropriate argument values + */ + TlsCipher createCipher(TlsClientContext context, int encryptionAlgorithm, int digestAlgorithm) throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsClient.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsClient.java new file mode 100644 index 0000000..ca39b65 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsClient.java @@ -0,0 +1,39 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.util.Hashtable; + +public interface TlsClient +{ + void init(TlsClientContext context); + + ProtocolVersion getClientVersion(); + + int[] getCipherSuites(); + + short[] getCompressionMethods(); + + // Hashtable is (Integer -> byte[]) + Hashtable getClientExtensions() throws IOException; + + void notifyServerVersion(ProtocolVersion selectedVersion) throws IOException; + + void notifySessionID(byte[] sessionID); + + void notifySelectedCipherSuite(int selectedCipherSuite); + + void notifySelectedCompressionMethod(short selectedCompressionMethod); + + void notifySecureRenegotiation(boolean secureNegotiation) throws IOException; + + // Hashtable is (Integer -> byte[]) + void processServerExtensions(Hashtable serverExtensions); + + TlsKeyExchange getKeyExchange() throws IOException; + + TlsAuthentication getAuthentication() throws IOException; + + TlsCompression getCompression() throws IOException; + + TlsCipher getCipher() throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContext.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContext.java new file mode 100644 index 0000000..4e5776b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContext.java @@ -0,0 +1,18 @@ +package org.bouncycastle.crypto.tls; + +import javabc.SecureRandom; + +public interface TlsClientContext +{ + SecureRandom getSecureRandom(); + + SecurityParameters getSecurityParameters(); + + ProtocolVersion getClientVersion(); + + ProtocolVersion getServerVersion(); + + Object getUserObject(); + + void setUserObject(Object userObject); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContextImpl.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContextImpl.java new file mode 100644 index 0000000..0f1a15f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsClientContextImpl.java @@ -0,0 +1,59 @@ +package org.bouncycastle.crypto.tls; + +import javabc.SecureRandom; + +class TlsClientContextImpl implements TlsClientContext +{ + private SecureRandom secureRandom; + private SecurityParameters securityParameters; + + private ProtocolVersion clientVersion = null; + private ProtocolVersion serverVersion = null; + private Object userObject = null; + + TlsClientContextImpl(SecureRandom secureRandom, SecurityParameters securityParameters) + { + this.secureRandom = secureRandom; + this.securityParameters = securityParameters; + } + + public SecureRandom getSecureRandom() + { + return secureRandom; + } + + public SecurityParameters getSecurityParameters() + { + return securityParameters; + } + + public ProtocolVersion getClientVersion() + { + return clientVersion; + } + + public void setClientVersion(ProtocolVersion clientVersion) + { + this.clientVersion = clientVersion; + } + + public ProtocolVersion getServerVersion() + { + return serverVersion; + } + + public void setServerVersion(ProtocolVersion serverVersion) + { + this.serverVersion = serverVersion; + } + + public Object getUserObject() + { + return userObject; + } + + public void setUserObject(Object userObject) + { + this.userObject = userObject; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsCompression.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCompression.java new file mode 100644 index 0000000..cdeb7e3 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCompression.java @@ -0,0 +1,10 @@ +package org.bouncycastle.crypto.tls; + +import java.io.OutputStream; + +public interface TlsCompression +{ + OutputStream compress(OutputStream output); + + OutputStream decompress(OutputStream output); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsCredentials.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCredentials.java new file mode 100644 index 0000000..b8a8747 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsCredentials.java @@ -0,0 +1,6 @@ +package org.bouncycastle.crypto.tls; + +public interface TlsCredentials +{ + Certificate getCertificate(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java new file mode 100644 index 0000000..4235e93 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHEKeyExchange.java @@ -0,0 +1,57 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; +import javabc.BigInteger; + +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.io.SignerInputStream; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; + +class TlsDHEKeyExchange extends TlsDHKeyExchange +{ + TlsDHEKeyExchange(TlsClientContext context, int keyExchange) + { + super(context, keyExchange); + } + + public void skipServerKeyExchange() throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void processServerKeyExchange(InputStream is) + throws IOException + { + SecurityParameters securityParameters = context.getSecurityParameters(); + + Signer signer = initSigner(tlsSigner, securityParameters); + InputStream sigIn = new SignerInputStream(is, signer); + + byte[] pBytes = TlsUtils.readOpaque16(sigIn); + byte[] gBytes = TlsUtils.readOpaque16(sigIn); + byte[] YsBytes = TlsUtils.readOpaque16(sigIn); + + byte[] sigByte = TlsUtils.readOpaque16(is); + if (!signer.verifySignature(sigByte)) + { + throw new TlsFatalAlert(AlertDescription.bad_certificate); + } + + BigInteger p = new BigInteger(1, pBytes); + BigInteger g = new BigInteger(1, gBytes); + BigInteger Ys = new BigInteger(1, YsBytes); + + this.dhAgreeServerPublicKey = validateDHPublicKey(new DHPublicKeyParameters(Ys, + new DHParameters(p, g))); + } + + protected Signer initSigner(TlsSigner tlsSigner, SecurityParameters securityParameters) + { + Signer signer = tlsSigner.createVerifyer(this.serverPublicKey); + signer.update(securityParameters.clientRandom, 0, securityParameters.clientRandom.length); + signer.update(securityParameters.serverRandom, 0, securityParameters.serverRandom.length); + return signer; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java new file mode 100644 index 0000000..4dfa67d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHKeyExchange.java @@ -0,0 +1,211 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import javabc.BigInteger; + +import org.bouncycastle.asn1.x509.KeyUsage; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.asn1.x509.X509CertificateStructure; +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; +import org.bouncycastle.crypto.util.PublicKeyFactory; + +/** + * TLS 1.0 DH key exchange. + */ +class TlsDHKeyExchange implements TlsKeyExchange +{ + protected static final BigInteger ONE = BigInteger.valueOf(1); + protected static final BigInteger TWO = BigInteger.valueOf(2); + + protected TlsClientContext context; + protected int keyExchange; + protected TlsSigner tlsSigner; + + protected AsymmetricKeyParameter serverPublicKey = null; + protected DHPublicKeyParameters dhAgreeServerPublicKey = null; + protected TlsAgreementCredentials agreementCredentials; + protected DHPrivateKeyParameters dhAgreeClientPrivateKey = null; + + TlsDHKeyExchange(TlsClientContext context, int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.DH_RSA: + case KeyExchangeAlgorithm.DH_DSS: + this.tlsSigner = null; + break; + case KeyExchangeAlgorithm.DHE_RSA: + this.tlsSigner = new TlsRSASigner(); + break; + case KeyExchangeAlgorithm.DHE_DSS: + this.tlsSigner = new TlsDSSSigner(); + break; + default: + throw new IllegalArgumentException("unsupported key exchange algorithm"); + } + + this.context = context; + this.keyExchange = keyExchange; + } + + public void skipServerCertificate() throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void processServerCertificate(Certificate serverCertificate) throws IOException + { + X509CertificateStructure x509Cert = serverCertificate.certs[0]; + SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); + + try + { + this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); + } + catch (RuntimeException e) + { + throw new TlsFatalAlert(AlertDescription.unsupported_certificate); + } + + if (tlsSigner == null) + { + try + { + this.dhAgreeServerPublicKey = validateDHPublicKey((DHPublicKeyParameters)this.serverPublicKey); + } + catch (ClassCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + TlsUtils.validateKeyUsage(x509Cert, KeyUsage.keyAgreement); + } + else + { + if (!tlsSigner.isValidPublicKey(this.serverPublicKey)) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + TlsUtils.validateKeyUsage(x509Cert, KeyUsage.digitalSignature); + } + + // TODO + /* + * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the + * signing algorithm for the certificate must be the same as the algorithm for the + * certificate key." + */ + } + + public void skipServerKeyExchange() throws IOException + { + // OK + } + + public void processServerKeyExchange(InputStream is) + throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void validateCertificateRequest(CertificateRequest certificateRequest) + throws IOException + { + short[] types = certificateRequest.getCertificateTypes(); + for (int i = 0; i < types.length; ++i) + { + switch (types[i]) + { + case ClientCertificateType.rsa_sign: + case ClientCertificateType.dss_sign: + case ClientCertificateType.rsa_fixed_dh: + case ClientCertificateType.dss_fixed_dh: + case ClientCertificateType.ecdsa_sign: + break; + default: + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + } + + public void skipClientCredentials() throws IOException + { + this.agreementCredentials = null; + } + + public void processClientCredentials(TlsCredentials clientCredentials) throws IOException + { + if (clientCredentials instanceof TlsAgreementCredentials) + { + // TODO Validate client cert has matching parameters (see 'areCompatibleParameters')? + + this.agreementCredentials = (TlsAgreementCredentials)clientCredentials; + } + else if (clientCredentials instanceof TlsSignerCredentials) + { + // OK + } + else + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public void generateClientKeyExchange(OutputStream os) throws IOException + { + /* + * RFC 2246 7.4.7.2 If the client certificate already contains a suitable + * Diffie-Hellman key, then Yc is implicit and does not need to be sent again. In + * this case, the Client Key Exchange message will be sent, but will be empty. + */ + if (agreementCredentials == null) + { + generateEphemeralClientKeyExchange(dhAgreeServerPublicKey.getParameters(), os); + } + } + + public byte[] generatePremasterSecret() throws IOException + { + if (agreementCredentials != null) + { + return agreementCredentials.generateAgreement(dhAgreeServerPublicKey); + } + + return calculateDHBasicAgreement(dhAgreeServerPublicKey, dhAgreeClientPrivateKey); + } + + protected boolean areCompatibleParameters(DHParameters a, DHParameters b) + { + return a.getP().equals(b.getP()) && a.getG().equals(b.getG()); + } + + protected byte[] calculateDHBasicAgreement(DHPublicKeyParameters publicKey, + DHPrivateKeyParameters privateKey) + { + return TlsDHUtils.calculateDHBasicAgreement(publicKey, privateKey); + } + + protected AsymmetricCipherKeyPair generateDHKeyPair(DHParameters dhParams) + { + return TlsDHUtils.generateDHKeyPair(context.getSecureRandom(), dhParams); + } + + protected void generateEphemeralClientKeyExchange(DHParameters dhParams, OutputStream os) + throws IOException + { + this.dhAgreeClientPrivateKey = TlsDHUtils.generateEphemeralClientKeyExchange(context.getSecureRandom(), dhParams, os); + } + + protected DHPublicKeyParameters validateDHPublicKey(DHPublicKeyParameters key) + throws IOException + { + return TlsDHUtils.validateDHPublicKey(key); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java new file mode 100644 index 0000000..30e3c65 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java @@ -0,0 +1,76 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.OutputStream; +import javabc.BigInteger; +import javabc.SecureRandom; + +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.agreement.DHBasicAgreement; +import org.bouncycastle.crypto.generators.DHBasicKeyPairGenerator; +import org.bouncycastle.crypto.params.DHKeyGenerationParameters; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; +import org.bouncycastle.util.BigIntegers; + +public class TlsDHUtils +{ + static final BigInteger ONE = BigInteger.valueOf(1); + static final BigInteger TWO = BigInteger.valueOf(2); + + public static byte[] calculateDHBasicAgreement(DHPublicKeyParameters publicKey, + DHPrivateKeyParameters privateKey) + { + DHBasicAgreement dhAgree = new DHBasicAgreement(); + dhAgree.init(privateKey); + BigInteger agreement = dhAgree.calculateAgreement(publicKey); + return BigIntegers.asUnsignedByteArray(agreement); + } + + public static AsymmetricCipherKeyPair generateDHKeyPair(SecureRandom random, DHParameters dhParams) + { + DHBasicKeyPairGenerator dhGen = new DHBasicKeyPairGenerator(); + dhGen.init(new DHKeyGenerationParameters(random, dhParams)); + return dhGen.generateKeyPair(); + } + + public static DHPrivateKeyParameters generateEphemeralClientKeyExchange(SecureRandom random, DHParameters dhParams, OutputStream os) + throws IOException + { + AsymmetricCipherKeyPair dhAgreeClientKeyPair = generateDHKeyPair(random, dhParams); + DHPrivateKeyParameters dhAgreeClientPrivateKey = (DHPrivateKeyParameters)dhAgreeClientKeyPair.getPrivate(); + + BigInteger Yc = ((DHPublicKeyParameters)dhAgreeClientKeyPair.getPublic()).getY(); + byte[] keData = BigIntegers.asUnsignedByteArray(Yc); + TlsUtils.writeOpaque16(keData, os); + + return dhAgreeClientPrivateKey; + } + + public static DHPublicKeyParameters validateDHPublicKey(DHPublicKeyParameters key) + throws IOException + { + BigInteger Y = key.getY(); + DHParameters params = key.getParameters(); + BigInteger p = params.getP(); + BigInteger g = params.getG(); + + if (!p.isProbablePrime(2)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + if (g.compareTo(TWO) < 0 || g.compareTo(p.subtract(TWO)) > 0) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + if (Y.compareTo(TWO) < 0 || Y.compareTo(p.subtract(ONE)) > 0) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + // TODO See RFC 2631 for more discussion of Diffie-Hellman validation + + return key; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java new file mode 100644 index 0000000..8e5687a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDSASigner.java @@ -0,0 +1,34 @@ +package org.bouncycastle.crypto.tls; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.digests.NullDigest; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.signers.DSADigestSigner; + +abstract class TlsDSASigner implements TlsSigner +{ + public byte[] calculateRawSignature(SecureRandom secureRandom, AsymmetricKeyParameter privateKey, byte[] md5andsha1) + throws CryptoException + { + // Note: Only use the SHA1 part of the hash + Signer signer = new DSADigestSigner(createDSAImpl(), new NullDigest()); + signer.init(true, new ParametersWithRandom(privateKey, secureRandom)); + signer.update(md5andsha1, 16, 20); + return signer.generateSignature(); + } + + public Signer createVerifyer(AsymmetricKeyParameter publicKey) + { + Signer verifyer = new DSADigestSigner(createDSAImpl(), new SHA1Digest()); + verifyer.init(false, publicKey); + return verifyer; + } + + protected abstract DSA createDSAImpl(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsDSSSigner.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDSSSigner.java new file mode 100644 index 0000000..5a2400b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsDSSSigner.java @@ -0,0 +1,19 @@ +package org.bouncycastle.crypto.tls; + +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.DSAPublicKeyParameters; +import org.bouncycastle.crypto.signers.DSASigner; + +class TlsDSSSigner extends TlsDSASigner +{ + public boolean isValidPublicKey(AsymmetricKeyParameter publicKey) + { + return publicKey instanceof DSAPublicKeyParameters; + } + + protected DSA createDSAImpl() + { + return new DSASigner(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java new file mode 100644 index 0000000..ee3d5a8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHEKeyExchange.java @@ -0,0 +1,112 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; + +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.io.SignerInputStream; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.math.ec.ECPoint; + +/** + * ECDHE key exchange (see RFC 4492) + */ +class TlsECDHEKeyExchange extends TlsECDHKeyExchange +{ + TlsECDHEKeyExchange(TlsClientContext context, int keyExchange) + { + super(context, keyExchange); + } + + public void skipServerKeyExchange() throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void processServerKeyExchange(InputStream is) + throws IOException + { + SecurityParameters securityParameters = context.getSecurityParameters(); + + Signer signer = initSigner(tlsSigner, securityParameters); + InputStream sigIn = new SignerInputStream(is, signer); + + short curveType = TlsUtils.readUint8(sigIn); + ECDomainParameters curve_params; + + // Currently, we only support named curves + if (curveType == ECCurveType.named_curve) + { + int namedCurve = TlsUtils.readUint16(sigIn); + + // TODO Check namedCurve is one we offered? + + curve_params = NamedCurve.getECParameters(namedCurve); + } + else + { + // TODO Add support for explicit curve parameters (read from sigIn) + + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + byte[] publicBytes = TlsUtils.readOpaque8(sigIn); + + byte[] sigByte = TlsUtils.readOpaque16(is); + if (!signer.verifySignature(sigByte)) + { + throw new TlsFatalAlert(AlertDescription.bad_certificate); + } + + // TODO Check curve_params not null + + ECPoint Q = curve_params.getCurve().decodePoint(publicBytes); + + this.ecAgreeServerPublicKey = validateECPublicKey(new ECPublicKeyParameters(Q, curve_params)); + } + + public void validateCertificateRequest(CertificateRequest certificateRequest) + throws IOException + { + /* + * RFC 4492 3. [...] The ECDSA_fixed_ECDH and RSA_fixed_ECDH mechanisms are usable + * with ECDH_ECDSA and ECDH_RSA. Their use with ECDHE_ECDSA and ECDHE_RSA is + * prohibited because the use of a long-term ECDH client key would jeopardize the + * forward secrecy property of these algorithms. + */ + short[] types = certificateRequest.getCertificateTypes(); + for (int i = 0; i < types.length; ++i) + { + switch (types[i]) + { + case ClientCertificateType.rsa_sign: + case ClientCertificateType.dss_sign: + case ClientCertificateType.ecdsa_sign: + break; + default: + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + } + + public void processClientCredentials(TlsCredentials clientCredentials) throws IOException + { + if (clientCredentials instanceof TlsSignerCredentials) + { + // OK + } + else + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + protected Signer initSigner(TlsSigner tlsSigner, SecurityParameters securityParameters) + { + Signer signer = tlsSigner.createVerifyer(this.serverPublicKey); + signer.update(securityParameters.clientRandom, 0, securityParameters.clientRandom.length); + signer.update(securityParameters.serverRandom, 0, securityParameters.serverRandom.length); + return signer; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java new file mode 100644 index 0000000..5a95910 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDHKeyExchange.java @@ -0,0 +1,240 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import javabc.BigInteger; + +import org.bouncycastle.asn1.x509.KeyUsage; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.asn1.x509.X509CertificateStructure; +import org.bouncycastle.crypto.AsymmetricCipherKeyPair; +import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; +import org.bouncycastle.crypto.generators.ECKeyPairGenerator; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECKeyGenerationParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.util.PublicKeyFactory; +import org.bouncycastle.util.BigIntegers; + +/** + * ECDH key exchange (see RFC 4492) + */ +class TlsECDHKeyExchange implements TlsKeyExchange +{ + protected TlsClientContext context; + protected int keyExchange; + protected TlsSigner tlsSigner; + + protected AsymmetricKeyParameter serverPublicKey; + protected ECPublicKeyParameters ecAgreeServerPublicKey; + protected TlsAgreementCredentials agreementCredentials; + protected ECPrivateKeyParameters ecAgreeClientPrivateKey = null; + + TlsECDHKeyExchange(TlsClientContext context, int keyExchange) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.ECDHE_RSA: + this.tlsSigner = new TlsRSASigner(); + break; + case KeyExchangeAlgorithm.ECDHE_ECDSA: + this.tlsSigner = new TlsECDSASigner(); + break; + case KeyExchangeAlgorithm.ECDH_RSA: + case KeyExchangeAlgorithm.ECDH_ECDSA: + this.tlsSigner = null; + break; + default: + throw new IllegalArgumentException("unsupported key exchange algorithm"); + } + + this.context = context; + this.keyExchange = keyExchange; + } + + public void skipServerCertificate() throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void processServerCertificate(Certificate serverCertificate) throws IOException + { + X509CertificateStructure x509Cert = serverCertificate.certs[0]; + SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); + + try + { + this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); + } + catch (RuntimeException e) + { + throw new TlsFatalAlert(AlertDescription.unsupported_certificate); + } + + if (tlsSigner == null) + { + try + { + this.ecAgreeServerPublicKey = validateECPublicKey((ECPublicKeyParameters)this.serverPublicKey); + } + catch (ClassCastException e) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + TlsUtils.validateKeyUsage(x509Cert, KeyUsage.keyAgreement); + } + else + { + if (!tlsSigner.isValidPublicKey(this.serverPublicKey)) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + TlsUtils.validateKeyUsage(x509Cert, KeyUsage.digitalSignature); + } + + // TODO + /* + * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the + * signing algorithm for the certificate must be the same as the algorithm for the + * certificate key." + */ + } + + public void skipServerKeyExchange() throws IOException + { + // do nothing + } + + public void processServerKeyExchange(InputStream is) + throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void validateCertificateRequest(CertificateRequest certificateRequest) + throws IOException + { + /* + * RFC 4492 3. [...] The ECDSA_fixed_ECDH and RSA_fixed_ECDH mechanisms are usable + * with ECDH_ECDSA and ECDH_RSA. Their use with ECDHE_ECDSA and ECDHE_RSA is + * prohibited because the use of a long-term ECDH client key would jeopardize the + * forward secrecy property of these algorithms. + */ + short[] types = certificateRequest.getCertificateTypes(); + for (int i = 0; i < types.length; ++i) + { + switch (types[i]) + { + case ClientCertificateType.rsa_sign: + case ClientCertificateType.dss_sign: + case ClientCertificateType.ecdsa_sign: + case ClientCertificateType.rsa_fixed_ecdh: + case ClientCertificateType.ecdsa_fixed_ecdh: + break; + default: + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + } + + public void skipClientCredentials() throws IOException + { + this.agreementCredentials = null; + } + + public void processClientCredentials(TlsCredentials clientCredentials) throws IOException + { + if (clientCredentials instanceof TlsAgreementCredentials) + { + // TODO Validate client cert has matching parameters (see 'areOnSameCurve')? + + this.agreementCredentials = (TlsAgreementCredentials)clientCredentials; + } + else if (clientCredentials instanceof TlsSignerCredentials) + { + // OK + } + else + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public void generateClientKeyExchange(OutputStream os) throws IOException + { + if (agreementCredentials == null) + { + generateEphemeralClientKeyExchange(ecAgreeServerPublicKey.getParameters(), os); + } + } + + public byte[] generatePremasterSecret() throws IOException + { + if (agreementCredentials != null) + { + return agreementCredentials.generateAgreement(ecAgreeServerPublicKey); + } + + return calculateECDHBasicAgreement(ecAgreeServerPublicKey, ecAgreeClientPrivateKey); + } + + protected boolean areOnSameCurve(ECDomainParameters a, ECDomainParameters b) + { + // TODO Move to ECDomainParameters.equals() or other utility method? + return a.getCurve().equals(b.getCurve()) && a.getG().equals(b.getG()) + && a.getN().equals(b.getN()) && a.getH().equals(b.getH()); + } + + protected byte[] externalizeKey(ECPublicKeyParameters keyParameters) throws IOException + { + // TODO Add support for compressed encoding and SPF extension + + /* + * RFC 4492 5.7. ...an elliptic curve point in uncompressed or compressed format. + * Here, the format MUST conform to what the server has requested through a + * Supported Point Formats Extension if this extension was used, and MUST be + * uncompressed if this extension was not used. + */ + return keyParameters.getQ().getEncoded(); + } + + protected AsymmetricCipherKeyPair generateECKeyPair(ECDomainParameters ecParams) + { + ECKeyPairGenerator keyPairGenerator = new ECKeyPairGenerator(); + ECKeyGenerationParameters keyGenerationParameters = new ECKeyGenerationParameters(ecParams, + context.getSecureRandom()); + keyPairGenerator.init(keyGenerationParameters); + return keyPairGenerator.generateKeyPair(); + } + + protected void generateEphemeralClientKeyExchange(ECDomainParameters ecParams, OutputStream os) + throws IOException + { + AsymmetricCipherKeyPair ecAgreeClientKeyPair = generateECKeyPair(ecParams); + this.ecAgreeClientPrivateKey = (ECPrivateKeyParameters)ecAgreeClientKeyPair.getPrivate(); + + byte[] keData = externalizeKey((ECPublicKeyParameters)ecAgreeClientKeyPair.getPublic()); + TlsUtils.writeOpaque8(keData, os); + } + + protected byte[] calculateECDHBasicAgreement(ECPublicKeyParameters publicKey, + ECPrivateKeyParameters privateKey) + { + ECDHBasicAgreement basicAgreement = new ECDHBasicAgreement(); + basicAgreement.init(privateKey); + BigInteger agreement = basicAgreement.calculateAgreement(publicKey); + return BigIntegers.asUnsignedByteArray(agreement); + } + + protected ECPublicKeyParameters validateECPublicKey(ECPublicKeyParameters key) + throws IOException + { + // TODO Check RFC 4492 for validation + return key; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDSASigner.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDSASigner.java new file mode 100644 index 0000000..a01f925 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsECDSASigner.java @@ -0,0 +1,19 @@ +package org.bouncycastle.crypto.tls; + +import org.bouncycastle.crypto.DSA; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.signers.ECDSASigner; + +class TlsECDSASigner extends TlsDSASigner +{ + public boolean isValidPublicKey(AsymmetricKeyParameter publicKey) + { + return publicKey instanceof ECPublicKeyParameters; + } + + protected DSA createDSAImpl() + { + return new ECDSASigner(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsFatalAlert.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsFatalAlert.java new file mode 100644 index 0000000..3380dee --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsFatalAlert.java @@ -0,0 +1,20 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +public class TlsFatalAlert extends IOException +{ + private static final long serialVersionUID = 3584313123679111168L; + + private short alertDescription; + + public TlsFatalAlert(short alertDescription) + { + this.alertDescription = alertDescription; + } + + public short getAlertDescription() + { + return alertDescription; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsInputStream.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsInputStream.java new file mode 100644 index 0000000..d4914ee --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsInputStream.java @@ -0,0 +1,37 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; + +/** + * An InputStream for an TLS 1.0 connection. + */ +class TlsInputStream extends InputStream +{ + private byte[] buf = new byte[1]; + private TlsProtocolHandler handler = null; + + TlsInputStream(TlsProtocolHandler handler) + { + this.handler = handler; + } + + public int read(byte[] buf, int offset, int len) throws IOException + { + return this.handler.readApplicationData(buf, offset, len); + } + + public int read() throws IOException + { + if (this.read(buf) < 0) + { + return -1; + } + return buf[0] & 0xff; + } + + public void close() throws IOException + { + handler.close(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsKeyExchange.java new file mode 100644 index 0000000..c0f3fc2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsKeyExchange.java @@ -0,0 +1,30 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * A generic interface for key exchange implementations in TLS 1.0. + */ +public interface TlsKeyExchange +{ + void skipServerCertificate() throws IOException; + + void processServerCertificate(Certificate serverCertificate) throws IOException; + + void skipServerKeyExchange() throws IOException; + + void processServerKeyExchange(InputStream is) + throws IOException; + + void validateCertificateRequest(CertificateRequest certificateRequest) throws IOException; + + void skipClientCredentials() throws IOException; + + void processClientCredentials(TlsCredentials clientCredentials) throws IOException; + + void generateClientKeyExchange(OutputStream os) throws IOException; + + byte[] generatePremasterSecret() throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsMac.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsMac.java new file mode 100644 index 0000000..f3890da --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsMac.java @@ -0,0 +1,130 @@ +package org.bouncycastle.crypto.tls; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.Mac; +import org.bouncycastle.crypto.macs.HMac; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.util.Arrays; + +/** + * A generic TLS MAC implementation, which can be used with any kind of Digest to act as + * an HMAC. + */ +public class TlsMac +{ + protected TlsClientContext context; + protected long seqNo; + protected byte[] secret; + protected Mac mac; + + /** + * Generate a new instance of an TlsMac. + * + * @param context the TLS client context + * @param digest The digest to use. + * @param key_block A byte-array where the key for this mac is located. + * @param offset The number of bytes to skip, before the key starts in the buffer. + * @param len The length of the key. + */ + public TlsMac(TlsClientContext context, Digest digest, byte[] key_block, int offset, int len) + { + this.context = context; + this.seqNo = 0; + + KeyParameter param = new KeyParameter(key_block, offset, len); + + this.secret = Arrays.clone(param.getKey()); + + boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (isTls) + { + this.mac = new HMac(digest); + } + else + { + this.mac = new SSL3Mac(digest); + } + + this.mac.init(param); + } + + /** + * @return the MAC write secret + */ + public byte[] getMACSecret() + { + return this.secret; + } + + /** + * @return the current write sequence number + */ + public long getSequenceNumber() + { + return this.seqNo; + } + + /** + * Increment the current write sequence number + */ + public void incSequenceNumber() + { + this.seqNo++; + } + + /** + * @return The Keysize of the mac. + */ + public int getSize() + { + return mac.getMacSize(); + } + + /** + * Calculate the mac for some given data. + *

        + * TlsMac will keep track of the sequence number internally. + * + * @param type The message type of the message. + * @param message A byte-buffer containing the message. + * @param offset The number of bytes to skip, before the message starts. + * @param len The length of the message. + * @return A new byte-buffer containing the mac value. + */ + public byte[] calculateMac(short type, byte[] message, int offset, int len) + { + ProtocolVersion serverVersion = context.getServerVersion(); + boolean isTls = serverVersion.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + ByteArrayOutputStream bosMac = new ByteArrayOutputStream(isTls ? 13 : 11); + try + { + TlsUtils.writeUint64(seqNo++, bosMac); + TlsUtils.writeUint8(type, bosMac); + + if (isTls) + { + TlsUtils.writeVersion(serverVersion, bosMac); + } + + TlsUtils.writeUint16(len, bosMac); + } + catch (IOException e) + { + // This should never happen + throw new IllegalStateException("Internal error during mac calculation"); + } + + byte[] macHeader = bosMac.toByteArray(); + mac.update(macHeader, 0, macHeader.length); + mac.update(message, offset, len); + + byte[] result = new byte[mac.getMacSize()]; + mac.doFinal(result, 0); + return result; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCipher.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCipher.java new file mode 100644 index 0000000..9e706a5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCipher.java @@ -0,0 +1,24 @@ +package org.bouncycastle.crypto.tls; + +/** + * A NULL CipherSuite in java, this should only be used during handshake. + */ +public class TlsNullCipher implements TlsCipher +{ + public byte[] encodePlaintext(short type, byte[] plaintext, int offset, int len) + { + return copyData(plaintext, offset, len); + } + + public byte[] decodeCiphertext(short type, byte[] ciphertext, int offset, int len) + { + return copyData(ciphertext, offset, len); + } + + protected byte[] copyData(byte[] text, int offset, int len) + { + byte[] result = new byte[len]; + System.arraycopy(text, offset, result, 0, len); + return result; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCompression.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCompression.java new file mode 100644 index 0000000..9381044 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsNullCompression.java @@ -0,0 +1,16 @@ +package org.bouncycastle.crypto.tls; + +import java.io.OutputStream; + +public class TlsNullCompression implements TlsCompression +{ + public OutputStream compress(OutputStream output) + { + return output; + } + + public OutputStream decompress(OutputStream output) + { + return output; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsOutputStream.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsOutputStream.java new file mode 100644 index 0000000..6eab662 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsOutputStream.java @@ -0,0 +1,39 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * An OutputStream for an TLS connection. + */ +class TlsOutputStream extends OutputStream +{ + private byte[] buf = new byte[1]; + private TlsProtocolHandler handler; + + TlsOutputStream(TlsProtocolHandler handler) + { + this.handler = handler; + } + + public void write(byte buf[], int offset, int len) throws IOException + { + this.handler.writeData(buf, offset, len); + } + + public void write(int arg0) throws IOException + { + buf[0] = (byte)arg0; + this.write(buf, 0, 1); + } + + public void close() throws IOException + { + handler.close(); + } + + public void flush() throws IOException + { + handler.flush(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKIdentity.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKIdentity.java new file mode 100644 index 0000000..4d5f73b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKIdentity.java @@ -0,0 +1,12 @@ +package org.bouncycastle.crypto.tls; + +public interface TlsPSKIdentity +{ + void skipIdentityHint(); + + void notifyIdentityHint(byte[] psk_identity_hint); + + byte[] getPSKIdentity(); + + byte[] getPSK(); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java new file mode 100644 index 0000000..b2ecc98 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsPSKKeyExchange.java @@ -0,0 +1,152 @@ +package org.bouncycastle.crypto.tls; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import javabc.BigInteger; + +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +class TlsPSKKeyExchange implements TlsKeyExchange +{ + protected TlsClientContext context; + protected int keyExchange; + protected TlsPSKIdentity pskIdentity; + + protected byte[] psk_identity_hint = null; + + protected DHPublicKeyParameters dhAgreeServerPublicKey = null; + protected DHPrivateKeyParameters dhAgreeClientPrivateKey = null; + + protected RSAKeyParameters rsaServerPublicKey = null; + protected byte[] premasterSecret; + + TlsPSKKeyExchange(TlsClientContext context, int keyExchange, TlsPSKIdentity pskIdentity) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.PSK: + case KeyExchangeAlgorithm.RSA_PSK: + case KeyExchangeAlgorithm.DHE_PSK: + break; + default: + throw new IllegalArgumentException("unsupported key exchange algorithm"); + } + + this.context = context; + this.keyExchange = keyExchange; + this.pskIdentity = pskIdentity; + } + + public void skipServerCertificate() throws IOException + { + // OK + } + + public void processServerCertificate(Certificate serverCertificate) throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void skipServerKeyExchange() throws IOException + { + this.psk_identity_hint = new byte[0]; + } + + public void processServerKeyExchange(InputStream is) throws IOException + { + this.psk_identity_hint = TlsUtils.readOpaque16(is); + + if (this.keyExchange == KeyExchangeAlgorithm.DHE_PSK) + { + byte[] pBytes = TlsUtils.readOpaque16(is); + byte[] gBytes = TlsUtils.readOpaque16(is); + byte[] YsBytes = TlsUtils.readOpaque16(is); + + BigInteger p = new BigInteger(1, pBytes); + BigInteger g = new BigInteger(1, gBytes); + BigInteger Ys = new BigInteger(1, YsBytes); + + this.dhAgreeServerPublicKey = TlsDHUtils.validateDHPublicKey(new DHPublicKeyParameters(Ys, + new DHParameters(p, g))); + } + else if (this.psk_identity_hint.length == 0) + { + // TODO Should we enforce that this message should have been skipped if hint is empty? +// throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + public void validateCertificateRequest(CertificateRequest certificateRequest) + throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void skipClientCredentials() throws IOException + { + // OK + } + + public void processClientCredentials(TlsCredentials clientCredentials) throws IOException + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public void generateClientKeyExchange(OutputStream os) throws IOException + { + if (psk_identity_hint == null || psk_identity_hint.length == 0) + { + pskIdentity.skipIdentityHint(); + } + else + { + pskIdentity.notifyIdentityHint(psk_identity_hint); + } + + byte[] psk_identity = pskIdentity.getPSKIdentity(); + + TlsUtils.writeOpaque16(psk_identity, os); + + if (this.keyExchange == KeyExchangeAlgorithm.RSA_PSK) + { + this.premasterSecret = TlsRSAUtils.generateEncryptedPreMasterSecret(context, + this.rsaServerPublicKey, os); + } + else if (this.keyExchange == KeyExchangeAlgorithm.DHE_PSK) + { + this.dhAgreeClientPrivateKey = TlsDHUtils.generateEphemeralClientKeyExchange( + context.getSecureRandom(), dhAgreeServerPublicKey.getParameters(), os); + } + } + + public byte[] generatePremasterSecret() throws IOException + { + byte[] psk = pskIdentity.getPSK(); + byte[] other_secret = generateOtherSecret(psk.length); + + ByteArrayOutputStream buf = new ByteArrayOutputStream(4 + other_secret.length + psk.length); + TlsUtils.writeOpaque16(other_secret, buf); + TlsUtils.writeOpaque16(psk, buf); + return buf.toByteArray(); + } + + protected byte[] generateOtherSecret(int pskLength) + { + if (this.keyExchange == KeyExchangeAlgorithm.DHE_PSK) + { + return TlsDHUtils.calculateDHBasicAgreement(dhAgreeServerPublicKey, dhAgreeClientPrivateKey); + } + + if (this.keyExchange == KeyExchangeAlgorithm.RSA_PSK) + { + return this.premasterSecret; + } + + return new byte[pskLength]; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsProtocolHandler.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsProtocolHandler.java new file mode 100644 index 0000000..99eb3bc --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsProtocolHandler.java @@ -0,0 +1,1259 @@ +package org.bouncycastle.crypto.tls; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import javabc.SecureRandom; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.crypto.prng.ThreadedSeedGenerator; +import org.bouncycastle.util.Arrays; + +/** + * An implementation of all high level protocols in TLS 1.0. + */ +public class TlsProtocolHandler +{ + private static final Integer EXT_RenegotiationInfo = new Integer(ExtensionType.renegotiation_info); + + /* + * Our Connection states + */ + private static final short CS_CLIENT_HELLO_SEND = 1; + private static final short CS_SERVER_HELLO_RECEIVED = 2; + private static final short CS_SERVER_CERTIFICATE_RECEIVED = 3; + private static final short CS_SERVER_KEY_EXCHANGE_RECEIVED = 4; + private static final short CS_CERTIFICATE_REQUEST_RECEIVED = 5; + private static final short CS_SERVER_HELLO_DONE_RECEIVED = 6; + private static final short CS_CLIENT_KEY_EXCHANGE_SEND = 7; + private static final short CS_CERTIFICATE_VERIFY_SEND = 8; + private static final short CS_CLIENT_CHANGE_CIPHER_SPEC_SEND = 9; + private static final short CS_CLIENT_FINISHED_SEND = 10; + private static final short CS_SERVER_CHANGE_CIPHER_SPEC_RECEIVED = 11; + private static final short CS_DONE = 12; + + private static final byte[] emptybuf = new byte[0]; + + private static final String TLS_ERROR_MESSAGE = "Internal TLS error, this could be an attack"; + + /* + * Queues for data from some protocols. + */ + private ByteQueue applicationDataQueue = new ByteQueue(); + private ByteQueue changeCipherSpecQueue = new ByteQueue(); + private ByteQueue alertQueue = new ByteQueue(); + private ByteQueue handshakeQueue = new ByteQueue(); + + /* + * The Record Stream we use + */ + private RecordStream rs; + private SecureRandom random; + + private TlsInputStream tlsInputStream = null; + private TlsOutputStream tlsOutputStream = null; + + private boolean closed = false; + private boolean failedWithError = false; + private boolean appDataReady = false; + private Hashtable clientExtensions; + + private SecurityParameters securityParameters = null; + + private TlsClientContextImpl tlsClientContext = null; + private TlsClient tlsClient = null; + private int[] offeredCipherSuites = null; + private short[] offeredCompressionMethods = null; + private TlsKeyExchange keyExchange = null; + private TlsAuthentication authentication = null; + private CertificateRequest certificateRequest = null; + + private short connection_state = 0; + + private static SecureRandom createSecureRandom() + { + /* + * We use our threaded seed generator to generate a good random seed. If the user + * has a better random seed, he should use the constructor with a SecureRandom. + */ + ThreadedSeedGenerator tsg = new ThreadedSeedGenerator(); + SecureRandom random = new SecureRandom(); + + /* + * Hopefully, 20 bytes in fast mode are good enough. + */ + random.setSeed(tsg.generateSeed(20, true)); + + return random; + } + + public TlsProtocolHandler(InputStream is, OutputStream os) + { + this(is, os, createSecureRandom()); + } + + public TlsProtocolHandler(InputStream is, OutputStream os, SecureRandom sr) + { + this.rs = new RecordStream(this, is, os); + this.random = sr; + } + + protected void processData(short protocol, byte[] buf, int offset, int len) throws IOException + { + /* + * Have a look at the protocol type, and add it to the correct queue. + */ + switch (protocol) + { + case ContentType.change_cipher_spec: + changeCipherSpecQueue.addData(buf, offset, len); + processChangeCipherSpec(); + break; + case ContentType.alert: + alertQueue.addData(buf, offset, len); + processAlert(); + break; + case ContentType.handshake: + handshakeQueue.addData(buf, offset, len); + processHandshake(); + break; + case ContentType.application_data: + if (!appDataReady) + { + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + } + applicationDataQueue.addData(buf, offset, len); + processApplicationData(); + break; + default: + /* + * Uh, we don't know this protocol. + * + * RFC2246 defines on page 13, that we should ignore this. + */ + } + } + + private void processHandshake() throws IOException + { + boolean read; + do + { + read = false; + /* + * We need the first 4 bytes, they contain type and length of the message. + */ + if (handshakeQueue.size() >= 4) + { + byte[] beginning = new byte[4]; + handshakeQueue.read(beginning, 0, 4, 0); + ByteArrayInputStream bis = new ByteArrayInputStream(beginning); + short type = TlsUtils.readUint8(bis); + int len = TlsUtils.readUint24(bis); + + /* + * Check if we have enough bytes in the buffer to read the full message. + */ + if (handshakeQueue.size() >= (len + 4)) + { + /* + * Read the message. + */ + byte[] buf = new byte[len]; + handshakeQueue.read(buf, 0, len, 4); + handshakeQueue.removeData(len + 4); + + /* + * RFC 2246 7.4.9. The value handshake_messages includes all handshake + * messages starting at client hello up to, but not including, this + * finished message. [..] Note: [Also,] Hello Request messages are + * omitted from handshake hashes. + */ + switch (type) + { + case HandshakeType.hello_request: + case HandshakeType.finished: + break; + default: + rs.updateHandshakeData(beginning, 0, 4); + rs.updateHandshakeData(buf, 0, len); + break; + } + + /* + * Now, parse the message. + */ + processHandshakeMessage(type, buf); + read = true; + } + } + } + while (read); + } + + private void processHandshakeMessage(short type, byte[] buf) throws IOException + { + ByteArrayInputStream is = new ByteArrayInputStream(buf); + + switch (type) + { + case HandshakeType.certificate: + { + switch (connection_state) + { + case CS_SERVER_HELLO_RECEIVED: + { + // Parse the Certificate message and send to cipher suite + + Certificate serverCertificate = Certificate.parse(is); + + assertEmpty(is); + + this.keyExchange.processServerCertificate(serverCertificate); + + this.authentication = tlsClient.getAuthentication(); + this.authentication.notifyServerCertificate(serverCertificate); + + break; + } + default: + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + } + + connection_state = CS_SERVER_CERTIFICATE_RECEIVED; + break; + } + case HandshakeType.finished: + switch (connection_state) + { + case CS_SERVER_CHANGE_CIPHER_SPEC_RECEIVED: + /* + * Read the checksum from the finished message, it has always 12 + * bytes for TLS 1.0 and 36 for SSLv3. + */ + boolean isTls = tlsClientContext.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + int checksumLength = isTls ? 12 : 36; + byte[] serverVerifyData = new byte[checksumLength]; + TlsUtils.readFully(serverVerifyData, is); + + assertEmpty(is); + + /* + * Calculate our own checksum. + */ + byte[] expectedServerVerifyData = TlsUtils.calculateVerifyData(tlsClientContext, + "server finished", rs.getCurrentHash(TlsUtils.SSL_SERVER)); + + /* + * Compare both checksums. + */ + if (!Arrays.constantTimeAreEqual(expectedServerVerifyData, serverVerifyData)) + { + /* + * Wrong checksum in the finished message. + */ + this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); + } + + connection_state = CS_DONE; + + /* + * We are now ready to receive application data. + */ + this.appDataReady = true; + break; + default: + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + } + break; + case HandshakeType.server_hello: + switch (connection_state) + { + case CS_CLIENT_HELLO_SEND: + /* + * Read the server hello message + */ + ProtocolVersion server_version = TlsUtils.readVersion(is); + ProtocolVersion client_version = this.tlsClientContext.getClientVersion(); + if (server_version.getFullVersion() > client_version.getFullVersion()) + { + this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); + } + + this.tlsClientContext.setServerVersion(server_version); + this.tlsClient.notifyServerVersion(server_version); + + /* + * Read the server random + */ + securityParameters.serverRandom = new byte[32]; + TlsUtils.readFully(securityParameters.serverRandom, is); + + byte[] sessionID = TlsUtils.readOpaque8(is); + if (sessionID.length > 32) + { + this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); + } + + this.tlsClient.notifySessionID(sessionID); + + /* + * Find out which CipherSuite the server has chosen and check that + * it was one of the offered ones. + */ + int selectedCipherSuite = TlsUtils.readUint16(is); + if (!arrayContains(offeredCipherSuites, selectedCipherSuite) + || selectedCipherSuite == CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV) + { + this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); + } + + this.tlsClient.notifySelectedCipherSuite(selectedCipherSuite); + + /* + * Find out which CompressionMethod the server has chosen and check that + * it was one of the offered ones. + */ + short selectedCompressionMethod = TlsUtils.readUint8(is); + if (!arrayContains(offeredCompressionMethods, selectedCompressionMethod)) + { + this.failWithError(AlertLevel.fatal, AlertDescription.illegal_parameter); + } + + this.tlsClient.notifySelectedCompressionMethod(selectedCompressionMethod); + + /* + * RFC3546 2.2 The extended server hello message format MAY be + * sent in place of the server hello message when the client has + * requested extended functionality via the extended client hello + * message specified in Section 2.1. ... Note that the extended + * server hello message is only sent in response to an extended + * client hello message. This prevents the possibility that the + * extended server hello message could "break" existing TLS 1.0 + * clients. + */ + + /* + * TODO RFC 3546 2.3 If [...] the older session is resumed, then + * the server MUST ignore extensions appearing in the client + * hello, and send a server hello containing no extensions. + */ + + // Integer -> byte[] + Hashtable serverExtensions = new Hashtable(); + + if (is.available() > 0) + { + // Process extensions from extended server hello + byte[] extBytes = TlsUtils.readOpaque16(is); + + ByteArrayInputStream ext = new ByteArrayInputStream(extBytes); + while (ext.available() > 0) + { + Integer extType = new Integer(TlsUtils.readUint16(ext)); + byte[] extValue = TlsUtils.readOpaque16(ext); + + /* + * RFC 5746 Note that sending a "renegotiation_info" + * extension in response to a ClientHello containing only + * the SCSV is an explicit exception to the prohibition in + * RFC 5246, Section 7.4.1.4, on the server sending + * unsolicited extensions and is only allowed because the + * client is signaling its willingness to receive the + * extension via the TLS_EMPTY_RENEGOTIATION_INFO_SCSV + * SCSV. TLS implementations MUST continue to comply with + * Section 7.4.1.4 for all other extensions. + */ + + if (!extType.equals(EXT_RenegotiationInfo) + && clientExtensions.get(extType) == null) + { + /* + * RFC 3546 2.3 Note that for all extension types + * (including those defined in future), the extension + * type MUST NOT appear in the extended server hello + * unless the same extension type appeared in the + * corresponding client hello. Thus clients MUST abort + * the handshake if they receive an extension type in + * the extended server hello that they did not request + * in the associated (extended) client hello. + */ + this.failWithError(AlertLevel.fatal, + AlertDescription.unsupported_extension); + } + + if (serverExtensions.containsKey(extType)) + { + /* + * RFC 3546 2.3 Also note that when multiple + * extensions of different types are present in the + * extended client hello or the extended server hello, + * the extensions may appear in any order. There MUST + * NOT be more than one extension of the same type. + */ + this.failWithError(AlertLevel.fatal, + AlertDescription.illegal_parameter); + } + + serverExtensions.put(extType, extValue); + } + } + + assertEmpty(is); + + /* + * RFC 5746 3.4. When a ServerHello is received, the client MUST + * check if it includes the "renegotiation_info" extension: + */ + { + boolean secure_negotiation = serverExtensions.containsKey(EXT_RenegotiationInfo); + + /* + * If the extension is present, set the secure_renegotiation + * flag to TRUE. The client MUST then verify that the length + * of the "renegotiated_connection" field is zero, and if it + * is not, MUST abort the handshake (by sending a fatal + * handshake_failure alert). + */ + if (secure_negotiation) + { + byte[] renegExtValue = (byte[])serverExtensions.get(EXT_RenegotiationInfo); + + if (!Arrays.constantTimeAreEqual(renegExtValue, + createRenegotiationInfo(emptybuf))) + { + this.failWithError(AlertLevel.fatal, + AlertDescription.handshake_failure); + } + } + + tlsClient.notifySecureRenegotiation(secure_negotiation); + } + + if (clientExtensions != null) + { + tlsClient.processServerExtensions(serverExtensions); + } + + this.keyExchange = tlsClient.getKeyExchange(); + + connection_state = CS_SERVER_HELLO_RECEIVED; + break; + default: + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + } + break; + case HandshakeType.server_hello_done: + switch (connection_state) + { + case CS_SERVER_HELLO_RECEIVED: + + // There was no server certificate message; check it's OK + this.keyExchange.skipServerCertificate(); + this.authentication = null; + + // NB: Fall through to next case label + + case CS_SERVER_CERTIFICATE_RECEIVED: + + // There was no server key exchange message; check it's OK + this.keyExchange.skipServerKeyExchange(); + + // NB: Fall through to next case label + + case CS_SERVER_KEY_EXCHANGE_RECEIVED: + case CS_CERTIFICATE_REQUEST_RECEIVED: + + assertEmpty(is); + + connection_state = CS_SERVER_HELLO_DONE_RECEIVED; + + TlsCredentials clientCreds = null; + if (certificateRequest == null) + { + this.keyExchange.skipClientCredentials(); + } + else + { + clientCreds = this.authentication.getClientCredentials(certificateRequest); + + if (clientCreds == null) + { + this.keyExchange.skipClientCredentials(); + + boolean isTls = tlsClientContext.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (isTls) + { + sendClientCertificate(Certificate.EMPTY_CHAIN); + } + else + { + sendAlert(AlertLevel.warning, AlertDescription.no_certificate); + } + } + else + { + this.keyExchange.processClientCredentials(clientCreds); + + sendClientCertificate(clientCreds.getCertificate()); + } + } + + /* + * Send the client key exchange message, depending on the key + * exchange we are using in our CipherSuite. + */ + sendClientKeyExchange(); + + connection_state = CS_CLIENT_KEY_EXCHANGE_SEND; + + /* + * Calculate the master_secret + */ + byte[] pms = this.keyExchange.generatePremasterSecret(); + + securityParameters.masterSecret = TlsUtils.calculateMasterSecret( + this.tlsClientContext, pms); + + // TODO Is there a way to ensure the data is really overwritten? + /* + * RFC 2246 8.1. The pre_master_secret should be deleted from + * memory once the master_secret has been computed. + */ + Arrays.fill(pms, (byte)0); + + if (clientCreds != null && clientCreds instanceof TlsSignerCredentials) + { + TlsSignerCredentials signerCreds = (TlsSignerCredentials)clientCreds; + byte[] md5andsha1 = rs.getCurrentHash(null); + byte[] clientCertificateSignature = signerCreds.generateCertificateSignature( + md5andsha1); + sendCertificateVerify(clientCertificateSignature); + + connection_state = CS_CERTIFICATE_VERIFY_SEND; + } + + /* + * Now, we send change cipher state + */ + byte[] cmessage = new byte[1]; + cmessage[0] = 1; + rs.writeMessage(ContentType.change_cipher_spec, cmessage, 0, + cmessage.length); + + connection_state = CS_CLIENT_CHANGE_CIPHER_SPEC_SEND; + + /* + * Initialize our cipher suite + */ + rs.clientCipherSpecDecided(tlsClient.getCompression(), tlsClient.getCipher()); + + /* + * Send our finished message. + */ + byte[] clientVerifyData = TlsUtils.calculateVerifyData(tlsClientContext, + "client finished", rs.getCurrentHash(TlsUtils.SSL_CLIENT)); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + TlsUtils.writeUint8(HandshakeType.finished, bos); + TlsUtils.writeOpaque24(clientVerifyData, bos); + byte[] message = bos.toByteArray(); + + rs.writeMessage(ContentType.handshake, message, 0, message.length); + + this.connection_state = CS_CLIENT_FINISHED_SEND; + break; + default: + this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); + } + break; + case HandshakeType.server_key_exchange: + { + switch (connection_state) + { + case CS_SERVER_HELLO_RECEIVED: + + // There was no server certificate message; check it's OK + this.keyExchange.skipServerCertificate(); + this.authentication = null; + + // NB: Fall through to next case label + + case CS_SERVER_CERTIFICATE_RECEIVED: + + this.keyExchange.processServerKeyExchange(is); + + assertEmpty(is); + break; + + default: + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + } + + this.connection_state = CS_SERVER_KEY_EXCHANGE_RECEIVED; + break; + } + case HandshakeType.certificate_request: + { + switch (connection_state) + { + case CS_SERVER_CERTIFICATE_RECEIVED: + + // There was no server key exchange message; check it's OK + this.keyExchange.skipServerKeyExchange(); + + // NB: Fall through to next case label + + case CS_SERVER_KEY_EXCHANGE_RECEIVED: + { + if (this.authentication == null) + { + /* + * RFC 2246 7.4.4. It is a fatal handshake_failure alert + * for an anonymous server to request client identification. + */ + this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); + } + + int numTypes = TlsUtils.readUint8(is); + short[] certificateTypes = new short[numTypes]; + for (int i = 0; i < numTypes; ++i) + { + certificateTypes[i] = TlsUtils.readUint8(is); + } + + byte[] authorities = TlsUtils.readOpaque16(is); + + assertEmpty(is); + + Vector authorityDNs = new Vector(); + + ByteArrayInputStream bis = new ByteArrayInputStream(authorities); + while (bis.available() > 0) + { + byte[] dnBytes = TlsUtils.readOpaque16(bis); + authorityDNs.addElement(X500Name.getInstance(ASN1Primitive.fromByteArray(dnBytes))); + } + + this.certificateRequest = new CertificateRequest(certificateTypes, + authorityDNs); + this.keyExchange.validateCertificateRequest(this.certificateRequest); + + break; + } + default: + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + } + + this.connection_state = CS_CERTIFICATE_REQUEST_RECEIVED; + break; + } + case HandshakeType.hello_request: + /* + * RFC 2246 7.4.1.1 Hello request This message will be ignored by the + * client if the client is currently negotiating a session. This message + * may be ignored by the client if it does not wish to renegotiate a + * session, or the client may, if it wishes, respond with a + * no_renegotiation alert. + */ + if (connection_state == CS_DONE) + { + // Renegotiation not supported yet + sendAlert(AlertLevel.warning, AlertDescription.no_renegotiation); + } + break; + case HandshakeType.client_key_exchange: + case HandshakeType.certificate_verify: + case HandshakeType.client_hello: + default: + // We do not support this! + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + break; + } + } + + private void processApplicationData() + { + /* + * There is nothing we need to do here. + * + * This function could be used for callbacks when application data arrives in the + * future. + */ + } + + private void processAlert() throws IOException + { + while (alertQueue.size() >= 2) + { + /* + * An alert is always 2 bytes. Read the alert. + */ + byte[] tmp = new byte[2]; + alertQueue.read(tmp, 0, 2, 0); + alertQueue.removeData(2); + short level = tmp[0]; + short description = tmp[1]; + if (level == AlertLevel.fatal) + { + /* + * This is a fatal error. + */ + this.failedWithError = true; + this.closed = true; + /* + * Now try to close the stream, ignore errors. + */ + try + { + rs.close(); + } + catch (Exception e) + { + + } + throw new IOException(TLS_ERROR_MESSAGE); + } + else + { + /* + * This is just a warning. + */ + if (description == AlertDescription.close_notify) + { + /* + * Close notify + */ + this.failWithError(AlertLevel.warning, AlertDescription.close_notify); + } + /* + * If it is just a warning, we continue. + */ + } + } + } + + /** + * This method is called, when a change cipher spec message is received. + * + * @throws IOException If the message has an invalid content or the handshake is not + * in the correct state. + */ + private void processChangeCipherSpec() throws IOException + { + while (changeCipherSpecQueue.size() > 0) + { + /* + * A change cipher spec message is only one byte with the value 1. + */ + byte[] b = new byte[1]; + changeCipherSpecQueue.read(b, 0, 1, 0); + changeCipherSpecQueue.removeData(1); + if (b[0] != 1) + { + /* + * This should never happen. + */ + this.failWithError(AlertLevel.fatal, AlertDescription.unexpected_message); + } + + /* + * Check if we are in the correct connection state. + */ + if (this.connection_state != CS_CLIENT_FINISHED_SEND) + { + this.failWithError(AlertLevel.fatal, AlertDescription.handshake_failure); + } + + rs.serverClientSpecReceived(); + + this.connection_state = CS_SERVER_CHANGE_CIPHER_SPEC_RECEIVED; + } + } + + private void sendClientCertificate(Certificate clientCert) throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + TlsUtils.writeUint8(HandshakeType.certificate, bos); + + // Reserve space for length + TlsUtils.writeUint24(0, bos); + + clientCert.encode(bos); + byte[] message = bos.toByteArray(); + + // Patch actual length back in + TlsUtils.writeUint24(message.length - 4, message, 1); + + rs.writeMessage(ContentType.handshake, message, 0, message.length); + } + + private void sendClientKeyExchange() throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + TlsUtils.writeUint8(HandshakeType.client_key_exchange, bos); + + // Reserve space for length + TlsUtils.writeUint24(0, bos); + + this.keyExchange.generateClientKeyExchange(bos); + byte[] message = bos.toByteArray(); + + // Patch actual length back in + TlsUtils.writeUint24(message.length - 4, message, 1); + + rs.writeMessage(ContentType.handshake, message, 0, message.length); + } + + private void sendCertificateVerify(byte[] data) throws IOException + { + /* + * Send signature of handshake messages so far to prove we are the owner of the + * cert See RFC 2246 sections 4.7, 7.4.3 and 7.4.8 + */ + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + TlsUtils.writeUint8(HandshakeType.certificate_verify, bos); + TlsUtils.writeUint24(data.length + 2, bos); + TlsUtils.writeOpaque16(data, bos); + byte[] message = bos.toByteArray(); + + rs.writeMessage(ContentType.handshake, message, 0, message.length); + } + + /** + * Connects to the remote system. + * + * @param verifyer Will be used when a certificate is received to verify that this + * certificate is accepted by the client. + * @throws IOException If handshake was not successful. + * + * @deprecated use version taking TlsClient + */ + public void connect(CertificateVerifyer verifyer) throws IOException + { + this.connect(new LegacyTlsClient(verifyer)); + } + + /** + * Connects to the remote system using client authentication + * + * @param tlsClient + * @throws IOException If handshake was not successful. + */ + public void connect(TlsClient tlsClient) throws IOException + { + if (tlsClient == null) + { + throw new IllegalArgumentException("'tlsClient' cannot be null"); + } + if (this.tlsClient != null) + { + throw new IllegalStateException("connect can only be called once"); + } + + /* + * Send Client hello + * + * First, generate some random data. + */ + this.securityParameters = new SecurityParameters(); + this.securityParameters.clientRandom = new byte[32]; + random.nextBytes(securityParameters.clientRandom); + TlsUtils.writeGMTUnixTime(securityParameters.clientRandom, 0); + + this.tlsClientContext = new TlsClientContextImpl(random, securityParameters); + + this.rs.init(tlsClientContext); + + this.tlsClient = tlsClient; + this.tlsClient.init(tlsClientContext); + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + + ProtocolVersion client_version = this.tlsClient.getClientVersion(); + this.tlsClientContext.setClientVersion(client_version); + // TODO For SSLv3 support, server version needs to be set to ProtocolVersion.SSLv3 + this.tlsClientContext.setServerVersion(client_version); + TlsUtils.writeVersion(client_version, os); + + os.write(securityParameters.clientRandom); + + /* + * Length of Session id + */ + TlsUtils.writeUint8((short)0, os); + + /* + * Cipher suites + */ + this.offeredCipherSuites = this.tlsClient.getCipherSuites(); + + // Integer -> byte[] + this.clientExtensions = this.tlsClient.getClientExtensions(); + + // Cipher Suites (and SCSV) + { + /* + * RFC 5746 3.4. The client MUST include either an empty "renegotiation_info" + * extension, or the TLS_EMPTY_RENEGOTIATION_INFO_SCSV signaling cipher suite + * value in the ClientHello. Including both is NOT RECOMMENDED. + */ + boolean noRenegExt = clientExtensions == null + || clientExtensions.get(EXT_RenegotiationInfo) == null; + + int count = offeredCipherSuites.length; + if (noRenegExt) + { + // Note: 1 extra slot for TLS_EMPTY_RENEGOTIATION_INFO_SCSV + ++count; + } + + TlsUtils.writeUint16(2 * count, os); + TlsUtils.writeUint16Array(offeredCipherSuites, os); + + if (noRenegExt) + { + TlsUtils.writeUint16(CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV, os); + } + } + + // Compression methods + this.offeredCompressionMethods = this.tlsClient.getCompressionMethods(); + + TlsUtils.writeUint8((short)offeredCompressionMethods.length, os); + TlsUtils.writeUint8Array(offeredCompressionMethods, os); + + // Extensions + if (clientExtensions != null) + { + ByteArrayOutputStream ext = new ByteArrayOutputStream(); + + Enumeration keys = clientExtensions.keys(); + while (keys.hasMoreElements()) + { + Integer extType = (Integer)keys.nextElement(); + writeExtension(ext, extType, (byte[])clientExtensions.get(extType)); + } + + TlsUtils.writeOpaque16(ext.toByteArray(), os); + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + TlsUtils.writeUint8(HandshakeType.client_hello, bos); + TlsUtils.writeUint24(os.size(), bos); + bos.write(os.toByteArray()); + byte[] message = bos.toByteArray(); + + safeWriteMessage(ContentType.handshake, message, 0, message.length); + + connection_state = CS_CLIENT_HELLO_SEND; + + /* + * We will now read data, until we have completed the handshake. + */ + while (connection_state != CS_DONE) + { + safeReadData(); + } + + this.tlsInputStream = new TlsInputStream(this); + this.tlsOutputStream = new TlsOutputStream(this); + } + + /** + * Read data from the network. The method will return immediately, if there is still + * some data left in the buffer, or block until some application data has been read + * from the network. + * + * @param buf The buffer where the data will be copied to. + * @param offset The position where the data will be placed in the buffer. + * @param len The maximum number of bytes to read. + * @return The number of bytes read. + * @throws IOException If something goes wrong during reading data. + */ + protected int readApplicationData(byte[] buf, int offset, int len) throws IOException + { + while (applicationDataQueue.size() == 0) + { + /* + * We need to read some data. + */ + if (this.closed) + { + if (this.failedWithError) + { + /* + * Something went terribly wrong, we should throw an IOException + */ + throw new IOException(TLS_ERROR_MESSAGE); + } + + /* + * Connection has been closed, there is no more data to read. + */ + return -1; + } + + safeReadData(); + } + len = Math.min(len, applicationDataQueue.size()); + applicationDataQueue.read(buf, offset, len, 0); + applicationDataQueue.removeData(len); + return len; + } + + private void safeReadData() throws IOException + { + try + { + rs.readData(); + } + catch (TlsFatalAlert e) + { + if (!this.closed) + { + this.failWithError(AlertLevel.fatal, e.getAlertDescription()); + } + throw e; + } + catch (IOException e) + { + if (!this.closed) + { + this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); + } + throw e; + } + catch (RuntimeException e) + { + if (!this.closed) + { + this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); + } + throw e; + } + } + + private void safeWriteMessage(short type, byte[] buf, int offset, int len) throws IOException + { + try + { + rs.writeMessage(type, buf, offset, len); + } + catch (TlsFatalAlert e) + { + if (!this.closed) + { + this.failWithError(AlertLevel.fatal, e.getAlertDescription()); + } + throw e; + } + catch (IOException e) + { + if (!closed) + { + this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); + } + throw e; + } + catch (RuntimeException e) + { + if (!closed) + { + this.failWithError(AlertLevel.fatal, AlertDescription.internal_error); + } + throw e; + } + } + + /** + * Send some application data to the remote system. + *

        + * The method will handle fragmentation internally. + * + * @param buf The buffer with the data. + * @param offset The position in the buffer where the data is placed. + * @param len The length of the data. + * @throws IOException If something goes wrong during sending. + */ + protected void writeData(byte[] buf, int offset, int len) throws IOException + { + if (this.closed) + { + if (this.failedWithError) + { + throw new IOException(TLS_ERROR_MESSAGE); + } + + throw new IOException("Sorry, connection has been closed, you cannot write more data"); + } + + /* + * Protect against known IV attack! + * + * DO NOT REMOVE THIS LINE, EXCEPT YOU KNOW EXACTLY WHAT YOU ARE DOING HERE. + */ + safeWriteMessage(ContentType.application_data, emptybuf, 0, 0); + + do + { + /* + * We are only allowed to write fragments up to 2^14 bytes. + */ + int toWrite = Math.min(len, 1 << 14); + + safeWriteMessage(ContentType.application_data, buf, offset, toWrite); + + offset += toWrite; + len -= toWrite; + } + while (len > 0); + + } + + /** + * @return An OutputStream which can be used to send data. + */ + public OutputStream getOutputStream() + { + return this.tlsOutputStream; + } + + /** + * @return An InputStream which can be used to read data. + */ + public InputStream getInputStream() + { + return this.tlsInputStream; + } + + /** + * Terminate this connection with an alert. + *

        + * Can be used for normal closure too. + * + * @param alertLevel The level of the alert, an be AlertLevel.fatal or AL_warning. + * @param alertDescription The exact alert message. + * @throws IOException If alert was fatal. + */ + private void failWithError(short alertLevel, short alertDescription) throws IOException + { + /* + * Check if the connection is still open. + */ + if (!closed) + { + /* + * Prepare the message + */ + this.closed = true; + + if (alertLevel == AlertLevel.fatal) + { + /* + * This is a fatal message. + */ + this.failedWithError = true; + } + sendAlert(alertLevel, alertDescription); + rs.close(); + if (alertLevel == AlertLevel.fatal) + { + throw new IOException(TLS_ERROR_MESSAGE); + } + } + else + { + throw new IOException(TLS_ERROR_MESSAGE); + } + } + + private void sendAlert(short alertLevel, short alertDescription) throws IOException + { + byte[] error = new byte[2]; + error[0] = (byte)alertLevel; + error[1] = (byte)alertDescription; + + rs.writeMessage(ContentType.alert, error, 0, 2); + } + + /** + * Closes this connection. + * + * @throws IOException If something goes wrong during closing. + */ + public void close() throws IOException + { + if (!closed) + { + this.failWithError(AlertLevel.warning, AlertDescription.close_notify); + } + } + + /** + * Make sure the InputStream is now empty. Fail otherwise. + * + * @param is The InputStream to check. + * @throws IOException If is is not empty. + */ + protected void assertEmpty(ByteArrayInputStream is) throws IOException + { + if (is.available() > 0) + { + throw new TlsFatalAlert(AlertDescription.decode_error); + } + } + + protected void flush() throws IOException + { + rs.flush(); + } + + private static boolean arrayContains(short[] a, short n) + { + for (int i = 0; i < a.length; ++i) + { + if (a[i] == n) + { + return true; + } + } + return false; + } + + private static boolean arrayContains(int[] a, int n) + { + for (int i = 0; i < a.length; ++i) + { + if (a[i] == n) + { + return true; + } + } + return false; + } + + private static byte[] createRenegotiationInfo(byte[] renegotiated_connection) + throws IOException + { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + TlsUtils.writeOpaque8(renegotiated_connection, buf); + return buf.toByteArray(); + } + + private static void writeExtension(OutputStream output, Integer extType, byte[] extValue) + throws IOException + { + TlsUtils.writeUint16(extType.intValue(), output); + TlsUtils.writeOpaque16(extValue, output); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java new file mode 100644 index 0000000..828f9a8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAKeyExchange.java @@ -0,0 +1,166 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.bouncycastle.asn1.x509.KeyUsage; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.asn1.x509.X509CertificateStructure; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.RSAKeyParameters; +import org.bouncycastle.crypto.util.PublicKeyFactory; + +/** + * TLS 1.0 and SSLv3 RSA key exchange. + */ +class TlsRSAKeyExchange implements TlsKeyExchange +{ + protected TlsClientContext context; + + protected AsymmetricKeyParameter serverPublicKey = null; + + protected RSAKeyParameters rsaServerPublicKey = null; + + protected byte[] premasterSecret; + + TlsRSAKeyExchange(TlsClientContext context) + { + this.context = context; + } + + public void skipServerCertificate() throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void processServerCertificate(Certificate serverCertificate) throws IOException + { + X509CertificateStructure x509Cert = serverCertificate.certs[0]; + SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); + + try + { + this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); + } + catch (RuntimeException e) + { + throw new TlsFatalAlert(AlertDescription.unsupported_certificate); + } + + // Sanity check the PublicKeyFactory + if (this.serverPublicKey.isPrivate()) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + this.rsaServerPublicKey = validateRSAPublicKey((RSAKeyParameters)this.serverPublicKey); + + TlsUtils.validateKeyUsage(x509Cert, KeyUsage.keyEncipherment); + + // TODO + /* + * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the + * signing algorithm for the certificate must be the same as the algorithm for the + * certificate key." + */ + } + + public void skipServerKeyExchange() throws IOException + { + // OK + } + + public void processServerKeyExchange(InputStream is) + throws IOException + { + // TODO + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void validateCertificateRequest(CertificateRequest certificateRequest) + throws IOException + { + short[] types = certificateRequest.getCertificateTypes(); + for (int i = 0; i < types.length; ++i) + { + switch (types[i]) + { + case ClientCertificateType.rsa_sign: + case ClientCertificateType.dss_sign: + case ClientCertificateType.ecdsa_sign: + break; + default: + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + } + + public void skipClientCredentials() throws IOException + { + // OK + } + + public void processClientCredentials(TlsCredentials clientCredentials) throws IOException + { + if (!(clientCredentials instanceof TlsSignerCredentials)) + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + } + + public void generateClientKeyExchange(OutputStream os) throws IOException + { + this.premasterSecret = TlsRSAUtils.generateEncryptedPreMasterSecret(context, + this.rsaServerPublicKey, os); + } + + public byte[] generatePremasterSecret() throws IOException + { + byte[] tmp = this.premasterSecret; + this.premasterSecret = null; + return tmp; + } + + // Would be needed to process RSA_EXPORT server key exchange +// protected void processRSAServerKeyExchange(InputStream is, Signer signer) throws IOException +// { +// InputStream sigIn = is; +// if (signer != null) +// { +// sigIn = new SignerInputStream(is, signer); +// } +// +// byte[] modulusBytes = TlsUtils.readOpaque16(sigIn); +// byte[] exponentBytes = TlsUtils.readOpaque16(sigIn); +// +// if (signer != null) +// { +// byte[] sigByte = TlsUtils.readOpaque16(is); +// +// if (!signer.verifySignature(sigByte)) +// { +// handler.failWithError(AlertLevel.fatal, AlertDescription.bad_certificate); +// } +// } +// +// BigInteger modulus = new BigInteger(1, modulusBytes); +// BigInteger exponent = new BigInteger(1, exponentBytes); +// +// this.rsaServerPublicKey = validateRSAPublicKey(new RSAKeyParameters(false, modulus, +// exponent)); +// } + + protected RSAKeyParameters validateRSAPublicKey(RSAKeyParameters key) throws IOException + { + // TODO What is the minimum bit length required? +// key.getModulus().bitLength(); + + if (!key.getExponent().isProbablePrime(2)) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + return key; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSASigner.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSASigner.java new file mode 100644 index 0000000..51f06ad --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSASigner.java @@ -0,0 +1,37 @@ +package org.bouncycastle.crypto.tls; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.digests.NullDigest; +import org.bouncycastle.crypto.encodings.PKCS1Encoding; +import org.bouncycastle.crypto.engines.RSABlindedEngine; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSAKeyParameters; +import org.bouncycastle.crypto.signers.GenericSigner; + +class TlsRSASigner implements TlsSigner +{ + public byte[] calculateRawSignature(SecureRandom random, AsymmetricKeyParameter privateKey, byte[] md5andsha1) + throws CryptoException + { + Signer sig = new GenericSigner(new PKCS1Encoding(new RSABlindedEngine()), new NullDigest()); + sig.init(true, new ParametersWithRandom(privateKey, random)); + sig.update(md5andsha1, 0, md5andsha1.length); + return sig.generateSignature(); + } + + public Signer createVerifyer(AsymmetricKeyParameter publicKey) + { + Signer s = new GenericSigner(new PKCS1Encoding(new RSABlindedEngine()), new CombinedHash()); + s.init(false, publicKey); + return s; + } + + public boolean isValidPublicKey(AsymmetricKeyParameter publicKey) + { + return publicKey instanceof RSAKeyParameters && !publicKey.isPrivate(); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAUtils.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAUtils.java new file mode 100644 index 0000000..dde5936 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRSAUtils.java @@ -0,0 +1,51 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.OutputStream; + +import org.bouncycastle.crypto.InvalidCipherTextException; +import org.bouncycastle.crypto.encodings.PKCS1Encoding; +import org.bouncycastle.crypto.engines.RSABlindedEngine; +import org.bouncycastle.crypto.params.ParametersWithRandom; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +public class TlsRSAUtils +{ + public static byte[] generateEncryptedPreMasterSecret(TlsClientContext context, + RSAKeyParameters rsaServerPublicKey, OutputStream os) throws IOException + { + /* + * Choose a PremasterSecret and send it encrypted to the server + */ + byte[] premasterSecret = new byte[48]; + context.getSecureRandom().nextBytes(premasterSecret); + TlsUtils.writeVersion(context.getClientVersion(), premasterSecret, 0); + + PKCS1Encoding encoding = new PKCS1Encoding(new RSABlindedEngine()); + encoding.init(true, new ParametersWithRandom(rsaServerPublicKey, context.getSecureRandom())); + + try + { + boolean isTls = context.getServerVersion().getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + byte[] keData = encoding.processBlock(premasterSecret, 0, premasterSecret.length); + + if (isTls) + { + TlsUtils.writeOpaque16(keData, os); + } + else + { + os.write(keData); + } + } + catch (InvalidCipherTextException e) + { + /* + * This should never happen, only during decryption. + */ + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + return premasterSecret; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsRuntimeException.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRuntimeException.java new file mode 100644 index 0000000..b516035 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsRuntimeException.java @@ -0,0 +1,25 @@ +package org.bouncycastle.crypto.tls; + +public class TlsRuntimeException extends RuntimeException +{ + private static final long serialVersionUID = 1928023487348344086L; + + Throwable e; + + public TlsRuntimeException(String message, Throwable e) + { + super(message); + + this.e = e; + } + + public TlsRuntimeException(String message) + { + super(message); + } + + public Throwable getCause() + { + return e; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java new file mode 100644 index 0000000..876c297 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsSRPKeyExchange.java @@ -0,0 +1,203 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import javabc.BigInteger; + +import org.bouncycastle.asn1.x509.KeyUsage; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.asn1.x509.X509CertificateStructure; +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.agreement.srp.SRP6Client; +import org.bouncycastle.crypto.agreement.srp.SRP6Util; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.io.SignerInputStream; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.util.PublicKeyFactory; +import org.bouncycastle.util.BigIntegers; + +/** + * TLS 1.1 SRP key exchange. + */ +class TlsSRPKeyExchange implements TlsKeyExchange +{ + protected TlsClientContext context; + protected int keyExchange; + protected TlsSigner tlsSigner; + protected byte[] identity; + protected byte[] password; + + protected AsymmetricKeyParameter serverPublicKey = null; + + protected byte[] s = null; + protected BigInteger B = null; + protected SRP6Client srpClient = new SRP6Client(); + + TlsSRPKeyExchange(TlsClientContext context, int keyExchange, byte[] identity, byte[] password) + { + switch (keyExchange) + { + case KeyExchangeAlgorithm.SRP: + this.tlsSigner = null; + break; + case KeyExchangeAlgorithm.SRP_RSA: + this.tlsSigner = new TlsRSASigner(); + break; + case KeyExchangeAlgorithm.SRP_DSS: + this.tlsSigner = new TlsDSSSigner(); + break; + default: + throw new IllegalArgumentException("unsupported key exchange algorithm"); + } + + this.context = context; + this.keyExchange = keyExchange; + this.identity = identity; + this.password = password; + } + + public void skipServerCertificate() throws IOException + { + if (tlsSigner != null) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + } + + public void processServerCertificate(Certificate serverCertificate) throws IOException + { + if (tlsSigner == null) + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + X509CertificateStructure x509Cert = serverCertificate.certs[0]; + SubjectPublicKeyInfo keyInfo = x509Cert.getSubjectPublicKeyInfo(); + + try + { + this.serverPublicKey = PublicKeyFactory.createKey(keyInfo); + } + catch (RuntimeException e) + { + throw new TlsFatalAlert(AlertDescription.unsupported_certificate); + } + + if (!tlsSigner.isValidPublicKey(this.serverPublicKey)) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + + TlsUtils.validateKeyUsage(x509Cert, KeyUsage.digitalSignature); + + // TODO + /* + * Perform various checks per RFC2246 7.4.2: "Unless otherwise specified, the + * signing algorithm for the certificate must be the same as the algorithm for the + * certificate key." + */ + } + + public void skipServerKeyExchange() throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void processServerKeyExchange(InputStream is) throws IOException + { + SecurityParameters securityParameters = context.getSecurityParameters(); + + InputStream sigIn = is; + Signer signer = null; + + if (tlsSigner != null) + { + signer = initSigner(tlsSigner, securityParameters); + sigIn = new SignerInputStream(is, signer); + } + + byte[] NBytes = TlsUtils.readOpaque16(sigIn); + byte[] gBytes = TlsUtils.readOpaque16(sigIn); + byte[] sBytes = TlsUtils.readOpaque8(sigIn); + byte[] BBytes = TlsUtils.readOpaque16(sigIn); + + if (signer != null) + { + byte[] sigByte = TlsUtils.readOpaque16(is); + + if (!signer.verifySignature(sigByte)) + { + throw new TlsFatalAlert(AlertDescription.bad_certificate); + } + } + + BigInteger N = new BigInteger(1, NBytes); + BigInteger g = new BigInteger(1, gBytes); + + // TODO Validate group parameters (see RFC 5054) +// handler.failWithError(AlertLevel.fatal, AlertDescription.insufficient_security); + + this.s = sBytes; + + /* + * RFC 5054 2.5.3: The client MUST abort the handshake with an "illegal_parameter" + * alert if B % N = 0. + */ + try + { + this.B = SRP6Util.validatePublicValue(N, new BigInteger(1, BBytes)); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + + this.srpClient.init(N, g, new SHA1Digest(), context.getSecureRandom()); + } + + public void validateCertificateRequest(CertificateRequest certificateRequest) + throws IOException + { + throw new TlsFatalAlert(AlertDescription.unexpected_message); + } + + public void skipClientCredentials() throws IOException + { + // OK + } + + public void processClientCredentials(TlsCredentials clientCredentials) throws IOException + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public void generateClientKeyExchange(OutputStream os) throws IOException + { + byte[] keData = BigIntegers.asUnsignedByteArray(srpClient.generateClientCredentials(s, + this.identity, this.password)); + TlsUtils.writeOpaque16(keData, os); + } + + public byte[] generatePremasterSecret() throws IOException + { + try + { + // TODO Check if this needs to be a fixed size + return BigIntegers.asUnsignedByteArray(srpClient.calculateSecret(B)); + } + catch (CryptoException e) + { + throw new TlsFatalAlert(AlertDescription.illegal_parameter); + } + } + + protected Signer initSigner(TlsSigner tlsSigner, SecurityParameters securityParameters) + { + Signer signer = tlsSigner.createVerifyer(this.serverPublicKey); + signer.update(securityParameters.clientRandom, 0, securityParameters.clientRandom.length); + signer.update(securityParameters.serverRandom, 0, securityParameters.serverRandom.length); + return signer; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsSigner.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsSigner.java new file mode 100644 index 0000000..91c91de --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsSigner.java @@ -0,0 +1,17 @@ +package org.bouncycastle.crypto.tls; + +import javabc.SecureRandom; + +import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.Signer; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; + +interface TlsSigner +{ + byte[] calculateRawSignature(SecureRandom random, AsymmetricKeyParameter privateKey, byte[] md5andsha1) + throws CryptoException; + + Signer createVerifyer(AsymmetricKeyParameter publicKey); + + boolean isValidPublicKey(AsymmetricKeyParameter publicKey); +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsSignerCredentials.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsSignerCredentials.java new file mode 100644 index 0000000..f0e5ac9 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsSignerCredentials.java @@ -0,0 +1,8 @@ +package org.bouncycastle.crypto.tls; + +import java.io.IOException; + +public interface TlsSignerCredentials extends TlsCredentials +{ + byte[] generateCertificateSignature(byte[] md5andsha1) throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/crypto/tls/TlsUtils.java b/common/src/main/java/org/bouncycastle/crypto/tls/TlsUtils.java new file mode 100644 index 0000000..59482a5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/tls/TlsUtils.java @@ -0,0 +1,438 @@ +package org.bouncycastle.crypto.tls; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.bouncycastle.asn1.DERBitString; +import org.bouncycastle.asn1.x509.KeyUsage; +import org.bouncycastle.asn1.x509.X509CertificateStructure; +import org.bouncycastle.asn1.x509.X509Extension; +import org.bouncycastle.asn1.x509.X509Extensions; +import org.bouncycastle.crypto.Digest; +import org.bouncycastle.crypto.digests.MD5Digest; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.macs.HMac; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.util.Arrays; +import org.bouncycastle.util.Strings; +import org.bouncycastle.util.io.Streams; + +/** + * Some helper fuctions for MicroTLS. + */ +public class TlsUtils +{ + protected static void writeUint8(short i, OutputStream os) throws IOException + { + os.write(i); + } + + protected static void writeUint8(short i, byte[] buf, int offset) + { + buf[offset] = (byte)i; + } + + protected static void writeUint16(int i, OutputStream os) throws IOException + { + os.write(i >> 8); + os.write(i); + } + + protected static void writeUint16(int i, byte[] buf, int offset) + { + buf[offset] = (byte)(i >> 8); + buf[offset + 1] = (byte)i; + } + + protected static void writeUint24(int i, OutputStream os) throws IOException + { + os.write(i >> 16); + os.write(i >> 8); + os.write(i); + } + + protected static void writeUint24(int i, byte[] buf, int offset) + { + buf[offset] = (byte)(i >> 16); + buf[offset + 1] = (byte)(i >> 8); + buf[offset + 2] = (byte)(i); + } + + protected static void writeUint32(long i, OutputStream os) throws IOException + { + os.write((int)(i >> 24)); + os.write((int)(i >> 16)); + os.write((int)(i >> 8)); + os.write((int)(i)); + } + + protected static void writeUint32(long i, byte[] buf, int offset) + { + buf[offset] = (byte)(i >> 24); + buf[offset + 1] = (byte)(i >> 16); + buf[offset + 2] = (byte)(i >> 8); + buf[offset + 3] = (byte)(i); + } + + protected static void writeUint64(long i, OutputStream os) throws IOException + { + os.write((int)(i >> 56)); + os.write((int)(i >> 48)); + os.write((int)(i >> 40)); + os.write((int)(i >> 32)); + os.write((int)(i >> 24)); + os.write((int)(i >> 16)); + os.write((int)(i >> 8)); + os.write((int)(i)); + } + + + protected static void writeUint64(long i, byte[] buf, int offset) + { + buf[offset] = (byte)(i >> 56); + buf[offset + 1] = (byte)(i >> 48); + buf[offset + 2] = (byte)(i >> 40); + buf[offset + 3] = (byte)(i >> 32); + buf[offset + 4] = (byte)(i >> 24); + buf[offset + 5] = (byte)(i >> 16); + buf[offset + 6] = (byte)(i >> 8); + buf[offset + 7] = (byte)(i); + } + + protected static void writeOpaque8(byte[] buf, OutputStream os) throws IOException + { + writeUint8((short)buf.length, os); + os.write(buf); + } + + protected static void writeOpaque16(byte[] buf, OutputStream os) throws IOException + { + writeUint16(buf.length, os); + os.write(buf); + } + + protected static void writeOpaque24(byte[] buf, OutputStream os) throws IOException + { + writeUint24(buf.length, os); + os.write(buf); + } + + protected static void writeUint8Array(short[] uints, OutputStream os) throws IOException + { + for (int i = 0; i < uints.length; ++i) + { + writeUint8(uints[i], os); + } + } + + protected static void writeUint16Array(int[] uints, OutputStream os) throws IOException + { + for (int i = 0; i < uints.length; ++i) + { + writeUint16(uints[i], os); + } + } + + protected static short readUint8(InputStream is) throws IOException + { + int i = is.read(); + if (i == -1) + { + throw new EOFException(); + } + return (short)i; + } + + protected static int readUint16(InputStream is) throws IOException + { + int i1 = is.read(); + int i2 = is.read(); + if ((i1 | i2) < 0) + { + throw new EOFException(); + } + return i1 << 8 | i2; + } + + protected static int readUint24(InputStream is) throws IOException + { + int i1 = is.read(); + int i2 = is.read(); + int i3 = is.read(); + if ((i1 | i2 | i3) < 0) + { + throw new EOFException(); + } + return (i1 << 16) | (i2 << 8) | i3; + } + + protected static long readUint32(InputStream is) throws IOException + { + int i1 = is.read(); + int i2 = is.read(); + int i3 = is.read(); + int i4 = is.read(); + if ((i1 | i2 | i3 | i4) < 0) + { + throw new EOFException(); + } + return (((long)i1) << 24) | (((long)i2) << 16) | (((long)i3) << 8) | ((long)i4); + } + + protected static void readFully(byte[] buf, InputStream is) throws IOException + { + if (Streams.readFully(is, buf) != buf.length) + { + throw new EOFException(); + } + } + + protected static byte[] readOpaque8(InputStream is) throws IOException + { + short length = readUint8(is); + byte[] value = new byte[length]; + readFully(value, is); + return value; + } + + protected static byte[] readOpaque16(InputStream is) throws IOException + { + int length = readUint16(is); + byte[] value = new byte[length]; + readFully(value, is); + return value; + } + + static ProtocolVersion readVersion(byte[] buf) throws IOException + { + return ProtocolVersion.get(buf[0], buf[1]); + } + + static ProtocolVersion readVersion(InputStream is) throws IOException + { + int i1 = is.read(); + int i2 = is.read(); + return ProtocolVersion.get(i1, i2); + } + + protected static void writeGMTUnixTime(byte[] buf, int offset) + { + int t = (int)(System.currentTimeMillis() / 1000L); + buf[offset] = (byte)(t >> 24); + buf[offset + 1] = (byte)(t >> 16); + buf[offset + 2] = (byte)(t >> 8); + buf[offset + 3] = (byte)t; + } + + static void writeVersion(ProtocolVersion version, OutputStream os) throws IOException + { + os.write(version.getMajorVersion()); + os.write(version.getMinorVersion()); + } + + static void writeVersion(ProtocolVersion version, byte[] buf, int offset) throws IOException + { + buf[offset] = (byte)version.getMajorVersion(); + buf[offset + 1] = (byte)version.getMinorVersion(); + } + + private static void hmac_hash(Digest digest, byte[] secret, byte[] seed, byte[] out) + { + HMac mac = new HMac(digest); + KeyParameter param = new KeyParameter(secret); + byte[] a = seed; + int size = digest.getDigestSize(); + int iterations = (out.length + size - 1) / size; + byte[] buf = new byte[mac.getMacSize()]; + byte[] buf2 = new byte[mac.getMacSize()]; + for (int i = 0; i < iterations; i++) + { + mac.init(param); + mac.update(a, 0, a.length); + mac.doFinal(buf, 0); + a = buf; + mac.init(param); + mac.update(a, 0, a.length); + mac.update(seed, 0, seed.length); + mac.doFinal(buf2, 0); + System.arraycopy(buf2, 0, out, (size * i), Math.min(size, out.length - (size * i))); + } + } + + protected static byte[] PRF(byte[] secret, String asciiLabel, byte[] seed, int size) + { + byte[] label = Strings.toByteArray(asciiLabel); + + int s_half = (secret.length + 1) / 2; + byte[] s1 = new byte[s_half]; + byte[] s2 = new byte[s_half]; + System.arraycopy(secret, 0, s1, 0, s_half); + System.arraycopy(secret, secret.length - s_half, s2, 0, s_half); + + byte[] ls = concat(label, seed); + + byte[] buf = new byte[size]; + byte[] prf = new byte[size]; + hmac_hash(new MD5Digest(), s1, ls, prf); + hmac_hash(new SHA1Digest(), s2, ls, buf); + for (int i = 0; i < size; i++) + { + buf[i] ^= prf[i]; + } + return buf; + } + + static byte[] PRF_1_2(Digest digest, byte[] secret, String asciiLabel, byte[] seed, int size) + { + byte[] label = Strings.toByteArray(asciiLabel); + byte[] labelSeed = concat(label, seed); + + byte[] buf = new byte[size]; + hmac_hash(digest, secret, labelSeed, buf); + return buf; + } + + static byte[] concat(byte[] a, byte[] b) + { + byte[] c = new byte[a.length + b.length]; + System.arraycopy(a, 0, c, 0, a.length); + System.arraycopy(b, 0, c, a.length, b.length); + return c; + } + + static void validateKeyUsage(X509CertificateStructure c, int keyUsageBits) throws IOException + { + X509Extensions exts = c.getTBSCertificate().getExtensions(); + if (exts != null) + { + X509Extension ext = exts.getExtension(X509Extension.keyUsage); + if (ext != null) + { + DERBitString ku = KeyUsage.getInstance(ext); + int bits = ku.getBytes()[0] & 0xff; + if ((bits & keyUsageBits) != keyUsageBits) + { + throw new TlsFatalAlert(AlertDescription.certificate_unknown); + } + } + } + } + + static byte[] calculateKeyBlock(TlsClientContext context, int size) + { + ProtocolVersion pv = context.getServerVersion(); + SecurityParameters sp = context.getSecurityParameters(); + byte[] random = concat(sp.serverRandom, sp.clientRandom); + + boolean isTls = pv.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (isTls) + { + return PRF(sp.masterSecret, "key expansion", random, size); + } + + Digest md5 = new MD5Digest(); + Digest sha1 = new SHA1Digest(); + int md5Size = md5.getDigestSize(); + byte[] shatmp = new byte[sha1.getDigestSize()]; + byte[] tmp = new byte[size + md5Size]; + + int i = 0, pos = 0; + while (pos < size) + { + byte[] ssl3Const = SSL3_CONST[i]; + + sha1.update(ssl3Const, 0, ssl3Const.length); + sha1.update(sp.masterSecret, 0, sp.masterSecret.length); + sha1.update(random, 0, random.length); + sha1.doFinal(shatmp, 0); + + md5.update(sp.masterSecret, 0, sp.masterSecret.length); + md5.update(shatmp, 0, shatmp.length); + md5.doFinal(tmp, pos); + + pos += md5Size; + ++i; + } + + byte rval[] = new byte[size]; + System.arraycopy(tmp, 0, rval, 0, size); + return rval; + } + + static byte[] calculateMasterSecret(TlsClientContext context, byte[] pms) + { + ProtocolVersion pv = context.getServerVersion(); + SecurityParameters sp = context.getSecurityParameters(); + byte[] random = concat(sp.clientRandom, sp.serverRandom); + + boolean isTls = pv.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (isTls) + { + return PRF(pms, "master secret", random, 48); + } + + Digest md5 = new MD5Digest(); + Digest sha1 = new SHA1Digest(); + int md5Size = md5.getDigestSize(); + byte[] shatmp = new byte[sha1.getDigestSize()]; + + byte[] rval = new byte[md5Size * 3]; + int pos = 0; + + for (int i = 0; i < 3; ++i) + { + byte[] ssl3Const = SSL3_CONST[i]; + + sha1.update(ssl3Const, 0, ssl3Const.length); + sha1.update(pms, 0, pms.length); + sha1.update(random, 0, random.length); + sha1.doFinal(shatmp, 0); + + md5.update(pms, 0, pms.length); + md5.update(shatmp, 0, shatmp.length); + md5.doFinal(rval, pos); + + pos += md5Size; + } + + return rval; + } + + static byte[] calculateVerifyData(TlsClientContext context, String asciiLabel, byte[] handshakeHash) + { + ProtocolVersion pv = context.getServerVersion(); + SecurityParameters sp = context.getSecurityParameters(); + + boolean isTls = pv.getFullVersion() >= ProtocolVersion.TLSv10.getFullVersion(); + + if (isTls) + { + return PRF(sp.masterSecret, asciiLabel, handshakeHash, 12); + } + + return handshakeHash; + } + + static final byte[] SSL_CLIENT = { 0x43, 0x4C, 0x4E, 0x54 }; + static final byte[] SSL_SERVER = { 0x53, 0x52, 0x56, 0x52 }; + + // SSL3 magic mix constants ("A", "BB", "CCC", ...) + static final byte[][] SSL3_CONST = genConst(); + + private static byte[][] genConst() + { + int n = 10; + byte[][] arr = new byte[n][]; + for (int i = 0; i < n; i++) + { + byte[] b = new byte[i + 1]; + Arrays.fill(b, (byte)('A' + i)); + arr[i] = b; + } + return arr; + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/util/Pack.java b/common/src/main/java/org/bouncycastle/crypto/util/Pack.java new file mode 100644 index 0000000..857b765 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/util/Pack.java @@ -0,0 +1,100 @@ +package org.bouncycastle.crypto.util; + +public abstract class Pack +{ + public static int bigEndianToInt(byte[] bs, int off) + { + int n = bs[ off] << 24; + n |= (bs[++off] & 0xff) << 16; + n |= (bs[++off] & 0xff) << 8; + n |= (bs[++off] & 0xff); + return n; + } + + public static void bigEndianToInt(byte[] bs, int off, int[] ns) + { + for (int i = 0; i < ns.length; ++i) + { + ns[i] = bigEndianToInt(bs, off); + off += 4; + } + } + + public static void intToBigEndian(int n, byte[] bs, int off) + { + bs[ off] = (byte)(n >>> 24); + bs[++off] = (byte)(n >>> 16); + bs[++off] = (byte)(n >>> 8); + bs[++off] = (byte)(n ); + } + + public static void intToBigEndian(int[] ns, byte[] bs, int off) + { + for (int i = 0; i < ns.length; ++i) + { + intToBigEndian(ns[i], bs, off); + off += 4; + } + } + + public static long bigEndianToLong(byte[] bs, int off) + { + int hi = bigEndianToInt(bs, off); + int lo = bigEndianToInt(bs, off + 4); + return ((long)(hi & 0xffffffffL) << 32) | (long)(lo & 0xffffffffL); + } + + public static void longToBigEndian(long n, byte[] bs, int off) + { + intToBigEndian((int)(n >>> 32), bs, off); + intToBigEndian((int)(n & 0xffffffffL), bs, off + 4); + } + + public static int littleEndianToInt(byte[] bs, int off) + { + int n = bs[ off] & 0xff; + n |= (bs[++off] & 0xff) << 8; + n |= (bs[++off] & 0xff) << 16; + n |= bs[++off] << 24; + return n; + } + + public static void littleEndianToInt(byte[] bs, int off, int[] ns) + { + for (int i = 0; i < ns.length; ++i) + { + ns[i] = littleEndianToInt(bs, off); + off += 4; + } + } + + public static void intToLittleEndian(int n, byte[] bs, int off) + { + bs[ off] = (byte)(n ); + bs[++off] = (byte)(n >>> 8); + bs[++off] = (byte)(n >>> 16); + bs[++off] = (byte)(n >>> 24); + } + + public static void intToLittleEndian(int[] ns, byte[] bs, int off) + { + for (int i = 0; i < ns.length; ++i) + { + intToLittleEndian(ns[i], bs, off); + off += 4; + } + } + + public static long littleEndianToLong(byte[] bs, int off) + { + int lo = littleEndianToInt(bs, off); + int hi = littleEndianToInt(bs, off + 4); + return ((long)(hi & 0xffffffffL) << 32) | (long)(lo & 0xffffffffL); + } + + public static void longToLittleEndian(long n, byte[] bs, int off) + { + intToLittleEndian((int)(n & 0xffffffffL), bs, off); + intToLittleEndian((int)(n >>> 32), bs, off + 4); + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java b/common/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java new file mode 100644 index 0000000..c2d7d88 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/util/PrivateKeyFactory.java @@ -0,0 +1,159 @@ +package org.bouncycastle.crypto.util; + +import java.io.IOException; +import java.io.InputStream; +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERInteger; +import org.bouncycastle.asn1.oiw.ElGamalParameter; +import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; +import org.bouncycastle.asn1.pkcs.DHParameter; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; +import org.bouncycastle.asn1.pkcs.RSAPrivateKey; +import org.bouncycastle.asn1.sec.ECPrivateKey; +import org.bouncycastle.asn1.sec.SECNamedCurves; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import org.bouncycastle.asn1.x509.DSAParameter; +import org.bouncycastle.asn1.x9.X962NamedCurves; +import org.bouncycastle.asn1.x9.X962Parameters; +import org.bouncycastle.asn1.x9.X9ECParameters; +import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPrivateKeyParameters; +import org.bouncycastle.crypto.params.DSAParameters; +import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECPrivateKeyParameters; +import org.bouncycastle.crypto.params.ElGamalParameters; +import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; +import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; + +/** + * Factory for creating private key objects from PKCS8 PrivateKeyInfo objects. + */ +public class PrivateKeyFactory +{ + /** + * Create a private key parameter from a PKCS8 PrivateKeyInfo encoding. + * + * @param privateKeyInfoData the PrivateKeyInfo encoding + * @return a suitable private key parameter + * @throws IOException on an error decoding the key + */ + public static AsymmetricKeyParameter createKey(byte[] privateKeyInfoData) throws IOException + { + return createKey(PrivateKeyInfo.getInstance(ASN1Primitive.fromByteArray(privateKeyInfoData))); + } + + /** + * Create a private key parameter from a PKCS8 PrivateKeyInfo encoding read from a + * stream. + * + * @param inStr the stream to read the PrivateKeyInfo encoding from + * @return a suitable private key parameter + * @throws IOException on an error decoding the key + */ + public static AsymmetricKeyParameter createKey(InputStream inStr) throws IOException + { + return createKey(PrivateKeyInfo.getInstance(new ASN1InputStream(inStr).readObject())); + } + + /** + * Create a private key parameter from the passed in PKCS8 PrivateKeyInfo object. + * + * @param keyInfo the PrivateKeyInfo object containing the key material + * @return a suitable private key parameter + * @throws IOException on an error decoding the key + */ + public static AsymmetricKeyParameter createKey(PrivateKeyInfo keyInfo) throws IOException + { + AlgorithmIdentifier algId = keyInfo.getPrivateKeyAlgorithm(); + + if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.rsaEncryption)) + { + RSAPrivateKey keyStructure = RSAPrivateKey.getInstance(keyInfo.parsePrivateKey()); + + return new RSAPrivateCrtKeyParameters(keyStructure.getModulus(), + keyStructure.getPublicExponent(), keyStructure.getPrivateExponent(), + keyStructure.getPrime1(), keyStructure.getPrime2(), keyStructure.getExponent1(), + keyStructure.getExponent2(), keyStructure.getCoefficient()); + } + // TODO? +// else if (algId.getObjectId().equals(X9ObjectIdentifiers.dhpublicnumber)) + else if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.dhKeyAgreement)) + { + DHParameter params = DHParameter.getInstance(algId.getParameters()); + DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); + + BigInteger lVal = params.getL(); + int l = lVal == null ? 0 : lVal.intValue(); + DHParameters dhParams = new DHParameters(params.getP(), params.getG(), null, l); + + return new DHPrivateKeyParameters(derX.getValue(), dhParams); + } + else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) + { + ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); + DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); + + return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters( + params.getP(), params.getG())); + } + else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa)) + { + DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); + ASN1Encodable de = algId.getParameters(); + + DSAParameters parameters = null; + if (de != null) + { + DSAParameter params = DSAParameter.getInstance(de.toASN1Primitive()); + parameters = new DSAParameters(params.getP(), params.getQ(), params.getG()); + } + + return new DSAPrivateKeyParameters(derX.getValue(), parameters); + } + else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_ecPublicKey)) + { + X962Parameters params = new X962Parameters((ASN1Primitive)algId.getParameters()); + + X9ECParameters x9; + if (params.isNamedCurve()) + { + ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters()); + x9 = X962NamedCurves.getByOID(oid); + + if (x9 == null) + { + x9 = SECNamedCurves.getByOID(oid); + + } + } + else + { + x9 = X9ECParameters.getInstance(params.getParameters()); + } + + ECPrivateKey ec = ECPrivateKey.getInstance(keyInfo.parsePrivateKey()); + BigInteger d = ec.getKey(); + + // TODO We lose any named parameters here + + ECDomainParameters dParams = new ECDomainParameters( + x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed()); + + return new ECPrivateKeyParameters(d, dParams); + } + else + { + throw new RuntimeException("algorithm identifier in key not recognised"); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/crypto/util/PublicKeyFactory.java b/common/src/main/java/org/bouncycastle/crypto/util/PublicKeyFactory.java new file mode 100644 index 0000000..b720a8d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/crypto/util/PublicKeyFactory.java @@ -0,0 +1,196 @@ +package org.bouncycastle.crypto.util; + +import java.io.IOException; +import java.io.InputStream; +import javabc.BigInteger; + +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1OctetString; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERInteger; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.oiw.ElGamalParameter; +import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; +import org.bouncycastle.asn1.pkcs.DHParameter; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.pkcs.RSAPublicKey; +import org.bouncycastle.asn1.sec.SECNamedCurves; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import org.bouncycastle.asn1.x509.DSAParameter; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; +import org.bouncycastle.asn1.x9.DHDomainParameters; +import org.bouncycastle.asn1.x9.DHPublicKey; +import org.bouncycastle.asn1.x9.DHValidationParms; +import org.bouncycastle.asn1.x9.X962NamedCurves; +import org.bouncycastle.asn1.x9.X962Parameters; +import org.bouncycastle.asn1.x9.X9ECParameters; +import org.bouncycastle.asn1.x9.X9ECPoint; +import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; +import org.bouncycastle.crypto.params.AsymmetricKeyParameter; +import org.bouncycastle.crypto.params.DHParameters; +import org.bouncycastle.crypto.params.DHPublicKeyParameters; +import org.bouncycastle.crypto.params.DHValidationParameters; +import org.bouncycastle.crypto.params.DSAParameters; +import org.bouncycastle.crypto.params.DSAPublicKeyParameters; +import org.bouncycastle.crypto.params.ECDomainParameters; +import org.bouncycastle.crypto.params.ECPublicKeyParameters; +import org.bouncycastle.crypto.params.ElGamalParameters; +import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; +import org.bouncycastle.crypto.params.RSAKeyParameters; + +/** + * Factory to create asymmetric public key parameters for asymmetric ciphers from range of + * ASN.1 encoded SubjectPublicKeyInfo objects. + */ +public class PublicKeyFactory +{ + /** + * Create a public key from a SubjectPublicKeyInfo encoding + * + * @param keyInfoData the SubjectPublicKeyInfo encoding + * @return the appropriate key parameter + * @throws IOException on an error decoding the key + */ + public static AsymmetricKeyParameter createKey(byte[] keyInfoData) throws IOException + { + return createKey(SubjectPublicKeyInfo.getInstance(ASN1Primitive.fromByteArray(keyInfoData))); + } + + /** + * Create a public key from a SubjectPublicKeyInfo encoding read from a stream + * + * @param inStr the stream to read the SubjectPublicKeyInfo encoding from + * @return the appropriate key parameter + * @throws IOException on an error decoding the key + */ + public static AsymmetricKeyParameter createKey(InputStream inStr) throws IOException + { + return createKey(SubjectPublicKeyInfo.getInstance(new ASN1InputStream(inStr).readObject())); + } + + /** + * Create a public key from the passed in SubjectPublicKeyInfo + * + * @param keyInfo the SubjectPublicKeyInfo containing the key data + * @return the appropriate key parameter + * @throws IOException on an error decoding the key + */ + public static AsymmetricKeyParameter createKey(SubjectPublicKeyInfo keyInfo) throws IOException + { + AlgorithmIdentifier algId = keyInfo.getAlgorithm(); + + if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.rsaEncryption) + || algId.getAlgorithm().equals(X509ObjectIdentifiers.id_ea_rsa)) + { + RSAPublicKey pubKey = RSAPublicKey.getInstance(keyInfo.parsePublicKey()); + + return new RSAKeyParameters(false, pubKey.getModulus(), pubKey.getPublicExponent()); + } + else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.dhpublicnumber)) + { + DHPublicKey dhPublicKey = DHPublicKey.getInstance(keyInfo.parsePublicKey()); + + BigInteger y = dhPublicKey.getY().getValue(); + + DHDomainParameters dhParams = DHDomainParameters.getInstance(algId.getParameters()); + + BigInteger p = dhParams.getP().getValue(); + BigInteger g = dhParams.getG().getValue(); + BigInteger q = dhParams.getQ().getValue(); + + BigInteger j = null; + if (dhParams.getJ() != null) + { + j = dhParams.getJ().getValue(); + } + + DHValidationParameters validation = null; + DHValidationParms dhValidationParms = dhParams.getValidationParms(); + if (dhValidationParms != null) + { + byte[] seed = dhValidationParms.getSeed().getBytes(); + BigInteger pgenCounter = dhValidationParms.getPgenCounter().getValue(); + + // TODO Check pgenCounter size? + + validation = new DHValidationParameters(seed, pgenCounter.intValue()); + } + + return new DHPublicKeyParameters(y, new DHParameters(p, g, q, j, validation)); + } + else if (algId.getAlgorithm().equals(PKCSObjectIdentifiers.dhKeyAgreement)) + { + DHParameter params = DHParameter.getInstance(algId.getParameters()); + DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); + + BigInteger lVal = params.getL(); + int l = lVal == null ? 0 : lVal.intValue(); + DHParameters dhParams = new DHParameters(params.getP(), params.getG(), null, l); + + return new DHPublicKeyParameters(derY.getValue(), dhParams); + } + else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) + { + ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); + DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); + + return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters( + params.getP(), params.getG())); + } + else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa) + || algId.getAlgorithm().equals(OIWObjectIdentifiers.dsaWithSHA1)) + { + DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); + ASN1Encodable de = algId.getParameters(); + + DSAParameters parameters = null; + if (de != null) + { + DSAParameter params = DSAParameter.getInstance(de.toASN1Primitive()); + parameters = new DSAParameters(params.getP(), params.getQ(), params.getG()); + } + + return new DSAPublicKeyParameters(derY.getValue(), parameters); + } + else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_ecPublicKey)) + { + X962Parameters params = new X962Parameters( + (ASN1Primitive)algId.getParameters()); + + X9ECParameters x9; + if (params.isNamedCurve()) + { + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)params.getParameters(); + x9 = X962NamedCurves.getByOID(oid); + + if (x9 == null) + { + x9 = SECNamedCurves.getByOID(oid); + + } + } + else + { + x9 = X9ECParameters.getInstance(params.getParameters()); + } + + ASN1OctetString key = new DEROctetString(keyInfo.getPublicKeyData().getBytes()); + X9ECPoint derQ = new X9ECPoint(x9.getCurve(), key); + + // TODO We lose any named parameters here + + ECDomainParameters dParams = new ECDomainParameters( + x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed()); + + return new ECPublicKeyParameters(derQ.getPoint(), dParams); + } + else + { + throw new RuntimeException("algorithm identifier in key not recognised"); + } + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ECAlgorithms.java b/common/src/main/java/org/bouncycastle/math/ec/ECAlgorithms.java new file mode 100644 index 0000000..cc4cc29 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ECAlgorithms.java @@ -0,0 +1,92 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +public class ECAlgorithms +{ + public static ECPoint sumOfTwoMultiplies(ECPoint P, BigInteger a, + ECPoint Q, BigInteger b) + { + ECCurve c = P.getCurve(); + if (!c.equals(Q.getCurve())) + { + throw new IllegalArgumentException("P and Q must be on same curve"); + } + + // Point multiplication for Koblitz curves (using WTNAF) beats Shamir's trick + if (c instanceof ECCurve.F2m) + { + ECCurve.F2m f2mCurve = (ECCurve.F2m)c; + if (f2mCurve.isKoblitz()) + { + return P.multiply(a).add(Q.multiply(b)); + } + } + + return implShamirsTrick(P, a, Q, b); + } + + /* + * "Shamir's Trick", originally due to E. G. Straus + * (Addition chains of vectors. American Mathematical Monthly, + * 71(7):806-808, Aug./Sept. 1964) + *

        +     * Input: The points P, Q, scalar k = (km?, ... , k1, k0)
        +     * and scalar l = (lm?, ... , l1, l0).
        +     * Output: R = k * P + l * Q.
        +     * 1: Z <- P + Q
        +     * 2: R <- O
        +     * 3: for i from m-1 down to 0 do
        +     * 4:        R <- R + R        {point doubling}
        +     * 5:        if (ki = 1) and (li = 0) then R <- R + P end if
        +     * 6:        if (ki = 0) and (li = 1) then R <- R + Q end if
        +     * 7:        if (ki = 1) and (li = 1) then R <- R + Z end if
        +     * 8: end for
        +     * 9: return R
        +     * 
        + */ + public static ECPoint shamirsTrick(ECPoint P, BigInteger k, + ECPoint Q, BigInteger l) + { + if (!P.getCurve().equals(Q.getCurve())) + { + throw new IllegalArgumentException("P and Q must be on same curve"); + } + + return implShamirsTrick(P, k, Q, l); + } + + private static ECPoint implShamirsTrick(ECPoint P, BigInteger k, + ECPoint Q, BigInteger l) + { + int m = Math.max(k.bitLength(), l.bitLength()); + ECPoint Z = P.add(Q); + ECPoint R = P.getCurve().getInfinity(); + + for (int i = m - 1; i >= 0; --i) + { + R = R.twice(); + + if (k.testBit(i)) + { + if (l.testBit(i)) + { + R = R.add(Z); + } + else + { + R = R.add(P); + } + } + else + { + if (l.testBit(i)) + { + R = R.add(Q); + } + } + } + + return R; + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ECConstants.java b/common/src/main/java/org/bouncycastle/math/ec/ECConstants.java new file mode 100644 index 0000000..c0c5bbe --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ECConstants.java @@ -0,0 +1,12 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +public interface ECConstants +{ + public static final BigInteger ZERO = BigInteger.valueOf(0); + public static final BigInteger ONE = BigInteger.valueOf(1); + public static final BigInteger TWO = BigInteger.valueOf(2); + public static final BigInteger THREE = BigInteger.valueOf(3); + public static final BigInteger FOUR = BigInteger.valueOf(4); +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ECCurve.java b/common/src/main/java/org/bouncycastle/math/ec/ECCurve.java new file mode 100644 index 0000000..5a74e54 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ECCurve.java @@ -0,0 +1,668 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; +import java.util.Random; + +/** + * base class for an elliptic curve + */ +public abstract class ECCurve +{ + ECFieldElement a, b; + + public abstract int getFieldSize(); + + public abstract ECFieldElement fromBigInteger(BigInteger x); + + public abstract ECPoint createPoint(BigInteger x, BigInteger y, boolean withCompression); + + public abstract ECPoint decodePoint(byte[] encoded); + + public abstract ECPoint getInfinity(); + + public ECFieldElement getA() + { + return a; + } + + public ECFieldElement getB() + { + return b; + } + + /** + * Elliptic curve over Fp + */ + public static class Fp extends ECCurve + { + BigInteger q; + ECPoint.Fp infinity; + + public Fp(BigInteger q, BigInteger a, BigInteger b) + { + this.q = q; + this.a = fromBigInteger(a); + this.b = fromBigInteger(b); + this.infinity = new ECPoint.Fp(this, null, null); + } + + public BigInteger getQ() + { + return q; + } + + public int getFieldSize() + { + return q.bitLength(); + } + + public ECFieldElement fromBigInteger(BigInteger x) + { + return new ECFieldElement.Fp(this.q, x); + } + + public ECPoint createPoint(BigInteger x, BigInteger y, boolean withCompression) + { + return new ECPoint.Fp(this, fromBigInteger(x), fromBigInteger(y), withCompression); + } + + /** + * Decode a point on this curve from its ASN.1 encoding. The different + * encodings are taken account of, including point compression for + * Fp (X9.62 s 4.2.1 pg 17). + * @return The decoded point. + */ + public ECPoint decodePoint(byte[] encoded) + { + ECPoint p = null; + + switch (encoded[0]) + { + // infinity + case 0x00: + if (encoded.length > 1) + { + throw new RuntimeException("Invalid point encoding"); + } + p = getInfinity(); + break; + // compressed + case 0x02: + case 0x03: + int ytilde = encoded[0] & 1; + byte[] i = new byte[encoded.length - 1]; + + System.arraycopy(encoded, 1, i, 0, i.length); + + ECFieldElement x = new ECFieldElement.Fp(this.q, new BigInteger(1, i)); + ECFieldElement alpha = x.multiply(x.square().add(a)).add(b); + ECFieldElement beta = alpha.sqrt(); + + // + // if we can't find a sqrt we haven't got a point on the + // curve - run! + // + if (beta == null) + { + throw new RuntimeException("Invalid point compression"); + } + + int bit0 = (beta.toBigInteger().testBit(0) ? 1 : 0); + + if (bit0 == ytilde) + { + p = new ECPoint.Fp(this, x, beta, true); + } + else + { + p = new ECPoint.Fp(this, x, + new ECFieldElement.Fp(this.q, q.subtract(beta.toBigInteger())), true); + } + break; + // uncompressed + case 0x04: + // hybrid + case 0x06: + case 0x07: + byte[] xEnc = new byte[(encoded.length - 1) / 2]; + byte[] yEnc = new byte[(encoded.length - 1) / 2]; + + System.arraycopy(encoded, 1, xEnc, 0, xEnc.length); + System.arraycopy(encoded, xEnc.length + 1, yEnc, 0, yEnc.length); + + p = new ECPoint.Fp(this, + new ECFieldElement.Fp(this.q, new BigInteger(1, xEnc)), + new ECFieldElement.Fp(this.q, new BigInteger(1, yEnc))); + break; + default: + throw new RuntimeException("Invalid point encoding 0x" + Integer.toString(encoded[0], 16)); + } + + return p; + } + + public ECPoint getInfinity() + { + return infinity; + } + + public boolean equals( + Object anObject) + { + if (anObject == this) + { + return true; + } + + if (!(anObject instanceof ECCurve.Fp)) + { + return false; + } + + ECCurve.Fp other = (ECCurve.Fp) anObject; + + return this.q.equals(other.q) + && a.equals(other.a) && b.equals(other.b); + } + + public int hashCode() + { + return a.hashCode() ^ b.hashCode() ^ q.hashCode(); + } + } + + /** + * Elliptic curves over F2m. The Weierstrass equation is given by + * y2 + xy = x3 + ax2 + b. + */ + public static class F2m extends ECCurve + { + /** + * The exponent m of F2m. + */ + private int m; // can't be final - JDK 1.1 + + /** + * TPB: The integer k where xm + + * xk + 1 represents the reduction polynomial + * f(z).
        + * PPB: The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + private int k1; // can't be final - JDK 1.1 + + /** + * TPB: Always set to 0
        + * PPB: The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + private int k2; // can't be final - JDK 1.1 + + /** + * TPB: Always set to 0
        + * PPB: The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + private int k3; // can't be final - JDK 1.1 + + /** + * The order of the base point of the curve. + */ + private BigInteger n; // can't be final - JDK 1.1 + + /** + * The cofactor of the curve. + */ + private BigInteger h; // can't be final - JDK 1.1 + + /** + * The point at infinity on this curve. + */ + private ECPoint.F2m infinity; // can't be final - JDK 1.1 + + /** + * The parameter μ of the elliptic curve if this is + * a Koblitz curve. + */ + private byte mu = 0; + + /** + * The auxiliary values s0 and + * s1 used for partial modular reduction for + * Koblitz curves. + */ + private BigInteger[] si = null; + + /** + * Constructor for Trinomial Polynomial Basis (TPB). + * @param m The exponent m of + * F2m. + * @param k The integer k where xm + + * xk + 1 represents the reduction + * polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + */ + public F2m( + int m, + int k, + BigInteger a, + BigInteger b) + { + this(m, k, 0, 0, a, b, null, null); + } + + /** + * Constructor for Trinomial Polynomial Basis (TPB). + * @param m The exponent m of + * F2m. + * @param k The integer k where xm + + * xk + 1 represents the reduction + * polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param n The order of the main subgroup of the elliptic curve. + * @param h The cofactor of the elliptic curve, i.e. + * #Ea(F2m) = h * n. + */ + public F2m( + int m, + int k, + BigInteger a, + BigInteger b, + BigInteger n, + BigInteger h) + { + this(m, k, 0, 0, a, b, n, h); + } + + /** + * Constructor for Pentanomial Polynomial Basis (PPB). + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k2 The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k3 The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + */ + public F2m( + int m, + int k1, + int k2, + int k3, + BigInteger a, + BigInteger b) + { + this(m, k1, k2, k3, a, b, null, null); + } + + /** + * Constructor for Pentanomial Polynomial Basis (PPB). + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k2 The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k3 The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param a The coefficient a in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param b The coefficient b in the Weierstrass equation + * for non-supersingular elliptic curves over + * F2m. + * @param n The order of the main subgroup of the elliptic curve. + * @param h The cofactor of the elliptic curve, i.e. + * #Ea(F2m) = h * n. + */ + public F2m( + int m, + int k1, + int k2, + int k3, + BigInteger a, + BigInteger b, + BigInteger n, + BigInteger h) + { + this.m = m; + this.k1 = k1; + this.k2 = k2; + this.k3 = k3; + this.n = n; + this.h = h; + + if (k1 == 0) + { + throw new IllegalArgumentException("k1 must be > 0"); + } + + if (k2 == 0) + { + if (k3 != 0) + { + throw new IllegalArgumentException("k3 must be 0 if k2 == 0"); + } + } + else + { + if (k2 <= k1) + { + throw new IllegalArgumentException("k2 must be > k1"); + } + + if (k3 <= k2) + { + throw new IllegalArgumentException("k3 must be > k2"); + } + } + + this.a = fromBigInteger(a); + this.b = fromBigInteger(b); + this.infinity = new ECPoint.F2m(this, null, null); + } + + public int getFieldSize() + { + return m; + } + + public ECFieldElement fromBigInteger(BigInteger x) + { + return new ECFieldElement.F2m(this.m, this.k1, this.k2, this.k3, x); + } + + public ECPoint createPoint(BigInteger x, BigInteger y, boolean withCompression) + { + return new ECPoint.F2m(this, fromBigInteger(x), fromBigInteger(y), withCompression); + } + + /* (non-Javadoc) + * @see org.bouncycastle.math.ec.ECCurve#decodePoint(byte[]) + */ + public ECPoint decodePoint(byte[] encoded) + { + ECPoint p = null; + + switch (encoded[0]) + { + // infinity + case 0x00: + if (encoded.length > 1) + { + throw new RuntimeException("Invalid point encoding"); + } + p = getInfinity(); + break; + // compressed + case 0x02: + case 0x03: + byte[] enc = new byte[encoded.length - 1]; + System.arraycopy(encoded, 1, enc, 0, enc.length); + if (encoded[0] == 0x02) + { + p = decompressPoint(enc, 0); + } + else + { + p = decompressPoint(enc, 1); + } + break; + // uncompressed + case 0x04: + // hybrid + case 0x06: + case 0x07: + byte[] xEnc = new byte[(encoded.length - 1) / 2]; + byte[] yEnc = new byte[(encoded.length - 1) / 2]; + + System.arraycopy(encoded, 1, xEnc, 0, xEnc.length); + System.arraycopy(encoded, xEnc.length + 1, yEnc, 0, yEnc.length); + + p = new ECPoint.F2m(this, + new ECFieldElement.F2m(this.m, this.k1, this.k2, this.k3, + new BigInteger(1, xEnc)), + new ECFieldElement.F2m(this.m, this.k1, this.k2, this.k3, + new BigInteger(1, yEnc)), false); + break; + + default: + throw new RuntimeException("Invalid point encoding 0x" + Integer.toString(encoded[0], 16)); + } + + return p; + } + + public ECPoint getInfinity() + { + return infinity; + } + + /** + * Returns true if this is a Koblitz curve (ABC curve). + * @return true if this is a Koblitz curve (ABC curve), false otherwise + */ + public boolean isKoblitz() + { + return ((n != null) && (h != null) && + ((a.toBigInteger().equals(ECConstants.ZERO)) || + (a.toBigInteger().equals(ECConstants.ONE))) && + (b.toBigInteger().equals(ECConstants.ONE))); + } + + /** + * Returns the parameter μ of the elliptic curve. + * @return μ of the elliptic curve. + * @throws IllegalArgumentException if the given ECCurve is not a + * Koblitz curve. + */ + synchronized byte getMu() + { + if (mu == 0) + { + mu = Tnaf.getMu(this); + } + return mu; + } + + /** + * @return the auxiliary values s0 and + * s1 used for partial modular reduction for + * Koblitz curves. + */ + synchronized BigInteger[] getSi() + { + if (si == null) + { + si = Tnaf.getSi(this); + } + return si; + } + + /** + * Decompresses a compressed point P = (xp, yp) (X9.62 s 4.2.2). + * + * @param xEnc + * The encoding of field element xp. + * @param ypBit + * ~yp, an indication bit for the decompression of yp. + * @return the decompressed point. + */ + private ECPoint decompressPoint( + byte[] xEnc, + int ypBit) + { + ECFieldElement xp = new ECFieldElement.F2m( + this.m, this.k1, this.k2, this.k3, new BigInteger(1, xEnc)); + ECFieldElement yp = null; + if (xp.toBigInteger().equals(ECConstants.ZERO)) + { + yp = (ECFieldElement.F2m)b; + for (int i = 0; i < m - 1; i++) + { + yp = yp.square(); + } + } + else + { + ECFieldElement beta = xp.add(a).add( + b.multiply(xp.square().invert())); + ECFieldElement z = solveQuadradicEquation(beta); + if (z == null) + { + throw new RuntimeException("Invalid point compression"); + } + int zBit = 0; + if (z.toBigInteger().testBit(0)) + { + zBit = 1; + } + if (zBit != ypBit) + { + z = z.add(new ECFieldElement.F2m(this.m, this.k1, this.k2, + this.k3, ECConstants.ONE)); + } + yp = xp.multiply(z); + } + + return new ECPoint.F2m(this, xp, yp); + } + + /** + * Solves a quadratic equation z2 + z = beta(X9.62 + * D.1.6) The other solution is z + 1. + * + * @param beta + * The value to solve the qradratic equation for. + * @return the solution for z2 + z = beta or + * null if no solution exists. + */ + private ECFieldElement solveQuadradicEquation(ECFieldElement beta) + { + ECFieldElement zeroElement = new ECFieldElement.F2m( + this.m, this.k1, this.k2, this.k3, ECConstants.ZERO); + + if (beta.toBigInteger().equals(ECConstants.ZERO)) + { + return zeroElement; + } + + ECFieldElement z = null; + ECFieldElement gamma = zeroElement; + + Random rand = new Random(); + do + { + ECFieldElement t = new ECFieldElement.F2m(this.m, this.k1, + this.k2, this.k3, new BigInteger(m, rand)); + z = zeroElement; + ECFieldElement w = beta; + for (int i = 1; i <= m - 1; i++) + { + ECFieldElement w2 = w.square(); + z = z.square().add(w2.multiply(t)); + w = w2.add(beta); + } + if (!w.toBigInteger().equals(ECConstants.ZERO)) + { + return null; + } + gamma = z.square().add(z); + } + while (gamma.toBigInteger().equals(ECConstants.ZERO)); + + return z; + } + + public boolean equals( + Object anObject) + { + if (anObject == this) + { + return true; + } + + if (!(anObject instanceof ECCurve.F2m)) + { + return false; + } + + ECCurve.F2m other = (ECCurve.F2m)anObject; + + return (this.m == other.m) && (this.k1 == other.k1) + && (this.k2 == other.k2) && (this.k3 == other.k3) + && a.equals(other.a) && b.equals(other.b); + } + + public int hashCode() + { + return this.a.hashCode() ^ this.b.hashCode() ^ m ^ k1 ^ k2 ^ k3; + } + + public int getM() + { + return m; + } + + /** + * Return true if curve uses a Trinomial basis. + * + * @return true if curve Trinomial, false otherwise. + */ + public boolean isTrinomial() + { + return k2 == 0 && k3 == 0; + } + + public int getK1() + { + return k1; + } + + public int getK2() + { + return k2; + } + + public int getK3() + { + return k3; + } + + public BigInteger getN() + { + return n; + } + + public BigInteger getH() + { + return h; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ECFieldElement.java b/common/src/main/java/org/bouncycastle/math/ec/ECFieldElement.java new file mode 100644 index 0000000..5f9d80d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ECFieldElement.java @@ -0,0 +1,1196 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; +import java.util.Random; + +public abstract class ECFieldElement + implements ECConstants +{ + + public abstract BigInteger toBigInteger(); + public abstract String getFieldName(); + public abstract int getFieldSize(); + public abstract ECFieldElement add(ECFieldElement b); + public abstract ECFieldElement subtract(ECFieldElement b); + public abstract ECFieldElement multiply(ECFieldElement b); + public abstract ECFieldElement divide(ECFieldElement b); + public abstract ECFieldElement negate(); + public abstract ECFieldElement square(); + public abstract ECFieldElement invert(); + public abstract ECFieldElement sqrt(); + + public String toString() + { + return this.toBigInteger().toString(2); + } + + public static class Fp extends ECFieldElement + { + BigInteger x; + + BigInteger q; + + public Fp(BigInteger q, BigInteger x) + { + this.x = x; + + if (x.compareTo(q) >= 0) + { + throw new IllegalArgumentException("x value too large in field element"); + } + + this.q = q; + } + + public BigInteger toBigInteger() + { + return x; + } + + /** + * return the field name for this field. + * + * @return the string "Fp". + */ + public String getFieldName() + { + return "Fp"; + } + + public int getFieldSize() + { + return q.bitLength(); + } + + public BigInteger getQ() + { + return q; + } + + public ECFieldElement add(ECFieldElement b) + { + return new Fp(q, x.add(b.toBigInteger()).mod(q)); + } + + public ECFieldElement subtract(ECFieldElement b) + { + return new Fp(q, x.subtract(b.toBigInteger()).mod(q)); + } + + public ECFieldElement multiply(ECFieldElement b) + { + return new Fp(q, x.multiply(b.toBigInteger()).mod(q)); + } + + public ECFieldElement divide(ECFieldElement b) + { + return new Fp(q, x.multiply(b.toBigInteger().modInverse(q)).mod(q)); + } + + public ECFieldElement negate() + { + return new Fp(q, x.negate().mod(q)); + } + + public ECFieldElement square() + { + return new Fp(q, x.multiply(x).mod(q)); + } + + public ECFieldElement invert() + { + return new Fp(q, x.modInverse(q)); + } + + // D.1.4 91 + /** + * return a sqrt root - the routine verifies that the calculation + * returns the right value - if none exists it returns null. + */ + public ECFieldElement sqrt() + { + if (!q.testBit(0)) + { + throw new RuntimeException("not done yet"); + } + + // note: even though this class implements ECConstants don't be tempted to + // remove the explicit declaration, some J2ME environments don't cope. + // p mod 4 == 3 + if (q.testBit(1)) + { + // z = g^(u+1) + p, p = 4u + 3 + ECFieldElement z = new Fp(q, x.modPow(q.shiftRight(2).add(ECConstants.ONE), q)); + + return z.square().equals(this) ? z : null; + } + + // p mod 4 == 1 + BigInteger qMinusOne = q.subtract(ECConstants.ONE); + + BigInteger legendreExponent = qMinusOne.shiftRight(1); + if (!(x.modPow(legendreExponent, q).equals(ECConstants.ONE))) + { + return null; + } + + BigInteger u = qMinusOne.shiftRight(2); + BigInteger k = u.shiftLeft(1).add(ECConstants.ONE); + + BigInteger Q = this.x; + BigInteger fourQ = Q.shiftLeft(2).mod(q); + + BigInteger U, V; + Random rand = new Random(); + do + { + BigInteger P; + do + { + P = new BigInteger(q.bitLength(), rand); + } + while (P.compareTo(q) >= 0 + || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, q).equals(qMinusOne))); + + BigInteger[] result = lucasSequence(q, P, Q, k); + U = result[0]; + V = result[1]; + + if (V.multiply(V).mod(q).equals(fourQ)) + { + // Integer division by 2, mod q + if (V.testBit(0)) + { + V = V.add(q); + } + + V = V.shiftRight(1); + + //assert V.multiply(V).mod(q).equals(x); + + return new ECFieldElement.Fp(q, V); + } + } + while (U.equals(ECConstants.ONE) || U.equals(qMinusOne)); + + return null; + +// BigInteger qMinusOne = q.subtract(ECConstants.ONE); +// BigInteger legendreExponent = qMinusOne.shiftRight(1); //divide(ECConstants.TWO); +// if (!(x.modPow(legendreExponent, q).equals(ECConstants.ONE))) +// { +// return null; +// } +// +// Random rand = new Random(); +// BigInteger fourX = x.shiftLeft(2); +// +// BigInteger r; +// do +// { +// r = new BigInteger(q.bitLength(), rand); +// } +// while (r.compareTo(q) >= 0 +// || !(r.multiply(r).subtract(fourX).modPow(legendreExponent, q).equals(qMinusOne))); +// +// BigInteger n1 = qMinusOne.shiftRight(2); //.divide(ECConstants.FOUR); +// BigInteger n2 = n1.add(ECConstants.ONE); //q.add(ECConstants.THREE).divide(ECConstants.FOUR); +// +// BigInteger wOne = WOne(r, x, q); +// BigInteger wSum = W(n1, wOne, q).add(W(n2, wOne, q)).mod(q); +// BigInteger twoR = r.shiftLeft(1); //ECConstants.TWO.multiply(r); +// +// BigInteger root = twoR.modPow(q.subtract(ECConstants.TWO), q) +// .multiply(x).mod(q) +// .multiply(wSum).mod(q); +// +// return new Fp(q, root); + } + +// private static BigInteger W(BigInteger n, BigInteger wOne, BigInteger p) +// { +// if (n.equals(ECConstants.ONE)) +// { +// return wOne; +// } +// boolean isEven = !n.testBit(0); +// n = n.shiftRight(1);//divide(ECConstants.TWO); +// if (isEven) +// { +// BigInteger w = W(n, wOne, p); +// return w.multiply(w).subtract(ECConstants.TWO).mod(p); +// } +// BigInteger w1 = W(n.add(ECConstants.ONE), wOne, p); +// BigInteger w2 = W(n, wOne, p); +// return w1.multiply(w2).subtract(wOne).mod(p); +// } +// +// private BigInteger WOne(BigInteger r, BigInteger x, BigInteger p) +// { +// return r.multiply(r).multiply(x.modPow(q.subtract(ECConstants.TWO), q)).subtract(ECConstants.TWO).mod(p); +// } + + private static BigInteger[] lucasSequence( + BigInteger p, + BigInteger P, + BigInteger Q, + BigInteger k) + { + int n = k.bitLength(); + int s = k.getLowestSetBit(); + + BigInteger Uh = ECConstants.ONE; + BigInteger Vl = ECConstants.TWO; + BigInteger Vh = P; + BigInteger Ql = ECConstants.ONE; + BigInteger Qh = ECConstants.ONE; + + for (int j = n - 1; j >= s + 1; --j) + { + Ql = Ql.multiply(Qh).mod(p); + + if (k.testBit(j)) + { + Qh = Ql.multiply(Q).mod(p); + Uh = Uh.multiply(Vh).mod(p); + Vl = Vh.multiply(Vl).subtract(P.multiply(Ql)).mod(p); + Vh = Vh.multiply(Vh).subtract(Qh.shiftLeft(1)).mod(p); + } + else + { + Qh = Ql; + Uh = Uh.multiply(Vl).subtract(Ql).mod(p); + Vh = Vh.multiply(Vl).subtract(P.multiply(Ql)).mod(p); + Vl = Vl.multiply(Vl).subtract(Ql.shiftLeft(1)).mod(p); + } + } + + Ql = Ql.multiply(Qh).mod(p); + Qh = Ql.multiply(Q).mod(p); + Uh = Uh.multiply(Vl).subtract(Ql).mod(p); + Vl = Vh.multiply(Vl).subtract(P.multiply(Ql)).mod(p); + Ql = Ql.multiply(Qh).mod(p); + + for (int j = 1; j <= s; ++j) + { + Uh = Uh.multiply(Vl).mod(p); + Vl = Vl.multiply(Vl).subtract(Ql.shiftLeft(1)).mod(p); + Ql = Ql.multiply(Ql).mod(p); + } + + return new BigInteger[]{ Uh, Vl }; + } + + public boolean equals(Object other) + { + if (other == this) + { + return true; + } + + if (!(other instanceof ECFieldElement.Fp)) + { + return false; + } + + ECFieldElement.Fp o = (ECFieldElement.Fp)other; + return q.equals(o.q) && x.equals(o.x); + } + + public int hashCode() + { + return q.hashCode() ^ x.hashCode(); + } + } + +// /** +// * Class representing the Elements of the finite field +// * F2m in polynomial basis (PB) +// * representation. Both trinomial (TPB) and pentanomial (PPB) polynomial +// * basis representations are supported. Gaussian normal basis (GNB) +// * representation is not supported. +// */ +// public static class F2m extends ECFieldElement +// { +// BigInteger x; +// +// /** +// * Indicates gaussian normal basis representation (GNB). Number chosen +// * according to X9.62. GNB is not implemented at present. +// */ +// public static final int GNB = 1; +// +// /** +// * Indicates trinomial basis representation (TPB). Number chosen +// * according to X9.62. +// */ +// public static final int TPB = 2; +// +// /** +// * Indicates pentanomial basis representation (PPB). Number chosen +// * according to X9.62. +// */ +// public static final int PPB = 3; +// +// /** +// * TPB or PPB. +// */ +// private int representation; +// +// /** +// * The exponent m of F2m. +// */ +// private int m; +// +// /** +// * TPB: The integer k where xm + +// * xk + 1 represents the reduction polynomial +// * f(z).
        +// * PPB: The integer k1 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z).
        +// */ +// private int k1; +// +// /** +// * TPB: Always set to 0
        +// * PPB: The integer k2 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z).
        +// */ +// private int k2; +// +// /** +// * TPB: Always set to 0
        +// * PPB: The integer k3 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z).
        +// */ +// private int k3; +// +// /** +// * Constructor for PPB. +// * @param m The exponent m of +// * F2m. +// * @param k1 The integer k1 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z). +// * @param k2 The integer k2 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z). +// * @param k3 The integer k3 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z). +// * @param x The BigInteger representing the value of the field element. +// */ +// public F2m( +// int m, +// int k1, +// int k2, +// int k3, +// BigInteger x) +// { +//// super(x); +// this.x = x; +// +// if ((k2 == 0) && (k3 == 0)) +// { +// this.representation = TPB; +// } +// else +// { +// if (k2 >= k3) +// { +// throw new IllegalArgumentException( +// "k2 must be smaller than k3"); +// } +// if (k2 <= 0) +// { +// throw new IllegalArgumentException( +// "k2 must be larger than 0"); +// } +// this.representation = PPB; +// } +// +// if (x.signum() < 0) +// { +// throw new IllegalArgumentException("x value cannot be negative"); +// } +// +// this.m = m; +// this.k1 = k1; +// this.k2 = k2; +// this.k3 = k3; +// } +// +// /** +// * Constructor for TPB. +// * @param m The exponent m of +// * F2m. +// * @param k The integer k where xm + +// * xk + 1 represents the reduction +// * polynomial f(z). +// * @param x The BigInteger representing the value of the field element. +// */ +// public F2m(int m, int k, BigInteger x) +// { +// // Set k1 to k, and set k2 and k3 to 0 +// this(m, k, 0, 0, x); +// } +// +// public BigInteger toBigInteger() +// { +// return x; +// } +// +// public String getFieldName() +// { +// return "F2m"; +// } +// +// public int getFieldSize() +// { +// return m; +// } +// +// /** +// * Checks, if the ECFieldElements a and b +// * are elements of the same field F2m +// * (having the same representation). +// * @param a field element. +// * @param b field element to be compared. +// * @throws IllegalArgumentException if a and b +// * are not elements of the same field +// * F2m (having the same +// * representation). +// */ +// public static void checkFieldElements( +// ECFieldElement a, +// ECFieldElement b) +// { +// if ((!(a instanceof F2m)) || (!(b instanceof F2m))) +// { +// throw new IllegalArgumentException("Field elements are not " +// + "both instances of ECFieldElement.F2m"); +// } +// +// if ((a.toBigInteger().signum() < 0) || (b.toBigInteger().signum() < 0)) +// { +// throw new IllegalArgumentException( +// "x value may not be negative"); +// } +// +// ECFieldElement.F2m aF2m = (ECFieldElement.F2m)a; +// ECFieldElement.F2m bF2m = (ECFieldElement.F2m)b; +// +// if ((aF2m.m != bF2m.m) || (aF2m.k1 != bF2m.k1) +// || (aF2m.k2 != bF2m.k2) || (aF2m.k3 != bF2m.k3)) +// { +// throw new IllegalArgumentException("Field elements are not " +// + "elements of the same field F2m"); +// } +// +// if (aF2m.representation != bF2m.representation) +// { +// // Should never occur +// throw new IllegalArgumentException( +// "One of the field " +// + "elements are not elements has incorrect representation"); +// } +// } +// +// /** +// * Computes z * a(z) mod f(z), where f(z) is +// * the reduction polynomial of this. +// * @param a The polynomial a(z) to be multiplied by +// * z mod f(z). +// * @return z * a(z) mod f(z) +// */ +// private BigInteger multZModF(final BigInteger a) +// { +// // Left-shift of a(z) +// BigInteger az = a.shiftLeft(1); +// if (az.testBit(this.m)) +// { +// // If the coefficient of z^m in a(z) equals 1, reduction +// // modulo f(z) is performed: Add f(z) to to a(z): +// // Step 1: Unset mth coeffient of a(z) +// az = az.clearBit(this.m); +// +// // Step 2: Add r(z) to a(z), where r(z) is defined as +// // f(z) = z^m + r(z), and k1, k2, k3 are the positions of +// // the non-zero coefficients in r(z) +// az = az.flipBit(0); +// az = az.flipBit(this.k1); +// if (this.representation == PPB) +// { +// az = az.flipBit(this.k2); +// az = az.flipBit(this.k3); +// } +// } +// return az; +// } +// +// public ECFieldElement add(final ECFieldElement b) +// { +// // No check performed here for performance reasons. Instead the +// // elements involved are checked in ECPoint.F2m +// // checkFieldElements(this, b); +// if (b.toBigInteger().signum() == 0) +// { +// return this; +// } +// +// return new F2m(this.m, this.k1, this.k2, this.k3, this.x.xor(b.toBigInteger())); +// } +// +// public ECFieldElement subtract(final ECFieldElement b) +// { +// // Addition and subtraction are the same in F2m +// return add(b); +// } +// +// +// public ECFieldElement multiply(final ECFieldElement b) +// { +// // Left-to-right shift-and-add field multiplication in F2m +// // Input: Binary polynomials a(z) and b(z) of degree at most m-1 +// // Output: c(z) = a(z) * b(z) mod f(z) +// +// // No check performed here for performance reasons. Instead the +// // elements involved are checked in ECPoint.F2m +// // checkFieldElements(this, b); +// final BigInteger az = this.x; +// BigInteger bz = b.toBigInteger(); +// BigInteger cz; +// +// // Compute c(z) = a(z) * b(z) mod f(z) +// if (az.testBit(0)) +// { +// cz = bz; +// } +// else +// { +// cz = ECConstants.ZERO; +// } +// +// for (int i = 1; i < this.m; i++) +// { +// // b(z) := z * b(z) mod f(z) +// bz = multZModF(bz); +// +// if (az.testBit(i)) +// { +// // If the coefficient of x^i in a(z) equals 1, b(z) is added +// // to c(z) +// cz = cz.xor(bz); +// } +// } +// return new ECFieldElement.F2m(m, this.k1, this.k2, this.k3, cz); +// } +// +// +// public ECFieldElement divide(final ECFieldElement b) +// { +// // There may be more efficient implementations +// ECFieldElement bInv = b.invert(); +// return multiply(bInv); +// } +// +// public ECFieldElement negate() +// { +// // -x == x holds for all x in F2m +// return this; +// } +// +// public ECFieldElement square() +// { +// // Naive implementation, can probably be speeded up using modular +// // reduction +// return multiply(this); +// } +// +// public ECFieldElement invert() +// { +// // Inversion in F2m using the extended Euclidean algorithm +// // Input: A nonzero polynomial a(z) of degree at most m-1 +// // Output: a(z)^(-1) mod f(z) +// +// // u(z) := a(z) +// BigInteger uz = this.x; +// if (uz.signum() <= 0) +// { +// throw new ArithmeticException("x is zero or negative, " + +// "inversion is impossible"); +// } +// +// // v(z) := f(z) +// BigInteger vz = ECConstants.ZERO.setBit(m); +// vz = vz.setBit(0); +// vz = vz.setBit(this.k1); +// if (this.representation == PPB) +// { +// vz = vz.setBit(this.k2); +// vz = vz.setBit(this.k3); +// } +// +// // g1(z) := 1, g2(z) := 0 +// BigInteger g1z = ECConstants.ONE; +// BigInteger g2z = ECConstants.ZERO; +// +// // while u != 1 +// while (!(uz.equals(ECConstants.ZERO))) +// { +// // j := deg(u(z)) - deg(v(z)) +// int j = uz.bitLength() - vz.bitLength(); +// +// // If j < 0 then: u(z) <-> v(z), g1(z) <-> g2(z), j := -j +// if (j < 0) +// { +// final BigInteger uzCopy = uz; +// uz = vz; +// vz = uzCopy; +// +// final BigInteger g1zCopy = g1z; +// g1z = g2z; +// g2z = g1zCopy; +// +// j = -j; +// } +// +// // u(z) := u(z) + z^j * v(z) +// // Note, that no reduction modulo f(z) is required, because +// // deg(u(z) + z^j * v(z)) <= max(deg(u(z)), j + deg(v(z))) +// // = max(deg(u(z)), deg(u(z)) - deg(v(z)) + deg(v(z)) +// // = deg(u(z)) +// uz = uz.xor(vz.shiftLeft(j)); +// +// // g1(z) := g1(z) + z^j * g2(z) +// g1z = g1z.xor(g2z.shiftLeft(j)); +//// if (g1z.bitLength() > this.m) { +//// throw new ArithmeticException( +//// "deg(g1z) >= m, g1z = " + g1z.toString(2)); +//// } +// } +// return new ECFieldElement.F2m( +// this.m, this.k1, this.k2, this.k3, g2z); +// } +// +// public ECFieldElement sqrt() +// { +// throw new RuntimeException("Not implemented"); +// } +// +// /** +// * @return the representation of the field +// * F2m, either of +// * TPB (trinomial +// * basis representation) or +// * PPB (pentanomial +// * basis representation). +// */ +// public int getRepresentation() +// { +// return this.representation; +// } +// +// /** +// * @return the degree m of the reduction polynomial +// * f(z). +// */ +// public int getM() +// { +// return this.m; +// } +// +// /** +// * @return TPB: The integer k where xm + +// * xk + 1 represents the reduction polynomial +// * f(z).
        +// * PPB: The integer k1 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z).
        +// */ +// public int getK1() +// { +// return this.k1; +// } +// +// /** +// * @return TPB: Always returns 0
        +// * PPB: The integer k2 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z).
        +// */ +// public int getK2() +// { +// return this.k2; +// } +// +// /** +// * @return TPB: Always set to 0
        +// * PPB: The integer k3 where xm + +// * xk3 + xk2 + xk1 + 1 +// * represents the reduction polynomial f(z).
        +// */ +// public int getK3() +// { +// return this.k3; +// } +// +// public boolean equals(Object anObject) +// { +// if (anObject == this) +// { +// return true; +// } +// +// if (!(anObject instanceof ECFieldElement.F2m)) +// { +// return false; +// } +// +// ECFieldElement.F2m b = (ECFieldElement.F2m)anObject; +// +// return ((this.m == b.m) && (this.k1 == b.k1) && (this.k2 == b.k2) +// && (this.k3 == b.k3) +// && (this.representation == b.representation) +// && (this.x.equals(b.x))); +// } +// +// public int hashCode() +// { +// return x.hashCode() ^ m ^ k1 ^ k2 ^ k3; +// } +// } + + /** + * Class representing the Elements of the finite field + * F2m in polynomial basis (PB) + * representation. Both trinomial (TPB) and pentanomial (PPB) polynomial + * basis representations are supported. Gaussian normal basis (GNB) + * representation is not supported. + */ + public static class F2m extends ECFieldElement + { + /** + * Indicates gaussian normal basis representation (GNB). Number chosen + * according to X9.62. GNB is not implemented at present. + */ + public static final int GNB = 1; + + /** + * Indicates trinomial basis representation (TPB). Number chosen + * according to X9.62. + */ + public static final int TPB = 2; + + /** + * Indicates pentanomial basis representation (PPB). Number chosen + * according to X9.62. + */ + public static final int PPB = 3; + + /** + * TPB or PPB. + */ + private int representation; + + /** + * The exponent m of F2m. + */ + private int m; + + /** + * TPB: The integer k where xm + + * xk + 1 represents the reduction polynomial + * f(z).
        + * PPB: The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + private int k1; + + /** + * TPB: Always set to 0
        + * PPB: The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + private int k2; + + /** + * TPB: Always set to 0
        + * PPB: The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + private int k3; + + /** + * The IntArray holding the bits. + */ + private IntArray x; + + /** + * The number of ints required to hold m bits. + */ + private int t; + + /** + * Constructor for PPB. + * @param m The exponent m of + * F2m. + * @param k1 The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k2 The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param k3 The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z). + * @param x The BigInteger representing the value of the field element. + */ + public F2m( + int m, + int k1, + int k2, + int k3, + BigInteger x) + { + // t = m / 32 rounded up to the next integer + t = (m + 31) >> 5; + this.x = new IntArray(x, t); + + if ((k2 == 0) && (k3 == 0)) + { + this.representation = TPB; + } + else + { + if (k2 >= k3) + { + throw new IllegalArgumentException( + "k2 must be smaller than k3"); + } + if (k2 <= 0) + { + throw new IllegalArgumentException( + "k2 must be larger than 0"); + } + this.representation = PPB; + } + + if (x.signum() < 0) + { + throw new IllegalArgumentException("x value cannot be negative"); + } + + this.m = m; + this.k1 = k1; + this.k2 = k2; + this.k3 = k3; + } + + /** + * Constructor for TPB. + * @param m The exponent m of + * F2m. + * @param k The integer k where xm + + * xk + 1 represents the reduction + * polynomial f(z). + * @param x The BigInteger representing the value of the field element. + */ + public F2m(int m, int k, BigInteger x) + { + // Set k1 to k, and set k2 and k3 to 0 + this(m, k, 0, 0, x); + } + + private F2m(int m, int k1, int k2, int k3, IntArray x) + { + t = (m + 31) >> 5; + this.x = x; + this.m = m; + this.k1 = k1; + this.k2 = k2; + this.k3 = k3; + + if ((k2 == 0) && (k3 == 0)) + { + this.representation = TPB; + } + else + { + this.representation = PPB; + } + + } + + public BigInteger toBigInteger() + { + return x.toBigInteger(); + } + + public String getFieldName() + { + return "F2m"; + } + + public int getFieldSize() + { + return m; + } + + /** + * Checks, if the ECFieldElements a and b + * are elements of the same field F2m + * (having the same representation). + * @param a field element. + * @param b field element to be compared. + * @throws IllegalArgumentException if a and b + * are not elements of the same field + * F2m (having the same + * representation). + */ + public static void checkFieldElements( + ECFieldElement a, + ECFieldElement b) + { + if ((!(a instanceof F2m)) || (!(b instanceof F2m))) + { + throw new IllegalArgumentException("Field elements are not " + + "both instances of ECFieldElement.F2m"); + } + + ECFieldElement.F2m aF2m = (ECFieldElement.F2m)a; + ECFieldElement.F2m bF2m = (ECFieldElement.F2m)b; + + if ((aF2m.m != bF2m.m) || (aF2m.k1 != bF2m.k1) + || (aF2m.k2 != bF2m.k2) || (aF2m.k3 != bF2m.k3)) + { + throw new IllegalArgumentException("Field elements are not " + + "elements of the same field F2m"); + } + + if (aF2m.representation != bF2m.representation) + { + // Should never occur + throw new IllegalArgumentException( + "One of the field " + + "elements are not elements has incorrect representation"); + } + } + + public ECFieldElement add(final ECFieldElement b) + { + // No check performed here for performance reasons. Instead the + // elements involved are checked in ECPoint.F2m + // checkFieldElements(this, b); + IntArray iarrClone = (IntArray)this.x.clone(); + F2m bF2m = (F2m)b; + iarrClone.addShifted(bF2m.x, 0); + return new F2m(m, k1, k2, k3, iarrClone); + } + + public ECFieldElement subtract(final ECFieldElement b) + { + // Addition and subtraction are the same in F2m + return add(b); + } + + public ECFieldElement multiply(final ECFieldElement b) + { + // Right-to-left comb multiplication in the IntArray + // Input: Binary polynomials a(z) and b(z) of degree at most m-1 + // Output: c(z) = a(z) * b(z) mod f(z) + + // No check performed here for performance reasons. Instead the + // elements involved are checked in ECPoint.F2m + // checkFieldElements(this, b); + F2m bF2m = (F2m)b; + IntArray mult = x.multiply(bF2m.x, m); + mult.reduce(m, new int[]{k1, k2, k3}); + return new F2m(m, k1, k2, k3, mult); + } + + public ECFieldElement divide(final ECFieldElement b) + { + // There may be more efficient implementations + ECFieldElement bInv = b.invert(); + return multiply(bInv); + } + + public ECFieldElement negate() + { + // -x == x holds for all x in F2m + return this; + } + + public ECFieldElement square() + { + IntArray squared = x.square(m); + squared.reduce(m, new int[]{k1, k2, k3}); + return new F2m(m, k1, k2, k3, squared); + } + + + public ECFieldElement invert() + { + // Inversion in F2m using the extended Euclidean algorithm + // Input: A nonzero polynomial a(z) of degree at most m-1 + // Output: a(z)^(-1) mod f(z) + + // u(z) := a(z) + IntArray uz = (IntArray)this.x.clone(); + + // v(z) := f(z) + IntArray vz = new IntArray(t); + vz.setBit(m); + vz.setBit(0); + vz.setBit(this.k1); + if (this.representation == PPB) + { + vz.setBit(this.k2); + vz.setBit(this.k3); + } + + // g1(z) := 1, g2(z) := 0 + IntArray g1z = new IntArray(t); + g1z.setBit(0); + IntArray g2z = new IntArray(t); + + // while u != 0 + while (!uz.isZero()) +// while (uz.getUsedLength() > 0) +// while (uz.bitLength() > 1) + { + // j := deg(u(z)) - deg(v(z)) + int j = uz.bitLength() - vz.bitLength(); + + // If j < 0 then: u(z) <-> v(z), g1(z) <-> g2(z), j := -j + if (j < 0) + { + final IntArray uzCopy = uz; + uz = vz; + vz = uzCopy; + + final IntArray g1zCopy = g1z; + g1z = g2z; + g2z = g1zCopy; + + j = -j; + } + + // u(z) := u(z) + z^j * v(z) + // Note, that no reduction modulo f(z) is required, because + // deg(u(z) + z^j * v(z)) <= max(deg(u(z)), j + deg(v(z))) + // = max(deg(u(z)), deg(u(z)) - deg(v(z)) + deg(v(z)) + // = deg(u(z)) + // uz = uz.xor(vz.shiftLeft(j)); + // jInt = n / 32 + int jInt = j >> 5; + // jInt = n % 32 + int jBit = j & 0x1F; + IntArray vzShift = vz.shiftLeft(jBit); + uz.addShifted(vzShift, jInt); + + // g1(z) := g1(z) + z^j * g2(z) +// g1z = g1z.xor(g2z.shiftLeft(j)); + IntArray g2zShift = g2z.shiftLeft(jBit); + g1z.addShifted(g2zShift, jInt); + + } + return new ECFieldElement.F2m( + this.m, this.k1, this.k2, this.k3, g2z); + } + + public ECFieldElement sqrt() + { + throw new RuntimeException("Not implemented"); + } + + /** + * @return the representation of the field + * F2m, either of + * TPB (trinomial + * basis representation) or + * PPB (pentanomial + * basis representation). + */ + public int getRepresentation() + { + return this.representation; + } + + /** + * @return the degree m of the reduction polynomial + * f(z). + */ + public int getM() + { + return this.m; + } + + /** + * @return TPB: The integer k where xm + + * xk + 1 represents the reduction polynomial + * f(z).
        + * PPB: The integer k1 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + public int getK1() + { + return this.k1; + } + + /** + * @return TPB: Always returns 0
        + * PPB: The integer k2 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + public int getK2() + { + return this.k2; + } + + /** + * @return TPB: Always set to 0
        + * PPB: The integer k3 where xm + + * xk3 + xk2 + xk1 + 1 + * represents the reduction polynomial f(z).
        + */ + public int getK3() + { + return this.k3; + } + + public boolean equals(Object anObject) + { + if (anObject == this) + { + return true; + } + + if (!(anObject instanceof ECFieldElement.F2m)) + { + return false; + } + + ECFieldElement.F2m b = (ECFieldElement.F2m)anObject; + + return ((this.m == b.m) && (this.k1 == b.k1) && (this.k2 == b.k2) + && (this.k3 == b.k3) + && (this.representation == b.representation) + && (this.x.equals(b.x))); + } + + public int hashCode() + { + return x.hashCode() ^ m ^ k1 ^ k2 ^ k3; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ECMultiplier.java b/common/src/main/java/org/bouncycastle/math/ec/ECMultiplier.java new file mode 100644 index 0000000..326b96e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ECMultiplier.java @@ -0,0 +1,19 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +/** + * Interface for classes encapsulating a point multiplication algorithm + * for ECPoints. + */ +interface ECMultiplier +{ + /** + * Multiplies the ECPoint p by k, i.e. + * p is added k times to itself. + * @param p The ECPoint to be multiplied. + * @param k The factor by which p i multiplied. + * @return p multiplied by k. + */ + ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo); +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ECPoint.java b/common/src/main/java/org/bouncycastle/math/ec/ECPoint.java new file mode 100644 index 0000000..390b7b2 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ECPoint.java @@ -0,0 +1,588 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +import org.bouncycastle.asn1.x9.X9IntegerConverter; + +/** + * base class for points on elliptic curves. + */ +public abstract class ECPoint +{ + ECCurve curve; + ECFieldElement x; + ECFieldElement y; + + protected boolean withCompression; + + protected ECMultiplier multiplier = null; + + protected PreCompInfo preCompInfo = null; + + private static X9IntegerConverter converter = new X9IntegerConverter(); + + protected ECPoint(ECCurve curve, ECFieldElement x, ECFieldElement y) + { + this.curve = curve; + this.x = x; + this.y = y; + } + + public ECCurve getCurve() + { + return curve; + } + + public ECFieldElement getX() + { + return x; + } + + public ECFieldElement getY() + { + return y; + } + + public boolean isInfinity() + { + return x == null && y == null; + } + + public boolean isCompressed() + { + return withCompression; + } + + public boolean equals( + Object other) + { + if (other == this) + { + return true; + } + + if (!(other instanceof ECPoint)) + { + return false; + } + + ECPoint o = (ECPoint)other; + + if (this.isInfinity()) + { + return o.isInfinity(); + } + + return x.equals(o.x) && y.equals(o.y); + } + + public int hashCode() + { + if (this.isInfinity()) + { + return 0; + } + + return x.hashCode() ^ y.hashCode(); + } + +// /** +// * Mainly for testing. Explicitly set the ECMultiplier. +// * @param multiplier The ECMultiplier to be used to multiply +// * this ECPoint. +// */ +// public void setECMultiplier(ECMultiplier multiplier) +// { +// this.multiplier = multiplier; +// } + + /** + * Sets the PreCompInfo. Used by ECMultipliers + * to save the precomputation for this ECPoint to store the + * precomputation result for use by subsequent multiplication. + * @param preCompInfo The values precomputed by the + * ECMultiplier. + */ + void setPreCompInfo(PreCompInfo preCompInfo) + { + this.preCompInfo = preCompInfo; + } + + public abstract byte[] getEncoded(); + + public abstract ECPoint add(ECPoint b); + public abstract ECPoint subtract(ECPoint b); + public abstract ECPoint negate(); + public abstract ECPoint twice(); + + /** + * Sets the default ECMultiplier, unless already set. + */ + synchronized void assertECMultiplier() + { + if (this.multiplier == null) + { + this.multiplier = new FpNafMultiplier(); + } + } + + /** + * Multiplies this ECPoint by the given number. + * @param k The multiplicator. + * @return k * this. + */ + public ECPoint multiply(BigInteger k) + { + if (k.signum() < 0) + { + throw new IllegalArgumentException("The multiplicator cannot be negative"); + } + + if (this.isInfinity()) + { + return this; + } + + if (k.signum() == 0) + { + return this.curve.getInfinity(); + } + + assertECMultiplier(); + return this.multiplier.multiply(this, k, preCompInfo); + } + + /** + * Elliptic curve points over Fp + */ + public static class Fp extends ECPoint + { + + /** + * Create a point which encodes with point compression. + * + * @param curve the curve to use + * @param x affine x co-ordinate + * @param y affine y co-ordinate + */ + public Fp(ECCurve curve, ECFieldElement x, ECFieldElement y) + { + this(curve, x, y, false); + } + + /** + * Create a point that encodes with or without point compresion. + * + * @param curve the curve to use + * @param x affine x co-ordinate + * @param y affine y co-ordinate + * @param withCompression if true encode with point compression + */ + public Fp(ECCurve curve, ECFieldElement x, ECFieldElement y, boolean withCompression) + { + super(curve, x, y); + + if ((x != null && y == null) || (x == null && y != null)) + { + throw new IllegalArgumentException("Exactly one of the field elements is null"); + } + + this.withCompression = withCompression; + } + + /** + * return the field element encoded with point compression. (S 4.3.6) + */ + public byte[] getEncoded() + { + if (this.isInfinity()) + { + return new byte[1]; + } + + int qLength = converter.getByteLength(x); + + if (withCompression) + { + byte PC; + + if (this.getY().toBigInteger().testBit(0)) + { + PC = 0x03; + } + else + { + PC = 0x02; + } + + byte[] X = converter.integerToBytes(this.getX().toBigInteger(), qLength); + byte[] PO = new byte[X.length + 1]; + + PO[0] = PC; + System.arraycopy(X, 0, PO, 1, X.length); + + return PO; + } + else + { + byte[] X = converter.integerToBytes(this.getX().toBigInteger(), qLength); + byte[] Y = converter.integerToBytes(this.getY().toBigInteger(), qLength); + byte[] PO = new byte[X.length + Y.length + 1]; + + PO[0] = 0x04; + System.arraycopy(X, 0, PO, 1, X.length); + System.arraycopy(Y, 0, PO, X.length + 1, Y.length); + + return PO; + } + } + + // B.3 pg 62 + public ECPoint add(ECPoint b) + { + if (this.isInfinity()) + { + return b; + } + + if (b.isInfinity()) + { + return this; + } + + // Check if b = this or b = -this + if (this.x.equals(b.x)) + { + if (this.y.equals(b.y)) + { + // this = b, i.e. this must be doubled + return this.twice(); + } + + // this = -b, i.e. the result is the point at infinity + return this.curve.getInfinity(); + } + + ECFieldElement gamma = b.y.subtract(this.y).divide(b.x.subtract(this.x)); + + ECFieldElement x3 = gamma.square().subtract(this.x).subtract(b.x); + ECFieldElement y3 = gamma.multiply(this.x.subtract(x3)).subtract(this.y); + + return new ECPoint.Fp(curve, x3, y3); + } + + // B.3 pg 62 + public ECPoint twice() + { + if (this.isInfinity()) + { + // Twice identity element (point at infinity) is identity + return this; + } + + if (this.y.toBigInteger().signum() == 0) + { + // if y1 == 0, then (x1, y1) == (x1, -y1) + // and hence this = -this and thus 2(x1, y1) == infinity + return this.curve.getInfinity(); + } + + ECFieldElement TWO = this.curve.fromBigInteger(BigInteger.valueOf(2)); + ECFieldElement THREE = this.curve.fromBigInteger(BigInteger.valueOf(3)); + ECFieldElement gamma = this.x.square().multiply(THREE).add(curve.a).divide(y.multiply(TWO)); + + ECFieldElement x3 = gamma.square().subtract(this.x.multiply(TWO)); + ECFieldElement y3 = gamma.multiply(this.x.subtract(x3)).subtract(this.y); + + return new ECPoint.Fp(curve, x3, y3, this.withCompression); + } + + // D.3.2 pg 102 (see Note:) + public ECPoint subtract(ECPoint b) + { + if (b.isInfinity()) + { + return this; + } + + // Add -b + return add(b.negate()); + } + + public ECPoint negate() + { + return new ECPoint.Fp(curve, this.x, this.y.negate(), this.withCompression); + } + + /** + * Sets the default ECMultiplier, unless already set. + */ + synchronized void assertECMultiplier() + { + if (this.multiplier == null) + { + this.multiplier = new WNafMultiplier(); + } + } + } + + /** + * Elliptic curve points over F2m + */ + public static class F2m extends ECPoint + { + /** + * @param curve base curve + * @param x x point + * @param y y point + */ + public F2m(ECCurve curve, ECFieldElement x, ECFieldElement y) + { + this(curve, x, y, false); + } + + /** + * @param curve base curve + * @param x x point + * @param y y point + * @param withCompression true if encode with point compression. + */ + public F2m(ECCurve curve, ECFieldElement x, ECFieldElement y, boolean withCompression) + { + super(curve, x, y); + + if ((x != null && y == null) || (x == null && y != null)) + { + throw new IllegalArgumentException("Exactly one of the field elements is null"); + } + + if (x != null) + { + // Check if x and y are elements of the same field + ECFieldElement.F2m.checkFieldElements(this.x, this.y); + + // Check if x and a are elements of the same field + if (curve != null) + { + ECFieldElement.F2m.checkFieldElements(this.x, this.curve.getA()); + } + } + + this.withCompression = withCompression; + } + + /* (non-Javadoc) + * @see org.bouncycastle.math.ec.ECPoint#getEncoded() + */ + public byte[] getEncoded() + { + if (this.isInfinity()) + { + return new byte[1]; + } + + int byteCount = converter.getByteLength(this.x); + byte[] X = converter.integerToBytes(this.getX().toBigInteger(), byteCount); + byte[] PO; + + if (withCompression) + { + // See X9.62 4.3.6 and 4.2.2 + PO = new byte[byteCount + 1]; + + PO[0] = 0x02; + // X9.62 4.2.2 and 4.3.6: + // if x = 0 then ypTilde := 0, else ypTilde is the rightmost + // bit of y * x^(-1) + // if ypTilde = 0, then PC := 02, else PC := 03 + // Note: PC === PO[0] + if (!(this.getX().toBigInteger().equals(ECConstants.ZERO))) + { + if (this.getY().multiply(this.getX().invert()) + .toBigInteger().testBit(0)) + { + // ypTilde = 1, hence PC = 03 + PO[0] = 0x03; + } + } + + System.arraycopy(X, 0, PO, 1, byteCount); + } + else + { + byte[] Y = converter.integerToBytes(this.getY().toBigInteger(), byteCount); + + PO = new byte[byteCount + byteCount + 1]; + + PO[0] = 0x04; + System.arraycopy(X, 0, PO, 1, byteCount); + System.arraycopy(Y, 0, PO, byteCount + 1, byteCount); + } + + return PO; + } + + /** + * Check, if two ECPoints can be added or subtracted. + * @param a The first ECPoint to check. + * @param b The second ECPoint to check. + * @throws IllegalArgumentException if a and b + * cannot be added. + */ + private static void checkPoints(ECPoint a, ECPoint b) + { + // Check, if points are on the same curve + if (!(a.curve.equals(b.curve))) + { + throw new IllegalArgumentException("Only points on the same " + + "curve can be added or subtracted"); + } + +// ECFieldElement.F2m.checkFieldElements(a.x, b.x); + } + + /* (non-Javadoc) + * @see org.bouncycastle.math.ec.ECPoint#add(org.bouncycastle.math.ec.ECPoint) + */ + public ECPoint add(ECPoint b) + { + checkPoints(this, b); + return addSimple((ECPoint.F2m)b); + } + + /** + * Adds another ECPoints.F2m to this without + * checking if both points are on the same curve. Used by multiplication + * algorithms, because there all points are a multiple of the same point + * and hence the checks can be omitted. + * @param b The other ECPoints.F2m to add to + * this. + * @return this + b + */ + public ECPoint.F2m addSimple(ECPoint.F2m b) + { + ECPoint.F2m other = b; + if (this.isInfinity()) + { + return other; + } + + if (other.isInfinity()) + { + return this; + } + + ECFieldElement.F2m x2 = (ECFieldElement.F2m)other.getX(); + ECFieldElement.F2m y2 = (ECFieldElement.F2m)other.getY(); + + // Check if other = this or other = -this + if (this.x.equals(x2)) + { + if (this.y.equals(y2)) + { + // this = other, i.e. this must be doubled + return (ECPoint.F2m)this.twice(); + } + + // this = -other, i.e. the result is the point at infinity + return (ECPoint.F2m)this.curve.getInfinity(); + } + + ECFieldElement.F2m lambda + = (ECFieldElement.F2m)(this.y.add(y2)).divide(this.x.add(x2)); + + ECFieldElement.F2m x3 + = (ECFieldElement.F2m)lambda.square().add(lambda).add(this.x).add(x2).add(this.curve.getA()); + + ECFieldElement.F2m y3 + = (ECFieldElement.F2m)lambda.multiply(this.x.add(x3)).add(x3).add(this.y); + + return new ECPoint.F2m(curve, x3, y3, withCompression); + } + + /* (non-Javadoc) + * @see org.bouncycastle.math.ec.ECPoint#subtract(org.bouncycastle.math.ec.ECPoint) + */ + public ECPoint subtract(ECPoint b) + { + checkPoints(this, b); + return subtractSimple((ECPoint.F2m)b); + } + + /** + * Subtracts another ECPoints.F2m from this + * without checking if both points are on the same curve. Used by + * multiplication algorithms, because there all points are a multiple + * of the same point and hence the checks can be omitted. + * @param b The other ECPoints.F2m to subtract from + * this. + * @return this - b + */ + public ECPoint.F2m subtractSimple(ECPoint.F2m b) + { + if (b.isInfinity()) + { + return this; + } + + // Add -b + return addSimple((ECPoint.F2m)b.negate()); + } + + /* (non-Javadoc) + * @see org.bouncycastle.math.ec.ECPoint#twice() + */ + public ECPoint twice() + { + if (this.isInfinity()) + { + // Twice identity element (point at infinity) is identity + return this; + } + + if (this.x.toBigInteger().signum() == 0) + { + // if x1 == 0, then (x1, y1) == (x1, x1 + y1) + // and hence this = -this and thus 2(x1, y1) == infinity + return this.curve.getInfinity(); + } + + ECFieldElement.F2m lambda + = (ECFieldElement.F2m)this.x.add(this.y.divide(this.x)); + + ECFieldElement.F2m x3 + = (ECFieldElement.F2m)lambda.square().add(lambda). + add(this.curve.getA()); + + ECFieldElement ONE = this.curve.fromBigInteger(ECConstants.ONE); + ECFieldElement.F2m y3 + = (ECFieldElement.F2m)this.x.square().add( + x3.multiply(lambda.add(ONE))); + + return new ECPoint.F2m(this.curve, x3, y3, withCompression); + } + + public ECPoint negate() + { + return new ECPoint.F2m(curve, this.getX(), this.getY().add(this.getX()), withCompression); + } + + /** + * Sets the appropriate ECMultiplier, unless already set. + */ + synchronized void assertECMultiplier() + { + if (this.multiplier == null) + { + if (((ECCurve.F2m)this.curve).isKoblitz()) + { + this.multiplier = new WTauNafMultiplier(); + } + else + { + this.multiplier = new WNafMultiplier(); + } + } + } + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/FpNafMultiplier.java b/common/src/main/java/org/bouncycastle/math/ec/FpNafMultiplier.java new file mode 100644 index 0000000..a3973de --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/FpNafMultiplier.java @@ -0,0 +1,39 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +/** + * Class implementing the NAF (Non-Adjacent Form) multiplication algorithm. + */ +class FpNafMultiplier implements ECMultiplier +{ + /** + * D.3.2 pg 101 + * @see org.bouncycastle.math.ec.ECMultiplier#multiply(org.bouncycastle.math.ec.ECPoint, java.math.BigInteger) + */ + public ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo) + { + // TODO Probably should try to add this + // BigInteger e = k.mod(n); // n == order of p + BigInteger e = k; + BigInteger h = e.multiply(BigInteger.valueOf(3)); + + ECPoint neg = p.negate(); + ECPoint R = p; + + for (int i = h.bitLength() - 2; i > 0; --i) + { + R = R.twice(); + + boolean hBit = h.testBit(i); + boolean eBit = e.testBit(i); + + if (hBit != eBit) + { + R = R.add(hBit ? p : neg); + } + } + + return R; + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/IntArray.java b/common/src/main/java/org/bouncycastle/math/ec/IntArray.java new file mode 100644 index 0000000..02d1568 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/IntArray.java @@ -0,0 +1,518 @@ +package org.bouncycastle.math.ec; + +import org.bouncycastle.util.Arrays; + +import javabc.BigInteger; + +class IntArray +{ + // TODO make m fixed for the IntArray, and hence compute T once and for all + + private int[] m_ints; + + public IntArray(int intLen) + { + m_ints = new int[intLen]; + } + + public IntArray(int[] ints) + { + m_ints = ints; + } + + public IntArray(BigInteger bigInt) + { + this(bigInt, 0); + } + + public IntArray(BigInteger bigInt, int minIntLen) + { + if (bigInt.signum() == -1) + { + throw new IllegalArgumentException("Only positive Integers allowed"); + } + if (bigInt.equals(ECConstants.ZERO)) + { + m_ints = new int[] { 0 }; + return; + } + + byte[] barr = bigInt.toByteArray(); + int barrLen = barr.length; + int barrStart = 0; + if (barr[0] == 0) + { + // First byte is 0 to enforce highest (=sign) bit is zero. + // In this case ignore barr[0]. + barrLen--; + barrStart = 1; + } + int intLen = (barrLen + 3) / 4; + if (intLen < minIntLen) + { + m_ints = new int[minIntLen]; + } + else + { + m_ints = new int[intLen]; + } + + int iarrJ = intLen - 1; + int rem = barrLen % 4 + barrStart; + int temp = 0; + int barrI = barrStart; + if (barrStart < rem) + { + for (; barrI < rem; barrI++) + { + temp <<= 8; + int barrBarrI = barr[barrI]; + if (barrBarrI < 0) + { + barrBarrI += 256; + } + temp |= barrBarrI; + } + m_ints[iarrJ--] = temp; + } + + for (; iarrJ >= 0; iarrJ--) + { + temp = 0; + for (int i = 0; i < 4; i++) + { + temp <<= 8; + int barrBarrI = barr[barrI++]; + if (barrBarrI < 0) + { + barrBarrI += 256; + } + temp |= barrBarrI; + } + m_ints[iarrJ] = temp; + } + } + + public boolean isZero() + { + return m_ints.length == 0 + || (m_ints[0] == 0 && getUsedLength() == 0); + } + + public int getUsedLength() + { + int highestIntPos = m_ints.length; + + if (highestIntPos < 1) + { + return 0; + } + + // Check if first element will act as sentinel + if (m_ints[0] != 0) + { + while (m_ints[--highestIntPos] == 0) + { + } + return highestIntPos + 1; + } + + do + { + if (m_ints[--highestIntPos] != 0) + { + return highestIntPos + 1; + } + } + while (highestIntPos > 0); + + return 0; + } + + public int bitLength() + { + // JDK 1.5: see Integer.numberOfLeadingZeros() + int intLen = getUsedLength(); + if (intLen == 0) + { + return 0; + } + + int last = intLen - 1; + int highest = m_ints[last]; + int bits = (last << 5) + 1; + + // A couple of binary search steps + if ((highest & 0xffff0000) != 0) + { + if ((highest & 0xff000000) != 0) + { + bits += 24; + highest >>>= 24; + } + else + { + bits += 16; + highest >>>= 16; + } + } + else if (highest > 0x000000ff) + { + bits += 8; + highest >>>= 8; + } + + while (highest != 1) + { + ++bits; + highest >>>= 1; + } + + return bits; + } + + private int[] resizedInts(int newLen) + { + int[] newInts = new int[newLen]; + int oldLen = m_ints.length; + int copyLen = oldLen < newLen ? oldLen : newLen; + System.arraycopy(m_ints, 0, newInts, 0, copyLen); + return newInts; + } + + public BigInteger toBigInteger() + { + int usedLen = getUsedLength(); + if (usedLen == 0) + { + return ECConstants.ZERO; + } + + int highestInt = m_ints[usedLen - 1]; + byte[] temp = new byte[4]; + int barrI = 0; + boolean trailingZeroBytesDone = false; + for (int j = 3; j >= 0; j--) + { + byte thisByte = (byte) (highestInt >>> (8 * j)); + if (trailingZeroBytesDone || (thisByte != 0)) + { + trailingZeroBytesDone = true; + temp[barrI++] = thisByte; + } + } + + int barrLen = 4 * (usedLen - 1) + barrI; + byte[] barr = new byte[barrLen]; + for (int j = 0; j < barrI; j++) + { + barr[j] = temp[j]; + } + // Highest value int is done now + + for (int iarrJ = usedLen - 2; iarrJ >= 0; iarrJ--) + { + for (int j = 3; j >= 0; j--) + { + barr[barrI++] = (byte) (m_ints[iarrJ] >>> (8 * j)); + } + } + return new BigInteger(1, barr); + } + + public void shiftLeft() + { + int usedLen = getUsedLength(); + if (usedLen == 0) + { + return; + } + if (m_ints[usedLen - 1] < 0) + { + // highest bit of highest used byte is set, so shifting left will + // make the IntArray one byte longer + usedLen++; + if (usedLen > m_ints.length) + { + // make the m_ints one byte longer, because we need one more + // byte which is not available in m_ints + m_ints = resizedInts(m_ints.length + 1); + } + } + + boolean carry = false; + for (int i = 0; i < usedLen; i++) + { + // nextCarry is true if highest bit is set + boolean nextCarry = m_ints[i] < 0; + m_ints[i] <<= 1; + if (carry) + { + // set lowest bit + m_ints[i] |= 1; + } + carry = nextCarry; + } + } + + public IntArray shiftLeft(int n) + { + int usedLen = getUsedLength(); + if (usedLen == 0) + { + return this; + } + + if (n == 0) + { + return this; + } + + if (n > 31) + { + throw new IllegalArgumentException("shiftLeft() for max 31 bits " + + ", " + n + "bit shift is not possible"); + } + + int[] newInts = new int[usedLen + 1]; + + int nm32 = 32 - n; + newInts[0] = m_ints[0] << n; + for (int i = 1; i < usedLen; i++) + { + newInts[i] = (m_ints[i] << n) | (m_ints[i - 1] >>> nm32); + } + newInts[usedLen] = m_ints[usedLen - 1] >>> nm32; + + return new IntArray(newInts); + } + + public void addShifted(IntArray other, int shift) + { + int usedLenOther = other.getUsedLength(); + int newMinUsedLen = usedLenOther + shift; + if (newMinUsedLen > m_ints.length) + { + m_ints = resizedInts(newMinUsedLen); + //System.out.println("Resize required"); + } + + for (int i = 0; i < usedLenOther; i++) + { + m_ints[i + shift] ^= other.m_ints[i]; + } + } + + public int getLength() + { + return m_ints.length; + } + + public boolean testBit(int n) + { + // theInt = n / 32 + int theInt = n >> 5; + // theBit = n % 32 + int theBit = n & 0x1F; + int tester = 1 << theBit; + return ((m_ints[theInt] & tester) != 0); + } + + public void flipBit(int n) + { + // theInt = n / 32 + int theInt = n >> 5; + // theBit = n % 32 + int theBit = n & 0x1F; + int flipper = 1 << theBit; + m_ints[theInt] ^= flipper; + } + + public void setBit(int n) + { + // theInt = n / 32 + int theInt = n >> 5; + // theBit = n % 32 + int theBit = n & 0x1F; + int setter = 1 << theBit; + m_ints[theInt] |= setter; + } + + public IntArray multiply(IntArray other, int m) + { + // Lenght of c is 2m bits rounded up to the next int (32 bit) + int t = (m + 31) >> 5; + if (m_ints.length < t) + { + m_ints = resizedInts(t); + } + + IntArray b = new IntArray(other.resizedInts(other.getLength() + 1)); + IntArray c = new IntArray((m + m + 31) >> 5); + // IntArray c = new IntArray(t + t); + int testBit = 1; + for (int k = 0; k < 32; k++) + { + for (int j = 0; j < t; j++) + { + if ((m_ints[j] & testBit) != 0) + { + // The kth bit of m_ints[j] is set + c.addShifted(b, j); + } + } + testBit <<= 1; + b.shiftLeft(); + } + return c; + } + + // public IntArray multiplyLeftToRight(IntArray other, int m) { + // // Lenght of c is 2m bits rounded up to the next int (32 bit) + // int t = (m + 31) / 32; + // if (m_ints.length < t) { + // m_ints = resizedInts(t); + // } + // + // IntArray b = new IntArray(other.resizedInts(other.getLength() + 1)); + // IntArray c = new IntArray((m + m + 31) / 32); + // // IntArray c = new IntArray(t + t); + // int testBit = 1 << 31; + // for (int k = 31; k >= 0; k--) { + // for (int j = 0; j < t; j++) { + // if ((m_ints[j] & testBit) != 0) { + // // The kth bit of m_ints[j] is set + // c.addShifted(b, j); + // } + // } + // testBit >>>= 1; + // if (k > 0) { + // c.shiftLeft(); + // } + // } + // return c; + // } + + // TODO note, redPol.length must be 3 for TPB and 5 for PPB + public void reduce(int m, int[] redPol) + { + for (int i = m + m - 2; i >= m; i--) + { + if (testBit(i)) + { + int bit = i - m; + flipBit(bit); + flipBit(i); + int l = redPol.length; + while (--l >= 0) + { + flipBit(redPol[l] + bit); + } + } + } + m_ints = resizedInts((m + 31) >> 5); + } + + public IntArray square(int m) + { + // TODO make the table static final + final int[] table = { 0x0, 0x1, 0x4, 0x5, 0x10, 0x11, 0x14, 0x15, 0x40, + 0x41, 0x44, 0x45, 0x50, 0x51, 0x54, 0x55 }; + + int t = (m + 31) >> 5; + if (m_ints.length < t) + { + m_ints = resizedInts(t); + } + + IntArray c = new IntArray(t + t); + + // TODO twice the same code, put in separate private method + for (int i = 0; i < t; i++) + { + int v0 = 0; + for (int j = 0; j < 4; j++) + { + v0 = v0 >>> 8; + int u = (m_ints[i] >>> (j * 4)) & 0xF; + int w = table[u] << 24; + v0 |= w; + } + c.m_ints[i + i] = v0; + + v0 = 0; + int upper = m_ints[i] >>> 16; + for (int j = 0; j < 4; j++) + { + v0 = v0 >>> 8; + int u = (upper >>> (j * 4)) & 0xF; + int w = table[u] << 24; + v0 |= w; + } + c.m_ints[i + i + 1] = v0; + } + return c; + } + + public boolean equals(Object o) + { + if (!(o instanceof IntArray)) + { + return false; + } + IntArray other = (IntArray) o; + int usedLen = getUsedLength(); + if (other.getUsedLength() != usedLen) + { + return false; + } + for (int i = 0; i < usedLen; i++) + { + if (m_ints[i] != other.m_ints[i]) + { + return false; + } + } + return true; + } + + public int hashCode() + { + int usedLen = getUsedLength(); + int hash = 1; + for (int i = 0; i < usedLen; i++) + { + hash = hash * 31 + m_ints[i]; + } + return hash; + } + + public Object clone() + { + return new IntArray(Arrays.clone(m_ints)); + } + + public String toString() + { + int usedLen = getUsedLength(); + if (usedLen == 0) + { + return "0"; + } + + StringBuffer sb = new StringBuffer(Integer + .toBinaryString(m_ints[usedLen - 1])); + for (int iarrJ = usedLen - 2; iarrJ >= 0; iarrJ--) + { + String hexString = Integer.toBinaryString(m_ints[iarrJ]); + + // Add leading zeroes, except for highest significant int + for (int i = hexString.length(); i < 8; i++) + { + hexString = "0" + hexString; + } + sb.append(hexString); + } + return sb.toString(); + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/PreCompInfo.java b/common/src/main/java/org/bouncycastle/math/ec/PreCompInfo.java new file mode 100644 index 0000000..804dcf7 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/PreCompInfo.java @@ -0,0 +1,10 @@ +package org.bouncycastle.math.ec; + +/** + * Interface for classes storing precomputation data for multiplication + * algorithms. Used as a Memento (see GOF patterns) for + * WNafMultiplier. + */ +interface PreCompInfo +{ +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ReferenceMultiplier.java b/common/src/main/java/org/bouncycastle/math/ec/ReferenceMultiplier.java new file mode 100644 index 0000000..e4f2728 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ReferenceMultiplier.java @@ -0,0 +1,30 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +class ReferenceMultiplier implements ECMultiplier +{ + /** + * Simple shift-and-add multiplication. Serves as reference implementation + * to verify (possibly faster) implementations in + * {@link org.bouncycastle.math.ec.ECPoint ECPoint}. + * + * @param p The point to multiply. + * @param k The factor by which to multiply. + * @return The result of the point multiplication k * p. + */ + public ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo) + { + ECPoint q = p.getCurve().getInfinity(); + int t = k.bitLength(); + for (int i = 0; i < t; i++) + { + if (k.testBit(i)) + { + q = q.add(p); + } + p = p.twice(); + } + return q; + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/SimpleBigDecimal.java b/common/src/main/java/org/bouncycastle/math/ec/SimpleBigDecimal.java new file mode 100644 index 0000000..929664b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/SimpleBigDecimal.java @@ -0,0 +1,253 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +/** + * Class representing a simple version of a big decimal. A + * SimpleBigDecimal is basically a + * {@link java.math.BigInteger BigInteger} with a few digits on the right of + * the decimal point. The number of (binary) digits on the right of the decimal + * point is called the scale of the SimpleBigDecimal. + * Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + * automatically, but must be set manually. All SimpleBigDecimals + * taking part in the same arithmetic operation must have equal scale. The + * result of a multiplication of two SimpleBigDecimals returns a + * SimpleBigDecimal with double scale. + */ +class SimpleBigDecimal + //extends Number // not in J2ME - add compatibility class? +{ + private static final long serialVersionUID = 1L; + + private final BigInteger bigInt; + private final int scale; + + /** + * Returns a SimpleBigDecimal representing the same numerical + * value as value. + * @param value The value of the SimpleBigDecimal to be + * created. + * @param scale The scale of the SimpleBigDecimal to be + * created. + * @return The such created SimpleBigDecimal. + */ + public static SimpleBigDecimal getInstance(BigInteger value, int scale) + { + return new SimpleBigDecimal(value.shiftLeft(scale), scale); + } + + /** + * Constructor for SimpleBigDecimal. The value of the + * constructed SimpleBigDecimal equals bigInt / + * 2scale. + * @param bigInt The bigInt value parameter. + * @param scale The scale of the constructed SimpleBigDecimal. + */ + public SimpleBigDecimal(BigInteger bigInt, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException("scale may not be negative"); + } + + this.bigInt = bigInt; + this.scale = scale; + } + + private SimpleBigDecimal(SimpleBigDecimal limBigDec) + { + bigInt = limBigDec.bigInt; + scale = limBigDec.scale; + } + + private void checkScale(SimpleBigDecimal b) + { + if (scale != b.scale) + { + throw new IllegalArgumentException("Only SimpleBigDecimal of " + + "same scale allowed in arithmetic operations"); + } + } + + public SimpleBigDecimal adjustScale(int newScale) + { + if (newScale < 0) + { + throw new IllegalArgumentException("scale may not be negative"); + } + + if (newScale == scale) + { + return new SimpleBigDecimal(this); + } + + return new SimpleBigDecimal(bigInt.shiftLeft(newScale - scale), + newScale); + } + + public SimpleBigDecimal add(SimpleBigDecimal b) + { + checkScale(b); + return new SimpleBigDecimal(bigInt.add(b.bigInt), scale); + } + + public SimpleBigDecimal add(BigInteger b) + { + return new SimpleBigDecimal(bigInt.add(b.shiftLeft(scale)), scale); + } + + public SimpleBigDecimal negate() + { + return new SimpleBigDecimal(bigInt.negate(), scale); + } + + public SimpleBigDecimal subtract(SimpleBigDecimal b) + { + return add(b.negate()); + } + + public SimpleBigDecimal subtract(BigInteger b) + { + return new SimpleBigDecimal(bigInt.subtract(b.shiftLeft(scale)), + scale); + } + + public SimpleBigDecimal multiply(SimpleBigDecimal b) + { + checkScale(b); + return new SimpleBigDecimal(bigInt.multiply(b.bigInt), scale + scale); + } + + public SimpleBigDecimal multiply(BigInteger b) + { + return new SimpleBigDecimal(bigInt.multiply(b), scale); + } + + public SimpleBigDecimal divide(SimpleBigDecimal b) + { + checkScale(b); + BigInteger dividend = bigInt.shiftLeft(scale); + return new SimpleBigDecimal(dividend.divide(b.bigInt), scale); + } + + public SimpleBigDecimal divide(BigInteger b) + { + return new SimpleBigDecimal(bigInt.divide(b), scale); + } + + public SimpleBigDecimal shiftLeft(int n) + { + return new SimpleBigDecimal(bigInt.shiftLeft(n), scale); + } + + public int compareTo(SimpleBigDecimal val) + { + checkScale(val); + return bigInt.compareTo(val.bigInt); + } + + public int compareTo(BigInteger val) + { + return bigInt.compareTo(val.shiftLeft(scale)); + } + + public BigInteger floor() + { + return bigInt.shiftRight(scale); + } + + public BigInteger round() + { + SimpleBigDecimal oneHalf = new SimpleBigDecimal(ECConstants.ONE, 1); + return add(oneHalf.adjustScale(scale)).floor(); + } + + public int intValue() + { + return floor().intValue(); + } + + public long longValue() + { + return floor().longValue(); + } + /* NON-J2ME compliant. + public double doubleValue() + { + return Double.valueOf(toString()).doubleValue(); + } + + public float floatValue() + { + return Float.valueOf(toString()).floatValue(); + } + */ + public int getScale() + { + return scale; + } + + public String toString() + { + if (scale == 0) + { + return bigInt.toString(); + } + + BigInteger floorBigInt = floor(); + + BigInteger fract = bigInt.subtract(floorBigInt.shiftLeft(scale)); + if (bigInt.signum() == -1) + { + fract = ECConstants.ONE.shiftLeft(scale).subtract(fract); + } + + if ((floorBigInt.signum() == -1) && (!(fract.equals(ECConstants.ZERO)))) + { + floorBigInt = floorBigInt.add(ECConstants.ONE); + } + String leftOfPoint = floorBigInt.toString(); + + char[] fractCharArr = new char[scale]; + String fractStr = fract.toString(2); + int fractLen = fractStr.length(); + int zeroes = scale - fractLen; + for (int i = 0; i < zeroes; i++) + { + fractCharArr[i] = '0'; + } + for (int j = 0; j < fractLen; j++) + { + fractCharArr[zeroes + j] = fractStr.charAt(j); + } + String rightOfPoint = new String(fractCharArr); + + StringBuffer sb = new StringBuffer(leftOfPoint); + sb.append("."); + sb.append(rightOfPoint); + + return sb.toString(); + } + + public boolean equals(Object o) + { + if (this == o) + { + return true; + } + + if (!(o instanceof SimpleBigDecimal)) + { + return false; + } + + SimpleBigDecimal other = (SimpleBigDecimal)o; + return ((bigInt.equals(other.bigInt)) && (scale == other.scale)); + } + + public int hashCode() + { + return bigInt.hashCode() ^ scale; + } + +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/Tnaf.java b/common/src/main/java/org/bouncycastle/math/ec/Tnaf.java new file mode 100644 index 0000000..9fedcf5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/Tnaf.java @@ -0,0 +1,844 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +/** + * Class holding methods for point multiplication based on the window + * τ-adic nonadjacent form (WTNAF). The algorithms are based on the + * paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + * by Jerome A. Solinas. The paper first appeared in the Proceedings of + * Crypto 1997. + */ +class Tnaf +{ + private static final BigInteger MINUS_ONE = ECConstants.ONE.negate(); + private static final BigInteger MINUS_TWO = ECConstants.TWO.negate(); + private static final BigInteger MINUS_THREE = ECConstants.THREE.negate(); + + /** + * The window width of WTNAF. The standard value of 4 is slightly less + * than optimal for running time, but keeps space requirements for + * precomputation low. For typical curves, a value of 5 or 6 results in + * a better running time. When changing this value, the + * αu's must be computed differently, see + * e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + * Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + * p. 121-122 + */ + public static final byte WIDTH = 4; + + /** + * 24 + */ + public static final byte POW_2_WIDTH = 16; + + /** + * The αu's for a=0 as an array + * of ZTauElements. + */ + public static final ZTauElement[] alpha0 = { + null, + new ZTauElement(ECConstants.ONE, ECConstants.ZERO), null, + new ZTauElement(MINUS_THREE, MINUS_ONE), null, + new ZTauElement(MINUS_ONE, MINUS_ONE), null, + new ZTauElement(ECConstants.ONE, MINUS_ONE), null + }; + + /** + * The αu's for a=0 as an array + * of TNAFs. + */ + public static final byte[][] alpha0Tnaf = { + null, {1}, null, {-1, 0, 1}, null, {1, 0, 1}, null, {-1, 0, 0, 1} + }; + + /** + * The αu's for a=1 as an array + * of ZTauElements. + */ + public static final ZTauElement[] alpha1 = {null, + new ZTauElement(ECConstants.ONE, ECConstants.ZERO), null, + new ZTauElement(MINUS_THREE, ECConstants.ONE), null, + new ZTauElement(MINUS_ONE, ECConstants.ONE), null, + new ZTauElement(ECConstants.ONE, ECConstants.ONE), null + }; + + /** + * The αu's for a=1 as an array + * of TNAFs. + */ + public static final byte[][] alpha1Tnaf = { + null, {1}, null, {-1, 0, 1}, null, {1, 0, 1}, null, {-1, 0, 0, -1} + }; + + /** + * Computes the norm of an element λ of + * Z[τ]. + * @param mu The parameter μ of the elliptic curve. + * @param lambda The element λ of + * Z[τ]. + * @return The norm of λ. + */ + public static BigInteger norm(final byte mu, ZTauElement lambda) + { + BigInteger norm; + + // s1 = u^2 + BigInteger s1 = lambda.u.multiply(lambda.u); + + // s2 = u * v + BigInteger s2 = lambda.u.multiply(lambda.v); + + // s3 = 2 * v^2 + BigInteger s3 = lambda.v.multiply(lambda.v).shiftLeft(1); + + if (mu == 1) + { + norm = s1.add(s2).add(s3); + } + else if (mu == -1) + { + norm = s1.subtract(s2).add(s3); + } + else + { + throw new IllegalArgumentException("mu must be 1 or -1"); + } + + return norm; + } + + /** + * Computes the norm of an element λ of + * R[τ], where λ = u + vτ + * and u and u are real numbers (elements of + * R). + * @param mu The parameter μ of the elliptic curve. + * @param u The real part of the element λ of + * R[τ]. + * @param v The τ-adic part of the element + * λ of R[τ]. + * @return The norm of λ. + */ + public static SimpleBigDecimal norm(final byte mu, SimpleBigDecimal u, + SimpleBigDecimal v) + { + SimpleBigDecimal norm; + + // s1 = u^2 + SimpleBigDecimal s1 = u.multiply(u); + + // s2 = u * v + SimpleBigDecimal s2 = u.multiply(v); + + // s3 = 2 * v^2 + SimpleBigDecimal s3 = v.multiply(v).shiftLeft(1); + + if (mu == 1) + { + norm = s1.add(s2).add(s3); + } + else if (mu == -1) + { + norm = s1.subtract(s2).add(s3); + } + else + { + throw new IllegalArgumentException("mu must be 1 or -1"); + } + + return norm; + } + + /** + * Rounds an element λ of R[τ] + * to an element of Z[τ], such that their difference + * has minimal norm. λ is given as + * λ = λ0 + λ1τ. + * @param lambda0 The component λ0. + * @param lambda1 The component λ1. + * @param mu The parameter μ of the elliptic curve. Must + * equal 1 or -1. + * @return The rounded element of Z[τ]. + * @throws IllegalArgumentException if lambda0 and + * lambda1 do not have same scale. + */ + public static ZTauElement round(SimpleBigDecimal lambda0, + SimpleBigDecimal lambda1, byte mu) + { + int scale = lambda0.getScale(); + if (lambda1.getScale() != scale) + { + throw new IllegalArgumentException("lambda0 and lambda1 do not " + + "have same scale"); + } + + if (!((mu == 1) || (mu == -1))) + { + throw new IllegalArgumentException("mu must be 1 or -1"); + } + + BigInteger f0 = lambda0.round(); + BigInteger f1 = lambda1.round(); + + SimpleBigDecimal eta0 = lambda0.subtract(f0); + SimpleBigDecimal eta1 = lambda1.subtract(f1); + + // eta = 2*eta0 + mu*eta1 + SimpleBigDecimal eta = eta0.add(eta0); + if (mu == 1) + { + eta = eta.add(eta1); + } + else + { + // mu == -1 + eta = eta.subtract(eta1); + } + + // check1 = eta0 - 3*mu*eta1 + // check2 = eta0 + 4*mu*eta1 + SimpleBigDecimal threeEta1 = eta1.add(eta1).add(eta1); + SimpleBigDecimal fourEta1 = threeEta1.add(eta1); + SimpleBigDecimal check1; + SimpleBigDecimal check2; + if (mu == 1) + { + check1 = eta0.subtract(threeEta1); + check2 = eta0.add(fourEta1); + } + else + { + // mu == -1 + check1 = eta0.add(threeEta1); + check2 = eta0.subtract(fourEta1); + } + + byte h0 = 0; + byte h1 = 0; + + // if eta >= 1 + if (eta.compareTo(ECConstants.ONE) >= 0) + { + if (check1.compareTo(MINUS_ONE) < 0) + { + h1 = mu; + } + else + { + h0 = 1; + } + } + else + { + // eta < 1 + if (check2.compareTo(ECConstants.TWO) >= 0) + { + h1 = mu; + } + } + + // if eta < -1 + if (eta.compareTo(MINUS_ONE) < 0) + { + if (check1.compareTo(ECConstants.ONE) >= 0) + { + h1 = (byte)-mu; + } + else + { + h0 = -1; + } + } + else + { + // eta >= -1 + if (check2.compareTo(MINUS_TWO) < 0) + { + h1 = (byte)-mu; + } + } + + BigInteger q0 = f0.add(BigInteger.valueOf(h0)); + BigInteger q1 = f1.add(BigInteger.valueOf(h1)); + return new ZTauElement(q0, q1); + } + + /** + * Approximate division by n. For an integer + * k, the value λ = s k / n is + * computed to c bits of accuracy. + * @param k The parameter k. + * @param s The curve parameter s0 or + * s1. + * @param vm The Lucas Sequence element Vm. + * @param a The parameter a of the elliptic curve. + * @param m The bit length of the finite field + * Fm. + * @param c The number of bits of accuracy, i.e. the scale of the returned + * SimpleBigDecimal. + * @return The value λ = s k / n computed to + * c bits of accuracy. + */ + public static SimpleBigDecimal approximateDivisionByN(BigInteger k, + BigInteger s, BigInteger vm, byte a, int m, int c) + { + int _k = (m + 5)/2 + c; + BigInteger ns = k.shiftRight(m - _k - 2 + a); + + BigInteger gs = s.multiply(ns); + + BigInteger hs = gs.shiftRight(m); + + BigInteger js = vm.multiply(hs); + + BigInteger gsPlusJs = gs.add(js); + BigInteger ls = gsPlusJs.shiftRight(_k-c); + if (gsPlusJs.testBit(_k-c-1)) + { + // round up + ls = ls.add(ECConstants.ONE); + } + + return new SimpleBigDecimal(ls, c); + } + + /** + * Computes the τ-adic NAF (non-adjacent form) of an + * element λ of Z[τ]. + * @param mu The parameter μ of the elliptic curve. + * @param lambda The element λ of + * Z[τ]. + * @return The τ-adic NAF of λ. + */ + public static byte[] tauAdicNaf(byte mu, ZTauElement lambda) + { + if (!((mu == 1) || (mu == -1))) + { + throw new IllegalArgumentException("mu must be 1 or -1"); + } + + BigInteger norm = norm(mu, lambda); + + // Ceiling of log2 of the norm + int log2Norm = norm.bitLength(); + + // If length(TNAF) > 30, then length(TNAF) < log2Norm + 3.52 + int maxLength = log2Norm > 30 ? log2Norm + 4 : 34; + + // The array holding the TNAF + byte[] u = new byte[maxLength]; + int i = 0; + + // The actual length of the TNAF + int length = 0; + + BigInteger r0 = lambda.u; + BigInteger r1 = lambda.v; + + while(!((r0.equals(ECConstants.ZERO)) && (r1.equals(ECConstants.ZERO)))) + { + // If r0 is odd + if (r0.testBit(0)) + { + u[i] = (byte) ECConstants.TWO.subtract((r0.subtract(r1.shiftLeft(1))).mod(ECConstants.FOUR)).intValue(); + + // r0 = r0 - u[i] + if (u[i] == 1) + { + r0 = r0.clearBit(0); + } + else + { + // u[i] == -1 + r0 = r0.add(ECConstants.ONE); + } + length = i; + } + else + { + u[i] = 0; + } + + BigInteger t = r0; + BigInteger s = r0.shiftRight(1); + if (mu == 1) + { + r0 = r1.add(s); + } + else + { + // mu == -1 + r0 = r1.subtract(s); + } + + r1 = t.shiftRight(1).negate(); + i++; + } + + length++; + + // Reduce the TNAF array to its actual length + byte[] tnaf = new byte[length]; + System.arraycopy(u, 0, tnaf, 0, length); + return tnaf; + } + + /** + * Applies the operation τ() to an + * ECPoint.F2m. + * @param p The ECPoint.F2m to which τ() is applied. + * @return τ(p) + */ + public static ECPoint.F2m tau(ECPoint.F2m p) + { + if (p.isInfinity()) + { + return p; + } + + ECFieldElement x = p.getX(); + ECFieldElement y = p.getY(); + + return new ECPoint.F2m(p.getCurve(), x.square(), y.square(), p.isCompressed()); + } + + /** + * Returns the parameter μ of the elliptic curve. + * @param curve The elliptic curve from which to obtain μ. + * The curve must be a Koblitz curve, i.e. a equals + * 0 or 1 and b equals + * 1. + * @return μ of the elliptic curve. + * @throws IllegalArgumentException if the given ECCurve is not a Koblitz + * curve. + */ + public static byte getMu(ECCurve.F2m curve) + { + BigInteger a = curve.getA().toBigInteger(); + byte mu; + + if (a.equals(ECConstants.ZERO)) + { + mu = -1; + } + else if (a.equals(ECConstants.ONE)) + { + mu = 1; + } + else + { + throw new IllegalArgumentException("No Koblitz curve (ABC), " + + "TNAF multiplication not possible"); + } + return mu; + } + + /** + * Calculates the Lucas Sequence elements Uk-1 and + * Uk or Vk-1 and + * Vk. + * @param mu The parameter μ of the elliptic curve. + * @param k The index of the second element of the Lucas Sequence to be + * returned. + * @param doV If set to true, computes Vk-1 and + * Vk, otherwise Uk-1 and + * Uk. + * @return An array with 2 elements, containing Uk-1 + * and Uk or Vk-1 + * and Vk. + */ + public static BigInteger[] getLucas(byte mu, int k, boolean doV) + { + if (!((mu == 1) || (mu == -1))) + { + throw new IllegalArgumentException("mu must be 1 or -1"); + } + + BigInteger u0; + BigInteger u1; + BigInteger u2; + + if (doV) + { + u0 = ECConstants.TWO; + u1 = BigInteger.valueOf(mu); + } + else + { + u0 = ECConstants.ZERO; + u1 = ECConstants.ONE; + } + + for (int i = 1; i < k; i++) + { + // u2 = mu*u1 - 2*u0; + BigInteger s = null; + if (mu == 1) + { + s = u1; + } + else + { + // mu == -1 + s = u1.negate(); + } + + u2 = s.subtract(u0.shiftLeft(1)); + u0 = u1; + u1 = u2; +// System.out.println(i + ": " + u2); +// System.out.println(); + } + + BigInteger[] retVal = {u0, u1}; + return retVal; + } + + /** + * Computes the auxiliary value tw. If the width is + * 4, then for mu = 1, tw = 6 and for + * mu = -1, tw = 10 + * @param mu The parameter μ of the elliptic curve. + * @param w The window width of the WTNAF. + * @return the auxiliary value tw + */ + public static BigInteger getTw(byte mu, int w) + { + if (w == 4) + { + if (mu == 1) + { + return BigInteger.valueOf(6); + } + else + { + // mu == -1 + return BigInteger.valueOf(10); + } + } + else + { + // For w <> 4, the values must be computed + BigInteger[] us = getLucas(mu, w, false); + BigInteger twoToW = ECConstants.ZERO.setBit(w); + BigInteger u1invert = us[1].modInverse(twoToW); + BigInteger tw; + tw = ECConstants.TWO.multiply(us[0]).multiply(u1invert).mod(twoToW); +// System.out.println("mu = " + mu); +// System.out.println("tw = " + tw); + return tw; + } + } + + /** + * Computes the auxiliary values s0 and + * s1 used for partial modular reduction. + * @param curve The elliptic curve for which to compute + * s0 and s1. + * @throws IllegalArgumentException if curve is not a + * Koblitz curve (Anomalous Binary Curve, ABC). + */ + public static BigInteger[] getSi(ECCurve.F2m curve) + { + if (!curve.isKoblitz()) + { + throw new IllegalArgumentException("si is defined for Koblitz curves only"); + } + + int m = curve.getM(); + int a = curve.getA().toBigInteger().intValue(); + byte mu = curve.getMu(); + int h = curve.getH().intValue(); + int index = m + 3 - a; + BigInteger[] ui = getLucas(mu, index, false); + + BigInteger dividend0; + BigInteger dividend1; + if (mu == 1) + { + dividend0 = ECConstants.ONE.subtract(ui[1]); + dividend1 = ECConstants.ONE.subtract(ui[0]); + } + else if (mu == -1) + { + dividend0 = ECConstants.ONE.add(ui[1]); + dividend1 = ECConstants.ONE.add(ui[0]); + } + else + { + throw new IllegalArgumentException("mu must be 1 or -1"); + } + + BigInteger[] si = new BigInteger[2]; + + if (h == 2) + { + si[0] = dividend0.shiftRight(1); + si[1] = dividend1.shiftRight(1).negate(); + } + else if (h == 4) + { + si[0] = dividend0.shiftRight(2); + si[1] = dividend1.shiftRight(2).negate(); + } + else + { + throw new IllegalArgumentException("h (Cofactor) must be 2 or 4"); + } + + return si; + } + + /** + * Partial modular reduction modulo + * m - 1)/(τ - 1). + * @param k The integer to be reduced. + * @param m The bitlength of the underlying finite field. + * @param a The parameter a of the elliptic curve. + * @param s The auxiliary values s0 and + * s1. + * @param mu The parameter μ of the elliptic curve. + * @param c The precision (number of bits of accuracy) of the partial + * modular reduction. + * @return ρ := k partmod (τm - 1)/(τ - 1) + */ + public static ZTauElement partModReduction(BigInteger k, int m, byte a, + BigInteger[] s, byte mu, byte c) + { + // d0 = s[0] + mu*s[1]; mu is either 1 or -1 + BigInteger d0; + if (mu == 1) + { + d0 = s[0].add(s[1]); + } + else + { + d0 = s[0].subtract(s[1]); + } + + BigInteger[] v = getLucas(mu, m, true); + BigInteger vm = v[1]; + + SimpleBigDecimal lambda0 = approximateDivisionByN( + k, s[0], vm, a, m, c); + + SimpleBigDecimal lambda1 = approximateDivisionByN( + k, s[1], vm, a, m, c); + + ZTauElement q = round(lambda0, lambda1, mu); + + // r0 = n - d0*q0 - 2*s1*q1 + BigInteger r0 = k.subtract(d0.multiply(q.u)).subtract( + BigInteger.valueOf(2).multiply(s[1]).multiply(q.v)); + + // r1 = s1*q0 - s0*q1 + BigInteger r1 = s[1].multiply(q.u).subtract(s[0].multiply(q.v)); + + return new ZTauElement(r0, r1); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} + * by a BigInteger using the reduced τ-adic + * NAF (RTNAF) method. + * @param p The ECPoint.F2m to multiply. + * @param k The BigInteger by which to multiply p. + * @return k * p + */ + public static ECPoint.F2m multiplyRTnaf(ECPoint.F2m p, BigInteger k) + { + ECCurve.F2m curve = (ECCurve.F2m) p.getCurve(); + int m = curve.getM(); + byte a = (byte) curve.getA().toBigInteger().intValue(); + byte mu = curve.getMu(); + BigInteger[] s = curve.getSi(); + ZTauElement rho = partModReduction(k, m, a, s, mu, (byte)10); + + return multiplyTnaf(p, rho); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} + * by an element λ of Z[τ] + * using the τ-adic NAF (TNAF) method. + * @param p The ECPoint.F2m to multiply. + * @param lambda The element λ of + * Z[τ]. + * @return λ * p + */ + public static ECPoint.F2m multiplyTnaf(ECPoint.F2m p, ZTauElement lambda) + { + ECCurve.F2m curve = (ECCurve.F2m)p.getCurve(); + byte mu = curve.getMu(); + byte[] u = tauAdicNaf(mu, lambda); + + ECPoint.F2m q = multiplyFromTnaf(p, u); + + return q; + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} + * by an element λ of Z[τ] + * using the τ-adic NAF (TNAF) method, given the TNAF + * of λ. + * @param p The ECPoint.F2m to multiply. + * @param u The the TNAF of λ.. + * @return λ * p + */ + public static ECPoint.F2m multiplyFromTnaf(ECPoint.F2m p, byte[] u) + { + ECCurve.F2m curve = (ECCurve.F2m)p.getCurve(); + ECPoint.F2m q = (ECPoint.F2m) curve.getInfinity(); + for (int i = u.length - 1; i >= 0; i--) + { + q = tau(q); + if (u[i] == 1) + { + q = (ECPoint.F2m)q.addSimple(p); + } + else if (u[i] == -1) + { + q = (ECPoint.F2m)q.subtractSimple(p); + } + } + return q; + } + + /** + * Computes the [τ]-adic window NAF of an element + * λ of Z[τ]. + * @param mu The parameter μ of the elliptic curve. + * @param lambda The element λ of + * Z[τ] of which to compute the + * [τ]-adic NAF. + * @param width The window width of the resulting WNAF. + * @param pow2w 2width. + * @param tw The auxiliary value tw. + * @param alpha The αu's for the window width. + * @return The [τ]-adic window NAF of + * λ. + */ + public static byte[] tauAdicWNaf(byte mu, ZTauElement lambda, + byte width, BigInteger pow2w, BigInteger tw, ZTauElement[] alpha) + { + if (!((mu == 1) || (mu == -1))) + { + throw new IllegalArgumentException("mu must be 1 or -1"); + } + + BigInteger norm = norm(mu, lambda); + + // Ceiling of log2 of the norm + int log2Norm = norm.bitLength(); + + // If length(TNAF) > 30, then length(TNAF) < log2Norm + 3.52 + int maxLength = log2Norm > 30 ? log2Norm + 4 + width : 34 + width; + + // The array holding the TNAF + byte[] u = new byte[maxLength]; + + // 2^(width - 1) + BigInteger pow2wMin1 = pow2w.shiftRight(1); + + // Split lambda into two BigIntegers to simplify calculations + BigInteger r0 = lambda.u; + BigInteger r1 = lambda.v; + int i = 0; + + // while lambda <> (0, 0) + while (!((r0.equals(ECConstants.ZERO))&&(r1.equals(ECConstants.ZERO)))) + { + // if r0 is odd + if (r0.testBit(0)) + { + // uUnMod = r0 + r1*tw mod 2^width + BigInteger uUnMod + = r0.add(r1.multiply(tw)).mod(pow2w); + + byte uLocal; + // if uUnMod >= 2^(width - 1) + if (uUnMod.compareTo(pow2wMin1) >= 0) + { + uLocal = (byte) uUnMod.subtract(pow2w).intValue(); + } + else + { + uLocal = (byte) uUnMod.intValue(); + } + // uLocal is now in [-2^(width-1), 2^(width-1)-1] + + u[i] = uLocal; + boolean s = true; + if (uLocal < 0) + { + s = false; + uLocal = (byte)-uLocal; + } + // uLocal is now >= 0 + + if (s) + { + r0 = r0.subtract(alpha[uLocal].u); + r1 = r1.subtract(alpha[uLocal].v); + } + else + { + r0 = r0.add(alpha[uLocal].u); + r1 = r1.add(alpha[uLocal].v); + } + } + else + { + u[i] = 0; + } + + BigInteger t = r0; + + if (mu == 1) + { + r0 = r1.add(r0.shiftRight(1)); + } + else + { + // mu == -1 + r0 = r1.subtract(r0.shiftRight(1)); + } + r1 = t.shiftRight(1).negate(); + i++; + } + return u; + } + + /** + * Does the precomputation for WTNAF multiplication. + * @param p The ECPoint for which to do the precomputation. + * @param a The parameter a of the elliptic curve. + * @return The precomputation array for p. + */ + public static ECPoint.F2m[] getPreComp(ECPoint.F2m p, byte a) + { + ECPoint.F2m[] pu; + pu = new ECPoint.F2m[16]; + pu[1] = p; + byte[][] alphaTnaf; + if (a == 0) + { + alphaTnaf = Tnaf.alpha0Tnaf; + } + else + { + // a == 1 + alphaTnaf = Tnaf.alpha1Tnaf; + } + + int precompLen = alphaTnaf.length; + for (int i = 3; i < precompLen; i = i + 2) + { + pu[i] = Tnaf.multiplyFromTnaf(p, alphaTnaf[i]); + } + + return pu; + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/WNafMultiplier.java b/common/src/main/java/org/bouncycastle/math/ec/WNafMultiplier.java new file mode 100644 index 0000000..a5fe84d --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/WNafMultiplier.java @@ -0,0 +1,240 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +/** + * Class implementing the WNAF (Window Non-Adjacent Form) multiplication + * algorithm. + */ +class WNafMultiplier implements ECMultiplier +{ + /** + * Computes the Window NAF (non-adjacent Form) of an integer. + * @param width The width w of the Window NAF. The width is + * defined as the minimal number w, such that for any + * w consecutive digits in the resulting representation, at + * most one is non-zero. + * @param k The integer of which the Window NAF is computed. + * @return The Window NAF of the given width, such that the following holds: + * k = ∑i=0l-1 ki2i + * , where the ki denote the elements of the + * returned byte[]. + */ + public byte[] windowNaf(byte width, BigInteger k) + { + // The window NAF is at most 1 element longer than the binary + // representation of the integer k. byte can be used instead of short or + // int unless the window width is larger than 8. For larger width use + // short or int. However, a width of more than 8 is not efficient for + // m = log2(q) smaller than 2305 Bits. Note: Values for m larger than + // 1000 Bits are currently not used in practice. + byte[] wnaf = new byte[k.bitLength() + 1]; + + // 2^width as short and BigInteger + short pow2wB = (short)(1 << width); + BigInteger pow2wBI = BigInteger.valueOf(pow2wB); + + int i = 0; + + // The actual length of the WNAF + int length = 0; + + // while k >= 1 + while (k.signum() > 0) + { + // if k is odd + if (k.testBit(0)) + { + // k mod 2^width + BigInteger remainder = k.mod(pow2wBI); + + // if remainder > 2^(width - 1) - 1 + if (remainder.testBit(width - 1)) + { + wnaf[i] = (byte)(remainder.intValue() - pow2wB); + } + else + { + wnaf[i] = (byte)remainder.intValue(); + } + // wnaf[i] is now in [-2^(width-1), 2^(width-1)-1] + + k = k.subtract(BigInteger.valueOf(wnaf[i])); + length = i; + } + else + { + wnaf[i] = 0; + } + + // k = k/2 + k = k.shiftRight(1); + i++; + } + + length++; + + // Reduce the WNAF array to its actual length + byte[] wnafShort = new byte[length]; + System.arraycopy(wnaf, 0, wnafShort, 0, length); + return wnafShort; + } + + /** + * Multiplies this by an integer k using the + * Window NAF method. + * @param k The integer by which this is multiplied. + * @return A new ECPoint which equals this + * multiplied by k. + */ + public ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo) + { + WNafPreCompInfo wnafPreCompInfo; + + if ((preCompInfo != null) && (preCompInfo instanceof WNafPreCompInfo)) + { + wnafPreCompInfo = (WNafPreCompInfo)preCompInfo; + } + else + { + // Ignore empty PreCompInfo or PreCompInfo of incorrect type + wnafPreCompInfo = new WNafPreCompInfo(); + } + + // floor(log2(k)) + int m = k.bitLength(); + + // width of the Window NAF + byte width; + + // Required length of precomputation array + int reqPreCompLen; + + // Determine optimal width and corresponding length of precomputation + // array based on literature values + if (m < 13) + { + width = 2; + reqPreCompLen = 1; + } + else + { + if (m < 41) + { + width = 3; + reqPreCompLen = 2; + } + else + { + if (m < 121) + { + width = 4; + reqPreCompLen = 4; + } + else + { + if (m < 337) + { + width = 5; + reqPreCompLen = 8; + } + else + { + if (m < 897) + { + width = 6; + reqPreCompLen = 16; + } + else + { + if (m < 2305) + { + width = 7; + reqPreCompLen = 32; + } + else + { + width = 8; + reqPreCompLen = 127; + } + } + } + } + } + } + + // The length of the precomputation array + int preCompLen = 1; + + ECPoint[] preComp = wnafPreCompInfo.getPreComp(); + ECPoint twiceP = wnafPreCompInfo.getTwiceP(); + + // Check if the precomputed ECPoints already exist + if (preComp == null) + { + // Precomputation must be performed from scratch, create an empty + // precomputation array of desired length + preComp = new ECPoint[]{ p }; + } + else + { + // Take the already precomputed ECPoints to start with + preCompLen = preComp.length; + } + + if (twiceP == null) + { + // Compute twice(p) + twiceP = p.twice(); + } + + if (preCompLen < reqPreCompLen) + { + // Precomputation array must be made bigger, copy existing preComp + // array into the larger new preComp array + ECPoint[] oldPreComp = preComp; + preComp = new ECPoint[reqPreCompLen]; + System.arraycopy(oldPreComp, 0, preComp, 0, preCompLen); + + for (int i = preCompLen; i < reqPreCompLen; i++) + { + // Compute the new ECPoints for the precomputation array. + // The values 1, 3, 5, ..., 2^(width-1)-1 times p are + // computed + preComp[i] = twiceP.add(preComp[i - 1]); + } + } + + // Compute the Window NAF of the desired width + byte[] wnaf = windowNaf(width, k); + int l = wnaf.length; + + // Apply the Window NAF to p using the precomputed ECPoint values. + ECPoint q = p.getCurve().getInfinity(); + for (int i = l - 1; i >= 0; i--) + { + q = q.twice(); + + if (wnaf[i] != 0) + { + if (wnaf[i] > 0) + { + q = q.add(preComp[(wnaf[i] - 1)/2]); + } + else + { + // wnaf[i] < 0 + q = q.subtract(preComp[(-wnaf[i] - 1)/2]); + } + } + } + + // Set PreCompInfo in ECPoint, such that it is available for next + // multiplication. + wnafPreCompInfo.setPreComp(preComp); + wnafPreCompInfo.setTwiceP(twiceP); + p.setPreCompInfo(wnafPreCompInfo); + return q; + } + +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/WNafPreCompInfo.java b/common/src/main/java/org/bouncycastle/math/ec/WNafPreCompInfo.java new file mode 100644 index 0000000..fc0d5fe --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/WNafPreCompInfo.java @@ -0,0 +1,44 @@ +package org.bouncycastle.math.ec; + +/** + * Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + * algorithm. + */ +class WNafPreCompInfo implements PreCompInfo +{ + /** + * Array holding the precomputed ECPoints used for the Window + * NAF multiplication in + * {@link org.bouncycastle.math.ec.multiplier.WNafMultiplier.multiply() + * WNafMultiplier.multiply()}. + */ + private ECPoint[] preComp = null; + + /** + * Holds an ECPoint representing twice(this). Used for the + * Window NAF multiplication in + * {@link org.bouncycastle.math.ec.multiplier.WNafMultiplier.multiply() + * WNafMultiplier.multiply()}. + */ + private ECPoint twiceP = null; + + protected ECPoint[] getPreComp() + { + return preComp; + } + + protected void setPreComp(ECPoint[] preComp) + { + this.preComp = preComp; + } + + protected ECPoint getTwiceP() + { + return twiceP; + } + + protected void setTwiceP(ECPoint twiceThis) + { + this.twiceP = twiceThis; + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/WTauNafMultiplier.java b/common/src/main/java/org/bouncycastle/math/ec/WTauNafMultiplier.java new file mode 100644 index 0000000..ac82f62 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/WTauNafMultiplier.java @@ -0,0 +1,119 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +/** + * Class implementing the WTNAF (Window + * τ-adic Non-Adjacent Form) algorithm. + */ +class WTauNafMultiplier implements ECMultiplier +{ + /** + * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} + * by k using the reduced τ-adic NAF (RTNAF) + * method. + * @param p The ECPoint.F2m to multiply. + * @param k The integer by which to multiply k. + * @return p multiplied by k. + */ + public ECPoint multiply(ECPoint point, BigInteger k, PreCompInfo preCompInfo) + { + if (!(point instanceof ECPoint.F2m)) + { + throw new IllegalArgumentException("Only ECPoint.F2m can be " + + "used in WTauNafMultiplier"); + } + + ECPoint.F2m p = (ECPoint.F2m)point; + + ECCurve.F2m curve = (ECCurve.F2m) p.getCurve(); + int m = curve.getM(); + byte a = curve.getA().toBigInteger().byteValue(); + byte mu = curve.getMu(); + BigInteger[] s = curve.getSi(); + + ZTauElement rho = Tnaf.partModReduction(k, m, a, s, mu, (byte)10); + + return multiplyWTnaf(p, rho, preCompInfo, a, mu); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} + * by an element λ of Z[τ] using + * the τ-adic NAF (TNAF) method. + * @param p The ECPoint.F2m to multiply. + * @param lambda The element λ of + * Z[τ] of which to compute the + * [τ]-adic NAF. + * @return p multiplied by λ. + */ + private ECPoint.F2m multiplyWTnaf(ECPoint.F2m p, ZTauElement lambda, + PreCompInfo preCompInfo, byte a, byte mu) + { + ZTauElement[] alpha; + if (a == 0) + { + alpha = Tnaf.alpha0; + } + else + { + // a == 1 + alpha = Tnaf.alpha1; + } + + BigInteger tw = Tnaf.getTw(mu, Tnaf.WIDTH); + + byte[]u = Tnaf.tauAdicWNaf(mu, lambda, Tnaf.WIDTH, + BigInteger.valueOf(Tnaf.POW_2_WIDTH), tw, alpha); + + return multiplyFromWTnaf(p, u, preCompInfo); + } + + /** + * Multiplies a {@link org.bouncycastle.math.ec.ECPoint.F2m ECPoint.F2m} + * by an element λ of Z[τ] + * using the window τ-adic NAF (TNAF) method, given the + * WTNAF of λ. + * @param p The ECPoint.F2m to multiply. + * @param u The the WTNAF of λ.. + * @return λ * p + */ + private static ECPoint.F2m multiplyFromWTnaf(ECPoint.F2m p, byte[] u, + PreCompInfo preCompInfo) + { + ECCurve.F2m curve = (ECCurve.F2m)p.getCurve(); + byte a = curve.getA().toBigInteger().byteValue(); + + ECPoint.F2m[] pu; + if ((preCompInfo == null) || !(preCompInfo instanceof WTauNafPreCompInfo)) + { + pu = Tnaf.getPreComp(p, a); + p.setPreCompInfo(new WTauNafPreCompInfo(pu)); + } + else + { + pu = ((WTauNafPreCompInfo)preCompInfo).getPreComp(); + } + + // q = infinity + ECPoint.F2m q = (ECPoint.F2m) p.getCurve().getInfinity(); + for (int i = u.length - 1; i >= 0; i--) + { + q = Tnaf.tau(q); + if (u[i] != 0) + { + if (u[i] > 0) + { + q = q.addSimple(pu[u[i]]); + } + else + { + // u[i] < 0 + q = q.subtractSimple(pu[-u[i]]); + } + } + } + + return q; + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/WTauNafPreCompInfo.java b/common/src/main/java/org/bouncycastle/math/ec/WTauNafPreCompInfo.java new file mode 100644 index 0000000..d7c583f --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/WTauNafPreCompInfo.java @@ -0,0 +1,39 @@ +package org.bouncycastle.math.ec; + +/** + * Class holding precomputation data for the WTNAF (Window + * τ-adic Non-Adjacent Form) algorithm. + */ +class WTauNafPreCompInfo implements PreCompInfo +{ + /** + * Array holding the precomputed ECPoint.F2ms used for the + * WTNAF multiplication in + * {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + * WTauNafMultiplier.multiply()}. + */ + private ECPoint.F2m[] preComp = null; + + /** + * Constructor for WTauNafPreCompInfo + * @param preComp Array holding the precomputed ECPoint.F2ms + * used for the WTNAF multiplication in + * {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + * WTauNafMultiplier.multiply()}. + */ + WTauNafPreCompInfo(ECPoint.F2m[] preComp) + { + this.preComp = preComp; + } + + /** + * @return the array holding the precomputed ECPoint.F2ms + * used for the WTNAF multiplication in + * {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + * WTauNafMultiplier.multiply()}. + */ + protected ECPoint.F2m[] getPreComp() + { + return preComp; + } +} diff --git a/common/src/main/java/org/bouncycastle/math/ec/ZTauElement.java b/common/src/main/java/org/bouncycastle/math/ec/ZTauElement.java new file mode 100644 index 0000000..d0cfc80 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/math/ec/ZTauElement.java @@ -0,0 +1,37 @@ +package org.bouncycastle.math.ec; + +import javabc.BigInteger; + +/** + * Class representing an element of Z[τ]. Let + * λ be an element of Z[τ]. Then + * λ is given as λ = u + vτ. The + * components u and v may be used directly, there + * are no accessor methods. + * Immutable class. + */ +class ZTauElement +{ + /** + * The "real" part of λ. + */ + public final BigInteger u; + + /** + * The "τ-adic" part of λ. + */ + public final BigInteger v; + + /** + * Constructor for an element λ of + * Z[τ]. + * @param u The "real" part of λ. + * @param v The "τ-adic" part of + * λ. + */ + public ZTauElement(BigInteger u, BigInteger v) + { + this.u = u; + this.v = v; + } +} diff --git a/common/src/main/java/org/bouncycastle/oiw/ElGamalParameter.java b/common/src/main/java/org/bouncycastle/oiw/ElGamalParameter.java new file mode 100644 index 0000000..ca5ca5a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/oiw/ElGamalParameter.java @@ -0,0 +1,54 @@ +package org.bouncycastle.asn1.oiw; + +import javabc.BigInteger; +import java.util.Enumeration; + +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1Integer; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DERSequence; + +public class ElGamalParameter + extends ASN1Object +{ + ASN1Integer p, g; + + public ElGamalParameter( + BigInteger p, + BigInteger g) + { + this.p = new ASN1Integer(p); + this.g = new ASN1Integer(g); + } + + public ElGamalParameter( + ASN1Sequence seq) + { + Enumeration e = seq.getObjects(); + + p = (ASN1Integer)e.nextElement(); + g = (ASN1Integer)e.nextElement(); + } + + public BigInteger getP() + { + return p.getPositiveValue(); + } + + public BigInteger getG() + { + return g.getPositiveValue(); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + v.add(p); + v.add(g); + + return new DERSequence(v); + } +} diff --git a/common/src/main/java/org/bouncycastle/oiw/OIWObjectIdentifiers.java b/common/src/main/java/org/bouncycastle/oiw/OIWObjectIdentifiers.java new file mode 100644 index 0000000..c8ce26b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/oiw/OIWObjectIdentifiers.java @@ -0,0 +1,31 @@ +package org.bouncycastle.asn1.oiw; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; + +public interface OIWObjectIdentifiers +{ + // id-SHA1 OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } // + static final ASN1ObjectIdentifier md4WithRSA = new ASN1ObjectIdentifier("1.3.14.3.2.2"); + static final ASN1ObjectIdentifier md5WithRSA = new ASN1ObjectIdentifier("1.3.14.3.2.3"); + static final ASN1ObjectIdentifier md4WithRSAEncryption = new ASN1ObjectIdentifier("1.3.14.3.2.4"); + + static final ASN1ObjectIdentifier desECB = new ASN1ObjectIdentifier("1.3.14.3.2.6"); + static final ASN1ObjectIdentifier desCBC = new ASN1ObjectIdentifier("1.3.14.3.2.7"); + static final ASN1ObjectIdentifier desOFB = new ASN1ObjectIdentifier("1.3.14.3.2.8"); + static final ASN1ObjectIdentifier desCFB = new ASN1ObjectIdentifier("1.3.14.3.2.9"); + + static final ASN1ObjectIdentifier desEDE = new ASN1ObjectIdentifier("1.3.14.3.2.17"); + + static final ASN1ObjectIdentifier idSHA1 = new ASN1ObjectIdentifier("1.3.14.3.2.26"); + + static final ASN1ObjectIdentifier dsaWithSHA1 = new ASN1ObjectIdentifier("1.3.14.3.2.27"); + + static final ASN1ObjectIdentifier sha1WithRSA = new ASN1ObjectIdentifier("1.3.14.3.2.29"); + + // ElGamal Algorithm OBJECT IDENTIFIER ::= + // {iso(1) identified-organization(3) oiw(14) dirservsig(7) algorithm(2) encryption(1) 1 } + // + static final ASN1ObjectIdentifier elGamalAlgorithm = new ASN1ObjectIdentifier("1.3.14.7.2.1.1"); + +} diff --git a/common/src/main/java/org/bouncycastle/util/Arrays.java b/common/src/main/java/org/bouncycastle/util/Arrays.java new file mode 100644 index 0000000..a9b070b --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/Arrays.java @@ -0,0 +1,532 @@ +package org.bouncycastle.util; + +import javabc.BigInteger; + +/** + * General array utilities. + */ +public final class Arrays +{ + private Arrays() + { + // static class, hide constructor + } + + public static boolean areEqual( + boolean[] a, + boolean[] b) + { + if (a == b) + { + return true; + } + + if (a == null || b == null) + { + return false; + } + + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (a[i] != b[i]) + { + return false; + } + } + + return true; + } + + public static boolean areEqual( + char[] a, + char[] b) + { + if (a == b) + { + return true; + } + + if (a == null || b == null) + { + return false; + } + + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (a[i] != b[i]) + { + return false; + } + } + + return true; + } + + public static boolean areEqual( + byte[] a, + byte[] b) + { + if (a == b) + { + return true; + } + + if (a == null || b == null) + { + return false; + } + + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (a[i] != b[i]) + { + return false; + } + } + + return true; + } + + /** + * A constant time equals comparison - does not terminate early if + * test will fail. + * + * @param a first array + * @param b second array + * @return true if arrays equal, false otherwise. + */ + public static boolean constantTimeAreEqual( + byte[] a, + byte[] b) + { + if (a == b) + { + return true; + } + + if (a == null || b == null) + { + return false; + } + + if (a.length != b.length) + { + return false; + } + + int nonEqual = 0; + + for (int i = 0; i != a.length; i++) + { + nonEqual |= (a[i] ^ b[i]); + } + + return nonEqual == 0; + } + + public static boolean areEqual( + int[] a, + int[] b) + { + if (a == b) + { + return true; + } + + if (a == null || b == null) + { + return false; + } + + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (a[i] != b[i]) + { + return false; + } + } + + return true; + } + + public static boolean areEqual( + long[] a, + long[] b) + { + if (a == b) + { + return true; + } + + if (a == null || b == null) + { + return false; + } + + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (a[i] != b[i]) + { + return false; + } + } + + return true; + } + + public static boolean areEqual( + BigInteger[] a, + BigInteger[] b) + { + if (a == b) + { + return true; + } + + if (a == null || b == null) + { + return false; + } + + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (!a[i].equals(b[i])) + { + return false; + } + } + + return true; + } + + public static void fill( + byte[] array, + byte value) + { + for (int i = 0; i < array.length; i++) + { + array[i] = value; + } + } + + public static void fill( + long[] array, + long value) + { + for (int i = 0; i < array.length; i++) + { + array[i] = value; + } + } + + public static void fill( + short[] array, + short value) + { + for (int i = 0; i < array.length; i++) + { + array[i] = value; + } + } + + public static void fill( + int[] array, + int value) + { + for (int i = 0; i < array.length; i++) + { + array[i] = value; + } + } + + public static int hashCode(byte[] data) + { + if (data == null) + { + return 0; + } + + int i = data.length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[i]; + } + + return hc; + } + + public static int hashCode(char[] data) + { + if (data == null) + { + return 0; + } + + int i = data.length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[i]; + } + + return hc; + } + + public static int hashCode(int[] data) + { + if (data == null) + { + return 0; + } + + int i = data.length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[i]; + } + + return hc; + } + + public static int hashCode(BigInteger[] data) + { + if (data == null) + { + return 0; + } + + int i = data.length; + int hc = i + 1; + + while (--i >= 0) + { + hc *= 257; + hc ^= data[i].hashCode(); + } + + return hc; + } + + public static byte[] clone(byte[] data) + { + if (data == null) + { + return null; + } + byte[] copy = new byte[data.length]; + + System.arraycopy(data, 0, copy, 0, data.length); + + return copy; + } + + public static int[] clone(int[] data) + { + if (data == null) + { + return null; + } + int[] copy = new int[data.length]; + + System.arraycopy(data, 0, copy, 0, data.length); + + return copy; + } + + public static BigInteger[] clone(BigInteger[] data) + { + if (data == null) + { + return null; + } + BigInteger[] copy = new BigInteger[data.length]; + + System.arraycopy(data, 0, copy, 0, data.length); + + return copy; + } + + public static byte[] copyOf(byte[] data, int newLength) + { + byte[] tmp = new byte[newLength]; + + if (newLength < data.length) + { + System.arraycopy(data, 0, tmp, 0, newLength); + } + else + { + System.arraycopy(data, 0, tmp, 0, data.length); + } + + return tmp; + } + + public static int[] copyOf(int[] data, int newLength) + { + int[] tmp = new int[newLength]; + + if (newLength < data.length) + { + System.arraycopy(data, 0, tmp, 0, newLength); + } + else + { + System.arraycopy(data, 0, tmp, 0, data.length); + } + + return tmp; + } + + public static long[] copyOf(long[] data, int newLength) + { + long[] tmp = new long[newLength]; + + if (newLength < data.length) + { + System.arraycopy(data, 0, tmp, 0, newLength); + } + else + { + System.arraycopy(data, 0, tmp, 0, data.length); + } + + return tmp; + } + + public static BigInteger[] copyOf(BigInteger[] data, int newLength) + { + BigInteger[] tmp = new BigInteger[newLength]; + + if (newLength < data.length) + { + System.arraycopy(data, 0, tmp, 0, newLength); + } + else + { + System.arraycopy(data, 0, tmp, 0, data.length); + } + + return tmp; + } + + public static byte[] copyOfRange(byte[] data, int from, int to) + { + int newLength = getLength(from, to); + + byte[] tmp = new byte[newLength]; + + if (data.length - from < newLength) + { + System.arraycopy(data, from, tmp, 0, data.length - from); + } + else + { + System.arraycopy(data, from, tmp, 0, newLength); + } + + return tmp; + } + + public static int[] copyOfRange(int[] data, int from, int to) + { + int newLength = getLength(from, to); + + int[] tmp = new int[newLength]; + + if (data.length - from < newLength) + { + System.arraycopy(data, from, tmp, 0, data.length - from); + } + else + { + System.arraycopy(data, from, tmp, 0, newLength); + } + + return tmp; + } + + public static long[] copyOfRange(long[] data, int from, int to) + { + int newLength = getLength(from, to); + + long[] tmp = new long[newLength]; + + if (data.length - from < newLength) + { + System.arraycopy(data, from, tmp, 0, data.length - from); + } + else + { + System.arraycopy(data, from, tmp, 0, newLength); + } + + return tmp; + } + + public static BigInteger[] copyOfRange(BigInteger[] data, int from, int to) + { + int newLength = getLength(from, to); + + BigInteger[] tmp = new BigInteger[newLength]; + + if (data.length - from < newLength) + { + System.arraycopy(data, from, tmp, 0, data.length - from); + } + else + { + System.arraycopy(data, from, tmp, 0, newLength); + } + + return tmp; + } + + private static int getLength(int from, int to) + { + int newLength = to - from; + if (newLength < 0) + { + throw new IllegalArgumentException(from + " > " + to); + } + return newLength; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/BigIntegers.java b/common/src/main/java/org/bouncycastle/util/BigIntegers.java new file mode 100644 index 0000000..87bd1e1 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/BigIntegers.java @@ -0,0 +1,78 @@ +package org.bouncycastle.util; + +import javabc.BigInteger; +import javabc.SecureRandom; + +/** + * BigInteger utilities. + */ +public final class BigIntegers +{ + private static final int MAX_ITERATIONS = 1000; + private static final BigInteger ZERO = BigInteger.valueOf(0); + + /** + * Return the passed in value as an unsigned byte array. + * + * @param value value to be converted. + * @return a byte array without a leading zero byte if present in the signed encoding. + */ + public static byte[] asUnsignedByteArray( + BigInteger value) + { + byte[] bytes = value.toByteArray(); + + if (bytes[0] == 0) + { + byte[] tmp = new byte[bytes.length - 1]; + + System.arraycopy(bytes, 1, tmp, 0, tmp.length); + + return tmp; + } + + return bytes; + } + + /** + * Return a random BigInteger not less than 'min' and not greater than 'max' + * + * @param min the least value that may be generated + * @param max the greatest value that may be generated + * @param random the source of randomness + * @return a random BigInteger value in the range [min,max] + */ + public static BigInteger createRandomInRange( + BigInteger min, + BigInteger max, + SecureRandom random) + { + int cmp = min.compareTo(max); + if (cmp >= 0) + { + if (cmp > 0) + { + throw new IllegalArgumentException("'min' may not be greater than 'max'"); + } + + return min; + } + + if (min.bitLength() > max.bitLength() / 2) + { + return createRandomInRange(ZERO, max.subtract(min), random).add(min); + } + + for (int i = 0; i < MAX_ITERATIONS; ++i) + { + BigInteger x = new BigInteger(max.bitLength(), random); + if (x.compareTo(min) >= 0 && x.compareTo(max) <= 0) + { + return x; + } + } + + // fall back to a faster (restricted) method + return new BigInteger(max.subtract(min).bitLength() - 1, random).add(min); + } +} diff --git a/common/src/main/java/org/bouncycastle/util/CollectionStore.java b/common/src/main/java/org/bouncycastle/util/CollectionStore.java new file mode 100644 index 0000000..91aba14 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/CollectionStore.java @@ -0,0 +1,57 @@ +package org.bouncycastle.util; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +/** + * A simple collection backed store. + */ +public class CollectionStore + implements Store +{ + private Collection _local; + + /** + * Basic constructor. + * + * @param collection - initial contents for the store, this is copied. + */ + public CollectionStore( + Collection collection) + { + _local = new ArrayList(collection); + } + + /** + * Return the matches in the collection for the passed in selector. + * + * @param selector the selector to match against. + * @return a possibly empty collection of matching objects. + */ + public Collection getMatches(Selector selector) + { + if (selector == null) + { + return new ArrayList(_local); + } + else + { + List col = new ArrayList(); + Iterator iter = _local.iterator(); + + while (iter.hasNext()) + { + Object obj = iter.next(); + + if (selector.match(obj)) + { + col.add(obj); + } + } + + return col; + } + } +} diff --git a/common/src/main/java/org/bouncycastle/util/IPAddress.java b/common/src/main/java/org/bouncycastle/util/IPAddress.java new file mode 100644 index 0000000..9f5d1cb --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/IPAddress.java @@ -0,0 +1,188 @@ +package org.bouncycastle.util; + +public class IPAddress +{ + /** + * Validate the given IPv4 or IPv6 address. + * + * @param address the IP address as a String. + * + * @return true if a valid address, false otherwise + */ + public static boolean isValid( + String address) + { + return isValidIPv4(address) || isValidIPv6(address); + } + + /** + * Validate the given IPv4 or IPv6 address and netmask. + * + * @param address the IP address as a String. + * + * @return true if a valid address with netmask, false otherwise + */ + public static boolean isValidWithNetMask( + String address) + { + return isValidIPv4WithNetmask(address) || isValidIPv6WithNetmask(address); + } + + /** + * Validate the given IPv4 address. + * + * @param address the IP address as a String. + * + * @return true if a valid IPv4 address, false otherwise + */ + public static boolean isValidIPv4( + String address) + { + if (address.length() == 0) + { + return false; + } + + int octet; + int octets = 0; + + String temp = address+"."; + + int pos; + int start = 0; + while (start < temp.length() + && (pos = temp.indexOf('.', start)) > start) + { + if (octets == 4) + { + return false; + } + try + { + octet = Integer.parseInt(temp.substring(start, pos)); + } + catch (NumberFormatException ex) + { + return false; + } + if (octet < 0 || octet > 255) + { + return false; + } + start = pos + 1; + octets++; + } + + return octets == 4; + } + + public static boolean isValidIPv4WithNetmask( + String address) + { + int index = address.indexOf("/"); + String mask = address.substring(index + 1); + + return (index > 0) && isValidIPv4(address.substring(0, index)) + && (isValidIPv4(mask) || isMaskValue(mask, 32)); + } + + public static boolean isValidIPv6WithNetmask( + String address) + { + int index = address.indexOf("/"); + String mask = address.substring(index + 1); + + return (index > 0) && (isValidIPv6(address.substring(0, index)) + && (isValidIPv6(mask) || isMaskValue(mask, 128))); + } + + private static boolean isMaskValue(String component, int size) + { + try + { + int value = Integer.parseInt(component); + + return value >= 0 && value <= size; + } + catch (NumberFormatException e) + { + return false; + } + } + + /** + * Validate the given IPv6 address. + * + * @param address the IP address as a String. + * + * @return true if a valid IPv4 address, false otherwise + */ + public static boolean isValidIPv6( + String address) + { + if (address.length() == 0) + { + return false; + } + + int octet; + int octets = 0; + + String temp = address + ":"; + boolean doubleColonFound = false; + int pos; + int start = 0; + while (start < temp.length() + && (pos = temp.indexOf(':', start)) >= start) + { + if (octets == 8) + { + return false; + } + + if (start != pos) + { + String value = temp.substring(start, pos); + + if (pos == (temp.length() - 1) && value.indexOf('.') > 0) + { + if (!isValidIPv4(value)) + { + return false; + } + + octets++; // add an extra one as address covers 2 words. + } + else + { + try + { + octet = Integer.parseInt(temp.substring(start, pos), 16); + } + catch (NumberFormatException ex) + { + return false; + } + if (octet < 0 || octet > 0xffff) + { + return false; + } + } + } + else + { + if (pos != 1 && pos != temp.length() - 1 && doubleColonFound) + { + return false; + } + doubleColonFound = true; + } + start = pos + 1; + octets++; + } + + return octets == 8 || doubleColonFound; + } +} + + diff --git a/common/src/main/java/org/bouncycastle/util/Selector.java b/common/src/main/java/org/bouncycastle/util/Selector.java new file mode 100644 index 0000000..79a1dd8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/Selector.java @@ -0,0 +1,8 @@ +package org.bouncycastle.util; + +public interface Selector +{ + boolean match(Object obj); + + Object clone(); +} diff --git a/common/src/main/java/org/bouncycastle/util/Store.java b/common/src/main/java/org/bouncycastle/util/Store.java new file mode 100644 index 0000000..b994c92 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/Store.java @@ -0,0 +1,9 @@ +package org.bouncycastle.util; + +import java.util.Collection; + +public interface Store +{ + Collection getMatches(Selector selector) + throws StoreException; +} diff --git a/common/src/main/java/org/bouncycastle/util/StoreException.java b/common/src/main/java/org/bouncycastle/util/StoreException.java new file mode 100644 index 0000000..5ea09e8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/StoreException.java @@ -0,0 +1,18 @@ +package org.bouncycastle.util; + +public class StoreException + extends RuntimeException +{ + private Throwable _e; + + public StoreException(String s, Throwable e) + { + super(s); + _e = e; + } + + public Throwable getCause() + { + return _e; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/Strings.java b/common/src/main/java/org/bouncycastle/util/Strings.java new file mode 100644 index 0000000..2111225 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/Strings.java @@ -0,0 +1,304 @@ +package org.bouncycastle.util; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Vector; + + +public final class Strings +{ + public static String fromUTF8ByteArray(byte[] bytes) + { + int i = 0; + int length = 0; + + while (i < bytes.length) + { + length++; + if ((bytes[i] & 0xf0) == 0xf0) + { + // surrogate pair + length++; + i += 4; + } + else if ((bytes[i] & 0xe0) == 0xe0) + { + i += 3; + } + else if ((bytes[i] & 0xc0) == 0xc0) + { + i += 2; + } + else + { + i += 1; + } + } + + char[] cs = new char[length]; + + i = 0; + length = 0; + + while (i < bytes.length) + { + char ch; + + if ((bytes[i] & 0xf0) == 0xf0) + { + int codePoint = ((bytes[i] & 0x03) << 18) | ((bytes[i+1] & 0x3F) << 12) | ((bytes[i+2] & 0x3F) << 6) | (bytes[i+3] & 0x3F); + int U = codePoint - 0x10000; + char W1 = (char)(0xD800 | (U >> 10)); + char W2 = (char)(0xDC00 | (U & 0x3FF)); + cs[length++] = W1; + ch = W2; + i += 4; + } + else if ((bytes[i] & 0xe0) == 0xe0) + { + ch = (char)(((bytes[i] & 0x0f) << 12) + | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)); + i += 3; + } + else if ((bytes[i] & 0xd0) == 0xd0) + { + ch = (char)(((bytes[i] & 0x1f) << 6) | (bytes[i + 1] & 0x3f)); + i += 2; + } + else if ((bytes[i] & 0xc0) == 0xc0) + { + ch = (char)(((bytes[i] & 0x1f) << 6) | (bytes[i + 1] & 0x3f)); + i += 2; + } + else + { + ch = (char)(bytes[i] & 0xff); + i += 1; + } + + cs[length++] = ch; + } + + return new String(cs); + } + + public static byte[] toUTF8ByteArray(String string) + { + return toUTF8ByteArray(string.toCharArray()); + } + + public static byte[] toUTF8ByteArray(char[] string) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + toUTF8ByteArray(string, bOut); + } + catch (IOException e) + { + throw new IllegalStateException("cannot encode string to byte array!"); + } + + return bOut.toByteArray(); + } + + public static void toUTF8ByteArray(char[] string, OutputStream sOut) + throws IOException + { + char[] c = string; + int i = 0; + + while (i < c.length) + { + char ch = c[i]; + + if (ch < 0x0080) + { + sOut.write(ch); + } + else if (ch < 0x0800) + { + sOut.write(0xc0 | (ch >> 6)); + sOut.write(0x80 | (ch & 0x3f)); + } + // surrogate pair + else if (ch >= 0xD800 && ch <= 0xDFFF) + { + // in error - can only happen, if the Java String class has a + // bug. + if (i + 1 >= c.length) + { + throw new IllegalStateException("invalid UTF-16 codepoint"); + } + char W1 = ch; + ch = c[++i]; + char W2 = ch; + // in error - can only happen, if the Java String class has a + // bug. + if (W1 > 0xDBFF) + { + throw new IllegalStateException("invalid UTF-16 codepoint"); + } + int codePoint = (((W1 & 0x03FF) << 10) | (W2 & 0x03FF)) + 0x10000; + sOut.write(0xf0 | (codePoint >> 18)); + sOut.write(0x80 | ((codePoint >> 12) & 0x3F)); + sOut.write(0x80 | ((codePoint >> 6) & 0x3F)); + sOut.write(0x80 | (codePoint & 0x3F)); + } + else + { + sOut.write(0xe0 | (ch >> 12)); + sOut.write(0x80 | ((ch >> 6) & 0x3F)); + sOut.write(0x80 | (ch & 0x3F)); + } + + i++; + } + } + + /** + * A locale independent version of toUpperCase. + * + * @param string input to be converted + * @return a US Ascii uppercase version + */ + public static String toUpperCase(String string) + { + boolean changed = false; + char[] chars = string.toCharArray(); + + for (int i = 0; i != chars.length; i++) + { + char ch = chars[i]; + if ('a' <= ch && 'z' >= ch) + { + changed = true; + chars[i] = (char)(ch - 'a' + 'A'); + } + } + + if (changed) + { + return new String(chars); + } + + return string; + } + + /** + * A locale independent version of toLowerCase. + * + * @param string input to be converted + * @return a US ASCII lowercase version + */ + public static String toLowerCase(String string) + { + boolean changed = false; + char[] chars = string.toCharArray(); + + for (int i = 0; i != chars.length; i++) + { + char ch = chars[i]; + if ('A' <= ch && 'Z' >= ch) + { + changed = true; + chars[i] = (char)(ch - 'A' + 'a'); + } + } + + if (changed) + { + return new String(chars); + } + + return string; + } + + public static byte[] toByteArray(char[] chars) + { + byte[] bytes = new byte[chars.length]; + + for (int i = 0; i != bytes.length; i++) + { + bytes[i] = (byte)chars[i]; + } + + return bytes; + } + + public static byte[] toByteArray(String string) + { + byte[] bytes = new byte[string.length()]; + + for (int i = 0; i != bytes.length; i++) + { + char ch = string.charAt(i); + + bytes[i] = (byte)ch; + } + + return bytes; + } + + /** + * Convert an array of 8 bit characters into a string. + * + * @param bytes 8 bit characters. + * @return resulting String. + */ + public static String fromByteArray(byte[] bytes) + { + return new String(asCharArray(bytes)); + } + + /** + * Do a simple conversion of an array of 8 bit characters into a string. + * + * @param bytes 8 bit characters. + * @return resulting String. + */ + public static char[] asCharArray(byte[] bytes) + { + char[] chars = new char[bytes.length]; + + for (int i = 0; i != chars.length; i++) + { + chars[i] = (char)(bytes[i] & 0xff); + } + + return chars; + } + + public static String[] split(String input, char delimiter) + { + Vector v = new Vector(); + boolean moreTokens = true; + String subString; + + while (moreTokens) + { + int tokenLocation = input.indexOf(delimiter); + if (tokenLocation > 0) + { + subString = input.substring(0, tokenLocation); + v.addElement(subString); + input = input.substring(tokenLocation + 1); + } + else + { + moreTokens = false; + v.addElement(input); + } + } + + String[] res = new String[v.size()]; + + for (int i = 0; i != res.length; i++) + { + res[i] = (String)v.elementAt(i); + } + return res; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/Base64.java b/common/src/main/java/org/bouncycastle/util/encoders/Base64.java new file mode 100644 index 0000000..93fed64 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/Base64.java @@ -0,0 +1,121 @@ +package org.bouncycastle.util.encoders; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public class Base64 +{ + private static final Encoder encoder = new Base64Encoder(); + + /** + * encode the input data producing a base 64 encoded byte array. + * + * @return a byte array containing the base 64 encoded data. + */ + public static byte[] encode( + byte[] data) + { + int len = (data.length + 2) / 3 * 4; + ByteArrayOutputStream bOut = new ByteArrayOutputStream(len); + + try + { + encoder.encode(data, 0, data.length, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception encoding base64 string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * Encode the byte data to base 64 writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int encode( + byte[] data, + OutputStream out) + throws IOException + { + return encoder.encode(data, 0, data.length, out); + } + + /** + * Encode the byte data to base 64 writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int encode( + byte[] data, + int off, + int length, + OutputStream out) + throws IOException + { + return encoder.encode(data, off, length, out); + } + + /** + * decode the base 64 encoded input data. It is assumed the input data is valid. + * + * @return a byte array representing the decoded data. + */ + public static byte[] decode( + byte[] data) + { + int len = data.length / 4 * 3; + ByteArrayOutputStream bOut = new ByteArrayOutputStream(len); + + try + { + encoder.decode(data, 0, data.length, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception decoding base64 string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * decode the base 64 encoded String data - whitespace will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] decode( + String data) + { + int len = data.length() / 4 * 3; + ByteArrayOutputStream bOut = new ByteArrayOutputStream(len); + + try + { + encoder.decode(data, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception decoding base64 string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * decode the base 64 encoded String data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int decode( + String data, + OutputStream out) + throws IOException + { + return encoder.decode(data, out); + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/Base64Encoder.java b/common/src/main/java/org/bouncycastle/util/encoders/Base64Encoder.java new file mode 100644 index 0000000..3edc068 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/Base64Encoder.java @@ -0,0 +1,298 @@ +package org.bouncycastle.util.encoders; + +import java.io.IOException; +import java.io.OutputStream; + +public class Base64Encoder + implements Encoder +{ + protected final byte[] encodingTable = + { + (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G', + (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N', + (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U', + (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z', + (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', + (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', + (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u', + (byte)'v', + (byte)'w', (byte)'x', (byte)'y', (byte)'z', + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', + (byte)'7', (byte)'8', (byte)'9', + (byte)'+', (byte)'/' + }; + + protected byte padding = (byte)'='; + + /* + * set up the decoding table. + */ + protected final byte[] decodingTable = new byte[128]; + + protected void initialiseDecodingTable() + { + for (int i = 0; i < encodingTable.length; i++) + { + decodingTable[encodingTable[i]] = (byte)i; + } + } + + public Base64Encoder() + { + initialiseDecodingTable(); + } + + /** + * encode the input data producing a base 64 output stream. + * + * @return the number of bytes produced. + */ + public int encode( + byte[] data, + int off, + int length, + OutputStream out) + throws IOException + { + int modulus = length % 3; + int dataLength = (length - modulus); + int a1, a2, a3; + + for (int i = off; i < off + dataLength; i += 3) + { + a1 = data[i] & 0xff; + a2 = data[i + 1] & 0xff; + a3 = data[i + 2] & 0xff; + + out.write(encodingTable[(a1 >>> 2) & 0x3f]); + out.write(encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f]); + out.write(encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f]); + out.write(encodingTable[a3 & 0x3f]); + } + + /* + * process the tail end. + */ + int b1, b2, b3; + int d1, d2; + + switch (modulus) + { + case 0: /* nothing left to do */ + break; + case 1: + d1 = data[off + dataLength] & 0xff; + b1 = (d1 >>> 2) & 0x3f; + b2 = (d1 << 4) & 0x3f; + + out.write(encodingTable[b1]); + out.write(encodingTable[b2]); + out.write(padding); + out.write(padding); + break; + case 2: + d1 = data[off + dataLength] & 0xff; + d2 = data[off + dataLength + 1] & 0xff; + + b1 = (d1 >>> 2) & 0x3f; + b2 = ((d1 << 4) | (d2 >>> 4)) & 0x3f; + b3 = (d2 << 2) & 0x3f; + + out.write(encodingTable[b1]); + out.write(encodingTable[b2]); + out.write(encodingTable[b3]); + out.write(padding); + break; + } + + return (dataLength / 3) * 4 + ((modulus == 0) ? 0 : 4); + } + + private boolean ignore( + char c) + { + return (c == '\n' || c =='\r' || c == '\t' || c == ' '); + } + + /** + * decode the base 64 encoded byte data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int decode( + byte[] data, + int off, + int length, + OutputStream out) + throws IOException + { + byte b1, b2, b3, b4; + int outLen = 0; + + int end = off + length; + + while (end > off) + { + if (!ignore((char)data[end - 1])) + { + break; + } + + end--; + } + + int i = off; + int finish = end - 4; + + i = nextI(data, i, finish); + + while (i < finish) + { + b1 = decodingTable[data[i++]]; + + i = nextI(data, i, finish); + + b2 = decodingTable[data[i++]]; + + i = nextI(data, i, finish); + + b3 = decodingTable[data[i++]]; + + i = nextI(data, i, finish); + + b4 = decodingTable[data[i++]]; + + out.write((b1 << 2) | (b2 >> 4)); + out.write((b2 << 4) | (b3 >> 2)); + out.write((b3 << 6) | b4); + + outLen += 3; + + i = nextI(data, i, finish); + } + + outLen += decodeLastBlock(out, (char)data[end - 4], (char)data[end - 3], (char)data[end - 2], (char)data[end - 1]); + + return outLen; + } + + private int nextI(byte[] data, int i, int finish) + { + while ((i < finish) && ignore((char)data[i])) + { + i++; + } + return i; + } + + /** + * decode the base 64 encoded String data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int decode( + String data, + OutputStream out) + throws IOException + { + byte b1, b2, b3, b4; + int length = 0; + + int end = data.length(); + + while (end > 0) + { + if (!ignore(data.charAt(end - 1))) + { + break; + } + + end--; + } + + int i = 0; + int finish = end - 4; + + i = nextI(data, i, finish); + + while (i < finish) + { + b1 = decodingTable[data.charAt(i++)]; + + i = nextI(data, i, finish); + + b2 = decodingTable[data.charAt(i++)]; + + i = nextI(data, i, finish); + + b3 = decodingTable[data.charAt(i++)]; + + i = nextI(data, i, finish); + + b4 = decodingTable[data.charAt(i++)]; + + out.write((b1 << 2) | (b2 >> 4)); + out.write((b2 << 4) | (b3 >> 2)); + out.write((b3 << 6) | b4); + + length += 3; + + i = nextI(data, i, finish); + } + + length += decodeLastBlock(out, data.charAt(end - 4), data.charAt(end - 3), data.charAt(end - 2), data.charAt(end - 1)); + + return length; + } + + private int decodeLastBlock(OutputStream out, char c1, char c2, char c3, char c4) + throws IOException + { + byte b1, b2, b3, b4; + + if (c3 == padding) + { + b1 = decodingTable[c1]; + b2 = decodingTable[c2]; + + out.write((b1 << 2) | (b2 >> 4)); + + return 1; + } + else if (c4 == padding) + { + b1 = decodingTable[c1]; + b2 = decodingTable[c2]; + b3 = decodingTable[c3]; + + out.write((b1 << 2) | (b2 >> 4)); + out.write((b2 << 4) | (b3 >> 2)); + + return 2; + } + else + { + b1 = decodingTable[c1]; + b2 = decodingTable[c2]; + b3 = decodingTable[c3]; + b4 = decodingTable[c4]; + + out.write((b1 << 2) | (b2 >> 4)); + out.write((b2 << 4) | (b3 >> 2)); + out.write((b3 << 6) | b4); + + return 3; + } + } + + private int nextI(String data, int i, int finish) + { + while ((i < finish) && ignore(data.charAt(i))) + { + i++; + } + return i; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/BufferedDecoder.java b/common/src/main/java/org/bouncycastle/util/encoders/BufferedDecoder.java new file mode 100644 index 0000000..672430a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/BufferedDecoder.java @@ -0,0 +1,96 @@ +package org.bouncycastle.util.encoders; + + +/** + * a buffering class to allow translation from one format to another to + * be done in discrete chunks. + */ +public class BufferedDecoder +{ + protected byte[] buf; + protected int bufOff; + + protected Translator translator; + + /** + * @param translator the translator to use. + * @param bufSize amount of input to buffer for each chunk. + */ + public BufferedDecoder( + Translator translator, + int bufSize) + { + this.translator = translator; + + if ((bufSize % translator.getEncodedBlockSize()) != 0) + { + throw new IllegalArgumentException("buffer size not multiple of input block size"); + } + + buf = new byte[bufSize]; + bufOff = 0; + } + + public int processByte( + byte in, + byte[] out, + int outOff) + { + int resultLen = 0; + + buf[bufOff++] = in; + + if (bufOff == buf.length) + { + resultLen = translator.decode(buf, 0, buf.length, out, outOff); + bufOff = 0; + } + + return resultLen; + } + + public int processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int resultLen = 0; + int gapLen = buf.length - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += translator.decode(buf, 0, buf.length, out, outOff); + + bufOff = 0; + + len -= gapLen; + inOff += gapLen; + outOff += resultLen; + + int chunkSize = len - (len % buf.length); + + resultLen += translator.decode(in, inOff, chunkSize, out, outOff); + + len -= chunkSize; + inOff += chunkSize; + } + + if (len != 0) + { + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + return resultLen; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/BufferedEncoder.java b/common/src/main/java/org/bouncycastle/util/encoders/BufferedEncoder.java new file mode 100644 index 0000000..107eee8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/BufferedEncoder.java @@ -0,0 +1,96 @@ +package org.bouncycastle.util.encoders; + + +/** + * a buffering class to allow translation from one format to another to + * be done in discrete chunks. + */ +public class BufferedEncoder +{ + protected byte[] buf; + protected int bufOff; + + protected Translator translator; + + /** + * @param translator the translator to use. + * @param bufSize amount of input to buffer for each chunk. + */ + public BufferedEncoder( + Translator translator, + int bufSize) + { + this.translator = translator; + + if ((bufSize % translator.getEncodedBlockSize()) != 0) + { + throw new IllegalArgumentException("buffer size not multiple of input block size"); + } + + buf = new byte[bufSize]; + bufOff = 0; + } + + public int processByte( + byte in, + byte[] out, + int outOff) + { + int resultLen = 0; + + buf[bufOff++] = in; + + if (bufOff == buf.length) + { + resultLen = translator.encode(buf, 0, buf.length, out, outOff); + bufOff = 0; + } + + return resultLen; + } + + public int processBytes( + byte[] in, + int inOff, + int len, + byte[] out, + int outOff) + { + if (len < 0) + { + throw new IllegalArgumentException("Can't have a negative input length!"); + } + + int resultLen = 0; + int gapLen = buf.length - bufOff; + + if (len > gapLen) + { + System.arraycopy(in, inOff, buf, bufOff, gapLen); + + resultLen += translator.encode(buf, 0, buf.length, out, outOff); + + bufOff = 0; + + len -= gapLen; + inOff += gapLen; + outOff += resultLen; + + int chunkSize = len - (len % buf.length); + + resultLen += translator.encode(in, inOff, chunkSize, out, outOff); + + len -= chunkSize; + inOff += chunkSize; + } + + if (len != 0) + { + System.arraycopy(in, inOff, buf, bufOff, len); + + bufOff += len; + } + + return resultLen; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/Encoder.java b/common/src/main/java/org/bouncycastle/util/encoders/Encoder.java new file mode 100644 index 0000000..b066121 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/Encoder.java @@ -0,0 +1,17 @@ +package org.bouncycastle.util.encoders; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Encode and decode byte arrays (typically from binary to 7-bit ASCII + * encodings). + */ +public interface Encoder +{ + int encode(byte[] data, int off, int length, OutputStream out) throws IOException; + + int decode(byte[] data, int off, int length, OutputStream out) throws IOException; + + int decode(String data, OutputStream out) throws IOException; +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/Hex.java b/common/src/main/java/org/bouncycastle/util/encoders/Hex.java new file mode 100644 index 0000000..d69f773 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/Hex.java @@ -0,0 +1,131 @@ +package org.bouncycastle.util.encoders; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public class Hex +{ + private static final Encoder encoder = new HexEncoder(); + + /** + * encode the input data producing a Hex encoded byte array. + * + * @return a byte array containing the Hex encoded data. + */ + public static byte[] encode( + byte[] data) + { + return encode(data, 0, data.length); + } + + /** + * encode the input data producing a Hex encoded byte array. + * + * @return a byte array containing the Hex encoded data. + */ + public static byte[] encode( + byte[] data, + int off, + int length) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + encoder.encode(data, off, length, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception encoding Hex string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * Hex encode the byte data writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int encode( + byte[] data, + OutputStream out) + throws IOException + { + return encoder.encode(data, 0, data.length, out); + } + + /** + * Hex encode the byte data writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int encode( + byte[] data, + int off, + int length, + OutputStream out) + throws IOException + { + return encoder.encode(data, off, length, out); + } + + /** + * decode the Hex encoded input data. It is assumed the input data is valid. + * + * @return a byte array representing the decoded data. + */ + public static byte[] decode( + byte[] data) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + encoder.decode(data, 0, data.length, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception decoding Hex string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * decode the Hex encoded String data - whitespace will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] decode( + String data) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + encoder.decode(data, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception decoding Hex string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * decode the Hex encoded String data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int decode( + String data, + OutputStream out) + throws IOException + { + return encoder.decode(data, out); + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/HexEncoder.java b/common/src/main/java/org/bouncycastle/util/encoders/HexEncoder.java new file mode 100644 index 0000000..0dcae29 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/HexEncoder.java @@ -0,0 +1,172 @@ +package org.bouncycastle.util.encoders; + +import java.io.IOException; +import java.io.OutputStream; + +public class HexEncoder + implements Encoder +{ + protected final byte[] encodingTable = + { + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', + (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f' + }; + + /* + * set up the decoding table. + */ + protected final byte[] decodingTable = new byte[128]; + + protected void initialiseDecodingTable() + { + for (int i = 0; i < encodingTable.length; i++) + { + decodingTable[encodingTable[i]] = (byte)i; + } + + decodingTable['A'] = decodingTable['a']; + decodingTable['B'] = decodingTable['b']; + decodingTable['C'] = decodingTable['c']; + decodingTable['D'] = decodingTable['d']; + decodingTable['E'] = decodingTable['e']; + decodingTable['F'] = decodingTable['f']; + } + + public HexEncoder() + { + initialiseDecodingTable(); + } + + /** + * encode the input data producing a Hex output stream. + * + * @return the number of bytes produced. + */ + public int encode( + byte[] data, + int off, + int length, + OutputStream out) + throws IOException + { + for (int i = off; i < (off + length); i++) + { + int v = data[i] & 0xff; + + out.write(encodingTable[(v >>> 4)]); + out.write(encodingTable[v & 0xf]); + } + + return length * 2; + } + + private boolean ignore( + char c) + { + return (c == '\n' || c =='\r' || c == '\t' || c == ' '); + } + + /** + * decode the Hex encoded byte data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int decode( + byte[] data, + int off, + int length, + OutputStream out) + throws IOException + { + byte b1, b2; + int outLen = 0; + + int end = off + length; + + while (end > off) + { + if (!ignore((char)data[end - 1])) + { + break; + } + + end--; + } + + int i = off; + while (i < end) + { + while (i < end && ignore((char)data[i])) + { + i++; + } + + b1 = decodingTable[data[i++]]; + + while (i < end && ignore((char)data[i])) + { + i++; + } + + b2 = decodingTable[data[i++]]; + + out.write((b1 << 4) | b2); + + outLen++; + } + + return outLen; + } + + /** + * decode the Hex encoded String data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public int decode( + String data, + OutputStream out) + throws IOException + { + byte b1, b2; + int length = 0; + + int end = data.length(); + + while (end > 0) + { + if (!ignore(data.charAt(end - 1))) + { + break; + } + + end--; + } + + int i = 0; + while (i < end) + { + while (i < end && ignore(data.charAt(i))) + { + i++; + } + + b1 = decodingTable[data.charAt(i++)]; + + while (i < end && ignore(data.charAt(i))) + { + i++; + } + + b2 = decodingTable[data.charAt(i++)]; + + out.write((b1 << 4) | b2); + + length++; + } + + return length; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/HexTranslator.java b/common/src/main/java/org/bouncycastle/util/encoders/HexTranslator.java new file mode 100644 index 0000000..3fff65a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/HexTranslator.java @@ -0,0 +1,87 @@ +package org.bouncycastle.util.encoders; + +/** + * Converters for going from hex to binary and back. Note: this class assumes ASCII processing. + */ +public class HexTranslator + implements Translator +{ + private static final byte[] hexTable = + { + (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', + (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f' + }; + + /** + * size of the output block on encoding produced by getDecodedBlockSize() + * bytes. + */ + public int getEncodedBlockSize() + { + return 2; + } + + public int encode( + byte[] in, + int inOff, + int length, + byte[] out, + int outOff) + { + for (int i = 0, j = 0; i < length; i++, j += 2) + { + out[outOff + j] = hexTable[(in[inOff] >> 4) & 0x0f]; + out[outOff + j + 1] = hexTable[in[inOff] & 0x0f]; + + inOff++; + } + + return length * 2; + } + + /** + * size of the output block on decoding produced by getEncodedBlockSize() + * bytes. + */ + public int getDecodedBlockSize() + { + return 1; + } + + public int decode( + byte[] in, + int inOff, + int length, + byte[] out, + int outOff) + { + int halfLength = length / 2; + byte left, right; + for (int i = 0; i < halfLength; i++) + { + left = in[inOff + i * 2]; + right = in[inOff + i * 2 + 1]; + + if (left < (byte)'a') + { + out[outOff] = (byte)((left - '0') << 4); + } + else + { + out[outOff] = (byte)((left - 'a' + 10) << 4); + } + if (right < (byte)'a') + { + out[outOff] += (byte)(right - '0'); + } + else + { + out[outOff] += (byte)(right - 'a' + 10); + } + + outOff++; + } + + return halfLength; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/Translator.java b/common/src/main/java/org/bouncycastle/util/encoders/Translator.java new file mode 100644 index 0000000..a3a0cb8 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/Translator.java @@ -0,0 +1,23 @@ +package org.bouncycastle.util.encoders; + +/** + * general interface for an translator. + */ +public interface Translator +{ + /** + * size of the output block on encoding produced by getDecodedBlockSize() + * bytes. + */ + public int getEncodedBlockSize(); + + public int encode(byte[] in, int inOff, int length, byte[] out, int outOff); + + /** + * size of the output block on decoding produced by getEncodedBlockSize() + * bytes. + */ + public int getDecodedBlockSize(); + + public int decode(byte[] in, int inOff, int length, byte[] out, int outOff); +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/UrlBase64.java b/common/src/main/java/org/bouncycastle/util/encoders/UrlBase64.java new file mode 100644 index 0000000..a22d94a --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/UrlBase64.java @@ -0,0 +1,129 @@ +package org.bouncycastle.util.encoders; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +/** + * Convert binary data to and from UrlBase64 encoding. This is identical to + * Base64 encoding, except that the padding character is "." and the other + * non-alphanumeric characters are "-" and "_" instead of "+" and "/". + *

        + * The purpose of UrlBase64 encoding is to provide a compact encoding of binary + * data that is safe for use as an URL parameter. Base64 encoding does not + * produce encoded values that are safe for use in URLs, since "/" can be + * interpreted as a path delimiter; "+" is the encoded form of a space; and + * "=" is used to separate a name from the corresponding value in an URL + * parameter. + */ +public class UrlBase64 +{ + private static final Encoder encoder = new UrlBase64Encoder(); + + /** + * Encode the input data producing a URL safe base 64 encoded byte array. + * + * @return a byte array containing the URL safe base 64 encoded data. + */ + public static byte[] encode( + byte[] data) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + encoder.encode(data, 0, data.length, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception encoding URL safe base64 string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * Encode the byte data writing it to the given output stream. + * + * @return the number of bytes produced. + */ + public static int encode( + byte[] data, + OutputStream out) + throws IOException + { + return encoder.encode(data, 0, data.length, out); + } + + /** + * Decode the URL safe base 64 encoded input data - white space will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] decode( + byte[] data) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + encoder.decode(data, 0, data.length, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception decoding URL safe base64 string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * decode the URL safe base 64 encoded byte data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int decode( + byte[] data, + OutputStream out) + throws IOException + { + return encoder.decode(data, 0, data.length, out); + } + + /** + * decode the URL safe base 64 encoded String data - whitespace will be ignored. + * + * @return a byte array representing the decoded data. + */ + public static byte[] decode( + String data) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + encoder.decode(data, bOut); + } + catch (IOException e) + { + throw new RuntimeException("exception decoding URL safe base64 string: " + e); + } + + return bOut.toByteArray(); + } + + /** + * Decode the URL safe base 64 encoded String data writing it to the given output stream, + * whitespace characters will be ignored. + * + * @return the number of bytes produced. + */ + public static int decode( + String data, + OutputStream out) + throws IOException + { + return encoder.decode(data, out); + } +} diff --git a/common/src/main/java/org/bouncycastle/util/encoders/UrlBase64Encoder.java b/common/src/main/java/org/bouncycastle/util/encoders/UrlBase64Encoder.java new file mode 100644 index 0000000..a5fff5e --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/encoders/UrlBase64Encoder.java @@ -0,0 +1,25 @@ +package org.bouncycastle.util.encoders; + +/** + * Convert binary data to and from UrlBase64 encoding. This is identical to + * Base64 encoding, except that the padding character is "." and the other + * non-alphanumeric characters are "-" and "_" instead of "+" and "/". + *

        + * The purpose of UrlBase64 encoding is to provide a compact encoding of binary + * data that is safe for use as an URL parameter. Base64 encoding does not + * produce encoded values that are safe for use in URLs, since "/" can be + * interpreted as a path delimiter; "+" is the encoded form of a space; and + * "=" is used to separate a name from the corresponding value in an URL + * parameter. + */ +public class UrlBase64Encoder extends Base64Encoder +{ + public UrlBase64Encoder() + { + encodingTable[encodingTable.length - 2] = (byte) '-'; + encodingTable[encodingTable.length - 1] = (byte) '_'; + padding = (byte) '.'; + // we must re-create the decoding table with the new encoded values. + initialiseDecodingTable(); + } +} diff --git a/common/src/main/java/org/bouncycastle/util/io/StreamOverflowException.java b/common/src/main/java/org/bouncycastle/util/io/StreamOverflowException.java new file mode 100644 index 0000000..01af8da --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/io/StreamOverflowException.java @@ -0,0 +1,12 @@ +package org.bouncycastle.util.io; + +import java.io.IOException; + +public class StreamOverflowException + extends IOException +{ + public StreamOverflowException(String msg) + { + super(msg); + } +} diff --git a/common/src/main/java/org/bouncycastle/util/io/Streams.java b/common/src/main/java/org/bouncycastle/util/io/Streams.java new file mode 100644 index 0000000..41560b5 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/io/Streams.java @@ -0,0 +1,87 @@ +package org.bouncycastle.util.io; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public final class Streams +{ + private static int BUFFER_SIZE = 512; + + public static void drain(InputStream inStr) + throws IOException + { + byte[] bs = new byte[BUFFER_SIZE]; + while (inStr.read(bs, 0, bs.length) >= 0) + { + } + } + + public static byte[] readAll(InputStream inStr) + throws IOException + { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + pipeAll(inStr, buf); + return buf.toByteArray(); + } + + public static byte[] readAllLimited(InputStream inStr, int limit) + throws IOException + { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + pipeAllLimited(inStr, limit, buf); + return buf.toByteArray(); + } + + public static int readFully(InputStream inStr, byte[] buf) + throws IOException + { + return readFully(inStr, buf, 0, buf.length); + } + + public static int readFully(InputStream inStr, byte[] buf, int off, int len) + throws IOException + { + int totalRead = 0; + while (totalRead < len) + { + int numRead = inStr.read(buf, off + totalRead, len - totalRead); + if (numRead < 0) + { + break; + } + totalRead += numRead; + } + return totalRead; + } + + public static void pipeAll(InputStream inStr, OutputStream outStr) + throws IOException + { + byte[] bs = new byte[BUFFER_SIZE]; + int numRead; + while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) + { + outStr.write(bs, 0, numRead); + } + } + + public static long pipeAllLimited(InputStream inStr, long limit, OutputStream outStr) + throws IOException + { + long total = 0; + byte[] bs = new byte[BUFFER_SIZE]; + int numRead; + while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) + { + total += numRead; + if (total > limit) + { + throw new StreamOverflowException("Data Overflow"); + } + outStr.write(bs, 0, numRead); + } + return total; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/io/TeeInputStream.java b/common/src/main/java/org/bouncycastle/util/io/TeeInputStream.java new file mode 100644 index 0000000..9154246 --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/io/TeeInputStream.java @@ -0,0 +1,62 @@ +package org.bouncycastle.util.io; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class TeeInputStream + extends InputStream +{ + private final InputStream input; + private final OutputStream output; + + public TeeInputStream(InputStream input, OutputStream output) + { + this.input = input; + this.output = output; + } + + public int read(byte[] buf) + throws IOException + { + return read(buf, 0, buf.length); + } + + public int read(byte[] buf, int off, int len) + throws IOException + { + int i = input.read(buf, off, len); + + if (i > 0) + { + output.write(buf, off, i); + } + + return i; + } + + public int read() + throws IOException + { + int i = input.read(); + + if (i >= 0) + { + output.write(i); + } + + return i; + } + + public void close() + throws IOException + { + this.input.close(); + this.output.close(); + } + + public OutputStream getOutputStream() + { + return output; + } +} diff --git a/common/src/main/java/org/bouncycastle/util/io/TeeOutputStream.java b/common/src/main/java/org/bouncycastle/util/io/TeeOutputStream.java new file mode 100644 index 0000000..a4919cd --- /dev/null +++ b/common/src/main/java/org/bouncycastle/util/io/TeeOutputStream.java @@ -0,0 +1,52 @@ +package org.bouncycastle.util.io; + +import java.io.IOException; +import java.io.OutputStream; + +public class TeeOutputStream + extends OutputStream +{ + private OutputStream output1; + private OutputStream output2; + + public TeeOutputStream(OutputStream output1, OutputStream output2) + { + this.output1 = output1; + this.output2 = output2; + } + + public void write(byte[] buf) + throws IOException + { + this.output1.write(buf); + this.output2.write(buf); + } + + public void write(byte[] buf, int off, int len) + throws IOException + { + this.output1.write(buf, off, len); + this.output2.write(buf, off, len); + } + + public void write(int b) + throws IOException + { + this.output1.write(b); + this.output2.write(b); + } + + public void flush() + throws IOException + { + this.output1.flush(); + this.output2.flush(); + } + + public void close() + throws IOException + { + this.output1.close(); + this.output2.close(); + } +} \ No newline at end of file diff --git a/common/src/main/resources/com/codename1/crypto/package.html b/common/src/main/resources/com/codename1/crypto/package.html new file mode 100644 index 0000000..3e5f941 --- /dev/null +++ b/common/src/main/resources/com/codename1/crypto/package.html @@ -0,0 +1,9 @@ + + + + Crypto package + + +

        Provides common cryptographic use cases such as encrypted filesystem as a simplified API facade

        + + diff --git a/common/src/main/resources/org/bouncycastle/asn1/package.html b/common/src/main/resources/org/bouncycastle/asn1/package.html new file mode 100644 index 0000000..1ac16a5 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/asn1/package.html @@ -0,0 +1,5 @@ + + +A library for parsing and writing ASN.1 objects. Support is provided for DER and BER encoding. + + diff --git a/common/src/main/resources/org/bouncycastle/asn1/pkcs/package.html b/common/src/main/resources/org/bouncycastle/asn1/pkcs/package.html new file mode 100644 index 0000000..ab800f4 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/asn1/pkcs/package.html @@ -0,0 +1,5 @@ + + +Support classes useful for encoding and supporting the various RSA PKCS documents. + + diff --git a/common/src/main/resources/org/bouncycastle/asn1/sec/package.html b/common/src/main/resources/org/bouncycastle/asn1/sec/package.html new file mode 100644 index 0000000..5e34dec --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/asn1/sec/package.html @@ -0,0 +1,5 @@ + + +Classes for support of the SEC standard for Elliptic Curve. + + diff --git a/common/src/main/resources/org/bouncycastle/asn1/util/package.html b/common/src/main/resources/org/bouncycastle/asn1/util/package.html new file mode 100644 index 0000000..1db893d --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/asn1/util/package.html @@ -0,0 +1,5 @@ + + +An ASN.1 dump utility. + + diff --git a/common/src/main/resources/org/bouncycastle/asn1/x509/package.html b/common/src/main/resources/org/bouncycastle/asn1/x509/package.html new file mode 100644 index 0000000..728921a --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/asn1/x509/package.html @@ -0,0 +1,5 @@ + + +Support classes useful for encoding and processing X.509 certificates. + + diff --git a/common/src/main/resources/org/bouncycastle/asn1/x509/qualified/package.html b/common/src/main/resources/org/bouncycastle/asn1/x509/qualified/package.html new file mode 100644 index 0000000..28cfef9 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/asn1/x509/qualified/package.html @@ -0,0 +1,5 @@ + + +Support classes useful for encoding and processing messages based around RFC3739 + + diff --git a/common/src/main/resources/org/bouncycastle/asn1/x9/package.html b/common/src/main/resources/org/bouncycastle/asn1/x9/package.html new file mode 100644 index 0000000..42fc97c --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/asn1/x9/package.html @@ -0,0 +1,5 @@ + + +Support classes useful for encoding and supporting X9.62 elliptic curve. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/agreement/package.html b/common/src/main/resources/org/bouncycastle/crypto/agreement/package.html new file mode 100644 index 0000000..4b49331 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/agreement/package.html @@ -0,0 +1,5 @@ + + +Basic key agreement classes. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/digests/package.html b/common/src/main/resources/org/bouncycastle/crypto/digests/package.html new file mode 100644 index 0000000..0a0d95c --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/digests/package.html @@ -0,0 +1,5 @@ + + +Message digest classes. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/encodings/package.html b/common/src/main/resources/org/bouncycastle/crypto/encodings/package.html new file mode 100644 index 0000000..fc56f63 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/encodings/package.html @@ -0,0 +1,5 @@ + + +Block encodings for asymmetric ciphers. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/engines/package.html b/common/src/main/resources/org/bouncycastle/crypto/engines/package.html new file mode 100644 index 0000000..e945dac --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/engines/package.html @@ -0,0 +1,5 @@ + + +Basic cipher classes. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/generators/package.html b/common/src/main/resources/org/bouncycastle/crypto/generators/package.html new file mode 100644 index 0000000..9d73ce3 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/generators/package.html @@ -0,0 +1,5 @@ + + +Generators for keys, key pairs and password based encryption algorithms. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/io/package.html b/common/src/main/resources/org/bouncycastle/crypto/io/package.html new file mode 100644 index 0000000..f2c9e40 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/io/package.html @@ -0,0 +1,5 @@ + + +Classes for doing "enhanced" I/O with Digests and MACs. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/macs/package.html b/common/src/main/resources/org/bouncycastle/crypto/macs/package.html new file mode 100644 index 0000000..0b1f86d --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/macs/package.html @@ -0,0 +1,5 @@ + + +Classes for creating MACs and HMACs. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/modes/package.html b/common/src/main/resources/org/bouncycastle/crypto/modes/package.html new file mode 100644 index 0000000..5402df4 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/modes/package.html @@ -0,0 +1,5 @@ + + +Modes for symmetric ciphers. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/package.html b/common/src/main/resources/org/bouncycastle/crypto/package.html new file mode 100644 index 0000000..ee5487f --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/package.html @@ -0,0 +1,5 @@ + + +Base classes for the lightweight API. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/paddings/package.html b/common/src/main/resources/org/bouncycastle/crypto/paddings/package.html new file mode 100644 index 0000000..2b82e60 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/paddings/package.html @@ -0,0 +1,5 @@ + + +Paddings for symmetric ciphers. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/params/package.html b/common/src/main/resources/org/bouncycastle/crypto/params/package.html new file mode 100644 index 0000000..4e00a75 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/params/package.html @@ -0,0 +1,5 @@ + + +Classes for parameter objects for ciphers and generators. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/prng/package.html b/common/src/main/resources/org/bouncycastle/crypto/prng/package.html new file mode 100644 index 0000000..99525fb --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/prng/package.html @@ -0,0 +1,5 @@ + + +Lightweight psuedo-random number generators. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/signers/package.html b/common/src/main/resources/org/bouncycastle/crypto/signers/package.html new file mode 100644 index 0000000..151d3d5 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/signers/package.html @@ -0,0 +1,5 @@ + + +Basic signers. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/tls/package.html b/common/src/main/resources/org/bouncycastle/crypto/tls/package.html new file mode 100644 index 0000000..ee59f8a --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/tls/package.html @@ -0,0 +1,5 @@ + + +A lightweight TLS API. + + diff --git a/common/src/main/resources/org/bouncycastle/crypto/util/package.html b/common/src/main/resources/org/bouncycastle/crypto/util/package.html new file mode 100644 index 0000000..787b892 --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/crypto/util/package.html @@ -0,0 +1,5 @@ + + +Some general utility/conversion classes. + + diff --git a/common/src/main/resources/org/bouncycastle/math/ec/package.html b/common/src/main/resources/org/bouncycastle/math/ec/package.html new file mode 100644 index 0000000..a02605b --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/math/ec/package.html @@ -0,0 +1,5 @@ + + +Math support for Elliptic Curve. + + diff --git a/common/src/main/resources/org/bouncycastle/oiw/package.html b/common/src/main/resources/org/bouncycastle/oiw/package.html new file mode 100644 index 0000000..44eb2fe --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/oiw/package.html @@ -0,0 +1,5 @@ + + +Objects and OID for the support of ISO OIW. + + diff --git a/common/src/main/resources/org/bouncycastle/util/encoders/package.html b/common/src/main/resources/org/bouncycastle/util/encoders/package.html new file mode 100644 index 0000000..3be222b --- /dev/null +++ b/common/src/main/resources/org/bouncycastle/util/encoders/package.html @@ -0,0 +1,5 @@ + + +Classes for producing and reading Base64 and Hex strings. + + diff --git a/common/src/test/java/com/codenameone/FilechooserTest.java b/common/src/test/java/com/codenameone/FilechooserTest.java new file mode 100644 index 0000000..82615b3 --- /dev/null +++ b/common/src/test/java/com/codenameone/FilechooserTest.java @@ -0,0 +1,21 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.codenameone; + +import com.codename1.testing.AbstractTest; + +/** + * + * @author shannah + */ +public class FilechooserTest extends AbstractTest { + + @Override + public boolean runTest() throws Exception { + return true; + } + +} diff --git a/ios/bouncy-castle-ios.iml b/ios/bouncy-castle-ios.iml new file mode 100644 index 0000000..3a04f87 --- /dev/null +++ b/ios/bouncy-castle-ios.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ios/pom.xml b/ios/pom.xml new file mode 100644 index 0000000..303c3b0 --- /dev/null +++ b/ios/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle + 1.0 + + com.codenameone + bouncy-castle-ios + 1.0 + + bouncy-castle-ios + + + + src/main/objectivec + + + src/main/resources + + + + + + + ${project.groupId} + ${cn1lib.name}-common + ${project.version} + + + + + diff --git a/javascript/bouncy-castle-javascript.iml b/javascript/bouncy-castle-javascript.iml new file mode 100644 index 0000000..98fcddc --- /dev/null +++ b/javascript/bouncy-castle-javascript.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/javascript/pom.xml b/javascript/pom.xml new file mode 100644 index 0000000..2cf0599 --- /dev/null +++ b/javascript/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle + 1.0 + + com.codenameone + bouncy-castle-javascript + 1.0 + + bouncy-castle-javascript + + + + src/main/javascript + + + src/main/resources + + + + + + + ${project.groupId} + ${cn1lib.name}-common + ${project.version} + + + + + diff --git a/javase/bouncy-castle-javase.iml b/javase/bouncy-castle-javase.iml new file mode 100644 index 0000000..c213606 --- /dev/null +++ b/javase/bouncy-castle-javase.iml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/javase/pom.xml b/javase/pom.xml new file mode 100644 index 0000000..a9b988a --- /dev/null +++ b/javase/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle + 1.0 + + com.codenameone + bouncy-castle-javase + 1.0 + + bouncy-castle-javase + + + UTF-8 + 1.8 + 1.8 + + + + + + + com.codenameone + codenameone-javase + provided + + + ${project.groupId} + ${cn1lib.name}-common + ${project.version} + + + + + + diff --git a/lib/bouncy-castle-lib.iml b/lib/bouncy-castle-lib.iml new file mode 100644 index 0000000..918bb76 --- /dev/null +++ b/lib/bouncy-castle-lib.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/pom.xml b/lib/pom.xml new file mode 100644 index 0000000..8bba7d9 --- /dev/null +++ b/lib/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle + 1.0 + + com.codenameone + bouncy-castle-lib + 1.0 + pom + bouncy-castle-lib + + + UTF-8 + 1.8 + 1.8 + + + + + + + ${project.groupId} + ${cn1lib.name}-common + ${project.version} + + + ${project.groupId} + ${cn1lib.name}-common + ${project.version} + cn1css + zip + + + + + + javase + + + codename1.platform + javase + + + + + ${project.groupId} + ${cn1lib.name}-javase + ${project.version} + + + + + javascript + + + codename1.platform + javascript + + + + + ${project.groupId} + ${cn1lib.name}-javascript + ${project.version} + + + + + ios + + + codename1.platform + ios + + + + + ${project.groupId} + ${cn1lib.name}-ios + ${project.version} + + + + + win + + + codename1.platform + win + + + + + ${project.groupId} + ${cn1lib.name}-win + ${project.version} + + + + + android + + + codename1.platform + android + + + + + ${project.groupId} + ${cn1lib.name}-android + ${project.version} + + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3fa7f35 --- /dev/null +++ b/pom.xml @@ -0,0 +1,267 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle + 1.0 + pom + + bouncy-castle + Codename One bouncy-castle library + https://www.codenameone.com + + + + GPL v2 With Classpath Exception + https://openjdk.java.net/legal/gplv2+ce.html + repo + A business-friendly OSS license + + + + + + shannah78 + Steve Hannah + steve.hannah@codenameone.com + -8 + + + + + + https://github.com/codenameone/:bouncy-castle-codenameone-lib + scm:git:git@github.com:codenameone/:bouncy-castle-codenameone-lib.git + + + + + + 7.0.38 + 7.0.38 + UTF-8 + + 1.8 + 11 + 3.8.0 + 8 + 8 + bouncy-castle + 1.3.72 + true + + + common + android + ios + javascript + javase + win + lib + tests + + + + + com.codenameone + codenameone-core + ${cn1.version} + + + com.codenameone + codenameone-javase + ${cn1.version} + + + org.jetbrains.kotlin + kotlin-stdlib + ${kotlin.version} + + + + + + org.jetbrains + annotations + 13.0 + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + + compile + + + + ${project.basedir}/src/main/kotlin + ${project.basedir}/src/main/java + + + + + test-compile + + test-compile + + + + ${project.basedir}/src/test/kotlin + ${project.basedir}/src/test/java + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + + com.codenameone + codenameone-maven-plugin + ${cn1.plugin.version} + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9 + + + build-javadoc + + jar + + post-integration-test + + true + + + + + + 1.8 + protected + false + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + + + + + + + + sign-artifacts + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.4 + + + sign-artifacts + verify + + sign + + + ${gpg.passphrase} + + + + + + + + + + + nexus-staging + Nexus Release Repository + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + diff --git a/print-version.sh b/print-version.sh new file mode 100644 index 0000000..3a2adc6 --- /dev/null +++ b/print-version.sh @@ -0,0 +1,15 @@ +#!/bin/bash +#Prints the current project version +# +# Created by Steve Hannah +# Creation Date March 19, 2021 +# Usage: bash print-version.sh +# Output Example: 7.0.13-SNAPSHOT +SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" +cd $SCRIPTPATH +regex='bouncy-castle (.*):$' + +LINE=$(mvn validate | grep "Reactor Summary") +[[ $LINE =~ $regex ]] + +echo "${BASH_REMATCH[1]}" diff --git a/tests/.mvn/jvm.config b/tests/.mvn/jvm.config new file mode 100644 index 0000000..e69de29 diff --git a/tests/bouncy-castle-tests.iml b/tests/bouncy-castle-tests.iml new file mode 100644 index 0000000..f409c0e --- /dev/null +++ b/tests/bouncy-castle-tests.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/common/bouncy-castle-tests-common.iml b/tests/common/bouncy-castle-tests-common.iml new file mode 100644 index 0000000..4f95a03 --- /dev/null +++ b/tests/common/bouncy-castle-tests-common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/common/codenameone_settings.properties b/tests/common/codenameone_settings.properties new file mode 100644 index 0000000..fb108b5 --- /dev/null +++ b/tests/common/codenameone_settings.properties @@ -0,0 +1,29 @@ +codename1.android.keystore= +codename1.android.keystoreAlias= +codename1.android.keystorePassword= +codename1.arg.ios.newStorageLocation=true +codename1.arg.java.version=8 +codename1.displayName=LibraryTests +codename1.icon=icon.png +codename1.ios.appid=Q5GHSKAL2F.com.codenameone +codename1.ios.certificate= +codename1.ios.certificatePassword= +codename1.ios.debug.certificate= +codename1.ios.debug.certificatePassword= +codename1.ios.debug.provision= +codename1.ios.provision= +codename1.ios.release.certificate= +codename1.ios.release.certificatePassword= +codename1.ios.release.provision= +codename1.j2me.nativeTheme=nbproject/nativej2me.res +codename1.kotlin=false +codename1.languageLevel=5 +codename1.mainName=LibraryTests +codename1.packageName=com.codenameone +codename1.rim.certificatePassword= +codename1.rim.signtoolCsk= +codename1.rim.signtoolDb= +codename1.secondaryTitle=Hello World +codename1.vendor=CodenameOne +codename1.version=1.0 +codename1.cssTheme=true diff --git a/tests/common/nbactions.xml b/tests/common/nbactions.xml new file mode 100644 index 0000000..29e1b86 --- /dev/null +++ b/tests/common/nbactions.xml @@ -0,0 +1,20 @@ + + + + run + build-with-dependencies + + jar + + + org.codehaus.mojo:exec-maven-plugin:3.0.0:exec + + + ${Env.M2_HOME}/bin/mvn + verify -P simulator -Dcodename1.platform=javase + ../javase + + + + + diff --git a/tests/common/pom.xml b/tests/common/pom.xml new file mode 100644 index 0000000..0176b58 --- /dev/null +++ b/tests/common/pom.xml @@ -0,0 +1,322 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle-tests + 1.0 + + com.codenameone + bouncy-castle-tests-common + 1.0 + jar + + + + + + kotlin + + + cn1.kotlin + + + + 1.3.72 + true + + + + org.jetbrains.kotlin + kotlin-stdlib + ${kotlin.version} + + + + + + org.jetbrains + annotations + 13.0 + + + + + + org.codehaus.mojo + properties-maven-plugin + 1.0.0 + + + initialize + + read-project-properties + + + + ${basedir}/codenameone_settings.properties + + + + + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + + compile + + + + ${project.basedir}/src/main/kotlin + ${project.basedir}/src/main/java + + + + + test-compile + + test-compile + + + + ${project.basedir}/src/test/kotlin + ${project.basedir}/src/test/java + + + + + + + + + + + + + javase + + + codename1.platform + javase + + + + javase + + + + + org.codehaus.mojo + exec-maven-plugin + + java + true + + -XX:MaxPermSize=128M + -Xmx1024M + + -classpath + + ${exec.mainClass} + ${cn1.mainClass} + + + + + + + + + + simulator + + javase + + + + + + ios-debug + + + iphone + + + ios + + + + + ios-release + + + iphone + true + + + ios + true + + + + + javascript + + javascript + javascript + + + + + android + + android + android + + + + + uwp + + windows + win + + + + + windows + + desktop_windows + javase + + + + + mac + + desktop_macosx + javase + + + + + + com.codenameone + codenameone-core + + + com.codenameone + codenameone-javase + runtime + + + + ${cn1lib.name}-lib + com.codenameone + 1.0-SNAPSHOT + pom + + + + + + + + + org.codehaus.mojo + properties-maven-plugin + 1.0.0 + + + initialize + + read-project-properties + + + + ${basedir}/codenameone_settings.properties + + + + + + + + com.codenameone + codenameone-maven-plugin + + + + + cn1-process-classes + process-classes + + compliance-check + css + + + + + attach-test-artifact + test + + attach-test-artifact + + + + + + + + + + + + + + + + cn1libs + cn1libs + file:${project.basedir}/../cn1libs + + + + + + + + diff --git a/tests/common/src/main/css/theme.css b/tests/common/src/main/css/theme.css new file mode 100644 index 0000000..7ba9ade --- /dev/null +++ b/tests/common/src/main/css/theme.css @@ -0,0 +1,9 @@ +#Constants { + includeNativeBool: true; +} +Button { + color:green; + border:1px solid green; + border-radius: 2mm; + margin: 5mm; +} \ No newline at end of file diff --git a/tests/common/src/main/java/com/codenameone/LibraryTests.java b/tests/common/src/main/java/com/codenameone/LibraryTests.java new file mode 100644 index 0000000..2209803 --- /dev/null +++ b/tests/common/src/main/java/com/codenameone/LibraryTests.java @@ -0,0 +1,66 @@ +package com.codenameone; + +import static com.codename1.ui.CN.*; +import com.codename1.ui.*; +import com.codename1.ui.layouts.*; +import com.codename1.io.*; +import com.codename1.ui.plaf.*; +import com.codename1.ui.util.Resources; + +/** + * This file was generated by Codename One for the purpose + * of building native mobile applications using Java. + */ +public class LibraryTests { + + private Form current; + private Resources theme; + + public void init(Object context) { + // use two network threads instead of one + updateNetworkThreadCount(2); + + theme = UIManager.initFirstTheme("/theme"); + + // Enable Toolbar on all Forms by default + Toolbar.setGlobalToolbar(true); + + // Pro only feature + Log.bindCrashProtection(true); + + addNetworkErrorListener(err -> { + // prevent the event from propagating + err.consume(); + if(err.getError() != null) { + Log.e(err.getError()); + } + Log.sendLogAsync(); + Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null); + }); + } + + + public void start() { + if(current != null){ + current.show(); + return; + } + //WebSocket sock; + Form hi = new Form("Hi World", BoxLayout.y()); + hi.add(new Label("Hello World")); + + hi.show(); + } + + public void stop() { + current = getCurrentForm(); + if(current instanceof Dialog) { + ((Dialog)current).dispose(); + current = getCurrentForm(); + } + } + + public void destroy() { + } + +} diff --git a/tests/common/src/test/java/com/codenameone/MyFirstTest.java b/tests/common/src/test/java/com/codenameone/MyFirstTest.java new file mode 100644 index 0000000..9cff27e --- /dev/null +++ b/tests/common/src/test/java/com/codenameone/MyFirstTest.java @@ -0,0 +1,23 @@ + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.codenameone; + +import com.codename1.testing.AbstractTest; + +/** + * + * @author shannah + */ +public class MyFirstTest extends AbstractTest { + + @Override + public boolean runTest() throws Exception { + return true; + } + + +} diff --git a/tests/javase/bouncy-castle-tests-javase.iml b/tests/javase/bouncy-castle-tests-javase.iml new file mode 100644 index 0000000..bd63a29 --- /dev/null +++ b/tests/javase/bouncy-castle-tests-javase.iml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/javase/pom.xml b/tests/javase/pom.xml new file mode 100644 index 0000000..e394993 --- /dev/null +++ b/tests/javase/pom.xml @@ -0,0 +1,149 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle-tests + 1.0 + + com.codenameone + bouncy-castle-tests-javase + 1.0 + + bouncy-castle-tests-javase + + + UTF-8 + 1.8 + 1.8 + javase + + + ${project.basedir}/../common/src/test/java + + + + + com.codenameone + codenameone-javase + + + ${project.groupId} + ${cn1app.name}-common + ${project.version} + + + ${project.groupId} + ${cn1app.name}-common + ${project.version} + tests + test + + + + + + + test + + true + + + javase + com.codename1.impl.javase.Simulator + + + + + com.codenameone + codenameone-maven-plugin + + + + + cn1-tests + test + + test + + + + + + + + + + + debug-simulator + + debug + + + -Xdebug + 8888 + -Xrunjdwp:transport=dt_socket,address=${codename1.jdwp.port},server=y,suspend=n + + + + simulator + + javase + com.codename1.impl.javase.Simulator + + + + + com.codenameone + codenameone-maven-plugin + + + prepare-simulator-environment + initialize + + prepare-simulator-classpath + + + + + + + org.codehaus.mojo + exec-maven-plugin + + ${basedir}/../common + + java + true + + -XX:MaxPermSize=128M + -Xmx1024M + -Dcef.dir=${cef.dir} + -Dcodename1.designer.jar=${codename1.designer.jar} + -Dcodename1.css.compiler.args.input=${codename1.css.compiler.args.input} + -Dcodename1.css.compiler.args.output=${codename1.css.compiler.args.output} + -Dcodename1.css.compiler.args.merge=${codename1.css.compiler.args.merge} + ${codename1.exec.args.debug} + ${codename1.exec.args.runjdwp.transport} + -classpath + + ${exec.mainClass} + ${codename1.mainClass} + + + + + run-in-simulator + verify + + exec + + + + + + + + + + diff --git a/tests/pom.xml b/tests/pom.xml new file mode 100644 index 0000000..8ff8c16 --- /dev/null +++ b/tests/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + + bouncy-castle + com.codenameone + 1.0 + + + com.codenameone + bouncy-castle-tests + 1.0 + pom + + bouncy-castle-tests-tests + bouncy-castle-tests-tests + https://www.codenameone.com + + + + GPL v2 With Classpath Exception + https://openjdk.java.net/legal/gplv2+ce.html + repo + A business-friendly OSS license + + + + + common + javase + + + + + + 7.0.8-b6 + UTF-8 + + 1.8 + 11 + 1.7.11 + 3.8.0 + 8 + 8 + bouncy-castle-tests + + + + + + + + + + + + com.codenameone + codenameone-core + ${cn1.version} + + + com.codenameone + codenameone-javase + ${cn1.version} + + + + + + + + + + + + com.codenameone + codenameone-maven-plugin + ${cn1.plugin.version} + + + + + + + + + + + + + + + + diff --git a/update-version.sh b/update-version.sh new file mode 100755 index 0000000..0be4e05 --- /dev/null +++ b/update-version.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# update-version.sh +# Created by Steve Hannah. March 24, 2021 +# +# Synopsis: +# --------- +# +# Updates the version of this project and commits the version changes in Git. If the version +# is a release version (i.e. not ending in '-SNAPSHOT', then it will also add a git tag). +# +# Typically you would run this before and after running the deploy-to-sonatype.sh script. Before +# to set the release version, and after to change to a new SNAPSHOT version. +# +# +# Usage: +# bash update-version.sh VERSION +# +# Arguments: +# VERSION The version number to update to. +# +# Examples: +# bash update-version.sh 8.0.1 +# Updates to version 8.0.1 +# +# bash update-version.sh 8.0.2-SNAPSHOT +# Updates to version 8.0.2-SNAPSHOT +# +# Typical Workflow is: +# bash update-version.sh 8.0.1 && bash deploy-to-sonatype.sh && bash update-version.sh 8.0.2-SNAPSHOT +set -e +if [ -z $1 ]; then + echo "Usage bash update-version.sh VERSION" + echo " Where VERSION is the version number to update to." + echo " E.g. bash update-version.sh 7.0.15-SNAPSHOT" + exit 1 +fi +version=$1 +oldVersion=$(bash print-version.sh) +if [ $version == $oldVersion ]; then + echo "Version is same as old version. Not updating version" + exit 0 +fi +echo "Version: $version" +mvn versions:set -DnewVersion=$version +mvn versions:commit + +echo "Committing version change in git" +git add -u . +# Note: the -u is to prevent adding files that aren't added to git yet. Only changed +# files. This is to help avoid accidents. +git commit -m "Updated version to $version" +if [[ "$version" == *-SNAPSHOT ]]; then + echo "This is a snapshot version so not adding a tag" +else + echo "Adding git tag for 'v${version}'" + git tag -a "v${version}" -m "Version ${version}" +fi \ No newline at end of file diff --git a/win/bouncy-castle-win.iml b/win/bouncy-castle-win.iml new file mode 100644 index 0000000..563622e --- /dev/null +++ b/win/bouncy-castle-win.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/win/pom.xml b/win/pom.xml new file mode 100644 index 0000000..e4b8535 --- /dev/null +++ b/win/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + com.codenameone + bouncy-castle + 1.0 + + com.codenameone + bouncy-castle-win + 1.0 + + bouncy-castle-win + + + + src/main/csharp + + + src/main/resources + + + + + + + ${project.groupId} + ${cn1lib.name}-common + ${project.version} + + + + + From 15ab07277ceadf56ce9b0c0b5c4f429c424a3f6b Mon Sep 17 00:00:00 2001 From: Steve Hannah Date: Wed, 15 Sep 2021 03:21:54 -0700 Subject: [PATCH 4/4] Added readme file with install information --- README.adoc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 README.adoc diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..8290793 --- /dev/null +++ b/README.adoc @@ -0,0 +1,23 @@ += Codename One BouncyCastle Library + +This is a port of the https://bouncycastle.org/[BouncyCastle] library for https://www.codenameone.com[Codename One] + +== Installation + +For maven projects, include the following in the `` section of your common/pom.xml file: + +[source,xml] +---- + + com.codenameone + bouncy-castle-lib + 1.0 + pom + +---- + +For non-maven projects, you can install through Codename One preferences. + +== References + +. https://www.codenameone.com[Codename One] \ No newline at end of file

        6eB3hWuF~WvL%uxgc z#;0Zk!X+vY#vtQ#ps&W=9@*$9}MOd6A zEBPEfEr&*fI9s@02~u?9y8%wlROeL($uLG--A3byBZ1KZ&=65(&`3iV|~ zv=2c81Bif4xF2&l=O?ql3CwZc#=LRq3tBMGbe?fKn)|K6HO8#7*uKv3AkHbAL)h0w zEEV)=a(9@4HE=`wZ5_a07w;UW1hnLU@kVqEX8bI^fts7a^W6fB9C;TOZDL-oKZm@B z5=@O@NkhOFVWngaKzJ@9r;&d;XF22E1r*IibCx-e5Ir+&#J=b-rnb^h`xb%JCXTjq zz6pP%^0l^ciROV=Wf8+On>mLEuuZ{e8C<={?vE7?2hpC)y17){@pDi{^-B`2n&NGnja!>#`@ayba1rh zh5h$9=KfC~{Z~@_BYaqmAG#`+tLo8UAGewzE)NrpOty8>#qDX;-stf34Gp=^ksj(m z4_9`!_C8-i`XXHHqq%R!VEZwSoC6GOsnhWQNjP9jA)=okt1c3Z>8nZ3^q8%Byi#7ev9>R(3F&=c3`K#MEY*8l`%7&p!%NgZHySm;uC zjbm)pIjSEc0VL1O^DKCR9nPh~?B#-e1alXef?VhNMsd)DND#_MH_E!Gg5%}EoDHp2 zUBtZTP+?-fJUuAkhM4|8hAk9__0zJAWaNOP}Ua!>9CMr+S;pj_AXWT zxAu1SVBLU_-|Rg5;_+9{s&BTQKHb`VwzIugJ$_m}c)a^?=h@EVUHtmI+S>g~_2-@4 zhuBvGPk`4T!XWyvJmQp!q_yHw4q(Poh6Gn9A~iYb?+*@fy5y)kd@=35;2mp7jxgi` za?&3k50Fj>);Wchz&S#`E%ic798UzOY-;UyzXP#f5fTO!9%$Sxz{$4C$p)b%hu?Us z8<-QV4titc7y>G|)oT<2dcStc`2k# zz$mB$vCb&H_i?U!;?Gx`{~4sN{)JaqU=CvxMo@^utqWj5t%VH|s0D_=BESEVo8*}E5hi~21}|3BSq83$yaiSGfgF%OrU!TJw>;K= zI0Mu@CJ0-JpnR0PVKQgb8&;|^8T>uoXi;m2uZX&mCN>pRsC8O1Jk$i|4VFRqahE@? z>UV_m7&@6ELbZUx6P&RnUKQNO3oiv}3O5ZLL;feg#hlI>BJLy__j+U9RaV-Q~KVVdL*0g(?eI`}3#{q^@7@jYS+q<*9X)x`)v#`A4_ zM=FJJ$xa-M5jOf@#qzX&HO)7Gy9~G+QUM#np0C*@ z*|F+^TI;;PhstRva$0r(~WD6 zO#vk`N&vFTh``9?b_itU`y~iJ3ZBH^lB5x3G#TiDcr)cYp0S@=+F0A(G(GDiWD}}m z4LhPhpB!b4uJi|k!$V|#u)D7a1s}5fzFzxDRM`diH&YjwR#l!dwKj7uaGTxI%mkSKtem8#EgGvWy7+&}6S&z^Bx&daCNV0C|DI+Ox#Hy=xwRoB$ zgf&Q%mUUDTyi){qc@D0&p@3V_d(Fpg(h+gVn5K)3080%hY`fh&vJ|I)U`Tn_=o0B3 z)z#o>l|sen6_(a!7(7u@E~O6*h@sRD#30S?h|Hv9_#B_LP4Ur}CHdfG6>A z?u>&mANeNkKP8UEd0r>`f|&n0$-W@ZG!2iRlI_cD1XA@~V8 zC>B6y{Hh^Q1OLS=o`8>xQ6bozDAVp*sbwI^MV|uEacTiVLu{pH;p9LHikX-TxKc|M z`owXmB6;t9)ln#=&NBv2r}x6NsG)H(lQ8@!XJl$AsZmf#ONnMM>BH<;0Waj!iqP>s zvlz6n=-d2C-8#-=0B|Z+tJ>8x92$Mnezihy$XQcucHPw3-OgzM2{CHwJs+zyS6jw2{YLs?5CLtA<+IkZgF!pi^Cd|_}C-m75 zOtxRMstofS9)6q?fomAP@98m|$aKsmpE3Qcd<)B3*>f4Yitv)hTPCuiJ#!hWORuDN z#{mtimFd^-seHpXOHKCqw{h~6H0|DK%%s$Cus8)es$6zCR;#iYs<)}R*vW0GGBr*F zFL)JKA?EB9S_uj+ja`4=ldyB_@=OkcfDm=->~*Wv?u z?`$(z7MofrgB5}ax{Gsd&aMWh%(eFRvmm^zHTnd@6tC^*q|A}rBnT$u2W4drjSmx5 z>n#rrWy2_kC?5P5>`#Pv@|$DB&?yvDzH5$D-J-_2!MxE}8bI$r3_N?M*KxgM+EVO> zO<%mMnspahN>9VtrC93#^@a^HA@k;PJ|@6A7Yw}eB#y!c8Tdj=4`y%?lbhZsC~ zs2NIIrLYMF#O(>^Quq)>gr6XNVDKwxC=?$fIG@k80|wMK!9bH1Xc&y>c*?gne5?y5 z#f7#u%-g^rQF1X>OHn{q$N_leR>S92`^1)C(zeUrhp; zWzi1k1&2wkr8&2AvYqMh0pmn0HCK~?K~*edIPInzp+Vq;AQRay6C5*O6rYMqLj<7QjH?1K*bRe?<&$b}v&eK`L z#X;8IBfU}@`}*Yc69ghhM?L8SqH=>_5q4QfKaqevuTMWN6>h_jQm$U)^5xV{8WEP7 zJHKo&{8;FvFu%qH;tgYA>`pof*huTouVuARbvSKRtcr!tmCQGke*%eK=Qym!;BeVuoT-ro%E|RKk#d}y0Pub$hY0gDb3`l$ z4O{GrpiqdltV$ZfPDBN(IT-79hZHV~V}eXde96dQ6lqgdyKykA*lp)xSE#8sRxGqO z!vq@U`Q6?F39jE7yW!gqT6K6wcjSL z#;uj?LR*M>@AR5<>g|nkrp+M=)hxQ7*?y#-C16qXj6k-)$cxgLqUNVJBHh{D*fJ*F zkG3NB^eRQ8`rFTN*WRn@#nzrO6&;!=1wI3}>v;CTCBc0brNC>zyd?NQ1 zzt5r_mMJux{I}*64|ffxxf$HJnx#fVh~6r`O08<|95K4bt782~3KGA9BSnB;`sHWq znofW$J%Ps?i!eRqwUD_WTr-?BDn$x?0{ADa62_tMG;ogb)$aUk^;-${iF^SVbF z=M>4r>I1#@FHYq;ZeEl8QFulqh1=@emP93~BIz4z`DVeZ7j;*p0VA*v;hG3ivC5_4 z7G^-Y@h3|yEw{^-q#!tYG5OaJTO|ircZdTel7q5Q+@u`oY@bH)xgwBVyokw?2@ery z8B=~Zan?V=85(U(<(NibX0558B5{MOV{%aZqblCAsy~TvllF6o@e9eVtgqybpH^xW zI?hIalSC8qhLRi z^^lxt{mRuVcIX0|hAY&ca4zbU7pbpQIPV3==@>_>xYW>X%B{ry*q}k-!XcFKt4&Xi z$mNSOW&w9#Bxny`a6p6eLX4jf$X7STIrHT`&x**)jHQEz()rTj+}B!W-Ir>upjv!h zU|r%iNK%DE7fn!wF6Tt_mTl&n=ipno3RYI?suV$BRWFl4ZoEE8_ z^w2$hgeG)KZUsct6)oNcPK&VJStmyLUa^E3SU-IFzx~Jm@_%1>{n1DKziK&r`e^h5 zcRC%d+R0Ov<;VX1cJeeGpbW=t!(qeUPM-dD@-!Z*#SR!;&;9Bk;O4-}~Qi zhxmnpOCBBt1HS#tnFFzko7}$I`)iirG_58EP!{xwZ#va$Ns{2t@vY{OVGcglNvIGO z(F#M(4mYtInT?l6M1%!4uEBpRpEnxEYAxx7cqwbH zowIga+7W2PssRe!@o0~6_RXDG*5jvrP3PN0Dfv~30^|#ifE*I7cR*7c6>uwW6B8yr z7r~9?Nkuv4)@;5>G*(DMFIyK*7vo#|1a+n!XUBmQPKW--0WF_IF(5TcW}}aOe!;7E zkt#v9WY?=VICUKZ0b*J6m!N!_W(>oPCDI)gxLS3c?MqCcA#2bx!{dD50hEd*^%Q6u-8xx*r z;Q>-n&;U`_>oLx#t2u(>>cbZZxsaI?QBqQ2J6q0r)S0SCs#!=SOcJ#g;H@TKrHzc{ z=>RNAUQEss=Cz`vSmr1PmAW{Jnx+ot7oR2hUj5@Akg|v|^knB;Wib3t(i#5&nXlaxv!x?#0A1kbeJOI~O0c>r#H~-Tat84I#(mU|^5& zi{0@HL{$$@^(e3HQ^meePk~IrDHLA+V}9zvP}UDWD$08Kpd>yNbthKGDMWS}ckX;X z7*9@jN5j7((UmAs9V9>_gNOA>0bS|ipl;#cQ_Kz2u*h9Z}swQ6z^yxWfy$zG{k zkMA!m&=DpleU187B3R%a^0GspU2RRH81ZNde1g%c^R@~C$+WPd)6U4oEgAbp&ZVv@ zSCwMsxe_xOItd2fYilQ8T@1D#bz^O-!IJ^;J0=X&a}@=0WFUOccwq2k!~h_d7EBcLeki@ z2L>=KXt=8O;S#HIf)F*#5i65V(DKUVNZ*(*39Qn}G>Lrk>z#I$iI z5TqQnNc1F=Ruq1aoi?)BU|dN}c)9A;huBy|d`@qYatZzl9BM#B3%BeQ z#~dO_&X%jg+K?Yi89}39e8I(CJjez;qlcf?B(U$jfyycrsll3w@nn2sZ9aS&c~6fG_UH?~6tkSH4?FV)Jwg#C-y zS|pzYi{kq+w}o}Q`7?luwMB?Lk{)B8hOU>@lf)}hX)k1QLG~>Dwvh0DI6{=D^#{ot zvFY^3gbb%eKn9ZA;ATRhA;BaUg(99XbV>w~jiNS{2#+6z1lait#^}emghA*jZtmDQ=?EtSwp;+`XP)%e3qaG8$<+%HF9@eBR?1=BS17_ zd>)@Q8hINBhO$J;wP8F9ScF2P1C)Y;Gj|yn#(wPOn1rG611`dqc^dJr{t-DQK7)so zaSE*h5|bwht%xYQn`9w>%|@Li04d;%GY)X6509Afkzs1)D=|?iwh;0aCv}DO`SF52 z^sc@C_3qES0_|7=Wzt)Ob#p0zp>8q zSQ6XUa_5TQ*!5Ms3`V806~T2NLM)pR9%jK<@UL@HreEn>Y^zMPCc#kQp~$K^#ERuK zrhG-FLIO8`mg!u{=RO#x2KR?fLr76@*|d!l@DE8}C4p*C>O5SU!U^|8y&p5#K!HxM zUkh`r)cZL|djz8h`A|$(U^H))PLM^}HT5ynGi;+>z>QfeJ>P{wnINXSx^y61E3dui zAj_IO$Fmsgw^VoCYPZFJ4E-tZ>!n4)FqAQ#d;pIrIL5$4H5XVG9k52tG;`yVlHc*-9Wo3IBhssg zNzj{WT3CZX2Cp4XoZ;FhKN-USDr3*{b^aieC>j~F&51;EKegviR>;YV`a5-z$_Okh&7lUzoTmFJkoiI?MK^R%#b zayxk#3~Ikt7;{?ky6F^geDV$EzT<%vFlamhuSXw+v@UV!kpKu{BZ zWJ)xnc)&Q*p@$cK_%Z>3it{`f4Q;6fQ8rhbv0hBHYd=H?Jhjd(3S2gR$64J~a0<9( zJ4vhGizv zO6z078bUBSb7ch*tdmm+jJf{B>RYE&CA1<>ervvS^TR?EAdeiegI z1POFAX=5I(0i6%Ap z)ZB=0#`}%a(o81e+51Agx& zkOU)*0))=iJ~!O4yEGcgT}u=~!~PkvG2l+B{d3&xHPN^kME>^A`Zyr%B7c3?BN|?W z7gxf$_$O3t=n~4l$=Jz@HW@2MiISRh9P*)N(u|oCTH^_m&t^LOB*;A)6I6*hxTqBI zeev1C21aIBz#){|6a?y(AMl7c{ZPd6t_kslPN2o)L&Ts~2>GumQM1 zq}P7LJ+@?+Ku0%v4Ud0@3ivU)LK?smW7LeIIl`Q!RT^Y%iS~$&IIy$@*fs3ClP2}v zfc~`!BdicPR}{qrP6?1X81nLY(S{IwUGvT&OhK^9tH~^+ke%Z?B{t0t@Ki+7xe6U9 zbRw^lW0Rx1a`6u_QmuuE1kNw^5Fd7H;V2rD8eiGurq;XL}s> zW{Wj05l)W9xvQP36t(_x<2l_acP@%Z145^XTFuZ&RPg~Se=%e_3}A`Zs$19A>|_2%p~JHY!)G5lsgN|ap_$qQ&SHYo$Jj`H%9(KL(r(*Is~z& zel|C{RGisOq-9252+?-DB4TbWBBzyg^7%0%TJ=Zn%hWgd5y0Tkn{`epFFAj|kdj!4 zGjrG5jxNnCRG;sKHGb~-RY7H5oB*UoV*MnC*cA$tdDYp5uOB&pGR8g`u=m}GHz0o2 z!k;Le^v~*)Gb929N8=~vZ$|%$o84BUb=6>jCOBeJI*}B?HE7e?Km?wSHMAj{hRoXG z-y-D5o(lv#jK-+9*d~ZJ@)^;ZWXzu| zY`27=R?&-);>uZ5Q35_m;VgvDCPF7> z@=JCk-upD@fk(1=rqRVSm~HMwXOVT+t|-LHtqrwLfWjUjCw$~~%z(P(J|oe?XdI`# z!?|VceH%M&oQ#$w=AR-%l5CipCXve*EpmMARFw`fqyGsswkSJY&)CcyquxY}RQMYB zUBGGJ_ZZD?zJN=B2&ay}i+P^J@}qBo1LZm2OB3Q91SyI+FfLjHMt@{t^efKRI^6jo zOlf*85KqA~a6I~eG_;4P8Cp%(VX zrn)>ep7sx&lp*b!u8-oX90ihK1xXN0zM@RfF^LEgJC1S0trqs3#LnD`F!@B`vkrYr z3)=O_xd|0xbB4t6FCv_VRiaQl9eGrv4SCm^mjXJL=yW3`#v(F}X2_4UCBl3NF^Wye zXG?4@{Y(a>r?ah&qf}Fz=P=Gv$msd!T&=-y&Q(v;6^^+YiBvA6 zb0gG;H7db{Z7d)S4PNR(nrEa(oDrUo9&V}_ia!j;r~+r>Y1#twkz|4~M+jaa61^_F zK(=rC)vFAy^YTF^zUxs|}Zt@m97vh9kszQ=mns;2Ca= zO+f)_-V`Gqh;%Z z;vBSEfdA%Q*5}~UT3sJGn^vrUAR|#eI9k6}xygdLx44N$w!LbrIIv=;c>;m_nGpx? zwoXotH02LB7A1K)(`7ITyCI;O>Zmls7Gvx89nZW!5%b0@Fhpy!pv-@X@**BoET~{F z@x_lOQHd)GVVlLx;i|?b^Et%FI7W_3T~2IEc@Pdr70LHwh2*bQHLAN=k#KNPKWnXM zi?QbppX8n_9#O4Jzp~+?;y@)SRnd!jH+_9kUEjxt%Z6tjoMM6Z0W26bAjjEFqQy@C z!d_U6I7Fs~{Q{>}H>}Cp*a;f}{taX7VUYxFKG-xxS-BN*f|}IuHWU-cBDkDQ3nb5b zk=kqPMrb9%Eov07kv7Twdt2r1nRe?md2x9@N$+)(=mT+rFawEn33h7buxus|A z&Q;GS-mp?vUT#+XC+S@!yYVAN8*Gi}uKA$O)v)+|Fvse5(Yd?mx*NKanOsysDrY2< z4z*Rk?$Y(EdlW#PaZvvk-PsItE_fqqlSO=1XMY*~$p0${u@7fPv7wDCf{X4-cje}p^Sec(v|JW}bJaJbbTu6J#=gm%r z#h*=kvKEcr`MpJBwNp?vmdLwU>Qb0avaQk(L5raUEEAo=lsF&W-qVMnE<+ie%mRt{d!J`!?84w+M@LbFH_s8NV%dP%$x++c%T- z9X5>k;(x+j5Y9JgE3t=P-~{rlk;1fk^Kx(` zTN>x0cyifIVwhc9R1_DF{csxzEMsQT zJYmSmNDEYdIMdLc)0>g_gnqhf=LPCbCi zaadcMv2nnmjN0S;Scd`$e&U@l=*x@g?rUogMo^Z9Q{1o6woxK{%at+X&O)aO{E!nh z4I^u>t$oA$*ya(_xStuHalhOC%l<)_bb@h))Y_UHA4|JDo$eTO@3?>`)+O zgj3KQ3d5I1Q7*Ds#!HyFTaBfiAzDVYOeciPPn@*jd}YC)$r*^1JVJ*0j}m#Mt*b>* zjtIPmU}Iqfbwf{3KCoLj|;P@pj%`oyCe8GOf)Pa^!RjXcGgv*4i=wr z6urr=^NA6l2Dk0|XJI8AKRIHjJ@GQK6vX!e6bSgvpaM%YDZ!^6zexUe{9=)dj1b$I zJxVN5#&5CFVtvT2XcDFGtvO>um4}O@LS3j|M`n2D>C08M1_ZN@4d?V@g9 zT7qNk*dWFDdak+@=B z_b=6-cXl7*W^Py>XsCb2+rW`veq8Zp*Fpb)_rg}y9x_3DBq;SnQ^h6UjF?96hA*bw z7yar5W2)u$KHLC%JeW)dBU}&;HCNz>R7MB|pEbI+$Q87|Luw2{+BrU+o_2e1W{rB^ z7SCUNGLho$4y+YPe*8sZ;nR?u&i!34_^ml(iBt`3CpCG*Z zV_qp;yqUIlUg@o{Z$HD;La$`~eh3i9-J^Hffy2QNb;H%MPCQhI&=P4UUEuP%Ty5FK zxUSqgdg*}o{%DM`I2mE5gzQ4pcDA>-tDD!ajVoNFelVWm?p>9i%jmw~koV`fdwQqZ zyr#W%uVgqB1M9}qK%y@}p^v}Vdi42Ux4+)reHTfGzDb2}J^QqGgi*&mLbTwu$Io0J zs)ySTcD~$tw7zjGs1E*ZXY(3()P0`$)>mWeupvGe!6q1fa7!SQQ7s#Nq1Me3u`o(H z*d9+uB?D)C_I||L+$hoN=Fd*5gAqn|0aC5s_~mGI<64PU>o-0uu_)%ILlIh##fe#x zpJsUmYkc+Oy{FGtyN`Ch+-F4 zNp6yM8pwNqza%?J{R01giU0YY&p9j&@*COQC{({z^80B5$$$|M;tO3tfIwVywLpBK zJ1A0-Bo%2=ktkv4$^!z!2CC?k>QxtR$~QI<9CJZiv0XHqsa{e#O(T}GIjY)N`_lT= zlS)(p$WhD~xxCQ^E6SAWq&wj>f>ul~E8|mS?*hM7fz@NlB0G4>1WKc7pD(+daU%l= zAqagH666@b`e)sJ>_brA9~Y7c3ksju=ALV{0J zr^^&II=EvUzqLu>--&M!p5R$iH8@#>2tNfd8*)DlUnTy_M$LF9b)?8NhMO#F3-JzD z&JxoYqznt1djk5GKaWKQHK-j?)6W;Ej_vGJR#1x6RYZn!;kv+vBq%2se$aP8orL@2rdT}3JYaa z+yXx=2W`cKxxxQTCp$s_?TJlr{54{FuL;|Toe`=T?z&J1DNum+6RlZ785wiZ2`9Hy zhW6DnvXAHrq-B01b1?2$p#?vei!&WQMN#nH81c?)YmsdNfPO z>F5D;e_XrJ%1ZpCD$ZD(k`@m-2C9S#^7@1A;RCg-u4K6Sdv}R&@b6^`qY=glclzOjl!;| z+m51mZEN!9pbPmPJcrmHQo&Pcbu}<8#ze>Z(~5itbrp9C%M%+9oWNtC*i$3v-Ofn;iqAt2WleAz7MkOdy!>czRwhAzTorkgG9Sh zeSi6KokfAje6cp8^?bJdXmTcYaTH2iB9hJ1>ynpkGUWa(h?iTKA|D?g2G`cA{R|Ts zVbND?p|urnr5Y@Saf@nb^+avnFN3=cmaqsQw?p%^&s=Y+rbX>YbzgM|IIF+2}pHxafdZ%d1t?ZIJ^01?T|MH1Del3%1~ z+j@U6)iD_%I$zYZHNBqF3G4yT%BB<+`!Bn%!1hN_L<7QfYVRYeq&q&Zm{E`XGVX(*6DEAR z6-gq@pY-S;>pR|`cDLGu)f#J%h^wP9LOZ%goyO{3q-Jm&#r9=8;9`_*IG`Z;F*L_U zab61RONSjRWx zIhGzQY01s^GDXn@+qKHN_=ffk4P(vdje4I^3BYDBYjESF4NqrT>bv{X!4c!ECOs&c z^k!v`JMf5v%}P%1NpBS=TyVA*rgjt(<+flgvn#UV2M2v-EubrI#ATB1TmaA_+#A zF=!(7)ik7fY~%m^PY?f}e|qrINBsYjw%A7O{tplZwl9+;hBvYbKlb;x@WvF%wgm$m zY#)O4u2f&^9(}d3irb=>D_XPt>QZM=9{iV3rQ(hzaQDrRSfOavDAygWTUxwE$R=FJ;$GjWC- zeX)kI?hhyZ$=aix2iv=Q+bfE~$viyYqb*j1mpGJfPGrs*c1ml7Sosg=@`Md2yqk#L!_0^jNzLWBP6j6C!;r* z?K0~m1_AUt9K=nF)AN(Kdb4AOSJer)hqaC{R&(m{Brx9^;s9U2JWZ*;SMiU-f$XSz$W0ULWF?YGs>?bo)AbeLZv< ze>dlKnyr+3ef>(cf&bU}&kg>wDPPyG%a5D4zlp6nfa|1aYq$|$Xm9ulH3o^tP>q9=i3wMC%f9{8xYFV=f+J`VR(j4H-9wfzx zsmm}N!Z;wt`Xi^#iFY>aG-1~VZ*LX1jXXY*^uZw${g0syr?hdcO(UUaqh{2s?&9Qp zt-2w;{AqPP^(i@6r3b(np5@e1aCi}s_n#;r!4alOOrMcemK>7VRg+%VZl;x3Zo1#Q%-$Y3(fsYQ4k7Fm@!=lV} z?+ur8pT4y^%QLi`7yJ^hY`yBB@OkL}j9#-NwSLDCy0}~+j5KyO_VaGr5ye4uDO8-F&m?k^{{vxVrLglpP(`)k57`I;U*voXXyiw#1#OuM;;j2 znLxlzD3(C+IXlkB8}-LLev!AFWNZUCbqCe-@!>-DAO``>MVGcj4#SEg5&mOHPnuHZ45 zmGAlY>hf#6(B|+}IZawr6_j7$;=^I8*Q6FZlZ`>OR$)+=tIdsAl}mAZ`QKMp&py}B z_7WGrYl$qLBc|}Uj30-QTVI{L92}lL9lUsX+7Z}}n1xzIl?=3CEkuB2ZB2XF8QMSX z7!C^OQUA~yZ)rWiiLKY*1blKhk!+1_pbu$c87fz*@XfQ6uPQiXRjqedaBZ6Ov#sj! z;NSp;y>Hf9!vI)k4BS#usf{-cekvT1brg%u=$F;*!GThGNxlk@8O3Ex9SsxvNMk@> z{?^Bgtj7C$BE7>*)xyL<(P<*lT(Q3lCNGbuWLn82uE;w$OsQsU1ztM9sm~D)2~PH3 zj*hxGb`wvv1h=iaSN=Slp1w2~is^F2wWG9n-__%gJ-EaB<4-SLy%bmIyQjU;!MXhm za3Z+Vw3OdHJpd}W1n1LBa04Nv=+eEdPq9E9SltRG?saAT+YFjO`E6L5Tk3{2w&ks< z33bSg;`xKM)REA)yXgrLuXpW!vuim-^tI;|jh44FB2ccEg=e|&wTl#P5zA%BEeugE+`RQ(YV$<>|8nQB0K3-PQ-Yrt#@Ja9)> zebqzINZ8Fr&W92AB)Cx~QD`X>BF#02)Tgvc-o}noK^2!Ey!uoShrA-7e?UEM>)-(Y z0YTlAczzX8)II+L9&#U4O;99~><>H|v2*yjgrBMNS(z{BYLqg(ZKk?+?;eaLr{A)0 zV4V(2O#7_C3~d?uf0S)%#{ldu$t%~pO#6>UdHFl-JHcNSGa zypo+Ng{$sEOO$2wN}bjcy;#DCn3X_JEdhVqwWe&BAF#uN(eW`t9LWoj7Mu=p>S99M zIv|9|Xs{y&PFu$p`57B?0kSH=t_65_fHli{jUSM$)CN> zv%_RZi^TyL$=<+^ge{v1q;%E>+njA}pu|OO4MF1lEDfnDdUUIm(W3K*zQu9NiJm3* z4MhW0+iZ+Dgup2j&0sF5XnJf`4=hr~|;H1w-5H9SrTRLUl54|bN$RAhz3K_)CN z&WJFd0^VUSHtiI8i0CEQ+&x)+yt|$F)V-*>`}-)$Cf$q*fi2cN+FAbtQ&b8vVCKT~ z;w0?EBERSSgO{O^g@faP9-#E-K&~y2Wf2jx$h#o-h@1{^c83wJ`}>hQScxC)7XD2^ zGALHlJCmqk6||Ll_+4k?yFor_*4DZq-MU8k$DKY)FvB32!|nuoGC{{@pq*aQpgKSN za3M2VhA-*CrZeXaO^NmTZI47#ab$6m;~o4!lrr$wW-{P;ANx4d^EP{*K-Mj4Y=N7p zg2q&oV%4nS866YV^ZKj1cM*%!O7esl5RcrzUh|5I(pX2l=MHXI^-)eaxw))YDR2qi z-jjRcW=#hLlOpvjY2ApsRf5E&J{E(VlM^RLx=ulBcG`NQUgkK|bt_O>e?U2*P*n3! zAE7ILW+&A+pNdpZ5oAV-Ph!moqGTPKQd~0(qh?L(Z*Uninf9Lo;c@0B>lmQYIw{(9 zS4=>lzkm@a<^pX+v|cpY$gKRdXxn_1*owcjU3Q=qX5bB$hOj$*)PLQFPQ%y*?pQw_ z_VJKz5?Kbp{~YT2#fV@x(4rxf|&+9Lp@l=Ii zbuJOmsS!v)a~1*FasEEz`AJPA$di(C&?*`1*bT6(!Ii|<$9locqSl?ybA;Xp+10eZ zA>#xOy))cGj5(9xRSOHI(yVddQ`P(Rt0JmUmb*#)I8z-&#}_#QfL^vh z9Lr7w@#S_&97i)@xpqS=gvfSFjS!3d(MWK9|J)lG(qO3cT(}i*zD;ZF9XjaKq9z0O z_;CFyn_IGVq$$af>jQb9_nG8^7IQYxSFj(!G|hmZ`pEuhdW2IkNZvFR-^S*~3e2+# zXY^mh)4J7eJX!&1ibUBs%)#>=iB%-04}ciIkO$t3#yFaxdm!G=XlxT8@CY*-&geZSf@f=9xXI2cX??a~rRp&j8 zuJM2k0>K+9E!!U@c17?Yj)GkM4%nAkb3|Q5H1;ac<+K5XoP=*Si$f&~HGG}z!fUY6 z);@Y0qx%tU?wU{QV*#Pq6%N^>t*3w5ZVVYuBid(KNb<73|4L7^^8hWT+96W#Lo`Ft zmt+r^gCiVqMA*2GC|5np!@{s4%{$ZaPQ<@>-0x1NJP8M}-aChc!2TtID4(Ij823{ z=FCCBK*9hO#wew8*@_ph#Vm@QOUkUefI)^J|Ha@%Iek~05T7PtVgjZ#BkCOa(=$dk z{FlD?s=y*V1!*6!2&FF$+6^Jh;g9Yi-ryV}H=K6spY`|UCI+M|!}&|f#*A913xaug zpk0t-Y$L3o{92l!LXTM6%}Qa9=5~V?x3! zd89=Kyg=C?2whvPLq~NTWQ!x1u#akfXVySj2WAkT{p9Dzka96(*oq-^af+rk8VkvX z(5-n2%Jc)Bv%jozjZR{HTtv6N{@$u}SR$LcH5zBzUgCm9%c^x0*>(bMVrq3`<}uaP zEDf7u@PsE$(ROj`-f2q#_c@JaYPp|^`7{=M z&Uu`PKIrxaM}t$ClsLLQW^#-@Pw7}lJ|t99)+2@pQ=rcamQy1fmh zLk!rmmE_-4I-K2zu!9G*rSxVEcH9_tz!U6iv2+?G7zF4bh6BQr7aD{jnGry-RN64% zLDSwPeQ= z=;oCQsTFP_&jL16*70kd-)|%L0={qH?OX~!^ zPT1?WYK^YnX7Ss6FYVn%p$+zGL%PCNHrSz!O%#C@j(^yv4YsnuRyNqm#tptehwu-d zp%whY7lgbC)O9@z%OUJ|l8CQJxJ{uJyRk_+ZL%Aiq}C?MwaFfAvIm>&!6w0Ol0KV6 z_!xW z{OfGsI$>WYS+0`=*JVrzen@di=8!Qs3?65JpOZV>q! z#QO$e-yoVd*Z`a!{D*IqZ}^iyZ;%c*h~`be%X)f~*xn?>n;gHJ9J-tA{Y`?s$)USR zyl)cXP2zo1c#mk_BvEe>z%35aE%q7S7yiQ+WQAJ`d=d7eSf_26lyZIzUgH}uq&dq;ex|HDAFxLaaI~FSI8iVgY!M6 z{*>HWxONk+yCD1mQ8vUd>#Ts3OJUn%wfY>@Z~+hxY~Eo|tO1NZZMxXriEBUX0lf)0 z1gO`LATOegeQx@V42X@!&a=Jeo8Q8%Okhkpa-UDGeH;Dps{Ddva*bMDC?gn&72wKv zTQNKc9B}LUHT)~0>b7vc%piWdF7y5t3W;#o6tP71-`tcOIjFaB8{ak{0WuETxWT97 z%8hFf{2QD6M?@p;*%NUJ5lg8M`WS41YKAUJzq@p8JjDMYfXRQ--8n2QDHfk*i?j z=|NgI^kLKnpKgTIOt_EAv59SGj1CWx-1P~U;K}nF-@e1O9_KV0nFne-is>PByEedF zU#AlR%0$fedQz7){E6wnX}xc{q=Mz(F2e;Ur!MgOCgP zSNLk9dUpjJ#$nfQpm+ENYG2o9lxa8dHDjH(U=NJPrWT=W-w5Aj?80}-+nWFrhb{0q zt$gfd42C!-4J#?cCm&3?C8~G69(qr`j$>>e11CHDK2|}C%*u%qMOSNXABBOyg9V%h zU^;Bzsn1|Cz_vdv+--=m(F7be1*CE~B zcmy=KS0USq2slK_Hn8k5Uc(X&%<`NYiinM;V;kXcS2rM7;D*>bgjlj^Auj=riCMX) zC#n1b#!Wd3Y}t$oyuj1g^Nwn^-zRr6pX~R?%(QrVoQ4$-pB2Kcg^)*jiItsEoY3zT+DRy~x2XN_gl+$@$L zd4Lec*SOIb7 z6ag)VbFjcVF{2!9DbHDg#GLVBH;y8sPa_N9KTj4V3P0+>H-p2N=ogJ0Z}xfun+*0pMOkRr;~2h;%stI*JhP(xcGM5KZXoO zx|3|+;v8PW^bZoRG$dg^P40844J|sm#gW4LDOpMpng{2Kt$sm(0d&wBO-(^gfRw&G z5RF1pc9a#ZIIeuHeyCMs`#tJ7vCY_Vu$$w*0P9)O8A2o&Br6!llR0bP;*@4f8MQm^ z*JUH;QuWU!Z|jHr2!K56>&fwD9Pz%26W++?F8VQsa>cb&>nx!N^2*3Iihzu$zzD&+ z_*ug~j+TfJ1u`7t!~#|3SPKsWd%8~beWBe!C*k}i3~?J4uDn| ze(9h)3z>S^oSwvx8+rde?^_!M;!>SU4-vuzQWJWMNQ{u60-s{Sg$!&ESHZ^^GW``r9VlQUWweCno|(TsjA&YqF?IUa1Do{W)RT}sPVio z<^bDLa4Iu8Flezl)~@Iwy%2L1;rlV0B?F(X@PGA3o06;guv?iwwicg=-rQE>zWYzq!kK(?o2Jt}hUpe^2iPE8qZ_9SV= zrDLR*86=jptfBf-^vuYVWW>|}bGbI6)j*_bd?K2$H-MkVYEC&Oi`Dfw)V=yG6diPL zmAcgq54xW`hu-5VCQf8?5*YCSJiy!n9l9Qra?oPo1WwGyvZ6(!R4jz1HgSjrX(C+i zS2uuAzMBaPuox3i($n~hnpvb2AFQmTwt3y2$~>+{LSRwbbPpjgKM<6I$`J|)q-zXN zcSi$qC9YMMHg!;szj}(+WK^OjTQoe+Ob^^2;T~?>2O5c%AsAZ`B2>`OuAbdukQ_dV z00dksDJO2z;N@i%iG9)78Ht;;&~oEonwoBC0X-1u`Scv(?lPNBK0+a|;!qK33aS5} zz4v*J~y zCttpN`SRt<9~BL)tH7wgP?!AN*V>*?1zI8bG@sJP0br-h`>?r&$pOAJemeS#IA-xd z-0h9zOK8Ktz#6%kd;vv?@#af1OvI^Bw<3Vpog_QcH)r$7^J#we;>`{ElI0n>XtOob zmBA8#a)2AM%cDC1>!=l#?DGse)EH|Z8Q+(+NlIhgr66Z4lm>knwcU6W#!UxH$i0lH zWLj6D;ZcgQNRK&yNaeu?gs->phSbuAm5 z?X^{$RL)&vN@~(kq>aMYZGlRaGRFGz2m%tYhiZ#g=`f>ADM>zVb=26NsfzT6L=A2Q z>;usnfx`m(CCDG)A4e`rx7>NomKs+AC@T}+z{Y^k@=re10;;!HKc)t;^iok%C@_f+ zIe>FPJj>Y4>%O>FC0eoM>u>U12R0dHJ(|8vq24o{Gn=~^GlPn{iM59t2_IpKqsdU7 zZLGn7Wa@glX#y<{&3}rjeV+VovH`cjAv*DL{g=lMz0Edy8`;JU%xmga*W|IfeAEGq z3iId7tjF*rp{BQ}-PbI=1f1xhH`q`9n*F=4lY0-6r~7-KA3XW;`wl!Gfh5gh0Zz>mkJ-j>wmuS@>()G$BKBGzQW;QIGyc5A|$`$<%xf$F%XQNAk&vb zsLKr2`y*@}n#~W3`Dbv$d1~A%0#N-#Y;VcQ&M&pUZa>%Qv(rW|zQH7eQKNb?MjHnqqd7hYAnKkzwzt8%&0GZ;7GJM(#j?9X z*Dztr11(8~hwmiRf~*bZWEb_e(4{uxK_H;fz&Qv8Q3Rz2EzjHOp-cGdLQn(s`_vtA z-hK%Sqp?YCuEf&HDuZ(1gbl11ftLN5p}7w^ufN_Py@-k5qscmEf?#QQV!5&VZ=Y^I zIuuLrwVYQdek_=VuQx_B?A~>s9CX+LnRGhV>katNuw)u7D)G+>qZA}Ma6bzYS)6Y+ zWEdF=R`|leT1^b`HN&fC0^1mwjX_tW>!O~zWE7h z9ZX)igHb$c8=4=}+o}!zaNI@frkWA2tW}HFh*yH$-|f~Z5H10|YsvGV)K)(Di8z9U58M zrtA0jcXxIV54WHEp+@kYmTzJ2Gd%5uIYNfCnu%r==Q+mf7+Bw@h2I}zj#0af`K zPiVFlS$qkKXeKt9p8BH^9~WbrDYgsA(8J1SY}}cQv91$Yx$0moZ>6SVC@`TcAJFy@53=@0~RTwMj(3G3Wa-%Mi_qE3diZjMl2VjJsxSQ#ds8> zJ>JvDi_xAwZiVHkk48K%PCLwI(yCOUMdYyY#v<^USHcA zL#5&v|DeIeN2>fSauodA|M5lo@LycHLVy2Vy`uo1Yk!&JOsN<1)02O3<==2rauHAx z`nmt%&6~;3SoR-I`b-%_{~nxkoKD`zTGIhMb$D}t$#YuA-`S#VO6k_U?wxy`Tgmp9 z5_cP)AwwraKlhTu7x@St_|wVrpM7xi=Epz#;QogX4|b0J@OU@*;^<2pq4e}Kd^|o` zyScgfRd;7|^Wo7$d68{wrO6Romo!|V&!25>?(VM<02Kt+B)R_ro8b8l_w&&lAAZ3H zVED?fH~shgQ8OWsD7$~A3F#q8e$C5sP7>PiiTq$zvsx==UW!dig72cz7t%n=rqc5G zxBv2AeQ@Q6#F#~7o4>5Q(4r`?nF?ZeNnVd)W8 zKk})is2}pQG7LEgr=#O@`gAB%EXi~`=BtOmH@HQ`T z*&8-}8RiTQX?!#Up5BuYAEw|Ht}u>+Cqx9HOpa+`Kjs9eFzoY3cA8s~&xr&kgM{qG ze13LsbMw`!R~tE36|IxlRF=;+(GGU^4|i`W<(%y4n0DcUXMa8)(b-Y7X7CK8^?75< zN&YH9rEz7k6o8UfF#W(>ESOd?U>v`?N{^V)2?qEPz&+TIYuks(-r-vE+4kYy;SEOl zYVYWagQrKySKCjXZ0{fK?H(ovPm-O3{fB!;dk6b?`aId*|3mWIz5Rzbk^*7@anq9; zh)^tK#$oaUsbrHXBf<<*{)o>Ief|lK!aIlNN}f+(8Ic)Br(B$l_|yk7a|cY+2^N=- zkwCltqM~tDn?L*DXCJ6KqpF1?e^89`(;}4(-rN{}MUh}{GUo2MpP#{Hg9Urg1ZbsL z0S2olYM~UF6MUMB(z~B0FRp3Tda(4Zgp>_8Mf5j>!#4i|CD_9 z9MUi=#xEzyFDMUiLhUNCe8qNi#j4MSt4%*g>7tsB`q>BH0~kMKs$)Z@v2DPa(TmX5 zR%XtoeK6e8$*V!1)a*CbnI9Z^6UZiDj1`hCY6_X270 zqAas}0W7?bqEO)9f)c6ynqzMEnACM#2rZg>&nES8@q9Giqk~k1;9@-BrT(yShA(D}!huEh+y zXrhuL+J5qyX1sIST*>5u`DQkhML}aN^3y8Wwm@Yx+Z_*<621<4$!i<35R`|;>eKW$ zH~!BTSFX_CMk`}=2gmMznV&i9lv2`n8o%e zVr(wAMRBCi=Fdk%_!N>SyWe8D*v`SjT?!*Ji?66ZdPII^dhU;2;_KjVlKo=z7kv3^ z{6-^e^0i{=X&c78BBMYI)X}DPA)CA~dUv)T?;UMF`u6DHTR!sm+nq1ApM3k}_G4Hb z-vbR0ExotOh z?dI5S26i*l8yq|lW2T0g8fI#ksbQvunHpwln4LPzj$w8TvtyVY!|WJl$1ppJc?(gZ zqIV6lYmi-o?5Yf;-M$vIYh28>G$iZPU}l-U)f!5(I~HQpWky|QCGMfbTpK-*6w%o; z@_I&I&q~}g%${NP4D*&@-m1gAWtg`NlUT$w+%n8thIz{{ZyV2{5tPhH$jO_Hd(ecq)6l|dM1)iCF2^Aw5%Vr8 zj7r$K#jOp;ZrQUW5#^KKRYr6~t#oc%GN_QCZUC7ZLvqDRbEBG0%ApuWHIx7+~L-o9-CAht5kL9Y#X2-TcsUaUG;B8MD|S-`&`bnZ;AS>CDOie zux~OxFc}}z$@svi85r=uWPD)lW?+~Dlbym?Rn%2>VX{-0JQhY}Ve(j584JS{C7BNE z5Qm0HhY}I1L>Pw#J2cp#!44I+Q>Q39rYJjGR>NCLYG+F^J6np`*|Iv`GR!(f*)c`g zF-6%iMcFY$*)c`gF-6&Nit;Y%E09PMZc~&UQ1>O{8#}sA96lJH2YKkyT zQ+E2&Wp|ufyeo3rzh#0+T9L(Ei?HL>mWA19Z z$J~ax$6W62F}Kg|F_)-&EcqQ55s4yv-9GDtZeN>1w=X30S;2Mtk}X;=aA*BW8h8e!KOVb>aA*BT)hBQ@R~ z;wB&x;@A~yrfaROds{emTR3)`IhN6(Ut6y;I#!P^Tt69|7)DP~{bW66R3`lZpF&9S zm{FOi|E$N%$Kx{@~?cZLLXjvrk*AuB0J=*WZ)IwFk%g$_EUjh=)D zbf_6UN#2>{okb>emI)o1&|z&2Cpt=n;#5bwQI&@y9xVjIR;}yIEQic2hs-R8%q)kD zECLBEVP?5unhB7Z&dQGKFprJSW25ufFs<>dS!Sudr=d7=NcxJ{y*4Jj7^|cSrOpj)!K(j#|l>?)4U{nr_N>fRhsibUR z+%%PxkxGiVN$QEE#8gsdDk(FSl$lD(OeJNelCohPCRquLX_i4YG&;>F$V^RTW)x&* z6!hwh0-S6rm_0KJdS(>hyin0hSfb8SMyP=l#10*PlnUI+mg2^{+=lQ9u$9s$ZDu}o7G`Y%!eKwe+tAqtcrVd zk|RB_3hdos71+CDrpI7ws|wl~&`GhdIR;ydfGb1b${4sZ2(GM1ab-=4E0+P+h?xlE z65-046<6jbuFOzexg@x9Q91)Urjlr&wGn)clsn!jU39J`$5FcIj7)x3y68YeewH!I zAXQq@XuJbVr7KmsQl%?Zx;jc1olr}d9pw?7vdPa;*NZsX$kT!v1Y3HAwE~2dZ?$b9 zOdA63&=P`LM?Zj2RSCFL&6O6^Fa+CL1Hv4(8OaE%=`s+iEe>}M+ZoLTxfcZ6Oy#sF zOGU##G2ok8owh?(P$ zS=MP`rZw&ywi(w5bJ*m7h!M#fA*FFHh{E|G3g?6`X2y?Q2 zr&b=#K0!=ZuV$g71(_(qWwT2V=IE|7HqyeZ4cwJ69TjG9;H|55GdU1eTQg*U2o+{^ zq=lIsxO3QMcp%JSlj#xj(d>}4u<;J=oJ92<-F=7c91{f%YGTB`<6hs@44EWCx7i_S zVTK6q95$IEF{0Tei0QD+GD!;?E#c15Z3YR#fE^>6d4l(jKW3mH%+XCIiqLI#Nm`I$ z5+jFMy!c!LjE3Yzp!=`d9^>67rR zXrzH7`i9brq(kXNaMje(i{M#PceqExGxun?*70vBLom2>xKF}W(PR{cXGN277@if4 z^l40+464$hjH+-|G#N|bS<#&C96DF*u+|qlbeeGJG~rPEiRn-bHe59qnd`u_<^rQF zAdzZNEI3?UZK&gLD5g(36x#<^ty{5v@LYp-N4eoN((taF`+5#4nQ$#rDKi(VZq5!VZn7li3}_ z);z@&O@~g$3sWWFaI%8U z5kB}DOfg^KmZxe)Trm^V+hQiB*8O$x$w*OFolIDYYfNJ{U}3;Jp)nf>joCnG%myp~ zcrP?&12JW@fzX%@Vj3}UWZJTU(1`J)J`0W6Kup<8DzAglq`a32J3L1t7lbKYGKGg{ zrAwyq@T_#1D)00~Dd8HIx-SX}@1)dyQBZi6Qujqc;aN)Er<3Nv?LK`1g0FF@`{FJ_ z94U2Q97cGSQuoDW)ai?Q!&OS%7xjkcxYT`7b$F+AiRTE4 zgm+RKeeodSS!$y%{=80K9D2BlWc00IPMH)9W;ZS{ZPP8}e)Q?GNUe;b3$fK+m|_suNCof-(Z zQ#FA*RhziejvIGs6yUDLXhNtO2%Wx}g}8IrW)>pMVVlPaVKqh*Le;Rrox`?it4`kx zN!&TQO+h29#%MyQD}x!82y@tGNOtFsBci?x7XhtR8JKmdr3t^6KGb9n_=&ti|b^2yh4%Ixt zmD>rftV?j^c7iLnSzK9D;fjyAggpepSg+v9?F3iuzHsGsf-AQZT)EBS%DMzsZnMK7 z+H8a=?HBKqE@{7bR=UIyk7uPz+AN-x7PQ$IGymJ)e#N2gRm~EUc!3F)j_>}SR+qSB zvJgacpUkXCkAjb(km|q(3*^GYrfT+zUndn8P72RW1uhlm4S!k$7-|Zu1uV`Od_tLl z#r2Ykmn9YFN(yVZil_#$+QDl6b_Am%Mn;D#C+%>Zq-q1J>5C4fil|1fbRntq7O8X+ zsq_u0TD)rLiU6ge>r;qE6;Y%E#t4^8^mi)Np6dL&R5E|11&k3joQn2Md(o6isz$Ne z!fFDmwW~Aj;+0Ir9hr(BQmr5|c&aq2p{G`y8ewXki8`lmb5YH!iLBNzed&q6 zRy+5uRKi_u5UHBBYSF6knhR7eF){I2rBO{;nL$it>M)h*!BnRCQkmFGW%@3aIm#5i zdZIBlt5UJ1QZb^?Z%I6%L#(58Aho6jte8IV?r=;PH&q(NzJVh^B1lhx4! zr@A%Oo2gDr^<7FM>!6WU5v9R(q``Hh!F8m;b=1C7Q%>gWI%;&OZB=7Zsl}v*lC&UL zk3@J^M6Zh_9{j|d>p}wQNrqxwjF~Dlc13@6VF*(^v3a{vyIrZ>uGDTdLaQuB;Nvq`hX+UNdR08QNiP#9IjAy-0A z6h==JMo$z*PZUN^6h==JMo$z*PZUNE3ZsJ9lODRK{-Q1QP!wtd6lw$%>Jcl{3@FqN zD3DDB5%UnL64ewa)IV0JF;J*AP^dXjs69}qK~O+JMVM+H6zVN2)F>#_Dk#(}DAX<} z)G#R2GAN*_B22Xt3N;i8^^Fy39uzXv#0-RLdKpgQnJWQ3M8r*miP2Q3XRHvD6X9a7 z6r%0$tUOYSp-_{dfXxumsRl%$7DOTDVOppSQK%77z>0v#!qYGITcNf?0c8|nswGjV zDN(2`QK&Ids5McjPpJ@{1fRb2Yz4GZgsCP)p`M>Y6cf@YUFw-D)FW4@nNg^nQPeEx zD@2dM^RN68O$HCYmQnq2g(x$0${McbM*#&D(W%BrA?gZgw0_krDMU-bL$6q(r|_(0 zho*`!MQtIDVyVqiKyz`Oh`NFYU*$uMnL<`8Aw1F^2vaOwXNUuY1xx*Mg*c4hdsn(d zf#F$YEp`auo$}Fa9y5B(>M^rNdPaEM70aw0=(4EnYWozT+2Ci_GO86+s2Nm8_!v^AJo-$Sjdp{xx{hsv*^ zmUSp}c2dzPxN<#UwPDmYJ8GuG#ivd?>BTyIHR<}&7U2qEp5Ur(8Cj!`=Xl<^uTIIn zv==xvG_AB3Jd4AvFJ;BE(AU?6f&JK0hx3AE8CS)U_JU`{k}e<5iY1*so>}JLponxG z!W2u406Z&}@EOmFCG85&iY4s|j)|C`eQ9HOr&v-~cvdWFS9n$|X;*MbC@pAL6-Dxpu$HoxZ z4T5bUwnJpm#t^ZsrOT0#s&qTLxQ&agOWU}~>B2T9S(mj%%~=<sb_JqOI^#LQR-XV>8eX_*R0=!FGc4m zw`^hWmM#C@vgO}f>N&)G*UJ%#LAp46|dH z9mDJxX2&o)hS{mXbc-jt2H7>pu0guR8*c4}Te?9jH-ZYH)h=!k2d&}Y`Cm8n=vHlH zMqOsq*&GqRj$4D-GxB;yUeCzuS&2<{;jqzs$xqG%+^WO8Wtg`N(^hz=<|t3iPYwr; zK^f-lI!xP0fypb4PhNGV!L7-#<(@hjr4t6V3tsLRi8ecxn!`OcFFQWXt{K>dsZ{$3 zs-bes(3CQP~IksHb898YaUdTOrkl>FUQ%+y@psV$R+H^^vGKXU5ULf9J2)LhkY z57l6r(;Ds~g>q{j%u5YNk-f4-1L`cgQzPl{AZhHvN?usW3oChHl~tHf6(*5 zJhHb+9*iOjQ93)OggT~#I;4aclk`o5X}SlFD2rxLrhDLmvR4MxRp#Rp*)^D^VLGNm zI+=mn9nc;5hDys>D5qL-O_$cqH>GNI>44N6tYR)XroA;xQ!iaoFVxn|jVU(1 zF@{z}MQAot3SXzDHC2;|Hz$+DPMP?0GFj@BiDxHEqj~8}d_7spEY4))m(iE#;bRlO zPlhG9{KVCp$)ej#{5~0$+y*ovm3V?OSvHl4KPZz$Q<->$GFdW}$v7_SNZ#Th$~w{9 zS|;PXtRr-Y=P2v2m}TPW&N@8Y%w%+z$?~yGd}J9Gk5y?DuURIGq%-lIWwJy%lTmPn z1=3V%ao1(CBsvohT80JD5uzC8w$vAHXQ>}Jp6y0844lsvq7nh8b6nMML0dGHIJluT z#4HZDqAkQQ$=D^Cfcc-Suizn% zG2t(_w~7g$xrHbu{N@&-bi#M8A!P7W=~VxDPh818S?b&J#ldL zWDdFq7jpoKT^cei-4myCPiE74;(G4MBy~^LFZIL?&=WsEPaFX~^!HUnaSQasCEXLp zKu;XgJ#h{6#68^;=Ri-K)ID(t^x&$F5Lq4e)I*>y0`(E7lfb+L+|%}KWCh1pjhtiZ zK$(m?aG4Yg?zFmar}c$9tuWkajo}Ve77!?@wf?Y~!C{-piZF+5Mk~S`Hkqw4qS>&B z>9F0<2NM%Uw;8e6;Na+{A#{vrHZ5YR*x}A$n^}vA2Z!xO(wMBML+rXTxT6>fx9J!Y z7)GNzjR6xEE(|=0X*6S*rZQYi$9uDv@z!C}U|VXCM%Xc;8*XD_!^L#iZp4l04fobz z*ABWd;bAeIZCqF{h-ndr?MB|1?rI7>LT^X!P z#N>vSE5$^K!?q5TCWs81y2qGCH*ClBiHqszu`ZG( zPTX6^N9rYGMC&p!LE`AKjuK%G+l}%ukz&}?S=J!BvRaQvlPi|S_Gco@VLR^tCRXYY zZNDbcIBe@gF>&Ist?NXX!=}zNrqOy*nszbDtS`mXimL^)>=EYpO?_yLSo#jEM@1Tk z?OXKHLP2*ru4U;qe!)Y#HM!lSsqZKE*pWP;u4Odsq@< z(>-kI;#twe-p8||(Pp!VKAIeYeT?l6np!7zhhn88TvLmkj%UrEHkHL_Hm#&fzlJ)s zJJdB`L!IIs>SC~=PW29Josn*GN;*$$htQHq_lakv&21UOG?vy2CbH`2a~r@gv1KuB zYD=b!u&79L(WSUUow6NbKWb25;+jt54s9bjHVtTMIeGz$l9a!CxXDl_9fxqIM`+>z z$Ap>6flcViN*FBhS8O?~35)mjnYIN7VAM0asXFzZ40Wn^sE4);b;@^mN2mI9>UT&Z z?HElw2AKF$Igvpwo|RTzoi@CyXfm;d_qAv?Rj3QrhB`$&l%YRXbZO1vI1QFgoiZNQ zZVq!3jD>%n%H(%gVFS1ICC&QQwk8a&6dZmI0F z!8>+~;3|vUQ&}Z|XC6A^%EE#xGZ|N|U|b_%K^U_LS7s5e+%R!f!KOJ=rBT=ZbTV1+ zhil}5L73#JD}(UN6^pCnlga5Jc$R#ykDsaro;;a}%P`LrNDaSJH<-*jA+D5PmlNSx zW)5{-5uT;|y1)p}k=c$grAucQb@>s(l`iu>mvh9r$GQ(cLY2b4?zisiqQJiHx9;oe zz`pLc?u$18n8KyLsBApPHPaXMjdxNreO*o1*ZtOgT~^rF{nmZ)@pSsS$GQ(MPednN zKE&<5t~l(AqX*BzvA(!^@GKJ37v+yp%B zc(E^TpH9DK6=PqVKzOHgNwC%Ftid2gyV;Jdc~rxJ=J{2&`?eRC z=K3v+_SFW(g+jzUzM)~p-(s3UNVEPfOgn0t`FCN^0X2w@9y17O1%Rb7gOFAMxG;xJ zPL&wZJS?;_z|xqHg;oT(Fg0XoRe%etF_LJNfP1fcj8+O*m>G_=TEK-lY%&~U8qJ8L zRRb=K!#0--=KUSN&2U6mjgf>b0f^rZH6OO2!QUGMl&Mu-eH>uhE^3A z-DWr<%wdz^7$Z6(($?^8=`O=9T?@6Py9~E}zcK3^d8iS_8Xs3~C%8(tx}_cA zmUe_&+7WJPN4TXO;Z`0wY||}WPqn3U5L>#gYD-R%!h2cAw56-Rw`2_n!j+b|SHL@^ zOU;@sHEXtX{neKA3W&$L1Xo!vw598@w&Gp^n;N)Rz?G*Aa8%!m zC(uAa#c&+fjEKX139eikT$!`DatUx{4TLNAAGopx!Zp&22;PSQfAT{F->AOQX{q-!yCDWi7tRuiAOjCM{ubN#IZzI_#h6B(B&O_7z+kLOBhG20csQ9+E@Hu{L8*46G&r2c zC{e_uR=W_5tWs*6!^rW}_*0utO+7tDM~ykP+0;~1s|>BHim3LOnqkt?aL6KOqg#fh zA$6qb;8;X{Cqr_K1|mdhGdLQNp?P{$o~%80spQ#Z)! z8ctmvsw*~iidg*dbfjOU)Htq@pzOd!k+QBVOv5>a{7%N;U0H#K6AC#{WC^DeMu;L; zIGIr535LiL&LosT!4M(BX@ndo=ONR{eia&V%pFC*A$M}&n#Tcm^2GQ!&`zEhABWlT zlV}PYWEUX{=Ww8%#1jnJpoZh?Bv3G9pIRoKf=nC)*_}wjGubMH1M4`k=#5O47-XV8 za8RAR6MR`Zkcl$MpiHWz7R7?Y={S{GML3vFo&*D?4>3lpoJ@?HO!_+-;8qbu>F97) zN3lA1#d&iKB?gF&Ms*NMV^7Kk3aN@H%8AYxpa`-7PEQfg!vplp06iW+PX*A!0O$;W zDxxT-OoRw$$uY1fB%C8BPf~bMNH{@`14S=o5UDDn?4im;RpHz?i7ps&?lDe`qd=Sy zCl?kloDU~Yk*4U0s=_I85`ilLC&clS*aLbZoNZpmj1j-ZHL7QXaelaRhPbjg;>x7r z%K6~R89|FHmYNS*XVo$6IMU z#nMA(3h1w>j?@S$)W2D%{ez>e1Vb&LLI-k%4&ZR4mA;RWZBZ=g9PzCDG*c_?A2ExfSfbqUto3a6mUNN`S1jG>Td3)U!>8i1i;|;*r z*lN}eb#oAo?vZdQE1kJR&p7c$T&uKSyh5it>BgP?B5f2-Fvh}_?F(Gh@uu!#oD{;? zI2$Cw#3>>APBEk%!41az#g*$FSC&Uyxvt=XA(+zU=(G-grb9*{ zJ2*GPHpKjm$iml}M#IV%l>V3h_51()%X?R@(BD?OFDRYlvl%|2l)7&yQCj-3>*Y6; z96n@Y1hyR9>wPNqAn&60=<2UnyzM({)Oxk(0 zeR#Ng`0ZA7v<>+p-oam>G%t*YaU2=*`WIl5aqqpu2S@RYj)BAAd8R837%UEM8-4>= zF9pquxj&@>8MONiK-(l?`Y9JG13Gi^k@FRo@;89>!u>d{?}=kn#)`>6VHd8kQhEYX z-x^OOA;4q_AStjvbhG3UW3JH^zp$3LIK)u@6%~y8>+d2^qKj!-{eJ-a7C6kCl7;|wDOF1&7-99W zt&=x#sUFrcZA!H?Jb(pS3<%1F_{uBy=u)|86;0sB^x_b#{5k~xMq;}7d=pUX(uQ%g zJxQSd3iqT|EK_+zNM#5iaj4mH5*R_utH-NSDZLbwzFIg*CB=?fExnBwk2CV)Ypst?0DaU_ASaOiqFX}d60oAp8 zi5seZ_Y3vxzr($W1}P)Fb(*O%n}={jmbZX&(c0fw@_^Xd;({r75wW+ z;>Rj1-Xi?1|5srh!Gf&DvE-yd%b6a4BGo(ky*R8ZRozVhTNl9-TdSKE(Jlfj9A5Z8 zfL$1~m2l7it%{PF( zD76km4}79ymY2G((%60VlQwaPDSoMUA)CMEuhN5nS?}oAv5)xH9+NaY^>FZR2<`s= zrpD-6pCK%98VstfOll92R0ljj1PBs-C4IFG z2bDQ%To40;u6|1omS&fn#CX3#(G_gnetpSCkfH$?6QoSe$-l8D#Tj8R6vAzbfs|jaoQFk0j$HUP3SVJy+I%fg8y720W3m%t|E>^miX@8 zJxYYS{{gH|BqHOnF3DmGR|u9t`XKzE@ZpMb~p8~lC}xZg}WP<7eeq` z8S>&S*CYLxGP?g9nF6KM5)F@ngM@Np{{w0*uo9fH*KA^QZ8WCUn)`hzpj#h;gl29nTm1>j!K0^^lDoi5FJtD{> z{|{ij@UqHXpiqlPN49%~o3Qc%*zgtWML_t8+uX-8i&TyjcjKV^5OxnN1V=!8BMIa1+K|fX-%5q~kJS#&#)rWb zrKRTzYb!ZRafQqZd)ya1?5Gt5{iKN}(zbls%tx{vIdAj(x@p0U} zi|Inbn;Itg5&TMv@BNtJeE=K23h0z#B0_~H?$Li$kpvg#ZEhGppmqV8PmDxE2!6q2 zJfbYP@hUEWwR+SDNF^~BRFFiFEWG~#EW(ks{Kt)t7T1>_f+W`37`uwffk9oxA&x*{ zM*P32#sC#ZUL_=;RuWzS(=QR1C4fbUuoM3!rj!@|@#yZ|TOZBcbL0Tlz4C8d5nP~O zSMfbZTMp~c;v1nK;St*d*ywE>zZ8;%kynOwJXru63z(F&Hi=_GrON!Olp3$VN_-cs za^qlI+yqQ;@da@Cz+MtWWeY%~w>1^kF3#J+f@_kI@YMbXuoCDPfg7^O<6q~JHk7hy z65HBa9_nLpM6BWp>qf3HArw^O#;=@8h`jRu`z7Sajv$(n^xyhf`1h48@Jd2lT5u{h zMq>6Ml>`bx1w;bDeHV=*2h>V(M8I#Xsr(R$!xTD%RVpB>s{rf8`0DvPwWixnHaLQK zP8fD)fa|7Bs-gDm7t^~BP$k^AeHYymGFV%=fQ8W(1PRj~$<=@529YWu(PKbt^mb|T znh0Fs0W61TTM@x&^B)Q_j22*0P0MSa=r%baj)xn7df|SY3*0Y<1sNtsO;?apc@@Cg zJ1I0jNmFpKR%vIwx_0LC_ATxmLG_BxA)_SjUT$0nZYly%Im!{t5=P*^)T6|Af$qj@ zs?_`6L;QlULKxd^CQ3BbiNx^H=$_pnbT5(d9nW$>~OaGAPFR=})u|wX@1T z)LW5y#`45>^y@ShsppoMPMg-=u!0O=W0iT)khg**jV_k0&}~G#6{vw!JFnOjZ;lzK zT@doVP+O_{hSI$+)HaY;;qwaAwky8iuK?SQ&c7#EV^qKd3#{<}0*?XgD%@L~*N+4X zKKL{XTl^4rFEJb9|47t2VwT=C&?$xe38-C2PqhkAIxl{eTDCnMExQS*MdX%zsKk_6IQ+Nls<0OBB3#VQ4PZg4%h&i&n~wxG zm#m7~6jO3rkcE522yI~{JEV2_;=Vbr0M_LwHx6O-n*et8#A1f zTf_eWsw9*ME>+Ww2?|{?JK#MAn7T{}D8kr<6Ul*4OMD%)2bgsOc|WXDmw5E3^Y24c zkXDW73eTV2YqxBtvL?B#M9ZnBxUrBzso&{!D9O()mBHjqFU;v(aQ0|Qt@b}`+JgZ0w}-Y#oko*D>X zy>MM;a#6MfuuDON;7T;V6m}oLTHwX{V87M^*a{h|K6+FIuoCVntNl$xKmd!k0_Ekq zva*L<1fVP@HH!-uxLB*}zUVo`d<(pg1p#dM%CFQ#_jQdefYp}b!d6i(cOvEDTBfwy zi_y%f96?LgrLCAn4XlvrQ|>}4vMb>Tj54jl`Z5~p8b8D|Rn0X3Z7Y$La`=x5(H7Rl zTSX-9Mk3MvJf~$b9YG`#%OW>MfTOJ12iG}@v>m()%xYb|BTOt=yQH?Bw_!t} zw&-^n?f8Gm+j`#moRs^R+Y$mk*ZwY6U4j`WY>`(`Wii6)bduyWQF}2ukqU(I|A1OA zTr#csAD2i%!g2+$;i~{s=x>Suk5KpslLxSu^?T2i_;{Q60%8r)0HIhG*H2*!KzZ|Pq^sTXeV z!z*$%zoWatjHa_cy}u9>@0?W)qn*Bj!V?s9Uwx)}ss9TwDGq(@GlkLN=JzC?J=1V3&crYX>$)?0~KH#^siPKei+^R9QTfH7_wAvScPS`IBodZ94EwVj@Pcg3(H1}0_wkYm$em1w4CfwzitINVW!*pJA zD2sOn>M0(FsU~>i5qoR@<^TNu{F|??T%o_!j@awEBlajQ{n+*Lh`q}r_AZau8%@Tu zL~8`o(xwY~XOg%@5A<{>%J%k@SD^Blfzh9I=cOrvWRW zl~_(;{m@oq4S^L>q5@Rj|0tv?nKjf3JDcBo)CQDFI`3^%>hKP!E2)k16W9LiFiMYuYTL(J9F*R_H77c;Db_n%IwkN20(P+l(Sywr7d z`rsmAm$LNtE=#N1@?@Wd^?m^ie@sj2ULfjVUD!(NVcxgzSZ^{knpZNR?Y9 z^zDU1-We?DBx6QP5x`2gysG@KRJ1(0IJgNT1hDRv%hx4bF(iOpF>P7uDE9z1daJxz zJv@N@p{WIV4UUyc)igZ@)S}8Nd-`PMjP1*7E6o8Yk@zltn~ocEa^`NL!%^bnQv8sB z+7;9KIFtVwyl1toA{~W%|*g4 z`6=wY2=D6Bys!Lpbgk6W)STqDq*thlrLTGD&HymuT}Sg5z9mKv#(WaPx`4nU;>@P8p4ZQcg3 z7ejNzc=Wsj*g9hVfndQ*(@T{lQ2`Sy&a!JAH+}gCK$k_m;Fiz|}Q_>8Q6YEpfHsJ$n4pgaMcZOd1US7B{{ zS$Wr1@~ZJJgjuDt@*H5=ySJn_zSOhY280W2DW2~& zySy^|5Ol&~cd#o}M|>v9MUmnoKAg3Eu^Vyba9US3YG4;bt4nnW>&wk0Z&iKQiOR*K z?oz-m1xzI8QW7pD;ZhQW1DBF;DG8U7;5cyE94?!K6NXDW;j%frr_EuJKPC`c&)2cY zy|wJ!`-Yl~fYq!s8o` zzXY~|+4}Jk7S++j1Q)In+j!#ci~INg-~a8uzH){BRy%Pwb0_XnTKci;<%zqOC+=RJ zxcm2U;%>IeiM!n<4@zsLUF|`&__Q`}m z^xqLg-D31sLn@AQ+f^-B!1LkUaH^YB2A~!gpu4~YH`EL!JR_C0O%^MN9E+KX9vYYT8_?>7 zQyhot38;nPP=n^*0JJ$;Jpwl!qLt1~K+(Ac(lz93#eMY_j{&uuJC&Dmr>oCR{~i=B zY&HQZfEGq>|2BYqOH5E@guP2xkE%vkk!<|;BI~`pS{S|r)}?j1aIc79u2GUDnjfcU z{2>xQF8Yv!PNzG(+8b)8_NNo@j?iT;v&aALKmDiw_P@Ath5k0L{5Mzd*__S(WKfLr z(<0qGpN~#9r^WN)_2$lte46*?#dHsU`Ft{U9y3ZxKX%=`{xf`uC(*C+43haInZGEK zZG4#rm&3_${wkjq$>$S%!6%=?vyiNBAAWvKKj%Ff143tSrlaRC=E>yMxR}mfjLtR~=ZFe(__hsLzFxcbtK8Rg@C;TNtjj)Nye1ffih=Q$GOT$p4sWJYOjNj@hMm<%$g%pL|zL$0RXl#q@MEqxzkJ z!~qj^GCCd2S+wfDSVd7bfA+!8mVdR1B5hum+S(oW^RwCcNj@)#HN#;sMO#SbZ_e7{ql-YxWlTeoj+b#JCwl4ke1>AlXae@ec4 z4mp|?L_?Ub;E#~J_Y8tciV^S8VKdK6P zFT5&WtOGPTE}oCZd-&$q>l>6wQj7=ubnRDEHSYkn38<{i9CciZAllT~WX3vd!;wyr zx&F83Of_QEBp{@olU7QFFTvd&SrUMv-AUrq|eY7PNwtZPx*KG1{r}H+tX?O<`K*)R(IADJ=tab zFiwgg`os}>p&KxZU^Bfc*m8n3g>K6AvSj%b-{mLgWIt}g;(|dqCH$XZai|Xq*g+S${e@BfAZz+>25F1@tf(8w@g=oWWX}!~B>-IWjz{b@XSV;K^Ft zgUVOSk4%!|f?}|_GM_LAC!=mb`h@&B45-;00ZPLSHqrV}aQVq>0{dZ3W-;DQ=iK>1 zLzg(n@Q4gJ{1$9ER@$gUfnli8Wfk(`pwK*fj2!vfaY2~hAtQD$$(^ZYdxp@x-8 zk+A6b=(}Q!@|;Xwai`8i+&_~}_h`aKBbml|9n$)f-D_pRW@HJyK?)RndXB=Ouupc& zQlT@L9RI1ni{W%~D!qnq%d8`@r9n0ISB`NfqnBdP-Xkm}a9Rk7$RU{~50Y{53b*TP z`SoMi!xCu|HX6s$G?LiD;LM467o&(U8LVtAHAsh?N@Hc#%qCRD)Vf*h)?Q0R2q~|al;<#Z zVf>$;pyjS4n?fZW!(0YVZ zVsQ!fn0W!)q?pP(E2+jasJdd-Kv5a35+HC=%vva>E#ct_Xs?0N0vei>u>zHG;qHez zmmCVN&%@A<#slKkA^!|{VpvO%9>BwkVmA54%}3WBd@b@?VI0@BbUFF>jae1i8*!I2egFp;tDmh0TjYo6 zJm_4D74{KGh1GCU*L|y%koU<$B&8F}Ozfp&1i{d%>$*gc?;n4Be~5ZaXyE){J~~Aw zf}TAef4pO^gxUQ~it+LN&Ev8shBTt5I3JJ5V@OfCyGTTRkv{yG#1U#LAYRK51&rxBhQ)u)2W;y5-j$OTe^_oMegJDHVlq6(g!Th=U_0<{z zw#MUem54H_m{ybi9EETcxNKj)cu`GSG9Zz(cWxe|dwKyAVgUEiX)Vsz=P&RRLRD!< zZ?yoLhZy|ifW~lL?(FR)^ZdA`ED;lsI7$i&?F8 zR2xzwEo3>_q0vUsB+}3F}>8MRGxo&==_N*(nAano#pu z@=Iz{zv7-tC}A`HFU52sZ%7Hr9r{z)eNfwQcS6-VisY?05APpO#U9_=C^nL3H}h|3 zxWk$ia|o2*v#-BC-@*@G-Czw1cEyqMn~3%~e!dZR?lZ(WC0C--LdLu!VCGT4m2f{8 zA|%aHfQ}i{4%0#M_~3Bw_obI`nNYyV36uCFUjHbS7wzuLO^d3_t+bt)*t=ge?!B$)c) z*$~CJLF0bLx5ifs_V4nmgmXNZzu0hH#It)C9T(HE7>_9EWo>hcIbJ0JHe_4Sy7;7XzKlb2yr<}hc;i6V`wmS+fLvA_^I zCguid1*xAhGqF<$?Abkj7cxiWwv3*v&(3LFGZP@#U-_|U1XAmy)fZC-bAaY0(VGv8 zSAO2-XBfbTc|WC~cGdbiZVWp$vh8=@!Y7tzs#K}iW~H+~8Q+Ay^%M^t-$068K1nCc%nP1cF^cx8BWOfc`P{S~1`+7C&?Suzwv`!(B5z{(PbiZ-(xBXF^ zCM7MpD9tAgX||d&`F{L2Nn%Xg#;_Y6Y1A6rYCM#S2>X6~LlTu~P{WwDgN?T+(J7~@ zO=P{alnqu<0>^Nadz%V*Qk=l&oMSY)v`&m!B}Gx4ObyMemN;2dEj7tLiIZ_|sg*NK z)2678CeL|fe1NWsrbHU0FB1H1tYJAJV}>0UpIHmp{;S0_mgq8vZIU||ZGHQiiW!fx z(fQJ3cj@Rzo=+#|XBaRm?)oS9EJZ_tK9nzv3v#!v{|UF^Pc;~_;fzF+?*vAj`EF)h zIc+%hnePW`V%OIxWfDXsPeKZ^LjP1yXe03JPHpNAR9KtT-P+V$sIxYyv)a@d24HPc z_i9u3TBg2LoBCGE)VFI>-)@=uPHpNtEmPmEO?|gT>gsq}=gYQftSLQ0GO@;)tbcSP zxqc)05cKEV_Jv>VO;Vf`ynv0m zMII~bbR&j76D%R35fqKPC)#jm+J_n!MWyvdG#EbRNdgG=5VM9bwQNd&!@Te z@gwqHL0g@U#&ud3&I9#mY_o~uMWrES4)1Vrll1BQ)x`5i&aeuOywft`JI$vr#koRN z7T7;l{y2su?x;C1Usjb`{yU(jJba@ z`gq%{YVt3m$TYyZ=4H5k_3QD~Yd7v=k)NNapHHVFtZchk_0*Mp&gk^C7>wYhf|Wsw z{#-`ROitFKxR>4>z%`)T(dqvXH8{=1$FXRr!}LM z6VN%fU;}N3SBui*4hH=;;cxD8k3yaD#~_v|n-(`|-WqBG8b)(Uikwzt$dXF9B{mYc zO-EP&a`L8BGpIS80A?Iz4sl9ENj&COaLbhzA%JPHC^wQXVD~@=-k>D|Mvg})wH0F0 z9BUNw!7LvZ$vTz3EV3~|d=EOQuBD=-tfFZtbwbJKn8l!ZaWsCeCei|f0{WXLDBxek zj1w~T09dy}wlI}M)7Pvc$Krut~~ z@!sL#)7?WjxJ5-tY*TUxX*sZN<5h7^OI>HORtfcw8X^&J{RS5nT(N!?uD%n-BFllM zp*`0OH6^N#WO$N4hmC34u{k%_F0E%0-!d(W#%d?-6j*Rd$A6NnKYK8oOdfob$mHF% zWPLBav%h&V!BiR1KRYk3T_|rX>ANwNmkEA_1>p zmwY$MPg>FP(DYNt2S)^I;RLIep&2}KCg?NIFn_%MYy%A0ScM^nu#d2$1fq*7hhUa# zp}GA~GiEm%z}dJdZU|d&DW+H&H1B^>Etf(V1@*-EyEA5 zeNw5l7}4yOdDYliXF-CZ)6TJo!1f{3*CD&t)l3|nU;!}AZ-N1&zA@WMZIbi_+jr;y z(KdM5}&g%$~786nJd2EjV}tEa4i$f<-*l9o@wWPOpW4M(pb zmuucs2<&$BqST{NY49FyaM+v}t^Pdi-lh^g**(JJ#vF?U%i1_U!|oYuS185perScr zggsHrRDU|dMwzmkEW;ZX_5TUpxKB^Xvpzq`k99%+Z?ItoLz;2&XwrX)#pAZ9zX4-D z`*hZSaTCi$HU`Do$48Un5d`e8|KgYV`RU285N;4ydao<^rHe)VVYNPp#E+~trMv6N zq3pk4I|zGrPB2vgiG-mB*`H$xq-%)K2Ur(4La#uq=ETT@u9^>&KFz^l1On@c7A<|b zeYEq%xBCZAzTAFXAmYa-;d68gBrP;_p{1s%ad^*60eCgUl+hxeGuZzm zQ!qnL2C%_bB4}s(a2GpPb|3HJ-~N$Nmex?VFEjJ5%`#0iKqh$S$+%5lN zH446b`siry(cb>9<=v^tdq=eo^{ikG4Qi#Uln<$iw5NOV^ z<|j(V#NC9)8(s4o>W`tb@+e`Hj0-}70(oI(uA|RHb4B}}42RgH#Qw`NS%kPKz$IHr zMy|_7tq2%v=#u2%j8;H}?{$l`WXeqG?m=>O_bOJpGG*Z_^=hb$F93!52~z^}j}4%rvv?*5 zJCe|%f=MSD(J#n|bX@R*jDFEJBQ4I7ENBN|@PjNi7G^;MS6zKp+LF4Pvz+z>W^IKa zKkQrdevscY&99FMviYVi_CXZY_sEZ{lLxKXhlxEAq?g>%qo%ArgU;CbBFyTqniaP~ z@0Dc522*|lyBKBxw@%q7#tm1@rKZfbj}E@{@L15cH8TvEunu<+zSipYL06XFBFtns_DYd(YJKK+aT)=+)HE_|mv9l&W^Hi8_SFv!`Z!A?}pRH?r zSggC>V*d`*pBfdlQhWgG#V-%3m31o+?=&diV*M~V-DOKH1~xQU#7`scw>zkWqg|<7 z;NDl<5>f69Q|GD{pzb_6IP}>>)LvUaEpeVCmFH-d;riqP_u~d?4RblQpKb5__Q|fN zBY^tz25Q|J>V&wQpOD{3rzSA^tIRQR^IK4yUmqMD1WZQ8ziucFyfM5PgXW3zWSs`1 zH?N&dcxB>(EU>!q3)p#OF34iPAq!DSV_GAvI>A;OK@nbE&;NRjb}8VeR+6w!{Ah3g zX<6;aX{RA4S{*eSV?U1i&77~E+)S9>!8m&Kd`v3?ND(e-7f*H{J>5CNZgta6$n}oZ z9Tey$`RlawrP~0@o|E;{ae+PBG=fprHjN(PZhkSscHKduOQV~L>oPVChKwI9&-kMj z8GpoUvX^FTIu03cF3^#~&G=+_fA8W>}(?+n&^oRT}G+u$jgS7T* zZ|XqZXKrk|ne2+@Bo#<*75u~kw)^e&qy48*hxbbJ_ZN~jL+nQwD8g3?v5zS|e?3$) z%x4ErD@Gn*juqys%EFt5((Fed!1&A~rMiHp0q5}X_DIqdARrMy(7xp{QzX3AP;G!>;eL!#7O(lBY;~92z7XT_7u(1Q7`al((#OkQTOoY*XnX&+f?!hf8Le4vm3U|W=n2{A$iA=H!*fts z_}av6zZ}MP00lMGii%%9*?vrhE)qXiDt=81oP#ylZK!y3@D&>#06I}1UQf)+iJi6I zil)a;_Tb%Nn$8reZgFuNsvbYx-%+R!4XRu$+y=o~70P9;kr(r}D#_EwkBuqknmw<^ zy#P~wuhk4XUMtiW-Yyz$TdipN4Rx^K34s2jK$SJK)b^&04c!;L-#lh0!g|?&1xpH0 z!f6=SkLVPbIy%Ykc$&Z7XYav-*Q3*OxRb?BM!!UZF}S`x2UAU* zic9nN--1}!-Vbm>Q~=B)dMx?JCSU66*!07HY^h7udGvjkH~hivuM-EfNXr$72|md& zyNF3Pnl{Fwlcw^C$3|Tw@T&%7pnUp9qQOVXyZT()sk5G_XokuTC6q2ked{KoV#-0;QU#-I6dFWf_0K=R-KD*%Z;4 zOmiqoMY!2n3l7jZOYa|8y(81i1DfKj9?Wo6{WxkQ<5&Z@)X8hT1D;{FqdfTwD^>Do z|An6!u#aFYsogE7DzH5cOSIgT4Pr##G08(-^qCLgQR;44`e`e)bLPvWtQ21x&tn=R zg1298tFXfj>;#ox!j6*-slkFjmDjSMgvae*hx{t_w1J|s(S&f~exXS;v{W9!3fe6B zC`na5!pvCXgzdoAGUaHhFTjlc`aWY9rj_zX0Xg6q&` zIvYWY@@h1iD4?mFQj+Uw9<<1arfe~D4v&pl_CS*bmb{dWr#bk1J@ky_lqsgYZH=XF ztSo_OQK#?~P-Ru?X(V(OA2ulJws~4N<>tmpcso>u=2+mCakF6#_ERV)9JFPJ;gG_u zDYdTSf|0VU zT5&Wc@$53^7*4t3T$e-f=_--eFvLctw1T2a&G%Ytz>t@D-JK%iPt)=NF^GYq#U#2v zPkSjID~pE+7`GelpSe@#M`|p*mZp@(_e_@LSiX|>6=VyuFkUlXzea}_(s?r`bXdvf z;p!~&Vwpn&=OnPM$v;Ok!NpC5tu?=R4|Xt>21T-d{AP|-zwoW|#3>XIR;|!bLe8Ot z)1TLU`IZMj5UH8iLi_Tf^EHD;rUVA-URH9Z6C|9hK zZCHK?J4QD@sc+5JO;ydi1m{t0NISoNjTSbuF0m`tc*}869EyLwM&PLKA6aX3wCf4B z(D0v(oHl;IHE zUIa>b-32#jR@1nTrM4`3q;R7#LflR~Rg0;01zguEHWf=m;q8~SK#O(5dRey?=ci~A zR&cwTrcP2TC%GX06iOx z%%s338dI)iY~AHR(U#;8$^ndcT0f=+jjS(yEO{PHJ_oH&WQ@J*mcvKJk0&$&^VvBa z=8NreLyTvsSMr0`jhj?A)TzK@fUN+CiNW6}xo@T1km+(nPevbo6jT|dBo|21M=E8? z1_jV@u|7OSoI%ns^j_~r5DWu-N|Q{co+-@xK@o6_G%b8vU)#7YC;54=?e-WGkT21p zmaWI$u(J>=D{AoN)wAYT-!#9%bax}-N6oK3X@2#6^Q*r#zxqYRu6_y-K2W0965?D7vYwhG!LkeqCygqg71z_JfY1=2lxGQ8k~4 zWy+Z2fmA6!Ks69$wYC3*PwRX@vTpn)^!;FfY#^FgSs?M zgmq38j1wroEbYUfl9lmXKTB(t+cliFwtuJ2Bry99&J^AQPg11TwH;3z*PXU=ORGJ! z=dUqq%3LQ5UAkx-qFLW+UDBp4`oXwIOh~nfEI4G9H4lwcnoyQ|z&UOnMlpJAF)X!V zP^NI$n6aLG2(y9Aq+kBhBBEuzW+(WJUfxUtY)Y=pPa=_7AQ_bDysZ9)&AsUMzt?h6 za{N>gd`G;*;1*1`ts8QU`^k8Kc@pxV@gB-Hb*`e)nVoQ9#29*{_7?!5*+A*EtP!47N5%xPvSWaew@uRsmqPsrDSvV4g)kN6@O+C>tE6VhikJ z3k`X(PO#JFM4j@bqt;65J`5rDhXscWkat}DR7keNIg_Aq5u4c4?=>K5t3nQ$>&75z zuIn5X?az+!J>-LO1@>Ct_su*hqMbLTyZ>7P#uIpKZ-+| zqph$CwKf}y(V1-9;Oy(e`3E1yr}XUyzxR1z(km(sh{gg0$B6kbUw{fU4lo}q{VsR$8ifcH{r zskOcbG7CmsTw;;<;_`~b7nN2d{jp?~vidT)I(#Nr$@cK0?wO!5M$XYA; zia$zH6WyYXa856OR|zw%vP+T{2^g5!8B-j3jU_kO$<5nS-H3s-s}$35Q~dd(KsDE! z89@}%t8dx6F@LsTvWz@#o4%&&67OD9x5v2Y#c`YZL&oh~2={&ID7grxcUqLhuMMvq z=xuFp>BJuzPCCgNX*PK^ss7P~pBnyqAo}3V4K_?3i^nQKg-Uu z`8gcySYkBh@okMm1JiM|$^a8N$W_lp!!dHSL%KhiPS1H`A0Kl}&GIA9$!zXw=9X0m+V_e90(mJ9&ss@}HTc^N zLwI*DS;JaL{vsijs8;=8fdl5Ya9Gv}R?^9s0`qKGo`in5;s>CP(@ns;GT_J^EScpJ z1S1mPYXukgHm%X4n7l|2=Wd`50(?UTp`vvmeKaM9B0V#onmL>cNuNZv;!rcIgpy-ENRs3pE$8ZD*1A*dV zhxx}BjtxsnIGW4aH%vsOD%e{FyIsZcjOgHWPM$1tbS~U@Ujew(L zQ6e@s3&$u|oQy^OU}6^2Ne&;Ttn~DF=PD8-uG7Ep$E76l(YCovUQuZA#;fAw#A}-B zSRM^tAJSN#z9EVW7Vv!@S-Zx65% z=q8TBAy&^_i+4@Hj7Ny7BqUzVxZiZ_7PHY9sYaxd9~g=d*#msl%Vt>4PWXs^QEDOs zrFc_@-~s7rg@R>Rz6R8z$>faOF*xIj>kAHCuDvo6VbHcooXp3kD$td5qGw}jHds^R z1rl?yjMYD(qI70^p!4qgt+_s*$WN`SVH0=#8F9g5h`@lGsfAx z4kc&X6L{bB^-W(3n zK$l598V$A9A?*-G)CHG<1ZIXaR=IBJLK{G62_f(EK~o#NzILr)HpYmgt7-)S_r%tZ z7|vY^jv~YO z!@HG_RaYs%b8`)_7Wq47JL>QWbw5y&Vyu86ay%&O4>cR8$EC{TFi(Zl%PTN-2I7>? z>Bh2AG;`bhZtFKITxL-w>jz4!L0icy(Ry{-$`DNkYs7h>FuDEe%QTXUxUyuvyPBX%CW%4a=a-!~~F&0C%ru)4B!d{nLbPL!?#mC9M5d_B@(NiEUAswfvJUy@zX zycd?dW%|rG2;!n``1RcLhALgiOAjdkrz7buhpP{p5U^dhvLfw7I z=cETT)W_u}tRs$%A?;60eu+h6k99%B!Q-QEzt}$1<5mv22ao4uP0`VnM>4we>6zGT zG#EpNUL%B*K!;y+>;JrK-9om(xQ}&tn7Wj)leqZ!JgIu#5IIDKTAi4V<|I77Uu!}7 z^p{aldPTsV$Oa}*%G$obAVK~^J{F#an?gBAv%_pC5NE~Fw&wBTvV`*nLf18#>a1BM zV|m*ZxjZhN@shStzgVJ%>TL+FntyR&%+lJS^NJQV0kF$E8S|%T3h*~vHUzKDyq67O z7tZyIHG?wcPu2)jFE-7BsB}d5$B#YYy5;f-ra=+s5-Q(Qim*dGRCR}Mu-W0aA!HDy&q`*NZDY)dXf2F)z z={i+Jkq^;BUaGK9< zR`q^D6^Kdb*|Iv@<5AkQz){d}+M&`X=g(ij=V#{6Gvd7~vxE;{ z*ci>I&B2s_6?lUDQ@9kCaOqvt;||#jv<=Rex=)&GN9M1OC-_i3rc$WG`kWF!Xij0p zUH3Ma!48vcMLXNU<~+5*z z4bN~kJyw|W7X)Mj9DE^FQrt%l{rtUqBBf4F-7ZkJCq;I>uq6$Zg;sra$YE8Y9FJyj zN>Y)TTdhW!pOzF@@OigM04VzD|lIht&YF(v2;5<2j=6fS9oDq_l%Wl~SHlH`wk z0b9%jE1uP*J=a|u#DJnMc=f{x7oVEDNWNszmz;>(&=;0-E;N_5u&ai=1g9{H!it68 zSjT#I_gguVvB~^JWR1rsH!g_AuuBva#i9AOq|fuO4`d32%t^G6PjIO4_-b;m(#es= zW*xMkx8}SZHu;fZU9DRm>P#MpT5~4Xnl>UDI9*w9V_%OgcZ50hh(C{gFy-?e*STP< zycfnI5n!bIC^!0PD@PEL#Ux1ErV(vmrxGD(y^GVL*oU%n9KK%B ziHj4gpcT70@vEqu6+y?G0C#5Ed4V=Fxlg8cSstOc07Ywgtl zW!tt2DK7miY3~xLwCNVt1jW`CxU9t(ur=7W@hP3KHsq{o-I$3C{CCPk(-X$5rmHcr zZTu!C!Vb~z)zhI3)lP}g-!D!!F@(aGNH%oQM;|RQC6@Pgi`R7+f+=Or(B?6*y~TrJT*aO!5304rnj^WBY*I;IOQ)2 zVlf&%Vn?S%vKycoFOpiPirld4$M6nolOqPYZ*gLMynF$VDgh=T=`(U5(<4o?Hy7&1 z@*OXr0PBc(+3W}cp{FbfXWywe*ju#qjOCRj3O?a){<-*s`S^7Hh{45l(1AC4YVfd7 zTaKDRtD)0dYo8TIFx;d22g#WfdMY;2N*UUjMJRH z!;+f+QvXOTb*n^`x@(4iAgP}2EA^9$WRa{9S;eU;ic+il!SKR>;hk;Vg;!qL-n@+s z+k3CP@a_TLJa}!uTdxiK`ywLqWS*1fR8gYlc0Z_QTE#jiGcqzVGBPqUG9uQSW2;4Z zyEa+&IvF?(6Fn{|-H2<>J$@cXT}dszwsHQBBZD5?OFp z|8D@ROuJ)DkRjMC{`&bv(#lLJHbMak7qHz|XWbMh@OUvSN+0R%&9z^dERjq%rHS;_ zG*ic|Y9SG7=ruKAMCOM;u`T`P+0OUtdT{J!ZryhY#OmX1WI0*={w=|*Z$4~4YPYuE z5)6{oT^0s=JKd7$=rWz@!joBV}*&oow|m zFTHz2u;XR8z}cl)IxCfR`|K`W-o|<5Pd`n8m}?o|2`yO~>eMxKc!do$>l%7AJC)}L z`y;y{N5V@7^JzxYY zStZKrO^rtAmNUZFdjZI6?jwlTd;QmdMOP)x2qO~ll11KU?HE!j?mw5~Cnb zm3ky~qF(hd5sD*KBfg6PXGSFCbIj&~Dl_t6NMGW%-o{9E%?G zac@fzb7S?Jx_BU~oRt!~ zY5#bD^h6b01&(~w{%*aMJw%d3+}}Wym3f>iOBl8eQgTtQJ@0nUcviq0To)at=;f6h zy@!vOQb8s*Mm`xWAk4<;;6=CMJb{!CS&*>=vSgGW+KjP=XkTlG3B73Bg)jtz>XIkm zXOj)U5|E?Xe+%2vrOO2)mC4D+9`f?yK2bHFs9aL{#K1E(lA^me+L132;SzN zHc-(|ma8N#U!tpD56H;EYD!t~Ag%)SUsc3tVYQsV5SnikREkjC$1~ETVf)zvdNqRf zc{fYK+D8+IlQlhYV13IcPPLOU2t#3t5N{xk3Q`&Xr6B7JMaL2}RuV-aAhL@t$Ng!dSTt%)oyNQZfU+$tqV*@sw z_QuyWhKwd~%(tK~CzvpxaDt0ra)5|g2&z}>6gYV~a1n>< z@M*@VKmk1&T(EKClkSD*S&O<=F#!X?SBB#V3j19hcIy&WgahQG@>MXPixmNdtFcsj zKRy>8K)j4uzJDvfvoT!Nz@de}iEc{UcVTzewvdw+(#~92Wo7+1OSrO@CJlI}FjhI+ zSoqU8kfY%tqor}Bf`N*_12itX&uF028L%S)or)TIekSqSazYe3RUkyPWi3hs-(r|G zK*v{9G|Lv12;pkoiWVS?lxUdUfcDBO-nuM70d;{Pp^jK|M;B)xEQkP)yOPnUJ3bz` zeHUOMKMGZyQ{1K=i>~Cl&73$+E4bm?c5x{sk#7j!+QuvwgjANw#CG?hk;};Fv^zZS z(q=|lC=3x?6vB8?iXG?U!TTWQ(GG@AIowG_>Jf&yt@$jWu^37g-fYf7yzFug(-lrEj^QxjI&%US$ZZV89TXHvh++!A{4S@UkZ2`?I)f} z2PAY3YJ_2MoTS(hdmCj%ycBYxxwy41nu5izZJhT{5MT*D=;PjL??;K5%OL&-J&AHF ziseOb)D6@J>a{L&)Emb;lAb@%2pQ~uO@v&|dJtr~!hTM&7W%Ez(M6jrDtW?DQCKDE z9JDatB;2}z6=6j2o5ur$^%81IBG```hH8OrGh>XI5sY>b=ZC>&FBeqN=rhL#d&rLg z4fppRVo5R~`sF2M6QW9c+mA5KoEH-^h&ubBh-fMw5l)p7Ma?{xpEOX$)Rg1_d->Cr zqz7KyX!Qy5Mh97kuj^%?i*kFucY^e*k!bNjs>J~vv!^6yjKsnbP*+`o)m2BBHZFR= zb=xK9;68;4%c~3aE|9#0<`!L`;-ojX`qu`?aRHSltjPSe% zYZn8Z(3IrDh3s{Ydi_2{tc6r5H|FRRTy3g8(F^uWtQUStRNzYt<+^N$&!LHsGHI$@dKlO;=fhN_WMQ{O=HJB+(4X+A)WL-AKoC*6 zOHKF=?WBjjmnLBf)82&cf|aR}y^s4^2BJ`gl?*A7hsUrWlFW9uiEP`2ik~YfF%i-u zA`vC3@8Y1xVyMieg-D957sDo{ICxjVcZB6Wg>kGJqhwN5puQyoFi(5$U>MR5tC^(> zDVRZ=HbfH!H7@2~#~D6!;FKt&|6hCKVGCxihpmlWjXD+RqwEG%Mnu(jmSz zQ~YS(!uTDXpTM6WH!WeGciunf413*?r;8fM4x!CUexQrN@VV}ZN1fAdcG1BBmHtLb zp_9y)Gi^u;^-(g1$7n4;DAhbF%{=Ms{qXS&a7GmVQ152P&;gSHH?ol-jZMj{vB@f!;qXFrjEvf()hS@hLr?KZ;nA9 z;w#yv6nrikL8I8hn0Lbo0Lj_SoRVV(R4Dhv%mt&st}s&avRy2DIcK0Fj3(|8zHdC) zly2qxNcLN6 z7m|h2mi9bqI6fQDlJJr3wMbHx!btIyg4xl%5BNB@dr>&IE0Xp>beKDK0h={nb!82{V0vgDx zRDk0-T<^MlvCNehHx8M25n!3Zv6*P8G>Tq85}bC5helk>9AqqL=xu5ld$G_tIA~xi z?bBBYi$AhQ~Xk3%F(*5E5&@;DaZ@=vov zwuhxbkOM*`XOcp`AxWx5e~Q7r9v{K|g|mx7&#=D{2tO!aBK^DsjinnV z-x#)0jh{eafg}cN&DGYk=Gq!X$;%~t4D&Zb+5Bx3Z;CHn407x}($ksCduMlZ zW9@s_1$T1tW?gVpw{sL2==!_oC+o1sIjn5IHDOVu4 zWh$&}Zg3&y!OZFrr0aqoZe5m7r-BIqp2tmf(F&35{RdCgB2e_Lrc?^xpqP30BhyDBrCxgxo`}k4!AWxwfOE9Y| zMDf~LFobiCgFM;Lezbg>h*k)`6o`wZ+W``s1KH?AykBG9PhU|}s~G3qP2UWA8qbDp zcnd&ep1?o=RvY#9V6MO%gaJZ@Hkg-zyb+|0sr<0uz;;O`5s$g1;|vB)o`vlKy_vF) za2)*6@?3`0a@j|>7qVtz(h}ax@pyc8XL0e#)29nhpI$tDI{)W~(ffN( zXFghbI`g}u@fRO0@$q7Ze@FXF?(}prd8pMQ)fWkHjhag$t{5a=Zy1SZG#PD2z%-kMx23HD5jWYvX95=g7t6D*`leaS~Cv3bilzZ=uECpY$Vpj1g<9n zOeNUQK}AD?-yHw@Cg*qGucVGrSFn=mA-yniw5VcxXe+bGU#{xbs^1PiI6s6~1`EXd zD}7uxQ|!Dm%ZOX#vE=*RCiXlzzUa(b8%csjs_i9BTF)4Xa7byqhnrMT=tQpM$Z+=v znqfU)*@l<=#9n@|F6}fpbBI!p;bscemKYNE+6|RMlEF?kfAPGl$uUABfX=kSgp3;@ z%3_IHRYi2m)IjcnY;(yX?juDREMskEj!I2osT6!E^J+oysPRjU1 zKxo%^xp~-_`3Ngzu`mo?xI3M83t&S+*ASk2{J-HB~Bui`Z!xjjVU@kZ4bDr zR%wqAi-$bBqJB~j&!i-7?qD{!2@B%R(_N)*4A^mw18aguk{(TtIN^6dC{&%)0ya2d z<>KElP4AT$w1$T&Ap0Fvu_>^QSS}$Gc~J|SGq`A+k$=v}GYKi_AQWd!$=J$*$##?M z+Bsy(NRGZRYZY?_bdDx_Jww_|E)GkzIXFi#Y(=*5OeA26kW4dmy^YORjz;*dK)8fT zafV!eU?{hpIo|-I7LL%(~3ISu%{;2(eqG zh1zcbYS!qK`%p0VBEAQ{?cBRTt?FbQIjw_suj)y7?oPBw0yz^ZEkG%jD(NZFp+ym$ zZ8h3EjYw5S-lP!~DIW^71QkzY=V69M8U-950%$!bPS{Lh6XpN`s)=&( zmG|~LfBtJ|+z8AEb{_ghhSyB8fw=YV28VWu-rh_Qi|S6M8>lML-dre-)Xay)_c z6NA^;o6COu@yEahLE|gjNGQrW?l9D7KuU@wj^@-O5FkH>ej<=i7nS|?%9FrtwbeIN z&P0gordS1Wrr{iP^9nX}zNo_>9)!kq4JhuZAKD>9!aKmJ%?*xm*_Vc5!$Vy`GvZs! zfzn|v(T4BKfl&qLT-{T5+5!d>)Tce+-5tUkcL?_KB)6e5!~u_n;$kpqa|Xi6>(Tf) z?Z*bpdEhEHsuZT2a+T%^=Y(+yWtT#J()$5tSo*lI`C@sM4A}cSD~BULEN0-Xg9Ffn zRFY*8XWe;cSesHpDmD`5#4KQknu)cBZ~5_)m_LAx&fj0aX`c2p6fO6Sqj~3pU8j<* zfiz$S@6E%U2#G0na30){Vt09k?n@nryNmL}Z31ERDCQ#YM^3}u3pyP*Z??dr6w72U z;%ZU<$r-EM2e?7^$tFqoe8>#{yg0WYNYsUWOZ;q@cy_+D^!X=zp2Opi@e@}*Us+oD zJOu#HZ_k?M=!ZQd@T#WGgfzJrA`3MsFk0<@;?5dfR7Qo*Ul_gP7u!AAq`47`Pa7!`j$$0lKnMF8+1043)+kW}W= z&U!?g+%)E*t`>PE3McKu7OsC_7v=b`;7c0uA0<;lsAqkI!qbdl z4=GD9w7BL(h`3`q>~>FS8i&o8{+k4kTi@-~7A6ADL=GUKr4m}_`33=rK<5du`dS|x zh=c;)^!iwjAic@R=p*)CR0;P7XRjo-b~d=^V?8_Woh=Z|E_<@`$l*d31oum;m_*+X z&aE3kkBty>*|&hhR#q042&%y{Gxio2T(VcFO*b?epK*yb0Ij!dC{D?%Cq22Cp7*Tl zhz)uW1p*oDjp4Wg;mV$`4%#2W3iF0Azy}IMdw8 z+B-AZgXT_qXO2Mr*xvnS^YL!>$L2QTs_eGmd$75k;Zps>He+Do*P{#xgR(!szZ;SQ z%m5yaBfHV<{rCc>NI;?6ur(kwwuRjo>aHj7g$Bn&LSXLizGK_rZz!e3r`xY zVq9O;S(!9orTD$9G-=cdae7&0(x@fl@v`Ei!7IhxWu-|&hrw|1@mYM*@D*a=v&y7# z^x|YkqVTiIq{*v2$;;c=C*-MUl#v!EhZayIKUiG+ZSN3KO`z~Sd%V$J-F(>MGg+Vc zPio7&>eP2Ckn5eZh1KR(dl%ARck|f}q{7-W-f8;I&WhZgIs!}3)PUtA2%Vi0BsSAu zl;KbXhM`PgU3aF0{i=dET+&uQo}$&&Z<^bXzFXYItBK%xseSgvU(GDNHNALp2ZN@b z@R&l7EOhth2)u#To^}zEP==o96dQ#FBGCA+3u$o3**laPKc^OKY92NJQEE5R6OH0ti4f?+C~@&$xvT=?i4N1V%pU! zWohX%{4BxquU8)7s5&nXhwj_)&u0AdK@BuiUX4pXjDN5f zo%5;gOGLIQ5NxXuh`?uPM$7RVM=P5|6Gk>qzxCF{eOEJcDk7#Lq`z^GdLvIn&K5W7 z@s0&AG}-t^Vqew2pUu7jwp$EeUPji&y*EnsO~lQr)4l?Zs6&8TZZBm$qrH*dM`cJ- zNVaxl!`PZ$(Hp_?Am&_#gOU|80jOrFo`*5SL%1vML6I)xq>~Xaw=tB}z*vc5MKPj6 z<%*gJkqp#7)tOy${@dCuRFXwGhg#6)SUE;Uenpy`qINeTnbRtQC6%C3DD0z2zT-!M zd##U;64cU?q;2KC;LJ?ek!gp#jDx?B03nZH)L%yf1|$6P&6V48*s(2rGMC-_Z22bs z{rnc5-&(r;DgIsg1pj_|YY9(2y}b;3_-D6PZsFfgKl^+xLqR;hy|Vo2Tm<&^%IAE3 zljU#U{v42(msdVTwdLi{J_Eev<=adAwX*UVN-VE@_Bnsu{`@vtzqR!FZP?%0{89|{ z*2-s}p!ltuID?TdR=#y>=_bBD`DA4YmGMQaKlyZ-Fh2S8<}&*B$!9lj;oYY+goq`9*QqK-RPrs7T-X{*UO6?f8TTMc3=?xYd78pKrGxl+fSD^qdj zN*#CJoQgYd)^X>}skrlI9e3WGiaT%Cap%pcxbtQmcix|Tu%mcY6SFD&bvcV3#_4U09UHig6Vj#$3h6}Vza^P#I%$!BRAUo3%gRnAxf z>7K^|o^f!}TvRDY-Vgtl4_@uBDwx!>sv zRD>-Rz=_u3S!jNs2ZQ}{`i81Qr*q*0HPo};(SiU4=zUh)Zsott+wQJ~mY6~OuaoiM z&Yy6t>HaBhHFd`)oxKs<_D*NM{QaQcp${^$Ebc$=-d*f4R!8o!SA=ndOBS8e`!C1C z4(c!Tf1LSpy$6eJ_as~2U&X!u^V1v#Z&A=&^rQB{9iB58X+-E}pDcgA{K==#!j?Xp zU%ENJd@EbNb?4^tot01jE_-nVZ%a60KObZt5go9%IRSbnL4)<14_>1HKDcl|nQFs} z6sH=XTwj_=Imlo21?$v)iU2|XSp&)-^ zS2r;fxQh>jND**F6&CfqZd*zk-ZLPtCm0t8{&$QLPjZOCDE`T`Y75wkuf&l67_6@4tZ-J20d1dCi$0uvDhLFI8n>( zYjNJiMc`VnkJr|k57xvRFA3I#j+H!3klSa7)PjuAn6dEIMjYQd;Jce!Yprivj5oJZ z3w%5{1N*;#Fra^OK${)^eX+F6CS)XpE2G<2#s#3!N{ zXw?!R!ty8Gm%TBPDRoBAYd~7u1VD8l55o@SAVDGA!XR-vao~g+;P8P3oxTfzcdLLi z?v{ryw~#2JyTWKHSUfIPB5=;DCFJOr*r+EISTvF?bcjr zM39#c3&i+wU&8ldxsy~%IzIL<$d|w7%57m}$oy7)z1I&>j;cpL01IV%r{|}^#M1@P zFbtq>o{gu5+RX1wFjoeaKOgTcU|8fFevY(cs*g~tZowV;yPSBY_t5J-MKDvUGNhC{ z)|z@$X3zb_SEaHJxh-U*g0Hp!LDrb*oIv&D$+QUtP=hHxXu-4r8Lmi}jT#q@K2GZ)r?)F+8qyt2&8&3mCoXzVX z9Su8Y$J0O(@9jEBNORa7P6J82i|QcZ1h+p`@8HRe3;^Lx%>oykG0yfhIBh-NSgnO5 z9tqPx68D}uoT!#gMJMsJs)O`0V1wG(^4&x>;4TSMbVy>=g8IF9tJh&gP|zEM?De4F zUYOIo;&!F!mxCepCwdop#7lCxq9kipm%)9nL!J+YyrV<;mAs;ET4w2Hp*zDEFdbHQUpH zF&13i4%cc_kz4q7ACrjLSZF@-rmD4JY2)<R!ghD|0-T_r z;!+^61|1PN4Q+Wu?5gLBK@X7+rHtGM9@jB-HCK9Z`QW07GI$I^2J|;K z4Y2~S96uOh(1F*-98`sdNZCdl&;Z+Q!F z3t&?6?4UF5a0~|EmKdUN{tuKg!R8TTL}2nxkqIXT+ueCJLZpKQp$o4`f<64sRPHCo z0Oe6klyIFO!~lRcAK(*E0Tf_qPl)jLcMG=%Ar3~^gyJ@(=XC8j`N>fSsCGN2p4;7& z+0Qi`Ml8UrF|Wn1iYrkw0Hq2$_f{*)t$UjkvhH}WKD0xEWgk~BkhU`}F6nhHzSOD-9l35zfcfmCRY#n8rd5ZGM~ zyC-t<99;3z@y`ux<-k$cnPN7YoRvtapxjc4wAR$-nWO|JVaQ+vZvBMm2g?*pa)!yK zA{3U)8a`$vv>V(kV?0ajG$?5`d>pn-Fj5@2neJh_KEalNxNS_LfO(2MQJfFbU77d} zBRmU*v_mkIi9}o}tDK4o3sNdO?5AmacCUuPKs$XH#s0lFNV4KP0C zj=%{+6Bc^kx+7tLt+s4UXEk6s5Fy)RL`aCuLx$ucuM-#LbZa5W=svKGtm)E< zE~WfUkpc`j+LRd&DPo)3B5EG+tdBUX7RhZCcSsHdzjZ4cX5}M6sct~H2 zEoxF0POfL`h?8=tYU{rC20{0h7?e>kmH1cfe9~l2I-%CkxT;dk=!cmqq5{6+K6n5m;#V!qDB*KMi~%MrKb|s z11w0ef-~lunPxb`7sCOp&j@%?B80FzV?!{C1r%q-zk_|P%h1D;j-R>X?TVhDNci_=j5(MIfMNMsSwUmdcWxaIiKm4o9bG%>p2}79(c|4`l&~p$Q zTzNXd0ibXnD+B1r=|_57Uju3oAdF!Q>&(4^a44xQ0h%Kb@bRAu%!XCM-mWf!V8wjjWqnWPKS&k(Cjex{w#JOqle}Os^FlV<1zhHSRff`3|doR6b(n*#-KJ(;t|uw4r3*^_6yIM_omb zv&|?_YPN*^+&ohx_RmBZf`NLxvZrk(lF zQNq)&EcLI9ScU~6Y)(xe%$`-|>asdQ zsbywcyhLtW33UE?wpwp4@N>L?7<-{PpeEvhzyp-TY@e4ZBlY2`v*Gv)t7SY9LO+KQ zOds|$$=6Ve_#+8g*K#^i*1hb=sgTjOBQ2^pfbB!sYGCLrPVynP+j&=G zR=X?~aJV_`Fc6yt+cQEj>Bf!6Gxm$$Nl|DO)dD=4$$q zp1DH#NrdJe^OrR6La|f$4Px(h-j@LncS)q!I~i>odhehSjPq23|0@*PAhHUFe5#wE z!Y+GF;xspWrfU-6S0|2jB2OWXvBk|Lcrf&s;_Ns-|3I=CT~H?+I4yONQxiXs;FppH z@`U+Yatt{)0tv?84f)I0`Je1fBrzUz5Ez`B?OI`xi?{s~Mwe$(Zl?-}myu<4ayi0m zoslj+vb;>g~3NgQrnRFlP4Lw)IBI{NcD6QAP5=o{Eip`~VjK8Ks19%f;WL(3zq zb=cmh^Bn^fUv!=CACy`A?sHLgC34k~{@zVZ@z6PV!QibtVuuyVIfddJk5N?d%*Fw! z!+J-@uP6udA3hyY>BE2gBN@aDf#J2C?P_yMtj`kq511!>E=)88;D+Qy6WQv4l+8|Sk%`2d6AC_$1E(j8f zxY@~kOE48%%C zg+2tVWn;9;KVgbgH)tR4UD+)p*GSuJ=;UR!>K-zXH*FxTXAd?XZ#=w{BhR^%zuic^ zW)ZWi1k(hIMimrsJFIS_{ay`xWUx^J`RvnkNCFN==}vcUCx z#1Gl}CFB7JYN4i&aqul$PQ7oUqbb5FCa>0~{T4cR_vJ(SHZmDRF#cq8AenuY-OBD{ z5*bihmQ>K3$iEWLhDXR$?}BCRJAif!f#{j%R5J1j?NQ_^Wdrl#$9BOY^sb z$>uujzA1Z>$=0eHtm!GC0-sgfa6x`?F%Sp7)UM6qw+@Zu8oPTpyLBC=T}x4hju#8N z-+}h$9=UJEj;gLW8T~XlPxPp-(V0K2p(kiRn>;I)rM8o4r{9&R#jUnR?{vorysARAKy$rzLkFb zN&4}p>Bpa?AAg>He4CHs!65r!Dm44?u10*#d89Ay)Jxn?@HmA@bWCM{6&jx0gNrga zNEYq_3932D%t=CCIlhke%y-D$$u*UH$M6-W}`gz#K)niSF6(ispzEbQfL{-J( z%SkXI47O>Dy0t$>>Z9^KyR7l_$@2W|ACR(K79?loDD!2oRk1C6N%kQuedqjSTr~}M zbem3N33vTij*xT4=^m90=FA(gtglFX*j3dMD&% z-tmDWXQ%J{Dt5A?OIi_DkGuPtqG%6hw|xw*5Ec7f-b#sj3_jr8PE1}oYkU%lp#t** z%_+?aIX-Z9bh~_5!fFr_X~PW5)kmTqe+-GFhcG|XpcyMALI5-zAtGa3Yi-DTki3PM zb7)CWrYOrzRSt^Q``j4`$$w$cKTFTVLpbE%{@Ts?OnY6F(d>*7ubxCT(9}J z`}hg&9*}BcxT4v*lg-@u0j5oOeLIE|J7M?>5(JyA+;`5o1+z)S!3}$q?+c^Q6gctcM00{^#}lTH{eyuYw3xsYO|4hR?!XZX-byLsT65C4sd}2(dgzC%t80tckum zqhGoJXt1sBO>_ZEa)!92rEA+lA%1JH^KEWD69{7G2I0kw_$_Z>H=@ISV#ZHm8IL4Y z+Z=e(Xw7n;lrsS~RkM-&O0;kZ=vp)a7|k{ijtQSJx%SR`$oPuol&ph80LuysVjy1{ zvZe*=CQzbO0olMp0o9}+Zbij>iYC-vCXgY)@I4gA=X^BSe+`D$-uSk;)@BYe&zcMC z&F`M!>EjmopXA_2Y5-NDAkmAhVzG#x8W2|S#-~&0@1LCGsNo*GHO@nqRaXGI4&1x@ zN83E_Lb1aREI9!n6RwXCyh1$sBjGA2%1N0MzCoAT8|f}d`BwiRXk@#k&C4qwp-!># zY@+{5O4RX`ArfS-i#sZ{j&Jroz9nUkLZ@uD&xeOY8LRRH1QKI)Q|HC6r&VhH{y?u9+wxYi#Sdbgw=g_WC5C{GqO^n z6F9WR{c7q=*x~gL#D`sXV8X%GO|n_elt|uHj2X-FQ!{p2U`j%`!m00Qtx6TZNSeXK zXXSK9)wtE*VpVKoIgWMJhWaU*pS=O7ior;t8~!)ek9 zd1HmYpCI51(0;lXUd<{(4u8k3*sVgw;S2$X6*!9;uv4*>!#8VX8G$ly)-|DhK`TSr zh_d4TB0?wl5%=XL0*U&SELSF?p0O{0k5<+@FMp_?D6XMB-V^#FC5v4N_ZipIf zD}Kk_2)d9jJF|Cni zM$m(I&0axMmBbSEdbe}&&1Eppgo5FHBd&Qme0vawZx5pX_8|7&8bo$^2yY^M-(2>> z@CAAGt}Ux5g#8pTr6#Na^(Kc9HTSpcMm4qTPE;He zeq#h}zXo@AbB7$kEDAjYUIz5Gv4`wub#nxjn?F*+OQlJS?zeF%cTjNYMDSw^Cg!LTMW6_=5UM%rR6}_? zwx_`#ZVCQyd=;DZLNGvNYuH890^X&!%Q!0ev_sBUF0t^Zd&W`8&yA`K_f^M6A!>Ew zCMT7|34~6dR>9bW?&fsZlKZ=2WNSG+mjDh*_#I8w^6nHT=oP4@&;)uh%`tdx3#~`D zlpbpA$QzEUOqw(aqN5emLIejr#Zt2>B$m$GQ-+s9oU4Ay8AFP|B#KeW5kik+oJcS< z(sW1Q`;>}2J<=A?IFCo{#|YMda&>k~3h0c$ftPDKu_z?^NEFJ#z*AEU5=nuOU>RxI zn;dhj<~&Z30$T12Xz@p*HbtTnEIAd*Ri<0p9Hi|En>eXZ=up|KE zN2i5Yruoj7V!yF@4kXWv>h9p`4cz(Eo-ctMp~gd!v!cf(H4O`tARHre4gkE&=k60! z!Jqj%5Xj#tpph@UjF*>keTTt&dcXb0;bDGG`!dHC5o(HCp)eKB6rAi=)7xnWacKfQ z#F@5pT+t&5Z&zs1n3cDe^0HwF2cA5YqAldXuymksJ1ror_*2Vq4a5jNr*TI(FPHTo zMDw-^4A5n8JXMmk3NANnllzf?wm9bHvYnTyvcVwR@gu$rUr*%F;l(J;YdPb=X>UI; zD(n3XoY_ediPP@*cmTUK^}&VR(_8XhKSp%=G z-?;AX$tL`McwR=D$x)^6{9oeY5L>;h!;f3GjOf!GyY6nTr%qk>5i(#}h?YlIkf%VK0~7pfEB>AOf6_ z<-W=rpfsc`E2x11NR}wfR6Zgc@pvz5O5(_YNfx)lO2o&alo6L%0+9%7JV}u=GQ|JG zMK<`p;G~zDghqnbcV&3QyxhJzk>HH3&z76{7qv~1<)vumZziL#! zx?cV2r_?Kwy)-s4-B?6BlAKujDmkh2RdPbqD zJHx^lANBdgP}`+M-FkWN6qrs2XJ?2~Kq(08S?ARploIm>(L3~Y9iWo3pZ!kmy)(^@ ztn&0+kssBF)lk~--jLg45w<`NzIt#}(c7mNkj)ZQ6^Su;(O>v4A0Vd{6JFxu*W-}- zUsPjE5G5u{z?DZOsT&r=pfF%x$VOa&>KB(_ZIaWe<|Ne$tC zc+xo!HWk~FW@vB)F8LpsEK27a(a|DyQ&+M^dAG{r{gM28@PZ22FYi!RxRmA zR+SOO8Zz>!S|!yfGX6fsPQ{|)2_InVh;S?g-#=}>q-d3=QxW5mVi~m!odRp`K7%CZ zHoO9er2^R_00HuLo+GPz68lJ#(+-K6<|LOsic~>;RMPVz6ej3Jh2A7QUjq(xs6gmF z97qnD0fH;3b6^GP~L3_@GoOFc*CRWBGj!g~c2ha#N1W5vnqIFXm z6p@1D<)aQVhk!A8#oO&E*cCI>>)~~<`WIFVn+*5@7Njaaem3xjyTx`iM7D%iq)mLw zO;$zYp}tBUnRVEj1MB&bu3pXzv#a!45ZSX93pZNA_K1G5V`;Y_leP^i#{VI#<^ ztVQ+TaBw0@ML$JC0ER7e16tLCd44xwCgS>vF4ZJ%+0g)JmE~K%6kwnlZOM2bZ{gU z6fT8gKgU=n#mCtH1svf36gbyCF6lRpxMm7XYB<3X=HPI~#M51r)_CfPzemcvI}LKH z;i)$i0`EG?Y~S4APeL`CmtX^|n_Lk6VV3$^$&t_OS8$aThbWeCB;h%a&Etko6cmu! zNsTIBIWVQ3K7JJ*J{J1!IM)%D-(GkW@4iM|V)I%uz^MQo-S*yD5Pxy+3PE`4B@OW^ z0Ouo}ztKjMkNHWI=3@(h>y-&U3qPDeRz@ArK%p~z^kmm=ulKw`hb(*-$Hal1KP(tFj= z8V|1;M2B#ZEFj0Kr6ag%8{ZeSN5-r(qCO z0Vi1z)m##`HyGnQm{hJNzd7rS!-RRT1BK^im{`7|Vmqs%Nj8<3V>BG7Xe|ufwS@{STj^q7TS{dl9}AG zL@|xDi^)on(LW2~-a1jnqBGU9dBtF~T5Ke1TxG5sNngNJyYmme%$;i*h(SOENf z5-w29DD5Dv2`@qGB+qjvIR4h5TW@~#V}Ry8oL(4ziXbb3x|SOvy^IM{wxkZcnZY zaPtUjEUXRH3_wn&9fuiHLmn^C7aoD%v^T!C69P7q`b5JXFI#Uv?2$N89)O*>e=upt z6ZMLcNTAV)t>ktZ_Oe3gR6H*GW;<9l>`nHB->2Bf99v*D##I!cXz44l9&@FDLud7< z;>Zpn8{5)-PGv6#90tX23L2Y8lLxwz`G9<|I4xwd3~_bB6&7Yk8`6j+$yYKiRcY*} zT$rjBha_?pJ7!X$Vk~MTFBH5gj^kV+u`fl=h&=%up#-bo7mF6zxU%9KP^)x?bQx-S z4WWiulR8sV^$ofc9h^D#pLXz9H#c_M8;^0+vV?0Qmm2@AwZ}U(LUR%kDn~S`*ssN^ zhFXpg{0_ue@MkQ=3IxN1|4VE-`&_3k6mgv7E?U=V1d?48<#N z;xFJ0q)op084=H2m~fkWw8Bx^Sr1ou)H)!f%vB{3P|((F+&Ij9MBcfV%`X=o;~+vz zX2loS*P7Wu4qT|R;4TjUJ&E?U?wrFJV^OYf(owval8*DKR|0>kjB(1qdDm;qr&wo5 zEaFJ{o>PO}4?CiJUOlha++J_41@vH9)CG&=R|0-6Tt>&Iyap!xmE>z zgFFmQ?9i)W$DQ!~Wqb>W%bPD67CjcrZeIsRWg2pHGNT;mEdJ`e8vr*8J%7jQIL6tm z4n_kK8%quoHo&N$9##R@aV?RDsnta1LUAn-Y1$Qz;Q5Dw3}!v~TU|Ya!^7Rpt+m#- ztu;A1TdG<$;2J&Ks9zTVof)Tie-{2QFflZ6`5Ty~kI#mF80rTah#S|SQ&&KX;n;C$pLA0}brbAAM!d)du^vid?C z$3S?BH-LVyh?TB+zKx z`9ykISa=HrR6;1UVElp($74{a9*_63X=y^Ksy!6Q~E<&5hM> z#2iy5g&Q0j*n-B&w-K@UAjQEE)wLBz_;|K?WJ;%$TC2=9QTyOr6Y5-q`*OU(4kL%2 zItprR09%LYFo<$Eg==j*EC_B?4!DaXRe=(pfEAd_iMomY4UvLQq7?vD(J|n17Ku5X zPZDq<2NvhAPHo(%Q1S{XG?Mon3_OKKO!YdFpsQ<}J23Z2lUpLM!pTOg3oTC7t#mWf zN$Q}zxUB;DN^O8o3TpsB<+Bg$*R=fw<}YgVcu)AxydNmM`1_<6o+n4MLu3-Fl135a zZ+Nqxase;l>k37T`(2$D&bxvL6MkNiN{H<%HaHQSQw7P+58u<|AOu(TB`zpx-)CskKJ|9Jc zA5uYxO(N<6KaiX-Z3>iqqhTaQ5fZd!gxmqHWEp;ntiP?hBw+xKeaz(G>*@DUR6>W{ zqjMx-2=^PNHIiv@4U_8V(GXdvu}kgKzs=H7Ln&g~!oFdOkSub`2=O*}wJMw4Zq2%p z_VzOedAqt%Gzr%o$>-D}Y<88+@F*@Gb5k?c|SL>_&$@j-lqr zRp5pE8{%~42FiN@Gn9Dxg9dgw2o2+^*lv}n%zbm#O8~$rFC?FpUC=9^aJfr^##2Dw zLU16<+3MQRdg8KySnpvxNA5Yq{j3sV{DRm+7(?rjbn&|VHi4y@AuK~00x#-BAU7ws zXN~ZZFSEu6(hgjToK;*`e(VkdDXtq1K!zjAG@ra1ps#M50dqM+PS3zp@R&oC zFzhQ8HbiFLAyf~TgvN^4cVA37YRbqfK|Ht{r9jj?_T5e=EBWk0CxI@M?`U&CVqTCY zN~>{@`bm90u-=G6eO}vXgIMCg7QsqTSOrwU5|I@o1J|AIG>T%R;63iEwBw!1sa3oJ z1auoQv4kIRLjYpx6qfH%q$k$Mez;R0^IlE{vMGiG5HJ`tJIe!5B;eFglh}C$+r#OC z7?bt~XRl!2@y-{rOTlmXjzNTrqpdY;%nK~L0mnFa-qFtYB0Q;C8^GcN#{qb6fdsl{ zP^6Ox5bDgdlRMUHcs3JSZa!+IuD^wJ!(^z!vP?Njpnw&qiH#@gS*-EWQsQE4MBhzUBZxIRYX2j=1w(^6v0D$@y#gP6wA2q9Nap5LarWUGpL| zr2?+qGB#$);WU9Z8+GIJL|U9*rrTZoER-{brhK`W$3%*#B zjZhfV!X*L>%KUsl?g&aQm)OvaY`u#c;i4Q1>w%%nFI#?+xv|e4bkO2H#gs4yQtTbN zV^JS5LctmDgGSjp=Rc;bZJmm2<>v_~#q1-sWlh|%4PpONVlCW{mMDPfefKh8#lm=k zxgwLBb|WUX_m1pgkS$auNQs!4C2#%$bfQJ}?e*u`8B8T+GCV(pu*X$OV7N_UB5EdI zyT9Yc34)A@!er5)4!5#|ihI^U?Vziy%1;6*K2FX)zKGa@5BLeXVSN~d$kca$mJi;_wFH4?b$tDLX z?z(UobzSOgs@o;Rl`k&Tom9M}ggfaVnzy#9e?q57j8D0~$q`?_^RlkKYYvQ{jV0P} zqRGm1ikIFnV&MQfkWa8om}XD_>Hzu@C6K5Zoz6u}QCzIIyQkobe6_~vBD0(;Gc>u; z@vzr_&L6xmQo%L(x{Fc9NY}2rPM75bTEFBPjZGeq{iQ9^e$3+4II(DRt&7K-V{ePJ zTg6RK+4AO}s%$SzM^;ZvNj{z=t1rE9p_^}|i%eR--a;6QvexS}`$RApg^5F=@MD^t z6wdXAio%nqXk#~o(*Rmdj1F6@7$Ls$N(S!n0f5BIsX(P5DOj5y!GN@*0x^7J3;+SX z4WjA{Q?imxRbcQYoFr^rsR#MD*gsBIhWr%K6<#Jzpe9~+;shL|D?ABPF(#Mqx^Y}Z z*PR(;TBRn{^_-_oA58E>1xJE|JVcpF}oAoE~0DL`vW-5AxRi^ zFS2M}^hPn7#qFn6E3IwV8w>^~2-oib2cuaSMM?q#6BHs*3I+Md3!dceCKxmpj?bU@ zBmvPDXN=G!kkj#j%Qxe%JdZlaKT8HM%T}FC* z?1`}P^y8~Dgd2LP=)T>U2NTuC4`2BI)*t@SKmOp_wZFc0?eBm8y#4R~AOF|?`oI6P zYuEVS{I!324TnRE`#1^hgSyL$=i}bVB98pJFBi9454(HkN2_|AI9&Ks=SAnQuKkTv zyoL_}@UuvB=Z$Qww+|;T*eA@|(}V>Wb9ZNOIKH4S&?CtZEteA;&7DWrkt{{{B;%npp7zw+>(Q)sLa)ntqx)~65 z*wBy*@ht74tKSdKttUjvI&HL=%f1C5HnXy@B(UT_X~tgTtRj1b>Zct>)gIH19KhBi zRm^%hiaqJciD1yVuA?|;LL>-fut(cJjLYndb1tyf;G;_v1P#vM1ae$7l8+YGK-`U;*1TaZ)gG(Q>9G6f^WIP`QSekp6*<>F>A)=vzDg3jgj@hj zE`}g_|A;XPlnn$mKMJJFap_&~itl zd@gJR2|7CO!2W;4ZM2-Pz*pn6C-EDweG(u28(1ebX5ouXoO*rf%|( z>xEWBJONwW zAEV6OPIinqZ}(e{%oy9PUPA1os)CuctF#{(jJh!!Fv!A=dNm-NnwA zYy)($<9l}k6^S3H1n}{MPf^~B-+b^I74gaUv@kw{BZ;GE3mQ{NBB~w0+C1zb&H>Ka zDJ=SV@L^kuam4{K){((Y=tzg@nELs)>Y1 zF;2p(e0(`TWawR_U-CLy`{i@#P>rXs-TY zyA{nnLbAt~gSEA})BbLiL8Cotgq1(O9JugahXEwG@bTpU3e}wdu|o7zbB{elzfTJn z*ljuar@^?qq^hRfhZ`%`O}8zliolQGU0J9@TV0_kLg|N6C5~JOL@cXwUPo;#aHFsV z910%PG`fzxTSTE)%YF$FZ+|Ns^bc#4R2{x($ z{v@oT#&P@#pP4Um5VjArLQ}Z5ZmVC18wDHVJyNxU+Xe34@_GM^+9>t@>$#s%<$&*J ztKRLXINTl(x?xdnLYGP~4Z26n{WyfB$O_y|hY{eNXNy(f>zEf@R&Jk7Y2`S{NRCPf>h-!)|n^vp~2ZfXWWqq9Y6=MNK2Cjn9uqNocErv^fVz| ziHtQuxgf(?f&=iub%agDDa+`mlNxJ>Kc%ZlBwDbn85!8TnoSF><7s5V2hGmRxr+BP za-2djh7+DpSfOx#h~1!isyVMc=e~~7>}0R+BS8CexD=zem|fV3{_GjRjh|zLv#^+q zg99a7PFVJ_J#v*ye%l66-O+%Gxp6mw2D7u|=tr(NoHCkJvLsVe9yzg#<`?1B&_F_v zQ*5zN8hi3`h~zTKVXu3lw_b|Wi&>DMQf$bxDGa-Y@Osjlh6@8w!taiwi=a@hiV+FI zeaO_>myApetM(95D#i+B15g{-mrL!Kr}+rfde|GCoxm_9LQDe(xOGlua?Z`HaJC?e zL8C|RT@a>?=l^xSpw}zf1XJ^zDu$q99IZ(_1-K@%D6CIFVHRkevS*GI;Dsj%F0jtS`~5=ipXnJ5mNK`Ps`GP?EK>Wl6n{xB4sYF7-M~o~C zG@_~c@y98L(5T)TlkleNrCS89B8~0b3sD8WoBw_ewoY*%RYD^ZH4Y6JvjHB!ePoQl z6cAL?AVrbN`+#UI_(8-1U5ZG%PX!hE+A#(p_$84)gg&L~x(;GtI=aW@Y3bg)ISQ0u z^IVQgC`yluliD?yz_2vmSr)_7?Bg&2>A!{9%~N&~-#fa^{E!k=@vxzZHiAKwlGi3> z0qsX|^#thvk)j~`^Z8)x^g!2fe0${PvZpiE(_Pt8?wgXf76)GEd>LE9_Y)Wz0Oo+3 zyZALfpYhITqzgEV5*^?xhh;Rb#p#&jz^Z{2)}?1SD>=t ze$sC!eH}34IuGv>s^VQ*0KPO2J1Bd1<&g19uP#o|_{vINr~_VLv}jllo;C8O!Z}1; z(`k_x;fsrfL&Og`_SSs#5&w^mO7HLf_rLu=|ATAS_}^^(QK_}z4@p^tANT$KkTgH& zdw)p!{*d&_4oOuc@u*Xe4RNqI&W;D%hfxWEcR=b2^T-a(&25LL?|oc^h0Ows)s0NN z1`cq>y+4NbVh$)cmzE|d!tB&jFDFZt@JpB2@!_hd_bc80HorWG)oGVTuIk~+ zX3z96+RSf6thj5}Hbny>w9cuh?=TNi_X*Zv+_gAFA~HPEi+cffFf1PSUgn4iNLf4i z+*xE0mm7!tKL$ohq9Ye@3sqTPbep__<;lWPup2}Y_=YWa1O(R}-1UXu3rH=Ix0Hb4 z(z`k^GXd>HMj7~i{0Z!;=iV?Xdkv@%@625!^mc~8G^1C3J0P9xMtT)S z8{Z?bx5r~$Ud`!41Dl!0g5G@ohh1!U%XL!yczYUv5~Q+j^S~$e+jfaYRwaIZbP-^A z^@QW_D;6+3mnO{H5s|zou?a%{(#F2fPQD{DUkSyWQ8AwMS<_GQuoY$FaDI#ABL#{9 zA`-kxPAp27GU*WzrJXZuft6z{YuQ+h{G7+3%a$`AR@>bvzJgiq*;M;3iy+pk?n~@~ zu!2zps&5-mW0r7ObGb&!3*&UGh}hPlBz*OH?oQARSn0fk@dEl4Ba-3NE26-4tdqDR zVpeG$Sb1IFAK^5Uz4UM)bPCfh-X++aD7CD;5B6mcx~={QfnFUv34gfP#Wv4179=C) z#x))?+5Fj{lWhXf{0Z=OIO7H_Mw?~uF?2x@+pfrixTT_jrgSAKU~IXH1ZeUdgK<2j z4Z9nf91NS>e1QpGc+XL)oBfFGLDu9}tA-W9ObBj6{=xC4xksKN3CRG?n2bH?nG+6k z*m9o&ByOOIXC0Ib8<2Udk?_pwc7_Z#9W1d_)mGJXES98`Jb35$Lb7D|)fj-uya=3h z(n0u?d9gd0tDB^TlpVi?fYe;1IioiawN&N}rT|h&!aWVn+$WtMduWx30{3B3IY4%6 znCCjs7kPb7K{Jle=@|$m$|EU!1ExGF2KE!pff2Of9ft*u=1$iTZ^JV2AcD)7x*`#? zG-Wmr$ms^Nh!g`VK#Ey5&dk#lJ8Ow7M7W&gnD6HR=jOBr;R6WxMHZW9jgb>@nCV8v zS~0I>YbryqWR|Ov`VtR8IL#gAh37g&$yr|Lrjx*!gc3N%r0S;Gck9tj4?H$Ie)<2Q$phK8Z3DTgNr80YBG zf3dmU;VXeSIQP38oj=jUp#y=)a|tb75>XU;Aw6L5qCDXBnL_Vr3agcdx^S2Qo979X z104%%mUoOikr1}Hwu5M7?ihmY2WUN6f~^#<2NL#eQ*=^XjJ#|BGmH_~gENE{(eh!4 zpoVo{Pk53iUlAf3IDje2Zr8mKdx2Ni0r)>AC=Qa)Th!C!27<~4BfysUc^%VMAHuFF zyEjfO>CfgF)}Iim5ONu}fD;`+ev^VApM~<1V;aj622q)|ud*7)n?xWIZqUT5FpYXe zk8%Y1R6KwQcKK{n93mj_RnG2p_dDuE?+*ZVIzs&7ELlp>FwSD|I#Nb%1d2z!r$ED}8rL0f85_0YxZM0Nf*f*Nkiix7sw-{B6$S;L<-g zU1f@~#o{1bMzIK%J;2oh-XGBM24u<=^tV10mQY>=>reN*0b{e68o-etP>U)a`JIt_ z{{ZKep!yCLX*wR<30DJ_0Yz7-a8&CX2Fag51OY-~;fq)yg>%{hbrV!|DPO}m&olL+ z7%e~|P6=pyEG}!P4i_^y-bIi3IQ0>9!-WNo3{lfEaiAluRIw?cx)es~c0zP;!ZZn+ z8ahmx#Z%+)K%GcyP$_Yw*4X(X-A7M_tiWxF@&y(Se%ha&gF`ct?qRr4yKM{wyopl! z)tSRawd!w}BM(5d8`T(D@rF`2lGKLbf+2TnWS<%AFFi1~MayKLsRv0A`dcFB>>TOR zo6T~!d^6K;I~9e7&6{AZaFw$bOpOZWR#1+E3gMuX_hi?aF&mg#j2&FKdDN0-A1kgQ zrFBC~N882-Kyd=1vDihF=myMW@8ew~-p8kA%m1YD^?&+rUAxBr7VA&Vc3#1U^kwVi zepeEZ`qML3<;Q)$KRtVYddASX@2?nQ-Mq>xhVJytPeEu}L)?GWy|k!buqk93dNb=H z!?7Hkr0xsKu^0|=prOg;4}Nd+xK#?rt^;1@*BK7;g=*-$_iBf4;vpoy@YtealwluI z(G0~8GVuo5Ppm)(=VD7aV8WTf87~Jb0@#WYHVr|i9SK|$SLSV8+X~~J=_}lNhK_ln zHqyRSrRfK1C(KZC)PcoKLE;Mk@j~_h2AAN}5at-@aQkv}C$;OgX@$F{U5(vhmEa+v^(qjtLVx3sk>2GIyX#-+qXPFEP%{!X(BE!40@ig`~hRA zfcP_v|i-bO!VRhb(D}FUB%c`yxl5bW*0ZIQF-wmox?EMn9&N# zC2-s^SO=UJW~_x*ltd%w25U)$cn^?A3p zR&@L9ESicZI9reY? zOXvDeX);dU`tBdzy5#zi~sCj{>`;({O^-mrLEgRbfQ(~Mb$>;2OKx#L68W5ANT!U zi+iudz1QO2ffg6WIYJPmZJC$QM+(o|n|`Z_m%sVIDSs{GB|k%|57AOwBqasHqr=h! z$5K%5x682gIG26Vd49j&9q%D9pG7rl;zhQ>7v=r;>bE`9HuyGb4EceBLwH>oe& z)2*S^jTB|WfgChiTTEF;f&m?pf**O!ewhV7>~G_f<>>rN%4&yDI?Np&>L=cj4kkIL zPZj%O%DjJ%qqwoE&TZasRp%PeRemMsW_oi0ErjI)ffq<5x`X%Mq9?)I2%ymy(ngm!fQV!eVJR^dxmSHl)br)WZe( z17-n{NR10c&So7ED9y1jH40viyvDz*7Ysbf6S6LwK?{XazgXV9J05?@jJJ0e@ds?x z*bM8Phn%84x!O*v{2?=#(SnNU=i)==Lot$&4n?v%aoZcU`Ulm7=iX7KKKvKpV%)fn zcqsV@k;sKfYcvmK9ZLm-j_=pC2)dSAAhCl&pgo`c=JEi50B*ZH5U zpd%E6<8yvUZh?ky_3(X-8#$}{IAv~0^JG`e^xXh?7dlp?C?6^if}s@JZCYlNCsS_&&6L=G@S_sC#L|h8Z;n&@iSo`SHR;c_HWiW zzCy`x-&Ak7VmtK;*IQJ@es36gGo#&m!-(>DILqwGd&7usVScTK5wUv&!ccatw2}nR zY^y&%-zz4lE=V<+SFlja_AwNb8o6UeEe2l9jl> zw^-;p7Yz6GM!A5IJV6~pytTz5Uw_}!X7T0DzxVI|FaP$nYy5AL%>sv+)iw(P;KzNx zw^_WmS-iJdyaSsBq%o%b4a8*$95S%8q^m*75#ujlYN!+pS7T~OfuG*gfEc>YaV2n9 zh@3EtdZQt;2&hcunrE)8c#Kss0%H}t-9nuo^l3>%I>%DLso2`H1tbZV=D9Zbg+j3K zI~srfpBqfVhI3DbOL{6;189Fr7lSLtuS}H*7&#rL0*`mL^9#^o8}Zq85}9Ah*2ysE zSv-|k4z)X74v2{^#3vg6@qhV$|2O{*(p~bu8+Bfu%KF+&;wUQ4TV z1z9cGc9^p=*P&cKNti*y0;!~y1aeh5EeY!iQd$yB{dH56Se%^A@`K{3gig6HKA@i_ zK(HNm-*Kb&92Xp4WgFezk1x8T{wr-lmkhnZ6HeRw#-YsO?6uhTEZ+oG^4H*T(J3c~R)7lc6zY{g_ILWc@yKGH^lm#puX0_hOa6=?aN zqh5JrSemXF*qf^dA>uLlI9=}oQ`fRmnz-}Brz0!@N5MGQ%!+|0n`E#-7$3x_~njnQdcC-|11{B6Xd`S9eF z@;!xfHbY#HCB3HTcwJMy5X}G$H;xPeZ+(ErL*9l>0Jy0Da%vQuLmR35Dk8B}buEBX zf{Erp{anyC{_FO?`p?h)>e@B__qTQ0hPz65JU%^PB5hXS$9>=Z5NQWgkAFDWKj)ox z(DaVGf~ap+fi(llVFkI9Z6e_B^75Pnf1b;hm+svB9C4qs=DL<`YEoW~%$;oKxYNs; zC#M5ks-K@n%H6vkKHOa0{eG*JeY3m1mTf(LfSk`rPO-T7$D6B*iw}1n>Wf^ZN{fDJte0h4Z*g|Xq#u;!oxml7Q_pOTJs?Q@1|1plt=NzBqrMYYq zMrU|m!S`;FVH6lz^AKsod%T;lfT2O~)ZWoC9y7qz@C8y+b6tG6$yDcAb8WY^%>>um zt@X`sTgY?0_5F7H>u+`~5xOM5-uisR|vpm+ER4~R&v)L;QbkOp%B`+DOsvezJEI>JtF=@RCY z9(T)iMY6!mVV_Sp5)5*53?AOo$h41$QzB11)ITE`^2qg$kTe=MEVzgYl+F;@nk8qo zq+*8+0pdeKV4E-F%qs6hoOQ;>GeH0fltcK37rle-0l@$TYXcWB>Ct9+&k;ipL#1Kn z_IdfS)2DB;sNIs=5|vp$B5qE@14cw5xZ}Z@fdN$|KrSLiAVl5a`3WwxB9??{e1wI_ zS}vLS_g_fVc}Dj{fC~l1X+az=7}&CpE6W&w_15<4H%NZoe9&HN?|zT_wFLC2y}Qxc z0VjZ6n%P!!d$+y%c&)jOIlhfdq%9EEDTmdgM?m=ia$P+gAgIPc7x$)5Mp?t6MuE3_ z{r!`3(9`v~L_&hjjcnKz*Zm(1~4n- zar?PZ!h(N@d%%dE%cS&@o{$4n#e8#w)b8&u%)uIjQl0*DQlvh`-Rw6eUsG{1Zk;_~rM({*j@q}v%Wx;-wOLtHDj0qD|_96p@58#^MBRr)(b9#q`Worrhk7nI z$f+jMTDd@k?brky9bkAfsdsXK2=F2!AD#bMjJVj9r~}2x007V@mt}A+9D9DRoq}w3&b_GK8^zIrB^> zaE#?POq<9XmaTPrW5{3~&Ty~fC?$(3moK<&^D--p+;{EWmrzATOO(wRS4~N$!6XBa zGe7|=Zn4{(It;`~RN;Ayaw8u*0rK~tiHq7U9NnxSdD0q&|SXkgF76EnB zhpnyMZ=SU`9yA$f=FlxrA{`6cIfDf z;pm)T7W(9WF&?&2bc!Ks8f_8{q32!YEyNr^{2=&KV`fTgl#*eyqwC3bO!sA7g&*{z z2}wqNSAhZQ2@{}0d7F-Nld%2t%tzOiPxU1NEa?ES*7M_r$Vg-4fG&zDgQ+itBD9a) z?5@Ea7xh)gfN)DR;speJUtB?J$_-6#v^qE?8yB84cES#PxFP&rfT#psMA1hZ()sUt z#L38YRllf?zLLi?plYR<`igREV*|+)e_>gO(J zY5{I6N_X9ky>E??p)Z5hxD9w&iJ; zPFz|r>g>TnaNqXCZw4mfuVmjn^Rt((t-Q0odwdb1ohiMnc22rJ~SPQIv{7>!0SpyBYdoBZUihV2wKjTy3! zTN7YgR{5g}o~HtGB`R_Nm|I?q7Mx|1sf+EZ7sZ*E&(`G>d25PC6!NgBMl^jJ5uFUv z9Ap)~%>&#^iiL=;Bzl#k&el6XIlpj7p-tlfBEZp}0Ff*!c+MqK87mva7C`hE$N%KK z>x7an4VLNx28h80Hrlk$aMA8$&yh#MnJX9#ksEBT<^!)lCRP%Q;2+T)bQt!!Xxb6n zeVc#>UX<;5m)j2uCA9x>A$exyY-omVWfDUrf^qwSX>97=x_2;Vye-v3)+JYa6h`;% z(fSy^CtC;anN-9x0d71iCK0FRr5E6>j=N2B+UOql2<&?0%bnH>Y7SYBlj3S9#G|AOj0_P#uCh}NS2cta5+7qJ1+mwJ@&vCsRI)k& z>E$u^M1WgWW^pmBya2!klgfd?GNX1NuXmV9Ms#!Ql4+825M3}rL+i($q|Z2$! zBi(_LaZAT5MAD!Y@RK$@!E^MWjGmwF;lxVJb-C~Z0&cV`(Vf0-B-*)!1L_;+xGSi8 z>`1CpPPnGiQo?$O6E>M7_@}gbIRFR&_9Ko-CJ&SG7}FZMy0+7*>3+IocK@J@=wi4# zfCWPa6$U+Bf0$Ft_HQ&+Gw?ht>4SFYqYF73UaR@jI}Kfu#%=Wl}$uJTDTq;IIKulFl^^ECq9LokqRp!#0X_{ zVTw5V8>qh^;oSo0$!;UzFbXGR@6Z#iY7|7UxVkWC6ovze9E=mMwVTHCr79Sr^5)*R z97u7UER{0Ywx`Zi(I^`&ysUsaogPKmqHzSny;`DLk)It|omOnR1fhf!mA>=gJ^oWQ zxyx&ctn$>Xoo4K}F`k2z3j^(2cX`Hw!ha*hn?Y^G z78b4LC;yt5T|K>RPbHk&W*m}KSRUP6QADEvwWz(`5$t``p7rd*O&zXUn%5QC)J~yt zyFyFWV6+gqh2DuziyI@YgoD5p3C@RT`!2#d{Pa_Ked04I@Z~*+img1?LqMFm`OdAr z&u-CTozn8=^ttQ4HS|F-z(kk6mgl$Q2+*v^5ZGwI6cXEh{1EAskeTc?PY}9L+z!cr?tSTq|v+Uhe%bC5<@t!Qtn>G$Oht@%?U?-C^Z%Wd2pS6 zEGqID$I4OY`U0ja?Az_5J`RpnVG3=CL@l90(Aon5op+Bfeon1Id;v$9LP<}<65|SV zFSb~_LS%Jy_m#5$<-6Aci`qUHUl7+gS-=S{Ke>^r+4q9qb0v0-JUPob5!(&H(kfR; z3>&rwui6LBpR0%bkFR~-ZSCTc(Prcr3`o9Rp6MNg))yI1E%~8sj5(6}#6}PM+v}wf zGyRMO^D)S&9!>%WILDC0DRDU;8aJ1DH|QSA@$)9^8`hJkzA81zvmsg0;k;AQ82(|G zq)xg&u9y)=Rnb5;(oNbdBw&;b~%fSR>9*9xuF|ENG=evl7*!$ zZPaR8YZtXtZMD`eF2tpETxLEU#TmyL*U$MzI#YF&Zc61Fb$+8Wj-&AX|Iaz+UG9F=d3bc}W)c9C9i%U3yFgS(|d5Q0jc;E?|z`Hgk zKFkb;Vr;tT&Uc%)DmqisCC zTI3yMOq&xVi+p_0ZvE1MPng$)Xq$yyc4;1sy%LArx`n+I?@r;iJ;qi zz3k%K?-_<7961gb4ns0o0JTO{BE%&QOMSkzx=_S4T{6UQq98~RzYf9)+F>pQ%J7N~ zhA4&df>l&MhD?}&)2^0d@q!5^h*({fPdn1$DFNU1&NZVk3I9gWl-lNJ#)Y^XgBJ;Q z*2D-8*Raw{VhsZaB}mp;qbmw-;4}`%m>@`}f{NcE#8gHGyvmqMtzIc=lzRUJiBSmr z6Tk@UI<97@A6~m|0+@0*cq~^^XcBCACcB2{sFH@NFEUtHIFk(Rn9tv0vM91{!5sLX zOy@q@PN(@L0nqo8}cWPH4 zrGg_o#t@nYd*<`9rurCIyo|OJ$dyLD%HfzsSA;)fG9*y0Ti~Yk7$6Qo8>VioFgjqI zz#U(p+4#2ESW?BcXFL)q+9@?rQ~kFw(_Kp~u3{*|DSoB|h=Rxx+#ovC6MdIRnRYu# z8S02$zkkaweN92OGPXNFs~7?@$JKQ>@RwI6vrh9O5P3e}y>rx*GM`bEvts1A-_mys z2gT6m<`L575q|pnZSGKTh(}pLDwWA^Y{D8s%?T|3pjj7@f0s469vYPC;u{LWP>?#Xt*LiVHcL#T+gEFjcu7Y?2gNgL%th*yM2m9&Rt#4K zC4=`2@y>~Apcs8UnEzA8RI~y{!Cc{pHktq*t;)#6GtmRS33vs=8Kn`&89_JB+Z&P} z(W`Y>n%CWw&;a~%_OT6RHpfiYmJ_y||j>*|bPO|TzGh2c5K*Js6=rCS4&cO1yUiHy2B-GcWfCyNKx zxOzXHH=gK21gSffmzdV|PCAmm9zK(sMf)W@)Vnj%(}$!tvX0;~EvHUH2j(++k-|@H zjFK3T3gZp9EM%+O4F=CKgYF&7=&~{RcC`a(Z{pn|%|cG7RTSC51-jMbWV+fyN%Q;P zYGIn!m`=RYLQf`tEMPRsoJ|y7y!uHpKJ#}dfO&dJA`BLBs&!Xvq$5V?Gj*g?;u zQH8O+8(PDGHYSSkaz)1;)ziv*FNU{4;dRKoVGst6p>;xF7NZV$k)`!8o?qa7ScO)( zxW|Gkii{b24dC7KE_!i-S=89*jsQB@?hIKn7$K-;Uxf@0RCFBeU4-y@g!ONfE&k35 z7!FB{Uu7H+6d*AIbf+h-)E!L0Ewg1%g_A+!W=<1Sg~^LeGQEYg?6?)*?4xq^u|%q# zR7E|{ZK^XStjkYVR|^y$iRi)h4Ya-{-Swi?KhwtY@J7dZE5gPof@sF}JLIICr{oN=NM!Qa+O0Z$2Cr&sLCj3y)CaM#p6nb^ z(uO~qPa_;9dYhA39)u3-E$y3b9_6EvcJF_K$ZTgs32!3vi5T#VK{V#cFQac`tR0!| zc|4wO=mz|&k@2Ee=R069EQri(v=N0+6^>~0Zwy1)89HYJfrQQ~qk>FW)zr}k4V6mz z{)pt+L5*HNfY}}E8*r!r&Mu~AcGEGYrA{9UKv9*v4NDv@Tk=kh`12BubgYf2pzfH^ z*3~dFy{)Jj=b3YLZe%~1YiC@=iBDZ(ksS zLsr{|9F<5nj}W3Unx~3|R2drNSfpz(r3PninI4sxK`?E2u|NLAiW(oM5_gD5)H3xr zwcUv%gM|f61BZwA$rF&dQY6u0rVL%w$R}u>^(oUxP#^*Yu!QLGR1w@PVO~zf>Jg0| zFPyQ@m`-@MJV)_!Q@fhVe(bmt-TfA$NW_U~<1{rb8^@z3SBeRB^D?^R7g-+}?}b>4GiYIiML^tspGqs=+piz#U?ZADTIdc=|52H9i3X zg^ze$@q;RuvIv%66f}JRFm{BLHh`yutqJ_76I0q5!>c<4A_7po41gXFv>wfIeiuW5 zR>v3$jzJwD8GrvAO&55&c@7B5a}@*J6@nS6y9yp~?OI2+I@r`B4j1i&D;a~5-DB-M zcD8t@;R-aU>YqZF_8N>SqH0dd?ADJ6Lxl zPn99_%pk&%B4t3@R)mdc`NnJBdB}RqOLvQv;A@?+@*`zTvaFv^6yc^rMH5xZE}Nm#S**Exl3Cjj!aeuHVXn;Dgd^ zk5=nRz_8rrb|Np`gFdaW``+Fwc346}%Oum(0Ek7XGkWv<*va*8J)&;Xvn74O19{Jh#L%xAI zpQP_)uoJpR%tSE`7|sV$WE;|i>OwwD2%xy3o1M^ZBPt>3_LgBcq$#U?IuSEwTz^2Q>}HJGhZTVgN#WlRO#F zMj*Q+sd_wVqqBF@``5H{=k}d@nE??eR_t|hAX16aM)z+4i(^T6@-SW|L=7!1JDb;s zTbg3v!umqA9y1n>fC^Y82m*0|!fzxAc2h)NK4=OuNo$Ur=lDb-$+|%0H;-FK76+ZQt9t1&2g%905nw<-pNPFR;Q8k4wUN2hf}8K)|kS2SrA& zX@Kq(RR-P!rtW7n8)KkAn4qo!<@qL!w)LP(h@Zv);ElZV$_p?U>FI3m!&;PF*16{; zd|BT6nxhU0}uKpd;R} zU|b?dT7qK*x^c1@UnbLfLSUM1*wNI8T%t0wI5y4OI5O3j0SXC#JO;zDe;7!l)CFUb zX&*V>uhNk_!*RKA5k(Dva3`RuxlE|csRpnXJJbmylJtvCpn*P6b401h69Q>#cuPz3 zjx9}lcW&R_vJ1e}UI{QTIJ^*W9h?h0MJmaF12@b?ptZAaco1_9DaoMQ_W-}3W8;hU zDd#c7hWTc|U8%wK##$w0M;uZLk`BehIlc#x1|bsRNh~~VWkB7*q8+?=99z0ai-rf0 zDGHFf(S@30QS4%>mJXf3i8Yus{W$*tZa<{2gt01qK97LV&vZnNcD5TsW$bP?ZEM`V zK@sjXv7-{8$pExCQDSaX5EHlCg#3{Y8(aI)ZB7_i5-Zk!aug$F?w#H`6W z(X^oj5AaAc;~6o0wjL87@c@EFB&up5-H0C0jO@fZFrNS@=`ClJf=Cgi5>)|}0zS-7 zj6Xupq0#U`Ra;*>{LC1_qDJ%#c$3&LI#ZbXn$LjaNybzu?wpKa!WCSJ$~N3zm)ny2 zyfDKhea|7MGTwzS&9PjZraC-45E!1?ivp;ei=`tI3n29Rt69uHeq{ zM=gu*K-{y_zz%na{Be8&EX$YkDa!7jPERu@4U=95NjZNyJq?mq!XF@g)zM3TIz5dl z@}Evm<8g{$D}VH-r{M@NY@UK)f_0aQvf<7$oiP%QVp3My{D{o_LVhncOtrD z?(Gzf%zs%9X1mrLzyuDheGxcYQ*m8=P?{{&LU2$phz3Gy%h6<&Nq_?%&Qvok)2|8wN*TYqd)9a;m!JNKrA=c<=($Ne1tCN{BejR4grZ!o!1a zJvcs3Y(9BxfD1;j)SyAAYI?XTBy|}m=@kj+aLI77;DRRfhIR!S9@2e^P$ zU_rH;XFMG|L^dMPi)wojR7=FP@^CZduMRM0JAgVCL6|0!9k8knSReqYyKhh|HXOaK z^tJ2Sj85SQ< zTi~{O95vVl$sa{ELs(WQYr&tBtE36t+#0221O^A%>w-M~d~j8H`N7V?p|XRB7#rRX z((5TVFhb^uaoBvdg_sS zQK;OE|3K-%VH~W9wt8Sa0JDRo1i2I|17-ca2ZPXFhw6gtfU?_#`r3xtf`M`eZ{vBp z)Cu5@I-wVNu+V=LgDpee*)G-&POHW#&IclD5tE?+-V$_I@%Huu2VfSd1&;(pcHx8p z*piGz6=f@`81_3rt24`VP20pwM|s4lnX6{q+&pRYGoij6q89lfFa>1}B{IJlbGJvKr;m)Qknp4gK@kg-yViazEe z7G8PyYUhDYOiQfrGIj_S6tRtCH9KHgL3QRxc1Lgw?;xEDuvCW3B$V@T;LSPM2JIIH zsMMTQ6Zz~##Mc?I1>>`Scggi{2m_~C~kF>6=$d>w!QG4#NhmUuB|4y_Krot4#fYKo!pL zCcsy98lc)0s@khRA5ix-8sw`xF|ZG`d}U>2jjH_W%@L`$s%C|tS!T;gN~o(aU*KNn zj58}w#Y&S!gpfLmSo|v#0^)#k_AmM;k4#zRr#EuJ(YEEe4QktCBScRVmpd@y)I@cg z#d3!^QCC(t&C#xrK;wpnmImckV>BZqEj)=uh_4z}8^Ig3uMNVC{yhlT6L115nWcQp z#k!7OXsb|PJC&h~X5d4RLyDlXQrgP>IGu?jr!8JUgfAbuBaxXD<+`YzvtcC zklgGR_Ta<481QBvcaUSke-s80?!-GTxi*qm2Zr1AW+O-8 z_EL{pv2t!X(M7B*Mw8oVQUqxYE&xk`#4ac9LOpZsP+5Txt4W)5TGgYG#h0GKu8STL zZD4@aaf7lsnwQ>o^}PF>dA?qE9*1{}Mt23U=v5DA-@j53xhr6oIV5lwyy+cn10CC7 z{W~~fM>G^cU=VYQS7M{ioO~u~yVu}}p8b8@%1Wj&u8mPH9wgvh631>jPU{fHA>t5^ zb#`@P9k8j@p5tm~IeWqjB>+Zaqq zti<8W@we6{Doi`hVfMz7W5?a8nBY-4v=a1%WAL-cJGjdU{NT~CD)Z{2}p9xh+@T1fdfq20h{7}0y zD|huFse^ikTYqJ3NcGo%+XIlz(hxioFycUj{hX=NxH?eEnXXX;W2$m#MpoZqDa-Am zTl8|s3&MM6TkpY$rZVWkx@jRar}jS-wNZQyc7xf~8Mw44a%CaoOIeJ^8+EQ>;dt9$ zIYo5OZtmQZc&ou>llLI1^OLxPv=H{yx^ViZk(yAkGoS@i2`q=oQPr>y44(8kavm+`%2xh004M-6~}$Or(Rdr3=y zsL8Ldsy0bJ85uH|65}FbUR_{diy2(!_=eRi?TlC%0mCLoB<@A-k-~yPRb7T48V|!+ zm635W?jx+dG=TK_d~mgS5LZh}%|jXu3eYl0R5h!Mr1lcv&a?Ga&|vfiBb&_zARK2f z$W>pQ=%$@YZQ?8PqE*#xIGG!{AZ5rG90nuP88`*Mpkqg!L1tVzS`t=E{jPIJ)jqf? zKqIS!Zh{h6aV79ZlZp-wIh8jb0Pmva%or*i_=Y{}-0P02<#-6q(>Naz2wTUjFcf7z zwa`--^@u%F_i(>cQX`+8bx@$f%#A?x?8=v8FTBTDNi|^YLn@|+^aWj{(UCxnKxmZs zbflZtl<{&mdI|;Ez&+6c$e<%IVqN=M9q*j#1g16H#S*e_2S0-WJZy<-h8tW3ADUrf zadzr^2tVeivzU6weZ1h4%kZTU8&h7K8hB`IzQh^`26`25yRxnvcin27O*jr(SP8I+ z@D4*_T1;vcQS&1hgV+E7!3$40+JrY1^d67;6g^=`Sl-tPLG>{1#N6H4sM0oouXUbh zWUq>5R&J-*1-{q-=@SnnuABumW{QfMmA-@BQSub_uk;SJGJMjjRq+YFTke_DF9q_VTWn7aBT;^+79?_ zu@r@~N0bgj*D~0Pp6)V@MSbSG)>|wOY7-+8zd?p786~Y51t%|tWAuBs(ZKh1cS0#!q zEn&Qr=T9IQ?#0&KKCHal>eoY7VWXtmArHW8A2Xu?FvylX6?g;^16gP?V9=SIk)#Hc zz6?5Vm{^7s!SPpSo^m1$_YSlnVh*La5(I)4*Al$UFzC9w`;MvLIGGxKJw1q3>FI=u zz#UG5!@wL23$>)ldJ7amK>#>sVi!;xuhwKv=<(8k(mqlIvVIsTIU)l^%gWmN`=NOh zQQ0xyJ$NvesM5ImEj{SbiX|IC9!SV1K1^}w6HDn*K zdRyG|alHp(DB3((UXET-H)_*74oc)8<1DetrgPILzy@oGV&_-}#B$tiKBTeORqKC6 zw3#75m>K}9iat4Dzd(0E|0569SV%0j{Qj}2Q5#x>KY7~1@ zQjk>|a^++gL$?VALqcpKz**K+3QSL&uCdxbG%wVwBv|0(m!aV5psaoW_hpkO^^yj? zg|WJfs3c_iikD+kYJVTO9kp-r3?=zZIE`?17G?4fj971}S>Wi2Fu$Zp8X?LjYL)N{ zHOj^M!$k1nZVM`E?(H8Q0_%>5kIzvy*akFj=NVTZna~LxbEINT_Zx8}Y_7v~4i~Mb z)xpRkiO)f>l2Ma-Ls zAL?`FTP)+0o+HwuQN{Hac|b$RMtnub4Lb{T_Qgm7Tq*-~^kQ_exwi$XuupS$Sv>iP zr#adY;JA&>R5xJFp@!CR0V=rX1t0c@YxYQ zGvQ248}akmSWDC4eN=LP#hWw6XQu`07y-S&hNE_?mVC zHHlEaJPP%i8U~R{h4kvu7i(odoEj%GFsvrn(sV=1s$j@{&>0nf?Fk2iwfLVlLlISh z51Zr8O#iMc|IAc#HNpJsK}={TqarybhW{a+Ohggog#fGWf)W8f$j@2bhKAEo7GRt# z(j_3fkqj(tBl+SP4wr^_M~~=4#!>SJ&r=Fdu^#G1NIN@5 zM!c)Ad-R3M-tc}E-RP$Ma2yS4NE{yk1Bpf2dfLMh2QND%jf54LOhysoNYpUu!qKL= zA^R8+woBRUY{zSqoAQj4Bt-gmbgJw~nJ=Ibg?+zWD%7ASOqu4#w}dw64qZ*8JD9{+ zL79-613(~QVh5!-6^K!P6`MshM9DueJ|r7{{NRWw^286X}C9pr7sN-a@{ za|Cg$T{^cxBZT2m~yCx_wzO_KTj<`9DsPr=b4g!iB z`hCDDU5^msb0l2CZBK*ZQ=?_PJ({o4q_HD(%n%>XBbeo+M0auv;2y2g-#fxS_#78$a>Vw9m}13^3q6$P{@>)q(+0Wtxe4bKsW z9jMEAkYeYS&I}M&Y zH~H=?_uRS0+-a|?E6m4_MDs-0B;+S|iO}YT%3H$31H;hk5!BD+1hQi;8%T~Z!vQz0J;|BIB zEmber$mmBIzlOZKQ6UIq7xx?0MY+=GtHiv9+CVj^$mgk&+1XyFywJX-c7M|>*CdOH zG)Tn$R=CHoVPv}_iB|D}(IV3Q8cc}WoJVB1@rQS@el>>btEQf}d+G{jf(bk1YC3@`-B+mOLy246Dslr84NjAs>X0trY>zhl}aBG`n1KNeMd6mHI~ zYCVv?i) zRd}xwLhne&BTZADqk^~!L?|IPtRxUW&FolB8PZIY9@R9&Ps1nJsQ&JHy<6OiLMszP zlb#qn>Os7kzQcf&B=SPQ?+N`~rl1GB2|^No99Yj7gXbM0GZ_sC-p`oXWE2-~A%j|x zoCddsPy3moc}x*9eC(!po!*QJdeLdhO;P<>Ue2Ukm^3OS5RJrMl{CocgHaFoc!}(Z z#vF!DN-i6_U>|?D$lp7C+&u;%Y!x$nW9M;MwbDWB?O1UvJJ{EUh!xp+-0$1dEJ<|+ z%R3^7Zs}gv*->}R^5tuOxa+09rmeF+7?^E(f3H8Ga@>PRCm${$yo| z_;=!8jf-wY?*XJLfUD9)xs%O10nULMj{{_^vBZ4C^eMt&Fbutw_};wEK{>fmU+2@f z!|q^8s5FwItNwPgVnyZ3_`HA(@P$SgivZnAvVVla->g06bbViDvJpY)m8Wwp2nSB z24oi)|2IA1*=Fou`HT900l6K0#4mLpgm*#>;@%kC_hc6So}8vQ?HodqU?h!EJz)Y)q)O32(ey^dOuBKAAAc0bqVTvw!r)co zG*B5=*m)!|j2vZd7YXboPlhs&3`9&<)S*tcqkd|V$e<20Wbh%xQB-|~kbmumqvMAx zk*kL#jV9{z^r**UUEYlzUoSSwAg3)i(yJX@igwV|Hq{Z`clNZ;-2v2eoJ(^$iB)@7 z8`IT5%SK{t#u{*MF=Naj5L9v_lPOA#X0$gDsu8J+6H&E3o|l-am0LO**74lOCaB(c z*!=U3+@k#u#>&lwl* z-addQHnFz;rAu2fecJK z2HEHVA~III_O`|+A9Rf5GeO_59!x$VwPRndR-JY2&ib%7BLikJ7pSkqecYs*F?}-Y z!N4Xz{u>lf1nj>-9Pqs?h_V_&9VbA5|W;$^_wHX^1v|op8RB!JW z4+ZD$;Lr(d0y>2Akj&~U{hN%tVHO1@@}#pxoi~X!TzpsCx=20lc16Y)FeTo8=FdO^ zP_;@Siy&Y^gRB}my|5h?gamz)O<+oKdnNcbBn|+PgkEO+i?-rKnuAK9IiaLN&%Wp@ zq~mpZExLtay|F%c!~4r)c)zAX<0}D@pkTUdi)8(NohC1)ip0%|JP;tx5NwBnZtvPH@J?QI{G<>tS;YQQ2 z%BQj}rs1)B%r?Yf)^QwLxnmyYE#$!DR&Yro!*ng44Z{XP^J$z+ogK&5@G*^`x;pn^ z4n8AEJB}}ltE>q?9ml;HMNI8-izcyCdtx8f_`POreoZ0%6^=Jr#Ock_A&#-yyeoZ* z!5Ax<=veRB!?8w%LKO@!W@Zx1TQSM=Hf(Qfxp7BRfOdIcEhn@qtyB(47{5|h?~lRc z?1=%$sD5Zh`~h0u8t(1tWrPkUcg!P~(}&+j4_wwEL!{<-?AT8f?Z0D?U80KOM(bj@ z5k}td{a7^?ykty9^jmc|O2yHnwhjq2O*-hhU`5$->=r=a5xIX|uzA<^(v>T#uPLnv zuDfh1^!nb)aa4w6mx2YPHgqxhs#ozhLPqOw4qg=cRelCOEe{g~&APW2Yd$YA!RMx)!q z2ePH_7|%T$jKIi^<<$~;ECgrWZMD8Zy2k>Y4Ivjq*nz*NL`Dpb}4p{k)am|hA4r} zPp2U>tWdF_xGZT1kY?4jV!}AEjZsYvtJB z3b|;wmzQ)|HSZZ{mB+j&2o_VSRoF;m$m~%SBZN#TeuIHEWKEvuC=3H&L&$@nd?+;a zAU^Sdae`4b7+52@jg`oRdbmHrT+E)*2(5McZ}6ajtqbzmpi3*f?-igs;-bZiJ=pQ3 zPyoQ^B-e*J;5gO`YUnb)j>%>iZK>8qRP`^6poz{;od_&!k2+GqK!aUQ@*V(WT8={uO3u?^<%Mp zbEX020!cMb6CbA@oDbmt+V+Zc7!SViddw>rQ)6$xk2#zS(X_o$3m7z`L2-dXE=^!+ zhXTPu<0SN1YP^qy5C@uFzC>?Pav)w$RPb&S{9D6V8u4|;iz$8wD`-X-Bfx@dz;83c zL&-c^v?s+4!X!2{1oes~AJQRfo=Q=lIB8HDl0(B;ChL7F4?TT>bOW*yom-p@gXH1P zU=A;OI*>#nfH*1f%wWmd-0eJg2sTMy?*RtqumVw@^~pA#_QlHVZX1-;Gqe*m6CmYzls-j}!mmK$HTvQ*rv0nXKzu>#YC0u;uRwX7+Yx$vrC zN*|Z0c#P)6kUi%+lt1$wltBf{`OWAG&ze;%-4PE$7C2fy zuF-7@fPYc!E8xbkx>;U`8F6W-at)u0mdGq)Ua>S87dI^aJEK8XKEA%kQhZH>7FjNq zym*x_4^1ZQEJ;x!oMYmcZ%g=$x9+0$(!z$q5Cf#+k2(t{29eEUAx;ms@sn^weTD`r ziGInrCvusvu+d@0?1$76&kJOliw}G3Rj-DvpVcF%MY10~ZUvqPH8wb#gdtEqbcm~6 zT%EuYH>zmCZNkHS-D3^jSQkkBc(X#pM~l0SU4t04g+m+@d0C{2iR^<4&cm95B!ZcHbaha<4CkHR^t$QD#kljwU&-_UhgrxfuGf0e=aYAp13OM#$2!13o4%aOWH!#>k0@%thA( zu0S=9o&I@to=XLe`W`cjVrBK%^D!QUVd8NT##VJXV;{x3yo2M>595tINm;Gw%c#;m zL|~jbMHirHF6Uw=dh|UF@M-9q(ex8XMfqcxTpV1&F#*A?>EJTymQTgfF0YP7zv`(d zBF06^Xr7(PMI3 z(yn!w-oxF>qI|as+K5Q z-qAB4zbU|F<=t3k(Gn*Ltx*g9n0HP7U0teO_18FRMfZ%i0Yf7&PYT3iAF-B~w|;&X zn+Qiq#Cw|eHIZJK2b>l0r6;^#HBp1Av+><}QU@&5_}Zv6A+2CP#28&-x$(NiGVy1v znHce$4Q?<%k)j+GheSO~NRGO>AvxL^{2opHacu^IGZtc^Yyg!!n-4|5WCR?lbAxb6 z%CW?pAV!qTC$PIsoqZ@FUH}eT+{8TEkHo!*Q}4rd%w+`maQZh6JR?xn?$QAm1xxW(H$WHNioPoquBv zPYh1Rb0IkT1w05*cC**oaiDcCDuX2Ee>-4g9SP$7(hh)u{*-IzK$huYl0X zP(05?v=oCrj<%}4Zb!VV$_*_oJDb;sTblN6+upKwS9r&c?K@kVHYAdoUOPdm9mo2M zgO8Fx(CLv{Df0G_T78@~BUw~|Nvu|uTuZSqCO4s(6_Od&S<*7Fswe#e=;AU8w2&9D z(AZ#wVAaxHj$&md!V&7RLpC@^L8S!b2z!^l99#@;!ItkL6B%r}!A}oM9cL)jNaCo$ zaMRxAZTM{dgO8*#(0nU`T;s;t2hs>3+P_1mRVmV@UNljYAeKdYy#y;hT92C06EGa2 z4DoURGt5P|PXChI#EpkPA|*Hq8%BHh?S0NfIBS`p`3jCc7@3goId&v@Wh|4`GaI)JzW@0bCS6+DJvMXSG7bUr;>!cmq&o5y6kjXQO9Jc_B5=YcJ?tSNq)# z^joVzqs$cP(4@T7+QW@Qi@Mtm9@KYDyLyw693L_^C`|oKzZJk9GNBLjmm>?d2R1;V zb0IMyA?An9g2)3Bu`F*qTzZRCd(6HXH9p1qBPzXjC)0alPXjUxMHNs)F1W#0y2sI& zoSOu-$0@6cy20IDGZ5)V3P+m6`UDD%18#C==k&5-8x(V=me^!S`j$zj1$S0Ed4a~i z@!KTx0AkR2{?w8q?1;rjJWR0%I29dxYrR!rervF~FZ?@OhF9^Gk_`CD68iV7MRa zG!A&2;(W!)+~Ceu77#2t{-IuXQuC&k^@^qxlGS&hZ%;h6-nkoZon6ca2m5*rUuxBH z8}Vu+7}CcCQFH#@BxJ_Ew(}(OIYb@y?qC@i6kduw0+K!fyMwqe#%LO~Yepp=mDDUT z$R%tT5824mE{Q=A{M93|SA1HoWBY<^Ps6gAy2C(A7{C}l&NOpE%N~?VSiiA@m5R&t zAo|5sUgkYycZY|W48q5dRQ(JD-PIRB<0c%)lOvDddtT^?SVqizuVc|5(;@$VOL<*W z9k)ZEZ-i}|nW~6t`5s1$JH&&19Al=1;ryJ4W5ro`hzp3HattEk7WFo$pcJ^}9AXFR zIEzKB)Vc5FH>R~%7`#nIJ89g~9-UmVF8F^W-8Id|C=ZfL`Z_U3k=j2MJ=?rBAWfJE zV^5T?o?3Bg!&Z?o>vF}1>==!$lYt$v8->PK?1(EZS|*TEO3OTdbSwwLMJs>lVouWS zmI*cD8IZBzjthkgfsvF(`a%^0n;(j7i#P{Zc*e;?a{2+k!w17C86mMUDs<&@B(bx6 znJ1kr8&RCrAVg7w5)iQ}p5FM4^uXXvI%w6|{Y^E5emqZ%qMB#X>J18#f<=AdL%sYl z{+?}cEZszhIs#tneV&L&m1;Lp-cO^b7^&__D5K|>hRjRo8Zn;CiLq#D2t=v9vWXo% zQkH?BWMBXi2$#sz{YC=iTrbV>wE3?1dHTbdv2m-Y;px{ROC?ZXv>Tf-SjEj@_Pe;jlmI+vT>So*KIi zb;^#)2j0NFW&4qG(|b_|RtrWPd>FMGJG79UwqfAlFgMfk3~;4x^=G6mvKQKBeV8#Soz z5}%NO{$u7Qd0L(S0Xc@vkiT+K13*INLZm?P!Vs(L=CN)sY^HrR2bobev{6_c6aZK~9t?49IA2?;B7%-!ra|YdHQk7k z9?mS%+}p*t`^ZEP9z9hIb$YkO7-6nK@e-D&^>HL>G&Q&{yAyqUoVHUHrZW zxE_FT&-ep5vT3CqnM%2pL__MNSvPgnV}NLEUI~7IRrCC~eK2Hh;A83qWPD+$sWEc( z7AW{pw3ES%K-6}gCJnQ0d%QuA9(!C@yCR@%lBg$_jp3+-E;2xK&Ui~TtEC-9k|xb6 zX=V^oQWW*T^(BV!R>>T2;K%Cehd6F1SN+=pY>Ayhian)3qHXUlRe zi|>Fn$HJ6#vcp!CV~=V%MAYs9#`*P)ef=i}#FK)p z+=0sF6_q8p2Hz>A%yyL&s~odTvKAdU0M9avq`|U419VDxj)G4nXGfV-xM6!>+xC_~ z!-DW`HVZH-hU#{mreLI zLbXdnh15-GNlfmtfFF6#RS;23jDes!b!G5ocedlu033OP-0b9O5EO^uz%{l>un~LE z29f;q5HcS)+9t|@2OsT($QGa=V74PL7d0rIA+QB#-L|Vq)vC@_gznJO-`2~-U~C_} z9Z7}d>45z8q1wf$lN9a{&S1flOj@qF2Urf6<$+}c2tiV1IN*csRn-nnD@t|p*)7Y2a5De+)RP40k_z4!ECMM33E#=+zW zjsfwL$f9%M#b8qEq9zuD&1DLmQs71qrAZidnRtJ&uad^KV$b+!*MvXkM;BuYp zySBP&+GI8Y*8x~>C(-6KM7#lBl|Bx_TvYubwar<$qD(#Jm*lL0hg@ZqQ_BA)Ni!}3 zN`lfLp)ueahgNhkH6SVnkZMFL${=G_Pn$e#vf4o%h;t4XZb#iz0x9Y`y*6b{I13u= znByGp_O)$;hlUV28u2#ihexVW9;7g8l!8z$Wt7+Suf46FpwnqK{=-sXYn$1Y#g~Sek;T_h31>w=^J=6UtoQG1A5`c)jSWKt9uAV!7{VXW#H3 z0$)XQ14TedbH)S}maQr8Un@1qpZd1pp+lGh@o9QZ94eKEIaW%VsbdwL&IWGdNYTPJ zhaDT$MAGU+=y(-`d5gdm1t|qtLMl^;y?GB-{vw0zZOjT)$6EOSU$^1VX@p@FAh2+C z@FaPTe%%(lB`9|o@f>|?joj&uxxQAeAB?$PsM*kW@iRcO)1b|f7k|r02P@IztU4%ei)wQ5J=^SU#5;)R~tOA=K7zkF0aZz8q;~{fS zS#F#@5QCUV#$4pI3aD9G7T5+GbCu*=fa-vicT78=3E^gZuJeEfrC6zfGRjbF2#T(a zp$;+!drKAGIyCKy_#l8}3G!(MpD2ZvNUo}&;OuoBoov{ov}93YKe`HS@k$-$`!Pv! zKK9ebzvw-O8o1Gt9jce%(GW&%2mFI4wukfqZ58Pr$ZrUBgJTU;{1txP8z9B0#yqc| z!>+K{<1V!4VA<6ecs*)ukUZ2DB|{K~(ZMtKfEHT64QoL-G3(aW{~^LcShzhjttnl7l|RLonEc28mW|I(ti{ zR?P-I&0ZOesfo z1DuwjlnQ}9#>j>gIA!u7sV@w{de;Kox#loRKFgXl-s7B)?LHLKj$+2m2X?BHVVwj) zasUMQA|jK`1m&|PYGaHVnOH8O0Jz@*M$kc3$51|wYu5qRW(nCNum?4aj74SzBAjaFfiNBs^R!yVD`-OQ zlpzXwD~w1@bG#ly2&|SbjW!36&5;wRSfBQ|OjXA%m%6T)UZ`4P>uHscXHQK|3xgbX zx94au8Z)L&AF(nWb`%EVmWvs3r(w1WKjrwm?^y;4<4OOsEahW5a$<*>10Y3eVU0N8 zuOk6?vCS~qc@%^!#FvLRnwX!$TaXPsL2;Qm+m+u+Qh;Lzp9U>1s#GJYL#n(vq#gR8 zo&#e($O;5!RCE;bN-%fTs>3qG*8va6lj4d*{4mTqK_6IU;sN4a^NLxQ+y!+c;w%Lh z1vMOEki+{9@u)h9&KVt+>2zc0!!*FpD7y6C@)OG#qZp@-v3qE61l}b3YGX-|aQu;u zHbWc!rwntvksFsIB%Cpxc~GWe%Na?>T-WXdak6+JHnSqpJoiza_u=?@jUn1Nz46r) zT*It5vBc&pr1^eB=FUAgFW=+)S+OS?)v>5yBWAH2z19E=!tlqx{`9(EcD?gf+p_px6nFhe zdktmVC|93Yk}vbQCJ&LoYA81J;S6P%cW8eV3<~i!syoV$gRFj#3R<>kAp8q3Q!v}{mk z2dpTAqq_x;aW0|K7hPW7v@OUA4h{8m)3p{@a|rGf`G)V<%ibNqS!C){ZkK!S@9*n4 zq016BcpnwK{J|GJ4fG2b$Er9E#gr1)1#g+73%D`?Z-g6-;dlX1k9HbLol(uWw{T>d z0%uLR?u~yWr`~(^ftf$R2;n^!BMA?D1P7OOm#USk(gSd0mkkXa;25$DU*^-|&l%Q; zm2CBI+R(Hy`5&!amVN6MTwSsW%QWZa{`5Wg-H+cjn|6iQ?;d)@#_tbVR>z_3yUHsk z4+fvIEc-a_?`!XA>rc)boMKrSMV6KNc>B?zfR$-)u&n8Shx;i9+XnkDT|!Itt+-}Q zI@o>Uz_w>U{Y}fto@?3r-@*Y%{ms`O#JykRU4w%u+EVPK6x6>0zn2{989IL8CmmS( zwExMn(zkW@wYN=r^Dd;sdG4QjUM@ zS@=T`oYxs^`K3!v>%8oRAYg@XFO!#58GgGeuaFh8ve1VR-t|^k-qp^pE~`uKu@uXN ztP%M(Dt~#6Px5&_8^&GUS7p?_F6)%s<*y)0vXuFkB{i~^Fut*N)|F+IpscFf!kuII z)rC)0AOG@uNFZamF8LL*s^lq!l$%jYm%Lfh!Z-EQT6|+We6d!y9a9f`!Zz4qoxUHk z@^mZp@|;^nLCGf+^!&|#r<{LmgIJxR|FN%x$Nk5rC&^RwxJsyPlu`9n;d&PCW=IKA z73;nm_3@vjKh-bq-%}_@+^G^HR=}#pm9X?!^{oq|#FoQ&^Rpg!HvJ~V>fdgBW?7r1 z9BW|v?u*o+`b#LYaD#u<_!Am_8?`F{i$<9YW4} z>d_lQ!(RrkEXRKeCe^yCl@RkAYjyu|d|4Bp<2SxPByF-?|38+paGzI8tP1?)Q>Wx< z;y46x%lfmdV!315V*TD$6@(*zF(i25U0zd=@Gt-I>MV(KW$n|LUZsDB zt+jH6W5lP!zz=c6dYYxT94+=;-9Kx!T94x&X@I49)xhMo%HFA8_2`qTm!;I)?7}x* zCtSs#apHlc6-E_CMo^Z0Vm<5`%d#d_3tMJsbzPO?HT7FPp~@=QY`LS_U~3^OU;et7 z;XVE%T`2kvThj$HmSJmzk$tWQUNWSts$2b4t+Rx=%65o3^(^a9?W6{!Ez6pMPjiQGWJ&$?R;eyIf-9MFop*SjJ-A6q@fYh|A@#B~1)aJcmb+|+RKdD= zU(G{)vb=f|QU$H5Pr<{I3Sv`3wN)r|!l!S-n>?E^Syn{Ks-CbkG0d5ypyglHKFhAd zcLfpKH&B>1Q2;NKYD|T+zsA~Y-Fhzh z+`Myn=a!r+IahJ+nsd9(9X|KDb6+_3rE{;m*!AM67vJ;ZU%&WwFMjLA@4oobOZ#8? z(o0`?>FX~~dU@{4D_=hM@=sow{Yu#@t6!~owd>XI{xI;v^*?&;ynTN9`BmqyKR z)91hWn)O=RYcpP3dSMH+E6ZAr_S()_Xm9?x{BuR;%Fb1tTYWBk?&Ie^f9|i(efhnYz z`9FH?M?X0~<@}2CThH%0KYaer&wuN+q}L|BmU&_IrAwFo;nK%0eKb%Mm>rlE$P7#m zObbj6ObJY0{N=@ev-qzTe{pf!;=0APiz^nFE?%}cxOmZ`?=E`7qSr6Fb5YZx4T~BV z{$Szv7k+QycNczV!D|bCwBVryuUl|S?x%A7 z_(l(ZU$3cbDCue4TrEDA<9!X@q=UWsJq@32c;AZmbjv!2k8`{a9r)Zl^(M`nn~!%M zu9xC7AMYjj4!!mq%aNvP@Cn`UTm`Z^S3&>AA!Bj`q)e9PiKJ z`!GH~kM|ew{f+qiYrMaN?{C8Am+^iD-|x1p7n|^=4E+E;AHw?-zJCLs?@@2-AMp7U z-gw^nHaTPefte4aAo`maL@QFF~GPGrT8$O}qzq}IP_u%urc%u#bc6_3p zmw$rqXYl#2mi5YPd{Im$~V=mYkBBmOd$C z@|3Bbi;2HZv!>6OnK^6roUH7ex$|=8FIc!}aUd_4zhr3vI`YTy54e&Gz+nuYJn?sQpUP)TD6Ihmy`D{W$5@$Jpv>0e9#*`%aNS(CO- zx_Q!DC%ur7o>7#sBjZ5E(Tq=Kd~b5b4 zE-qfYaq-aN4=#QIGGP<)k$*h!eBO+_HF<4$Z_WF&yno31w_sIpcknI2PX&LHKRW+48l^Bg>yy{=JHfieN=u#Z48rS3F+v z`HHiZc4c|x_R9MzKU?|Js@YX#Rn1k0s_v+IsOkq*|Gpw;McIlQSG;Y-Q!DelLk>Zhy!rut_!xiyV7ch`Ke=0a^!?cCa$+M8=1sQruDe_Oe7<(`#qUisY0|F~w+ zH5;z!yyorK{P>#xS~Ydmf>kA}8dmLI^=GTTw(5tgGgsHF-nIIk)gNE|t2Oi2G_L7i z^Te7T)D_o->yFobvhMk{S!-Xn_6=)C*S@gMUbk%BmURQ`9$NSP`i1o^^(X63*MGkL zg@(TMN$bxwe!KD2#!DOKZD`)mzv1Bxf4kuqO$(ZCX?lCp-*23>ap%T|HomZF@}}LJ z?%ee3rte&vb#2YHH(h(@weP?7ude-J^StKO%?F$BZT@KUmz!T`{^fOL*KN4&=yeZY z_rm76o3G#e=;qh91h?$n@_{Ws-&(fyfvx|%t!CSvZI5mH&i1L>7jNIO{n;IvJ6d)e z-SO~_XLkJb`s=TMcIWh+uiN?b&KGxO?5f!Hfn8s1Np4x$vbp7+mKRzsgqMVy!$-nT zhQHTpwXSI0-}+4J*IQrRowR%9?&jS$?f&5IukAj6!~7ez+;Ha&Pu=j%8&htqzVV?O zzk1`p-&A~4$4&3O>B~3$$IZ1jM{a)j=5O6%-LmYK5A7-3bK{<;_x$*Eb6>ahb?t)ITU#|^5X;P2g(jSe&8Diesyri!N(5%^P#ju#fSP2J$UHv zIwy5jc3$6kqVt)~uO3c0yzKA|hu?Jgvxon)tG;Wv>#?qX?0T(xPWPJb!`<)f{(AS% zdXjq%^gPz{<(^;mX7twe_V#|D_p`l!+xz|AANOABThdqEx3O<`-;usI^u43+GkxFd z`$hl4{tf+I{df02+5egTZ}h+1|H~sQj~qGj*pV+C`Imv^1CfEJ23{CUA6zzgVDPEI zpA0P-IxzI-L;o?neE6o}k>S(B-x|JjwDIU2M^7L9(XrxV?Z@su_J5DhIbMH!-|@E{ z|NQZvo~S-Cc;aIxUb=PWtt)T6;nqiP{mWbb^R{)j9lh;Sx6i!&!0nIU{_@G9lN~3Y zIQi9+zqw=e9mntZ_#Lm_S$yaIJ3oKtcScf1R*tleykX=EBj0)b?AJHFzU%c5zWyVx z|Mu%IykY7as^0L#8@~94AH8wW8@Ipl*c<=ujlaID`mVe0`rMle-?ZgTcfM)#O&8w0 z{LP2o{M4Jjd-v?S*WcZJ_k(wT;O@Vsz;_ROqj)<4tn z%$uJ1)HDD2fioX?<%59_Hh=KlAAI3MOFp#rL&rb#;Sc@ehv$BH<%dsx_`Rp6o-RM# zar(K_KO0>&+CBQ_(Jy@@^&?w8@|KT$?jyha=$4QE?Z>8ktnOn6KK8)Je)I8)kH7S6 z`m;AZ`{8HLJ_jukS_E_t>)m!3x^B8v_MB~%ulYoJiuEs*&!we)Z_Ou?lknAgE}558 zdHECRY4)$zd;%)Szf@LbR%I4eW#(tzbL_wYJA838)2?!q6wwzdT&3ktzkz{2;p4LD zBN;Y($UbYI6$*vMytFz$D+lkS%IrC5!GaZbR&jB0C$!Dz; z=gD+<1ZP`0Fup2lRulx&=FHO1)>dWZXW{+7-WrL#HL^=8IfLqo!}u9_t36+8nmrN< zp>_BY>#NRY=E96}vBbWjr>2K#y2ofmu=O9arcRwTb@q;xD|f7% zB>lCsaAE4KPFz^I<2MR*z#V)kfc^})!VLJ)DuFvfiaKhfo|?+SDph6mirVU&^un~P zIoXvp)hh}Lv-0QYq9aphO`A6B=koX7tR4ORPxNnn+oGYo-M8<)uBKR;Rq!kls77(W zf5*OS?6)l%Tvoky_wKbTTP7|00qdA5_zVN0QS`2y*0PPZ^7DgfS!lSb3QZHc)fmhK z*K2|2%sFZKdBK9}%oR0N_Q=$X`iyDQ@Mmfu6dINzY~wG-0e&TW6i||%!iKZ~P#&Nnue8Iht(UCU;#RxLE#W{==o zD(cKh&(F-Uvp)UlGoQ9cMn-IFgk`ExX4I6KU7ML-So;f<_%v=`vPMQcvnK@}$?2Fs z(wD;Y+MKNXWYk%`G`+C8%HB6TT)(frek4#|KWt~=i(Nm$3+e~25-ae+VeEb=)Km@X z)C5wPHYX>&U`6e03?IlpKM2)d{;6q^&&irKCnsC|`$eE+@#2z!l`9uDHT^JiUZ^sE z&WvTV(ibk9le7Dd)==F|Ycr=WDVj1ZXOdmal8gUx{H-NGlb%R_H@jdf&vTxCNNk~wdP54>?2DyR~J`rUeb6=ROqQd({Srv^G1o}HUvpSk$h{2QmI>b_3NPb$crIr5G>Q>4R7^XAXVfh2<$ z8Ioy~tG{-Ym$y{qR2AyCJrbUmdGU1Sym^_~#r4I-q52R-#OOsbZs8iOd;x<-&XE%= zL5<)6MqWhIS$bw(mhdtAR5%n4hq_q3;zO-=2vyIsvv@rmK4Y$fKg|nYJX<_3(+<(g zZCX=&%CsnwwHED;(c;;Wk+Wwn#J1Q~Ts#^IK>#Lb)9v9TE8Bt(aklA2DjF;RD;Eh8 z!}!9wN8#}FS=j;b08el25#6P%;^8S|57|c#dwWdE%(C(zw|{_d>7;lgx0j~pq^B3A z7Z%p?Uu{lpPENWAa@$&wzO|^ixoB(p3g??rExJ~3&)l$hapSD*tJiGfw+)%wJtL=O z?^2nZ!SvZAKG40RsocFJvT;pm=bF-=Es4w$;rq_gH5(&KE`D>#&-le2QQ|iVEV|1c zu}=xiq^e1Wuop8+ z^gN&jg0-p;s#hxBq0^%>Lqg$8=)fgwlzLw)q%$ZO|4BIp`rpTlR1)YcB=R&_b;Fth zb%!jaZBa7lcCc z$W_2OP*aN53zL`Tq(hPOXhvX7r@`7T{+ICJnfCPQ&;DxG+_|$Zo}M+A(k2udWz#F{ zq~0Z)=FI}v0q?P~+MSA-)`gjNO4?csDGGkP6mp6>T8*0BE28;|4Z5BU`nIR6U$cI& zVBx}og*&KeU9zZ}+4aTXmZxTB=jLY5{4(w>EZ8mgP{Ot{rmC4Bvmr_A7-ta`0h^Ze zoCo=sRSn^mM-ggw6<-4Q#q7hWR>;V3{qyPrSW^1QSt|`x18%;Qv{GBe2@q9D7UX$W zt6S5VaCX+Hzcxl{fWbq4Q)i;Mrcf2>YGn4N4osoY=EIveS9f9JbZp$z(Xpv|GcL4t zb&>Ln7MUj0U@gt5&B_Ots>&*~3vIBiT6;}n$euLbkqVH^I!y8 z@Q6@uZ5EU^WiLT(wnc2_t&jdN4YziD5~itD0W<>C}wPsILp-a36H6 zRM4F@yQ(&`Fn`IM^y;o~S6A2$)Y$c17f*NHc69znKryFK7SXN5g4D{glZ5H!pB#z;;4+b}GjwqYQw)|FWsui>slNlq?G zN=r|{kBpS0G<>9|=^yDSDM>fZ$tp;GxMNdS*NQD$4s8iRzI-k{DK#Z2l#-H~i~^yQ z+0#;{r6ncVDR%0-8RmP^)U+wp8`EY?oxiaIvZqyK5~Pu@cZJp_tgBkJaX_pcr^j(R zoL@=&#0je@^23sFXLsJm;sJA3vT8t$WhuAX2F&fU0s(q3m%M8#oRfb1&`S=>pssMUjeBfcb5N7 zXg)4x7EK{3VT@9e@nQJGm6Lu|JQRW^l6%4q*nQK$z%?3=0bHG z>iKng(u|n7kdkUAO^KcjzCOpD3@ORBn!)aL_)K&!%sRmtk@Sc(vSGw&(=#gv@`lnU z8G4mm)sjbh{YNj3*dv*__Porl(_P|whO3Bff9%G9?i*6pRwzUvGz$h|8sr++B+fum z&w&M220uOGpp<8v4obM8YSL@-(+l%+;QfNToKiemG0p+Mp`f+T%$mMAFmG01_Uu0^ z2xMmkmad;YZS&@7Sl%Ek7f1Lv0Gl8S?!Ictdwdi&!$R1Dh_0jmg*rOl%5zVx#dy7`T@>5D6}%CuE_m+fp-6*g z0&!k2gO|cIrh!f801WKI7th#P;fs&hhc7;Ip}w9b6V`=bQ`0s$g{QmFyE(887FYpL zYax6|wbYlz+X$u%MVIy??av%&8t0ZToxk)`xtSwW!7#`ndSp(Ysb3ygK7yaTk(>Lu z5Iy=M#n5Gq1(@!xyeM~va)F3W6UNw&g3f4Xdi2Q@?OnIKR$hDU%7XIpf{Uk>%jTKs zw;a7?ddal)E$gR!LEJjfOkEnvq)mr)9*7-4F1`mtv0g22v>-QqdKVlJKUMS!MNWF~ z0k|IS3O$m$G>aCw9rh`B?rI$EmTb}P3bU3*Ss3D+$*az@!!Y-Zl}5FdK8_F^6Ro37 z_dO;i%_#8oB|16`m0f_{LMws(6AP;zg|#{K0ysnZwZN&iK*Pner?Chl^Jz-pk$r*s z?BZf&2GZ`%vI0pK=2I%_fESxqEdCJ}dJ2;b<2&q8bxlv;Bnvgw2kyht9sUEf5KvPe zQnPqO?roN-9G*Ap^l9jk&Lnp6ula%h!d|7A#tp zwsk>TC~et8E)>uHXoNh)Fch=;@w>fJbDTmV)j^-%yL}s6|%sJAuPZ0e{o}#!0xr$+RT&;;V zjmhln(fQT$=hwVB5F*11O`mna6y>kglk$3FN?{>mvsBM!SDEx4u&IBaoufveb~zq}uy*!Tak7?2PS!?7p9 z!nbCpW0|zNFdaI47DPks*@`2@k&5R>D%LJqYmZhO`Q($4iV^uGGSZE3m;#y>FD>b$ z8luRd;B>WW4Nvtb{Ig=opT*h|op~UdF8E26Qzr}^VjgI-9#V=uR2~BO(6aK7IBwq1d}q;u1w{*Pb6pr*K|d9kyJ*qez;|(H zLD6onC*vZ(fIEuv+MNRdtUHO0MD2pI$3F>ReR77>0`-dN3tdzTZ9tIZ!`tJZALZq* zE6}{FaLHjFhS8va@l!z8+<>vP1OqP6o|niKket94!V9 zDTj`<4)!*@3C7=;trtywvlz^ZiS5Mg4tLzN^0%)d%N?@mO)402Gcnm*dd3(St|%@{BN+HoHQH zl?O&Imr6~FN~ckau&Hy&+yGH#<=_n$A?mB97B?;9Y#2)gSsBxyHU2;9-UPm}v%DMC z>qYV++gf}i%d#bTm91lY#*3_3J!kgJcrr7|M4HJ~Cdnj#MUn|+vO$WVKtck1(4gse z=>-Cm%_=RoZAdpjrTto9%B8f(w;OG~?-ppsT`0fOh1)9k|9{?dB-!JzmfqeO>*#EH z&wJkGS^v-TX4l)j%Anr>PEz)xDK2o|lW+%a>(_B{0K&A9SIIo_bgkGtk%ZVrlXF!J$a!GZYmF5g;S8u~UzX2SPt{ zPydO(^+b1V+jDeo#xuD)s!a9tc3#VGd)FVn^qygJ;Y748x@&xH+fUBzj#i0$vM^3) zRW(2zrtli%AslvC)GuKq|W5=jY!Bny#NB;v8& zfsy(75lBF=>9V?Rx99m&}zU-@N#aCXQqX=Z@5o~ zAvTb;&~S>{ef!=+(d&Gp9Ubo8g=C`TQ1lnu!oI^(*3#M0>-}-n`HDl)qkS`-ou2UF z{Wr!tL%89kfkQKAm$n~1+0z$-L7zQh3R1yCpG?3uwqw*Az1>av$yWvE(f*pV@hP*% zCy!E{Kz_uhN@thir;qFn`1J!2eo>b|HAS@PtV7*uvPg~2ijXLZ*9Ky%X&c2;dfYX& z1wpn^Y8X44O48$5NOh(0H=GfA9JkQhIR^Hh+5FS$s>$YOXP`$w_p23C!3bG@auXzu zLG@dZMmkxFwz$jqPmaO=g&sMnE)7h0+t&P%9qP_+&RqtD{#f-b1C#E4|KIOu{?~8L zaS}Dq$p1(=f&RxdWTlF07KDc=8S!9fifJ{7Ec&=&yJ|Mk@l96P(Ls*S3)q+zfbl1 zTZRL@vyn0X?ve3$d}eXxRCsLQu3g7>PPg{P3zrUNq|0f(}TDEEn|gze-I={qmUQCE5=VaD;{+ z1J-jw7%BM_+J^{HaMME80!IQvB3HHd;G!yy%*~AyITyfVi)2dr0DbIG$_C0^w<6Un zMVfL$5{7c5LN&5UgBAbTxFknDcDafe!3B{=F=|F_{^EGDM=4FwcPVx6^~{4%saGtS z=F-&FrKzbUQ*FER(4pDt)!9Rb?mQelA1&h?F3R?uICYqp%|yZ!-PeF;l@i~T+tBk`9#{uGqJ6?_AXLw(kunlq zpU<1{buRO!<&K^Nz+RzGY_6N;;|4~Xo;&^EEL+Z>R*)dLa5M6?kW^;F1XN~kuMr3w zn3xC+4rZxGC;)lubL%&ZgfFqTb7=!|fSX>t&715|1PVyEA6Nvo zXbM1|k{)+53FlurIZh8?c#+%rIfEQzF$`FuXHzGQ4@V-y{jUkPG#O1T1Kq8yt;%eI zYo@h3*3@b=_4V;WYqZM)bGGSjZS5XtYB8F^*Y;=is*E6au%&5?cJF9wi;6b2w>Pzp zwzT*|{@UqQo>ho=Y=Q}`ZkeKu6hZ>Lt`vv2G6_~vK-T2eX_}%?scpqX+GO{usp^+i zj;3J|H&ZZNlX9go8=ir+4miNE^f(-U28Mt0T$lqHA~R0#L$@iMv$zyqROO-6{)L78 z$>fQYr=_`Ra_{~H^Z4R+daFF<@^N6e|EVMKt%OP>s-J7|C=8#la<{0Ri9~{Lq({uUfbw#c4H8gYb{6Y5IDV}}M=Mr&Dd}E;8QO(h)lfr@1uc0~??#Or zdhBS*8L`-*OuSAbK^!=OBc_+87T-;wztU=<4vC5M7&JG|*wBT9m^erPUy zuNv=t!S%XJ$8*P(*`Z&qV-WCXS5Jp3hN{nBGR?Ppd#e9LDycepyrW*2w>aJ`j10CU z@evpRAn_pdnXn^248aPAN2uZnh*#IguE*brA7dfaa&PyK|9E%rFY%Q9N9!tmHo=d5 z48qLDcEKDO1HUHLDcKv&U^==Ti-K|iwfc?e`!#G;$IWDkZT-e*NzkqT&Bk7}0KpK1Yu+wk$BvJ_vSe#{nsv#hU;XjRzm0({VdY%%6 z9=(k95K9IGWk~U@8H9SMUrU}&LIj_4R||i0`fpCF6&~X-@H`IrYfW3pk*UdIP_{b4 zFySs?V5mO+@sF!F>Ie7!=5O|{-}lm&wt&__?}>OHctFSZ6hI>iC_^G=GPF2Cx~40t z0L2%Vs)b^1J(Vh&6{sLWeTcIx5gA6TEIa^!NvrvXFSk9M!tIq*5#~?a=U8TmfF#BS zc03qSONhrQm2#`BKeBoWeQI+ZmQkN^6S$pBE@CEuwu*H-1ZFyZV?eFUA9GUA3_hBALM)zcf(}$Om(V^=) z+5k6cJ!bUuHg|3x?HL`8hSWey^Tu9;lu1jkz)sV3+Mtn6&`>HlD3)2F3l(ysa;3u9 z2ADO(iHo==a%xh9B4n*RMxxk#z%40h(zQZ=GN4QI#wgvmL{VXe@LT1lmX@Y+xo9#O z&8@6ftN6;HaF5xN~8Z-S(R6d^`s;&W)Uk8F39!=fWBG=&xS<85#4NmGWbsF{a!bB zRMvx1a&Rch%4i{DA|=TW(6Mszn6#5G(a#tAj--$ar*Y& zDXb4W)%$s|O%(Fu+t$~&-NG@4{9EcTKr=X!z?op<1BnC(0y2E(u~&uX{5S7d+J3Tp zVjn2*A>YFO3Cy01&>BZ7v(cZ;BhB-f`OVY|!j8IW`re6qr~4khzb>P{c53R93RSOK zD$&T`zV+aP`u#P9cZ26AP%km>!x{UcBoewyDz|bCom6HHyfp7nOD#UtsHJ7|kp>wM z@f8?V^O^4~1MU|QFc4`F0Uv|}_$9B;kpO+(5lVoLjK;ohr}mGi8pu_CJcIBj0DS6( zDDm%dv!2a{EDQQfgG!T&_%G$Ma9XJj_?RPsRKI_njk)gc=gg^Fm;8+5;5awH6rtA; zAdNENZK_$kaLglIqh%`C_kyc0h{3uIf|1s$hx_4Zgnx3zlQ5>HjD%;#A6e=5=lQ@q zXRBpF<8)-RKXOs>p|1m86^H6Mlrm$$s*$E$1J=yUXBr|4u4H|8A7o&`b%-#?HbfOf zFV6MvDcps)f*TQEP=C&!{GiYAUpR1=Jm;Hka8UqXgcxBK#$aO}NLjhfH zMb+u(tD%IaR$rSh9r`eAJ?ibz>c^vxo=PMP1kGGZr%p%nDdWQ@yMn>xfFG>p-!r_>F1!R&O82Kzpu9u@oMlNN`&GD|KVo$p{QW_TF~eqsE<71@AO|cJc<*cEjXtw>|QHedhi6trMrkXr^{p zanRpHdSO^zQ=SI}E3m)R%*Jx_G!BD@nzvo^fC|oXL?JVzcsiRfYeT4QMxsRQx?<1+ zSjobTiHY~C9kJQlSmn2tQ^uqFW5chRnEdnVXJfOsves{HKWye7*&hR$uGd|+K@`&E zmhC{-NsXo$< zM~?jJ$&+lMddU)dI0f`!xO$Du}=xayR9rMv+)rsOI7*E2XJ9|543J5*$7{;ORZP?NI^;q*l)qdHI^oN0W2HPUx3kRXa^&#T(r2CHWl@|jRk3% zNK73Ot+0?FET1F>njraOZzyO750OtQ*L71ntXG_S?EV`TkDonr!~KCB9mf~*JBH3a zcJ9n0ZC2Y&JC@F>m$yA~W_xmIpdaZjVDWP>Azhd$5%ON580+T!42B*IJ~C^FGXo(a z=mC3(a1;kq%8K22XYAl}v4aO=cUG_3C-W)M_OhuPc=Zte4#n;)@+9!aSCd@$%)ex4puXm3FVWZds5i%m%b_ zT^7gN1yOUl4biXq`$e#iML^+H>MBBuHy|KI)Q2n#1RN+iwq=c#)O-SUhZpfRe zTfY=PyEOOBD5Kn_Gx}BBW9rP*RI4x1d3GrlO~l7=`pGX%&SAXniZb49%&i+DGkqbI z985%GOJ_S1zE+<6uUV%beNWVBe0_wAWy*snXU^gz)X-G zW>u|L^?_(nS{rJ@OdL{(j?5{bK^Se{=2}$$qRL|T0w>y@Ny1pCepx;HtUB~a^$`_T z&p)qj(!M*#+DV)`IKLvul(u)+rNLk5r(IwYqIo1^kkEt;igp3DO08NUxQ{{+|7H3` z>iU)j00PIp9R@{+@DcBJM8;Lbn^tJlz%cWjS}-=79=jxS?245g6-c+DX~e2TnGF+h zB&`M5#W@!;w!Xao?X8z*W{`~9WGx^J;qyt zg;P7T%9Qh%kruSHKU04O?hd5`@&g)#c>%By&0pR1$RoFxPCiU5n)Bkr&4B(;Vp>>DeE1gp;GL*oitdDcdYE{}*A{w0J$@2S7=rn=LbN=a z(Dp!@p-@Lp&y&m~;|=*Eu>R>?+6Zh2!5T4HEs(3~D1s8tS)wRJkj3Y@q(+P&? zyCmAQGlZNVowAExsweK+eaBmH@8caEzybDmJkf!lO+Eb0N4CXKe}&P&^)`qs=Nmxo zcWMX^x+kMHRTG>T=8ci@@n;6@N*(&r6EC=)c#l%LYSkCy`|Y*Mi&BR@=Yvlu*Awrp zzM!jsthB63)V_$CI1;F)Bepe6d`XzMjvm7C6wJUnWZ-{^1riTUTATf7+KlpphT*RYOKDv{)+i!er3D|;kXAI@lr@QeSF45U8rVDL z-+v6+&5_}>K0=zPkP(;!wov^#vIBGPVD;-Z?+)T3U`WKMoMU@6QZbm7Try!_8@cULHq7)?&kOeaSZkx-Z0J>~XI?|l+fF4xx8 z)t2WbHWR?yxr|Btvj0bUZ0@yoak=L^44rycOo2%hw!$V zul!F~{Cs%Zkc-o>8IETdS}-DxcvbYe=+QI(GBjVPs3jSlr0V*#d6j))WwsH0oC++}XdvWr%| z$2AUX-C^$K`P)&Sy>|zu==AD(S8eYB?IFF5pD1==pPP5 z_ID2i2k_UuKN6Vgj`l{Qy#rlSt6;^pM9luG2t|XN!pUZ`b@wFMa~_5G2hX^wus=w# zL_&^FB^IZamS1pPgu#2KyQF(SV%fY1XzNPIR9c$adzXUU@dOAF=f)ho4~$u#Ch7({ z7G4`YVPk(Cz+|hO)Z>QP)O0gA((6Y){@BjhP;%Raw_Om7q{@yA8Y#%81WrOtdWZNf zRrxhH@49PXEPQI_$b}0>ww)AIG&GBXekv1hV?!3kRz3t=YqeXH^FwU(d58u3TZu zJx>5o^`Cf_&%+8g>O9(G0;4I`%(ei>hRi+>QI~FNAzgSXd>12}OGfX%g$5J;$zf~A zY}(ecJ07(zq!QN9h}zb)&>vS}x7R?sC*3nMp48BExM$QC-ak0$nc3DhH8>p#42sTf ziC?fjmIY_Y*bGK3^1B(aV8A;F(gDI8%;?G}6jq%-+AI;v}W2M0_H zgii%VkODqs@g-Cw$f!Wr99$L%1*z~?@Gj`!BJ7m3!vX3Q?RDS#yBvjAf^SyY?Z)cy!&c|U2Jmz(Nl*MX_3~jFR#pGW_*IxGFW3 z6loIK*gh1zCEj_JA~_XE{nGkK`&hJ92iJYBCb=V73B}DH*fpIbt{>_zChpd>DA@ z$2Z=*pxcP{@Ku;aU2U7_KAlTjFrg&4jj~m5fcoi})>W#4ZL1eNkwG#!+x> z6dXshST0!CW&`iR`laWkenB4MJV!3i^DQ|FSZCIsXV_yVB=A(J1Tg^nS-AZRtODzd zi`Y{IUQQuyn)^J%x4}PF(XJ`#`hCqlXQYNv2eu>IobAZ>VBMIpO8Nr(th2MvdwI3Wpw+C zErsKO5Ixc*QV_N;$4421V3m}B6bjWsEy!wFvJTg+VrbwWhX40DN}UnMH$Dp8`TKQg6gC&y2_0-tVt%vX*nDhM)ONMjE_N%S!X^2`B*u=k7g|oY z9b}sNIMuPi+OGubD|?y<6aNV38EeW9Ycy|vqmL;4I)s!{hhva6DWGf6F?cxYr2lulzBqg+*BTPD$m8nxehyI~;OU~Gm3S$7E z9dR>G;}2AiTlvFF$hL4l0u%RrNWW>N(c1Q!-r}Q1) zaI1P10H{KxSQfuGR}4I^2)z2M1=lJFNo_A@M5;#qgeitHv14X> z_^01AI{PfdU#o0kd#kZ9yiJ*N*O7e^r%;lJURYkx{xH91Mv_Se1p!@<1Yvs3@O01o zo?ULW5Pf9GT6iZwcBiLC_q4QDuS6d?`RaGl>QU#!-58~q$#}&f<(RV;Gh>L`6IC5Z zVn!sxk|3&BBOn9d_vpAcCl5yO?L5{=qN~L1c1kR3J1v3YOk7NsCUv@Qw zG4nl?NXkTS4hpW9h)8rGffV5)QY86O8Og-RIh?$GB_f>2=e2b$Gg2w-xo#Ujs$`Wc zi?+0cYZ)5Ov$jkOKQJ+WoI9k0uu&4D0ZpzV1KyIikPm1!ZO|C|OE6ezP%v@S6G23zA0^f6ViN(gdA z0KZX7tcf64RVtOKX02xt9&4+joTGUl{s^4Zaj=5^#@v*uD>G#kQtPG#0W61P`~2V+ zSo=>9cSLPSPDqhCFuMWK9RU@vEM=@%d4SP?7c0S7EBY;erCW|;S=tO^Sj0q*I?}w7 zO06)3Uj@<}N_hbV=o;#GXZ{=H=tu)&mrgqHLo_bRP-V%ATB7cX0S}}VV|Q~@e31wb zb#^RlQbvZO1WAB5mVt0fq-)QmbQ$14#S~y>4Q1p(&5EMafhw>JL}J(VUg*DKJ^lR3 za(ZfMDxEj8@GX|&rWr4lpwM%sU=m^MV5Y$EMLRUY{gY{U&{kH8FSwq13R5MYx6A_g zPGep^&VC!|pyj(QGX7yQqQ*>C=a}Y-x!l^?<;xD_TifbTu49|mBUo&WbxtN|g<9DE zhM0fEr8-gnpaKwy@Fz)IoS^@PR&Jt2Nl6Yr$H5R>SX9P?4;D)>E{okVqO41a0(OB3 zqMxCT({b=KgG57*(q!x&XIFvuAeFd$JJ=UzZmY55ySx6R>pe1se^R#pM+3sG?2mKdH*$KrprIO^+eYihz&YE}Ng-k`hL(=#~t@N~$HG=m+j2zKfUk0BG* zfS{(cB2Uq(#J9z30`o<&TF11xn6w~omU6jDg?0-ES-`us{N>!=tQ)G~XDj?I6vS0f zyj&HA4CJUM)wIxJ_VYx3ZuntNegZwS{yYn9R}?t~E_l!qvD+r$_!IbrPG&7eiad!d zkZ5orf?j=G7#IO^ zX+GV`15L|CGQg?%zuYk}w%jvvEOy=Sc@zJjmZ1Si)bY^5n%;cl#(Puc@>Loba0jlh zQB&d_S^ExDumx5)Q$1^AK#lX{9?Wh=odvp!!|aEVT2x0fFnWI;j~+G;%|6co`7ABa&%D3A{W%WH z=i^gT@hewmf7>x(n+A;GjQ7Pe9PA7%gFw$aA{d-$3>OHgcTeuxH&tCvFCW-$oS5Eq zPNkanrl$5Sr)Q6~Cbu8s+d0%SAdy|VM#O2r<}VeirS(70w(Oi6iA{T&3BGIADgM!z zBlBYe@S%>^GW|Ez>eb2|8pH}GJ!99_ukzN|{Zla&*i_5nTVwZ4#g1>RYQ0Q1v5{jk zY{Qvr3sre5XXQ7)Ik3q2)r}=mE25u;QItWn10qdzS12M_=-fd&w$^b~puIML1x@?G zG4|B&SHD5{iuvvI@^$lScyiZtd}zEsacDLkP9(RXy-hkAd_=CKmeUKzn@m(8lZXe# z`^P(H4|T;O(g#j2Y7eRI19_I)qpP$<+o>Wu0gswk>g-`%)ZnIOETBv9knLlr!=_h9 zzdO&=tvR2B7zniZwL{3HESP)crn1)|9v3$@C(6`Z@LIm0-T5iMiXrvwYs@{LabA{dL}uV3cDrOK%-Km= z4F8G5YOwCT)E0wi1&9kH#EjIw*)#$ZW|C?UI<&5F$CKs*r4|vM&m?Uba!tBsgm!O!fXA)?%*ODmrJX~m zm(GlBKhBhzsKUd&FWHx?Rj9n-sYTW(zqapu@5p7lUK|6?Xy-ahuvZVI0Y`%5Ma2oP zID{IYVZmJ)CGBVe!2DDyG&0!zgF%Io4Dhsd;c28oU>CI}qez}1+2EL}0~m^_)l`v< zMx!2pG}JmQ!?4hNP&zi0NbRZtAECK3IP;5_SrQ`!;72SKyqcZDQi*-Cz`8ot|Kgh&9}z)~J^5@B(h*S&S+0=J7i0^gT?H^G{zH@N#A_zPHsE+%1C6k9 zu!~gJ#BweYyq4ors6oN@*%AZ7_+E@?jy@S^_PdEVmR&_)QNLer%9w$8vHF9mkTDwb zDgE#(ghANATr0zyjJ~9&o3o1+5*rS|=t2yTk3Vy997#g}xy)Mq<7)kZQT0xmrtQ#QIa7g0iD}e(u6Z zgd6uE?7~BfgtqoK(K`<9;E;!X2|0Dxm#f@b_R-}!m4elUr}ZBk4wv;^&KaI>M1|3= z@awQE+>Ch-8Vw;Y`5qvC3pgWRY@?FvDXe_`6z_n>fLqit+z`9-qq5~4&$-@+wG`gS zJ7_-*d!CaYe?S+(XFP{zWaT<9C*LDKeNGp^UMQd!3XqKdk1~b}e5+M#0SmJcG54L6-f3?7-(}qHj5uoV>j{ldP7uQ=n={^EH;7 z&-^gm;mWQ$eej|^V&twm77q)OHY`JO2+13V_Fn_7qRgyYgQh#sJKY?B4Vcy6(Cq-! zQNCa|iBKX+tOc|QLcX{hi!^bD!K9^B>X)VIs$WvuXps3|azxE24~kes>--=qySZvB zyDcp>uI%<7N3kj8Wg+EhN(hS|X*OrdkZ=H?D3ExA>$8|uyvHi24u~^!84Io8{F3u; zq>kNg7XD!q%S}8)uPk{PoCGuy8Mf-&Brj3$Dt7g16~Od2$ReuoB45o@ zNu&oCNKFY`i68_N6c{TY;$Qusl*$&0YiopcY`&!LgX0NeA6iq}0sb1Yh*#_YT!x_; zok0u_!xu)@FP}ZDxXf31-`UIRuRpr~eDyE5&fwkZ{PeD!EjMI%Q98<|XRl z^FNc5MFLkTBg4G|XNF-Y(CVt3QMrCV5p{XQ5-~1Xc<+cG*dY@C-fPOtmd}Vi??I|T zC2pi#EZYZjz4{m+Lzk(xsg+Oy<>~&Uef~!g)6jzQM=++p0vm_nqRvm9SaUBrFTfE% z;t@2V1WgA)N1R4T4Wia*dvCF3vL<6EzFPhJ8`1ELt$y89hZJ&CB8be`MU&cMwdXG1G;9CDp9FpC<9%J^nGMqf84)&O%DkG_N2Rl|XKH&IFysy<*NH_iDoM$0jCcCug@$`lt6UO@kWqUmiK6cq=y9?3?@s?&=yH z^-oW;H!b1inqNZj=a^@Gs5>=szM(M$XhBL*yE}WFhbnLN%RQi`ruletxa*Srhy-(j<*f0fdCK*#K?k2#2p=E0p#I9JbceHs*UH+MD#9Xv7{+Cl~-7Yjj6O?YXitau3e0unSbeUeRA+6uK?PRzW3A&Lkm4XuYz z0q+xvXTOPruGeM)R|4thn4nY)S-g>&)k^!B>gRtaS0W{Q!NqN!i=LC7RY1>#%t7-K zdIs^>F43lEL)Xx=TB*fq`Dr0&pCB!(R=Aatb$EmNBb;2}Np(3C7yZ$|Td$)>bXIp} zzy<#R`va+gu7>vq(Lw(!*WvR=*0&!%yqzEHE0?{q?p)x=baX?}$Q-TbniVR_bS6tn zVr>exU9q7l!HM9rL6fpPn9WrQtw~#sD?r>Q=(r%{#1}sw*5P^2?>APB{oJUugz(M$ z?82ju&V6L=QOr}yj~3*|GObp!3RIF7N=SA#zLj$y5MC}|mCxpaeXy|f1xxw;x7@Nn zpFM;qbM_D7%nxZj1tp0bq2+f_BoR5NcnTU>W%Dn%@VByp(U&ii{Lr*Z50n8~=8Ul@ z=3GY83P+09ddcFvm!-xNKv^&RpqXWI;Zj<(4jhnrh@rxv{^({-4e@Z_DBB2a8!)Om8X-EGHW(8!YDGBq zD7viSS|mwLXz*Qff0_N{Ml z@nM{5J(1LuJPI+sNOlsgNgLYkCJ zx&(bj^n7%|mU)Q^xKGRLav$RmF`h7s88%SNs+PsEi5)v8{5?qIu|7JB724h4eNMaU zme`mx{H*IGu9v#*XEsaF0hAS<rYs7okfeH5pmiU9^ z#_k$nAz7X-aFdX`r)tL*_lmsdxD;@wTz8?Z94eyQivHtCL`m&*?ROn>T@OliyX$W8 zC=2@PL^s*j*eXuz@LS0u_gu?fzbm#DYRpn4H2ErJfCiaxCkT`7J3_x1`M8gHllS zU!Y65Rv|gaN6nr@EnHM!uW=BqjKboB#A<$HJj~$k&VP*B$}}3Cu?WJx|qPGCUct5Y2FZ; zf6hosx6I2H@}JH?0jB4q!B2-m2c#8O&>WYY0|iq1*D}+N$q(}fKF|AfmNy*(X1#rErJmolG6n_F`0QYds4{a{J^ zH`PunPqg~M=nYLRkop5&wWre;?D7Wi^cG-maN-|BA%$U$i+9Q|^$>oqoH>h9o($pN zs`7QTGSx!xyj*aBJ34*mP=hf%*>JAg|Cf*Xc>8znn3vyTm!ty*|F_H_mUJyPWGzSLm*4ZWtpO={Bchb%#2%$}Qu@ zDQk1tD%LP5_DQR^$r(WSI?;*fpJzg$rE9uQTFUzYxph)*Bay;Cj*Wl9m(rsm6srE5 z{CLqBGWwT#tCnT9=&5wQocoNN`P)$FxE!*V%Ce^?r0zT2n_;>2&2kk31PW@Xh}$uq z>c3r)t2d!)hD_4N-$Nd%Q+@g{r5{X5vWN&DeB%yk2PN=hpe?|~Fd>E!D+I8@V&&$? z9=mzh_Su~~XSb^gZXOu8>s5CR4B$5fTcfz3*^ZD-IA!5|M`j6~PoY0LG>N59|3_oq2g-ono_#0w^>}~x z{|8wg{g$6bUgu^5P59llP}|;1#xxu7p{3|6-humHl3lJqVDT}O=+`-!?BSt&I6-|99g|nl9l0#=lew_7X%`t*-X_#XF2(c0@cH&?R9hhpyH5huj`zR#{p8enF)g^jbvk7Ll`cNqK>Vk67de~+W_D&ghg&Xd=RU{&yLI*sInAtk&`O}0 z;GRmBcNcZ~jygh`{FUo~r)XhYwEMt$0s+_Gtu}h~oi=&w)h#Ndv%KFU&;6Abs}{$D z!wK3z=|O?HZkWNbz9qa5)-~8%VV|;;E4S~{+C3?T4>(n;71(%6*_BgKt?{wtb*3Us zDIA$%p{`ku+i&jZ6V5jWql^Ql9uay1X-~aOxbC!U&o=BAPd%`2YOFip3v{2pc+plh zHE*SK6YPJP2(CYW;po&-u&cAz+Z|wzNR18roOlp`ARwA$3`7Oq6h_~{MZ#dbcmCYu zAJqIUau}|OqsaS0CAm~>fXa7;3{M6l_mXmI@rPcx0(ULw{$qa9yo$g^jBhoxU zc;BHy+oN0OXI}y0Vr9iNSESL(dLEU5Rx_*RLIHys?omyQ8+(gw3Cp%KavVJj-a+W+ zcmyVJV=m9{kZHOFy`apD zLni-CbbFm&rYd>tM$a7!%=BJ(^g{1UAR)L0OWM959zAWrgr;+iMM3hMvQ@MJxwN`k zX|Ncu_p&Hqlf91Z?T~7nDYafgp~1!^HVJKEGGI%k1#rYt=NEM0- z;BDA9x#g--Mda>=!84VsR!SWB@=nB{(^5^VEZ)hn-m^v|C!1>o2g}AB9DFP2@IaT< z%J^>Wf>Bb^>wR+3PpO5TZ?1aEOOYGTj> zq>%R@iG_{OQ1GpVL(Ea0PJ3Xu!n1)-=LL;TS7v8RhbQFeXz7f2I*m^68_wpV+yhr^O$b*y(xIQvblz?zpej?QZo&_ceGQI6ESG{9H?~ zgal)~NG+K7f%`ygl}um(D_u6T)phz#{QWutDu;PogE5gh!doJaXZn1GuuRS=v~ctggtqiK}L+FJJ~DDXb5On>N%c=TxYn zMwAD~V1aRsiSQ>CYN!j8)GOH46~rT@O)%XyG}k&S20^+nAZbIM zv}-~~*5+E03pm`7Jv1Qb$Ss~-YnoP)-pw6kw~5+!VtqG~=wI^~r!gM5uspZviG%ck zJ6@#5&d_6mG^O4so5n>ci`R5oVT;FN5j?m`wi+AED#rEC8+!sXl*6O`v@M!JcR{w0 z!{~G#yk+wPRe|M*zhleOSES_k8JQ$ru=wS1s4kLj4c?@|%0>r+6iPUGygpI-(L33wD- zdy#p<$U3JzJYsp@={lfW1X4(?Rh-7LXR`hEU8+Tm(jVcZ!MqO0&Ub1jrU<~=^^*38 z2wi*cJ2n}3aJ~NZ{!BNlEeDoC)quoktMqyG{)D1S(gP;IZY^!uo=_ajY#;g)lRW|| zge2PEsdekM)2r!bAU!}!N74t>P_r{2J~H{SmjZKL)-6E}s#^s-q6Z9PzSZy$--|x35fR!TK+(2t8nAtczwn|;coQ@*BH2oq z=P=ROvGF=4f$%BO#X|GnDOOEe|-6l#_Wv<)>3$9WiBsop2EmfrZD!kZ`qCVgF{fQlgcbtQ-$-x zdst$r5V--*ug?&BrJieLf%+`iMD1-lvIU)Y*b6i9aRvJ?BipVHPTg()|0xtDLQ`b^pq3yzlJ|_fcA(b@|m7)!#!0!2EQy ze-FK1Kr$?bu_6b^2W+Ddb|Exka&j%1SW_5h+z{<(OYso%kbxkl(5A6WYjJQ_q3{lzLNFRe8Z9+{0`CSR>|mrq zEHUiM$Y(v08JhRZH>XF`OXng6Q&{&*9~H?b@~J%LLlM8t~-UDlBj{YI1|DKL3l@ov>tBbL}=A) z#z!oc0H83r3rqx1#K}BJkC4!$0CiE823ge^feLD^no_ufH?En$pX&2mU)-|wY$rny zYcnrd#*U%|VDF%YCwd+@f}uGFxkoLQ!jV;_SJAUcQ3>V7c_P}GrhzsR%BN(?*l5*Q zQ)?WSz}EEDLJG@sF-UtG_b7h=ZC@F z29(<0DjScdyvOmE%f;`A|FQaf)U192$X}%Ye8Ckr)p4ZAjhn}FdV{-p zFO;vk7$t7&xEY7a3mD5M%y=q?BW^f)97}VfFF>z5(clpvQV!EkkldU1X@6>zKd{Iv z|3SU3Z5w$K6PKcPte|U)J?LjYEYO(MA*Ci5Mr?u_UKer_&x`K)GrrFlF3~4c#2==KfcU8X- ze*dw=%hPEL&P&Bauxm2WZW!moFAsKML62#)6{V3ftbi6MRTt*{AleSIzEM{6pgK;q zT5)9_ioYybCiP(|E{dneEvXBH!DV@R0@Zllvd#y)kX{FmFR&6F(0Mziae$RH$b;)B zFd(BG9^=@89q;-rGPcG4Ft3ILao6Z_xLtDQQ>NHd-e%jfL+90Xg5T67eL(g#v(dTy zf!hSUlPJKHDg#EBo5{n6{MKl$r&e0SFEzRlg<;l3#gZ@}$tcNQmZ$8Po}cMwMEblBh0MBOqgck zTMZI>0x2b`Yv1B&(>&iu+`mV;veE12#q1scy@aic>uejy>p9PFge=GbfvV}bMKW0V zrZ+OJoJh#^T3BR(dj&*~EuBqC{3JpcFP>HfIh1|GR5oZ8THYj<#-;cqthm6hW;nAK z(?|vFNs6J*+2Yw;8WP)#+@Y@9xo=zQz;HC?ee-ZURAzAU-e4+@>@Pdg2Xcqg@yWU2 z=(*0}X4O7yh7JsOf-&yf8BcACGDdlCba-wumOhj_klulOG4WLJTr4`=$zY%wRrb{N z9gP7IoW^4xZybrVn1Rm&q5*;TagET!Mj#X{GV6 zc?yLg_Rt14SA!Lg*g09h#w8SG^ zGlsAj4kFG=(@RU!0}~Si{BR$|JEF$n@xnM#VTAVHvNS%iEBR)8#<6cOAhw1S!Ar}$ z)KnY(EJW;q3^}qhASp@vqY7E4 zojbR*^CrwV%6Wf`U(!nFazL1{Y120XbCMX_*-w}{4*vc=0gtPjPwaqw2WiEyQh`yD z;*}vD{N9~6dCsI(Bn5WPvLA={DnVK~20GD-_oC-MqmD^Psk+mNEPW1lATJj02=azx z1wo*9-l>pc8DCn~vV=l78o_@Ze1ZYa&1iwT1c3D1wSfTKmYr{j84c>o&3~(wa7nz1 zc8^qKwjfTjVXnw1sLc&P`D$~5C_vH$M|KF)@~`F~els@_97I5Y`^7B;50NA+G6ZM- zIj^^=<^1oQZ)tLN22S37?#zuhpF5*U-PPaeZWQ=ktJJZ+qSABhWiW5aeOcHY3 zVD65*>jHqe{N!;DI+C2qMRl zy%X);`O2N$+%!_rdVkS8>P*~ve*wo(H$PsJABz!{8hgn|c)=tjfq64B;cMuALAh?U zW~}t05N1t5^7r1D`MXjgK~O@2fGO{YRpcPcD$p>f2ls>DYzMCg zw}e^5u|Lyrn<0x%llgdTb~LvL*rSLrTk<2*Sf`~N01xANs85M>pgW!J4&;Mf>4ec0 zgic(e)t#1gNl;I)dxk=xL?M;H!kEykf|(Guso=+Iw*o=eh^e5>T6$qi-rwYYpr?sK_(ucgFcO*g3$;G|DIJ2824f zsBPFfs&C*ug@J(rH@5v+NAvyOx$CYwhY!mQV3bzWH(-0Gx6DNhC{e;0@fu^s!W5A) z=2~Iv#VXlJ_3j-zGB?bciRjSMlxa>a-Ezwf)xSP@^5m0GKBZo{n!~2>#(x*;z^(o$cO}Pk`_2Jp3y9Z+hl{07P9Zzv-@WD z?wz^gj-QB!W7~JO`d~=iA80Y%gX*Jg=U;!m&1^gRV@KQ0yyTAR+v5IK)BU!=zS!8z zOZubJ<9KEk&-`dDDh|&a6N@m6s$sV$GeRRUtS#<3GAgZJ#!?1e84Jfpx4+YD^~VR! z-oYxcDxV0)X2wE1=l)bI92-0Ok~8vnQ>t=+t!deEYR#K*t?fIEoClkrJ1fwduEnn8 zVRNSptu=XBY1@%}wT35h(Y1&xrY6>Zjcc@&khD$z+W^2qEA_dytFNg40p8k$e!*bN zq{DCoIUJ@nI9l6jtNO-}&|@A$O;MB1mQXKd|@P>U_jqeP7sPeS7aGVKdGum}33?-`@M{o^bX3 z9w=&cy02xaYh;a4noNP_ZnECA>h+*DG0e)_ zsGX3ufMr9{hhGC+dogJPR2Z8!Hf;39TIWOXg~)%343t@*($6E?;!HE#ARLYmSEyAc z$Hy`RWnyW}4o|qFE!?DhQ*G{+SD%>-hHgBg24bqIsin!I+B@2VZQX6HtyA8>PJip< z_>kM(J>qWj22)=DP%0JhR*&87Hm$EMj{19=yBE@Z?X3x)H*oaczJZ;S_uZEcH@7x7 zH_uE`PJ7QsXd$YT}skyByJl@?B8#G#)ca6Q^`U2O`x!Ls->N9xz z9j+e(-Q%ml{JiDMf$D;*;oUaBpNGyM(04Qd0X++J*AmvVAZwND3IN5Nre zM`C7PuCZwI7>BZq(UBzz*<2XZpT^K2n5Mnlp_wA?^z{Br%-8)n=IWKzh@VX#fN|hG z518>T|IZZ)Dn!k<6*>wcY2_K(7e)UHjW1BRX*$Q);b=*UD1k?S2D3e3wSfrXWIJ#r zM}M#P?CaI5ql*vv_(Dy<2W}4Hprho4$08o zGy`$f8>%Jt`(RVkJ1=^hUz><6y|bz5?XPY2UR;VD2Rmw!7@vyU7qa}Vp`{jIIplL& zU{6cEzUnWk8_AT^gAxv;sjLA$zm8f#(}tx%bT<%sJEJxs3m8(8|n8OB0>uVNnr*IFO*d415yQ%eiv4oL$FvZY68T0X*TwY(+E7Y<4AwlZYx8MLb8wEW94RKVa?} zu$*Cd&lo=rz-cv)VEAetV8_BL@Crr#0tf;1Z_oripn}lEkOx%O-W{8V2LgZfNZTBMJQ@m?;!{`KwV0-|HB z#~**Z8_V%3J_{7Lgi%LH%VBnKD=(5#eD~awMCu?RiF#h%ueLshlOHrGWpY+6qIv1h zWy{j8GOn#>^d+-=XI2m}>cP1nO#yf|pP#}02|VU?spIzQzm~NdRly(5 zUAA70omb&e>3#duia0hB=EJCxTE-1H`DN351h+KuKWc!)Qb760Y!*lA5Qb7dy;xT# z1SW_C#;#H+@ob~w0K^n@Ic17WXW>oDppCs41xUc0Bs{#)JOpv@{P9KA>5E2vv ziGdyZnAwr;zI_x@%OJ) zr0NBy<_g0RZ^Feyq}Fhn>h)q^UWY0P17|_WOE9@tmG8YO?Lq45^n~OJsqwc>o%*Y9 zyMQIvR9?)l=u{9>8He9$G$hbFb^r762|`GS|uwO zx`*&l2e5f0m3ke%-bg1;Di_DuQ5;tPHI|G$x=+0X`?v19S}2HIhRQd&1T8g&F>`I? zL^zEn;YEyQy{sh$>)ax0F-)Gybvlvc&@@+R&-nmBE8mO)>@y4HC=QO77 zU|Nxv4lJi9cUNE7H39Rkv=lQ-u7ghb#Y!PrgYi&EFpj4Z`~)nHjb%^ez2I}4Mo`z% zUz!*gL{U9_(2{8t5pYOHLWvKvOzT(hoWX&KajD4baYj@bRA;Tg%NC>@$M!@1(L*1O zlb^!lnHGSnOndoV0Bs1v9*1}m4})u!xnS($I^&t&=|J9hkpcVNKV1-pb<7ArSY5ReAd zu_Jt-x=KUL^ z`&F;%HdL>~)X=8=73gc7sJ+%SwMzr3b!Dkp@gsA6PV@Nje7iT5``Pa9GW@}1H~s?d zD_CU&YhqYEKAe>^_@exyGZjBC{lZxLG?5&eedI}@Of?-EQoI4rwKJ$|o_Wf{BFQgJ zA&d0jElW$c>^;0Kb=d3O(-sQ$OeUuGP5b{(GBhN$q>gNQELdiS}Yefm|p}p{!{Y3wS>}ggX)#9#$xXfuM z2+{h=BICsU{ejs1e_pocxeuK~Fel668|iX!pM0 zlCLRu=yosZ|sp$W}wT4;FhRuJA>F~9x(yV^ayZzGRI^1!Jn!yJf42dL*X_84>CK$oC&;P4_zerKX4Huf)wnXJ^8U zUztbS=%=qs4~bkt=?vqb>?REV z@z+b{^6}K_Dy9vVq9~>>B@%{_NL)&%@|Oq*x|G*42mMM#$bpRAXXDHA6AAAI{bOj`4DN z{Ouj@9x0bcN}dM>i^ai<`(7O_79o(3BkdEdl3A_!*4Fz^6hqZ*}7+h!aQD ze~X@8DUZB+IW~-tu;1<|Esy>+xU= zdJJhcYX=fBwpC-PazkU4wrZ+6-=tL**o`f%^%QgJ_;=28%D?uI2KG@r8 z6NCk7s@{PYhv@uB-~|_*^vvvCy&6i{%e2>av@V`St1%bUINwUMZ@`s-4&Vf$Rg&-( z`lw;aqsPe@Rwu$oZW$W7^=SA+DdN`xO`wl^1o!ygb#_d>Ba zO6jyTf=Bp4XQ&Vf1+I}{%K5-1AY5v0q%bmXK|7!x2)KWs&*F-`9AlPn^S>7wLMp!l zS!qsE?)-je{Ww|(if0Dm7t$(hvHM+_fv4|k-+F)0*VdM}c_6^AbNXog{1r_cW&2x& zRjz|&NZx_fLMVmgK7$<{V{jpDvDYZ0i9V~TGp+T6`HDV;$q8LmBFL$JA$c#7y@fD{ zkg?gUSgW~J3zimF9@Z87g$&CGS+G3kRLDY`XyOF za`kw7_4)RD7seAlp9QtWZ0hr^`TClOro1}dAKVoTUT5~JL)BON48y0nuVbYnjvn%h z%f{My7BXyM1P@}%KBxTv(ty|$hG|CUaHTd7#ttsw-d?u~O~tYJ#HZr%M5w0+dp$j& z1P}aOIOy_+5^p|z5pn*fFRG^`^W%}Bo}QslqN9a*T3b32Avun>w=m0LOMCn;A2{{E zDf~TvcPAfu7Gs$!<`2$44a}|BZ%FSeS%fi^O!9q6{RUKqaG3vAS^WFtX~4+ zBD5F7-w%)<5jAxUT6;AoU^3@Y3uGZ$@I>w%#$S%A^8URC#{gGb0 z0d&@znw4&@`#00sa_GycJ1gMZZ6^)8mR0-1sM$!Iud2a2EE zEx*zHiaugeZ}B{9HN2JSI|Y0z!ET@rI3Vc%<>}qU&5KoUYrbE z_D8(vg97F-awMQk^nv8B84;dBnI1D2X>`#Bhb@{4t*kO2GUiI?U(m8TH)9{5M(~RA zb@ezmJR*OBsnJpbvI^5R-i&Xgdg60^V!gJkate!`U=h7kE_e`9hK1UcQ5y)^!4Oi0 z(8r?L8~T;rG|pfM{cqiV`?e16=mh8f<%+kR4#Ado)qnf;Z5^#RhvUj+UYr>1YOjqI zwj3p-+K3;wGoX&og`1oIUZh4#gyP|^U0*JjWj4QG)H(}(J7mU`;y-8uHd&3g&ed*q55SZ^p|4tXu-%SIDU6@i1y?J`p z40C=H;sU|L<`d2s9BIhMS~z$5+<)IbJiLAQRuOqE3l_jgpcEV&8ygJ%xi>b*clhgIYT=aUO|gsLgfyzAy$sj-e7k$ylVr#0Z6)h$P$HdDGOC=lsFc!Sfzx z=T8|dF{g9zoN2rucQo6v6v}lTwCfqP7SWS%hybMHdZyZ3iD1#zFb^mUXQ zaaNS!;SN9+W?ABFnDK?4nI?>+IpmlIN`Ix_kI3ZVcUXx8)+`3m%_1GUM2aBPWo)cx z;WZ}6GFs0m)k9e{V9#d6f*8GsSMFiSc z^pU**zbAZn|BZ1tDyXMvKEqnlLYGD;-+X2f`nSh6`9V4INdDczCG&jx>9)4%y7W0BJAbvewW!(sy*QcQiaBXnq zDk#gqQh&%no-+)rnF!A%3{nLUW-vkw68u(UieR~X(KuemI!MfY0Mzf8^st_ZntRFO zXY6$D0DA&`k{dE`Y6QR;3o_W=*i2O4^LL|>i2QM+VUJ&HqXX9HKvz2yu7OcY|H%=~ zG8~Xnod1o&CEp;{ln=+I+xlWtZ4vU@NZVAbuWcHishHRlL%2dz>XIuYb{(--OFl4h zBh68v(Kc8J3~(7ahMhkww!M5fnYteq9izt>+;?=QYucPXCd~M*LDTqH&#?>JnvCIj zGi{}wDWtAw(Ys+bbW)0dY*v#=Hp~cHBssHTN?-|P3M#8x%!&FO^9tY8vjO3?NsmFX zvNqM!5^w|V)}Hw3qw%B2>D4gfUebyyZha+Q+5C{Y^g{~LjHTDps{B4<$4_yUte@He z!dRytl-59z7w0lUk}22968wntdcc2Zb4}`ViR(=F z(&vR`$Jl9bcZF$@f~%Q!DQMH!s&Zj=DZclMh1tFFrBe<2IKSzPzDh517IUa1bEqy$ zYXkx44YhRrp_kNyeGqIc$Vm;#j>3fkom-P+K=@(^!dk8tp(yc*_J+}loNLbW+Hl}3 z@&jYizdaNym0}Me#P4D5Jd8Vwh!)H%`iB`!TwKF`zES#Slry{*BWP-^G-6dEz06}J zw`$`&SPE9PM9d*d0rx8A^A)Zxys;i^LM$5uM!`B%|4p?#L^&?@aOz?F&Y{AT1jIT8 zo&xuKChU0MRsQMy-b~Jfx~OEP{J&x^xE_jqSbw2b zKRoiEId1cq;YCO;HQA3QNL763p_uch9&+|@3eRm=sY;Ag~3LAFm-T(Q=ymDFXN%i-jU zmV@wh{8+{#c!-n<(y@|Ctyrt6l@)+-QY&E9DeEdu;*5n^YJskop&&INQk-?}Ey*Tc z;DQZM>rhNyB&{q)O9^AnM*2DS2oM$-V$M+0D$2V=QTdu|5i}&<4O`NQ3T7Ade5X98 zoZ7doYwPm#Z}&(!I*R&Ta_W$5(FZwuu8O4#gg`hAr55CMpuq_|WllXZclq%60`NeHyaMw(%X;!RwB3{T`HdC+f!j!bss5p*KD0kuZ}(hdzYRx#EIWu!cZ;j@q=V(Tc8F@x;X*7y0%j0Jp+evIEBRfuFV`!hh{liXt;yx+gdFy|nqvcmq7|G4wPq2RN3j;5115l|tmx2A$oEG!7Ef;+Xc~!a zi;XlDf2dN}l27Hd6er&Y2H;=6dtksn(%3lSFMcPVN3;>GT8>teIqv9D4;~7-et#%S zY!B}qXvkrO8)MLK644zN^}cZR?CYDl;)=UMS8M(-MLNgYhhjI=bjwBU^$$(HntzD*@=9h@2%7=jkvVz};fMt~IEt^ir8 z9Y#4FBmD*VTLH3ib5NfU_8q)wuO(!Ffsd;dP6i_axXv0-t{q2ve>!|CKIiQ?dWoRV z{Lvlf4ga)vfnP^|*T&^%*C-}|E-PSrHkR=5+j@@fm>RfYYT#dbjy6e!?-`idakQuS zT+hGoKoxYAq^}MK`5$9rrCMF3UsZ*Uk;(yz>8)wna}8*s{c45I3?omPYY}n*;N@(O z6zf9JUUlBHEi!QZ+?g}X)LZ70)A;+aT;iNmwgk9#vU#r6k||JzrHaM3R(qd|jF01g znE%&owYa43kZ-_Pxot{>-Dn-e!1HSFD#YR>+y+ajEuEJQon8XwU+Z1xfyXPgL*$uC z7A4WD0G=JW1CfpQ__I4ZI(BCLo94<|n?id2{9*6bt={4Dd!Mm4s}nz%O8&!5UqX>> zO5%*jVp^E_MOg+b%;uh0A$_@lQF4Y0I8?6h6Z|q5CW)`r{9hR?itI}(Iq(QJrPwvM@0I? zHWE-X;D20&fZP^QAF@){RUP9Oq}EK|WT<#XoiwZkoh=OBAQV1uQ;gPu*~va{pd+VF zeo-Nsi^!@>P43p-B|6 zuzba{I{|mtb2L25ExyaEPtSTkNF5EDXp!Dr{N-N4=Nu0NEVcG;N*$QqdmL^gYjgnN zk_qg33>o_P-rZ}DK)DZk{@0@qwk~Py`S-tSkKPxKh7PeWbNuS;kFDLWh3bZIxS_fX z8`U&v(FXwd%YRB zCAD|d4qiW48*9Naf|+hmUBzF=3cF_uq51dgqSks({g#G?Ee)QAX8p`H5AH6+aL36K zj$Fi144!Q+x`jqwZ5&LZDWDw@v(JKyW*EWd?^yd?RSo^1saeprAkC+O`qGkNt1(0q z?BM4>7R+i0|KKL4HOlH9nlSlS&in#yz8r1IIz^YK?I8iYNkwfTQ1AJ2UEC-gb^)X~ zu(j8yO1J|@4@DVqRsTvDN-LtkN5e@+g-hsCz#}F_Ify8-*XO1%{x1Q7KdcekztExj@vO#8yPIWXjQU7CQC` zFqdOvt+9s0&`;WsGHbNC*;n;poE1=dt+%?f11gZ2SHy1&P z_*-<4(5qp0_tU32U-Gq#_<>_^xdr`RxlNFBmE&qdCc+TG@rM%hpc-4T zy*hCu_kM@RFj^Qe{hLqI-{aVkx2JBo7@0{#eW=a=c;}JgiAl6-%-=^Q#DcXUDMG9Ev`weG^%LrZ9QyMmL!wtn>4t%;Rsz#*PKYU%^qkUanv+lmvynah<4l}3o#>_z?X7maNl0h{qz1py$ zLWNIT;q*zzp-pB!r+xx%Q}P7#!Um`fMXUo#-|R%V7q$<87^iVe{m81Wz4(Ip)}MEYmC05#Vqvo85(v-g z-;`FH%s|6z2=%ayRJ1l=^GA!try3$TSWg!UXr}?Qrfsn=VwAaa3G(dA=)lMVwaNr^ z;y|X!2z26bBSMOjaCpq%wBo?44!t3^@6kxNr^Ac{RJfsgczk#|eD%q`DKF@jyQg_m zyEoWfUvC8$XJfgJ$eV&Ow^`fPTRrIOI*?C~C7=IVq!YX6cDGyAHQnv#OCGz-EvVDL z?_JUtd!n#7L_IG)(uh#27={V$AMI5Oox5*rO>_iQpfTz{uXTEI*Pq)1I|P5|*49fq zcPCok5a?)(2bzb5F2?4c9AP>V;J>Ew+M=$xkUq_YI6f3v+8WR0jmN}n_&YKdT38PigI{kEsro~rI*wj8XwOZIjEV*5-i>#wk&q(O;#b*z&)we z|KyH_e7<3aO3&oM7&sn>>j*wvz3zuwKY3CvJA+U5Vl?y#&A&8$@)wXr$LYXc7nS?#pY2stF_#YfFFwnCNH z+K6bDl$vX6ynS~rxBK?SHc()PpLFcS+>f>7(*qS1t(rk>T+l5};t>FErZRbrx>f8@ z-Q6pM2kt_Z@2H$OeYYZVG+-4Y7Dts3oEj$^GK3RC;c233ZPsljaYX1S? zKxQSwZdap7dy33p{7p{8@gW^?cysX*UC}<$d%C8fHrAX@j?`=)E2cL5-o-5&UpJrvHREP;LsN_AW^*}bZuIun zR8KcHr;@>`maz>(_2>E44HT-2|E%hREloAmzl4#57%(K-p%5k1Kqxr@Ew9j0e1RF` z7)VI39ssBY|19a*u&#eo$lv-mC-CyhXl?d+8Lt-UZ^hPD$-W7^WsCn4-{tEU-`(15 zUZh%3I5dKw~RM7Y&-OIPjSU~PBpz+i1x3-+TBF0WWCXOBK%HP%J+_MTh;?nbMW`P0} zcM0R49OG+YsW`K=C{AjputPkqE0;K~<)v)Z2@+U~EEfWgLNEDh;k~)WZ6LupJY{rOQ0FZ)S@Jr|u6)t0;f8Ki#c(T5C zGWSlYI*p_SfvRdi&rfp<1zYa!NT)kGy`7PCx@)Iy+ics`X5ui+8*({jYRv(w5-V!@ zRvA$XT?{ab%*N_jsPrQQ*keXAQ1{Pc8W6T3fBJU`rlbPg=*}McQz)`0Nzty2F>yHY z|Li;&YqX2Gh;*Md-OfUH>|fv6wW02%x-QW@-YegKQn7*Y(zFe3D* z*K2h{>(JEG0xe1TJyV_?(MvqVzdYZQ_FMwI-}J(<)vueJ8H?twd;92t>#$PFW6LZt zz!22UAfz3R`apiGn=Z{==GcY}$2Qzo(Xh;*8cHNCNF+9_ZqlAek;l0%7mYc4!96P|;Y`mykgu!04ga#t??7MEBym(zEg zlDqL{PPQ=a9STgOZBk6jhE~GhaiKIB(+;kQl2RX|E{^legXrqtWDK|=W5mZxN3Rok z`4qpId}n@BzXg^bWaD({2<|$hzwooeH?3ooqW?4TFm-^sJ#BI51Xno1Xm}^80Z=T6 z9?XPzGdbrGtSe*$(G)_YcG23CMo^enw}|*q%V^5}UsoKze11=Bq9%6!&hu3|JzGr8 zriVsG)a~M^bOi!A)6+TxOdo%swHnc{b*=bmuWp@9cCKIFiHr&wcjQI;#(tM5heMve zcH`~EQ_qQC;L;H2bm9;aJ&x@l3~LT<0r-IyR7M{N&0&1FLs&}0t(w&!G>5d}?<;D1 zs}PSlyH4t9bzd0sEOBwbU%J`}9FZd$57T0T(Q(G{<=mc4#Z#LukXqk-a7MXrrlV== za#MTns9Q&7=)7n~rO>Hxrhda;dlP6atK`rZRBerBp zg(`zxpxTiyn#@_dJUqNLGZUx+>s?g~ zEl=*!b>Psi4K{5qrD`clS6*;h;70Kx7UXf{cY>43a(Z!jhUrA$`?T=x8w!{0-#@bt zb{z$3-!If2wlzYmu&XfGlS>!Sl^`BbRCK{8jXdKMU>19NM|;(K0xiOr22L8}C0d(< zCk^AVra$g&Y3=Q8t#%*uqu76-+Jn2s6HN!JtE&$-mZ;p%ATh)sEr_)nh6<{n0VH<& zIAgwB4BfBO8)`eZP4#Wf?S|2Odw)E(&gY)nknT^dtFOznBVuWM{!+Sb+_>Kt9~|fk zjyIrma256n)zJ_R=TMmwYeh0FuF=XTE3&dX&pKMrZx5XPmhKbpotk>@iS9@Co;+Ij@WXXSPwIZ>MAGpP zv-C!2B*yI^HGELH_J+B~P^uFix0yVNTNee$TM+r}tBtk+04+@t~U$Z!P_D?5=%A|Ck; zBkkBhuc4(m+SX9p-r3mL(c049&=~Hnckk@jSFaOR7_PTny@44j{?~bL=(7Bm4b_Hy ziBR~|B{l8U)wS;0=15KbM0hmfZ>VeY)keOJR2EEWAyBI$!6?PMRJV@C!FSy8r^4!G zMiffllpDjWWp34DP=a(U9 z=3v|fj?15fubFb4Jn7i?sH>zc3sw}z@=mWt@z!;aW1J+z$x^L$3fr4m3ULL9MhNK@ z7I~me?&qI6m4?I(5|45qG1=4=Fz&2at`20H%G$(1uafX6j5QL_>a4wja=~+dk%(vf zC8(XGGB!9L3c+>%ga|-jew=l<)+)*-Kz&O41~_BA~`w3E$fsg3mNz2%U- z9l@Zdr~2e>t9L(x`4+{0{tKM$7R(Z+>?=<69wgkV3q$wUhvviGJH?xrH??%VB=or~ zKfQ<G!BvJBLa&QK?WO&D7;ZXOU)iDLzkw5K;1IqgN!KG{C8*sHEYhaD-&X%n`wtc4GweDOl-D)tdZ zc=uIp&$3m`W#pD6dz)@}51NaiS+v+K+LsqGt2KD5xI~_y#()@C#zxJs3$JBsn)q@_ zzMZ8rwsEP8opYh7Gw{L-T?eMef3Zik^tKIU&)<7|$ln}o?ogjVKW=MlMryyk#{==I z1M2e)(T3s^FQhU^;&#`b;*W9r&@C75$ohkwfsR4+>|j+ac+188eX-{D=>wIcqNP_E zeIQKq1CGza_c-H`MH&0|y&EEhZQ+KB;ke!z|F0e6r6(%}<4vXU=N=C(wPd(48Wtpj zglm+0VmP+(Y&aALK~GFXB1CksVh|LaXxDLJ_=M_a#+io9=2U?^&4eDz zyy6;f_cdCv*3M{a3|Rs<%VID7vHau}6J|iZP2mG0znTx@Z)0Nfmfm*U8>_F6S@pj6 z2I}T%k(;NWY9BqlgtVEvS-M+)gMleiJ-(G#;t=hHK9%H+wJhJ%E5KlTmL-n9E9CVk zp8~tA70FMA3EDD#XXwFRnFJL+v+%+_ruvKDk{t?5(G`WgP6z;-Bv$f7a^|0-^#R6;?%bzaaOfO%1|{$&A43*pb!WnxGH1=F?d3K9P^a!bBbr73FeGwPNX?8(`&z)nInVNR# z-)@h13R(rtEx&qmOAFD5v(dM&{f6@k(TB3pb2Uh*t-=dMk>%I9qUo7IN4g-41r(d% zpQ0XVJGvvE&+Klv1)okiQJ1e9-ElNGlh5tWM5EhwXX0(x|3pg2YdZN0y;$k8D;8`Z zSrIHm0SqQ(y`SU*tNel&RfiVO?jzVg(SGe%Cw zIlG1Hh8sy%fZKWK^c>8!d=Bhiad}AjE1#xjioW5*couvQO85fWAz*$|=AeadN&F3b zM_doAhs65`GXz_&owea$2x}q4+yNtd!t+>N zsd^uruB`fWM>kZ>^%hQi_3%6Bjt-jUV6>YNbqedK4%ql7%swMFc5gE2h0|IBmdoS> zc_vH!z*4@EhK8qm_C;fj!Na*L5(i^Zf5V(RV6nKtAB`PMT#>t?sXi9n*Mre=v>4*q zgeaIK_w}Jg4SXp!ga?S})Z`PH?!rnhrci}T6PBgp^%QfwpEwte*SGAYj>xxw6<01= z74BD!lHkSjlH8>&LR?4ADzbS#Eo*KRUUFWf%q7i5Qa&YZVr-sc5#e5@C8r^0nMW{P zAWvcvQ3&-GL?*~(3EVpV<_HIZ!C*lGcMTr<<=6wUPz*i$ZNM)_p#V9s0Pd>>GebfE~ z&e@a}QYn28{TLp)dx-B(2=NNV0=^(Iz2ahOSR{zWNI0uXXAj{0&{mo-Ad&3>n*)FG zUEyQlXSt^ahy^xrhd#ErNCPxRm2Ep?N&9%U|?5=#D#br%oZc zq3wc*MV`C;Wh@ntnmoEC#`hU4in2C}c_2Hfadjx0Xc5sl!U2)uxys)n5`vPHLbTY` zRt=q10_dQ8aBXcBoP_G|Ra;yT!SOmdkz%aRb3|WtJoWbygat^gf{yf8h|l7Yz&c=n zVOkM#vQ^R7Mb)9sS6p{?UiP-PMc?*)o=4@;%f5Vn^nN^*1I$xOr5``JF~9^ejE=1) z-k8iW@?)HpGg@fWA|>4T!*ledFTfmHp=U`iGG?u;{fSV+RH@4&h+umNG2{n`?F4*n zF%hXK=^F-UyD|IRbJ-|z>k}snuZOh0*u5J2djF5f)FiH~GjKWwV5yM)b&8$4?1yFu&yH@1*}$UA zE5*Dd}_!3IPzV-c+Z z`O5w#D);(3+Yi^&6IH<>XQA-CXfQ6^-`?3jjr^cZukq=mUj?p_ylX;z4Roi8?a-Ht zGY;L3g(hIT^MVtDm5f9bOhY!IuD-7G`o3Y8t(1+;BfE6E;#{y(5qeZB8|2lq6?75{bR?G$7_lhKu5{K)ku;Y`QgL~+crw6 zZSr6Vj0H&lFqz$S@-dmsm#6`K%TS0xnqlJTrWVOHF6UUzc{2QI?huR3&)}UvmuM*R zvF#ZxOsCV>`Buw6JY|;ICAmX3#Dz=*>{i)#S_v4B(8Ck5zJ8o0R^Ban;*tb;?C zHJQ5C#-p2qNL!JDV_aQpORA+MwN+YCjlp*8S=Nmq?W${Qi`T^4-ib|tkLiZW?eKkI z+X7}2y^GU(kHl<&WPu7)>dsYdG@Et)uTY_zPAM*9F37tPhj}D&AIbw{jFBEg$0H~k zSO~l*m{H}5?QXn$J=JHE(f*ByU%dN3ZpOF-?EayF*6b4WZIhk-2z)#+J!4+7S7wfU zlSm5`0JF%rkDsMuxuvDtv6(#5w=ZCZO;-Wb1AG}UxoFoF!4b-NZ2cQ|QW}A)J%wFd zP64{|%!rd$HTm7U7xVeu*awX{9_S56Z#rEQU?os`worOz$+^|BduxqA5|7%X%F%04 zIO1w>c$Si<*%o+Njfm!YfvZ59dg*9}RSOrZwlp#rVJe?G+taK(my~G8@$oe)A%w1# zHdJ6SEr4yb!^taXoX%1ME|lxj(MmedfI!jEa_aI5e~m@%otR#(^wRhemQ|&t4Qbyo z;Eu<0 zIjdQFGPZz==tkMF&Su;@23MtStZM96;icPBH#S>~;3S-!$a<|%7%mw}+4Bv#K)i4p z#5u~Gb${hfuXm@pZewgyb&F|UW16Gwb^Ghis}63A#Wn`3_wF>!o!$kO-O2Nh2wGTb zkG6;U9}G_R?GN>b@c*85{r#u=dV-UuCWAeFDU`HFKZmk@p4u_4WvBM36rXZ{dpdPBb9ir5Y8KB`!(}H3C^$UI=NA z&dAw)01-hjW<~4MYq++STgM=;<=yJEU&cI*koG`=dqG6t=>b$POlAb>Ei_p`Kmm3pKnBt%f`kA-gvpH75A`JN$-RjK(}DHK$Ta>GXjx- z9jFE14`24L0sg~&xH976;O$4wGmr}hawrMcYnqh|0DXb9gy<@~hWttcO)9LbB3B6s zw)hK{<#H-jDZ_I8@=tfsyKsmQT}|scseghx1en* z6p&7nbRoU8ButuM#hl2C^nCj5t;}+KPDRcbDvl6-A{ZTfCf#*`-bs6v=nGYN4!(=f z9OkJ#=W-!_ktRF(qB^k+60cUU@6M1onw^rYcx`mLVRG-}WM6B`z2&KV zKscgM&*?51izy(f?~16c4kHFFSB*z<2%-v;7X8?;9XP z4rdn_w#wQ9(tU6ntE~@CU!3tIGt7@F+a08(lIkE`poO?2WZN6Ab!2?O*}w*D6Mw3R z^=2W<@P%bQ7@pH$Pob~0tRVD7nIv2eaGJ;>tg0OmxW1|x#pz9g=DdiTO9$9B%lbx2dj{qSRLq$M4$-07s%uLEaFJ=st4#z z3IrX%?hz zrcKBNSOlQCdG&K(b?EuPRU)Yt5`8hhN8q(Yi-B!tK>!)Ok)R8@=3ps2#lA^Ktw*VBs}0g3ql zq|=iiE^*EN2vn}lKYxRyunaBR*Vr&1YnAVw4Z<1E0DsL*zRGj_XF%fH@2F}6~ zJPgSV#kk87ETXWpBoWD-?UqIz+o)qgbk<2p9F+AU0hOZev(&q{&pZZ=h|&& zN{7kL(VIlLD5xhC#vUfb$RC1T**p32vDh(hVtoC+eJA$Dy-Va__D-VA?~U(0v2Wk{ z@dU!S4d`go>aPGhmTObF&I*c(Wx{L~4n>8;Tc)RWTxW@%2EQks)Mo}PPug9T2{rf( z-wZwhf2PWv_E-Z-o%_j0p7~kLrz#HIg@tsVr=2=QS;Bgi6 zxTB`Gx31P}c%~2-(OA`s61OL&&V4CCaM%2e*nwJq5%e^>z2hFEq1u!5diyL3`<;(@ z-OZkJUHC>N7c?(w7|xl?eqY)K^xn~!qZP`nv2m@Un;88#x82+_7VR4X;--2lpIerS z)FM!PU$jlsTlxInO(OY0PJkIj-GxSU{w^I4wq^z|3gHkTG+(!|uWw^T{;pj5G!(1f z=-aETy?vKoaTjuT-HE(jPZnL^<;c!?pxFY2M>`IeLz`2Djn(0EoL1NpXd-mSVgy9^ zGjzy>^a3%ZB#jd76%F;JHYiPKA0t|HTf|2P30%h$Rt6j1j%8uKjXE`(o&PVd^gco+VR**OmoDRA^VzOQcu&9UcJ)*BAdYC4(^;*tX0z1mho~wSJp&U} zWz`!_oQPj}<;_UozL0Lc^2+#$6Y9YSA8b2*9J{~izqcMg-uB>wny=^*3l%ezBEl2& zkohH`-0U9rkW!+)43Rp@gHYX+F8;yO52P{m(7Im`&E=vOV85Ww+wMM)g7lwK%MTnO zr9blM4t;S)T@Q01^?dFC(oY~i58%Vej9e{o-t@8DPOMFZ46OhOGbCUkEo%e0?gUlu z*mjDUlbQR&zI(;(YOc^6NaO7b+^YfG?xa9Lir7jt9cV__K781k^O$pZ&0u4{P|P}X zs6ic|suY&f!}_PHcp5u0H5@u*#h`qYd#sq+WZ%U7z5eg+f0;(n#}a-oj${RGCtZLg zS*64JE~KziO)4GAoyuvKUIiT|{@`0&kPih1%2UpmI5vhPB3L(2!gA1v{#~t|bui?F zwz3GrjpVdKiqy0yRyNA_hs1gHHBUeAz|#-BOG*}+>XGDwU-ydC#PnQE?QfLh7XhBf zpHLfc^8-(RKrVbs9(tpE%N&+{2g6v|%*wSUXC1JT$xxD(G=yEP@*i9V50z1wOs0^Y zS%cLsE>BEQY)Yp;J)t?h95gB9<74nSV}=31xx+@SDQ+Y&8#EBCm0w9q9nCCm%?N$llb1dfCI#3vxOe(o2)4|nt9L;!y(_vA@%Gc$p^Vx~^?~t& zjLbMV9!>0IqRpMXmtfCcHbn{X5d6TN0#@dpjm`3wIs`sBVcEg(l?DadL&Me{UA;9r z`NU*&dsYA4{n5@tog0Lt%#mq^TSIM?;o2UZ#Pv7#<8tQ*9KVNGTy%UOhmCh7^-%nw}ow=EN``Ah`t4JHCoP#cN|^9h;n;VFCVj2nxrNa(qV+I%~_5i%&cenn@M3 zKMa1r48xai4z(7SN%GKya&V?pt0xq9j5Er0`|a3x zfrf~t=3^~QP{YC5C65MSp@gR*o6@{A43)50F0(mmVl}lRFISB?rxJ&lgf9$vdM{iD zVEzG5B(K8c20C?XsF1t)+N!$hK2KGwcqUdgq3Wuxz0%w4)hx$54pc0Oac zt7;#r;$9ehw?*L_yD@epO!1$%KaN$B=qk1N7-h!_MG3t!0=ndLVrL72P&_vW8!rAT zlFmbbm(7}B`E?FfrtC6dACF;PX<_6lp#+}HMmWmY0lGUd7Epf~efGxaMejM-pKrOd zdEm8uuT@piXI~q=_;Yu>oXgQAjNFwYk1`&wBFkgRx_YR2?+xqL-LSX$&_OYv6t3G| zHG9Oj{kjR&>DW>o?e70s4teT@=73@5F|XPlQnH0);EhF1Q=TFqKd=nUa|;#>4rs8} z0n9=AWK6!jk7#xj+5|jJ7(LF;X!nJ2Ad{4 z!LI?Cn?;yypT%dFZB3_?ngNV_3K*MucML-bkr0i*UKK|Oktt3BV`@<}Ur=@-{I>w} zue^i$6cbsojL?~)2`W{@w&sg?uS&j_5_1OjuT^beD?RuHmMflHf=Yj7c2yU!tW%So z`E%~tO#Y5Eg`6AsRYbevfJm3@IX~D?m@{nxCyQ?d4YwvT}Nf`tLU+T{X(wE#B|u0-rNEju?u8-hj3U7L$Ad*EqYBd=fDwb=p;m%VGL zjiQDNnCYC@;J3Z6lIEevA8^M2)Gk8;&k5jLo#_cK127oF&Vn#i^u6w(NLA=Mziz#TXbX}Fz|AvwiUp%Dc>?xep|I>Sf@N2=2x@{R)ywrwRmc36 zS)*>Qsx?Ncf_wS(NM)%?2kIWIue!l+Ro9POwN-7V@0MU*zE@npDqYhqOW4B#l>E&| zbZ^^dVd0trxYWN?j_s z&hKD0!+!#+w)@!2qPxUYm+(;rCz{_A{83{4GTxHr7BNMdADqZml&bek6Db`Gg(3Eb z+k0T}X^AG#%ErM>2hhwYZa~^O-1BiHi~+W3sU5(!8}#6bw?%a>b{K!szS+$?jvn2C zE!X6Y$=T3iS zqOa|1PKVkD!#_QlI=QJ8O!AfIz2X9Sblup$LxTw$qQNN6BsYdYfs8TA0 z7x2h^*g4?w{PjS^&LL}bs0n%?(BruM|Mp`ANb5oZwG!W}qdx-7NN6R1O?0G3VezK@ z`)|^L9Z0WVxa?iQ;JYq^T1DFkDXU1-Ci_}qH~~GLRp&Y_SX|0U2!y!53%^6kNORaFVFXCyjaL}h?_4}H@ zAyD%o)>fnv{j$I&YB7f>eksFOaXFU*4}VV1h?;zA^h=zP=8(W0L1sKZSrla!6BLeJvZ50Ga9?AFG z#~NqN0%twpqK*UlbH{#EfuSQ3dNc7u;YfoLtKa^3p}oDpFXYx@`CIAId+_TAckVoh z566#^&>4{iLa_e;PX{P$g_6X}&@YQ>9&{htJ*-_hOHLrjIbz4XM!Y)i^?#eKi9e{_ z)E{Y%`@F3Q<2`Nat~O7mK0SJIp}i$rn|>h}7)%acd{2Ax$h2=0Q+>I|nj`(2YU4(t z)$4mtTk*a&&v<>)!JX6nwf$M&V8g+k8&cDOAo9jC8uwOyzhLVm1f> zkOs6mU~Fa33N}F%Yn4J8**WlxA&AONEys|5zXb=)m_KJ^G|xBy>LN-T@$3}S8Fg%q zo~L9kbF={=sMNr|=D7N?&dPBzIY{PBElae>r?fQ;TuIpoCOQJ}CmL7NdS_CfM{ZTX z$5955+Lzl(&zvr|FeADLgj<|lE%}Dsz_yFfRf!+DScq2J2;fH!mH|m7=8kpF!B&)r z#{xm|XW4ade`f!A>-TkemyX5e8olvAr;iq-zI^_?{rlFBCB=5+?3qLT2BhFPQqRVf z>m5Y|iZN^QJo389`X}TuV?l%P3Q3*X!qFuL#zZ->LOfEgw)N}V@Ht-=VY-mqR`$Kw zHou{*b;E|%w!NDU!h>ER5~-Y@2n)OHF->kvG)UBq2dNmJ#>RMBMeZzn2MrM6{mqWi zTq@Wc1f!H{sIVx*<+L!`-F99i5^o6CvnSoZsx&UYD4H`zIz3Bupq#Nf+t!DP4j~#UedQW9Kjbdr#kn<2f93Xcw7y_{XHd>=2V8Oe zT1_AVea-5DaYEPu3$bs20PVMK%VM;$={2h@ANFg4y|>S0^?`0Zn@%$tJsrD!HWoXH zPd*k)$6~4`6v_nZuxEF=5R1iTabb40CS9N!x3rqM&mCrHwH z^y&R~cXbAjt=n)*U7hI;*A*XACyU3v9*I@o-gRqT@lIB$HnoP`@o==d_EKN0{k=7B zkGj7vbrv9l0Hh#;Aj@)AD@q}zcO|l5z~Mkw5Kk|#{d1|^v$MOG$lpWz`}5b$&SHk< zFjw=Kt18fF@biE@j1yT1QezyEjkjqwMstG^LJqTBIvtxuihy0Im`#gs$Lt`sF#K~Sz@NDwtx}L;f)u81IU#Leq{t*<&wu-&~whQcS4R^a*pW%<`O)T1|H$gn4&S$ zJTY~A&JzCa??!J~7d?GCp#6>I?EO>|Xr+u7y6yeyW9t7AOwy(=`pHTggvya_pbNX zwFH`mQ{Huvwm_)e@>Uzw7@uiyBwxlzO}KWsj=Ju4JoLL^<51yh+LUgiv-I!^Vsn#zrmtmg?%#_|(4L1h`F5udE-&Z3zpl^x_Fv z;Xz?^Rv)jLHV5N_iHRgqnqHn8+!Ls+H-lzlL+HTx1=l4f5=bT1*Pf~}jE&iKMtxP4 zGHPn;`&!3ps?T$qZH z-D<aMVB+fStvx-mOZ8-5 zdyT5~y}x(DFg-Pf5$IlD^M__zv~PT9+qR+VYEZA_a95!q3_eeUCkt2C_|cP!?Ha#(w`z9ey#j&4=-#gI0^5%vOm?7wsB^*_Vs(3BdSD!xu+ zfQi>n-T5 zgH1Eoy)h>OPA-onilzCFu`I2+*;w7k$gd7eU(`QBMtY?GqUqw(p%9MQZdpTE@?Yz< zxfAm1akNacqgdA#uxLf+NX_Gn?ZD=!FkAd@rbOU&Io^R)Vn>@K$E=f1jb(*8VEHi~ zlsE|V&k+pB8kLBL&Fj6gITIYu1T&jMi&T+9G@(QOyqIAYk?jF*BVXW_r<2L)L=ILI z3XU+lrNomN`^Xngo?NW0TI9X>BECNg4EP~nt9HbcAsQaaHLrGqA^3)oOjsM8uyjl7 zz|!kLJsN0KO||dDE<@0EDN|hlgQg$)t~97*3PD*PsS3Jpscqn8)$k8AfEJ9=_Hi&> zeVMksG__aEbO7EtkSBWe{&;8=3MDO7Od#_T%)Mdyu!Opjnq>q{!?29Ab3pv6so%Fg z**`tp8)#0nhT;>cu(G_+|4feNFjjN^R@t<*(2MXv#0>U>d23BHKi}M5r%Z2WGPUjk z`KMyu`&^=;h}WTBe)G;%d(3GPIIsgl=p(uF~!1*QRY3D z?u~FH`~cwz@x?^_Bmo#Yn`5@iiOu`uv^FZ7rg zKno&QG7}C*lGs?)(a)*S@C8=Rcm3Xib;0o7>wRZNFS=-S-_1AgyV2S?y!Qs{%g%!|({pVQo#Pz&%_TY<6B>Qvmu?sWcmQIGlUVNhe`Vd|^r4O3 z4c)%;k^|Gz1OJ-db9i2)aZfrB!9nw*=2UuM5v2%2X>_iBQOP=U`^_uiLYx7p4&Ru8Lsw&fC)+DV<+THD! zSjieQ=nq%NtD6FD(_2&PG2MZtsxDIkHSdw{Kd3nV66(NKP~Jw%?@swtb+z)Pf~lr( zOgW1PoN)|(k7$?qq6{dk{5bHI~UL`)}F>}VW;27LZ3@vd{gt1 zFn<{v;+*7^`0vq3L8w~}+7H^C?dVj6urk@#(f;*B{q zS>`UCk-uy{}BTO z2!d4tt3Wi*_%-bnK`$$Qs1x(>7z;%$rW38lj`eRs{2vgDZJ^?EP&g&)cugnSi9b28(#B4dtm*NnjH4Eo00 zd#t+F$);!{HooWx?g@6>7uzRJ6SEWP-LYIQ7kiHyR4svcV|(xot-(Db{<{0rocQk* ze?74)hK8}q3Xro390M2VGUCM@MlPE~@_G9V%L_r{4htwd8t5~%-0Jt4dkj=+WWCki zBRpc!5rs4qYQk)ki|X307PZIgq4ewVW)0&Aj+xp{9Wi}GY(8^Bsog9DY&mn~5$mV; zZATEV4sH6zO#~+_uufuSU4NM_S zx&O|C{ppPtXD27Kzkhsk3T-$#A<67Q&x-C)DMIm(e>SG$PM>ODe{mia6yhF zqn0N!*SPv{5QF^D@RI(E7TW znFs6xD8Yz2_*sPB4JIAe!=MwlamBcVV}W8QqI&`a%iR(P9vC8>$qXnqtFD~gx^=dz zE!GmAN~NYk=Le?Zx+LCQDp9v>JG`x{xjht4O{GH9O_}(r^Addig^Ynq0WK$y03Cjb zUjB?DP-p@ojK$GEF?#Rx@NFY^jf{9hvC)m2HmMy~?VEgW=i58gw$WI~JAzBM4Nu>T zOMi-MKJVmbJ0F0_pL~ecdr_~)Img&)TmZ1cF?lt>7_@sxb^~mLDYv<5&_L+BxlplHlk>bQS753YioCgFQBlb?D6#i?!pq z@%XhD*C{s=a>1Lzt?Djbd8+2zu}Jtew;m2h;%>um$0PoZi3`?WDW}D+NP?8hB}d8< zl4xBxHKc$e)zFl4u)Dd}8rrmJ$m(tO)%tLfXda#(ma{g=yn+-g`0wZ@7j1gk#|$YB zf8?w?$Q#7s3B+Xchn52%hDbb^1R?2Ghh^p2L8}PH>ugWC2i)tBO(Z!mv@58x3+G?6 zke4;5_cPcYiFc-Z+uC~5o&Dj%>GXNOx@JcOHX?^?XIuaZO7bIWs0e@`AN85&Ks4Gp z&>8LA^O-%-=!&y1v79AQT*DoeXIugF$e`wz8d31cS!&7v`6VH)B(B;vw6s==k9HTj z$L64_M;Ip|yd}o~#3jwqX|FS4FIaU$WiB!_=5KPitGUA96f|AAw00_0zq93wMsp(< zR7-6ynBq4IOw-3vNo6Tc8lIpMeK#vAwd!3u@yp8DN!+0`ptkjz~Eu=ulj|MyW&pgwDN(<=M)f^5L$S=d@#eRC&AQr}y6|YYPWdB9_gq&KXDELrmnsw5~;Y| zDMBLYI;9!zywCJ(563cr=KI~s=c}vp&DLAoUO|7-<->aGL8p|zE3Odk9od`mAYc=C z2{MPn%!$G{xoO5-EVySjxq+H6f2WEw>QLR0&6|(ZRa=}Z>l=`Xn3XmpT2uooavku` z2y-O&!g*07Fu*9SmO`h5oz7x~X~sIE6_~)lHBQ%a;F;tYuAurMHttNUkPu{BFHr?oU8t2EK4F24`&lu z&_AH8Bo+r)7(huRif1C~6{T7Xqroz&jQYrs-yJlJV0DW-ZOXsz({MhPz{(+VG~w6DSE0n?2?3p#kyrQFD7Uf}FsgMYZ$b=>uO*R8G_T-Uj-cb$OUa}0{vMG zQDHaZ-*v7Vq1o%l`30_`~NxJ4%n>`VJ{QA-}hx{3z}nMGeFFU60SJ)uitjf!?0$as=Pb zJIqMix1n{m8N)T!IE;0%y1sJ123GZqqb+~0+>3hG{!_2K0{B+A2t_C@?Km^=ToPq{ z<{#pi+FM@dry5jq+@)?ja^fb?QeJW4dAWMq4R;;2%bs9)>Cbttf9>aPyy3bdc+P3V zZMWxhscVA3Sd*?xec!KtB+}FNK=gRu&UIf%zi-er^o8uH4Ze-1r|;OAx}g5T`a{N* zcVGFFBd4x@^6GD*H*Vw4A@BG_Z_eF%>+uQW-P&9`U5~n+Q$Bcv-KjpReqe-+ZN{y} zY`V|b#T^`05et)6#y{>byR z=ewR?cpH%~V4L>}?+Nci-Vb^|@BOCthu+^ZZSA+NweGUsVLfSm+WMOHUF#=S z(O2(_`UZW|zKeWU_^$Vz@V&`*pYaaJ3XGUdG8y`Qom3rL8 z>s>gHyPAx5;+@X*Yzt}$qTY7=Yn72`k~$hu?l&GmTmRlC+fYL%>OkwpyI$qFPSo63 z@g9}W{VtyW_qNvr=^&04>y1ZW<*C)Jm7jVTR=#t!#k}KsZ0qqRgfEW9jNH$$>cL3) zWz;(4h$U?}YLq+pc1_09IBvwhcFY6!@~VSm&6#119NjuR!*kXhcRddc1bfqA-$9T0 zcC^9!IOFwrhS1rKn*Rztis4@vziqg$$*w<+mO63F8I-4t7r+&)btgxq@^0RDuGTAB zcKxx`&Dty86lZ+LIC?IyX?z9k^B-X_glioFyBtS8SC2l%jpuRw-{_g~5bpW6X6Sjl zCu@ycJKic_d=uloR!e$@o76p}>oL3oXNPmuAw7?~+KoJ}cjDi;Qv4;Zl;5eM-^Q0fTUO6& zJ8;%F>~cK{by5@BF#yO^Bkz`S#xV#iqi5}5#u0Q&%6hv zQ&RYx7;@e6CD$85sq!?PUEX6 zb7qwI0xJ`|JpDEF8?!%L9p7A0CJqHB|b)fOsDV%rW{fLo)Z(Z~Y(fw?|9lgfaaE|qZdq`LP zuGiqai~$nnJ8|BK+KBf7-Rg~EXW|ZH=$G*fq!_11{c_xZE3L*Q;An^`W3H#bSMeQh zl-~w$Qpa2;U4Q2Kp{iBG>QZ%wI;lRbPOD#lFPSiAj1$Hq#)rY1eBbzu88(N_UC6xm zCi5}#6W~yO2u7*ZJ?_59eZ9Nje$4%G_cQMAx_^dkky<_do@vis&sE@63Z92Nk9j`m z`WD`qunn#OZ z;*2tDehJTv#Q~j5{eG_cdoboN=yvw#EI$TNP)Ea6#(XiEE@mow$~i zz7bor7%$?@*z0CI$@gou=B|pIY4#p@L=KJ;(KW^Z_HH*yqY#5RwStkWUgWz$L0T;~IO$v2`#9VS?lMS14QAD`Ikab7VRo9zVOqYQ;V9D#wa* zBeC1cbJi8shL+R==cug;nab`Sa@u;_+**f3GubAt&@_s@g~yN?7VJzKzl@ zj11{;6R;nji@RPFjK31METBxN4%T~z95oqX;PNK?Yr}dZj5Qg5jgl2mukIBJprKXM zo!e2eV&$o~0Ao9E4*X?spK#q4xDDeaU}?%yEqJ$waoj0Shg=^P>`i{4**FdCt=r9` z{JX%^6KYo7uRg9`L}t1!V~26Qali4D@nz%trpt_)Q|2M_PV?R7$AP1N>~_0j?kV>{ z_pOj4pK>p{UvmFXPrWAr{5<2i$#b9QanGkc&v}06DSE@+e(x6VLGMl8w|L*@{iye8 z?`iKDZxPaD!kV;pSyxy$Sq1A+>w}OdpRrC`Kd^r0b3vkPNAmP>U(UD3chGm0??&Gp zzJl)o^*(6JiLXhgx#Gxokfv!Kn6f1KYK^fdNq!FZbEKI8fbtCanbmlc<-`TRMMe!~ zmh}>1wEV)>h_6@UrVrsxffHP#3`nf5x15$kqWryj#6ner-H&UvqlaBhNOYSDKQZvsdO(^otmm{1ba*_Y?0% z3e};u$ar$}cn2vWWmIBS^xF6?zB!7dyzD2R;iz!^C7?s%T(pQ*TQ6VnlEYTx7VIGrb`8MP*>*R{=C2*m7 z5@m!_%G?^lC`0PLHK`Ax)Vb>55!ONu?7g^l4mdZiz%{~jw>(X3UB<5;FFmIriR(kZ zTa$SWt~ujR?uZzXec_BeQhJV9gd?G4BtpX*|6of-Cg`H+rNw6MBR`TB^-? zXU<}W3!BQVsI8(0#^t!Oatv)6VSEoXf^SKlMMH#)ka?}p4h_9pN+5sKV)*5LJ;&@3 z-w7*8{MXmOB-4LqiP7j&+2ym?O?`fQeJSRhpsY1n)ZO3Q0R!&H+xiBi5B;eznb ze#X>hl$QI)RZbXteMP-`Y{+|T6{_k$gQkU)nOGNlPk83oeE?<7yAduxVb$+dlreXG zovYUPEPl%nDb&Ec6J-J|c+TPUSmwMXA(MFWBB9g7A>@|1-V0JvhT@odkCf;)CimW? z{s1LT&#KV}pL)Ea#D@|~y}zP_ewZHhL`4bVu+8;4lsG-&IQm`pfCC^-<7lA|>M{G= z#&PN$!V%bTW?Uv`T94Oao|H3cPRM)z3C=iX0=LF@hvc^WU{Nb3;Ou7j>O zxjyLnn(HUn0&5g9C|Acl(H9#NHmd0Ld z_XzW7aBkOXhdc#oT>^J#z2E9OxDGJ)21j768no88*=Rn;bv}jJQ~Pk8REbhCR}|aT ze3M{MwO6jkaIbLExYmOw`QD`TF@tn?t@g>iwi%j2oINKR+k6ktp53;skv2GrYt=0B ztZ^Jy&j}OiF7%T%lc%KYPP$CZ0p3nc3Qnb*M2bw_gj_+Bc`wR|*N7>|yRq+pbd&N* zxtzVCo}x)zjB?gp9vME-X#Bt~Z^V7zkWicOGwM!Y%W|LCHeu<_C=E+XdgKYE9Y#b- zSB;y=dmWCC@T$40m+ew=GL$z&0yJ&`He~ypS&juLoN*J%xN@j9vL!g<`+_ye&1r}N ztu%fFyrnU`jjLVX2c9bTJ?8oyoaxoZ|CvZlr$N6k? zeL^r-y>K!yNM*S_cRrN-XvEJBgTw~k`Z1aBTtUe2Q=$poO&0~-&D8q5&2p0~&M96lu zh-`^-%-;MS`dE2C*E;bwXEsqWvkNHc#W^`y;w08g>4LCC*z>4U|Hd6|<5rA6=Zchx zquwo}#h!@Vp+17&)oqZHJ1u6@!>h^( zF_7Mj+W`ILanri4gn4{LscpkFPOK=^)T9YMs8u#+#lFdV8Otc6-H-FZ6^YfL{urxb zC0ceRbvc7|!Fx0}(d4=plvTrhi+KZ%Bd8Iay76NiJH771u{}!aj{x<0G!M8w z?)tHcsf*Oz>M8Y2^=m-&9_V1-4_H0}pXdol_HQzuG@migz&bn#&Ff7i>#*C?1)2Vk z=MK-Ko{xII=J_F`I)ty!MRlU3F$*PZ5eZK0; zRnMtzj1*^zZ>#52+d$8zql5`(&RZ0&dQpNIk`{t6)5M7^Bq_#=ays1*8GYxcV)XQ*DFKc$8{Np-wHW0r#4M@ zwFR@XF6!SZ>#BT*k_@0i!k3hxu(Cz{ZY}T!B}|szlGuu8+F~jawu-z;Jsch221Q%V zxq3thfuyc_R^3Br7wrsM)N|#>J$k&Hm2=iT#!qkuDFRy~#^emI#HK&N_^rN!^qi6} zX4W`@>l$)N{W-3jby73I!N%=)nscN3rs0S4C^TMu9#<jnNr@-yEn&sN${DxgYzaaGOa*tBd04$FKWuIj#$Bjpim4&WQ>%=jN@i|tZRqp?Cs zyP(cPS>@c2zaf1A%}}4iwaT}t#koyM)eid_M|hPk%k@>1kt^amuDYh^(^A6UmmBu=@ zmw=+>xw3DBPmGE>ALSeaj(Mf-h+b2bV?#PY?DnUt%K27+2lMq(u6bg5xNxmtwp0w| zmF<$AgUYK5q`W*YTKZ{&ZyI$g8sBr=ZF$GM1?81+&e_21s4s!5;4xv0oSU}G{TWIt zdr!>N2`@u!v#`em_q$!D!P2u==aIAS^}0;e3(kZXqEgR&9m>iW)DKM2>ADJKeCu*c zKJ{gkm3yi+GbdI&OYg5X_%Bx0$1(3wp9QZ|`98JkGpkB!)TdXKR3rc7%BQN3bz)_S zPyOkt63h50N{FHSg4O5&@F%P8@v4unD)AWqjFJ^NPsP1Fpv*3w;?<%nu>Qcp=Fo)F^yhcc~e5mAcXO4}cEZ>C1W#Qm|f*i}`yt>;`a^ z)Pqt7sHyP_z>MZOh!uOJPtC4>lv3h9>ia1DHG$*(0cKg(U#i!55@qG*sYCOtzrdJr z-IHnxub}Adz|}>}q@n1C7)4!|oGbb+l<#OW{wK~!>$yJYeeh{H=Nc1vNnL_-jrT;J zG(I3aG2g4h__-X5KF_=h$DCtoE5_uQy0V!1s(lZj7ha;&M}Z49Pe5WMJ&(Xsbw7M# zAA!y68F=pgQq`+2HLkWna=ZpQs<%K(^&~tnKaZ>x!UUt)~3Ry4l&9;`%c?3q`o0Dq-hv%s_`qF zYc7~@o=}(C*X=gV_v2h^=QyYICgF^8br7Qj)w4L)ebEr|b*v@lyv>MX{)A3Jv-rPp z9LGPvlku;ZOL=GWW*kYW@oSl1&ij?{2WC#3e%BSyNIWHa$0p1x^^T8XKEI}Z0IO&- zG>=opPUBMJuz9;^0LbNN9#>20BJE?8wEnch>ZqQ_o#e|vTXCK9yoN`Y>O(ImCsHET z+yUR3P)Zs|{L$pPPwruvzNgHYYV8y}mCQHd9zqaDnEZpoYgA}nRBBaQ99?ovyx*~$ zDZB|w&(&6&>jRjfa!ZZ{jdhT&#MC-muY4m7`K+J)Zc|C=UHOe!TGDEp3h#Zc_TP$Y zl`WG4wcpry1rV-fn$-~AFIUR#m3#qJV$~JLlL$GHuqrCwfzS?XF`Upn_|+DH&&V;? zaxeB*)v`L~+9(3Xq$lbH;E))uvqwAN`+m~(1=q_6;Y+9;z#RqkKJ{UBnZQQ^V@ABA ztxfzTCZ$!D(7^Q;R|f$P^cy_aosQga;NQ5<=0DZtsBLw9HeV;ODl|tO0?e$wtFnK< zvg(R8?xEB{tgiJs&BoQ3{nhmdJOF0+t}W^?-fZ<9#G4w=x2ajwxcWNf8qw3LD=}89 zuaaV+_v$r*{Z@_~;k7}{0C%l;%KUxc8m>v@ysBy=m!!1MlRUY|GW9ry0?9`@eqy|2Pw;x|^k6}1N8e}9p67#jy>(7)fi*C_U@Zh$3%HnR6x8y9)OZKKT};iR>w%kd%Sz z3w}|?W*N~+o#ZMX1S3(pgX7O$YI{+Mzc!{;+)!|{i_;XQ)gYXApkrCy&ZHv%kW12j$=pcTz&^_ zZ?dV8Y2q5S@8myL!Jb(KY{ciz_UEMU-|E(6g&5tqQjhoG`s1o7$=Swu=^3`9c}%YU znA(6V94pO9aV2ROY68qT?eH0{7Gexazi$WKJG%#M#(AZ34TF?|LB|c!$?_PGC)2aD z0p*qB&(WYfu!M50iCM`L53i_)kVYP>#mKBE*VqDMV9*X%ZnxyQV!jpS`klD~s2dd8 zX}$&AtW(bQCH{=Y7)r~v5H@L@?psmHF$3LISEIBN+69u0+=_dNsh|@x)~_hlx|f78 z4c@uj8nJDYkz7$m>f32hN-y6>tkSCfM#|`|$=Q!nIx~IteHxC)Tehk1uDDNh9_p`9 zCfWuY0(j@!Q08!%v}{5$P~Q?-NG+K?Tc#T&d@_i&B7Cg+Yfwk+L&$!3&1yL(j-jR} zp}w=?dX;)<#ko&?d&RkBFw>ILkGQMb^nkP1R0$Z_=#n!V>eUfBvvIb15geD@6ZN-p zO#M%j$(`Tqm1kPQ?NbLp-$zo!nCr7R(l9z9SAjuIuaprkdR==U>z#Cc9=_8>(EMq2 z1>)--1)rwvgSGIJoP;j|?Sl^)PZ*yxo-tlDer)^_9tlnGN$4|2;WxR%ya?QYhIHaC zQdwelt^ux5tq~=b=~aJ+GR_lcyi9|L=k+Qe&SjJl=>lPfvq3Dd3abE%0k5KTCEnB4 zcnvrIh&xCPiOC!~rRSQySF~}E7Ohps|J&Jh05(DOioMM}Jw2zLMTEv&O><809eR$X~vRxbFA*RrFer zx1nv0Zm&j0LkZ~K)zSu6DQTnsMxO!wveFM2nGdr8BWksPzR)`awYB9(TrIsH+Zg4u zbk%K?ewk%7dbFHJ^zWr(WJ3#Cv-E3}Fw4r4#9(b$1pX2rDJdRgx)5UB{N#;CtHa#Jh~QHr{XI6IR5cAS}?Vi zvw+p{TvOT`GiBO}uHCp!PsJLq(%X~$o{)6~*0uU)(vn%9!e`<=>3cY5Q`f?gLynS_ zEiZMIGuprEoXmTeU2-my@@G70V);q`oo`GIfAcDHYxYWe!G?`B#?&2NVQ$KLoYg-m zTYF}aZ0R#0pRo7Ad!E;0zflVI?`WSf$kqDlHdtD6edb-;ty>IBZ)5~D(2I}KEyidI z-8WfNbbFu$(?8e1sk0odWzK|s5tie6#~5Qm{Hv@7x(Rg>e@&S;w@t=%?n5)iAE-NeZf>iJTKT_EiDACj z_Au(e_VDGWTDtal7#zK<)XLp)KrBQ7iecK38nzY`g^!>oPEo+hQ z`)mcaB-hGN%jjo~U1Y{+o-te5#8w;Mr-$ZT9^05&X!O3R3x=&T?)xHXRXy_ID>ij16sWVQ}KlR1`8+TOH(^gAw zVSih*O<7awYJk&vkMBDi{WIoRjZ&47v*nE5VxqkKah^4z3>M=%lqc`u-$UZ}kpA4^ zw1kK4V$3Nr%cy~xQ3s6dtV|hDZeI&RgN@N0Qw@d|mVQI3g_hHLsl^)kOQM&<#?h5h zO%C+kQ4Wr#SHoBvpXx@Lu_Y)oW~lsy9x<%b%6uL)M~rV(*Pbc!dFk(sw&8rx6W}46 z(Jqv5883`EHSYWfzPr(HKi8UwN4i}4Vy5my)Mp& z@&B&W-hF*%%lIx$_s(+O_lY47+OBU@3giA{Z-kea&~(@0pDJr%%vTJwO<1YV^k6z9?uphrfO8W9^5(DSP-vTO<5!c#9Zq zk?%Y3WY(AQw=oYGZGBVkFTuWSPy2dK^=xzXo>L6G5_jeIKt}l>c0%mH9@8bb5BGH% zqlKc^W!%!+RIh6j?6Kk;vH5rX;|}?d6|)(F`J`WS=yQ=L+qf%$pE2SZIkaK@(MJ5V zHO8;_xiJ&K@3P;{tfvW1C1MZT&m9;yz$sSTpK4sc74zw{F`IrEr*h$>F=VF;FuwAc z<+QZ|Mpt@ShvOWh`IuSRigni~FtQS5i$<;*XG_JIMjqR2%&|O$S(eS1XE|s)W;j==N z*oym_)!XQw_J=f#mZa{|HVr>-*iKWF*%&d9Ne=R}G21TP^Gt1_Z!t2F`j+4HPfP1T ziLhT|#QI0@DWz%jdU)Na4fU*v_OAZD(%+VC1+IEyZ`2=^j9izJh_?IzuSw77ZxPy? zF~<9h{s|+Wk&OlBvasIY7!~Gvb;^-`2@?x*1oo8cWj0!P|74#{Wu7_08+IrVr7tM*?r@-VE(!Z~c>HLU2uX=$93EVau@ zwr21PMk`VVHEenMdqXoIOB?-$Auq7MQGiH6NpG0p2l+Fn-j+*|qe4 z{yJ^b-}zhRecxxiQ;aP}e@8oq^;jn0onb3%&F!#ne|?j5Z>QUVt+~&~)z{w9eH^pd zJndVI{AA&TkX@KbZDk#a(Vk7#6Bs}3ZOg-%ARpN-mTOq9KYF82;UtiYI0YoG{CKQJ z-(3ECtVNH-T&b(VqZKw)I9%cHiVZ9Fz<%->6`#Va=(iOwqyO2tQfehvrTLZCR{EgQ z_m%#RsDoAKgCfRb#rbm)+wc^=i3^-0v;sBfcAM4i+A#Cb8)MtwId+MOEA5etsGGL9M+Af7#9jM0@H-=Td_yD9?4 zjKFwZtE$4bO7}FeO$^OXpiY7 zGpvha-IR>qhp+|ciHz)<`hFGPF56nA{i=ZEaR-0?_gB!jL)(^l3_TAvuxCr$MJ1?8@8u0zsp!{v~Os+{{xHme>=FA{`Eh;EKK_Y-z{6m&{CJy^@%dP z!KDb|wROaIRrQP3vo-pPhPGQJ-{q(w{SmVj`cfm$h}JIPyJgpy`=xL648-=k3`A^`hxFgJsnh-{g2H^)6yzNeOu(SvG*yN2F3Xw1vj2j9`> z*ia(o;_N}tr_ml6*%|3$w7+%hF7<&jt17{FC~-8(B+^ruj#RF=vMFaAv5~e~RDX z+$G0Yg4;Q`eQAH9Kcg??SfZYV+ir(<4E_eCVMw5c_8UGgtDiwyY3Yd1*$0#CBBHEq zci?m8DSULg+KS%4vUQez>g#9PxSAyRx1||z3QEBhBGe~(E+doUeWR^&aLuIMY`5XF zU{=3}bm23`Dnmc@yb5<<#usgUQ0L^Fi{V4ctUl6~;hK?6QKGbuz$k&ON62T48Pu|9 z%cPLcj5Sx(v$6P$w#KZWsvadMbMoF~dluKI9ljMZct@RJ794H4f_H2|V>O%6X3YE% z9c*{vvtUgy+BC-UH!|t6zoWJ5zTC?5q+%fh)?DZdSl`1Z^pC7DB_CK}tgXQ(Wpy@S z60TBX{TYMNCtqHMff8VBh_>~_RkkDF1$uAR`*D>snk*G9fp@5G>4B@pz1c!+ zPxPZLf8nZsJjC$djQ45C_^DUM2o--HZR4pI{yO*~gym0MV|=7UC^6WH^<7-^%Zq-p z9!fD7*ZjKAJd1bkfNRD~kTH7!nOT!?&G2Zfk)FX>Ch9#6BZuIXSX*~o;k{@{#wwE* z`gh9sEZZ%(Vn~FiFQEn&o}esv1xr4%*D_XM>y7uUwSNyQ&$2Ljgly01+BLj4Vz4nE z%^nWh!guZ$P8H`9xtgNBoU^E5i`Dxg{4Gmz58ly|8gg%rbtB&KD&N<$^+IpNkXf|l zvi`TR_Gc6R_Qe_-&$;mB2i6DBPcbz7W4-Ufo=-RYWk}^Cy%)nggnP`581@1F()Sfu zx9Qg??PB!fpeMHH@Go1UC4A##S7v~?~%qc%|YC?V!<>|;Q)QD!4&FI#3~7AnRz1fMZ_P>ZP>tdr3@im}}z z`JJyGR-TJzWLHKF=$VXYng;(8EFsF^6I?fDwEc4k%(r7KJ%#Jc;5n`pZA;Sa+mK_a z{J0~$to+DP&BoJe=>MpJlqn*u6;F5fNyPAu&|=HAz%`bYE2V2#uIe_*Q3`q&Mxtn2 z3a(MoT)V_?!n;^)Wv=<=7H#Rc79>5}0NtAX*zQ6t*V?=|IA=+}? zXU#_R!ia=zVc-gXh4!)h1A8L%n|f9p8H(DnB!&7lM0ndk*cw(& z*!tmLa9Ji}hetD=Hx?@pQn7z-yfp_cY|O{9WsS&*@>_Y*$}BZU!{j5ucGXN=}X-xlAo zbPDrbMpyc9GbIzo({v$^qd5L z@oMS((}*&^Gcp=I69hv&+faPQx*Kau3_oMcl{c~SgirtdjQSWcG)5bye`4H?jLd(H zGLD1Z_Mpi{`S{f#QF%XG=e1tMr^EA_3yAJYUKDeY@_rm2D|QEv?t+*j9)QZk41jc9+BFs zN9r%MGnk>M0}JkDNws8S9Vkwt#7Qw*F<0@G)94VgBVSWIOU5hxL*OJ%~^W>(r2ew_r=_iwWLKbuWMqt9oMKaMy6=Q zf`9dvGD_+jxv_GUGTFHPfOd$Uww1eob-ltJm{-N%$={XqZ}AKq=6tbO<;93my1J_( z-W#Q&rZ>c%97Z7M2SACo!h6cgx02m51#!byKUBU(j$Y)z#nC?jSlklW>Og;7VbEcZxgTwZ%-7!o|9 zx=e-Ugpg!qD61ltVPnY8v+bFV47YoNl0?)Kq|`z32#^#yl{|PzU75Nxg~Ju)>YSLb zRy0u;d$qZUIyNtqz@2HQGg4MYEX8{vBopoVYJrLkb3sm! zXD0D{$vASo z6VPdy1Wi`_!5hf zBBjZ*XDe-36!3#Gj)Hur%N3?5Vg!3fM&q?-c?i5ZS4x2`Y=?MhS)gmg_S zDQ<;ln8pw4km@LK7kV-sZ9R^H;7<`H^xPze903AxRX(FLgd@D&Wul0 z^{V}wUwmb>rV+OWN=KC(_HqcHG1d~#f8za}U1=#he$)N6?-8X5m`31LQarYjB`7ZV zMsRf2A#fd1!Y|Ux=MTP3(})%UIu>&&#%sku<0HgHj_1VNUFh#fNsB)$PTPX?jOZYc zcJHYsP4w8aoX9u&dhAme0i^Vs-#+>EB?M_AR-hk}pr%h@oRo4t_;hNk9mv#))&l41 z%y69E++>Hn00VAP=0)DFZ$sHNLR5tJ#;ciC>hT51W({}$lGsIxA%Lu!DuVdRUqG5q$W=;%=0?)^BgyDlRe8?ba@&5a6)Xwl)37g zq`1vm@%>)kJTV&ahUhF5JZ+(xGu7_Oxsg(zow2Cn-zYKBUbsW;mFhbf@=kN)IS?q^ zE~&0u{^*w@zk!*6K?YtW#gm>JIutGH-fumA9w`#hEkH{%-%+9_9zMd~rUrdq zyVqXekQ>nxC;LBl2@#TLDcq&*YvJyqDExqROU_P*o)b(F{I8PY>{H=rhuZTBRf3t5 zxqi#DAS6WV?DL13TVSn%Co=Aoov?{JSN8;V4ZbI{8J5e@lu#t`nBLuOr(IlTY;xr%RQ(U5^Vj9z^QTNU;$ z!6u}<)9>5zYQ;j!3DJd}jK(e-abVoY8$5x@jNu~;Gg97R>Et0@=AsUS=wv*D!`?xq zrXS8~cC#Jhf&@H3;DwYY#e}%*)QM5_^uT0_RGDI3=l8yXY?A01xC6B{dcqCd!`Boy zbgR|}e_!`4My&`@vwF<9p=ltF*nD@OOl$ zrHO}Cw1e~>Vn4SB!(US3wpTmsS_I7@#Jr>8Pby-S=0ElJf7Tx#q-jJOK`VbX<1}XH z`eYQq1TwvPk}fUo=GQJvT?R)$h>g~^Q#rXmFsS3~9&^^&#jj-l1idCi={Cq!vleC` zEjK5w8K1Ypf$W74B{6EIk~lukiB2!L`*<97sU)7i{oTwVh^B-X1)E@QN$MF5NyNJ+ zW;k7rtl=Zf%bhd$+wL7ncZ%kV7Xd@3P%f7%^Eae?OZr41fKL!*D zQ7AiStM9-iIOdjDfBUn4RD%m5#KD3Ik12W6FzJVJdUNJ`9=LE@!{(Ysh`RjEhe~Gl z|IBIg7r&Ho@AH~Qh@(6yrd%I3GxZiGl$X;B50HLD`&_~czLpTigo0e2aA zl@!-q973uuPleZm*XvxI*0gz4(?vPG>s5TTjg~H@j%QWC3A6f@g}*weVsO*zt)vSz1w;34mpr;J z(bg<+qKybKEpy>gP;@V)#Iyp|1{KJ=wj0JSZr8HqYj+rlcf917Uzb%6WX>fSWKZrxBv9Z|ZHz zsj9iRqvLcs8k!JmzC13JFtDhsPiCgulVvt0x9z>}r#0^b%K>79#!1Lkk!HyQ^__Lj zHd%mRN{ET(wigw2{hWD@1Q*xDW$9i-D$uEyesVsHY>*I#a@M`~KXCUcC~{>=Z_wtR zA+xT)KnYO`9{W1X4bm|eE9LzDaIIm>5TFUsm;U_24RD&fz2dy*|NR+ZpXeww+@VV< z;ygE|YF#;;&vU!t3cX&F!P+@XX3sx~0X{;^E*dw92zCYjS)GD*{e1lW%?7cre%1Qh zK`zWb0%8s@u8V?KSBs%o^J!wikFOg1%Nk@Wgs6BCB`R81w$tVGGHm5w>Q=7Q{l+hd zN`na#qT)sEy8-UBOpiM+uTK`H=S&Je?QHLx3lcSr5c_@~{jR(L2+_SpL$WXB&XHlaNxiH(sV5F+j8*A%paU4yf;)22Ah=4t;}a-{2I zbgBu_W%L^zX)au)x?QYwM>$741{r`Bf@Rk#P;jQErKLLTSVkxnYvuD(Kl&w7(+JT% z_HR;=I`Z?dsFx!b=8pN%7xr{-hE6XbayP&#jiBVF)KwsU`dAh1R{Zev)#tG!oDh3x zPanG>?t%6Ulf-d(?$?vAqsWA)5@-KWQFA4qqQpP z__bp<$ZMWk6!iXM_vh0!jSwBh=1U6lbT`~EMggR{5V_)DM^{fxBg8iQ&RxY^(}p=R z;ymst1ty-N<`1U}vyrnBVz=V?R}`$O%r*P2AGf!q;{gyu1Fw?ej8{V`eft>tWM!E~ zrTsWV;I;Dw8&9`|{wC zSZGCvPNrh{n?l;iS9M=W3(T{>=@a^2UR++&2vGpr8k^FpnrL%^b!$EppTGo4;8jw* zx_K}mc8SCnqOU8j@qK$*%%9vC{tv)^ffp9>bd@l1#ytab?$TyCb>F+Y|EZ#B1Oym( zVL8}P30JCnij-!{htob=3QOT+2iKDI;Fgr(x{iP&NFjZhDOP{=q z!imz7&G}*3stuJjjSvSf;vX=j>lddOyeRxDtJ9IMHH{FxW8xxnM#T6yY}`R#(JTqR ztNQPgmcfS;qIaB?T{TFN0~PP*+YpqRkd}`5LT+S{is75}Bj?^%Rnv&*K=aW2Jc~@p zQ_My&hSgkgWj8vYgxE&$Pn)yly1i~`;qH3&vGp&b7et7Kv%hIh=Pr;B3p8|g`lm6N z2$5~1N}%$#-3`>(%<6;T=?`hhRLH)T`l_XA%yy!;AGjS&6SqGP6nSOGuKIYE^a zou2u~(W)pTA%?%l|5nkein``_y$V17Y14=fg3?^O8qBG02ID9Y_tFk_A(_R>2u@z1X>p7+ejk0X#}5uzj#F4YWD_+a|}r~5HsY%PC1*?<1Mu3-R&sKaN9juN!$%UA0uV|Zh5C=t8JP_lP?lst+YedX2E2ay31t%OpJKdGP{TTVaGHZ;ZVF>_Vt`nX?sy9*{%05LCkw55#9o|)^w1g5l&i$4Fe%2V(ogqWkQxL3x7 zE?Xau$6lo9AP@4^U0$=MMI*$n%7QsEN;d|R^`Vzk$D~4RijtP|)j?1E@(`jBA!b#V zSJaUR5Fywp*Xrh{?^`q!BRGVZDD2)KVM>?^6Tzx@=QPuG#!XsQYq$!nN?@WR@G2>u zvO~hiAzEo2?W0FF9s|WAM8Syv?vtjw3b1YRY@_FWPh zV-YOY=c|;te#6~)4bkT=LQ73+q!$smV!irX_Gfg9|kf_pG?S_$J|d!aYCqqJ(%ulb~rtbf7V)Bc1Tbkq~wEO{bYHV2?c5|J8lScnGnYPxhCvrMa<`K;8sH2OVGA zJObheL^atu&6EkfQ=jXT)^*c8J31A>DHCF6>-Gm_oQmnlHD6XtyA3rYL}R%8qJ(Nl z>Og6UMlEvJIJX0{?ttj&T%X8j%yyIP$^N5C^K3{95Tp0nhwF#7BF0&K`5M}DY7w1? zw0JY_8Iax^9Unrpt6R=XX!Sz{`efxfJe}madrMBYs?#yuM2O0^<(e5^d}_Q2TU)Jq zw}gtCMl=&tcTV*Np_SH47oY3MoKRrWp{sm3al@NYnns9Si_Trls1rw)`UzE3 zNmz7X!$9a3Ax8SdICJi#6!j984Ihpi7>kY@0Y4OYl@$M)q+;!FK7(>TIWng!vM(Yi z$+oK~!?jzbajPqS0KpPshwz$5#T&NO-k!6!QRh3b`V0``Ys1-Q#7VB~xIDxQc^IoQ zynT}+h^>TZYHPPD7}@WZ6aKb*&NoK}fDjOU!B9YKTK$6^$gN9LgXu-(8$De zQDsx#vZKR}V=drD39-VvmxbYz`B08Y) zOfsJTz>Isq$UJ9;G%Cd(>G9i8WO{^XK}+_Tv0>FB4hb`D9qWRR(jS5{66kaUUM0mn z&zMn~lI2@o=-m!cm=K$~<}Hm)ntG(74_#C^rb;6VQWikudwh@?pK9cw?yVP9F({s0=qwJfOIx_wJ=VF`k#i8@ zFwEXFH%9AAZ=~$^4XWI${L`4C0XhYWOl@p`RmHB)&-HarabY2ea=c61)%}e%NLmR| zDl1ns2~~iAR4`AjD);OI54D{GohOiA2VNz`%Xg?~)3HbZQ99g6cX9ursmDM{px}X5 zNpbNvDteWE)PA%_i$;h_glJb=zLjwDB&fleUb{RS{Um*Q?=3d$ZU)2xwm4@(hV`k4 z^#xu#&M=eeLW`UG*Zu%TMToZ5?V>qng3IfXuOoe6)@bKithgXVw>+q3bZFDF!YHF6 zw*Po@tHvLr!3i-5Nor+I7|tOdxViJj^)N0%)X>~`bJnnNy%qow4Sb$jT`|k~=D|4vWfHZYRxAf*8 zK52^iJ3?%tQ4S?-ze1P!mgMBYk9HWaT+;|q+rRcGSrs#I-CoYRT6Z;$g#g+K@+^vs z3DVB80tg(i#_3tgj}))MI0zy7yux`> zu7Mre4^j=59qiWg>^c;T5LG{Ct&~t73RN5F*1U+F1Z7UeLl-g0m2 z>ElsKLX2-62Q-sukxC_3wWz)S>B`to1&F<(U+)Pa^Pe@C=x}FqbWa-H;#QtI{(c2b zBU%fs{Nw1bjLPxqEuFD?7(G}*EUT7f$~@3lXlYqf-Z)*&1u+t0SznnRmQh*O&%R5( zdlV8TLhQyCJrI^zrKe2}51D)_3Twy!k+{Rgu*9m7hw=qWZvC{JrV&9F^?@m|O0_D~ ztX%&fG6+H>T(&cqP(S!FjvKMC7(32ARoYs!-@SM!3)Ln>cem}Blu*z3G1{mfC#jD* zN_kt2J~HV!bZH5(Z!+UoIj^LX_e!3(Odmnz{7bRY?~hK_XhP&-a(f2^}8nWHVXbH2AM~cD#eshKLo|tj|i> zQryPr$&RdavnjOAZK5{KM(GGKOxAuu&gpS;_mbJBj?ar%ynH9P2r-iX@}?Qz)S~`g zZ@y^}JJ{ZTqc@x{fd~|Ml@w3kA*D2Ba$PUKa1yc?qIH0W>1M<+DUs2dG7PkJb#=J^M!+brJO1If-(zz-hjT zZg)-|*Dw_LU9wbdPrP>P+=v<&xCg|P{+Tgh?f`Bjb%XS`YkmnoN^}(pUok%n_27Jm zi^F9OZ@8O0F|Ng-B9xsF`#X0{33C%Vi7aIemU`B$y$`xUi0WK#ei(99t8T1ZyHOpu z2?GBGUM0ns9tok<4^~d*|4Z9%$pG&gh0rrX^tK~jQgEqqp24>)`1EbG84(>Q9DU?1 zpUEjzm3^dP-)H}b!I}a<^j&TDg|hk2fKJ9rP_q@5uBC7MxX^~Zjey8lbjh4iRYqI< zg(|(!5=2L##-slVW)x4DX1<#@sLY|$(ncEHDCg^ONcjm2KL=hV#n)@c2KnzW{L0lJ zQ%d5;pNN202gFeRS#**^+8! z{Mb3oB0&b+7NDbQtsE4NP+9ZX_J^n5LFodm1mgN5&4{sm7I_vaG|djrZ+x-)N({pi;+XpO zH&x_bug95D=yj;s|8#Z9{u6PX5R3lK#|n0iC*f$w0yTN6=i-LFNEnG0Li^P?s32F9 z7J0j@_d?SMF(te6#~UHV0&*ybd=&V-<7rzfK!pjByXvnB?*8_IT>boIeVEN;ZIa{U z*}>hg!d=FNsY2mTj(@3K@PKJoE-`!yu%ggCgB z(L_aFn4x0L?wWMuG?HpUY`87$6|CtPAXY2d?v##wc3=q$Ar|*~Uj^~-LhMS6-Y;cTRkZ%njt@;k4GA%pzj`2;%y?cz!bI%8PUD7CX?^QH z72T#X25^YjfXOqK&$=il^l!*9=iKc%`N-QCZzN&_&SOy0Qds0lH&ENRAfr~+dg)6{&%1vL~X3{ya}nQ zamIhVr^?ePA0cW_&$S_R#=}zLJ;)bQ9rYAL~Eg> zuS_)~9WVsPm>_l=nu<9EsTVo4B!AB#v^pW?1REYQV`kmetW8?aKYsEGj*0=qu>0MA zRIKJp68_VE+uVy#dP0np^_JXbB325(w4F}eZn@OZg8Tvy!_e3jW`rtb+J1fVjAh7Q z3DJbUSQ*TR-I0C#&nr?5`kcJ;)#48KVAT;2lnK5r<1F;LIg^s-@H&_c_H#P&@$iS`Todgsxo))H z`e$^#i&l*gQ-FQ1$f*>Ell=7eu|}^zbqUcC-1&5SiM;$LotU?#W80ba^@ zpGg_@kq(n^diS`f&ue0Ek%$fmjiGwoq>hr}=||i3!{CY3mrn1ovqn@Ki$;hRP^Cn| zrZ}OgN=wi3o_AR_LTt{QeVszf)z?{oLwV$5BJ+3Tp0kg^A?1MR=Pp&dJ(Mc!nQMPc zU0CwKNKD28NN@r#h|DG7GZj|BhZP!E(QJ5Dvn{9{r+jL{V}4M}ed#YRd}FgkBg8@- z`m}p!B~AMh@86bR(tI;i6%bAG!2NfI^5E$$`MG!ovQ!(^zTWSt9@kr8pkNp))8f&1QCzZ$h8#0=$NY)?tSd zCYH1!d1n0JJUmwi5NrE+f`rukET2cO54pa0phY9ZrgXj`Bf{=ZsrdURpEy%o!J-kO z3HANAS7@d<(oQA?8L+8q260IFZ-yXr;0n{h{UgN8rH-(F|6^NeELD zr2aYIgAT zs%>8t#Z*V>05PIedR{`A=CETj#Y|VChU|K-OLL1xh}E68Nk)c4xKyh5Y0l|Y`$l79 zCxFHXyh@6#NBV@SUYdTWm$Xe!wI8_h6tsg7nPR%dNtnzZpmOBI?pu3z$HEUl>@o}; zEn}ME%-4^LQ#+6^8vM0z%>i_A0MYI*{zt-^ZqJar-B-PT>|Xc{CL#e*cYkokht`vM zvgrx@|JwKbZT$;leSoML+v5Amxy*C!Lml?N>_O!S(cr7znIIu^yRpMuzO1Ef`Lmxi zo`w1WV!8I-)K5aiM~q~fjh{8zwEax$e&|;MqQLH2C?P{1-Q3u(_V~HNl!uYh0-|-k zb3np1R6NB)s<&U%{_B~J@R5W#i8yamVrX5Q~O=?|O;^JJ5@b6=a%^$V=v0Fb%{UO3_Upqic` z$?YnommAUh7e1&Ii7-xd3b0c+cdhBK6nY@AsHH!@?nePj-9qbHlLD>ee-5RR)$*0b(|=p>dK@Hpy6$U~;zZ zcW*WQy$EF`S_<+gDOQv6ApAU}Wl~A(teX7#m({S^2M`AkroIt|R{dC_VQWTz`+ya_ z06>fZB_FDZRbwbsBUi22hp0k`ti_*5Sba}wHV!T}-^Fk}G12i_1?10wD1`OefY1gL zSe462haUQ&`!r12642wotE6~KMRQ``U`m-RQMJ}#x9hJz{3lRDHv+Gc;wNjE--A2+ z@N@(`;x9{CgT~JfIaRYF`oDnaT>q?Z&fd?RSy-Ut?e|*wBc~v4LKL~9sX4E4EV7dL z$x1Ol`j-MDp$xoAieGH0Aof3mP|1Dw6aRhhF%*~(g|VQ$f}4*LQS$C_6trpsJ0Zj| zkQrUgc~y3jI_!hfyP`CW5E=jNE@9N4Mcx;F!o_C_OC3e6f!=bSNF*mfY(T1X_>B_7 zGIs1M<&4OV`16Tn7L5=&Po53me0BQ<>{=k(6^E*=RcqN%|4ZG@7|M2wZ%js5(q z-kL^;jXk%98DA)jv(Sta zbHw@bxHT>Q{YCXH=m-F!48M5Vj7?=QwV#=A+eRdigy^Yztd{WcIn?d+lY9HZ)$ve3 z->#AV7&OH(D^hijefie7uIQB#cL)*~@zVd}9z26jdY_XwPkWB%Y7?Rf{IlKcKJjU3 zaXG3X1iS0k$XUm+MH3Jc_o?40NE3`B6Q$*RFQ;v}?s!HlA?j`Nj^t3Q(q)cvCb%%2 zEZ2%Yvz8{dnFB`(h>S-^4mM|0oItnCo!I&-I8mat&}R4k7?x2vRXKCqqft{ar$&eg z-Lmth%#OS~bdn3a9@ED*7cXty`l&iN<__p46gd038Le+}`F~L59#3-9r zJHJ1m_vRb>zMOTTxtk^ONiaAH&Vip z-hgSpGB)9#@6n2cSmq8R%;>`kqF2{?%MO2L)reb#rp$dnNva&WJ2&9-hgY3M?*xby zSXT~8Gif>&Rb|PS+pf!43^z=O%kvg@Nmp_5pf`1*Sf^mX@|&Q@ggA6LbGVAybXuXx z;clyDBxo8T5*}NkCNx=I^vj^z9=WeFwi^Iq+rR#miclXU!A1$GZ`@~3-8LZ!hx7ul zgTSk#c;1gnQXc!M*b;nl#k!{DkQxzU?Ne?WqG%~>b&?-txM|?gYu74Zg(D!={>20} zVSyJpmwd(6m&vpKTRs{GfdFE#`FEg-RN=_4TpOL9gTPCOp<&cS6(xodO_HQ$?H;p! zfC3UQ`@jniW_utkqxmuISD&c+)4j;M2(h4DN>sGwDex+b4qhL`6%oB z_Pbw8-J)rPI7;%LC&RNViv3WdS3kFO#&Oz!D2%>ChMNnT#a6JMzUpe)yrNYjM34B) zJS8g@<|t@??)mU-TO*Kc0-{H3ymX{_VUzF>M3cjXu5_7qu`Wig2~n+)E46x z__8-T+l0vfdhFP+{KondRr!1Y@DQx11F{yvGC^PJy&|dxjz89Zh;pTQ`{}#Q&F{lsQ;-E@Lq(dRC!NJ zsq~H0?c(rokQ{7DaAm2cU1rXVu5%qj`GnYgk9}D|?xVyEzsb(K83T7t+HTb}LUdrW zKTz zJv-oJ_*gnuRzHWyQ(V_gdoVryOFR`F5Yx2fm2ym|xsOf7>3BDF$CPAbQGm$V_pljf zDqG(eX_1Ox#*4En9*D7MM07x&Oebr`=9-k#yvui?#ma)KRV*4I8fCZsP7}5vNvhpP zyWX05{kRQA35Z5HZ|HavMwJHDxtLltrK+Y8VqbUrNC{s-zLWdmU`YjzG~;in82@b_ z`CBK1R6?X3KVCu06DC!(ML*6Mat-StiMB%PTwWT6mP@jfar^g6;~pH0MYx2h{6k*9 z0d7^Xm%o1V&1YL{8iD@;uaaWh7Yb@$q*5_gp8Ms#?igMtMCO5470iP$f9`Q+s+bce z{apRMB*bk%RNbGdO$b%A0-s`}IPnx4d1Ca!>g03P#~_#jqW}AAq=HdZ$i3gZ`h*vn zONjb#@8c_$O1CBmPWG>&8UmP8~YX(+h0b*o)`gT)l^NFWg8!oKw{4|c11H_)fmN(UO zihkskiTme&5ruI^K#X7gQYVH=)Tn-#dOOZMyI~$$h-emQdd9E3drdi2ZM1FhwjKSE zu@U03_5pSoA&#PJXZkdVvF`Qc-8z zSo>G3Rv<*ad)}Au6=GbYT>>8em}xTXeeQ?D`+0;WAv)+sFPZYeb!253r`(ut?t1w3 zx^L}8Cz}w{RQo@s%$)q^#zeap&zz9E=`~xs_kRi~Werui$>m+{m|}kc24L2eQpr_1XHQ!O{ey-Kv@?kN>7=gs4f6%s1on&j-p!UG|OH z`Nb+w5n^9&%1pOOz0#I_Wtx;vq?Kh0Z(-GDs^w zW9;GEtJKgmLKNn9*Cdmo4oRYem-F2>|FLTiRlyTq0MQXe7n|`7bJ#KZR*-A9nj&%M z*GD(PC<(EQ*A|&^stog|XSXCbsR$ngh|N=Bse}*5zd5t?{eJDjjD|gR^2c3PSSKOI z`TLiviS_-^Vc1V@sq)I>5ztcrE+z0PDL%Pc%|6iK%JJrgq5r4fM@4DXG>zyOAg8`BNP^j;UeT9p#s`Q zDG{}MLGK9Bh4pXY3AK+hx}ws+Pi;T!Uz3F$EP$A;9J@7ym2ts;ED6pn_=M82~hoAL2rn;a8o(|Xt4-d__DVFA(E6#gRRiw`fqkMf^Q-Hl-?B03;F zn!(l%1;Gu@rcuszEOh*Ny=?{bD1a6M+t*!{Y<;rq`DWwd>rXvfzAd{cfT-(Zdnrl7 zgzGC^hI~E;K9LX;jMK>`yahOTsDS$pcm~m6E;^AaQpZ_;PrD6Hkr2hOXNZ)!A5KBT z>3mArMtxP>c_8FU#0auY87n0nXrESOJ}EF@_RYPX{0t8u2E>NHkR_!{#=Zm7$*4R3 z>F~xU7@8zRRX^I!D^nvwGfnxfCZ-+z0u?1h3I3TZ=PS&_vuO*I68!4ZU8^U2Z_x;t zWZ;EeAw#63>2YcUzscJ?sm^{JvJ8lX-*uWSt2GH#7Je$L%B(h6y64bO<|`p)%c9Q)zww+?yZ7d_5qRZ}TiUVPEHDrzu_b z(i$soy#tX35X;xpHdR_(-@0DA$%&~?&Z$_^W-{alh)VrTPdOovd&@NO-`1MbkIz9A zB$@}bg}$-zTXHtq2t;W5aHC_EzCT*f7=)6IU`a(G1lMf>4v330f>IZ)204-F$wv$H96i1#eb?afDf_eO3Nk7UCv&3|$C^!>3=d_qhR>+HWFZuT5O-a#tySwAg1Y8ebo14QGWvgE?<8f z8HHF}s-W(jzOLDK^)Y}7h;DP-*Gg(kgy(qd@@4xSB5qBb105hlJ$U>#C23j_R<=!5 zKPT+|P2MB-qT@=4p=0J1CAn!vbmY>b^IoZjqsM?QLZfxG%~Xh2f8KLIAC$`bShY$o zB!iw1Z_%%o;uc8d9QKJfc8gwVH`jZ+A`agL#9RE`Tzw0Kmm9mq>}6+G*QlgvL@Pm1 zb=!o!MXLGZu~#M?cqAY3ix9)&oGuDpRV3?jt@9fP(1Rz$&TDelV9Kf3!>QWU)Z*vc zuYFJz8$1B9c=?aXxQtbe%6$2s*JJN%w-VL?L<^FfS0bat>70tSk}=U;4z+~=6CzvX zyJiI`Fe?kTVIHShr*Q1$2~SKzOAw;y=8urEshS~b-l0X+ez0gnU7?=oqh@InG1tYx n**18_w=>7pCY$HwdA->wcbA9fz)5sgyS33yP1|tCY`ptFo|ajN diff --git a/manifest.mf b/manifest.mf deleted file mode 100644 index 1574df4..0000000 --- a/manifest.mf +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -X-COMMENT: Main-Class will be added automatically by build - diff --git a/manifest.properties b/manifest.properties deleted file mode 100644 index 4da354b..0000000 --- a/manifest.properties +++ /dev/null @@ -1,2 +0,0 @@ -# Codename One libray manifest - diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml deleted file mode 100644 index a9534f2..0000000 --- a/nbproject/build-impl.xml +++ /dev/null @@ -1,1400 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set src.dir - Must set test.src.dir - Must set build.dir - Must set dist.dir - Must set build.classes.dir - Must set dist.javadoc.dir - Must set build.test.classes.dir - Must set build.test.results.dir - Must set build.classes.excludes - Must set dist.jar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No tests executed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set JVM to use for profiling in profiler.info.jvm - Must set profiler agent JVM arguments in profiler.info.jvmargs.agent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - - - - - - java -cp "${run.classpath.with.dist.jar}" ${main.class} - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - java -jar "${dist.jar.resolved}" - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - Must select one file in the IDE or set run.class - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set debug.class - - - - - Must select one file in the IDE or set debug.class - - - - - Must set fix.includes - - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - Must select one file in the IDE or set profile.class - This target only works when run from inside the NetBeans IDE. - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - - - - - This target only works when run from inside the NetBeans IDE. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - - - Must select some files in the IDE or set test.includes - - - - - Must select one file in the IDE or set run.class - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - Some tests failed; see details above. - - - - - - - - - Must select some files in the IDE or set test.includes - - - - Some tests failed; see details above. - - - - Must select some files in the IDE or set test.class - Must select some method in the IDE or set test.method - - - - Some tests failed; see details above. - - - - - Must select one file in the IDE or set test.class - - - - Must select one file in the IDE or set test.class - Must select some method in the IDE or set test.method - - - - - - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties deleted file mode 100644 index 798d123..0000000 --- a/nbproject/genfiles.properties +++ /dev/null @@ -1,8 +0,0 @@ -build.xml.data.CRC32=65812561 -build.xml.script.CRC32=c17a4175 -build.xml.stylesheet.CRC32=28e38971@1.44.1.45 -# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. -# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=65812561 -nbproject/build-impl.xml.script.CRC32=d56d33ea -nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46 diff --git a/nbproject/nativej2me.res b/nbproject/nativej2me.res deleted file mode 100644 index 6b33caf2cf0cc7867938f4411e9f9e1d614cafd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86436 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

    3. nSdR2Apl62)f6m&`{MytG0fdmqkNE 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

      6KcT==WxJ526{zE^#$8H3EdbUEiTV6mT}fU?qBB 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

    4. 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ˈ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 OUUA7 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

      6eB3hWuF~WvL%uxgc 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 literal 0 HcmV?d00001 diff --git a/nbproject/project.properties b/nbproject/project.properties index 42d7367..4c849a9 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -1,5 +1,6 @@ annotation.processing.enabled=true annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output application.title=BouncyCastleCN1Lib @@ -29,21 +30,19 @@ excludes= file.reference.CLDC11.jar=lib/CLDC11.jar file.reference.CodenameOne.jar=lib/CodenameOne.jar file.reference.CodenameOne_SRC.zip=lib/CodenameOne_SRC.zip -file.reference.BouncyCastleCN1Lib-override=override includes=** jar.compress=false javac.classpath=\ ${file.reference.CLDC11.jar}:\ ${file.reference.CodenameOne.jar}:\ - ${file.reference.CodenameOne_SRC.zip}:\ - ${file.reference.BouncyCastleCN1Lib-override} + ${file.reference.CodenameOne_SRC.zip} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false javac.processorpath=\ ${javac.classpath} -javac.source=1.5 -javac.target=1.5 +javac.source=1.8 +javac.target=1.8 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/src/com/codename1/crypto/EncryptedStorage.java b/src/com/codename1/crypto/EncryptedStorage.java new file mode 100644 index 0000000..caf4af4 --- /dev/null +++ b/src/com/codename1/crypto/EncryptedStorage.java @@ -0,0 +1,154 @@ +/* +* Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + *

  • nSdR2Apl62)f6m&`{MytG0fdmqkNE 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

    6KcT==WxJ526{zE^#$8H3EdbUEiTV6mT}fU?qBB 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

  • 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ˈ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 OUUA7 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