From 7d21325daa369c24e97b6737774fa77fbfe4ab89 Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Thu, 13 Mar 2003 02:12:16 +0000 Subject: [PATCH] added libtomcrypt-0.82 --- aes_tab.c | 2 +- bits.c | 10 +- blowfish.c | 4 +- cbc.c | 10 + cfb.c | 15 + changes | 11 + config.pl.README | 18 - crypt.pdf | Bin 337368 -> 354528 bytes crypt.tex | 151 +++-- ctr.c | 6 + demos/hashsum.c | 2 +- demos/test.c | 396 ++++++------ demos/test.c~ | 1427 ----------------------------------------- des.c | 97 +-- dh.c | 5 +- ecc.c | 12 +- hash.c | 1 - hmac.c | 26 +- makefile | 2 +- makefile.msvc | 23 + makefile.out | 2 +- md4.c | 2 +- md5.c | 6 +- mpi.c | 546 +++++++++------- mycrypt.h | 4 +- mycrypt_hash.h | 6 +- ofb.c | 7 + rsa_sys.c | 10 + safer+.c | 6 +- sha256.c | 3 +- sha512.c | 2 +- tommath.h | 2 + twofish.c | 33 +- update_libtomcrypt.sh | 131 ---- 34 files changed, 819 insertions(+), 2159 deletions(-) delete mode 100644 config.pl.README delete mode 100644 demos/test.c~ create mode 100644 makefile.msvc delete mode 100644 update_libtomcrypt.sh diff --git a/aes_tab.c b/aes_tab.c index 6088576..398bf84 100644 --- a/aes_tab.c +++ b/aes_tab.c @@ -1,4 +1,4 @@ -/* The precompute tables for AES */ +/* The precomputed tables for AES */ static const unsigned long ft_tab[4][256] = { {0xa56363c6UL, 0x847c7cf8UL, 0x997777eeUL, 0x8d7b7bf6UL, 0x0df2f2ffUL, diff --git a/bits.c b/bits.c index 1a25754..60e3a43 100644 --- a/bits.c +++ b/bits.c @@ -20,9 +20,15 @@ static unsigned long rng_nix(unsigned char *buf, unsigned long len, if (f == NULL) { return 0; } + + /* disable buffering */ + if (setvbuf(f, NULL, _IONBF, 0) != 0) { + fclose(f); + return 0; + } x = (unsigned long)fread(buf, 1, (size_t)len, f); - (void)fclose(f); + fclose(f); return x; #endif /* NO_FILE */ } @@ -172,7 +178,7 @@ int rng_make_prng(int bits, int wprng, prng_state *prng, return err; } - bits = ((bits/8)+((bits&7)==0x80?1:0)) * 2; + bits = ((bits/8)+((bits&7)!=0?1:0)) * 2; if (rng_get_bytes(buf, (unsigned long)bits, callback) != (unsigned long)bits) { return CRYPT_ERROR_READPRNG; } diff --git a/blowfish.c b/blowfish.c index 3dbe266..db8fc1a 100644 --- a/blowfish.c +++ b/blowfish.c @@ -387,7 +387,7 @@ void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { _blowfish_ecb_encrypt(pt, ct, key); - burn_stack(sizeof(unsigned long) * 2); + burn_stack(sizeof(unsigned long) * 2 + sizeof(int)); } #endif @@ -429,7 +429,7 @@ void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { _blowfish_ecb_decrypt(ct, pt, key); - burn_stack(sizeof(unsigned long) * 2); + burn_stack(sizeof(unsigned long) * 2 + sizeof(int)); } #endif diff --git a/cbc.c b/cbc.c index e22755c..bd08bee 100644 --- a/cbc.c +++ b/cbc.c @@ -42,6 +42,11 @@ int cbc_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_CBC *cbc) if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { return err; } + + /* is blocklen valid? */ + if (cbc->blocklen < 0 || cbc->blocklen > (int)sizeof(cbc->IV)) { + return CRYPT_INVALID_ARG; + } /* xor IV against plaintext */ for (x = 0; x < cbc->blocklen; x++) { @@ -76,6 +81,11 @@ int cbc_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_CBC *cbc) return err; } cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key); + + /* is blocklen valid? */ + if (cbc->blocklen < 0 || cbc->blocklen > (int)sizeof(cbc->IV)) { + return CRYPT_INVALID_ARG; + } /* xor IV against the plaintext of the previous step */ for (x = 0; x < cbc->blocklen; x++) { diff --git a/cfb.c b/cfb.c index b5d3cec..39c9105 100644 --- a/cfb.c +++ b/cfb.c @@ -14,6 +14,7 @@ int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { return err; } + /* copy data */ cfb->cipher = cipher; @@ -44,6 +45,13 @@ int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { return err; } + + /* is blocklen/padlen valid? */ + if (cfb->blocklen < 0 || cfb->blocklen > (int)sizeof(cfb->IV) || + cfb->padlen < 0 || cfb->padlen > (int)sizeof(cfb->pad)) { + return CRYPT_INVALID_ARG; + } + while (len-- > 0) { if (cfb->padlen == cfb->blocklen) { cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key); @@ -68,6 +76,13 @@ int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { return err; } + + /* is blocklen/padlen valid? */ + if (cfb->blocklen < 0 || cfb->blocklen > (int)sizeof(cfb->IV) || + cfb->padlen < 0 || cfb->padlen > (int)sizeof(cfb->pad)) { + return CRYPT_INVALID_ARG; + } + while (len-- > 0) { if (cfb->padlen == cfb->blocklen) { cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key); diff --git a/changes b/changes index d80dd95..a000c16 100644 --- a/changes +++ b/changes @@ -1,3 +1,14 @@ +Mar 15th, 2003 +v0.82 -- Manual updated + -- Added MSVC makefile [back, actually its written from scratch to work with NMAKE] + -- Change to HMAC helper functions API to avoid buffer overflow [source changes] + -- the rsa_encrypt_key was supposed to reject key sizes out of bounds ... + same fix to the rsa_sign_hash + -- Added code to ensure that that chaining mode code (cfb/ofb/ctr/cbc) have valid + structures when being called. E.g. the indexes to the pad/ivs are not out of bounds + -- Cleaned up the DES code and simplified the core desfunc routine. + -- Simplified one of the boolean functions in MD4 + Jan 16th, 2003 v0.81 -- Merged in new makefile from Clay Culver and Mike Frysinger -- Sped up the ECC mulmod() routine by making the word size adapt to the input. Saves a whopping 9 point diff --git a/config.pl.README b/config.pl.README deleted file mode 100644 index 00b927b..0000000 --- a/config.pl.README +++ /dev/null @@ -1,18 +0,0 @@ -How to use the config.pl script -------------------------------- - -The configuration script "config.pl" is very simple to use. It is designed to prompt the user for -all the valid libtomcrypt build options then make "makefile.out" and "mycrypt_custom.h". In order to -run the script you need Perl installed. - -After running the script you can build the library two ways. - -1) Use the makefile.out it generates. Simply type "make -f makefile.out" to build the library. - -2) Add the libtomcrypt source files to your project. You have to make sure HAVE_CUSTOM is defined when you -build the source files. You have to copy "mycrypt_custom.h" into the your projects include path. - -You should copy the library and header files to their respective global search paths. - -To use the library with this system you need only include "mycrypt_custom.h" in your application. It will -include the required header files. diff --git a/crypt.pdf b/crypt.pdf index 6cd134fb1539cff5a39f820c774b07a185c21a9d..905ba3435e93b1680e9db9ed48c02c75dcc53317 100644 GIT binary patch delta 235370 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 BID`NI delta 218753 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%0DO$j_>XKUlhk6_Nc?U_)}H2{tK8Y z{GS;fMaQr@u3L+twm~jIGSNI)5ICS;bKBEeZM7jW6;c^#u&d+e%eLpuyGKuF*#Z{L z%B6Pl)i&4aEY2j3FJl(e5h~^Dm$svS-}V;ts!f!emMt%J_NoEhABl)KyR6ZW^NVZJ zyN!jU0xH?cr&WMms4T7S=zLH(1c_(r-=Ze*h=-^o{rfbSnn|;_goGT+zbM}Fwq{4& zGTDT2F{{S|74Uoi0PCYL#EemJgk((thUV$F)_ZoeZLyV_#>A#B_8Qerc+(Yis%{6~ z?(8^85~a;X`y0pN^7^H+9^T^A)0@^*e{8wz1kPhqxCR4YygA_Bun|#?72xLhoH@_) z1*70xg@w~mWj*Jd8tMbd?K|0(DVsfwqKe;cHIh_(3wX%j% znkb-qxoP-ELMKarV1ZdDQe)U&$QoN|pBLI?q^&4edV171b&&P~9T+ZL%!qm^|A=p2 zhkv4E&I(3n=Et9og>K-kVUD#YV#u>JM#ENEUit#+fe(KEo;LzbHXU^lijyyS7vuUB zi=Yg_8z)vrdtOKX8V5$3pMxLE=_Xc)Xn$A-cR zwullipCbo*U>@u1zI)|Lqz<})vYOs>;XbAC8A|ye2(Q(`LS6rim2IR+df`Vc30>wH zC|PssE6M(=N9RWML|PI!_%~}I6*sX@gi0-?KXAyDFD6g$Y1~SIS|1iVgBJ{tsdzlz zLD2z75E>XE;lR~gS7nTa{F8OJ&Gu9Jx~n39Z376w*wppF+qo!?UxSK^5}pA8AMBUS zq8KifJE)FUJ?&bU=jAPaHG+6l(E1Ij-y#1VBRey@%0an7s3+q)q`KC;^`lLwCL8uk z-snMJ(f0|)8EmR(2k0mlFTER?ot;b7Z7R^BKH^sk@5K)BOKTHlu+UVho#3p>j94ci zM-1A+m(^C8RFp8i`~ag6%Ls48)%0tGsarVA`6MBno0}1cKbH2~9i@;E1$4^9(9j16 zOuH5qYORAZ*)^jSLye1C6LKNU2q-$H1G1pN05zZh#%qF&C9}N_{C&vMiD#%hAY|+A zImne@W=)^%&n>?Hj*MnZrLr*M>|HxxoZ}Q64?;Qs7{JP0p@{_sFZi3?=NcoQ5-%Gy0RswKD-3!UutVz7*DWPAU)mw&e|5(uX!&!mK3pW_aIcbW{A zZMxS(`T3qTSD~f?UlQs&E-BT6x`{}}y~__O;J#VuJ?}>}+P1dhh3G4U-+c94d7%0y zAph@T$g?_`6_HKG;g#>b>MEU^r5Ew;t7Cj;}BU8kdxg#Tc zUVLd6vKG55CiEPGUcfYsVtKIBgR+F;7bm42+_kRTIfXMCN&iB@t^pE2IDEmLFYJx@ zOrEhw>SdzeJ|jM5e;QN=)OShUIW&-L;ci~BszaeoXj02cTu=yX70ECP8vbY=zaOLH ztE@ReTsRE1K73ln#r8OqeJkV@I++)hvm%DrH?qX@v=5Fqb?N?XhgmkOBaqF*^X|0J z5g4iXNOh~(jv;)4_Tw)gF`jBnsEA73M&AjR8J%Ub=SuMc#YWns4$4>uFj zqwM!jyreKl^2`yZg`r^Bxx%y#Fo%%I7r_rqiBArhv6T{Em9c3+BH;&6;dv`7N@I@&WKj1ElUPKiFYrRY+!(A!VqiYIJE{dmiNAIOoMtHdHu# z+cYBPj7=fOiuzXFE%@295+H9JLo!nM3EP4s=3Phv(OIEstvRLL`chQ*D^KiiHN^X`P`aa2%{&>oBD<0;_ziAnV^R}_j)7b2K z1D|e+KuZt+>$CoOcJ@EP(t@0#)zV49ANk4LYRokojTJ_pJa_1z6i{S)Tj8tWBIV+O zA(f8q8IHVaPfPt%+Xltcr-b~D#FjcoAbM*sL3vY>k-th6i1PUeU!y2{;O1N;vZ*10 z=A=3bGj*Psn1t>>2o5#sdEhL+s9SaP2IW<56a$a}Xfq9Pg3Nss-2w9Lz~?S6vQS0^ z(9nNo6Y&)YpPs3b>G}>|XbpQ2HR7$%nG9U7Oh1?hmV&N4gSDs!wMld@M#v9t5)eDY z;0S|H3+zRXaO{4{Bdqss8y4hZiCg1={{t4z!G!(J}LS%6Ij6tzd`kYUYu_&>Q` zwTeLj!h5%BwTvrdOQVQG~v=(a{U>BEi`|7IbiI{UEy_k#sdLG!&b&tJjhBkTE z9`wZ_<~P!H zgSB|dZBkd~5t5PlL4K)qoN_t2T~Z%0u|>rGPpD*ys-i$Iyem?OrK|%4(9Us5tIPfX zd~am=ONWN=ktI|sv`dNw!IeVss0XAFVrPl61(PZmOc4!#2i11wla&L~u7Tb+OZ-DD zdb~hvR#-eh6|Tpx-9rpuFnrbJW;v(9wFvPb>cMuPDXH=-vPx4Yb(3d@BgYY{ciJ`b z?P2ffl-Xu5+JfDWL%wHxHjjd1StVXZQAEyt8A?K2V_wwwa|2*qg#X*wl-%tMjF)_B0F0HKqX>feujDbls|}v& zAJyZ3x@@_Kn7RJNZxbrJ;G z-hoG1ZkZv(P&c%hyqxkIoc1ghj+tzzX1u)6aVzu#GNWFHTjftbb(UAO2KO_@vA{h7 z-sdsHl>c$S%f%Z2Xor@IU55(wcl=(f43`_W*~B+7d$^P+D3V6r#|LI@3S^ZIT6Y7T zo0Gj9*hdu>kd|d3Z-WO+kA753^6PJVS+^FBe(4Y&BK|vlJE|YRNpZ<*JRCBhdE{pO zx3$S|*wo-`^5VH`SMF zU`RnWA2?Ou{X;APWNtq0$D%t+OD##h19YU$O$@;>Sk!Kv{LCP7W1j;WBI7egfJ;*o ze-%}X26$`rn%sl)F}Ps`xBVpGpVX-Os!Ps{BLP3bKDmih7o4~>bg8hT6Y5AW*MInn z4!E`=2rozhJJe-bm1|@lqd}l;+y4j|VYCgdm<5)?>rh(*RJevX-7kJbf=rm_V%R4H zq^gCpg$idLg)e>{HK*%&M`E0(o8L~t1BH9ug6&hOh}Eua4;aK^vXt9;cf1r+HaayV zp&IIC1p07}_0v5K%SD_gt$MDh(t=&Mts(0Fb$b+r^k>Dx(sKsMEa^Fw2d69&Y#Qy4 z1F%~kTcOYavIL{pLRMJ{MCu1BlR7+V+1#yyi_unOE@7w!;6d-ee19w zoPhV}3HDJTz~9NwffGK=eSqk(sW8Q*$8Y;;1ZP1yh@?Q-Sy%QWLXpQ{l=$~|5=u0k zl(9uAqXtw#=_rs6m)bdc{JieX6{_>exSb|3p1Mx~ka^Kq0Ff0+-lz2}tdPDj=ai#S zSv3OqlBdP%Cse=^DT}lUp%R5#(d(NSnT|&q=`fvnf77L*$|KL%$ktuhJ)S=|hE;H1 zy^DYM?*;~+OLB9+-&KOE+VnLk08tIxDOe$luzLOx8Mx zWk?tRr}zYDG#B2FX)|%@E^xs^juWT ze(Dao9YZ%ZZTLwCzT%@uXvzUv80R6lu^BR{n8Fv&>QFpe#6_UE7C5E6eyWpI;#-r7 zP%Td_BDg3ICDisH_Z-o-D%<;&-UUcdDhmBk+-1d`Ns z)lHp$ieipm;)jum7JC(V*0o#9p;oIhkT@t|n6(O$;)>HnMc>;^^yd-aC|<8`3@XZ1 z$%o>#e`JmRfyOcf6NO)P5pJy_xJe`zi93{@@^FBwgHv`dUgaENoi}%q!_T$Eh^xj2 zAYyivJEa_pFKMEe{v;e!bMxsZn`bq6;dsDjGEw2J6%pgV0Lwa3x^d{&H$xS-5bBKu z1IA0Lkdvn;8zafkfuK@xSc`Axm**b0wd(&lmX=VntW-7!O)AhN4AD5=&wTDjA6$1` ztue&rGsy>+{l@l;ca*))1nuNG&NP4xaDy5O+qeUZ%uV(p|BBJuGhN`M#vZy)R>p{~ z)3APag>z#P+NbUO0M$26AE_A#)iYp^+S#s*!K>2VXw_s+td%E;WA?LNo^_1OQf+BQ zU!oSNc;dG>ptpKp+FBcOIh+~04<~XjSe8w$mjn{X=_vEiP{T{qf`}ds;vQcDFpAXk ztca!tpp7jWG&SjFt`EV$fJ;1^99{O*H|s|2#XuEoUaS}`^fVX-o^u@}qcQzChOt1| zXy2G)2}4zx{`qCo(?ZyW;g6WbmZzgMhY+o^J4r<^6YyAPKZovmlO4UYWSSTk1b4Si zfDMXkhvIPB-=5JJ`;}t;!qIg=7AZpI9H8iWShse2E2{Yk?%M*D&-np>;{25UEFHHw z&!ZVQ?2t4o%V>kglFjRoF**3U*vhbPSB8bi`{M@Y)`?u$+(EZRF+$D=upwULyNPk2 zd%yH#Ue;-Kj0>{A6)GJZeL$BQu(~|qx#;guTfd9FyPzK@m6uByx>qkc2zcoQ|A~cK zpAyv$l@ot|Heswi=x`KurO3_@x-Et9srbat+3Q4mA*Ty3wTwC(a6n9%wRljfC4~JL z#0q0+DXkg9wu}}m@T6S=fJiZckM&38e{DBic?2{ zmd!gY=0Nesi%0J*EY8`yMi$r99Nff<)20pF)y?A3;Jf1b+eP;UbJKE=_g;UEK*UA& z86~G@E#+#dtCKs_stqb9g+8o-P*@}}n7h!lo5wV7fR}zQwrj_&T@6KfxMO%qHNZ`` z06xFC#oYNjJ!|I(5K#|(uX+#Jp$>0<<({|p0HbveIgmO=rGDe1tIJ^Y(2*Sg#D+IV zT&l>nQjc6~>lDoy?*Bz_tJYFnMNoJisKI|4$ZTq?qnFj}zOxBiKSAe&69~?WPdI;M z|If~FY)z1v%H*FbA|&La#FZ^do(p9A!p#rxyZytUkKzeHTGVp@mN*x|WV-Q__&p@B zvP}MUH&dpV?rs~h$Za_!jPN%q!3wcNA~UNo6UivgKGOZ8W`8#MWC*LnTmX#mx0@l> zYP8perhK$lFx_nLxDZ12&2>7)farMlh#8NzC25oxP(Y&dxKik>yKL+B3VK#^J$q)O znXQrfRk0Glaqh$rb|}Yrwrl}nL$46Fl2v(IVzp-GmwbrMN{z1*ne@B6S*NtshV^q$ z6}tMQZWgnTtuzhApKVfEzij42JCesrH;m+ZXsLabtN>`Tcub3MZv_QRjshAz!6r0u zi&rH-hkySFKV^4?Ys=;k{ ziThPktb2NtH;wRqWA&*vAd1c`wU#pE=7fmm--vT6LPXBpKxZLu^9Y>YCAaoNkF~zv zv>1#asDud5urZ2KyR-o5*59YWwv2tmYqnW*dmT`bVP6`9+yO{8S$0(a%%@k1w~+8@I88smyDRoMtj^HFtCWX-H`dg&SdaLjd}EZl^v^>B$*N)C=&-)hrfFT3)k zl8ygTch1oxV+L94M8tx_lh9?m%VPcs$Pg&`wZ#rF~hI5iSRANg96y2a60tcj{aL9sUJ9%lpQ76eiMIJ1Nc4}+-gGZVekZ{&5 z3KX>z45r^xc5}XzjV#Cv?H}T6fW#P8&AYsg1oE(IMg$$ITql^ud3tJwnmx|o$q=ps zS#7kj^{T*_8jZ3tFWH!o33OFq8?)?3oyfSDY&TJGnS2`#Bkn!Ux~;@(1n&u?Xj$KzpnNE>8HY3?&D5nuMF0+f$L||IO~WL*hrdwMPq7 zcF6pm*x{2%cSTSg$olot%C}?*@e++EnU{A3lC4`Qy({C;IF2hLleuSV+#<69pIFGK z7n9J1=jIDz@ZK30awfTkShLlD)=A20K_kxaXQ1~Y-qW~fk!Rv)n%f#ls^eBhJ|W^Y zz+Ufa6H04EJyBZ7d(AEN``Zqy`NSU`8Ub(gtBVd&BF&9=0GjM8lNL`#b6$k!5*DuN zT5M`S{;g_nUC}-Mqxt zFmr&gFvZvMqk?jNXD9uW@nx+d6TQv}*Y&1;LdCdLW+Iie!DmhAFYjwT%g)y*wi}wb zlCmOiZDM8y@RCv*1v6)ClJwr&M;*mXzgUf&t3Z~kTrnLs)`V5(m?-;|Fjpt{H&9C{ zw4-L}F8NxZYYMgyt^4Ku>hS34qg~;pd2-#1<7yOCBXAL(c3;OD3ZQ?0n#U;;HWr8A z(~ox7rxN7)@wXFkdwCb|)yPI3^7j*2F6|4La%QyK8~RtBu%BY;iRC;ZZDH%P-7kmH zVk%1l4+T}Ro!M9M5uogiseH9>QmU|WOU>>6Vo+L6AMuRgS z=nJSUr@Lo+Jj$7tkt^+zS=*E2^O-e7_x%kDSEkC@QwAtjM1a?um7)W!HX&rBw7i@* zH}lv)4fj0^X+6Sy)+m0uehg05Fxz0GGUB*0S+Qw|BIhV`LXQZ6O9Kko(&uf|)DOU= z8*jlAOB&&==F!JolyUbAR{y{g_Haku8HE#eqV)|eS4wRXz({EPIOiQ zfTG<_d^GMZ8=xM9aJjIXyH{7?E+CKiCq7e z_A)1GA-DLG=oE{`DJYw!RwyfhzCje!Ry{cd>^by40NCyT$5Rnaz9G9UCHRP=)p6x) z#XOKLPj4;^J#wZo%0!Pm3f>fs&}E^h0Y%83cXLqMBEhcSz|;amsrD6`6_#ue9e%kl zjx%8DIgpc(4CF zYWVK}Uv$YPe!ys;9L${muI|HczSkNP(&v_5tXFDWSilOjJMwx#lF)i$Bb3QpS(Pvv zoM<7mLtK>28X$Yx1!T7nvHf1B^`M&_i2or<-4nC){^As8t*SJ5tK)!wft z0}^%UpyskmbJyPD-{W`;<{8;eenmkGRYh7!m2E*q?SQIs?+)`u2El4e zZslpA-^~Kq+P;Z}x_z(W89=w?L41w9^a@o|DS6a=OP+&92KZ3r<1O4S;3yb;5z2Da zyJ^yK4FCc7cqv9=|A;tU6hs2a*U5@h12FGG{1RGWx+(r45fW$3gn<1JxWV5{r$34D z1!9h21eId~;ifC7xdANj*}b4>tT>T>-~^=$eo(39dqR@;`?uhF#b;-e_*oN090m<@ zH1)Pki#Io&^0+1%M%r3SVkS6WP0NHIUAe8xEtRk}4q2WeW=@YtF!x z_lV$qKjp6a3Y z-m4brcwmSEfOGWZ7N!tM;zJPs7Ca=80Vf_T9<;H|spfmk|8!qYHh^GoNe`opk&iQB z)*!5>NP_mtqB{uw(9@PuYH7S`vybF&M?E|-@5F_;=X931_ zN?~eC`}0Z*@RvhZW*t4UvlMI+dV-V$L-Hbt31hevlq-VB&xOXPIf+M$fUzLL{K}{P z0R39^e z2isvVuQQ2*Ev3jk9_#Y!eZ%}d0uL=Woa?PAaF}%7yZp!(b;pv+ zZpkm~4{&p|1-NAX1R&&OmFR!__~9fEMg!4;{Zos_`Y#SnH|F~=uza7ef1bKdC2gB@ zdK9neYCX4-oH86M9+>jKbrrEqrIQP_!RDC=G(|b!DN->4dR|!`bN0cWvW@-R$8p-B9=$O7j&rrVDNCw%AAo4}!#J0{>1kvs$sT+3O z7I#87C`0ceH;uS>(hq=k3 zT2ka-k^I&2Hzoxo%Pr-p>+Y~?^KE;Wz9IpbPaY+Opuxl#>e*z{Ric9g<*FT+=7gW6 zfm#;pfKY`jl1nIdsFNM7m%qLKK71ESudIPP>)@1C`XI#gy0=DZggkt0k2@1(Re#`1 zym*Wkowe@j&@zFIgcAWnZg~r=t*`VniZ*3+?npP_ThXlk%*VU}@VZ2ftWX~!ZP0E_ z-91lGGMO89l_hW~Z`E_TqaO+hGtF<9$;ULv8BfDj?8@u&?a@(PA=MWmM*BQhttE$W zKG1?D;s+Q5PO;{1WvnD$Sg$ZOrkVqYCWMsAH*wPA`Ox9$huH>O{ z>_y+a?S(wR>*)s_j&u5vFeqC1=HT8si2Ltfoh>ktVnSV(QfNUB*1K=Mh%H?;#(Gjm z+0v*{-7;HUEsn~==)wY&!!@D1i;FMCql0Q`%ZB4liN8W>Q9*qHFRzn_hgb!ghLUNj z?CxKm&G+ylhiTWgpXk>;yV-_h%({rjFTuLLwz-S1K?#I+Tnm=wgGtCW6gjvH;`6z9 zD>OLM9WqM{Qj#dns=i@-slrjZ(-{>=*w07OS-{gKAWXwj7Ai{)f!1n_D1R_w<9Jni zGIID5kSXg)f9INh8zO4KlF-dQxj)TbVN#(r((iTH9wy5c&p@fGO`M5UC;TsjtJpki zxv`Gy0y`F+Gmq#sEf&>>{DT=J#^pUW6$Fy9fdJqN#B>Xn{Bv=#cYMePb8|(Jb|t(b z!!b+`BtA@K%37ojT_UFeOU#vS_M#dtT;dL&teCfX-D0W$^CHs@%w*#T&`xt?RaEuj z!DTRjouL3vN$;+nrAFmU-Rz(daWB_;Oi&yY-#LaiLI@vb{o~2{$-U}&O0?Df1FTsp257$8D{UrxP8XY6l~ zh9UlOAZJdmgGoHNn{5(|0h=64{4T$v5?Uusog`+eqQKILgimS;ZEVx8Q@}XvW$yGv zDdBy=37dAV`uMN3gF1vs zF;iU2SGF)zSW?$aD9}Fxae}^&F5)?AC?FSo5ASnc1 zdcUYyywk?^DYc#SbkUw>SCS&6mT6#j!M4m~W*>=H5Y%Ya${wyk^ZWh~xF(^(PurDn zsAW~o9iFjc1lN_a7bmQ!Sg9+c8|T36$RhMBIs*U_Cfh?NsXhHLN{D)({IlB=&2D!75dYZolLU zW;p#xZsD-njcT(Bhc7}01EGZuO@sP906e7LKA5&TnuUy$V~V3x(nsj}Gp6mlrmJ$! z(`_X;hO8Em-?CVJjC6PG2N-Csv3ya3i!?dH7s)Q^?+ks#?JW{cn1EkOgK4+jljV-7 zWE>hMR2|4r!ORdx$6UV{jlpoiM0;XMUL5Yi9j!++W_viv0@2qog(T?%XFLVo0qRtq zClAu8bT;K_G5nrlGeu{Lg86P@4-?8-l|e{eagelaf~N7z&Pc~VI~G%iErf9pS(#+p zyQ^dyX-C_ai$_xn;=86Fl31^g1?b=en{GzD6r|G3y*;6x7WqIT)(}^Gv4faVmMcuN z*!?j(y7$0B3u#oYqi#thA31qmfI+|R-^E-9>ga_kQu=ddwm6?MrMJtO@MxqXYUrqw z4~C?NN}Zg0X;%dPV9IVWX+7&^dQrf!^yitl4a+C)hw|gX?+j@ibW2==p7n>#gAo+g z1N#A~ZZMlgefYC?n2NSPZzqTzhCeAYBei_tO9U6r(S=g=GXDZEa;bvE18j22_6kWS z=5=EI{-$d%U;@Rv#3QRGq{C}>GW5CU6D=Uo8kPZ7P6lH&5gv*m~r)x zNsj95{S_o9aoP)6jWo7vhjR}aIdmN~M!TunU(AV*O=tlPe85C1^%!2OE|dx}&A%L; zqka!d))$=i)~%xzNnK861^5~Tn}#-H>Quqw2&m@@oa=ImCCeLmVOTO(kJdmB#OH&n zm|tG^0MpUmlfh5ZQ zG!f^*SDna`UthQSQ?ilQvqLXU(5Tvo$hcx>-MCU$`ift$fw+}44B*p#;NZq-_mkwm zCq7GwepKx2W@xB|dZkd~x&FDO>{NHun3XuwJM0z>9Y}lMne^y=A;dAi|0?j6n1`3- z8Oq)lu%L-gg)Gx-OCs8aem;_3t!rMJv6=VIpZN%f74o4lZavgp(ila99pdjD=9%Yj zUdI0WOso>D>iSxrOYlVh1aW-^?_2?MJ=%rhNj#O-Ie5#XKoaN<*&0d??^5yA#Zdy9 z0NbNZlqGkQ?0uzkdnT0(8%#n&S6|~DA}=!i=3l6>KIQ*|8VOT@X#Ypn6p#vp2K<}# zKX7BE61T%TJwSfG#Wl<_W46%TGM`_svL%1 ziBV6l<41lO99=>L#xQ>ojruc!6AR{dP+-uz=oq1xj!5X~S5TvF?-7U{pCf zVS51nyEhYUz+aAiizQ-OTj#4vjtV7?)Sp4G7?Q zVcUEfZ;l_}W6X(W-!yW*sH7(@6t=@oReWIl7}YwcE%O*#d)>@IMGN4)%tKfFenX9`(errB z&DrJ)LO%;_b96)fvNXBph?_BTtXku9>JUUzQ93h7z5{;p@rXFctW6Z$V2UabKQE)$ z3Bv?LN-+|~iYe&hnD=7@4C`ufO;6eX#3|x&(&^+~I|JJV440O2x>eB>#^=o6=c|e# z@c2ImdxI*5HD*zc=M!C$KyC=-A8|v82;CG5uD+Nx^)O7oML6X zZGL31{2Z6=9U)qu`s+t?jO)BMe80)j;WL=Hsx+|5zRs0+h3iYA(b1~eMA9Ut$GLTl}c$@V* z?{{#%YUsT9z^pmS{N z8F0CV;Kl9@331fT?~$p3-lGnVlXgc3j%%|}eqrF$t^)wET)9e%mYcb*{WzNv52$Al zx0;UzoeXQ#iBeixS+UpWMz%(2Y6#1u1!4v(^2)quPUBb}FeRU2IuLxL+6qMVPc(0=Zc zebNzx>H{uTC|d$q1;O9)uz8XFhbVp!m>Q@ky$8SPDKSeUL^r>l(Jho*AtKnVx_987 zL`aF%;H-AuFU*t=kzh+U%;vjYXIqE&B0mO|uLAyfj>Wo(mcFX}EP5FDTvYe0@T_r& zIOVE(^0eoVLl}LqgJUhhDA}<_17-W9fy{EwLMlOuD?Y{<6sC*J7*X^WmZcz@8xYZ8 zAKe?nMqJ3_l7L3l5lyEe7Fk;Ntq;BnckQTspN!&t!v`j#pxQ4K*0fHL@8es|PLEhv zzz2k_;lHD0a^7u?C!{AoCfL-#%UBen(rw96LQSG?^^}~u>ns~NI}8&uCIVw_D^G9G zL=p&}9c*AU9&ZK07^`!94rAMl66RU~o##@nvTX^tFi%KPuSm@q_mNUiC(N+6|0OR_ z+FCHiQ*e(9ouee*$mwt5R*r+tcJT78uLbBG;ligYZsUBYmuS}v`B#~9fO?m&ACGQj zeX$16++muZYc}O3suKOl2|OO+gA~(eDR;yeo^OVSKb%R<3rr)*YF`eHGvbb{7QU~+ z0=L76mWY zsxp;oDAub&$*@gLb$Cf39u+{-A_q*1&<*}zGC5NT!xFwD9(kTbN=5hV==8U8IF_vy zkdd#;0Vz~Hob%5@3#bq)XhZVjfS|mk2A-$Av;_*3Z8#M%Cs5`nhd~ql1x>`Si=GlE z-G~BAYD!W+Z5Cg|AL0%WONcLZN4v#(8I@ z(sLVN;j&#Q%nzUDN|zSob6WJ!xp?Tp)@4!p2rtNIORxe!XZqyzNcM5EXPG>D zQjt{~K3qduAt(aUpRl3%O=>{xr=vZ_TxGEFo^`_l;pBXJ>HReCbpVReJ>TOwm@FIB z4~%h1Pnx;~?$UGup5A!OD`&;Y=%C2 zgFTC|`k1#l$kO?YV$x$+=X610yO4v{8WE@#ws+aOvD6Bc+zNXNDyhPqmeh(Z?(KM9 z3EV2Xzq^DPRJ(EO_JS^d;$;_w`Hl0##Ge+r9yB?-GJJu?m~^50=%Yu#B5~0_Q=)?! z7#08?l+#|y5eE)?ALGn7r^}Eh58Tka3j1FE?@}IvUbfZpS!Lnn$wT?0W zcK>x%T z`sC_7nbAx(eLy5t%zBYbaD4nU4>YC@#m85s#FnCFRGeX&E8(j8)bM&H3Uw|gel<>n z%ru?Fsz4^V=i;bB8L+$RPFuV#-zHT^=d)xY`U{8mY!WoffhhM10;(~5euFyhjw|ri zi=IT|5wR4%`L{%nWCc%Dn)mu`t32nrAjae#(l?e^i^=ap@6^WK!y6=By7F_+k(xAF zJJ-~lZ=c#xLlg{ePqic*{7@y|9d zOEN+X5E|TnyChkd@!9GB#l-fN{u2{oVEZpOq}ry#dJ7_8SvPkS*$Md;65-t<8)@0x z-eLX~sX23EGg353FWfLpNu09jb$Qzxh?r*ea`G{>2UzWb_V0ePCxH9yQ;>(Qk1+Ch z*~Q^M+>rOwGW}x4_ve$-{CVizI$t**!7DItVO$Y=M!2&<;nCMsRdnc-&mC$*wSb>@ zwzU&=)GhC~!?LP;T{_gtH>bep`#XDh+2|6bJK4#MUmYX+JLij!+h1YWTiRalW6LBK zEq^GUXq<+KTN*3g1{r6?^_I`mH_v*vxK{S*vHI}SMuIuC1kpGJgQ ztg?>vbLU3WBBlKCu`hv} zKs_aavE1?wZ{7>!*4|`rGEDtFquK8J#PrM@oOINpK<9|~uqfXI(rI;x`4eE)UC5}f zAAvznqTSx_4L@hZKmV6H*Uw>`ecIn9oETPxI0v1O&QF;ttw&8%&ldTV4~uQY7{T&a ziq_O3^fZTbinEAx4o_a?*duVk+TEwqd{fhU{AwCvcGoWQyI6%WvmJsh)Img0_zb%jBC}BOkAy zT;H%H{+3V{(Uln-*Q%kM;}pK@@A=^>G0=x+CXV>(N_=`pt(ba8t`6f?ccc3gw^dA4 zhlLnif71B!7(P{o{w#`UW98ct>lx8A*l8{59UV9HC&-T7n&ikxPZ9w04WD&(zz0;c zA2ew%lyZqm^I}b9skN(!9h{c`>`d*gJ}CpF5}vP zqjYuVFMYH?yVz+weQZEr8TnCrDqMI+j5^C3K-HKK zoC85+kUR+(&O5uJt)p+ElO0~0eT#pnR(6<~#=DX>VQc`u^=>P2#BNk;;Fkn$04&Tp|JirMS%p9iQWTb5?# za_ecTovKp#nZ+#))GXZcc5I|=L|qUUoWAqRIQnx=x~v8tQu5PW=5Vh;F$NhHz{9`9 zg?IBrLJ4Mb88p^TisNl51!Ck>Y7eq9RE1O01e~#Dr-+0c%Fj(g%M?+!ZSO8K13(Su z5k~-0i^NZ@OEi%|I{Dw7%kC2O6nQ!dbq72Q16r{Vy6CODO5rfg2VILn#hTk;R;yvc zC>E76>#zwBP~bRMPY^%^5*p0UTbcwF&->wlVwH8K!apEE%Xg_nowt~iekKH_ZQ_Py z-Z*PxM!;8THy=QuDk4g|H`;3FHi*?}E9e|N9_fbjcZ(@uWb17Js`_1d%goL&39 z7fML;gT?*F!=Xt9T%>ssEvTw5GO=YLvpwE`zq>B;U9M{2aGX1)ynGq3<;sioL10fd zX7+o4Oi!*RYzoZbcJSnlu9sM}yh{Q1G%0UD1hQ`xy@J+29$!2m;7P&>&f|Am=<$+ije2A?KX;5W@QeW!PW^e|*E;6wjgIsvK*4Ttq|4SMC-U?<#>N-~~IYJsUX87@3#l1?~e#c(GnpH-ORjh>_MpPS=M@np5 z`F=jH%f=T=G&$jZ84k+qb0zY$41e?Zc=6`K&p!Q54R^HM>`-aI8(Hs$G|)9S`tJT% zocx;Gtwt)o*Xea{QVZiZ^X8V@*$n6?-p2c?SDQ-_0bHX4w7(uc+8+j}A%S^+*0&n4 z%Hv}ZdaczuY9^5)Vp>?)Ab=?MZP(|Y@6@+OE=5e&^Z#yowQK&Lf zvAR*^qbm!(>FTU0U8glhn2Bm5)gO^Oq@Cm6)h95|u1)8Ku(&0B{n=t3ro)zvnz5=5e0ljcmT@z@?p0tg#T~I`r2$LhL+pLa{NI8Fu5is|? zX86^5NnN1h$IfC+RMi%B7DuZ(db{&1x99h|0LhD2Et`9MtN!}RBRcwy2{i4RFTnws zFfSv23IyOgh5Y^k6MeDm086_sl?rB*CG^*V=$n7wy{co#NG;s@f*-#@Wt^ua{HzlL zP4w(Qk&yiKIfE_XNAnQYL~>QFOIw%z-JpBf#Mrq#e^CT}E&vD1b|eU!4c7@T5$tJ8 z4bXzS2~>}cya-GcNgwi#K2!iDP@#f5`~*F(Bg+@!Khw79VT+OFJH@jBdK#SJ%%|Nof|f z9MIUrnWOg>qT`HotV{vZpYM{Bs!S|j=0)%LlE)C3RJx|Co}5hBCyeE$*QQ^%YBV_i zJTsOHIpT{UUdX}zTySPpz&$Ui&UQz|A^@yQ>T0q^$%yQ;Py)O;O6=>d1Z!7}yV^z)-*joDidIfG$VW)xCN4MV zXswS3?`*SZ(5Xh!Yv%jUrs+j}M6DLpx6WvYdT(D3OAO9!7Wt1V6EL=GNXE8Mq;O2TSB zk!w>=4x6IRs)SKj(cwm!WaCaFDkU?~Rv0a00v{eNh4if+ZsZwohIL9-k);%^BOzgm z{3vsi_u20sM-VsLfWIr=lr>Bw-ZC8{`!riQ;jQVz*zhycvtPKR76$z0;MNq~GE`Um z1XqM}!6HED4%_9;F-TTZ5dsvs~+1n|7xM zkKZ&bwymQA-Oc+&7fJ>+FCce)AqOe6dR|(g?#PrAi5AW9eUPuPznl=ZBN^#2SbDJ0 zOwk)tY9Z=cn5)@MJGl~UjFYP;Q)}yU+cW&8+RXs4Y9CULsDP&?2N~R}mJS`|_0>-$ zXel27k2d6WNq<*4p!P)D>*tQ28_5&BQjmTsiBYf^Z}Q6zfyoqz8d=h05^?;LxxPAn zf@IYXQLxUkYwf$-Jtt(3yvOx@3w8_$_Jm>vS=$O^y56 zBI*Lb`u;EZy*x&tPW?Fzs=<9yeE*7|hCTkL=)izU04HC{p^=|d5QKCSsxk(;F8)nC z;zR}4s@NB3JjpO6SJt>GlX~99!wOr|t~MQOa#yJJK9Y&*Qd7^?l#D=rT+lAPjCPYMk(?zX!68Nqp}7*s5TI3kkLkU;lsw1@tQ zm_x=~61}%7p{aJ`-C7h-SHjiDhWh09-W#bEM_{mJ#za)f!d?Fs_TVHBcYO;`-;xel zGEX-UGAIM%e_5fN{+Wvvf%&}BCAb(rz*lhOI3=FM2pYJRW3x^x+^V601zwG#>2&tO`-r@Mzf4m?|Tr=`8g$h#AuDkeKJqH z!D8rtYRAIbLiV8d-r_176?OW8%b}6B3u=M@d1}8*TMuBEpGW0rd4(Ne5Lxk;%Z>4q zvpVBJaFDu!L>+mY;FHVg0Tl$top641V>oKsQX&yDc3-H%gi%C88C>4+ECV)JX&Mcn zG4x5_g%qWus)?$B)M6p=Zq*rgyu-OLK6RHJBMlub18Z!6WRp;=(oMOTF-g^@q*`cs zb+&qQ?*J5EBKWQ(D6bLYA7GTLa6XihFv1EKp2(o*5oXlzQHL=w*=nmRDeu)vYdFp< zL59u5BXD<%yUbA!2VKTWYvqiAA#i|@w{67o8}-d@ETjJ{ipo;oh{0D>-39N0hSgx}=dqtq9`b&%xpnnZ(#kn<74LvvNEOMNteXij^5L@FLmY$Ya< z=l}=_%*hikV<*)n+TFq_$+L=$Hgku7*oZ0HT8?BMO`N2pmeI)x8w4tAN(!}ulPkNj zK^nE58#58;=a@)baQU&+{reo0dQ*$sZ^f?n1-Q411iA$n-Hs<+^4jft7CWl3sMAP7N012kz@4* zJ;{>N_o2tsW?^g4t|YD1K(DNo68$CLTSWoP`n_~2+bqjg5Abf3slEBUC;5}L*5>`R zG-bsxNYiQvBU8}&VR&aj{)CR067{r4=!uPuQ`cf)N#P3GevK=FZ~_NIyuaVsbqgrT ze?3)+HTRpO@>;0XB+kvCnI7A7jTQfE9Z6k@bx3aN>nYJxMA=O>;dci@S+VbcJEjt7 zT7DIb-=S&kB*bnZH+tm%7v)1AliB`#uzE!B+_6W@{!f(e)Rmj->fM)*9S9M`iWo{v?_wVRn!)%1?VY zdvNy90lud;^OFlyJn?xx2eF+M@;vI(_h|n5$ILcblsOPstdPLWwRrvZpnOLWT1h(8 z4#~@(w}!#uixL*k`DXuK=|V8IbzrHUzdsFoh0wZa9>SSWkEYAv?@wDbHl_hzZCVpS z<;Ait;V;84-Sw6V+1exXEfCxsT+)ne*%7eMmiBMRIUve>W>iQL?ob7uA5mT1zEh8{ zHzMfUK~07Wa^=LJWa;WjIz7yu&#o^|!K;@-;@f?cH0x<-=C!l{75f&UFmc4A zdWFCEUD~QJT+?vHPWO9y2!nvfG6@&l9GX9RX5jJI6LgN;Zb63x4e-{Ltb}L@&M+7%Q%}DP$|dB+FA%;rGte4nCZq z(Iz@5a42zGV{?X)es=zOJR|yfN~A zxL;q96hgAF@xC0LLD$D{i-ilMBeLmwH$)1U=RNNJd{;@w)lPs!CC-vXDemt0WamvE z8y$2kYD^_I0C0roncdyqkG|b2W_du2o9fa|@xGrU*Pn}Lj?O^RfY=lfW`PvlufudH z?HXnF7e6|ZlEKP=#&;YA4k`)9YpO}z6KdYAHFF*E@AG_7Hd6SI3&H`|=sAu8VJEGM zD6_PrO>cP1pXVEDCekX_4uscQsxKeBwl+8jIsz`j0C6eQ?WuQ|EMS)rViCT@DB=h) z_LsqWsZKii1{(cV7NX7OlOP-1r(KqjG1gHp{TJ2kC??DALG9F)#d%r9z(fN1mBl>o zpFrYKQ%9mmMV_+mYvhPM==#94vPd?yzhBQ!qItb++zvdtabE<;YF*$Bb;Z=Su+8;- zGPajQ0ohTXn{{cwb?R~Jkzr~-qZ)n+A*HI|U!8BRCd(_8@Qus_rqrYb;;Jd8$MlJa z>!y%{w&E|b2|?D9kwL+b^zvd0%G0|gUs5vT1}WI}J5=kx-+B@+iFOgH#O2#!TGCU! z5YpY;lgd&Mb`$ZQ_a*$Sn!z%!-D^e_K^w6)2E+w3;c9K`OVP5I>FXNLzIZ4{dZGyF zsnRhk24)AsJGG8EbA8OquA@o-PknJ65E*<2egi!n z0l_-3WSSKa4asR_cR|@FL?z;yBXed7ems=ES^|AxKhx?&F_83O0#3LejN;Wf#4L-3 zS8?KvxdOM=t3^71Tt{A8`D@Kp70OL$ zzD^mnSND%=8X(|mYI2fL%MG<-DyKo`fb=^e4(eC1tF{Vup|QMjN8xdE^LZbu)oJK0 zGE}Y&l`AB&L7QZ*BQZ;>i$_WG>DB{!D3NQvj}JLQu$11D0K@gACC5+)25XpX=$Y&# zo0KK-{@Y;}DaCrVwMW9QGs*fLFqmN2)rqo3Jd9d8gG;blBn2KO+LXnLVM`P=KrLFW zl!je@4PRgtf3uEu-wa*2dxnA4j}<$$*|0R2 zi@~a5xdQys4O~W-BYmj8f=K}^B-*kH=SSbP175WV)>F!UMrKMea+Aj}-6mx_2X(dt z=!Otv=SpMe>3B0#dM}J%kn{#4z++Vqlh>DFjOOvSyl#8l57m{%L2C{5R^hf$wE&ye z;DHZ%rzY`xr(yVhZ>fffGvP#=S#>p^;YF7vi+S}J*)?LlmPE!T4sdyqSLWneLx!TI zVW}~8Du#xx333p5Mx43^PRSPO+$AGvEU%LzP>FadE&8haN#{<(I~E*ez~tJMS-NTX z1P<~z+{{tcUIx!q^_kMpz?KJ^k8#LlQE?z78 zJ$0}f_8YH;)j!edNg8sJHmX%sCw#JX9oc^LBxI_Vl;PzduW~Pm2`aWzm(PKgTB@pr z#G18sGaL%56V$HCK;IN20M*WXMHD!m$G}XYR;X)UO^D;m84@ zW}oGp0gFJ71R3$yDwHP@us6#RysabtB-5$3`JS8{M4(Map(G)Vb0i5u-Q-#Z5WR;@o>o|vW zPQ}Cnuq~D|>^Erka_Gsp!K1}B)Tzb}?Eh#~%2=H4tdv;sOY7lsV1IFv%WcU#_s?&DTzq6*6CdioB_ z`{q3C%ICk+0kAX;vLbITnI5P`mGaS3jus|_2G!X2XXq67;D(iZ({{%M@Zwt6@Yg~C zIna~$(mg9w2w@m{(xQ4sY%7B)7QC-qw^j7S1-AO*4flg1n6`8_aW*)>$XQJvI>e9c z4V3}wSRx|-jfapy&JXw_I}4w^4YL1~-!mgJP|F!_4_N12xikQ-%~%<=L&sBUB|m-M z19`QNIU0tb@}DC}V6&_&+x=PL@eKOTp(XYr5293$FAa2psS$&r1%L8H1vwRKY(7){ zi~Uw^I5R?_rp{fK0|o1e35!}V^zhEB*poApPTFha%{s^A zb3~-1t*KvwVIZS$GtYuO0aLYV8%jrDd+Nujiy6IBBCj6|uf*P_!im8DT(6M9_1n+! zM^mT{xgUoKyl70J+eD8)`;10_uUl*+2S6wK&-b9+E}4DJ>^ASzG=TGq?o;m71O+IT z&eNw7EoTQ2#|4%ssx)SH5UZ<@W)SGwmt=oux8TPF32?|%GJVkgV+lh9o&W-g?A;nY z4Sr^X(xVH29X8=@m ze1%=N&I;X}@iOX>boZg>I~&4pH-+t1+RY`A?&JbTwdUnBIV^hTu|_YfPqkISX6x{d ziSxxT-@mq!!QSg0gTwRd_fMuYM{b9-18nIPrFVmer|*5Vv}tF)L$!1jGTp`yHOp!$ z5TD+}Fv$CW_w_@BfAJQ^`qs(mqd?047Q&*8egF3_+5o}=`G&CZzO_`z#$*4??$9Um zGXYTn)Xt;7Z5v-#-2yG%vHp!RD5a_n8-)5~r zyNjx?TldyDg|;uxk841u+mp-Z%lWkAZkIa1TkBi!h#nn*D(X-xjFOe=!$4=JlGFxc zpbKbKmG0K8Qlj4ES*PB3JQwK6;&?SHfWLr^yT^>p`t!S!9Dw`BVeD2(I-!#bFMZ7&lZ6S85u|eTTKX$;T*MLcmKxg|A=&ZcNUh-{u~u^}{gjjRfwO4G)e)S6NJpjrV(4|@bmksK zo9#-ko2wDiU=11 z>F)G`o)`EvD|B*H!u?9|sb)g&S+k~Qr-$q=>Ay99-)%=LP1y^Ow^>8x0sSjs6sZan zR(WY>9DmsH3}+JUzc~Zh#&B#@AnsBTb`^%SuT0*&pgqlAXXruM7B++s>2nn3gVNF_ zLgJB`_}VQzH7*0rs>XnCG%^5?iX*U;6zdC^SH z^zuW{M^2{VlH>zq7+hvm|(4&9et@i=BkIyC~b89KNEt)Z& zY$G$p)7hy+TM_I2o+W4X#~JRb~+in z_Zi*`o2QbKQ1lM=9m$^AT9MpaxZ7&08ECtQBO5lOQRYV@>}f4i5QD$V&Nj|^>POLG zOWD5#mW}1NwQeUxTUm#7y`;*4#aySW(hi!GALl!cAXDf@iO@9?zsEmpwj+`mY4QTM2;7Xwz^zCXM}LWDWa4Ir}D5lbenq5NQ-`=ui*kqjjpG%Ce` z+%-cqb7CgBZM};|p7m?}EULQ|HWQS>B;y`8%=D%+NRG9Fk9`jy98gz0CS(Gf6WJ*e z7Yx9K0RPlb&X%*(Z){$IgZG! z3jS^UfDY(_gBU(U@BRgT38NfX-4L|LmsF7ue#H0D=ljwFe4q?g$Py1y8|F02;8iGw zPPFshLRUj?L^=ULa^#xRY7%$?z3@?H&s>uaazkeaCMv^h)I{>)JRVBzf!EvkJEDXi zBo`IvsM533mE}L@hxSgC_mMD!)%mA}AOGdrew>86Z?-qqDNHq4p(3J{w8@+{4{fQ` zUhxKv>96~7%M%(a7M`36=F&>g1lTF9Paz%kT+O|4Ur0bL9`I}E&y&McCmLdyUA&=w z#VmIPy?9X!H8w)t6|@5pgNb%?WwHK=1yVkGCrEUo37vEU>mDdIrChmwqSF_?vX%(? zlmM$Rs;ul&ykk|;IV@UelF9wCTY69K6$7Zwh1K<7*?WSF2?NC8BK_7L_>7b7czGv5@==O*9alGJH9On;= z`N&EUf`{npUsS@jlcJBKEJ_BY8p2Lx*9WA-|4v=4%xWe=S<5WGig8h7s0RYmlTwFh zbk|$l(V*}8BMD|pgtxl|iP?Bo+OHh=dJFbW$ zWr*Ra&`d7NRaoBcjt~PiG%ZG5f36`vM(+}2p&gA=P7G(_r{NSuSrJQw^!zyS8zz8I zX9{{47{a^64NMQMFR;U)*Q$R_M)y3`3AOmFC{X#GtQ_ueg@?nLNhysviIy{Yr4C?- zNZ^FOAQJ1P+ZQefM-P~LEaEyMwfK_DEUDhP{A7eY_O~@{kvGOHcmL{|{e9S%Z24u1 zh?s6TANmXKVm(>)FArJ}FV6KA6)#C7&lb!V5Ymj%?C|g61E^xec6^C$Pl?_<>+_>R zFN!aS`$O)S$5QYD|e-6ExZ1&@(N*%MEr{( zw`tO%Mg)=NFkup@vLO_w0bg?Fstl=~qVK$Z?K}$-h1kCT;e98M%abb-yhw2uQcq7~ z0=r_2CExNR%Cvp1FBgeSw|P`GAeuK?hQ?!f8an3`G;G!tJ3BI;eId4K#@BdN9Z zTNawO%n@MTFgKmSp+!q-npZo-k$TPaR4WS(f7y5B4n>b4)0|aZ6oSK6N>sBNin<`N zMZ%LVpuM9k(2;&m{1>(l3`WfY7k}2z{ls02cRdM7LM72XO0&3Rx5>zUzdGn!A}gB$ z`2J~3O%c009y{uDgUiT?!bxxE38)KZE(@T1F5~0V-mygqqD)W{Kfa zKez(o@g=JKEVKj8Ly#LF^88_8Bnt+5;6~miH9sW?`%W3C8BMXxp%!kpvcV+FuA)z% zrY)tUt@D)UGfVxPj~X1rgQhZd`W`QD&Yv<(%P?98W4prs3lSZi0lL zJ_9;IDZ1>;p~Zuxm^hCg1SHcw8;F!%baV|~;+#yeKE@s*q-3$Fzc9$8R{`E9J|pNr z)I(^%!3m#Jiz$?lC*#eTKDeVr%Bb|kidcOFK70<_2^dq)sU6S{ zCoxMY0jQMvtv+A<#8kLZndHo~0?4Gi63Z46vS&fumDr;)DZ>-Na;nUg$|O_?ek7ok zD$|C3%J|ETY&_F_sUblAC5rl5ty1+OuzcoI<*Rm5B!+1srb6SjyrD$bG--JLRH#JF zI&CQ<)c>XKI{p3`YImvG{_NBlbPSVs=23Of4alCseJROrotqHWu z6TpclR2%2J?Gf<2w=4M*QhYmLhG%0RKjt2L2k~;__T+FaMrrlWDoPy@=~5UQ`R8v~ zh`1?Wc!rSGh@6$o+2Ux{oTauKp2;bRX@1OWM z2uwhNbKm5~$jJh@~(25pC5r4GcW^H2ngKuSQtRcAE(q;XS+Dtbxy3uf@T#Ka~LM~|Hmzlnw zgHAL(=$V&Jt__I`4{ln{<-TD>(Wx-mCzvGJ6QTo&`Z)M?-Uw@e(W_81Dmf2~Vj!NY z6iy@4?-dN|bacYQ`d6rW#;l(0<~1Z{qE(hIB7HS=+G+mD7)5~n9{{6=u`F?+nsL0Y z5;y3DvMB$|a*2&H)q=U>E`v6lM)D{tfV0cZRRSNUREPaH0_Hmzv?1Q=FJDOsZT5P|Ah94^FL zu}iw&{E7I>%tR}{jMC^voruw{(DHC!0E-``XE0DxIBWNX|M6CRYgsn_2l3?))T&xW z@dZc;d6#AX?9N(Uh6XXae{3QillGK(U0Jc04KM0osgT`>W4G9sSryS~1*de!H=MK8 z-OJW5oV-j9u>Wx-knwnnZKwHd`xq=vz|h?bz}17}-(fpzr)lefm$9#ZD!kY}|XJACfJ%bYK%;5k!cf4~eg z#k`tWv~vcgkv|kvA2uVi!}@Wh7PN@q%8qj%f8eH+W{R&;u$)!-S%Hvq}>Q8mbwk|ACk$I_pa<&+j$a^}>n&#Jkq+YC!rYGZD z(w}U6+KpzG+3Jxq3GUiASBJ8h%&39=$EUEoQbt=)%_szR>9ZTX&aBNW2!Zg73(b3; z`r-^&4vs#zt21>KVfPazhI84uUz^~cCgL2P2^$NpQPgW`q_XISVHa9Xsp-|q2)yDS zhPc~)!_U1Pz{IbnbPM(s!L71|iSE@6{HYgo?pc+(c;pB|uilJ&C;c80%)3!!@ZwDL zJVeWz!r`P6)&N9%uWkOcglD2NDznNgPNxk(m~0_5I*l+0WgPG&wYZsr-@>Jr>JC_@ z2|vAO#%!&_6b(B`c4E;DsL@QBcjXk(h9IPW@#^%W$M(dNliwywn_2v%pF*#TeUaq{ zNsteisMdd5hEpvykDTg;-KUx9L6h!V<+USBT4?bDBm)j zrjQak^96(L3~_SV_~%F7Tl(498*y^|w}$y!(u4GmB8W>dsC5;xRl4bfn0~JbIKC+?oFJYkmu!uM zB#vG3mxGVD*<){rWHEhWL}%vahv_k2!T93di|WM>vba7io!>G_Bt>_Lv4PBol}*>* zckhJi)!BMsHE#3=qV}hX-g_zAy6>%?t;V10CPbnqEK(EbLu~*WYO=)P$DwNVBf%UO zQ8L8KPe>d^Tc%P9$$Vj6)CA6OULmrGzqNp$l+bz1fBmnZh-z=&&4 zqZ`#r!U?lh-9CWdTL&*lqb|e*#W)dM>z7~H%@NKo2Hh$QI08w&BWMVzP+|GmRE6hm zF4`-MYXK#@_S~&<@E;^$ov0O563Ol%;1rUXE7c!+n|sw5)b<)eh!=Npq)-s!3JvcH zGoH=j?S+^(du(S9X~>7Z)I3+XiPx?%0G7lO_V!77mI%PQiLc|e!B-w7qK74V07waj z6wRT*1ut*}N?%eSctA7mybty&1-TSgiA)5Y{@e;>GgbL#JJ!Q(mTWWajeS00y-#p4 zlH(AX_HW0%Q7}WWhTqXtcxp4CzpY`uF9!`b?lRcGc>xjm8^`P7b?iJMJ#6Vhe%J&s zxm+w7qm2OUorz3rEMAVnG0W%fzlhIT0etMh8(^mifuh22k?94piGQ6~L&LcPL@nvr zIYSE3#j_(tpr-B(`whVPYT|@A3o#`mu0oSBRJ+*NfA!xP?pJ`+6|Pr8JLV-uLFV!^ zgPjdx^-EPo`C;0x(>5~i%O0-LX6ki{cE{-7zmV@yClNU%~g-O#2U2 zVZEOwDx%i=@@1uc)l5QI8P*0=Wl2<~osEDmA<;@^#)up7^k>F|i&P=Cj`b#7KB@}n zRju&dz1gpbDYLaK;@BaIs?AY#Mut8Gh>HPT{z7$Mv&Mtw3Y{Cj{RX18uBAujga$~z zj$Y^U7Ro@?JZ3j=m=9d*;d8xTck?@!kX_)PCC`HqCU}gUHsl?JkJCZ2NaX6adBePQ zH{@#pO#Pn^Xt#HgnP=^P(!SaFU=HLBRKqg1?5K4USeJJI3;1Z~;dA+BRi6=pS`fgK zl^x>xNo_fwrNWO=VUD62PGZHkcQZ1`XnW?t8u;p#kakR#QLbAQRz#IeQhwEr zo|PT3=8^67A33ws!KwJIOyUX1|5XDd4rI0;S@5ybQZQAty_BL`gAM-h%Z}F+lVPDXPqkV9 z>mRX79QZS^ml7u!dSdyGm!j@FE?FOlvXa9=pu34qpR_{br@+-%VAcW&tK7IM&wNi4 zT^KNm!ayv)Y2-bm=i2gjJ5hECR37&Y_&jUVm)2qa0&WXbN`U|{3F&HTaq06USQWKu zo*~H7X_=q#IrLH~5dE!gCq9qy)R^1A@~VJIiTukrE*|h#RH<*u|2I-ZEX~xlVy?qk zE;$ccI;Sbii-a4f?Lw1H57lzNA3+*11Wp0)1<%;R)MbXNQWbNj?L-F>Yz}AM7dYNi z``v#p;&kr+?IMmKW%(W$BR&W-1v3^HKB2n}7VIDC{GSUsat{!M1nUDRPeJ7KuKQ#|30s5Af3>p;osYz}0Q6pFHn$qUDh5(oz4dl6;@+3k`0(PWm=>JS zecri1;BatrP}I(FLKE#TH15bR4iM+B_Sp80N+qQ3WHD929OtI3!ge6-2u^wmmv_@=}8U=>YW_&_+dbKNDRT(&B1B?u|U`J>0x<}UiYt$yK}AB=k@mONx%blea0pI z*G=t8it0z1Mf>OdN=6a1yyk6 z8SD^ql|N|RWM!2bXFEK$EhVe_J`mD3NO>qy@F8NP#2ZRY^hHB)WEj}+tXH>l> zWg`Oiu@DNE9xtXT^^+_q=}bH z>vKFuTxxw)U*~JG-g*b2`sFLqKi`{66W`HOI3rev>4@_hSp{kX{_EkZ~e@`z@#;#Lu%k|++t zl%ViAeJSCW#RG{fk^+V-E27=mQ%tls!Xo>UwPGdT#PJh8{s@UTdr0025&sAiz3!c4 zgwGnEWMav1BAvzy`RKj4sZ=-`6el7{LvmQTs+r>4XB}$^A6|>| zTKIf;0@g&HgkoN6XKvTS5RW}RM&(uwYr#?DM+ck(j&3^6Yzu&Zl$nGz#;lu#cYc^@ zx0eRn2@12+pu2Y%RP|6k_%Z9`-^Y z9;D&knQ2*D1sNcxExn6hGuHYJU7ZyX83W_Jv9O__RJF+n>3l#SRRc;NYjr_ehS9P0 z2ZIW3$yKry@y*-K;X&7uL4s;8P`L0jLf2a}(MrAfa$WI2mccF3* zYP-EdRoUwMhSx;Z%N`yo@tS;A$P|?ArEWiHe;9x}^HSzb2b)o5cd=V*Q^K5Flt3H2 zX3xW?sDYv2^#OVLRfWZ7u);T-lzhj;IAb{YfjCz2;r^rA9!~Ro1 z{a@-6&%eOv3Ab>x-_v@n>Tl_Z&r>y$5)n-aGHLiiP-h;6kbgFj8HbJBI#7lf(Rv+S zg)vt=-f_bT;96VaS6$~Mh>)JOr36BV(~D{F^tIWvu1PjBx#HHx+BdyEp6o#>DO90& z>*GvZAnZtBv)kuU>U6e^7Nz#Du;$Gk1BczU-c-?7vqx?s;IRnpo=8^t>*{e6wy@j7 z>HcG!@bh!(PLj7QXbzeghPLFpE=@<`p)!aFJ@QM8d%SKQztN}HbELU@`wtxGGSu*C?%`_$meiy)IniJd*grP8)K4bgdXJX z%kHivHvNxp@9gY6@-I@8@6ERNR&&NX>bBv(2;2OZH@&{5uDp7|82kCJN7<8fln>n> zhkUYhdZfyR9>IcO+tfK*XKZ2!rkL|fsvW!)S7M3}S3CZ=+Y`a|A_wW@T>I9g-)ZF8 za<`BJ2z*Xpc_u3?oY>+aNruh&kk5kcP)`qiqQ4f?(Q2$eAPV3SVZUm>kJqjBFRcZ;M0Sy0T6nSHn*o7IvEq8O83=1;OsT^)bB#8gU zT<{u@hBFOjqIqjP5^ePuV6~_yON^(vKf0uZ$VpN9_1!#%?PM}1!|@PhWpxd};^}J{#ru7z0-7V%x{80c-F_K|^3(C= z23^5ap=OcZ`{_%B-%#g~a@EK*s!w)xzOU&7@iLk#h?h_s`9WYAh2@vu>IMm5ObmsY z#$DEF2N4Dztb~#zX0;L$wV*`h2W@W9Fv@*Hv@on|+(Qy1Li0Q9JkIYC*iT#_%oTyA zc7hSUZzCYtK~WH;=aL37E?+sz)VAsNXb%mal(7kQnlY%XN=B85x*Y+3dTK0izJ-`r zEaW*hSM#8O+i#Pz21dk{yr^4%9p0yYR!|rgSd9eqD} z=rkX8D7?~NI5W**pz<`5mk@1pj#!u2F|9KQ8W@n!M%nIyQ&<^g2a+BgXE@b(#qB_g zWL3sJmuL%W_So_X`wj3?+1NA%YJ?E({O9;(g$RQg?LlIrK$TgnP@+9RGJ4^M6)^|6 zmio`k{No{2x+->}$ru<=8HdTL{qL*N=I2O(03ErXItTa*bs}L44G#;VlU1oG6^fU4 ze=K8fYX|x{)UWxIw{<=~-k#iVnezEYDPmc`OUlo4xH(-#F9m*SBN-gteGR|hI6Tn6 zNe+KGox^BFcuD=~<%Eg`2=?^s@PCt(uwQhPdGrFSO)0fgRplfE+wV8SAv0w&Xefvw zVZk?kF_typt?UT4DAAIKN%RN$50lL{qempGGa9-o(vm|c$?|4$z$?W*-1A0r#UwVZ zD&`>@B+8zZcqwvGPLz6%U_+MW#wc6n05SgzO^a(b`t0@C>t3A$v}(*rMn&c9y@EXw z<7C31((0pJ1>47ypuG~PxaifSj41Yqa)bCK*{r0fa|>q~yFSLGtea56na3U9)3l?a zudiRoBL?D_o7_fT7jl)p`)>yi461AJt>^b^$Q2a zK)(n3g57~UZ=<=2O##MD2YL-S@eOltu)__gGdVhffVf;bL%dUR!-0lU(1kqD%xef6 z961kaycY`14)u50<9?Tkv)f!(08`Uz&rk{|GYQ5BB5pSVO5T~BSI#rT;;CkY2VgIL&Epam&aWL8%w)l8KH3 zMVURIXcY~4oxe2x5f%EKh{e$7N&LpWXMt?kqf;qGTfQ?80c7XMQxq90d^trrP|$@* zI7v`j^VPEsIJjb8P^FteoW|$s8KP68YOfrC+;^QOyban6qWT{|wXf zwr`s4c$Jl>F$=3bQPT~d!g#EZJrr3BrnXlbNN+F&(8Kl9jTm*j(W_1@BorSv6NHS699$#yhSrwQ%xk~H9R&<~VA93c?D zlEq}$*%Qnl(xi`}i(@d7=vg3j&MAoT z(I*mdh!MFG2Rc3x5!92-@Y@5ejRqvtD*tdjlR9(e zb|42$KnlVlGe>Hm{d&Dx#s@-9Ja;H&IM}UeZf@Rg54o|g`i&!MTf2{6~u5v&n4F?Aq~ z=R6Xl9IbZs#603>9EK9xt#xVJMHKsuy{Az{t(F@^(zOwAZ@{8|JMI{O-;1gHY9x?l z3zS>^y#I;azDkU5HeEf9X3w2nmZnHPmXy(omq;>gHa@xfRR?j1VEH#?3Y z!zs&OLh${*F3AbA63-KnmrC8MMJn|P14Gryv`NhY4VPojwN)pt1{SEfjAZl{YO%g* zE39utWm-`k&}XIuc%^|5*-FOE1VX!Mp)etTZigWg7Sv_td?Q!G_%SSe@RV-^LOfjF zWYw*ydr{sP8+OJa7+De_KAdihbrq@=Kw_MGV9c>Zr4%TrbgMwDLXc3Q{f9KkJ4@JI zI|8^a1SZc>Azd`&LqdwsZL`=<*?7P{5&rH4dX6w)km!66U}*0z3KPlhPBe$gd(>66 z)O?Hs2M!OtyK-W|By?xJ$n>rw_H!7qG*WB^Vpxf|a%_%rY9jP4&@tpfT*X0VE%Yli zs0G1Dkqs+}uy-Jg+@13A{VQD+eqrK3zmF8(2&F7=$(5F_RtQG*uVKy>{F1*dA??*d%Sh&yZhalE+vw)u(U- zVIkRY?^B$(ORu$*saBe|dyKX{k18T;k-)oWtY+duf4F|`@zx7>7=*@{6BZWmu%_Qp*VkN+~KSq6@o= zHyXU%bOwXD@jvw z?qrNm9kucc?~;Uk7DB$jLJ6O@PDWGB?U2fThM*LZL)R&T$=Xx?fPRnrJ0MOuM>!dC z;4Y?eW$|ZHIo2GZR>Y9so^p9rVzQbE*2Y~HpoKw0fd2lJtSvgbb-&+bWnp+}gS{1Z z?=gH$Q#V_+yX@J=Ow--Kn%h~8gvXfq3gX0I&RH`cZR z$globH@kS*4uB$SRT1_w&1v-LV?pPk#@iykS)fM4_*8DA9Oow19Sl_2;GpFhqB+&* zD?4lwoOmKIQotZVOcnh!`9;VH_H<3o%#o}Bk9Wm36-g3J5M-^me)&h8TmJ}kc044S zUR0tlDvheEm^-+~D-sl+BK@Ov#Hqg(U~h|Gn@AM$cqHmLR~q^AOk9SM?W?CX_r_yW ztrS;GM^PB8M6jVJ;QSshf4D2*!dMEpZbSk`V)f6IkO8%^*ZFCGnUKoxNuzK~%smfD z1`7qRKxi5Wd*=lwy|Wi{_Pqi6FkKQjWwU7jOLT!`59I;eINKa@AZ?&;yMo;kfQ@1c zBO2f>^~kePzXnvon>Vy7NSV}h1Lt8eS&)S$%%K8nYtM|G==Xt*y`kP1nlLV+u?a=3 zt!f{-WmIH7_Yz^LQHm6N1t9gC0;Uy^W1?jHQn=(&m(QHe)6aZdrHL$)>w`lewC%Xt zx@D0zRDR7Q3rM{FcD=@Bg&vRvr18Ed(DX#bS?YfIT4vI&&b5f{lr<5bRt>x+MAB3b zWL0(0!#3p%($EunDdp803wLp@GtKkZJ#d49|5+BrDSX0R_@2_VAloy8`ToMtZm$ZL z`!=!>={v#&<(v$|Bfpgyv;m?42RTWT@Gn}fr55Sa{${@<=z?r8Sa41QtgiobPOrN3 zt>p*Yi}t7@DP21JYT7WJr|A7rlxF$qM4Ay*fnY{3ssdd^S$f3UURtcege8?vup)vo z|6&`_^E1u^a^&*e0~rQA<7rKla^zu6o0pXqbn;fn&<{#) zS6L@v74%)<2e};R25(?G02+FfMF<`=UQJ|ld|m3jhBGzOW$l2aO0nv#Ae|=;Cn#`_s$(xzWmZ40d$kcS7cCPHz3k9qN=tA^&m;)We2qiR5?80?P z0oa`s*;$LLFK<84;!;bTX<&npWFz@7gY617=(NUP!Xk)5=71w1z>-qA^f`2`mhCe( z-aF$mptJa4K?=r26_P-RGVE2 zudtds9ABC*qm;A(0PLxaHcb0u7gtusFzV~uMJ-8^QKFL6GXL%zw^X*kK8AmpBBnM* zIV2RlIl<6GYaWguwykh`8AEiOOH&GMx2hHC0#1khHQr?76~Z;{N9}#FDw~5O2;#0x z%R>-E@Y7z0@fXJ)QTA+ z%`Sxr?rnOfRE{|`4h&5>ku=!l)j1$420d2oF+yzJ!*o+A-F9rp1rFGBLU!|-*_rgk z6_IrWV81EK{VXEr{iVN37n7d#SG&{u@&i7-+daO$$v#tL^H#}K?GB;z$DOg|FKftU z_uaCVLAeFd+BHLW6S21uUk$JsY%GUrxUrEb?}}E50BwgI#0-hLs)$O?aLP9ub#cKg6uYVv zlq33TaP`nB?9at8D;kXFT0TdSse&5fBe8ri%r~914{rYMdLp7|A>JO$oPW_P&lv#m z#+eiIa6yf4GbB=l@<}UPd&iDy^obDHwz& z01q-Vfu&nFqJ+*|;GQ$7gbmc>jwdS|`9)EVfx;q&SSW>0s4t4i7BT)_LU0%=T>>f# zLuLYk4_(rY+Ik?O^HmVd0<2E`Uw-@4$-ha_tke~Is#cbjpGM2ML9P((yuq7H=~kK8 zt&csb`5vE!At(Km*P2`1t|?NJ%2*pl0WbHEQ0x##Oh3G1%MJDobUX@jhYf{=p)1C` z?my&FZQhMr%)BCdM6r#5V^Ff-!;YdQ&T-k5DcKgVa+z-xEP^p16mrR$x*0faAIq`Y zKjM}5tLEP*@r!;&samzjOKn~-tcI*frIr4Qhu6fsqYWu%&Ndh(>Y-cqX_RFT z45;96^>xy`t*ch;$ZLEaU!6gBn(IhlUkJ1i#83TGixW-VJMrVLDNO@`S9a237<|!^ z87*x}2~I8`7z356vK?(t%b%|+01((2$=tuMvk&Loo4tTmlV$%j3}4-~PGSDW8`CGN zB{kSD3*CV=w=a)L8PG8F5I1h@ogSovIJ4PXf_zhB!>vo=w!n+a>?KOXal^U2ZMK8r zNN~fzH-y13?}jfT_1jIa!W%RCW=!jo1V%tLpvEN#?aGTpL5?zYlqBVt0)Vc+3mn{$ z+oLh!1{na6x>wy6&F&CQeL1fguT||&x`3z(&O!93yc$j@F!FU>APNY0`-N4>q?3fP9Hw8{Q*bihyCzmP7Xv=aTj$r91G{7d9obyltNx|9eo@lo=Xl|? z9;pPf)M#I;?NBc4*t{Y}PrwuVWBXG9HNT5ccj8W*OP1r=KlqH*5@2Ouvh>%%ZA^i& zv!Mh$$)D6Qh7cZ7kFwNHD7rh`?JQJot{PPU?O{FzjaaXFW5OMlJtsTAscZ z+>By1HXKRV9qT>e{Q*Lg9NPlE>&gX4e}EemN4tvuq!lCi)fxaWZu7}zGoXyOnmin=<|A&!bl=?Tliyi47^sa*h6%|@Z z$-)K$!a1Vexkihn7Odc6C}XYKpwq#G6NszoZTy(J15UB0L9&<<(w7Y<1|OcB&Q__; zNE7P2qnK=kOsXP2e5#?K$D?wFuJC~BdpEnPeE0kmsbr`at)PhQX}jYTzZ(H?1GK>| zBwDD(rB6V}c{^-kHvr({^m2QTznX@J2~+edKM_+(_S*w@8_gRDrW?pg_{9UWrS%av zwJG?ZSOY@o4Ht>+kh%H~-xw;uO2A&~k`#J!=+_(2@8)IJYAFp`?(*)Eb_@AhnPGPh zDw5*(fdIX{i^2SaH>-BcXzGYf_om+RBtE*}Ss1{k6$UWxddV=3+Y7ZGhC3V)2z@LG za3t9H4uSbrL#X{hwSHn*_rSbmgeq#!+6+B!69nRb!`^fN>!X%q1eK=TN>L~IJ;dE8Y$5C8nkB^^9@$;$w zi4OXr9mRJUh#0lT-X=4bBB-MzWoa-R>=CEcA%`cwtt`PcXmuBRQokQx$ysN8b^&00 zr}*Wok^f-_?4xiAG3qWB*j1oEunA+I(=~rvM1hk3vmOVi{TQTk35^EVl_^-~pk1T# z9uV6L?wy)YGk&>jBdc^ydXA`V!2H{<=iTHezl_jorS{Nss&F5wP%{oQ zt!JmAg#QqXKTe(_#EK6ShKplBY67gYb{4eL-v<*&Bb%Gw;&J{#t~IVz5zhmdTLnsq zFO|ckwob{u*z6ErXs(AY`!d5kmHICC45HHCiRcJLOx?9%QDe|L;*i4y-&?P$t|jTL z_*nC3{gInVf@Vc212y>#V>OoF&z?&yr--gVZCHY==)5YJi_%IWdC?=cH_`2M3S9-x zm1Mu5;7;O!c1DUtBEtB6!C4QuhCn!Ag}QNW!HP$P8d?aafdz{+VgQ1T@Lreg>P-|6 ziv>Hl2%h?kGR})VO{-sOn;nFmBD9gxOrJ|e&j@Mx@~|owUhjwn$-%-5l zO}&(FRID;QKYO@PV!lDJO%|?DC_Z3mZq1TRIj?ln*2nv}Xn2TzCPET%)Z=!aqu}^$ zQoj3SA)=2+wz0YUUL_U6L({zsA%Kyp!~3E4>qX_!wq4oBrkN+Js4KiF=dt^Clyl?` zPCj^xepV>;J`L9@TI&#?#jDm=c)nA@^(_y%=oYsnX~5`#1r#w)$rH{Rep;HZ7!W z&v@@4B}7*1I#>dXPWh~{)>-UCe(%iLXx%sYv`08@D-<^|I?=Mb@g|d@DMP+Nt$UgU z5BJ7ZMPsJ>(N%i)CU$y!Fz2oiFG_)n#VcT4<3L7Gu=FvkM5ylKIv^g4D}5~JiDTlG z<4U(&;h004hp zLVs|$s)M}vr{ik5?bRMI3~EtXBu~cez9(0V=J+9Ssm#_N=vQRr^K-W8$L6c2ZnKtT zSZlA|DYZSv3~RS?#_kUGqV8~+u7|e#VYGSZ$=yFh&1eBcR+kv3nJVFhFe+&3&#^Z< zvjM@p#>50DOQ-MG#M1QjKgs^Ugfk3@hkR$E1LS1}~&Q)j;^lmGhEtB%~4QcE3tv&@yyb zQ9^}Z?c!V@j8tZ}%`Se!LfzX#jaE{?;?x?h)ky(@APbxO4NU?dg}~5=C6{__hWyj`ciZC@gkzk8O>$|7bK`Da04p-(wXc{t=Q_1TB|7qvy+){f^TB2 z*+$!p3jIKCEY{0LcgOhwT|-|HDRKRLy-wlBTo;iLoMvOJUJ#guug)J#{d2Cm_$;h1 zT@MnFgzYC>g}gBm@Ou|pX`YEhfk_RoX;51EQ9*5yrJi8=fo+FGrGQMYg-Hr#0AWn~ zBgP1L3q&dx%z!+LOH=ApGBa{?l=83MEx&0B@-M=#&nN{PQOwQ0<4eOR9ZIi`nWNBd zI)n+-14t(1Q@+K$QBtiP0r|d;pS&XtqkElz4ppJtavoiZm6QZ4O6;FB^{q`H*W;VN z{@m0oIqA*Fd75rZ1X*0GyoNw87)3G*7pRgj6y72tk>n5sYd#sCtDGC|` zjI3m9fmD@%qA6GgD&@t+?~pAnjaK>4k7W)QO^hj9T;bl4ib3R;*A(V!Si0SIH!$t8 zB=q7_po+!&7v(cl;oJ9@@#kLWRPWeAM2)?#(jPfDNLWz=TiqCryJoh+ZO75Sn@L<_ zCB~a7R1!hewcqkOq)%R-Z#hFni@+zHvh18! ze~FXT)gKWj)zf6x1{lVp>9|@WPcZiV&X-Y-=j*d#6JJFj@%3%g8x*n`xcu7z=enNO zO2njY%Fh)xomYfGprV*WX#+^cC`KF|SHl*4A3{+-IOY|QFt()Pn$6eIyK=l1glVu= z)nAr`cZGFtel4bG^eAkMJU2*wUUhp0m|gl-WK-LwSMEy%WjQ4VbM8YYiD0!F7UM0l zS?{mi1^%=>*GP%XWJ)K1J8b*|7z{;6nZVEt-+7bkHM1Wf?6YeUJL?wT62Y+h|(PWGs|TYO3GEA{JrFNz(MyC^Wx5(RZ| z+%1LhxVnV7Eq$tiJx;}t8{jl0Mp#`;9rgM6cy`B;`f>RY(kzi%(ER281#=4U{@Q(L zJhr8ngR-Hm%K`snIn*GNh=Wms;>+p{46A~{5|wsWVZWKjVB1Pz+@KW-mCgsq)|0JW zS#`Bn=v%f{j$>4nyYwqT77r8ABG=ZDS@X-fG-OSoX*;s+(R^Bu1GKyf^TWZs5%xkY zK{21S#_A`ae8FK#2s$eVHQpB+p&`M3}5L z(29y*!a(tTfxj4psA0I=gRX@&NmA935wELx)Kd#4Mw^s0MjHvj-o(Y_cn}3V@v7D# z7ryC(TLvt9E8pbf0%m$^!`zGwZbQ??d}Tiv>v&g)3)n)QO**LuCb85+u_G?b`Kyz)G~g8j(kngc$PkH^ z)17r1k}zdzRqYffi&A3m!5hd;kY*j1ZO?s#e3a4sW&FWL0Fl7$4K>jT*YQ!?XddIF zk2lE^n@{H8>JW%~sf}96GT^L~8|_^lJK}?Dznh`Y19Cw}B-|WfHV&Gbd5J!^Dc}5U zGCKASJyPrrxQ48keyxy--&3k^wJh<+8g#7A^>ePxDg){}_i2o=67n+dAgCN8X)@a( z^T7P|>i6Kt0UOC3F!rY6N z^{Z;B#CVxum5>RK{tsdA7@f%)Zi^;gY}>YNt79h}b!?koY}-ycM#r|(aniAEtAm@h z_C9;>d+!Z0A?=zn{=WcI53Br3L~^W1>Mf$;&!~kP-|v=%xRw47Hh*Jh+TpiQS;E} zWi-FfB7i3}$Z0;fA87DWCBbkzP4eAe&+o5mrk26$s*kn{EfJnt^X{M^9J^!$H-TN< zuzg(*I#Q>zev!zh8Ssgp-+GgafF14x6zMr3clKcbmri(g=^&7&yO^|fm*MZd0=+~c z&hB$)KdLd-ZEXLwVHab&mn46H(X6efPY;rM?e^bJLqv7`Bw&%l$YXIZ%f+1w45L}C zy9@7amec$J0OJyedKC*oU^yn?$?GiXw{tJ;Vs7tI(!wF6XEVZ+5|3>T?vu0hlX}A5 zYR|Q9!-2KA@t;SFW&k5?JzI9a($EJWkKj8b(%aJ4*Ux}Noo;=?L}qGc*C;0ZNa)1Mz89IotidJhaukVRrM_8d{m5BaFywQ?p0|^p}tF z_vcQ^SB++i(2`Xt>}Y;7=;AMGrJ7}i#{Kjd6o#>_&il>GPIjSvoD0noKdkB-xre3_ z>ht4I9k7oFOj#kl(L8bRi>Jv+{|%$VmU4gAg^HQ?GZDrmTLHD8={(2r#>+1teh`f( z0A@#*a~5aGn@zilsayB$LyEtxE1XKmU{Dl?qbDk|Z5~TmmUwPF9=^_;b=g ze4s55p@!@pyl~whY!ku`;{r$8RO*b}dE_n`7>~^!LC^w5qw2eC^oZxtwOS6}%uhG{H&p-BvZGQIrf3z(Gzq2-vPA@ivhOBS-#QgA_vA4 zIM;hhmZmE@kQIf}8M#;ka;2=2b;Pd;u!`beMK<)fg1spn_mtQzB}J9ux>M=7^7hQ_ zlM>i(LlT{W@ojbQdQls1WeKV>mWE50u7SqwtVh?xu}RA z!r|nZpH!U(jvP9Jwiy6D-oOs1- z`YBHiS?Tb@98KeT`WjdlJ-fCQ`iQf|Be4HQ7eb;WLmKrCJ(f0TIAG(zh8J?re-`J5 zk7zZ>UcmRjq)+rnbLDf8q4SplXrNO0JT~QhfOyGFX=%;cyp%G0^i;r3x(Y!cSc%Fp z@i}!cP`}b#Um+!Ab77f^q_LcNwTFRnHCA-Fffp)#FVZqCVtGt#s4mK_h&xxT=}2D* z4Wc8;4^_q@&Df)>Sdxr$kD|%k6_I=d<18MZnzCR*VP2Vhx?t6rsluXi3YaTCXE77r zgC2Odt4!{#aU|@dTaP#vV5B1A7kjkNqvn0Nh_QL1m&qSdoT}7{4ipLBuxR1^@!tb- zbjqCl$AGmp&ndz}8>gdHeA6tBoZX6#RZ{``twsciU_<0;-;-iUJrNhDzUvLRqwM0I zC3S>@gU|yzePk^r8`K`8@Ob4z4NSHfy8pK4QGVoM@(%+SJAKCXc6h+@?s^C24E}f! z|N41{$%{i$Q|Z)pIt_BHtZIj;AH-R<+q3>er2|9gxO-#5Ejf}RqB5Tosj+z619EK9 z+W)D%ZCKINWv` zia=_M7yT>qc`El6KO#@wPi3s{vsjL@N`^{7dPHaJlG}*oBPk*{ zjUMCdN=h40;K(}&s9f>K3R&*M`lFDGTJQ83Q$lk4me+oGysCap4DJHy5az)dm{v4vfvx`hV;o^9GqrM@xQI%5T+ec z02u!1nM)(&1t0>r+0sbvLD2|U{;j|NXFZ3Ln3em#3iJOcd7!x(;B1|s(n0NPCFy?9?|d_Fr|^m6y0{P4TplvcX_=ew`6yDJ6Yq(RpjXl%6Qc@SPs}Wr|t_KUfh`IXRU9?H~T#Uwz8S!(+k zUi)R{PwL#9kZ~bc{F7^An_X{Wx(>|H-34M+3}xEHAB|Uen*D4Yr6F>*$);9SL$y(A zVXk)(62KN|_4L~I_8oII|9ASqUP@3Gbzdj5mZx+q%raWLz>>O&NTj@ zXh>mjus#Yhnk@09NYCit@I+vS`2Dsu6Jmf&DJcbGyF&lYFG^|QLU!5be99a2Vn|6g zVyo}86s{&9xW?sk9^)a-(60M^=MY}Ver!p)u7~JJci$5vGJBmLW%9E@n?ntk+Ti~24Cw4A(d1e2a z(qZpwN<1kiz3_*wfA8v0h8bo0Q;BCvD$JKLF*+9LIr#5TCE~a+Irw7~N!+YSvDsq3 zvoJw(kF55dd=jp+Kc#4goy;$iJ0qMa+v)CGqQ8pl0p_??)X;H)B+#oHJo^8ljAVO1 zD7vq9MT1UV{$XhYzcZwNU!okp?D~WL4OTvL6SGn*2=Z(udU`$k!~gJiWdj>zgcKO0 zq>j%3j`L&<3_Y5~Iq`f9#D~M**TpB|EpJTMh3`-LM7%cX?Rm#_7@>qbNvydm9H!`- zXoDl;oj~8apZ3tiuHu}tY-9Eu6dAP$bOs1kY-nXMAqKuE3#3strGTVxX{RjDj)Lo% zdWnw06+)82-SD|v@{l5*kw%_R{*Ge^IBaM}{h8+mW@*k5?ery8m}_TV4b{P;E{V8P zott{$1(yMcx~#8;0t&agtDCE3aAUMsyoz9sSA9S_a4%7UDKe% zA36K1R_f$^-?m#uu_cyX%O8huLGBQ1LlymHLGF7Y=3=1iG|z{_e`hg?xgy&lRw>Y( z_5pe4&|W`0P^+9rIr3e<*AUi>1j_fjVzwO)Rx)ME$RrhaCDOv=ziP}##t3rbJac>y z>HysGe*&sxK~_r(089p8!BsH!cVUG()G%7S?>@*u69vu*>jqo4#O$ZoPC^8SZtk`QY{oJ zFQixOmNnQo@Hyu#aVF`@RKW*10vS!!T2vxe8qY1uMT&3b6s1s%dp7}(HCJ@CbW^>A7?C`5eqz;Lg$vGR&uAlv2`|a z|28NehnP}q)BM)w+RTYKYs67wx|6yz^R!8QKaLhlQ{pZs1zIn7J%GCfrHMl}(Bsaa z_$b^Ln*Niw1%?b>Pp>URzW!iVOciJ!=jH%VO41SHD>EjBUR);T~e;05h3|E5-iEVaadj}2;!JcsO zXYduuZ`w^2azeU?2jK>Ko85Eez)V~77`f%jZLdquUxkI*@|l11upVOEtI=TlMu+|8 zG|15lEyGs8#y5wVdd*aMi#*T$<1~0)h1v%s3pefAia3|e$f!HkU>vu+-rOi9U!(GY zjq*7n?2zBQDf9Vp#4HEZk^!8j_aAi8j|f44X||wvQl~#_+A(DE*g@3AmNh#Zom-1?Hmm7iI)%}YSAvy-94>`8a z82l96Z&g-ptA25_?Qn-B9#UPgm5iERv+c_ous(>iR4BSEaY(viP6Q6q>{qNn0-(ZAsw3clSz`B@;jK!hKTc#E@QP8Dq` zL4?{~ED#q(FF)wyhBZ6q!M)|(=5bGhUD@Z}K^yW0>G8363;CgKod&E)1=8NUxj&@72l;Qf zL%V~pe{9VhIi66tM!Ty#--QA%@0zvlW;|K9?hpW>I2&mV+~hC`zkcke)Y$Yj32ZI4 zz_Su1I)wCRnJXTFm}@?`8E6>r4z1xA$b@iUpE@2fRD~Ra;lv8T4z*yprX*>>U-xWV zo!j4^%q;xQqynO(j6Mwh>5X>$u8h;?$`$YIC^n^Y^Alw0C(d}e4X>7S! z(+nj5ykA)K-*mY&>;JHX0I;(CYn>`T$%5KXj4V8xt7_ARPC}n$D1(zi92eei*k!r0UMkV07_^((s7jCAmf%|qi1^OPeHCMk`IPH^mJC+gH0map{bdLHOn@? zF~7A@)G>6v#x?B43tP>xX>?IO8k+H2z*^2i?wmoR=jCb5NN5u5AZ>%6x%?p|5Sg-XG{Jv+lND`Xu&nokx`2f$?G=nvLC;ZdT8ynknZORpRNEDJ}!zeQm ziX}(9KYFUPgE7EWhc*Daoh#R6^j3)S1B{9ymz`_|Ls~oOK}n>fpI=70Po3iyhgSvV z1@V9uT%YpRUbBuoyTA&scOGYb0aPx#Ls8 z{lo*MIEFp*;O=sdL~S8vp@t9Ps)y5hYGFAWS$>xrlZ^~BnRI~eBG|lPtlLFwoR@i_ zQM`jVQ&B+>Ia~@*py4sg6VupVxXSXA;m0P~gFp>NJFfLu`-Pi;aWpC^KX3Yv``L^= z`*eu|Xox#kkC~n93amiJ69>m*8WoLV5YzKGgogJWu=DrG)r|%-C6+sGLD_g;c}^|W zXI0YsdH;U)?C{;&04EDiGJWeond;VKs@}i(IGe^RFP}`n?SUE*IHtGB?=4!PIKP-QcLBv4J`ZpM=kO=d&4gnI|{ zl8BBg`V(y+RJ7+CVR@@@Pwm)U(0Nb3=tV#rwGK(U3!*?pwdY-UmJX}|Wgol{yR40B ztB#nWL=p32Fp+K~-0`n#J_jok-i2AuC8T)U?J8CCRpkM~H7LUB@_gdpm9`W;%@qAQ zJ7JaY4s%}=6S4S5g)Wv>meu)wdVNx^cu6!ZG=eBFTreAZo|rwAZ=LkrJ3$28jzln; znGAB#p@buL(Q&f+-UsAcuVeQ2mMh0Vua4(GiletXtF6VX;lvTjjAoGQJjm=U0(ML~ zoP4MLxq|{+Fgt)I-<+!9P|Eq-0Fye;TlF2jTiCAzhOk;rPYacUOEfzFX#14H4@)YlqE z6wvCA?IZ!kObqi$lSKb{ctB;X3Hv~abs0!43$-pRj9)!X#qjTNpMeg8++0yekphL$ zD7*0`3Wc%o^_j4MblX=tmIyu4@Fs$41ePZtu`j~?i*z7o=MTECQ$+$&77CDd<Z|&G`ryUz9?P$&nbd&j_}Fu9@v?nj z$5B3n`o|z@9qqxYKB2S=me!?8R^@!4f(rg@`PEDysTNg6XL_jH(JN|B2Un~@RgZu( z9N`@db`Kd(2OXDOzZ&>)rJg$0EnosZBzpWkZh!Z19Q)&Z#|pTA^g!Gm1hlaWiS9iR|L?{%%{NkR|G4$00a#&BJM!KG)4f?n~Il^T@q*Rbv2eH5tnvW)!3 z`EzypF<@O;Y6%-3_ZsIWM#Gwi=4*-*>y_*ZqjTGi$71G|oM6_5$#*Ju$|R9N#Sh0uub^I za7RKiV!>F39xuOR=+4s1DL&cPQE7edY`Dj@TruW3F`IrxfI5M_Us~rmP12<^cVwTs zUpewL zWV}F@qLj1wXjwMgf1u#=k26f1o;r7Ude(^ckE^l5a`?N%6MOTL;a#tA17uMu98O~p zWjz|AqMP~r7M2M|lsmJ%>PAO-T=@wN@j!0+oJTekR~dA+vX1_(pkmDo=sZB|3Qo+$ z>ro2yFcF9l-t_Rm(uG;56tR@Ez~Cl}*@n4J5uy3#s~eRc>^UWw(SdZp`g-XY5D64_ zeuuW|{6zeQd@n|;cin|)-U<|$We4y6^=Ln9`L)^{m(*Zb8~(+y;kgbAIM4(xle7(Sfd2mxS13vVsQ;TR zo|gb%q)D`Z(F3csWS#doQNQdkkEPWSc)&rsW1EepxgBk4t86G!_Jw7Whgc8^iMEM5n%K%&&U@qe zyt%7Z>v9daRxyb2{m%04^}ybf0d3CdSfUmizd0DQ2VBlj(B0wh9~`*YNHZ{VM>22- za5*%vZ*>H^3v^`4qn^AChuwQP{wA?QzQe|Es-m((23LR(KZ{+PctbLv#vgMO=GEqa zK|Shic!=yFn5?}+s6Ad9Sv0)?;!i9g=~1-HsSliJnlDV~_alz7*gxaTfJR_I#eirI7*O_C}vfGNYen z9t9Fg_kL4f&yg>7Iox7eoAYtrvc%7D;Dzd4xCt(c%8iWxrlY2mCNI^NKnhZBA00T0r8D|%H2HrmL2ftj4g{nBq?F?NgKMkUO%wSYi~6i{65uBY7h z0rw5LJdHeJ7NBL04NRlMpv>1!Uuhz!)x{-SnxK^rFtNGSy&A)m-#8`kRCj+tgI{@GF1C*csaJ=h)u%{Z^?vQ`IdH(}*gH*yd2Qk05+-{WNTxnm)16jg>cN?2|bD({}NUCK)-sjfA00+6x&@D3BbU z=1KYtUAmXC7p6Zu^sVb~gGLc_TTtk|=h{U29ZWF*Bs>$|!;56u+_vp~0Lk|mrgPF| z`zL$8s`lwUG6a%I)hpVx2#}50o9`CfhU3LRy48X@rH?V|HecQiL{7QPFYCu?9eobL zHY+upm?8`ZvlM~O3?KJRgRAj9H1kgU5vjYy6^rm{=N=EkhC_g`36DwheE+CF)B3E;WWqR#lYF5d1)q#M~-ib{ME4qigVZ~m*cunPxtVz4SK zoJt8Dg~b-qVBp8Cov5tV$%W_R@pL@SHX;bZ-*&->3}S0VG?7GbD_? zYz%Okei-ho6~c(?IO$-sb6aG@s1{}xhS`dijC;HT7=jC$mh5$A%;eit=mkaf+)Y=4 zLPlaI{g67PfkP(}W|Ak8lXiiHRNzxHkW(s*Lo5A8zZj?QwSd+juftvk0p^*VYsy}2 z$)Ihtz)XX2epn|^?83CsxSxc@Un|lZ7Z}eCt=gD0!i$m{H8^6O|-0ka#aJuBZdx!_Tc+X54qx@UqdPj#D`@mK5kwx_PCG2LRP zL4=(J%G4d&D_j{iE63`3e(TGR_nE?DI*8Ie@ZSq}n`dmXtsM=R1xbe;kpAfUL6n~P zk!l14&ije>Qsj)#x<8?LMJM30gHQdbk`SlB|6ZK^b7dgS{M}5|a`dLrn`W%-0aWM! z*KxhjG1rLu6TE8&{`*=-d{4nM7)Ua1c^oLvWV%%b?a|q zW;-IQ<|P5#BnIKz_{}$P44YkSdL4m~Z?gvsz+Vz^s4}}sD~~F-QO9k^OV?sqwu;*> z6V3xzG01cD-Iq&@* zFg!1vO}giXU&k)L;#ueXS$E|o{URn@T_B~dAXm4rAjjuR?WBt<%1IG}_KNfdvt@C_ zfK#i-sVRouK1#%+*_v<@njI5sQ5;>qS1Bs@x!@s1M74D?GBH^rR00Jou_H)SEoj$P zex?%SA$7h9K%>tWgd^6eOph_|P5Zmrnu4muoBL#yztJ?m98CrzVyNpZ1~|r1W81I2 zhV@@r%V4~k`pbnZYRwmZ7}%yfMmN=v!o@;vXC%KEe51l?PwSEVzknzfDFA;O@)sqV zW}pLLN=uXiV1To5a{MRPS*FJoc|g&|YEl?m&T!@!$?t%~vhWyv zl5*#5U1)XutXk_$d`x|CXLNAqADK5Vf1L~}A2YV$`O8WUW=)}>kwt^fr=f#KI-M68B z?isZVhQydVpb|O&`@Alk3YhQD=~AkwQ(cpLeG^kZVJ{i?2n$eZN) zOA{=ppTA!#r=u3eah*D<)9~h|2d<1^EomBtyY#o*?dHh}xT2@Ux(4&I>e_U6nI^ZT zW}&IKfTRkY((4|?gjN!)sOm@l%LOH!Z`q8 zzG^SuxC}|{REYe(mN<8iy&BzH5m}Z!ju+PeB;B+Lia1jX>A+17qWMzidZ6N#PkUVe9=y&&|LT!}iCR0HPMdihnP;R~w9Lma zfuYD4KI@R%ezoEN&O12vAs-Sg?edtp9IAi6h}1J zXrR3BD<;rYyK!G`d8Us!A-DV@VDp;*sz__Wd(&+ZD)n4j zOV=I9HaB#Ox}CP7M$jI_Hl!Q ziMKzMZWzRP=~q`D-f;98^E%ktEbb;T2tHd7P#k_Bfn_XN{VTz`Rg<0m*S76%kAh?y z9_n#e`-{7TSoyuDUkCGxe(Vo!e=RzwC6ACax#mbb_AC+odf|pfOgPMQb zXH>>aPEkEEnPh`|?Pf~iS25^xRk5KMproVG(VcC=>8^;yLTo`Yh*==uOHrv%XcYx9 zfOE%ed4(84p5`r<9CH-_B~mS;~rh?fSHz z1l$J1+jt>e0^(KUhJWZ_`C4eQ+sA_bzz|0_%J8BqZe{`qQ_#k)Yl3bxOT{gH28j8{VEPPGGngl(PlA_m50F*GaWhL25Kg_ zDhPJ5Gk^F5e^WKgiJV)2Noh~RC?WpZ0A7re1GusG$c;&0BFWkI#JlXFZ)>#6Kn7Nv zXk{XfRMkagPw`~vWgO`1clQSWI13M>Xw;9ZY*Tm!3>>3xk8+BF=KjS zqtH)Sb$~mtnxQe1u!t-c19w>rSUD7awkL}v~hq#9ls(I#^2tGcv7%im_Wb2;&aX&>ECJNV?tMeJ)x_W^9J)c=fJrD%u zMbN9flVY)G7$Qad_r+j^HCp$}fZd4UKOFYBglEuM!LA`CNqNY@4iVLK%&-&oLR+|T zz;O98oiv_=Rh@w#TBOqVVg+73{+}NN_gEbc0VC#z1Zj95T^17!0ap4DBEq{kiU#3u zxtw7}%D2XV;!iMHQXbHjG$^J2%MZ*`>8lEWYz&YBWp2?j226nhyzji!W4zQTpdmVJGP1;wW+f~F=o6O+5QL^N40 zt+V=tU*I7lWn;c!3#bg`Ka2J)Kq zlFePTt=UzQK-w2A@6XJ69{;l-(1A$BWNiewlaLgdKTbwV?U(jAe=M8?4skflG_*0w zxXevDo-8l#AL94~an<3yY1-q8(AH)Mf?iG{FmLl zs1wP4!a!RVPU_QcV>~-fx<5LmoZ2lz0%dYw=U*kqF87Dc(6oOKu>FG#v<`{hOIdsxZ;d1u5|iP0QP? z1%FC?(JyMIvTG^ZGvDW<-N@nSNhT;#sjTGpNO+MLk`Iv^ zvnTMLrvV-LKRM8?SU=6pRhUetH2*LwWe&emH1@0r%^zq~E3}Xk!DePvc&We*_!}g-EP!vgaw9%i2@Sq9JHY# zoeYb1LIYDSOo8%f*^}Qm$9vyg;IXUMv;U&vz;1T>X2JA3o#<4miI9(l=27)DlYrfL zcAYy*qY!uZg=um?4K3ox-60oJJWn+cx;yM4}p~|Oa6wREgt#yz)LWH1C16ZX5%9Z6 zPID=n^JxqE^cnm)&{OpY){*W>QWVy8Zh6Z_GDiYmtNRJJA-%G~KEJ}^&w)*ky7RM{ z@QJ#8{S>ir+n=G>h1iV!V+_h4vUWeLvrid*&3_Pf|QngRd;O1CJ{@_e>PSwNyA#6EJmv3VZ~q?r|kmyTsu(p zH+{R+OHR0m<__q_9l{b-e(2iiEUr<0_RfyVB748)7)SIxjA0;_5+w)FzXE5uYHdrs zJ3_mE&D>h4SA*i*`#0e`%|N)*m%ymVP$@1(&Yif3^oh^Pi8Y9BcIHRWq7!^t1zx<% zZB{6J;}PZoA6C_CpMARHnLlCGXT3h= zLSz1ydH)~X13Wxwu(kk#f9C*&1!GThm;xZD+1Y+sP{^EsBBT+tgF~kg#e5lZmwnv^ z%AFSQ21Wx^GuKkJ#7!x*pavzMyWtH7z|xS5DG&OQVT71%Sv92jfNthA$(7 ziWJjPeTuP+0_w}VDNSb<41FvxE=rs4Vb1H#Ex zv8y;C!IS~_IG28M6-jJxN=uqAlKlW~+|lAh8JFJVK_^H{T?E!K1Y+h?~L7p5Az8;6E7!u&~Y73 zbr4{U3~bQlA(WD^6!dy@Uk;>G*Bh73JGI^M!J(OCp>NXGw^Msx)R@!5C#WD1=O?28 zx!z3FC~r*O-} z3n}HAC=rJeC2aU!Nq`zJ#65(tL5*=MZ%*H? z9cb$qI3O0Da(}JO2nA&QTIYmM6mXsNDJorz3G%cO2>cWl5C~<`kp}}UD_~y#%Dzsf z^dBMyeCBw>Dm+{RV&FmGccC@*!Vfi4&WB6_U6z(=hY+q5&!rCz5dyo3ar#e;;^Xuk zBk0;PF@k~5XY&`dxlT_+2A1WBbnQSjU#sgf52%L5-vG5|a!krYQC~{0t0G6l?A>sj zRK`9C_IjA>I>LHNLzt9C@W5VrPvH0?z~1?rF+*}HI!oUQ-=)5nMYHD3UA+6lBYzT- zv`zc{$l06rhTa*RNKK!8C{N%G`jGn*u^SBrWj*oD`%KOsgP)45gsj{+zZ08b^4#qm zimjnG+aKY!{K5F-({?8GJVDC5PjpR>Z3dRjs6yS; zE5t4lOmFK@<7N^p)Dk^7jrwy{*&w8nqiz+TuWWm_^pGsaO%rPqpUS!ZnrG2sIA2B# zFQ&Xme9b8j`Stf9Z|RXUc3(3PItIom6gFvuc^qh&=u=>DJ|TNqTDmp#`<(InE%Q(bQoYgiH-fE3 z&8>?Z*PNVn(-1^SBEDT0hhhoPc@r@ETUdz>HPo^wQO3(87`dn{vEwHrYxYE3*y!7T z{M0^Pta2c;xe-XW1n06Z5#~EcH>SP9Lb0;0!>lwe_P~L(wYiXB-;Gy?1ShZyj%QVg z6xb7MSuwa)K4^SZZj+CeaNW(+DfPZiFNrK1CieZH+98Q8zI!4EwTb(%)aI0tD0(rD zgjy!|-ABHR=6df`5T%TndJ|jx_F~Dlc^OsS1}HidP@9#FXV@)EkJj}_r_b7^e&iqF zi|yyp>gB*-+scH8W%hTm_dlB>*Q>AeYZpWl-^Rxan$bGWe)Pm$qfn4ltX-HPr$ng! zCAf5PQ$U))*LATBrgaM$=@!~!^>V&bv+T4pT|uZ$S`u-ZVutg9u4XvqBJvQ{BLQ#b zp-XNc{HY_;V4Qwi5L6(#E3%xWc#6mw4nen?|3?FuGe65zsiT%#Zhn%Et3zbP;7xfm z=c^z?0{n2;h)rF{!HgKriIQx*{H9*qqbI6n4K4tpJud|}S??A-t(7f@!C!ZeTRU^+ zySC#=&fa0B+}7=Oz@D(c$rVjZH0t`kLR3NctI&hXOS{<+r}_$9>bJbKPlbhLJ$wSn zM-vzDc)l|>;PIErF zY3~wB0*$#nf9oV!c`gtKd&Kvlm8uip-jc#W;PnOCVq1w5)5PE z&Mz7n@!cDy{Cfx$QGtWSSoOH9jaj4G< zY{p$A&VGc+kfMi2_O8c{`_;L5!JQjG-#82{oanVgyZdYg6O{0=_t+6Ru75N2Q*D#Y z*M-~KMw}HbTPeJ|){UAhL#pJe#Xuvj#1?WL`gW<0qbVZ=|kwS4&&Ag*D|eTJG$$Q<)8E6b5%*qUCG_9#_W;!JxU zhnN3`ExLp!OC6~*$3Zj9Zozc}`#9v}dN@=} z=oBpyVJS3TMJjzp-SRx<+@92XVJYo#@F&ZaOv-o${p&*lp$RWGa>WKAN!sKi;CJf^ zmrl9}_g$qfba9~;VrSFZVhB~U{f*ix+kF%hmHs}D(mH2TMUtzjM!ep7JeXrPK31f1 zE-p}eac9hM5kG#LMmL6Hi9%OU#qIh6zcFC4Ymc7Dd8sd^C~baOGi;)F?XF8$Y#^+p zN7+~qsko4nfR)CER_JG)H#K4g5ToYQRjR(D$_k`5cUe{pmK9oH_L|b9&Jgw|%3kAN z_xl8zZ$VCROR1oqt?R>9ubws!W@;H^bKj^em<)n5)Me2{fL1xUns`;y zGhK_i*nVTnzw|px$cMTGXn@dD8hkem$tZsD@RheOxFmUXKe+-y1a}=hE$F$`o1#ZT zYOD4)L)@5geQJAz9z5(A**39{e;c;9>}6Y6vZ=h4E56TFrzQ_nm9=Kwk;%qFRp+ zdPX7|{e<|S0w1*_ju*6^{K+ zY_BXSp{1^tmg@}a_#ozi#1caA$*dPg`6q*^IDIg`HTE>2%XgB(PKfnKR zKt*XEEz>8Q&fSn@floJ-4l|ul+QQbW4QPLwpHY5byb=sO;Dj0r6Xr4yPOQW+q6OfZMnYoyRS^70fAgrLLj+Pt+74(v_TqRUZeDSa6P$pM2?S8(lI5u=* zwXJZo^k6EWLbh0R=?6JDsVE~pXg><=hAuYgc8Y6I&n8l>|5oR@T zaE9mk3Fzb|Nk)1T|63ASu~`Elpvp#=53i%_(}Xo-6xgk_y!d6FkRY8knsr!_t&{+b z`R%YKiMDP!J*tJ_epjdx-qKFW=1GBNR#wLqSI(lh4)D<^ZS|v0(oRe}ndGXH;RkvcnwBdI z(i-Ci5gBG)d-z!QMRSF5!P}T&xVocTyI)EB>yI4cqoMz}8x7 zYpKQ<_SBkZGp1+LgX>L3>2d+;G8cAoU;&gUt>y(@-lDcxU60bwM6}yEcvfH7^c?_EtRxaOiBryx+aw$2Xs0T zg$epH^HyJkX)HEJIgqD>A!9yBTR)lO>M2)249HY3T57J*KUy#2&u!epTB^g%i#F3^ zRi|o>lsX0U9QEqhuHS4!^9+UOV@bJ{;g*0iDjXwRj1gt%tgOgG`_Bg0z3qi|o$w7- zydFg+R;$QQF?&JPr}D4zn^S&dTK!mMifXMSv8v*p3t4Sx;+JZd_zkLI4xi;couVZC z6~`#?82ECVIgipdFGQ3~mc@uu(r(z7r;{j?qaLoJu}S<|yDgDzk336;Pa#CL&{e?i zGNo?6*)mj0@?U)2S6bS&a9k^|&)Mqp5snCvsy|9s9^lGsX86{;b4qQ7O!VGbimejV zG^n^&NP^|-6eNUBjMR+ zP>#_*4VB77z2(arBHe0L>ej3lPKMpS!I~m!)k=I_HJ6y159_th&=}-cWjMfAgm>g- z6|N@z(+3ftTmO3@h&-d!2xIMIamKsd^6ytHZLfSWE77qZd)5`S{_Qz&QdC+TfiF+y z5@&0YQp3~5N*y0cotNE0=_1RL2=t>3j1f4efjkFW*x_j|XZrao6U8nipHt83AqxH7 zEq>SM>T`RNQ3<%^BySDf-2^~<%t`tF=_x=vF12HM%>-+FClDt>zdWlfrRj%j<>8e| z>+x_P=SUoxNooj&`<;{JIkF{X;po@Y%h@~QfIL4eEO*A~-kt9!4Mex=cnv;|S|Q#5 zuf1F2-Gu6(M31EGx}Dmc=pQ8>NH@ciqB z`+(H>T8ZyN&<~Ou08#JmfK37zTAgTLZ=T5|+*}$`5C}?I-7iokG=~48hJ~gVvvhKH z5w$IG z*GR!2SZSySpdvikmElq{YUmsoAtklY5$XJWFTZ^W+&85 z0~mqerp+9Jl0f}zjNajAd(3IQ{6BFIBWIeIH;6T0;S_&lQ;l_1rx5-&zy5%Y88%4y zDor!gk=9L>|Nb40KjxLu%!IAQgsj<+A!_6IMagPv{Ju#}q^RxO5bgL`Rd|s`RpJU> zw%$9})3oy!SM9y`muK$v^Sw{*^S!5^hi-dMIZ1Q~ksW51wG<1<8i+Y|j1+hxRe=A% zehw!9a!{198D>z_26%RO7@Fg*A2*>{HkA?y*qkPFT5y1*wRdLKLe>Nhw-6Ej zpZ|(KxFbnCWdsDM5ilS+fLNy+%fY1He|s%fV<&8oIGY2EZ2&0(NDNB{F*LZ)Ci@i| zIc0Lt|4|Il0I(8Pq>TEe2S!Jm+$Y8r7%&JP*rMSLx2c;@$Wy;5pJgfZo47|?`dAk)f3 zqG3O?sKUXH>vc&U4+oM7M~kXjMq=yC5JBGN3ge^=K04Yn@4T%$=j94+XaoMR07C?P zA=cJL0IJB49A`Xkp!%W(2&IA(Z~f5QPifTIK!X(BI0zG}fd+R4d~gMgM2VC7poj%l z8ITd;J)r8^uyFRJnt>!4BK#v99jt4mNRj+KKeXVUkGVNG4R0xEssgAYXm0=3{RLh! z5!&lH2U)d%MflSW#1vp;E4bQ<8Z-jfCA7JE>mi9a{>+S!LKcnp2oAux7{PS2O!yUZ zx+qzLhCny|?eV4yTX?p&ET|e{Z@o`56>YL8`3%?QdvNP0MOI&LR_1Bfv){LsnU@r6 z>D%3-4*ES@NiQIlO(d6zg_UW2N!q*X$VSWpvzqCkhr4fQey{NZ_kLIPp`u* zhfNe=hhEu@yFFVfcr)wfYl_TE;oj6nF~&ks>QbHv&oV*jYGOs*C6jbtZTbO$6aRx5=_n=B>R(SGf5J5<;>npEnUNLH~@H-zPv3!_vS# z9*JaMCmJ8G*@f$^vDV1I1;yIWY4VZp7JLMZHNIXspf6{X}@FT%8HJM$MECf{(w>dR_j$ zfE?{r#O4I4NauQgp~6I!gz1xk?$wY9o2PZo`yt3LZyO{QXFe;6)rJDv1lkpzb~0f- z1jZ4q`7(lp-cQGx8~+p={Zl|_f2i7i*%%~fg|9SC9K9bNUcqsY@@rYJ+DJqTk~a& z%TV6TQ$$)yhF3Xx#+G@-lBS(1G%>~%RCr{V*uiU$Ws!DzYDE`bs&YOr^ZDz%8GKTj z8>{II4rK^X+eRv=x0E!*eZR@Oi$QM@5p@rDEALAJ=bn4+=enX`XYF>(A4^J;GHGEs zy2ZUMrYwn_EwptqYXu5F!Kcr>oCW6MD6gLRd}5^~OcZL}Pg| zzvu_>&6>BU>=A}VEOdPM+G_f#XCIZ*f1qk-cpIZ96R0DX9$sB_I{w+fqUajEV`IcA zTP48}C{Uo&?5V@DX*kbo#%?>x?B;RZ(-QT|3`PFBb=XxeozEVz*UhW_e19r5eWxhZ zdjXU4lGW0P<|E;?y%cd#&E7fljRuigV{@76tDp{Dvjs0l{u)4d1_XUWfr7&XaOluL z@8J%7!Ve=4FZ`c$!q3xx+%Mx#O|SkJC?g01OPWRy2(`%nxa$8^FqGAj6%$eV2?1m! zS^wLqie~O9B z46JD}!9UcCOOn5k|I6E_tpKTc6 zpi{$EME(R2)>4|TcJ-#3u+u@w=0jFvLV(R$E&LV|928%S1Qn_b^sjcQQXWi9jpblb z`)eTz(=FN_pjGxsWdL?A%Peku0|>i)Q?iv z*-2~>4zPlXj23BPfFukEfP|bk1rdP-OC%&hCPi=P6aXt`oDnfgMW>0rsZS&&l!3DZ z5tc-Zv1-iEob6RWQ&7MJZUV=LR4y0Db`^&Y58{lU3gL(gAq1jepp^*A02|xWhLaqF zg_a;+Zqs+f>rh#LhgYmLcXcLh}|%lUOGHdUTRlH&J`r75Uf0g-GUI2heCc~^geSe z96)uL|^H6}WJy(SZU7cEdVRM2Qq9 zcRQT8L>p&RwTN&CU^x`GcPx3h`&UWW@2zyb;)Y z8-6rYl&R>XRg{>UXstb`QE>7Xbm-mm$(kImDT+GBZo0G`T#o~f>)rByHFsV_GCAL> z=QpE*94FOx7312prPswv0900h7lVyOeiKjcT5=cDO_JCi`y@Xa@AEcIcje{B74D)> ze4pv2f=J~nIU4up@9J4o#j&h3dEN%xV>UE@643D#TI2RC%Yyx~u|X`{6IQ=>o7@wK>vf${@bXtrS&F*;PSC>K+~&Rnz&dv6EZXWx555j23|@{ zOhrTM$G|IV{^WZ9gWCSLfoEb$@+-niqv!)=hW+1Prv0Ej?6lG-5DQeM|AvkK+qko* zkwk-dfiSS8{TvjbNgIy_5ddaLgN*^_5F5op{&p}kmhdj^paZc6Ag$pf2gszPsGyW|X7{A% zJEVbRkOU&Y^oTGaqOITrs309fK48NKOa4g;kS|kt;UGS{lp4rz!b@P-aQ=vV;9vtp zkWzISErWu;jQk(rLyM3Iv}Wr_q1k^a0FHDsfm_8TqM;9gz+fQRbQt+yhpRuZYS5z^ zi-m|VP$$Rf4<5q!D20OWo?+`Lg(CZqd!=FfkX;y4AbOaOe+h@H{B0fY6Cmn$7ZMI; z5b%W{QnV2P7v_T;M)(Dm&j790Yly0410rwN7Z@{cN1xl$G4!58$KophHuN+~0`N=A zF{fYn`@P`7hb#gPrgZCL$$yVV?}WBI1vXiPjH7g9(*kPq*{;`K2G6pXKW%Yii0! zvkEN-SY!5*ecu^N2E5m37U7%S89*N?B4rp$-CLwoPJ?a?d?-!U%Gd1Bas$i100JhD z8*0jscXN=C-b2QC@z7MX$IP%zukFNVFeVjL zpVZ8>f*K$Z4kNu((R_l1u`Kb;mQ?Hd71i<%sIjxAtLR!Y#N@4eTXwqtf*aJ6t!I?w zuiRI#ESxip$;`w4MlOS`y#GZx5vU9G!-;d$tJ;an& zrBA|5 zEB?%!#QmnX>Rr)Vtj@{9qMCF5Ucg3Jho(i%m1gEB8Ah^Wc1|$24ru0UqVlth3dQfS zKFN5KIfXCjn{DQ6^JX-HdJV-Nh=h*%_qQ_2R6B;R93c3_OqNqtgcsv-Ui_=zF=cbv z$TmhVh+dBsbCcBD>!++mtjPAt;Tk-5$5F|OT+pGv1u1bmT3Y<8`Hf5t_Y{V3akKV? zyjO?aPYF(^;ZJ+AF92&(v(Pp^aW@k;bLU<;1A(pG`FNZCtK%;tZ}rh&vs7eFL*-mK zk9fY=Y=_~o-&?CuDd@Ls5@6&Wdr_yqg5#2!H!|Jf%e8qki^oY&>m*jEYZ~s87#~oK zOR4L3bG%p89DbO07A-%*&OP;rg=ZMsmIsQ>PWffIMGdMLb)T5w6F zwDNRK^g30R3!J+4bT_R!91XSPfY!{aavl-%-Ei!VUnCaYt);PxcXOa%swJ+0MKost z(N2I%Eh?w0CzO6!R0zzjnKRrf9O`Q~*7B=Y-}QFE0Q3wWja%lLRW+)|m>L$ZarYuL zj#53}jWEp+9i=%IvZt(Gg1bW$@Qe1J9sd{%YAyzD;;W%^#c)qA>2SX*_ZeiDIFN0PiHj%ZN%n z+Jd2nZg~y8v3YZ@Q%Os7YVi`t<8y3SnJU8sM)0YM!TGRgN#i(08ADhfCpDc-@uB#2 zvR&lhMU?v?@bmV#1(zhIpTbyq#hWITc9zE}FaE1A!bu}+b*`?a^_tD}+l}oJ-~;)M zLGdCDc@x4w**8e6fGqa{clkN+`hR0HM#lef;~f8S;}n<-|JPwoVP#o$d8xGTr|F*2|)aHic(flvZcRW)?_n)4lzA+IvQ zg&f>}uF?Q8Z0ikL3CKQ>J}7v>zz*=AK`8h>!?$eaXVT}5k&M#UlK0~8rX{^c^~IXE z%uFHGAjyfjSzO9X$WVrQ#>QJv(&PnCV4I05%7q1FIssK$hUNeu3$h>j;z3YEXP|a}nu%T@GUjl&8Q`^n{t5j2 zT?=3kq0V$*qo*gJM*z<*v;sssi0(!}>I9{Y4UlyFFE9i6zu*Ci8eh945Y0|tHy_kC zr$-O^RPOmv)GE*dFeyc#0%){&eNTEo()no6Q4J(602;!DgYVD<09%?{V~aYQ^NYCm z3HE1PRR-wj);Zu94=;OzPyoX}v5;)$*GFD4S1+KP3Yb>V4*okMB`AG0=!cqg=}7?S zyhn&o-7=nHMhOk9z7AL;W3>b18w(7gCk$&*B1e50CEUkGa5j13<4M4{m+N7Lp>2OXjVqA z7((ozFBo6O6kkGRnUDIAu8prSf25(`VE!Px0f-j*zvzRlI6ef~%D`X#^Yj&>09V?B z$W=404~e(@NFQ9oeeg5h`WXUHfP3yitk}JU_@n+i>R2Cg@#bd|?5*#?Z_l-%Av|8+ zbdFYFnTr_=TrN*FAOwucZ2sUaY|QX3Y$y1{ z#+e+tW2Ryxt!=zI>7~t)u#U^T3Et6oXp?gdhG`cC(D<2K1uwLdcBgSWdGOdCCW9Qa z8ZsuxiYC^8D78HxL4QNPimDNRusJVW4qRYDyFEn9ZBOY$IMn}ifvX_TioB24!mtH&JFn?sbC9?bBO(Bc5NXpUS+~b^nP=Hll*ZR8Z%e5yM;JidH@nKyj=vu#Uo!-G`z+h`WSG$R;V=Hmjl(Mk6??b1=XI-}V+`?zMbckaU(@5GOrp zfIto+eJY{~=*k0dP$et9WfcFoPmXy!IKl1Z1gs~ugU;ts4ZHGW7)`F;2rD=%?^Jlx z(Wx1bfz4zqaeZj9+Yal;E(*}@3pJ>kx0@c_FU=mo`?jT>c|=pmO7^>xE25ad@s})6 zDnK@Ocs(35pAYIFM}q;k>C?;0`R$dHtqOU_i^>gR;Uxo*I5&Wqi+!75NA%II##`l? zf#T!B_xaY1?$F1q7Lw?m?}@KE(&<|^s#QwVwLT7g2J~4h7?8TwXdNi=2q`92$ep>H^SgKrtB8uz5)4J}1+F6dPXnCiE<*#;v)aXR(8CYzq5 z%hNz@K|;F+#6L7m&lDWat9QXf8*$rc>dWP7%pjs>&&S1;_9t3xjvvCwhLc0$8a`7d zJti{e^81Lap)oi(5si>t&AW_rl*1O*-;{cmf#QHDpiJ3<^KfK};;5^9tdh_4FV*a8 z@4_5gQmWX~m*WXTDWK}rCkyQD5$9iT<9TI$Ftq3`ee%3D-T&PAJ@-oqe$GvEZLU*o zc%;K*tANKg+TP+uL2N3ZmqjB^CEve@;(us$JnAPMQ??8_oF5L+@UV>27Mh~|y`z^m z`ep#wvYyodfUaC3!UuZUw-MF;eHR#@$)kvFYXjIh=&Ep_u8yeX*JF`20wG**&Ilqr89LoqT+uag#OLzWq z%D`8YvwY*MJdoE~S2B?vMbTquzPYRm>oJ{BHuUtF?PXNrAm5`B?z~ff*pfFN`&wrN zHy`YpL*avr=#jZs@z4;%kHJ4LN_Ydf+Pr!_Za6|Z33E{{bW)_u6>kbdN$T;Rl!cmd zttX6TgbwNIkNBZwb(S&D&nagVF*T`7N4jEn*rvi>YE8C^+IA7H$AE7-ngaX7eUfmc zVQ%j0rXoZ$KCYeB#k7%j_TD({8Kvufp((o&IT;bhoHUNATi0)H<}2*I)-3>fX5-H8 zO~=37E8Hl%WxkXdtA;2f-Dcsjqc+=>B&>$6OUm6ocJAVgy=`_YbZiTF-Ji+A9Wt&x zRN$;uVd7`G^x(t;*TeXHZFf|)QxOb*SRVz_RfN4%mXUZD5QU_XzjEaFQPZZC#ZO98 zYtWX9EdmnE86>EiY~-BPyYT^v3-m4e4kQ53Ox-#@Vzp*sHO%fNO8|G?l)|O6ytEZ$ zXt!aFz9hsBMwX_o!sSctg=aFhyaWTQe8Zf&R-)?Edy>krj2OP$lUzHg3;5=SCUt|( zM={7N7Yhz=!`(a4MwH9lX&zo$6pUkgvtH=AC4*GN3G*z8oL?v%Rv^Hjq+B`1g)5u? z_a^(Mt>GMNjxnC~NCPS^y1Vkli!*f%js4~T*<^#>hzw%9d5Aybp}eBE(9l{iO*wxJkg`ZA)u$=RgcY9_hn3w}k+%=V@Xb<4{d^c5K@nHVkN>+u| z&j~JDkMkIL1Z6|ZPKwQ zupmUg-@)H0W#x)ThSUYww2(_p$T(w^80-iQ&6x7!!Hm58Y={6eRXxa^m|qo~q60qM zY>)8#r(>okBSt|cdRUk%n^G z+#M!=XeVJ+WBtPG2o=myd~bvQu^^wDXD!m%Of!UmQ$@UkEF{9lsv8;Hlc2#Z{Y(~l zNlz|wUwyb9cTTR2`y3@uR=QY3D6<2QYa5?QPV4Sp=m;PQB4rZSjY#Y!fL64PIw1I!F?e-F?T=`C*?78cb-jkulT>x?Uv1elmfr;Iqz7wk0G?Jk^nju!tUUt*J*(UDO1-)>- zMoZuRoayd~1=qKE1a|S4Ka2__8?VhEZbc#^P>qT`otZb{ep5W{I6I_#JJ7iOeaM-y zSu%is<=E=wTt3(Iw5< z7GG7m%S(n<5yV7;qZvT~(AXc$bMD3x8_&f7 zAULuG&nh}~DUoFu4vb+*ArQ+b=wQY-cy^oecYl=<2z@1&i$#aOF5dD-($@QMtJ?so zZ?i!oQ*3Sbb=XtV?h2iVqUZsYrt>@9k%RG^6|{#^t?+?S$qE~Ej|g@0*Lx{~D*uL) z6$R0HiZwr1h|KyASMAN^IyZBQX!@hCNB=RKmpZ{hPIK1;B?{iE}oM^>5 zd0t?#J|j1=4puF@wj;NEsr;LTDg!jkKnGn#q=Fn*6qSoj`>5Q)-1$oZZF9meg$3*9uoKS7sY3TiNF=jHS74%*0!( zK16JEj^yl$VfIbZ%+x-s18YuQ)Ik1vSV>yU&3>Dvt!NT~U%J z5yWrN0whCN+l^PQx|j*g)9<1U+tKh#-}D*OTqVJLd^}J&E8=$E5wTS zimg=_nksWEoq*O`BX8E7UV41`p0$|>s+`i<-bYO0{U6<`RE#?w%-}Encu27yn7$*W zSdHkp#kVB{(z&jpm#pPIq%2+zN7*C0$<27{%y3?AP}J$J1Kl@$$YY%-h$JDx?K86$ zpW|>_X(6GlqU{)gk~Rytp^CfhiV>oX6=-<#Jt6aYReR2kqOpX#jRtbfKiYa*JlD9U zM*>?S@wOKtObo)nB!kY}rj{SgYF2ajiG*Fb01Q96Yn!9uYG|3}4MWtDiM1rkH;}yn zX^GII8GHz08{Ati_Z0o>GchsAI5bLehE$b3I3kfpyAe126Q%%4x!-^|Z>?vdn+>0( z@TzjV0ej*cBT4O>9k_tUE93%YtnG(2rwUMNCsA9{e{p%3#WE5q7)ftEHOJIs*5~QARKpGO zVR(mjJ)T2zC_a{&@eZf{#zGl06abFTh6J*#^|AsLwBAQ65(<&_kfhF2hQ{gY(LJ6o z8v>zx(7gnlB=XAh0dfN@7M}!zyH;4&NW6jYhDIU+R1rXJJd1!t>?7u2`IgyJ!QpE# zciN>B@3E`}xFojjL!-B!ueA2;sbac~48fi+qc=hR*oNzU(WYavh=v$5xfar&>%pcB z&qb-32z@t{hnd~PtKAtdH$PoaSomlS4Z;-6+hpVikzy3@q_D^622Lx!tq6C8xXlq& z9Yb7P{v!Z*M<*>EufA-aL78Dg-0Q*fl?`8k>DyOh0=i`y9@Al(WXAjBxb&w!1;}n5 zg`(f9r2T9itc=GLeKB(rIgRz2=)R*W;R(4X-o&S!jUf5qsbUyjXYwUllbO}mP0c`M z^yzHskVJG)Me%@aaxHpZb|SBb*t*?-1Ne-s`7%KLcCLj__<~$)F(%~HL<_4H zb#iPWCYasZi~4Q2mO}zxg!X}9fX>ZhP>G6`(&2=-ae0~LDErkj0QQ-<8A~kMqHF?` z4n>t7^wh-jNsD~NBrRVgHAK_x;llL-m?+{#fOGohpxo>TECN8Ef`7}7KWs>i>F&yy zXaGnqNn9X#ZB}3C+RlYgFwgK5IZf3u^wa9oAc^e<|4P@afd`00+$_wLZi4qvNMX}Z zWuPq%Js9yo*tzrn^5gE|oMOp;8%=c#8S5cz()u$eI{f_Z&SWtUPIYVnJwO~v=jWC1 zZ@5gZ3lU^~iH~`phvm&vo!~Qm80sF=T)s_mx)6VtKs~s8K zEq@*?er%?c;l;fQ+0bRc+23~GT4;_wF7+KQ$3MDzX@$`bO{rR^u9&r<3?Aq5!gl`( zNqDVwL%g}rbGJccLgxyP-gA3Y=XO3!M>3o18^q^_{kL93CoS`($jp9!Uc) zWPK79X*KvQ2u8msE80{V%c(!zUwLaN@MI_6|K9w)NHYF@=?=PT54M55`Pd!Dd3X)+ zaJY+3-0xKuWLyblN{oUxEan>QiVe8-A}`|pjRUSa&F|m|NpX1V9royOtrJTs2gi8F!az1H4}FXm65I$p_1|?`^{VXrjbrK?`%u1I^;Lr6={~C6b~bAK~*Z%&|%;bHN*t}OX38N%s~r~J)seg_ii^H4c{an}$+E(xh!GmXd|XaYzMLGH)0p#^Gq~d z-h=(51z{P&C3nOrQ$5Uqw6QZIi}SBsMwBIEz6%Otc&rCURB6B~?+wb5AL5-wLwP`u zs@2qe)VC<*^b|RwL(aI8z_FeRpB7R`rPX-}m8k-CfpYi#OnO$*n|IAb{q!m|S0JTa zn(JUd)EduRTL=_sY~)`Ir|RwHUve9tWT{kA_2sEA4v#E+)#YgZ`_K)ViT-e>%YRW9 zx_ylkTd_^4(}%)nal12w|2p2$z)x;5gOWn3_k|uZkrWjZZF@TG;)O z(;mQmw3}PQ4A%Cvn@^d{_2bFOo7M@hyn^Xio777JUP=I0&b2b0WQz^41zu0|Ooh+W zeeqPP+HEV@M`erdEgU&ajYVwK-IPdD(^Pi|>FI{8qgq?<9KYX>{D1xE#u1OQWSvbT zcyX-&U2!%cQk2o{rFqOE-;5;=lclkrO>UovV-C+e1RRy;`+L;;In|5xzd=Okm%*GG z(LM&su;~C(TUiqdv$gA9e30MDB7Y=OnLd&$ zc<-UK*psgX=LaiMIH?36T+?HJO;s}G2t=D`Z-Oh9$gjO?liw)29E$U`Q-wnoO4ze+ zfb8CrWmg{PQX%-(Seu)4reshm3_pmvug}%GKSq_qae*XE^7(|-!Nj90;%C+{9K>L5 zacu#@5c=7V0PycLFwQK;^&OX|Rutw;BQ4f1SxON>1F*K$M~%P60)X%eu+4z;;u7e? zq$7X5e_(%LUVEIIDB+cIX2Kt5?^^u5WS9vVjm^v!Goy0T`2yX+qe1}}yLI;67&nF9 zQ8cOiX%0X8YgqWQA`m>RNUq&d5}tD8kwpRk<9SDgzlB0+oxD?NPus7Yt$iyA2v&Lm zWj{gV&XzLAI>czPS8ufxH{tvZ@>aiXG6BsKE~*Gt?Cn8cz||M&>{|He8RB>Laj5on z&*JoO4{zIB4SGCxCeS^b4)A)>KVKh&uC?L3D>@dP=ES#3KwHqbRP-vH5W(ck39dK5 zRx9u9y)IhNaXdpE_8^3lVzO_b$iK01!-m}2Y>NB9=|BWdQrhi@PxK>>>ESL51Uc>f zPo7CXFQyCfJvemfWP9d2T^3Rj7t4$mm-zPNw*KWkz78! z4}|#inz7$A&wfG=+y;;Qa*aO1krqZNje;pUV*eOe&Tos*qXQLvwEu5V*k%2|a*%|~Mcqux5TLxpuy&`M4o}Ed8k=Nn!q3UEsV3)De z!}pw|+e1Q=k9t=2qQHZQ~|-SyIAV4TAt=MvmvF-agi%Gpe+HE=iNHc+!aG+ z(5+ zPk?fZp7XefOZ{QPp&CF1L#*KjGqTK6QLKEgy~3 zR(Z{c=3Dc3mJVGzkYgnKcn$SRrD42oP)Qwi>ZkmX`sK8~RWf_g`h9LSw!i0>y$dG1 zI}?IB<@EA;`M18zRv;jK&WFew&79dPh29k(4@b?mz{L=lsjwCBEZkHOwyo|RWco=U za_$MQ%|U`XQO!c1@Os*^AEB&z)|q?G_K%=XcvcJxEc(}VB!C@S=E|JmUX<8C*#{w&LK5`6Njvw*vrYJgESe&oy2jb2Y)pGpXO~_ZrU>S1p z*wXJlwtdhG`BO?jOoi|km`IJC` zl@1g)f)ki=a<^?F=V|I{o#mB%=aK|m_}i9+(YV@f1JUU}x2ePh{1L9a zu;E>u{K-+HMHQX#h1OyV)TbLr6dIA{S62hkwH5aPx#qpLz;k&wHzeNOW zJAav7>RLfVIYevo<8FF`{JQabc7HLo`T_K8)}{xbOnvbPqJg6kCaHC$`0R0^+3c!HkFJ|ktX?O}d?Xusr>c_F*|pvIlZ z%H>va`pq*ZMOE4G_c$I0hLY=ul$1-W^fPZtc zfKMM2u7PSgXkM-?QYzQDB=I~v%0DxCv3JF9oxIG;7>Q! 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 diff --git a/crypt.tex b/crypt.tex index 363ec7a..e94a7c3 100644 --- a/crypt.tex +++ b/crypt.tex @@ -1,6 +1,10 @@ \documentclass{book} \usepackage{makeidx} \usepackage{amssymb} +\usepackage{color} +\usepackage{alltt} +\usepackage{graphicx} +\usepackage{layout} \def\union{\cup} \def\intersect{\cap} \def\getsrandom{\stackrel{\rm R}{\gets}} @@ -44,17 +48,17 @@ \def\gap{\vspace{0.5ex}} \makeindex \begin{document} -\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.80} +\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.82} \author{Tom St Denis \\ Algonquin College \\ \\ -tomstdenis@yahoo.com \\ -http://libtomcrypt.iahu.ca \\ \\ +tomstdenis@iahu.ca \\ +http://libtomcrypt.org \\ \\ Phone: 1-613-836-3160\\ 111 Banning Rd \\ Kanata, Ontario \\ K2L 1C3 \\ -Canada +Canada } \maketitle \newpage @@ -66,10 +70,14 @@ pseudo-random number generators, public key cryptography (via RSA,DH or ECC/DH) routines. It is designed to compile out of the box with the GNU C Compiler (GCC) version 2.95.3 (and higher) and with MSVC version 6 in win32. +The library has been successfully tested on quite a few other platforms ranging from the ARM7TDMI in a +Gameboy Advanced to various PowerPC processors and even the MIPS processor in the PlayStation 2. Suffice it +to say the code is portable. + The library is designed so new ciphers/hashes/PRNGs can be added at runtime and the existing API (and helper API functions) will be able to use the new designs automatically. There exist self-check functions for each cipher and hash to ensure that they compile and execute to the published design specifications. The library also performs extensive parameter error checking -and will give verbose error messages. +and will give verbose error messages when possible. Essentially the library saves the time of having to implement the ciphers, hashes, prngs yourself. Typically implementing useful cryptography is an error prone business which means anything that can save considerable time and effort is a good @@ -89,11 +97,11 @@ number theory and cryptography. \subsection{What the library IS NOT for?} -The library is not designed to be in anyway an implementation of the SSL, PKCS or OpenPGP standards. The library is not -designed to be compliant with any known form of API or programming hierarchy. It is not a port of any other +The library is not designed to be in anyway an implementation of the SSL, PKCS, P1363 or OpenPGP standards. The library +is not designed to be compliant with any known form of API or programming hierarchy. It is not a port of any other library and it is not platform specific (like the MS CSP). So if you're looking to drop in some buzzword -compliant crypto this library is not for you. The library has been written from scratch to provide basic -functions as well as non-standard higher level functions. +compliant crypto library this is not for you. The library has been written from scratch to provide basic functions as +well as non-standard higher level functions. This is not to say that the library is a ``homebrew'' project. All of the symmetric ciphers and one-way hash functions conform to published test vectors. The public key functions are derived from publicly available material and the majority @@ -101,8 +109,11 @@ of the code has been reviewed by a growing community of developers. \subsubsection{Why not?} You may be asking why I didn't choose to go all out and support standards like P1363, PKCS and the whole lot. The reason -is quite simple too much money gets in the way. I just recently tried to access the P1363 draft documents and was denied (it -requires a password). If people are supposed to support these standards they had better make them more accessible. +is quite simple too much money gets in the way. When I tried to access the P1363 draft documents and was denied (it +requires a password) I realized that they're just a business anyways. See what happens is a company will sit down and +invent a ``standard''. Then they try to sell it to as many people as they can. All of a sudden this ``standard'' is +everywhere. Then the standard is updated every so often to keep people dependent. Then you become RSA. If people are +supposed to support these standards they had better make them more accessible. \section{Why did I write it?} You may be wondering, ``Tom, why did you write a crypto library. I already have one.''. Well the reason falls into @@ -122,6 +133,29 @@ know how to use Safer+ or RC6 or Serpent or ... as well. With all of the core f that can be used to make a program automatically pick between ciphers, hashes and PRNGs at runtime. That means your application can support all ciphers/hashes/prngs without changing the source code. +\subsection{Modular} +The LibTomCrypt package has also been written to be very modular. The block ciphers, one-way hashes and +pseudo-random number generators (PRNG) are all used within the API through ``descriptor'' tables which +are essentially structures with pointers to functions. While you can still call particular functions +directly (\textit{e.g. sha256\_process()}) this descriptor interface allows the developer to customize their +usage of the library. + +For example, consider a hardware platform with a specialized RNG device. Obviously one would like to tap +that for the PRNG needs within the library (\textit{e.g. making a RSA key}). All the developer has todo +is write a descriptor and the few support routines required for the device. After that the rest of the +API can make use of it without change. Similiarly imagine a few years down the road when AES2 (\textit{or whatever they call it}) is +invented. It can be added to the library and used within applications with zero modifications to the +end applications provided they are written properly. + +This flexibility within the library means it can be used with any combination of primitive algorithms and +unlike libraries like OpenSSL is not tied to direct routines. For instance, in OpenSSL there are CBC block +mode routines for every single cipher. That means every time you add or remove a cipher from the library +you have to update the associated support code as well. In LibTomCrypt the associated code (\textit{chaining modes in this case}) +are not directly tied to the ciphers. That is a new cipher can be added to the library by simply providing +the key setup, ECB decrypt and encrypt and test vector routines. After that all five chaining mode routines +can make use of the cipher right away. + + \section{License} All of the source code except for the following files have been written by the author or donated to the project @@ -129,21 +163,24 @@ under the TDCAL license: \begin{enumerate} \item aes.c - \item mpi.c \item rc2.c \item serpent.c \item safer.c \end{enumerate} ``aes.c'' and ``serpent.c'' were written by Brian Gladman (gladman@seven77.demon.co.uk). They are copyrighted works -but were both granted unrestricted usage in any project (commercial or otherwise). ``mpi.c'' was written by Michael -Fromberger (sting@linguist.dartmouth.edu). Similarly it is copyrighted work but is free for all purposes. +but were both granted unrestricted usage in any project (commercial or otherwise). ``mpi.c'' was originally written +by Michael Fromberger (sting@linguist.dartmouth.edu) but has since been replaced with my LibTomMath library. ``rc2.c'' is based on publicly available code that is not attributed to a person from the given source. ``safer.c'' was written by Richard De Moliner (demoliner@isi.ee.ethz.ch) and is public domain. The rest of the code was written either by Tom St Denis or contributed to the project under the ``Tom Doesn't Care About Licenses'' (TDCAL) license. Essentially this license grants the user unlimited distribution and usage (including -commercial usage). I assume no risk from usage of the code nor do I guarantee it works as desired or stated. +commercial usage). This means that you can use the package, you can re-distribute the package and even branch it. I +still retain ownership over the name of the package. If you want to branch the project you can use the code as a base +but you must change the name. The package is also royalty free which means you can use it in commercial products +without compensation towards the author. I assume no risk from usage of the code nor do I guarantee it works as +desired or stated. \section{Patent Disclosure} @@ -163,19 +200,16 @@ file ``libtomcrypt.a''. To install the library copy all of the ``.h'' files into your ``\#include'' path and the single libtomcrypt.a file into your library path. -With MSVC you can build the library with ``make -f makefile.vc''. You must use GNU make to build it even with MSVC -due to the limitations of the MS MAKE. +With MSVC you can build the library with ``nmake -f makefile.msvc''. This will produce a ``tomcrypt.lib'' file which +is the core library. Copy the header files into your MSVC include path and the library in the lib path (typically +under where VC98 is installed). \section{Building against the library} -To build an application against the library you obviously must first compile the library. However, an important -step is that the build options you use to build the library must be present when you build your application. For -instance if ``RC5'' is defined in the makefile when you built the library then you must ensure ``RC5'' is defined when -you build your application. - -The simplest way to work with this library is to take the makefile provided and simply add on your project to it as a -target (dependent on the library). That way you can be assured that the library and your application are in sync with -the build options you provide. +In the recent versions the build steps have changed. The build options are now stored in ``mycrypt\_custom.h'' and +no longer in the makefile. If you change a build option in that file you must re-build the library from clean to +ensure the build is intact. The perl script ``config.pl'' will help setup the custom header and a custom makefile +if you want one (the provided ``makefile'' will work with custom configs). \section{Thanks} I would like to give thanks to the following people (in no particular order) for helping me develop this project: @@ -806,7 +840,7 @@ int main(void) /* add the message */ md5_process(&md, in, strlen(in)); - /* get the hash */ + /* get the hash in out[0..15] */ md5_done(&md, out); return 0; @@ -898,11 +932,12 @@ int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outlen); \end{verbatim} -Both functions return {\bf CRYPT\_OK} on success, otherwise they return an error code. The ``hash'' parameter is +All three functions return {\bf CRYPT\_OK} on success, otherwise they return an error code. The ``hash'' parameter is the location in the descriptor table of the hash. The ``*outlen'' variable is used to keep track of the output size. You must set it to the size of your output buffer before calling the functions. When they complete succesfully they store -the length of the message digest back in it. The functions are otherwise straightforward. The ``hash\_filehandle'' function -assumes that ``in'' is an file handle opened in binary mode. It will not reset the file position after hashing the content. +the length of the message digest back in it. The functions are otherwise straightforward. The ``hash\_filehandle'' +function assumes that ``in'' is an file handle opened in binary mode. It will not reset the file position after +hashing the content. To perform the above hash with md5 the following code could be used: \begin{small} @@ -992,23 +1027,29 @@ are finished with the HMAC process you must call the following function to get t int hmac_done(hmac_state *hmac, unsigned char *hash); \end{verbatim} ``hmac'' is the HMAC state you are working with. ``hash'' is the array of octets where the HMAC code should be stored. You -must ensure that your destination array is the right size (or just make it of size MAXBLOCKSIZE to be sure). There are -two utility functions provided to make using HMACs easier todo. +must ensure that your destination array is the right size (or just make it of size MAXBLOCKSIZE to be sure). + +There are two utility functions provided to make using HMACs easier todo. They accept the key and information about the +message (file pointer, address in memory) and produce the HMAC result in one shot. These are useful if you want to avoid +calling the three step process yourself. + \begin{verbatim} int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, const unsigned char *data, unsigned long len, - unsigned char *dst); + unsigned char *dst, unsigned long *dstlen); \end{verbatim} -This will produce an HMAC code for the array of octets in ``data'' of length ``len''. The index into the hash descriptor table must be provided in ``hash'' -It uses the key from ``key'' with a key length of ``keylen''. The result is stored in the array of octets``dst''. -Similarly for files there is the following function: +This will produce an HMAC code for the array of octets in ``data'' of length ``len''. The index into the hash descriptor +table must be provided in ``hash'' it uses the key from ``key'' with a key length of ``keylen''. +The result is stored in the array of octets ``dst'' and the length in ``dstlen''. Similarly for files there is the +following function: \begin{verbatim} int hmac_file(int hash, const char *fname, const unsigned char *key, - unsigned long keylen, unsigned char *dst); + unsigned long keylen, + unsigned char *dst, unsigned long *dstlen); \end{verbatim} ``hash'' is the index into the hash descriptor table of the hash you want to use. ``fname'' is the filename to process. ``key'' -is the array of octets to use as the key. ``keylen'' is the length of the key. ``dst'' is the array of octets where the result -should be stored. +is the array of octets to use as the key. ``keylen'' is the length of the key. ``dst'' is the array of octets where the +result should be stored. To test if the HMAC code is working there is the following function: \begin{verbatim} @@ -2046,12 +2087,12 @@ int base64_decode(const unsigned char *in, unsigned long len, \end{verbatim} \section{The Multiple Precision Integer Library (MPI)} -The library comes with a copy of Michael Fromberger's\footnote{Michael J. Fromberger, sting@linguist.Thayer.dartmouth.edu} multiple -precision integer library MPI. MPI is a trivial to use ANSI C compatible large integer library. It is free for all uses and -is distributed freely. +The library comes with a copy of LibTomMath which is a multiple precision integer library written by the +author of LibTomCrypt. LibTomMath is a trivial to use ANSI C compatible large integer library which is free +for all uses and is distributed freely. -At the heart of all MPI functions is the data type ``mp\_int'' (defined in mpi.h). This data type is what will hold all large -integers. In order to use an mp\_int one must initialize it first, for example: +At the heart of all the functions is the data type ``mp\_int'' (defined in tommath.h). This data type is what +will hold all large integers. In order to use an mp\_int one must initialize it first, for example: \begin{verbatim} #include /* mycrypt.h includes mpi.h automatically */ int main(void) @@ -2065,31 +2106,28 @@ int main(void) } \end{verbatim} If you are unfamiliar with the syntax of C the \& symbol is used to pass the address of ``bignum'' to the function. All -MPI functions require the address of the parameters. To free the memory of a mp\_int use (for example): +LibTomMath functions require the address of the parameters. To free the memory of a mp\_int use (for example): \begin{verbatim} mp_clear(&bignum); \end{verbatim} -All MPI functions have the basic form of one of the following: +The functions also have the basic form of one of the following: \begin{verbatim} mp_XXX(mp_int *a); mp_XXX(mp_int *a, mp_int *b, mp_int *c); mp_XXX(mp_int *a, mp_int *b, mp_int *c, mp_int *d); \end{verbatim} -Where they perform some operation and store the result in the mp\_int variable passed on the far right. For example, to -compute $c = a + b \mbox{ }(\mbox{mod }m)$ you would call: +Where they perform some operation and store the result in the mp\_int variable passed on the far right. +For example, to compute $c = a + b \mbox{ }(\mbox{mod }m)$ you would call: \begin{verbatim} mp_addmod(&a, &b, &m, &c); \end{verbatim} -The simplest way to get a complete listing of all MPI functions is to open ``mpi.h'' and look. They're all fairly -well documented. - \subsection{Binary Forms of ``mp\_int'' Variables} -Often it is required to store a ``mp\_int'' in binary form for transport (e.g. exporting a key, packet encryption, etc.). -MPI includes two functions to help when exporting numbers: +Often it is required to store a ``mp\_int'' in binary form for transport (e.g. exporting a key, packet +encryption, etc.). LibTomMath includes two functions to help when exporting numbers: \begin{verbatim} int mp_raw_size(mp_int *num); mp_toraw(&num, buf); @@ -2135,9 +2173,8 @@ will not be able to sign or decrypt messages at all. Suppose $p$ was prime and the multi-prime RSA. Suppose $q = rs$ for two primes $r$ and $s$ then $\phi(pq) = (p - 1)(r - 1)(s - 1)$ which clearly is not equal to $(p - 1)(rs - 1)$. -These are not technically part of the MPI -library\footnote{As written by Michael Fromberger} but this is the best place to document them. To test if a ``mp\_int'' is -prime call: +These are not technically part of the LibTomMath library but this is the best place to document them. +To test if a ``mp\_int'' is prime call: \begin{verbatim} int is_prime(mp_int *N, int *result); \end{verbatim} @@ -2279,8 +2316,8 @@ or define ENDIAN\_64BITWORD when its 64-bits. If you do not define any of them which will work on all platforms. Currently the system will automatically detect GCC or MSVC on a windows platform as well as GCC on a PS2 platform. -\section{The makefile} -There are also options you can specify from the makefiles themselves. +\section{The Configure Script} +There are also options you can specify from the configure script or ``mycrypt\_config.h''. \subsubsection{X memory routines} The makefiles must define three macros denoted as XMALLOC, XCALLOC and XFREE which resolve to the name of the respective diff --git a/ctr.c b/ctr.c index 08abe1c..c633a13 100644 --- a/ctr.c +++ b/ctr.c @@ -43,6 +43,12 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { return err; } + + /* is blocklen/padlen valid? */ + if (ctr->blocklen < 0 || ctr->blocklen > (int)sizeof(ctr->ctr) || + ctr->padlen < 0 || ctr->padlen > (int)sizeof(ctr->pad)) { + return CRYPT_INVALID_ARG; + } while (len-- > 0) { /* is the pad empty? */ diff --git a/demos/hashsum.c b/demos/hashsum.c index 237467f..b0606bd 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -7,7 +7,7 @@ * more functions ;) */ -#include +#include int errno; diff --git a/demos/test.c b/demos/test.c index c94a8b3..33c143d 100644 --- a/demos/test.c +++ b/demos/test.c @@ -7,9 +7,9 @@ out the functionality of the library */ #include "timer.h" #endif -#include "../mycrypt.h" +#include -int errno; +int errnum; int @@ -128,8 +128,8 @@ ecb_tests (void) printf ("ECB tests\n"); for (x = 0; cipher_descriptor[x].name != NULL; x++) { printf (" %12s: ", cipher_descriptor[x].name); - if ((errno = cipher_descriptor[x].test ()) != CRYPT_OK) { - printf (" **failed** Reason: %s\n", error_to_string (errno)); + if ((errnum = cipher_descriptor[x].test ()) != CRYPT_OK) { + printf (" **failed** Reason: %s\n", error_to_string (errnum)); exit (-1); } else { printf ("passed\n"); @@ -154,17 +154,17 @@ cbc_tests (void) blk[x] = IV[x] = x; /* now lets start a cbc session */ - if ((errno = + if ((errnum = cbc_start (find_cipher ("blowfish"), IV, key, 16, 0, &cbc)) != CRYPT_OK) { - printf ("CBC Setup: %s\n", error_to_string (errno)); + printf ("CBC Setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets encode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = cbc_encrypt (blk + 8 * x, ct + 8 * x, &cbc)) != CRYPT_OK) { - printf ("CBC encrypt: %s\n", error_to_string (errno)); + if ((errnum = cbc_encrypt (blk + 8 * x, ct + 8 * x, &cbc)) != CRYPT_OK) { + printf ("CBC encrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -177,17 +177,17 @@ cbc_tests (void) IV[x] = x; /* now lets start a cbc session */ - if ((errno = + if ((errnum = cbc_start (find_cipher ("blowfish"), IV, key, 16, 0, &cbc)) != CRYPT_OK) { - printf ("CBC Setup: %s\n", error_to_string (errno)); + printf ("CBC Setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets decode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = cbc_decrypt (ct + 8 * x, blk + 8 * x, &cbc)) != CRYPT_OK) { - printf ("CBC decrypt: %s\n", error_to_string (errno)); + if ((errnum = cbc_decrypt (ct + 8 * x, blk + 8 * x, &cbc)) != CRYPT_OK) { + printf ("CBC decrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -240,16 +240,16 @@ ofb_tests (void) blk[x] = IV[x] = x; /* now lets start a ofb session */ - if ((errno = + if ((errnum = ofb_start (find_cipher ("cast5"), IV, key, 16, 0, &ofb)) != CRYPT_OK) { - printf ("OFB Setup: %s\n", error_to_string (errno)); + printf ("OFB Setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets encode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = ofb_encrypt (blk + 8 * x, ct + 8 * x, 8, &ofb)) != CRYPT_OK) { - printf ("OFB encrypt: %s\n", error_to_string (errno)); + if ((errnum = ofb_encrypt (blk + 8 * x, ct + 8 * x, 8, &ofb)) != CRYPT_OK) { + printf ("OFB encrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -262,16 +262,16 @@ ofb_tests (void) IV[x] = x; /* now lets start a ofb session */ - if ((errno = + if ((errnum = ofb_start (find_cipher ("cast5"), IV, key, 16, 0, &ofb)) != CRYPT_OK) { - printf ("OFB setup: %s\n", error_to_string (errno)); + printf ("OFB setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets decode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = ofb_decrypt (ct + 8 * x, blk + 8 * x, 8, &ofb)) != CRYPT_OK) { - printf ("OFB decrypt: %s\n", error_to_string (errno)); + if ((errnum = ofb_decrypt (ct + 8 * x, blk + 8 * x, 8, &ofb)) != CRYPT_OK) { + printf ("OFB decrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -307,17 +307,17 @@ cfb_tests (void) blk[x] = IV[x] = x; /* now lets start a cfb session */ - if ((errno = + if ((errnum = cfb_start (find_cipher ("blowfish"), IV, key, 16, 0, &cfb)) != CRYPT_OK) { - printf ("CFB setup: %s\n", error_to_string (errno)); + printf ("CFB setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets encode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = cfb_encrypt (blk + 8 * x, ct + 8 * x, 8, &cfb)) != CRYPT_OK) { - printf ("CFB encrypt: %s\n", error_to_string (errno)); + if ((errnum = cfb_encrypt (blk + 8 * x, ct + 8 * x, 8, &cfb)) != CRYPT_OK) { + printf ("CFB encrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -330,17 +330,17 @@ cfb_tests (void) IV[x] = x; /* now lets start a cfb session */ - if ((errno = + if ((errnum = cfb_start (find_cipher ("blowfish"), IV, key, 16, 0, &cfb)) != CRYPT_OK) { - printf ("CFB Setup: %s\n", error_to_string (errno)); + printf ("CFB Setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets decode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = cfb_decrypt (ct + 8 * x, blk + 8 * x, 8, &cfb)) != CRYPT_OK) { - printf ("CFB decrypt: %s\n", error_to_string (errno)); + if ((errnum = cfb_decrypt (ct + 8 * x, blk + 8 * x, 8, &cfb)) != CRYPT_OK) { + printf ("CFB decrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -378,17 +378,17 @@ ctr_tests (void) blk[x] = count[x] = x; /* now lets start a ctr session */ - if ((errno = + if ((errnum = ctr_start (find_cipher ("xtea"), count, key, 16, 0, &ctr)) != CRYPT_OK) { - printf ("CTR Setup: %s\n", error_to_string (errno)); + printf ("CTR Setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets encode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = ctr_encrypt (blk + 8 * x, ct + 8 * x, 8, &ctr)) != CRYPT_OK) { - printf ("CTR encrypt: %s\n", error_to_string (errno)); + if ((errnum = ctr_encrypt (blk + 8 * x, ct + 8 * x, 8, &ctr)) != CRYPT_OK) { + printf ("CTR encrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -401,17 +401,17 @@ ctr_tests (void) count[x] = x; /* now lets start a cbc session */ - if ((errno = + if ((errnum = ctr_start (find_cipher ("xtea"), count, key, 16, 0, &ctr)) != CRYPT_OK) { - printf ("CTR Setup: %s\n", error_to_string (errno)); + printf ("CTR Setup: %s\n", error_to_string (errnum)); exit (-1); } /* now lets decode 32 bytes */ for (x = 0; x < 4; x++) { - if ((errno = ctr_decrypt (ct + 8 * x, blk + 8 * x, 8, &ctr)) != CRYPT_OK) { - printf ("CTR decrypt: %s\n", error_to_string (errno)); + if ((errnum = ctr_decrypt (ct + 8 * x, blk + 8 * x, 8, &ctr)) != CRYPT_OK) { + printf ("CTR decrypt: %s\n", error_to_string (errnum)); exit (-1); } } @@ -457,10 +457,12 @@ hash_tests (void) printf ("Hash tests\n"); for (x = 0; hash_descriptor[x].name != NULL; x++) { printf (" %10s (%2d) ", hash_descriptor[x].name, hash_descriptor[x].ID); - if ((errno = hash_descriptor[x].test ()) != CRYPT_OK) - printf ("**failed** Reason: %s\n", error_to_string (errno)); - else + if ((errnum = hash_descriptor[x].test ()) != CRYPT_OK) { + printf ("**failed** Reason: %s\n", error_to_string (errnum)); + exit(-1); + } else { printf ("passed\n"); + } } } @@ -477,17 +479,17 @@ pad_test (void) /* pad the message so that random filler is placed before and after it */ y = 100; - if ((errno = + if ((errnum = rsa_pad (in, 16, out, &y, find_prng ("yarrow"), &prng)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } /* depad the message to get the original content */ memset (in, 0, sizeof (in)); x = 100; - if ((errno = rsa_depad (out, y, in, &x)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = rsa_depad (out, y, in, &x)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } @@ -516,25 +518,25 @@ rsa_test (void) /* ---- SINGLE ENCRYPT ---- */ /* encrypt a short 8 byte string */ - if ((errno = + if ((errnum = rsa_make_key (&prng, find_prng ("yarrow"), 1024 / 8, 65537, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } for (x = 0; x < 8; x++) in[x] = (unsigned char) (x + 1); y = sizeof (in); - if ((errno = rsa_exptmod (in, 8, out, &y, PK_PUBLIC, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = rsa_exptmod (in, 8, out, &y, PK_PUBLIC, &key)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } /* decrypt it */ zeromem (in, sizeof (in)); x = sizeof (out); - if ((errno = rsa_exptmod (out, y, in, &x, PK_PRIVATE, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = rsa_exptmod (out, y, in, &x, PK_PRIVATE, &key)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } @@ -551,16 +553,16 @@ rsa_test (void) for (x = 0; x < 16; x++) in[x] = x; y = sizeof (out); - if ((errno = + if ((errnum = rsa_encrypt_key (in, 16, out, &y, &prng, find_prng ("yarrow"), &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } zeromem (in, sizeof (in)); x = sizeof (in); - if ((errno = rsa_decrypt_key (out, y, in, &x, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = rsa_decrypt_key (out, y, in, &x, &key)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("RSA en/de crypt key routines: "); @@ -579,19 +581,19 @@ rsa_test (void) for (x = 0; x < 16; x++) in[x] = x; x = sizeof (in); - if ((errno = rsa_sign_hash (in, 16, out, &x, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = rsa_sign_hash (in, 16, out, &x, &key)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("RSA signed hash: %lu bytes\n", x); - if ((errno = rsa_verify_hash (out, x, in, &stat, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = rsa_verify_hash (out, x, in, &stat, &key)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("Verify hash: %s, ", stat ? "passed" : "failed"); in[0] ^= 1; - if ((errno = rsa_verify_hash (out, x, in, &stat, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = rsa_verify_hash (out, x, in, &stat, &key)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("%s\n", (!stat) ? "passed" : "failed"); @@ -612,10 +614,10 @@ rsa_test (void) for (z = 1024; z <= limit; z += 512) { t = XCLOCK (); for (tt = 0; tt < 3; tt++) { - if ((errno = + if ((errnum = rsa_make_key (&prng, find_prng ("yarrow"), z / 8, 65537, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } if (tt < 2) @@ -630,9 +632,9 @@ rsa_test (void) for (tt = 0; tt < 100; tt++) { y = sizeof (in); - if ((errno = + if ((errnum = rsa_exptmod (in, 8, out, &y, PK_PUBLIC, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } } @@ -644,9 +646,9 @@ rsa_test (void) t = XCLOCK (); for (tt = 0; tt < 100; tt++) { x = sizeof (out); - if ((errno = + if ((errnum = rsa_exptmod (out, y, in, &x, PK_PRIVATE, &key)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } } @@ -688,14 +690,14 @@ base64_test (void) x = 100; if (base64_encode (buf[0], 16, buf[1], &x) != CRYPT_OK) { - printf (" error: %s\n", error_to_string (errno)); + printf (" error: %s\n", error_to_string (errnum)); exit (-1); } printf (" encoded 16 bytes to %ld bytes...[%s]\n", x, buf[1]); memset (buf[0], 0, 100); y = 100; if (base64_decode (buf[1], x, buf[0], &y) != CRYPT_OK) { - printf (" error: %s\n", error_to_string (errno)); + printf (" error: %s\n", error_to_string (errnum)); exit (-1); } printf (" decoded %ld bytes to %ld bytes\n", x, y); @@ -726,7 +728,7 @@ time_hash (void) t1 = XCLOCK (); z = sizeof (out); y = 0; - while (XCLOCK () - t1 < (3 * XCLOCKS_PER_SEC)) { + while (XCLOCK () - t1 < (5 * XCLOCKS_PER_SEC)) { hash_memory (x, input, 4096, out, &z); hash_memory (x, input, 4096, out, &z); hash_memory (x, input, 4096, out, &z); @@ -743,7 +745,23 @@ time_hash (void) hash_memory (x, input, 4096, out, &z); hash_memory (x, input, 4096, out, &z); hash_memory (x, input, 4096, out, &z); - y += 16; + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + hash_memory (x, input, 4096, out, &z); + y += 32; } t1 = XCLOCK () - t1; printf ("%-20s: Hash at %5.2f Mbit/sec\n", hash_descriptor[x].name, @@ -825,33 +843,33 @@ dh_tests (void) dh_key usera, userb; clock_t t1; -/* if ((errno = dh_test()) != CRYPT_OK) printf("DH Error: %s\n", error_to_string(errno)); */ +/* if ((errnum = dh_test()) != CRYPT_OK) printf("DH Error: %s\n", error_to_string(errnum)); */ dh_sizes (&low, &high); printf ("DH Keys from %d to %d supported.\n", low * 8, high * 8); /* make up two keys */ - if ((errno = + if ((errnum = dh_make_key (&prng, find_prng ("yarrow"), 96, &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } - if ((errno = + if ((errnum = dh_make_key (&prng, find_prng ("yarrow"), 96, &userb)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } /* make the shared secret */ x = 4096; - if ((errno = dh_shared_secret (&usera, &userb, buf[0], &x)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = dh_shared_secret (&usera, &userb, buf[0], &x)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } y = 4096; - if ((errno = dh_shared_secret (&userb, &usera, buf[1], &y)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = dh_shared_secret (&userb, &usera, buf[1], &y)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } if (y != x) { @@ -865,20 +883,20 @@ dh_tests (void) /* now export userb */ y = 4096; - if ((errno = dh_export (buf[1], &y, PK_PUBLIC, &userb)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = dh_export (buf[1], &y, PK_PUBLIC, &userb)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } dh_free (&userb); /* import and make the shared secret again */ - if ((errno = dh_import (buf[1], y, &userb)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = dh_import (buf[1], y, &userb)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } z = 4096; - if ((errno = dh_shared_secret (&usera, &userb, buf[2], &z)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = dh_shared_secret (&usera, &userb, buf[2], &z)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } @@ -902,13 +920,13 @@ dh_tests (void) for (ii = 0; ii < (int) (sizeof (sizes) / sizeof (sizes[0])); ii++) { t1 = XCLOCK (); - for (tt = 0; tt < 50; tt++) { + for (tt = 0; tt < 5; tt++) { dh_make_key (&prng, find_prng ("yarrow"), sizes[ii], &usera); dh_free (&usera); } t1 = XCLOCK () - t1; printf ("Make dh-%d key took %f msec\n", sizes[ii] * 8, - 1000.0 * (((double) t1 / 50.0) / (double) XCLOCKS_PER_SEC)); + 1000.0 * (((double) t1 / 5.0) / (double) XCLOCKS_PER_SEC)); } } @@ -917,16 +935,16 @@ dh_tests (void) for (x = 0; x < 16; x++) buf[0][x] = x; y = sizeof (buf[1]); - if ((errno = + if ((errnum = dh_encrypt_key (buf[0], 16, buf[1], &y, &prng, find_prng ("yarrow"), find_hash ("md5"), &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } zeromem (buf[0], sizeof (buf[0])); x = sizeof (buf[0]); - if ((errno = dh_decrypt_key (buf[1], y, buf[0], &x, &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = dh_decrypt_key (buf[1], y, buf[0], &x, &usera)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("DH en/de crypt key routines: "); @@ -945,19 +963,19 @@ dh_tests (void) for (x = 0; x < 16; x++) buf[0][x] = x; x = sizeof (buf[1]); - if ((errno = + if ((errnum = dh_sign_hash (buf[0], 16, buf[1], &x, &prng, find_prng ("yarrow"), &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } if (dh_verify_hash (buf[1], x, buf[0], 16, &stat, &usera)) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } buf[0][0] ^= 1; if (dh_verify_hash (buf[1], x, buf[0], 16, &stat2, &usera)) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("dh_sign/verify_hash: %s (%d,%d), %lu\n", @@ -1002,10 +1020,10 @@ rng_tests (void) printf ("\n"); #ifdef YARROW - if ((errno = + if ((errnum = rng_make_prng (128, find_prng ("yarrow"), &prng, &callback)) != CRYPT_OK) { - printf (" starting yarrow error: %s\n", error_to_string (errno)); + printf (" starting yarrow error: %s\n", error_to_string (errnum)); exit (-1); } #endif @@ -1021,8 +1039,8 @@ ecc_tests (void) ecc_key usera, userb; clock_t t1; - if ((errno = ecc_test ()) != CRYPT_OK) { - printf ("ecc Error: %s\n", error_to_string (errno)); + if ((errnum = ecc_test ()) != CRYPT_OK) { + printf ("ecc Error: %s\n", error_to_string (errnum)); exit (-1); } @@ -1030,27 +1048,27 @@ ecc_tests (void) printf ("ecc Keys from %d to %d supported.\n", low * 8, high * 8); /* make up two keys */ - if ((errno = + if ((errnum = ecc_make_key (&prng, find_prng ("yarrow"), 24, &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } - if ((errno = + if ((errnum = ecc_make_key (&prng, find_prng ("yarrow"), 24, &userb)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } /* make the shared secret */ x = 4096; - if ((errno = ecc_shared_secret (&usera, &userb, buf[0], &x)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = ecc_shared_secret (&usera, &userb, buf[0], &x)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } y = 4096; - if ((errno = ecc_shared_secret (&userb, &usera, buf[1], &y)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = ecc_shared_secret (&userb, &usera, buf[1], &y)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } @@ -1066,22 +1084,22 @@ ecc_tests (void) /* now export userb */ y = 4096; - if ((errno = ecc_export (buf[1], &y, PK_PUBLIC, &userb)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = ecc_export (buf[1], &y, PK_PUBLIC, &userb)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } ecc_free (&userb); printf ("ECC-192 export took %ld bytes\n", y); /* import and make the shared secret again */ - if ((errno = ecc_import (buf[1], y, &userb)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = ecc_import (buf[1], y, &userb)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } z = 4096; - if ((errno = ecc_shared_secret (&usera, &userb, buf[2], &z)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = ecc_shared_secret (&usera, &userb, buf[2], &z)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } @@ -1106,10 +1124,10 @@ ecc_tests (void) for (ii = 0; ii < (int) (sizeof (sizes) / sizeof (sizes[0])); ii++) { t1 = XCLOCK (); for (tt = 0; tt < 25; tt++) { - if ((errno = + if ((errnum = ecc_make_key (&prng, find_prng ("yarrow"), sizes[ii], &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } ecc_free (&usera); @@ -1121,28 +1139,28 @@ ecc_tests (void) } /* test encrypt_key */ - ecc_make_key (&prng, find_prng ("yarrow"), 65, &usera); - for (x = 0; x < 16; x++) + ecc_make_key (&prng, find_prng ("yarrow"), 28, &usera); + for (x = 0; x < 32; x++) buf[0][x] = x; y = sizeof (buf[1]); - if ((errno = - ecc_encrypt_key (buf[0], 16, buf[1], &y, &prng, find_prng ("yarrow"), - find_hash ("md5"), &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = + ecc_encrypt_key (buf[0], 32, buf[1], &y, &prng, find_prng ("yarrow"), + find_hash ("sha256"), &usera)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } zeromem (buf[0], sizeof (buf[0])); x = sizeof (buf[0]); - if ((errno = ecc_decrypt_key (buf[1], y, buf[0], &x, &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + if ((errnum = ecc_decrypt_key (buf[1], y, buf[0], &x, &usera)) != CRYPT_OK) { + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("ECC en/de crypt key routines: "); - if (x != 16) { + if (x != 32) { printf ("Failed (length)\n"); exit (-1); } - for (x = 0; x < 16; x++) + for (x = 0; x < 32; x++) if (buf[0][x] != x) { printf ("Failed (contents)\n"); exit (-1); @@ -1152,19 +1170,19 @@ ecc_tests (void) for (x = 0; x < 16; x++) buf[0][x] = x; x = sizeof (buf[1]); - if ((errno = + if ((errnum = ecc_sign_hash (buf[0], 16, buf[1], &x, &prng, find_prng ("yarrow"), &usera)) != CRYPT_OK) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } if (ecc_verify_hash (buf[1], x, buf[0], 16, &stat, &usera)) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } buf[0][0] ^= 1; if (ecc_verify_hash (buf[1], x, buf[0], 16, &stat2, &usera)) { - printf ("Error: %s\n", error_to_string (errno)); + printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } printf ("ecc_sign/verify_hash: %s (%d,%d)\n", @@ -1374,35 +1392,35 @@ kr_display (pk_key * kr) void kr_test_makekeys (pk_key ** kr) { - if ((errno = kr_init (kr)) != CRYPT_OK) { - printf ("KR init error %s\n", error_to_string (errno)); + if ((errnum = kr_init (kr)) != CRYPT_OK) { + printf ("KR init error %s\n", error_to_string (errnum)); exit (-1); } /* make a DH key */ printf ("KR: Making DH key...\n"); - if ((errno = + if ((errnum = kr_make_key (*kr, &prng, find_prng ("yarrow"), DH_KEY, 128, "dhkey", "dh@dh.dh", "dhkey one")) != CRYPT_OK) { - printf ("Make key error: %s\n", error_to_string (errno)); + printf ("Make key error: %s\n", error_to_string (errnum)); exit (-1); } /* make a ECC key */ printf ("KR: Making ECC key...\n"); - if ((errno = + if ((errnum = kr_make_key (*kr, &prng, find_prng ("yarrow"), ECC_KEY, 20, "ecckey", "ecc@ecc.ecc", "ecckey one")) != CRYPT_OK) { - printf ("Make key error: %s\n", error_to_string (errno)); + printf ("Make key error: %s\n", error_to_string (errnum)); exit (-1); } /* make a RSA key */ printf ("KR: Making RSA key...\n"); - if ((errno = + if ((errnum = kr_make_key (*kr, &prng, find_prng ("yarrow"), RSA_KEY, 128, "rsakey", "rsa@rsa.rsa", "rsakey one")) != CRYPT_OK) { - printf ("Make key error: %s\n", error_to_string (errno)); + printf ("Make key error: %s\n", error_to_string (errnum)); exit (-1); } @@ -1426,18 +1444,18 @@ kr_test (void) for (i = 0; i < 3; i++) { len = sizeof (buf); - if ((errno = kr_export (kr, kr->ID, kr->key_type, buf, &len)) != CRYPT_OK) { - printf ("Error exporting key %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_export (kr, kr->ID, kr->key_type, buf, &len)) != CRYPT_OK) { + printf ("Error exporting key %d, %s\n", i, error_to_string (errnum)); exit (-1); } printf ("Exported key was: %lu bytes\n", len); - if ((errno = kr_del (&kr, kr->ID)) != CRYPT_OK) { - printf ("Error deleting key %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_del (&kr, kr->ID)) != CRYPT_OK) { + printf ("Error deleting key %d, %s\n", i, error_to_string (errnum)); exit (-1); } kr_display (kr); - if ((errno = kr_import (kr, buf, len)) != CRYPT_OK) { - printf ("Error importing key %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_import (kr, buf, len)) != CRYPT_OK) { + printf ("Error importing key %d, %s\n", i, error_to_string (errnum)); exit (-1); } kr_display (kr); @@ -1445,25 +1463,25 @@ kr_test (void) for (i = 0; i < 3; i++) { len = sizeof (buf); - if ((errno = kr_export (kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) { - printf ("Error exporting key %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_export (kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) { + printf ("Error exporting key %d, %s\n", i, error_to_string (errnum)); exit (-1); } printf ("Exported key was: %lu bytes\n", len); - if ((errno = kr_del (&kr, kr->ID)) != CRYPT_OK) { - printf ("Error deleting key %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_del (&kr, kr->ID)) != CRYPT_OK) { + printf ("Error deleting key %d, %s\n", i, error_to_string (errnum)); exit (-1); } kr_display (kr); - if ((errno = kr_import (kr, buf, len)) != CRYPT_OK) { - printf ("Error importing key %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_import (kr, buf, len)) != CRYPT_OK) { + printf ("Error importing key %d, %s\n", i, error_to_string (errnum)); exit (-1); } kr_display (kr); } - if ((errno = kr_clear (&kr)) != CRYPT_OK) { - printf ("Error clearing ring: %s\n", error_to_string (errno)); + if ((errnum = kr_clear (&kr)) != CRYPT_OK) { + printf ("Error clearing ring: %s\n", error_to_string (errnum)); exit (-1); } @@ -1471,29 +1489,29 @@ kr_test (void) /* TEST output to file */ #ifndef NO_FILE - if ((errno = kr_init (&kr)) != CRYPT_OK) { - printf ("KR init error %s\n", error_to_string (errno)); + if ((errnum = kr_init (&kr)) != CRYPT_OK) { + printf ("KR init error %s\n", error_to_string (errnum)); exit (-1); } kr_test_makekeys (&kr); /* save to file */ f = fopen ("ring.dat", "wb"); - if ((errno = kr_save (kr, f, NULL)) != CRYPT_OK) { - printf ("kr_save error %s\n", error_to_string (errno)); + if ((errnum = kr_save (kr, f, NULL)) != CRYPT_OK) { + printf ("kr_save error %s\n", error_to_string (errnum)); exit (-1); } fclose (f); /* delete and load */ - if ((errno = kr_clear (&kr)) != CRYPT_OK) { - printf ("clear error: %s\n", error_to_string (errno)); + if ((errnum = kr_clear (&kr)) != CRYPT_OK) { + printf ("clear error: %s\n", error_to_string (errnum)); exit (-1); } f = fopen ("ring.dat", "rb"); - if ((errno = kr_load (&kr, f, NULL)) != CRYPT_OK) { - printf ("kr_load error %s\n", error_to_string (errno)); + if ((errnum = kr_load (&kr, f, NULL)) != CRYPT_OK) { + printf ("kr_load error %s\n", error_to_string (errnum)); exit (-1); } fclose (f); @@ -1501,8 +1519,8 @@ kr_test (void) printf ("After load and save...\n"); kr_display (kr); - if ((errno = kr_clear (&kr)) != CRYPT_OK) { - printf ("clear error: %s\n", error_to_string (errno)); + if ((errnum = kr_clear (&kr)) != CRYPT_OK) { + printf ("clear error: %s\n", error_to_string (errnum)); exit (-1); } #endif @@ -1516,16 +1534,16 @@ kr_test (void) printf ("Testing a key with system %d, type %d:\t", _kr->system, _kr->key_type); len = sizeof (buf2); - if ((errno = + if ((errnum = kr_encrypt_key (kr, _kr->ID, buf, 16, buf2, &len, &prng, find_prng ("yarrow"), find_hash ("md5"))) != CRYPT_OK) { - printf ("Encrypt error, %d, %s\n", i, error_to_string (errno)); + printf ("Encrypt error, %d, %s\n", i, error_to_string (errnum)); exit (-1); } len = sizeof (buf3); - if ((errno = kr_decrypt_key (kr, buf2, buf3, &len)) != CRYPT_OK) { - printf ("decrypt error, %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_decrypt_key (kr, buf2, buf3, &len)) != CRYPT_OK) { + printf ("decrypt error, %d, %s\n", i, error_to_string (errnum)); exit (-1); } if (len != 16 || memcmp (buf3, buf, 16)) { @@ -1535,28 +1553,28 @@ kr_test (void) printf ("kr_encrypt_key passed, "); len = sizeof (buf2); - if ((errno = + if ((errnum = kr_sign_hash (kr, _kr->ID, buf, 32, buf2, &len, &prng, find_prng ("yarrow"))) != CRYPT_OK) { - printf ("kr_sign_hash failed, %i, %s\n", i, error_to_string (errno)); + printf ("kr_sign_hash failed, %i, %s\n", i, error_to_string (errnum)); exit (-1); } printf ("kr_sign_hash: "); - if ((errno = kr_verify_hash (kr, buf2, buf, 32, &stat)) != CRYPT_OK) { - printf ("kr_sign_hash failed, %i, %s\n", i, error_to_string (errno)); + if ((errnum = kr_verify_hash (kr, buf2, buf, 32, &stat)) != CRYPT_OK) { + printf ("kr_sign_hash failed, %i, %s\n", i, error_to_string (errnum)); exit (-1); } printf ("%s, ", stat ? "passed" : "failed"); buf[15] ^= 1; - if ((errno = kr_verify_hash (kr, buf2, buf, 32, &stat)) != CRYPT_OK) { - printf ("kr_sign_hash failed, %i, %s\n", i, error_to_string (errno)); + if ((errnum = kr_verify_hash (kr, buf2, buf, 32, &stat)) != CRYPT_OK) { + printf ("kr_sign_hash failed, %i, %s\n", i, error_to_string (errnum)); exit (-1); } printf ("%s\n", (!stat) ? "passed" : "failed"); buf[15] ^= 1; len = sizeof (buf); - if ((errno = + if ((errnum = kr_fingerprint (kr, _kr->ID, find_hash ("sha1"), buf, &len)) != CRYPT_OK) { printf ("kr_fingerprint failed, %i, %lu\n", i, len); @@ -1581,8 +1599,8 @@ kr_test (void) /* now export it as public and private */ len = sizeof (buf); - if ((errno = kr_export (kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) { - printf ("Error exporting key %d, %s\n", i, error_to_string (errno)); + if ((errnum = kr_export (kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) { + printf ("Error exporting key %d, %s\n", i, error_to_string (errnum)); exit (-1); } @@ -1590,8 +1608,8 @@ kr_test (void) memset (buf + len, 0, sizeof (buf) - len); len = sizeof (buf2); - if ((errno = kr_export (kr, kr->ID, PK_PRIVATE, buf2, &len)) != CRYPT_OK) { - printf ("Error exporting key %s\n", error_to_string (errno)); + if ((errnum = kr_export (kr, kr->ID, PK_PRIVATE, buf2, &len)) != CRYPT_OK) { + printf ("Error exporting key %s\n", error_to_string (errnum)); exit (-1); } @@ -1602,8 +1620,8 @@ kr_test (void) kr_clear (&kr); kr_init (&kr); kr_display (kr); - if ((errno = kr_import (kr, buf, len)) != CRYPT_OK) { - printf ("Error importing key %s\n", error_to_string (errno)); + if ((errnum = kr_import (kr, buf, len)) != CRYPT_OK) { + printf ("Error importing key %s\n", error_to_string (errnum)); exit (-1); } kr_display (kr); @@ -1612,11 +1630,11 @@ kr_test (void) for (i = 0; i < 16; i++) buf[i] = i; len = sizeof (buf3); - if ((errno = + if ((errnum = kr_encrypt_key (kr, kr->ID, buf, 16, buf3, &len, &prng, find_prng ("yarrow"), find_hash ("md5"))) != CRYPT_OK) { - printf ("Encrypt error, %d, %s\n", i, error_to_string (errno)); + printf ("Encrypt error, %d, %s\n", i, error_to_string (errnum)); exit (-1); } @@ -1624,16 +1642,16 @@ kr_test (void) kr_clear (&kr); kr_init (&kr); kr_display (kr); - if ((errno = kr_import (kr, buf2, len)) != CRYPT_OK) { - printf ("Error importing key %s\n", error_to_string (errno)); + if ((errnum = kr_import (kr, buf2, len)) != CRYPT_OK) { + printf ("Error importing key %s\n", error_to_string (errnum)); exit (-1); } kr_display (kr); /* now decrypt */ len = sizeof (buf2); - if ((errno = kr_decrypt_key (kr, buf3, buf2, &len)) != CRYPT_OK) { - printf ("decrypt error, %s\n", error_to_string (errno)); + if ((errnum = kr_decrypt_key (kr, buf3, buf2, &len)) != CRYPT_OK) { + printf ("decrypt error, %s\n", error_to_string (errnum)); exit (-1); } @@ -1697,14 +1715,14 @@ main (void) register_all_algs (); - if ((errno = yarrow_start (&prng)) != CRYPT_OK) { - printf ("yarrow_start: %s\n", error_to_string (errno)); + if ((errnum = yarrow_start (&prng)) != CRYPT_OK) { + printf ("yarrow_start: %s\n", error_to_string (errnum)); } - if ((errno = yarrow_add_entropy ("hello", 5, &prng)) != CRYPT_OK) { - printf ("yarrow_add_entropy: %s\n", error_to_string (errno)); + if ((errnum = yarrow_add_entropy ("hello", 5, &prng)) != CRYPT_OK) { + printf ("yarrow_add_entropy: %s\n", error_to_string (errnum)); } - if ((errno = yarrow_ready (&prng)) != CRYPT_OK) { - printf ("yarrow_ready: %s\n", error_to_string (errno)); + if ((errnum = yarrow_ready (&prng)) != CRYPT_OK) { + printf ("yarrow_ready: %s\n", error_to_string (errnum)); } printf (crypt_build_settings); diff --git a/demos/test.c~ b/demos/test.c~ deleted file mode 100644 index 2426dc2..0000000 --- a/demos/test.c~ +++ /dev/null @@ -1,1427 +0,0 @@ -/* This is the worst code you have ever seen written on purpose.... this code is just a big hack to test -out the functionality of the library */ - -#ifdef SONY_PS2 -#include -#include -#include "timer.h" -#endif - -#include "../mycrypt.h" - -int errno; - - -int null_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - return CRYPT_OK; -} - -void null_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) -{ - memcpy(ct, pt, 8); -} - -void null_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) -{ - memcpy(pt, ct, 8); -} - -int null_test(void) -{ - return CRYPT_OK; -} - -int null_keysize(int *desired_keysize) -{ - return CRYPT_OK; -} - -const struct _cipher_descriptor null_desc = -{ - "memcpy()", - 255, - 8, 8, 8, 1, - &null_setup, - &null_ecb_encrypt, - &null_ecb_decrypt, - &null_test, - &null_keysize -}; - - -prng_state prng; - -void store_tests(void) -{ - unsigned char buf[8]; - unsigned long L; - ulong64 LL; - - printf("LOAD32/STORE32 tests\n"); - L = 0x12345678UL; - STORE32L(L, &buf[0]); - L = 0; - LOAD32L(L, &buf[0]); - if (L != 0x12345678UL) { printf("LOAD/STORE32 Little don't work\n"); exit(-1); } - LL = CONST64(0x01020304050607); - STORE64L(LL, &buf[0]); - LL = 0; - LOAD64L(LL, &buf[0]) - if (LL != CONST64(0x01020304050607)) { printf("LOAD/STORE64 Little don't work\n"); exit(-1); } - - L = 0x12345678UL; - STORE32H(L, &buf[0]); - L = 0; - LOAD32H(L, &buf[0]); - if (L != 0x12345678UL) { printf("LOAD/STORE32 High don't work\n"); exit(-1); } - LL = CONST64(0x01020304050607); - STORE64H(LL, &buf[0]); - LL = 0; - LOAD64H(LL, &buf[0]) - if (LL != CONST64(0x01020304050607)) { printf("LOAD/STORE64 High don't work\n"); exit(-1); } -} - -void cipher_tests(void) { - int x; - - printf("Ciphers compiled in\n"); - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - printf(" %12s (%2d) Key Size: %4d to %4d, Block Size: %3d, Default # of rounds: %2d\n", cipher_descriptor[x].name, - cipher_descriptor[x].ID, - cipher_descriptor[x].min_key_length*8,cipher_descriptor[x].max_key_length*8, - cipher_descriptor[x].block_length*8, cipher_descriptor[x].default_rounds); - } - -} - -void ecb_tests(void) -{ - int x; - - printf("ECB tests\n"); - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - printf(" %12s: ", - cipher_descriptor[x].name); - if ((errno = cipher_descriptor[x].test()) != CRYPT_OK) { - printf(" **failed** Reason: %s\n", error_to_string(errno)); - exit(-1); - } else { - printf("passed\n"); - } - } -} - -#ifdef CBC -void cbc_tests(void) -{ - symmetric_CBC cbc; - int x, y; - unsigned char blk[32], ct[32], key[32], IV[32]; - const unsigned char test[] = { 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - - printf("CBC tests\n"); - /* ---- CBC ENCODING ---- */ - /* make up a block and IV */ - for (x = 0; x < 32; x++) blk[x] = IV[x] = x; - - /* now lets start a cbc session */ - if ((errno = cbc_start(find_cipher("blowfish"), IV, key, 16, 0, &cbc)) != CRYPT_OK) { - printf("CBC Setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets encode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = cbc_encrypt(blk+8*x, ct+8*x, &cbc)) != CRYPT_OK) { - printf("CBC encrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - zeromem(blk, sizeof(blk)); - - /* ---- CBC DECODING ---- */ - /* make up a IV */ - for (x = 0; x < 32; x++) IV[x] = x; - - /* now lets start a cbc session */ - if ((errno = cbc_start(find_cipher("blowfish"), IV, key, 16, 0, &cbc)) != CRYPT_OK) { - printf("CBC Setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets decode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = cbc_decrypt(ct+8*x, blk+8*x, &cbc)) != CRYPT_OK) { - printf("CBC decrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - - /* print output */ - for (x = y = 0; x < 32; x++) if (blk[x] != x) y = 1; - printf(" %s\n", y?"failed":"passed"); - - /* lets actually check the bytes */ - memset(IV, 0, 8); IV[0] = 0xFF; /* IV = FF 00 00 00 00 00 00 00 */ - memset(blk, 0, 32); blk[8] = 0xFF; /* BLK = 00 00 00 00 00 00 00 00 FF 00 00 00 00 00 00 00 */ - cbc_start(find_cipher("memcpy()"), IV, key, 8, 0, &cbc); - cbc_encrypt(blk, ct, &cbc); /* expect: FF 00 00 00 00 00 00 00 */ - cbc_encrypt(blk+8, ct+8, &cbc); /* expect: 00 00 00 00 00 00 00 00 */ - if (memcmp(ct, test, 16)) { - printf("CBC failed logical testing.\n"); - for (x = 0; x < 16; x++) printf("%02x ", ct[x]); - printf("\n"); - exit(-1); - } else { - printf("CBC passed logical testing.\n"); - } -} -#else -void cbc_tests(void) { printf("CBC not compiled in\n"); } -#endif - -#ifdef OFB -void ofb_tests(void) -{ - symmetric_OFB ofb; - int x, y; - unsigned char blk[32], ct[32], key[32], IV[32]; - - printf("OFB tests\n"); - /* ---- ofb ENCODING ---- */ - /* make up a block and IV */ - for (x = 0; x < 32; x++) blk[x] = IV[x] = x; - - /* now lets start a ofb session */ - if ((errno = ofb_start(find_cipher("cast5"), IV, key, 16, 0, &ofb)) != CRYPT_OK) { - printf("OFB Setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets encode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = ofb_encrypt(blk+8*x, ct+8*x, 8, &ofb)) != CRYPT_OK) { - printf("OFB encrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - zeromem(blk, sizeof(blk)); - - /* ---- ofb DECODING ---- */ - /* make up a IV */ - for (x = 0; x < 32; x++) IV[x] = x; - - /* now lets start a ofb session */ - if ((errno = ofb_start(find_cipher("cast5"), IV, key, 16, 0, &ofb)) != CRYPT_OK) { - printf("OFB setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets decode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = ofb_decrypt(ct+8*x, blk+8*x, 8, &ofb)) != CRYPT_OK) { - printf("OFB decrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - /* print output */ - for (x = y = 0; x < 32; x++) if (blk[x] != x) y = 1; - printf(" %s\n", y?"failed":"passed"); - if (y) exit(-1); -} -#else -void ofb_tests(void) { printf("OFB not compiled in\n"); } -#endif - -#ifdef CFB -void cfb_tests(void) -{ - symmetric_CFB cfb; - int x, y; - unsigned char blk[32], ct[32], key[32], IV[32]; - - printf("CFB tests\n"); - /* ---- cfb ENCODING ---- */ - /* make up a block and IV */ - for (x = 0; x < 32; x++) blk[x] = IV[x] = x; - - /* now lets start a cfb session */ - if ((errno = cfb_start(find_cipher("blowfish"), IV, key, 16, 0, &cfb)) != CRYPT_OK) { - printf("CFB setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets encode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = cfb_encrypt(blk+8*x, ct+8*x, 8, &cfb)) != CRYPT_OK) { - printf("CFB encrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - zeromem(blk, sizeof(blk)); - - /* ---- cfb DECODING ---- */ - /* make up ahash_descriptor[prng->yarrow.hash].hashsize IV */ - for (x = 0; x < 32; x++) IV[x] = x; - - /* now lets start a cfb session */ - if ((errno = cfb_start(find_cipher("blowfish"), IV, key, 16, 0, &cfb)) != CRYPT_OK) { - printf("CFB Setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets decode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = cfb_decrypt(ct+8*x, blk+8*x, 8, &cfb)) != CRYPT_OK) { - printf("CFB decrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - /* print output */ - for (x = y = 0; x < 32; x++) if (blk[x] != x) y = 1; - printf(" %s\n", y?"failed":"passed"); - if (y) exit(-1); -} -#else -void cfb_tests(void) { printf("CFB not compiled in\n"); } -#endif - -#ifdef CTR -void ctr_tests(void) -{ - symmetric_CTR ctr; - int x, y; - unsigned char blk[32], ct[32], key[32], count[32]; - const unsigned char test[] = { 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0 }; - - printf("CTR tests\n"); - /* ---- CTR ENCODING ---- */ - /* make up a block and IV */ - for (x = 0; x < 32; x++) blk[x] = count[x] = x; - - /* now lets start a ctr session */ - if ((errno = ctr_start(find_cipher("xtea"), count, key, 16, 0, &ctr)) != CRYPT_OK) { - printf("CTR Setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets encode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = ctr_encrypt(blk+8*x, ct+8*x, 8, &ctr)) != CRYPT_OK) { - printf("CTR encrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - zeromem(blk, sizeof(blk)); - - /* ---- CTR DECODING ---- */ - /* make up a IV */ - for (x = 0; x < 32; x++) count[x] = x; - - /* now lets start a cbc session */ - if ((errno = ctr_start(find_cipher("xtea"), count, key, 16, 0, &ctr)) != CRYPT_OK) { - printf("CTR Setup: %s\n", error_to_string(errno)); exit(-1); } - - /* now lets decode 32 bytes */ - for (x = 0; x < 4; x++) { - if ((errno = ctr_decrypt(ct+8*x, blk+8*x, 8, &ctr)) != CRYPT_OK) { - printf("CTR decrypt: %s\n", error_to_string(errno)); exit(-1); - } - } - - /* print output */ - for (x = y = 0; x < 32; x++) if (blk[x] != x) y = 1; - printf(" %s\n", y?"failed":"passed"); - if (y) exit(-1); - - /* lets actually check the bytes */ - memset(count, 0, 8); count[0] = 0xFF; /* IV = FF 00 00 00 00 00 00 00 */ - memset(blk, 0, 32); blk[9] = 2; /* BLK = 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 */ - ctr_start(find_cipher("memcpy()"), count, key, 8, 0, &ctr); - ctr_encrypt(blk, ct, 8, &ctr); /* expect: FF 00 00 00 00 00 00 00 */ - ctr_encrypt(blk+8, ct+8, 8, &ctr); /* expect: 00 03 00 00 00 00 00 00 */ - if (memcmp(ct, test, 16)) { - printf("CTR failed logical testing.\n"); - for (x = 0; x < 16; x++) printf("%02x ", ct[x]); - printf("\n"); - } else { - printf("CTR passed logical testing.\n"); - } - -} -#else -void ctr_tests(void) { printf("CTR not compiled in\n"); } -#endif - -void hash_tests(void) -{ - int x; - printf("Hash tests\n"); - for (x = 0; hash_descriptor[x].name != NULL; x++) { - printf(" %10s (%2d) ", hash_descriptor[x].name, hash_descriptor[x].ID); - if ((errno = hash_descriptor[x].test()) != CRYPT_OK) - printf("**failed** Reason: %s\n", error_to_string(errno)); - else - printf("passed\n"); - } -} - -#ifdef MRSA -void pad_test(void) -{ - unsigned char in[100], out[100]; - unsigned long x, y; - - /* make a dummy message */ - for (x = 0; x < 16; x++) in[x] = (unsigned char)x; - - /* pad the message so that random filler is placed before and after it */ - y = 100; - if ((errno = rsa_pad(in, 16, out, &y, find_prng("yarrow"), &prng)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); exit(-1); } - - /* depad the message to get the original content */ - memset(in, 0, sizeof(in)); - x = 100; - if ((errno = rsa_depad(out, y, in, &x)) != CRYPT_OK) { printf("Error: %s\n", error_to_string(errno)); exit(-1); } - - /* check outcome */ - printf("rsa_pad: "); - if (x != 16) { printf("Failed. Wrong size.\n"); exit(-1); } - for (x = 0; x < 16; x++) if (in[x] != x) { printf("Failed. Expected %02lx and got %02x.\n", x, in[x]); exit(-1); } - printf("passed.\n"); -} - -void rsa_test(void) -{ - unsigned char in[4096], out[4096]; - unsigned long x, y, z, limit; - int stat; - rsa_key key; - clock_t t; - - /* ---- SINGLE ENCRYPT ---- */ - /* encrypt a short 8 byte string */ - if ((errno = rsa_make_key(&prng, find_prng("yarrow"), 1024/8, 65537, &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); exit(-1); } - for (x = 0; x < 8; x++) in[x] = (unsigned char)(x+1); - y = sizeof(in); - if ((errno = rsa_exptmod(in, 8, out, &y, PK_PUBLIC, &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); exit(-1); } - - /* decrypt it */ - zeromem(in, sizeof(in)); - x = sizeof(out); - if ((errno = rsa_exptmod(out, y, in, &x, PK_PRIVATE, &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); exit(-1); } - - /* compare */ - printf("RSA : "); - for (x = 0; x < 8; x++) if (in[x] != (x+1)) { printf("Failed. x==%02lx, in[%ld]==%02x\n", x, x, in[x]); exit(-1); } - printf("passed.\n"); - - /* test the rsa_encrypt_key functions */ - for (x = 0; x < 16; x++) in[x] = x; - y = sizeof(out); - if ((errno = rsa_encrypt_key(in, 16, out, &y, &prng, find_prng("yarrow"), &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - zeromem(in, sizeof(in)); - x = sizeof(in); - if ((errno = rsa_decrypt_key(out, y, in, &x, &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("RSA en/de crypt key routines: "); - if (x != 16) { printf("Failed (length)\n"); exit(-1); } - for (x = 0; x < 16; x++) if (in[x] != x) { printf("Failed (contents)\n"); exit(-1); } - printf("Passed\n"); - - /* test sign_hash functions */ - for (x = 0; x < 16; x++) in[x] = x; - x = sizeof(in); - if ((errno = rsa_sign_hash(in, 16, out, &x, &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("RSA signed hash: %lu bytes\n", x); - if ((errno = rsa_verify_hash(out, x, in, &stat, &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("Verify hash: %s, ", stat?"passed":"failed"); - in[0] ^= 1; - if ((errno = rsa_verify_hash(out, x, in, &stat, &key)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("%s\n", (!stat)?"passed":"failed"); - if (stat) exit(-1); - rsa_free(&key); - - /* make a RSA key */ -#ifdef SONY_PS2_NOPE - limit = 1024; -#else - limit = 2048; -#endif - - { int tt; - - for (z = 1024; z <= limit; z += 512) { - t = XCLOCK(); - for (tt = 0; tt < 3; tt++) { - if ((errno = rsa_make_key(&prng, find_prng("yarrow"), z/8, 65537, &key)) != CRYPT_OK) { printf("Error: %s\n", error_to_string(errno)); exit(-1); } - if (tt < 2) rsa_free(&key); - } - t = XCLOCK() - t; - printf("Took %.0f ms to make a %ld-bit RSA key.\n", 1000.0 * (((double)t / 3.0) / (double)XCLOCKS_PER_SEC), z); - - /* time encryption */ - t = XCLOCK(); - - for (tt = 0; tt < 100; tt++) { - y = sizeof(in); - if ((errno = rsa_exptmod(in, 8, out, &y, PK_PUBLIC, &key)) != CRYPT_OK) { printf("Error: %s\n", error_to_string(errno)); exit(-1); } - } - t = XCLOCK() - t; - printf("Took %.0f ms to encrypt with a %ld-bit RSA key.\n", 1000.0 * (((double)t / 100.0)/ (double)XCLOCKS_PER_SEC), z); - - /* time decryption */ - t = XCLOCK(); - for (tt = 0; tt < 100; tt++) { - x = sizeof(out); - if ((errno = rsa_exptmod(out, y, in, &x, PK_PRIVATE, &key)) != CRYPT_OK) { printf("Error: %s\n", error_to_string(errno)); exit(-1); } - } - t = XCLOCK() - t; - printf("Took %.0f ms to decrypt with a %ld-bit RSA key.\n", 1000.0 * (((double)t / 100.0) / (double)XCLOCKS_PER_SEC), z); - rsa_free(&key); - } - } - - - -} -#else -void pad_test(void) { printf("MRSA not compiled in\n"); } -void rsa_test(void) { printf("MRSA not compiled in\n"); } -#endif - -#ifdef BASE64 -void base64_test(void) -{ - unsigned char buf[2][100]; - unsigned long x, y; - - printf("Base64 tests\n"); - zeromem(buf, sizeof(buf)); - for (x = 0; x < 16; x++) buf[0][x] = (unsigned char)x; - - x = 100; - if (base64_encode(buf[0], 16, buf[1], &x) != CRYPT_OK) { - printf(" error: %s\n", error_to_string(errno)); - exit(-1); - } - printf(" encoded 16 bytes to %ld bytes...[%s]\n", x, buf[1]); - memset(buf[0], 0, 100); - y = 100; - if (base64_decode(buf[1], x, buf[0], &y) != CRYPT_OK) { - printf(" error: %s\n", error_to_string(errno)); - exit(-1); - } - printf(" decoded %ld bytes to %ld bytes\n", x, y); - for (x = 0; x < 16; x++) if (buf[0][x] != x) { - printf(" **failed**\n"); - exit(-1); - } - printf(" passed\n"); -} -#else -void base64_test(void) { printf("Base64 not compiled in\n"); } -#endif - -void time_hash(void) -{ - clock_t t1; - int x, y; - unsigned long z; - unsigned char input[4096], out[MAXBLOCKSIZE]; - printf("Hash Time Trials (4KB blocks):\n"); - for (x = 0; hash_descriptor[x].name != NULL; x++) { - t1 = XCLOCK(); - z = sizeof(out); - y = 0; - while (XCLOCK() - t1 < (3 * XCLOCKS_PER_SEC)) { - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); - hash_memory(x, input, 4096, out, &z); y += 16; - } - t1 = XCLOCK() - t1; - printf("%-20s: Hash at %5.2f Mbit/sec\n", hash_descriptor[x].name, - ((8.0 * 4096.0) * ((double)y / ((double)t1 / (double)XCLOCKS_PER_SEC))) / 1000000.0); - } -} - -void time_ecb(void) -{ - clock_t t1, t2; - long x, y1, y2; - unsigned char pt[32], key[32]; - symmetric_key skey; - void (*func)(const unsigned char *, unsigned char *, symmetric_key *); - - printf("ECB Time Trials for the Symmetric Ciphers:\n"); - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - cipher_descriptor[x].setup(key, cipher_descriptor[x].min_key_length, 0, &skey); - -#define DO1 func(pt,pt,&skey); -#define DO2 DO1 DO1 -#define DO4 DO2 DO2 -#define DO8 DO4 DO4 -#define DO16 DO8 DO8 -#define DO32 DO16 DO16 -#define DO64 DO32 DO32 -#define DO128 DO64 DO64 -#define DO256 DO128 DO128 - - func = cipher_descriptor[x].ecb_encrypt; - y1 = 0; - t1 = XCLOCK(); - while (XCLOCK() - t1 < 3*XCLOCKS_PER_SEC) { - DO256; y1 += 256; - } - t1 = XCLOCK() - t1; - - func = cipher_descriptor[x].ecb_decrypt; - y2 = 0; - t2 = XCLOCK(); - while (XCLOCK() - t2 < 3*XCLOCKS_PER_SEC) { - DO256; y2 += 256; - } - t2 = XCLOCK() - t2; - printf("%-20s: Encrypt at %5.2f Mbit/sec and Decrypt at %5.2f Mbit/sec\n", - cipher_descriptor[x].name, - ((8.0 * (double)cipher_descriptor[x].block_length) * ((double)y1 / ((double)t1 / (double)XCLOCKS_PER_SEC))) / 1000000.0, - ((8.0 * (double)cipher_descriptor[x].block_length) * ((double)y2 / ((double)t2 / (double)XCLOCKS_PER_SEC))) / 1000000.0); - -#undef DO256 -#undef DO128 -#undef DO64 -#undef DO32 -#undef DO16 -#undef DO8 -#undef DO4 -#undef DO2 -#undef DO1 - } -} - -#ifdef MDH -void dh_tests(void) -{ - unsigned char buf[3][4096]; - unsigned long x, y, z; - int low, high, stat, stat2; - dh_key usera, userb; - clock_t t1; - -/* if ((errno = dh_test()) != CRYPT_OK) printf("DH Error: %s\n", error_to_string(errno)); */ - - dh_sizes(&low, &high); - printf("DH Keys from %d to %d supported.\n", low*8, high*8); - - /* make up two keys */ - if ((errno = dh_make_key(&prng, find_prng("yarrow"), 96, &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - if ((errno = dh_make_key(&prng, find_prng("yarrow"), 96, &userb)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - /* make the shared secret */ - x = 4096; - if ((errno = dh_shared_secret(&usera, &userb, buf[0], &x)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - y = 4096; - if ((errno = dh_shared_secret(&userb, &usera, buf[1], &y)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - if (y != x) { printf("DH Shared keys are not same size.\n"); exit(-1); } - if (memcmp(buf[0], buf[1], x)) { printf("DH Shared keys not same contents.\n"); exit(-1); } - - /* now export userb */ - y = 4096; - if ((errno = dh_export(buf[1], &y, PK_PUBLIC, &userb)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - dh_free(&userb); - - /* import and make the shared secret again */ - if ((errno = dh_import(buf[1], y, &userb)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - z = 4096; - if ((errno = dh_shared_secret(&usera, &userb, buf[2], &z)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - printf("DH routines: "); - if (z != x) { printf("failed. Size don't match?\n"); exit(-1); } - if (memcmp(buf[0], buf[2], x)) { printf("Failed. Content didn't match.\n"); exit(-1); } - printf("Passed\n"); - dh_free(&usera); - dh_free(&userb); - -/* time stuff */ - { - static int sizes[] = { 96, 128, 160, 192, 224, 256, 320, 384, 512 }; - int ii, tt; - - for (ii = 0; ii < (int)(sizeof(sizes)/sizeof(sizes[0])); ii++) { - t1 = XCLOCK(); - for (tt = 0; tt < 50; tt++) { - dh_make_key(&prng, find_prng("yarrow"), sizes[ii], &usera); - dh_free(&usera); - } - t1 = XCLOCK() - t1; - printf("Make dh-%d key took %f msec\n", sizes[ii] * 8, 1000.0 * (((double)t1 / 50.0) / (double)XCLOCKS_PER_SEC)); - } - } - -/* test encrypt_key */ - dh_make_key(&prng, find_prng("yarrow"), 96, &usera); - for (x = 0; x < 16; x++) buf[0][x] = x; - y = sizeof(buf[1]); - if ((errno = dh_encrypt_key(buf[0], 16, buf[1], &y, &prng, find_prng("yarrow"), find_hash("md5"), &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - zeromem(buf[0], sizeof(buf[0])); - x = sizeof(buf[0]); - if ((errno = dh_decrypt_key(buf[1], y, buf[0], &x, &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("DH en/de crypt key routines: "); - if (x != 16) { printf("Failed (length)\n"); exit(-1); } - for (x = 0; x < 16; x++) if (buf[0][x] != x) { printf("Failed (contents)\n"); exit(-1); } - printf("Passed (size %lu)\n", y); - -/* test sign_hash */ - for (x = 0; x < 16; x++) buf[0][x] = x; - x = sizeof(buf[1]); - if ((errno = dh_sign_hash(buf[0], 16, buf[1], &x, &prng, find_prng("yarrow"), &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - if (dh_verify_hash(buf[1], x, buf[0], 16, &stat, &usera)) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - buf[0][0] ^= 1; - if (dh_verify_hash(buf[1], x, buf[0], 16, &stat2, &usera)) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("dh_sign/verify_hash: %s (%d,%d), %lu\n", ((stat==1)&&(stat2==0))?"passed":"failed", stat,stat2, x); - dh_free(&usera); -} -#else -void dh_tests(void) { printf("MDH not compiled in\n"); } -#endif - -int callback_x = 0; -void callback(void) -{ - printf("%c\x08", "-\\|/"[++callback_x & 3]); -#ifndef SONY_PS2 - fflush(stdout); -#endif -} - -void rng_tests(void) -{ - unsigned char buf[16]; - clock_t t1; - int x, y; - - printf("RNG tests\n"); - t1 = XCLOCK(); - x = rng_get_bytes(buf, sizeof(buf), &callback); - t1 = XCLOCK() - t1; - printf(" %f bytes per second...", - (double)x / ((double)t1 / (double)XCLOCKS_PER_SEC)); - printf("read %d bytes.\n ", x); - for (y = 0; y < x; y++) - printf("%02x ", buf[y]); - printf("\n"); - -#ifdef YARROW - if ((errno = rng_make_prng(128, find_prng("yarrow"), &prng, &callback)) != CRYPT_OK) { - printf(" starting yarrow error: %s\n", error_to_string(errno)); - exit(-1); - } -#endif -} - -#ifdef MECC -void ecc_tests(void) -{ - unsigned char buf[4][4096]; - unsigned long x, y, z; - int stat, stat2, low, high; - ecc_key usera, userb; - clock_t t1; - - if ((errno = ecc_test()) != CRYPT_OK) { printf("ecc Error: %s\n", error_to_string(errno)); exit(-1); } - - ecc_sizes(&low, &high); - printf("ecc Keys from %d to %d supported.\n", low*8, high*8); - - /* make up two keys */ - if ((errno = ecc_make_key(&prng, find_prng("yarrow"), 24, &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - if ((errno = ecc_make_key(&prng, find_prng("yarrow"), 24, &userb)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - /* make the shared secret */ - x = 4096; - if ((errno = ecc_shared_secret(&usera, &userb, buf[0], &x)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - y = 4096; - if ((errno = ecc_shared_secret(&userb, &usera, buf[1], &y)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - if (y != x) { printf("ecc Shared keys are not same size.\n"); exit(-1); } - - if (memcmp(buf[0], buf[1], x)) { printf("ecc Shared keys not same contents.\n"); exit(-1); } - - /* now export userb */ - y = 4096; - if ((errno = ecc_export(buf[1], &y, PK_PUBLIC, &userb)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - ecc_free(&userb); - printf("ECC-192 export took %ld bytes\n", y); - - /* import and make the shared secret again */ - if ((errno = ecc_import(buf[1], y, &userb)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - z = 4096; - if ((errno = ecc_shared_secret(&usera, &userb, buf[2], &z)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - - printf("ecc routines: "); - if (z != x) { printf("failed. Size don't match?\n"); exit(-1); } - if (memcmp(buf[0], buf[2], x)) { printf("Failed. Content didn't match.\n"); exit(-1); } - printf("Passed\n"); - ecc_free(&usera); - ecc_free(&userb); - -/* time stuff */ - { - static int sizes[] = { 20, 24, 28, 32, 48, 65 }; - int ii, tt; - - for (ii = 0; ii < (int)(sizeof(sizes)/sizeof(sizes[0])); ii++) { - t1 = XCLOCK(); - for (tt = 0; tt < 25; tt++) { - if ((errno = ecc_make_key(&prng, find_prng("yarrow"), sizes[ii], &usera)) != CRYPT_OK) { printf("Error: %s\n", error_to_string(errno)); exit(-1); } - ecc_free(&usera); - } - t1 = XCLOCK() - t1; - printf("Make ECC-%d key took %f msec\n", sizes[ii]*8, 1000.0 * (((double)t1/25.0) / (double)XCLOCKS_PER_SEC)); - } - } - -/* test encrypt_key */ - ecc_make_key(&prng, find_prng("yarrow"), 65, &usera); - for (x = 0; x < 16; x++) buf[0][x] = x; - y = sizeof(buf[1]); - if ((errno = ecc_encrypt_key(buf[0], 16, buf[1], &y, &prng, find_prng("yarrow"), find_hash("md5"), &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - zeromem(buf[0], sizeof(buf[0])); - x = sizeof(buf[0]); - if ((errno = ecc_decrypt_key(buf[1], y, buf[0], &x, &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("ECC en/de crypt key routines: "); - if (x != 16) { printf("Failed (length)\n"); exit(-1); } - for (x = 0; x < 16; x++) if (buf[0][x] != x) { printf("Failed (contents)\n"); exit(-1); } - printf("Passed (size: %lu)\n", y); -/* test sign_hash */ - for (x = 0; x < 16; x++) buf[0][x] = x; - x = sizeof(buf[1]); - if ((errno = ecc_sign_hash(buf[0], 16, buf[1], &x, &prng, find_prng("yarrow"), &usera)) != CRYPT_OK) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - if (ecc_verify_hash(buf[1], x, buf[0], 16, &stat, &usera)) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - buf[0][0] ^= 1; - if (ecc_verify_hash(buf[1], x, buf[0], 16, &stat2, &usera)) { - printf("Error: %s\n", error_to_string(errno)); - exit(-1); - } - printf("ecc_sign/verify_hash: %s (%d,%d)\n", ((stat==1)&&(stat2==0))?"passed":"failed", stat,stat2); - ecc_free(&usera); -} -#else -void ecc_tests(void) { printf("MECC not compiled in\n"); } -#endif - -#ifdef GF -void gf_tests(void) -{ - gf_int a, b, c, d; - int n; - unsigned char buf[1024]; - - printf("GF tests\n"); - gf_zero(a);gf_zero(b);gf_zero(c);gf_zero(d); - - /* a == 0x18000000b */ - a[1] = 1; - a[0] = 0x8000000bUL; - - /* b == 0x012345678 */ - b[0] = 0x012345678UL; - - /* find 1/b mod a */ - gf_invmod(b,a,c); - - /* find 1/1/b mod a */ - gf_invmod(c,a,d); - - /* display them */ - printf(" %08lx %08lx\n", c[0], d[0]); - - /* store as binary string */ - n = gf_size(a); - printf(" a takes %d bytes\n", n); - gf_toraw(a, buf); - gf_readraw(a, buf, n); - printf(" a == %08lx%08lx\n", a[1], a[0]); - - /* primality testing */ - gf_zero(a); - a[0] = 0x169; - printf(" GF prime: %s, ", gf_is_prime(a)?"passed":"failed"); - a[0] = 0x168; - printf(" %s\n", gf_is_prime(a)?"failed":"passed"); - - /* test sqrt code */ - gf_zero(a); - a[1] = 0x00000001; - a[0] = 0x8000000bUL; - gf_zero(b); - b[0] = 0x12345678UL; - - gf_sqrt(b, a, c); - gf_mulmod(c, c, a, b); - printf(" (%08lx)^2 = %08lx (mod %08lx%08lx) \n", c[0], b[0], a[1], a[0]); -} -#else -void gf_tests(void) { printf("GF not compiled in\n"); } -#endif - -#ifdef MPI -void test_prime(void) -{ - unsigned char buf[1024]; - mp_int a; - int x; - - /* make a 1024 bit prime */ - mp_init(&a); - rand_prime(&a, 128, &prng, find_prng("yarrow")); - - /* dump it */ - mp_todecimal(&a, buf); - printf("1024-bit prime:\n"); - for (x = 0; x < (int)strlen(buf); ) { - printf("%c", buf[x]); - if (!(++x % 60)) printf("\\ \n"); - } - printf("\n\n"); - - mp_clear(&a); -} -#else -void test_prime(void) { printf("MPI not compiled in\n"); } -#endif - -void register_all_algs(void) -{ -#ifdef BLOWFISH - register_cipher(&blowfish_desc); -#endif -#ifdef XTEA - register_cipher(&xtea_desc); -#endif -#ifdef RC5 - register_cipher(&rc5_desc); -#endif -#ifdef RC6 - register_cipher(&rc6_desc); -#endif -#ifdef SAFERP - register_cipher(&saferp_desc); -#endif -#ifdef SERPENT - register_cipher(&serpent_desc); -#endif -#ifdef RIJNDAEL - register_cipher(&aes_desc); -#endif -#ifdef TWOFISH - register_cipher(&twofish_desc); -#endif -#ifdef SAFER - register_cipher(&safer_k64_desc); - register_cipher(&safer_sk64_desc); - register_cipher(&safer_k128_desc); - register_cipher(&safer_sk128_desc); -#endif -#ifdef RC2 - register_cipher(&rc2_desc); -#endif -#ifdef DES - register_cipher(&des_desc); - register_cipher(&des3_desc); -#endif -#ifdef CAST5 - register_cipher(&cast5_desc); -#endif -#ifdef NOEKEON - register_cipher(&noekeon_desc); -#endif - - register_cipher(&null_desc); - -#ifdef SHA256 - register_hash(&sha256_desc); -#endif -#ifdef TIGER - register_hash(&tiger_desc); -#endif -#ifdef SHA1 - register_hash(&sha1_desc); -#endif -#ifdef MD5 - register_hash(&md5_desc); -#endif -#ifdef SHA384 - register_hash(&sha384_desc); -#endif -#ifdef SHA512 - register_hash(&sha512_desc); -#endif -#ifdef MD4 - register_hash(&md4_desc); -#endif -#ifdef MD2 - register_hash(&md2_desc); -#endif - -#ifdef YARROW - register_prng(&yarrow_desc); -#endif -#ifdef SPRNG - register_prng(&sprng_desc); -#endif -} - -void kr_display(pk_key *kr) -{ - static const char *system[] = { "NON-KEY", "RSA", "DH", "ECC" }; - static const char *type[] = { "PRIVATE", "PUBLIC", "PRIVATE_OPTIMIZED" }; - - while (kr->system != NON_KEY) { - printf("CRC [%08lx], System [%10s], Type [%20s], %s, %s, %s\n", kr->ID, system[kr->system], type[kr->key_type], kr->name, kr->email, kr->description); - kr = kr->next; - } - printf("\n"); -} - -void kr_test_makekeys(pk_key **kr) -{ - if ((errno = kr_init(kr)) != CRYPT_OK) { - printf("KR init error %s\n", error_to_string(errno)); - exit(-1); - } - - /* make a DH key */ - printf("KR: Making DH key...\n"); - if ((errno = kr_make_key(*kr, &prng, find_prng("yarrow"), DH_KEY, 128, "dhkey", "dh@dh.dh", "dhkey one")) != CRYPT_OK) { - printf("Make key error: %s\n", error_to_string(errno)); - exit(-1); - } - - /* make a ECC key */ - printf("KR: Making ECC key...\n"); - if ((errno = kr_make_key(*kr, &prng, find_prng("yarrow"), ECC_KEY, 20, "ecckey", "ecc@ecc.ecc", "ecckey one")) != CRYPT_OK) { - printf("Make key error: %s\n", error_to_string(errno)); - exit(-1); - } - - /* make a RSA key */ - printf("KR: Making RSA key...\n"); - if ((errno = kr_make_key(*kr, &prng, find_prng("yarrow"), RSA_KEY, 128, "rsakey", "rsa@rsa.rsa", "rsakey one")) != CRYPT_OK) { - printf("Make key error: %s\n", error_to_string(errno)); - exit(-1); - } - -} - -void kr_test(void) -{ - pk_key *kr, *_kr; - unsigned char buf[8192], buf2[8192], buf3[8192]; - unsigned long len; - int i, j, stat; -#ifndef NO_FILE - FILE *f; -#endif - - kr_test_makekeys(&kr); - - printf("The original list:\n"); - kr_display(kr); - - for (i = 0; i < 3; i++) { - len = sizeof(buf); - if ((errno = kr_export(kr, kr->ID, kr->key_type, buf, &len)) != CRYPT_OK) { - printf("Error exporting key %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - printf("Exported key was: %lu bytes\n", len); - if ((errno = kr_del(&kr, kr->ID)) != CRYPT_OK) { - printf("Error deleting key %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - kr_display(kr); - if ((errno = kr_import(kr, buf, len)) != CRYPT_OK) { - printf("Error importing key %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - kr_display(kr); - } - - for (i = 0; i < 3; i++) { - len = sizeof(buf); - if ((errno = kr_export(kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) { - printf("Error exporting key %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - printf("Exported key was: %lu bytes\n", len); - if ((errno = kr_del(&kr, kr->ID)) != CRYPT_OK) { - printf("Error deleting key %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - kr_display(kr); - if ((errno = kr_import(kr, buf, len)) != CRYPT_OK) { - printf("Error importing key %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - kr_display(kr); - } - - if ((errno = kr_clear(&kr)) != CRYPT_OK) { - printf("Error clearing ring: %s\n", error_to_string(errno)); - exit(-1); - } - - -/* TEST output to file */ -#ifndef NO_FILE - - if ((errno = kr_init(&kr)) != CRYPT_OK) { - printf("KR init error %s\n", error_to_string(errno)); - exit(-1); - } - kr_test_makekeys(&kr); - - /* save to file */ - f = fopen("ring.dat", "wb"); - if ((errno = kr_save(kr, f, NULL)) != CRYPT_OK) { - printf("kr_save error %s\n", error_to_string(errno)); - exit(-1); - } - fclose(f); - - /* delete and load */ - if ((errno = kr_clear(&kr)) != CRYPT_OK) { - printf("clear error: %s\n", error_to_string(errno)); - exit(-1); - } - - f = fopen("ring.dat", "rb"); - if ((errno = kr_load(&kr, f, NULL)) != CRYPT_OK) { - printf("kr_load error %s\n", error_to_string(errno)); - exit(-1); - } - fclose(f); - remove("ring.dat"); - printf("After load and save...\n"); - kr_display(kr); - - if ((errno = kr_clear(&kr)) != CRYPT_OK) { - printf("clear error: %s\n", error_to_string(errno)); - exit(-1); - } - -#endif - -/* test the packet encryption/sign stuff */ - for (i = 0; i < 32; i++) buf[i] = i; - kr_test_makekeys(&kr); - _kr = kr; - for (i = 0; i < 3; i++) { - printf("Testing a key with system %d, type %d:\t", _kr->system, _kr->key_type); - len = sizeof(buf2); - if ((errno = kr_encrypt_key(kr, _kr->ID, buf, 16, buf2, &len, &prng, find_prng("yarrow"), find_hash("md5"))) != CRYPT_OK) { - printf("Encrypt error, %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - len = sizeof(buf3); - if ((errno = kr_decrypt_key(kr, buf2, buf3, &len)) != CRYPT_OK) { - printf("decrypt error, %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - if (len != 16 || memcmp(buf3, buf, 16)) { - printf("kr_decrypt_key failed, %i, %lu\n", i, len); - exit(-1); - } - printf("kr_encrypt_key passed, "); - - len = sizeof(buf2); - if ((errno = kr_sign_hash(kr, _kr->ID, buf, 32, buf2, &len, &prng, find_prng("yarrow"))) != CRYPT_OK) { - printf("kr_sign_hash failed, %i, %s\n", i, error_to_string(errno)); - exit(-1); - } - printf("kr_sign_hash: "); - if ((errno = kr_verify_hash(kr, buf2, buf, 32, &stat)) != CRYPT_OK) { - printf("kr_sign_hash failed, %i, %s\n", i, error_to_string(errno)); - exit(-1); - } - printf("%s, ", stat?"passed":"failed"); - buf[15] ^= 1; - if ((errno = kr_verify_hash(kr, buf2, buf, 32, &stat)) != CRYPT_OK) { - printf("kr_sign_hash failed, %i, %s\n", i, error_to_string(errno)); - exit(-1); - } - printf("%s\n", (!stat)?"passed":"failed"); - buf[15] ^= 1; - - len = sizeof(buf); - if ((errno = kr_fingerprint(kr, _kr->ID, find_hash("sha1"), buf, &len)) != CRYPT_OK) { - printf("kr_fingerprint failed, %i, %lu\n", i, len); - exit(-1); - } - printf("Fingerprint: "); - for (j = 0; j < 20; j++) { - printf("%02x", buf[j]); - if (j < 19) printf(":"); - } - printf("\n\n"); - - _kr = _kr->next; - } - -/* Test encrypting/decrypting to a public key */ -/* first dump the other two keys */ - kr_del(&kr, kr->ID); - kr_del(&kr, kr->ID); - kr_display(kr); - - /* now export it as public and private */ - len = sizeof(buf); - if ((errno = kr_export(kr, kr->ID, PK_PUBLIC, buf, &len)) != CRYPT_OK) { - printf("Error exporting key %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - - /* check boundaries */ - memset(buf+len, 0, sizeof(buf)-len); - - len = sizeof(buf2); - if ((errno = kr_export(kr, kr->ID, PK_PRIVATE, buf2, &len)) != CRYPT_OK) { - printf("Error exporting key %s\n", error_to_string(errno)); - exit(-1); - } - - /* check boundaries */ - memset(buf2+len, 0, sizeof(buf2)-len); - - /* delete the key and import the public */ - kr_clear(&kr); - kr_init(&kr); - kr_display(kr); - if ((errno = kr_import(kr, buf, len)) != CRYPT_OK) { - printf("Error importing key %s\n", error_to_string(errno)); - exit(-1); - } - kr_display(kr); - - /* now encrypt a buffer */ - for (i = 0; i < 16; i++) buf[i] = i; - len = sizeof(buf3); - if ((errno = kr_encrypt_key(kr, kr->ID, buf, 16, buf3, &len, &prng, find_prng("yarrow"), find_hash("md5"))) != CRYPT_OK) { - printf("Encrypt error, %d, %s\n", i, error_to_string(errno)); - exit(-1); - } - - /* now delete the key and import the private one */ - kr_clear(&kr); - kr_init(&kr); - kr_display(kr); - if ((errno = kr_import(kr, buf2, len)) != CRYPT_OK) { - printf("Error importing key %s\n", error_to_string(errno)); - exit(-1); - } - kr_display(kr); - - /* now decrypt */ - len = sizeof(buf2); - if ((errno = kr_decrypt_key(kr, buf3, buf2, &len)) != CRYPT_OK) { - printf("decrypt error, %s\n", error_to_string(errno)); - exit(-1); - } - - printf("KR encrypt to public, decrypt with private: "); - if (len == 16 && !memcmp(buf2, buf, 16)) { - printf("passed\n"); - } else { - printf("failed\n"); - } - - kr_clear(&kr); - -} - -void test_errs(void) -{ - #define ERR(x) printf("%25s => %s\n", #x, error_to_string(x)); - - ERR(CRYPT_OK); - ERR(CRYPT_ERROR); - - ERR(CRYPT_INVALID_KEYSIZE); - ERR(CRYPT_INVALID_ROUNDS); - ERR(CRYPT_FAIL_TESTVECTOR); - - ERR(CRYPT_BUFFER_OVERFLOW); - ERR(CRYPT_INVALID_PACKET); - - ERR(CRYPT_INVALID_PRNGSIZE); - ERR(CRYPT_ERROR_READPRNG); - - ERR(CRYPT_INVALID_CIPHER); - ERR(CRYPT_INVALID_HASH); - ERR(CRYPT_INVALID_PRNG); - - ERR(CRYPT_MEM); - - ERR(CRYPT_PK_TYPE_MISMATCH); - ERR(CRYPT_PK_NOT_PRIVATE); - - ERR(CRYPT_INVALID_ARG); - - ERR(CRYPT_PK_INVALID_TYPE); - ERR(CRYPT_PK_INVALID_SYSTEM); - ERR(CRYPT_PK_DUP); - ERR(CRYPT_PK_NOT_FOUND); - ERR(CRYPT_PK_INVALID_SIZE); - - ERR(CRYPT_INVALID_PRIME_SIZE); -} - - - -int main(void) -{ -#ifdef SONY_PS2 - TIMER_Init(); -#endif - - register_all_algs(); - - if ((errno = yarrow_start(&prng)) != CRYPT_OK) { - printf("yarrow_start: %s\n", error_to_string(errno)); - } - if ((errno = yarrow_add_entropy("hello", 5, &prng)) != CRYPT_OK) { - printf("yarrow_add_entropy: %s\n", error_to_string(errno)); - } - if ((errno = yarrow_ready(&prng)) != CRYPT_OK) { - printf("yarrow_ready: %s\n", error_to_string(errno)); - } - - printf(crypt_build_settings); - test_errs(); - -#ifdef HMAC - printf("HMAC: %s\n", hmac_test() == CRYPT_OK ? "passed" : "failed"); -#endif - - store_tests(); - cipher_tests(); - hash_tests(); - - ecb_tests(); - cbc_tests(); - ctr_tests(); - ofb_tests(); - cfb_tests(); - - rng_tests(); - //test_prime(); - - kr_test(); - rsa_test(); - pad_test(); - ecc_tests(); - dh_tests(); - - gf_tests(); - base64_test(); - - time_ecb(); - time_hash(); - -#ifdef SONY_PS2 - TIMER_Shutdown(); -#endif - - return 0; -} diff --git a/des.c b/des.c index 81a7bd6..42b11d9 100644 --- a/des.c +++ b/des.c @@ -241,35 +241,43 @@ void deskey(const unsigned char *key, short edf, unsigned long *keyout) unsigned long i, j, l, m, n, kn[32]; unsigned char pc1m[56], pcr[56]; - for(j=0; j < 56; j++) - { + for (j=0; j < 56; j++) { l = (unsigned long)pc1[j]; - m = l & 07; + m = l & 7; pc1m[j] = (unsigned char)((key[l >> 3U] & bytebit[m]) == bytebit[m] ? 1 : 0); } - for(i=0; i < 16; i++) - { - if(edf == DE1) m = (15 - i) << 1; - else m = i << 1; + for (i=0; i < 16; i++) { + if (edf == DE1) { + m = (15 - i) << 1; + } else { + m = i << 1; + } n = m + 1; kn[m] = kn[n] = 0L; - for(j=0; j < 28; j++) - { + for (j=0; j < 28; j++) { l = j + (unsigned long)totrot[i]; - if(l < 28) pcr[j] = pc1m[l]; - else pcr[j] = pc1m[l - 28]; + if (l < 28) { + pcr[j] = pc1m[l]; + } else { + pcr[j] = pc1m[l - 28]; + } } - for(/*j = 28*/; j < 56; j++) - { + for (/*j = 28*/; j < 56; j++) { l = j + (unsigned long)totrot[i]; - if(l < 56) pcr[j] = pc1m[l]; - else pcr[j] = pc1m[l - 28]; + if (l < 56) { + pcr[j] = pc1m[l]; + } else { + pcr[j] = pc1m[l - 28]; + } } - for(j=0; j < 24; j++) - { - if((int)pcr[(int)pc2[j]] != 0) kn[m] |= bigbyte[j]; - if((int)pcr[(int)pc2[j+24]] != 0) kn[n] |= bigbyte[j]; + for (j=0; j < 24; j++) { + if ((int)pcr[(int)pc2[j]] != 0) { + kn[m] |= bigbyte[j]; + } + if ((int)pcr[(int)pc2[j+24]] != 0) { + kn[n] |= bigbyte[j]; + } } } @@ -326,7 +334,7 @@ static void desfunc(unsigned long *block, const unsigned long *keys) static void _desfunc(unsigned long *block, const unsigned long *keys) #endif { - unsigned long fval, work, right, leftt; + unsigned long work, right, leftt; int round; leftt = block[0]; @@ -348,38 +356,35 @@ static void _desfunc(unsigned long *block, const unsigned long *keys) leftt ^= work; right ^= (work << 8); - right = ((right << 1) | ((right >> 31) & 1L)) & 0xFFFFFFFFL; + right = ROL(right, 1); work = (leftt ^ right) & 0xaaaaaaaaL; leftt ^= work; right ^= work; - leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL; + leftt = ROL(leftt, 1); - for( round = 0; round < 8; round++) - { - work = ((right << 28) | (right >> 4)) ^ *keys++; - fval = SP7[ work & 0x3fL] - | SP5[(work >> 8) & 0x3fL] - | SP3[(work >> 16) & 0x3fL] - | SP1[(work >> 24) & 0x3fL]; + for (round = 0; round < 8; round++) { + work = ROR(right, 4) ^ *keys++; + leftt ^= SP7[work & 0x3fL] + ^ SP5[(work >> 8) & 0x3fL] + ^ SP3[(work >> 16) & 0x3fL] + ^ SP1[(work >> 24) & 0x3fL]; work = right ^ *keys++; - fval |= SP8[ work & 0x3fL] - | SP6[(work >> 8) & 0x3fL] - | SP4[(work >> 16) & 0x3fL] - | SP2[(work >> 24) & 0x3fL]; - leftt ^= fval; + leftt ^= SP8[ work & 0x3fL] + ^ SP6[(work >> 8) & 0x3fL] + ^ SP4[(work >> 16) & 0x3fL] + ^ SP2[(work >> 24) & 0x3fL]; - work = ((leftt << 28) | (leftt >> 4)) ^ *keys++; - fval = SP7[ work & 0x3fL] - | SP5[(work >> 8) & 0x3fL] - | SP3[(work >> 16) & 0x3fL] - | SP1[(work >> 24) & 0x3fL]; + work = ROR(leftt, 4) ^ *keys++; + right ^= SP7[ work & 0x3fL] + ^ SP5[(work >> 8) & 0x3fL] + ^ SP3[(work >> 16) & 0x3fL] + ^ SP1[(work >> 24) & 0x3fL]; work = leftt ^ *keys++; - fval |= SP8[ work & 0x3fL] - | SP6[(work >> 8) & 0x3fL] - | SP4[(work >> 16) & 0x3fL] - | SP2[(work >> 24) & 0x3fL]; - right ^= fval; + right ^= SP8[ work & 0x3fL] + ^ SP6[(work >> 8) & 0x3fL] + ^ SP4[(work >> 16) & 0x3fL] + ^ SP2[(work >> 24) & 0x3fL]; } right = (right << 31) | (right >> 1); work = (leftt ^ right) & 0xaaaaaaaaL; @@ -412,7 +417,6 @@ static void desfunc(unsigned long *block, const unsigned long *keys) } #endif - int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { _ARGCHK(key != NULL); @@ -484,7 +488,8 @@ void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key * void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { - unsigned long work[2]; + unsigned long work[2], *k[3]; + _ARGCHK(pt != NULL); _ARGCHK(ct != NULL); _ARGCHK(key != NULL); diff --git a/dh.c b/dh.c index 03914ab..0e4ac43 100644 --- a/dh.c +++ b/dh.c @@ -207,10 +207,11 @@ void dh_sizes(int *low, int *high) int dh_get_size(dh_key *key) { _ARGCHK(key != NULL); - if (is_valid_idx(key->idx) == 1) + if (is_valid_idx(key->idx) == 1) { return sets[key->idx].size; - else + } else { return INT_MAX; /* large value that would cause dh_make_key() to fail */ + } } int dh_make_key(prng_state *prng, int wprng, int keysize, dh_key *key) diff --git a/ecc.c b/ecc.c index aad0344..dfb127e 100644 --- a/ecc.c +++ b/ecc.c @@ -253,18 +253,18 @@ static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) if (mp_mul_2(&P->y, &tmp) != MP_OKAY) { goto error; } /* tmp = 2*y */ if (mp_invmod(&tmp, modulus, &tmp) != MP_OKAY) { goto error; } /* tmp = 1/tmp mod modulus */ if (mp_sqr(&P->x, &s) != MP_OKAY) { goto error; } /* s = x^2 */ - if (mp_reduce(&s, modulus, mu) != MP_OKAY) { goto error; } + if (mp_reduce(&s, modulus, mu) != MP_OKAY) { goto error; } if (mp_mul_d(&s,(mp_digit)3, &s) != MP_OKAY) { goto error; } /* s = 3*(x^2) */ if (mp_sub_d(&s,(mp_digit)3, &s) != MP_OKAY) { goto error; } /* s = 3*(x^2) - 3 */ - if (mp_cmp_d(&s, 0) == MP_LT) { /* if s < 0 add modulus */ + if (mp_cmp_d(&s, 0) == MP_LT) { /* if s < 0 add modulus */ if (mp_add(&s, modulus, &s) != MP_OKAY) { goto error; } } if (mp_mul(&s, &tmp, &s) != MP_OKAY) { goto error; } /* s = tmp * s mod modulus */ - if (mp_reduce(&s, modulus, mu) != MP_OKAY) { goto error; } + if (mp_reduce(&s, modulus, mu) != MP_OKAY) { goto error; } /* Xr = s^2 - 2Xp */ if (mp_sqr(&s, &tmpx) != MP_OKAY) { goto error; } /* tmpx = s^2 */ - if (mp_reduce(&tmpx, modulus, mu) != MP_OKAY) { goto error; } /* tmpx = tmpx mod modulus */ + if (mp_reduce(&tmpx, modulus, mu) != MP_OKAY) { goto error; } /* tmpx = tmpx mod modulus */ if (mp_sub(&tmpx, &P->x, &tmpx) != MP_OKAY) { goto error; } /* tmpx = tmpx - x */ if (mp_submod(&tmpx, &P->x, modulus, &tmpx) != MP_OKAY) { goto error; } /* tmpx = tmpx - x mod modulus */ @@ -321,11 +321,11 @@ static int add_point(ecc_point *P, ecc_point *Q, ecc_point *R, mp_int *modulus, if (mp_add(&s, modulus, &s) != MP_OKAY) { goto error; } } if (mp_mul(&s, &tmp, &s) != MP_OKAY) { goto error; } /* s = s * tmp mod modulus */ - if (mp_reduce(&s, modulus, mu) != MP_OKAY) { goto error; } + if (mp_reduce(&s, modulus, mu) != MP_OKAY) { goto error; } /* Xr = s^2 - Xp - Xq */ if (mp_sqr(&s, &tmp) != MP_OKAY) { goto error; } /* tmp = s^2 mod modulus */ - if (mp_reduce(&tmp, modulus, mu) != MP_OKAY) { goto error; } + if (mp_reduce(&tmp, modulus, mu) != MP_OKAY) { goto error; } if (mp_sub(&tmp, &P->x, &tmp) != MP_OKAY) { goto error; } /* tmp = tmp - Px */ if (mp_sub(&tmp, &Q->x, &tmpx) != MP_OKAY) { goto error; } /* tmpx = tmp - Qx */ diff --git a/hash.c b/hash.c index 90a7c59..1d3eb57 100644 --- a/hash.c +++ b/hash.c @@ -61,7 +61,6 @@ int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outle #endif } - int hash_file(int hash, const char *fname, unsigned char *dst, unsigned long *outlen) { #ifdef NO_FILE diff --git a/hmac.c b/hmac.c index d4d78dd..b3fcfc7 100644 --- a/hmac.c +++ b/hmac.c @@ -125,7 +125,8 @@ int hmac_done(hmac_state *hmac, unsigned char *hashOut) } int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, - const unsigned char *data, unsigned long len, unsigned char *dst) + const unsigned char *data, unsigned long len, + unsigned char *dst, unsigned long *dstlen) { hmac_state hmac; int err; @@ -133,6 +134,14 @@ int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, _ARGCHK(key != NULL); _ARGCHK(data != NULL); _ARGCHK(dst != NULL); + + if((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + if (hash_descriptor[hash].hashsize > *dstlen) { + return CRYPT_BUFFER_OVERFLOW; + } + *dstlen = hash_descriptor[hash].hashsize; if ((err = hmac_init(&hmac, hash, key, keylen)) != CRYPT_OK) { return err; @@ -150,7 +159,8 @@ int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, /* hmac_file added by Tom St Denis */ int hmac_file(int hash, const char *fname, const unsigned char *key, - unsigned long keylen, unsigned char *dst) + unsigned long keylen, + unsigned char *dst, unsigned long *dstlen) { #ifdef NO_FILE return CRYPT_ERROR; @@ -164,6 +174,14 @@ int hmac_file(int hash, const char *fname, const unsigned char *key, _ARGCHK(fname != NULL); _ARGCHK(key != NULL); _ARGCHK(dst != NULL); + + if((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + if (hash_descriptor[hash].hashsize > *dstlen) { + return CRYPT_BUFFER_OVERFLOW; + } + *dstlen = hash_descriptor[hash].hashsize; if ((err = hmac_init(&hmac, hash, key, keylen)) != CRYPT_OK) { return err; @@ -436,11 +454,13 @@ Key First" 0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e} } }; + unsigned long outlen; int err; int failed=0; for(i=0; i < (int)(sizeof(cases) / sizeof(cases[0])); i++) { int hash = find_hash(cases[i].algo); - if((err = hmac_memory(hash, cases[i].key, cases[i].keylen, cases[i].data, cases[i].datalen, digest)) != CRYPT_OK) { + outlen = sizeof(digest); + if((err = hmac_memory(hash, cases[i].key, cases[i].keylen, cases[i].data, cases[i].datalen, digest, &outlen)) != CRYPT_OK) { #if 0 printf("HMAC-%s test #%d\n", cases[i].algo, cases[i].num); #endif diff --git a/makefile b/makefile index 7daa8f7..6b8ad8a 100644 --- a/makefile +++ b/makefile @@ -9,7 +9,7 @@ # a build. This is easy to remedy though, for those that have problems. # The version -VERSION=0.81 +VERSION=0.82 #ch1-01-1 # Compiler and Linker Names diff --git a/makefile.msvc b/makefile.msvc new file mode 100644 index 0000000..f476a31 --- /dev/null +++ b/makefile.msvc @@ -0,0 +1,23 @@ +#MSVC Makefile [tested with MSVC 6.00 with SP5] +# +#Tom St Denis + +CFLAGS = /I. /Ogityb2 /Gs /DWIN32 /W3 + +default: library + +#List of objects to compile. +OBJECTS=keyring.obj gf.obj mem.obj sprng.obj ecc.obj base64.obj dh.obj rsa.obj \ +bits.obj yarrow.obj cfb.obj ofb.obj ecb.obj ctr.obj cbc.obj hash.obj tiger.obj sha1.obj \ +md5.obj md4.obj md2.obj sha256.obj sha512.obj xtea.obj aes.obj serpent.obj des.obj \ +safer_tab.obj safer.obj safer+.obj rc4.obj rc2.obj rc6.obj rc5.obj cast5.obj noekeon.obj \ +blowfish.obj crypt.obj ampi.obj mpi.obj prime.obj twofish.obj packet.obj hmac.obj strings.obj + +library: $(OBJECTS) + lib /out:tomcrypt.lib $(OBJECTS) + +test.obj: demos/test.c + cl $(CFLAGS) /c demos/test.c + +test: library test.obj + cl test.obj tomcrypt.lib advapi32.lib \ No newline at end of file diff --git a/makefile.out b/makefile.out index e0309fb..bb217ef 100644 --- a/makefile.out +++ b/makefile.out @@ -5,7 +5,7 @@ CC = gcc AR = ar LD = ld -CFLAGS += -Os -Wall -Wsign-compare -W -Wno-unused -Werror -I./ +CFLAGS += -O3 -Wall -Wsign-compare -W -Wno-unused -Werror -I./ default: library diff --git a/md4.c b/md4.c index 767e789..cff1442 100644 --- a/md4.c +++ b/md4.c @@ -30,7 +30,7 @@ const struct _hash_descriptor md4_desc = /* F, G and H are basic MD4 functions. */ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) +#define G(x, y, z) ((x & y) | (z & (x | y))) #define H(x, y, z) ((x) ^ (y) ^ (z)) /* ROTATE_LEFT rotates x left n bits. */ diff --git a/md5.c b/md5.c index a55d15e..ae9a1dd 100644 --- a/md5.c +++ b/md5.c @@ -14,10 +14,10 @@ const struct _hash_descriptor md5_desc = &md5_test }; -#define F(x,y,z) ( (x&y)|((~x)&z) ) -#define G(x,y,z) ( (x&z)|(y&(~z)) ) +#define F(x,y,z) ((x&y)|((~x)&z)) +#define G(x,y,z) ((x&z)|(y&(~z))) #define H(x,y,z) (x^y^z) -#define I(x,y,z) (y ^ (x | (~z))) +#define I(x,y,z) (y^(x|(~z))) #define FF(a,b,c,d,M,s,t) \ a = (a + F(b,c,d) + M + t); a = ROL(a, s); a = (b + a); diff --git a/mpi.c b/mpi.c index 4d6738b..ca2b633 100644 --- a/mpi.c +++ b/mpi.c @@ -13,13 +13,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include -int KARATSUBA_MUL_CUTOFF = 80, /* Min. number of digits before Karatsuba multiplication is used. */ - KARATSUBA_SQR_CUTOFF = 80, /* Min. number of digits before Karatsuba squaring is used. */ - MONTGOMERY_EXPT_CUTOFF = 74; /* max. number of digits that montgomery reductions will help for */ +/* configured for a Duron Morgan core with etc/tune.c */ +int KARATSUBA_MUL_CUTOFF = 73, /* Min. number of digits before Karatsuba multiplication is used. */ + KARATSUBA_SQR_CUTOFF = 121, /* Min. number of digits before Karatsuba squaring is used. */ + MONTGOMERY_EXPT_CUTOFF = 128; /* max. number of digits that montgomery reductions will help for */ + +/* note the MONT cuttoff should be tuned better. Seems it slowed down a 1024-bit exptmod when set to 74 */ /* End: bncore.c */ @@ -36,7 +39,7 @@ int KARATSUBA_MUL_CUTOFF = 80, /* Min. number of digits before Karatsuba mul * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -216,7 +219,7 @@ __ERR: * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -306,14 +309,18 @@ fast_mp_montgomery_reduce (mp_int * a, mp_int * m, mp_digit mp) W[ix + 1] += W[ix] >> ((mp_word) DIGIT_BIT); } - /* nox fix rest of carries */ - for (++ix; ix <= m->used * 2 + 1; ix++) { - W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); - } { register mp_digit *tmpa; - register mp_word *_W; + register mp_word *_W, *_W1; + + /* nox fix rest of carries */ + _W1 = W + ix; + _W = W + ++ix; + + for (; ix <= m->used * 2 + 1; ix++) { + *_W++ += *_W1++ >> ((mp_word) DIGIT_BIT); + } /* copy out, A = A/b^n * @@ -361,7 +368,7 @@ fast_mp_montgomery_reduce (mp_int * a, mp_int * m, mp_digit mp) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -486,7 +493,7 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -553,8 +560,7 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); c->dp[ix - 1] = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } - c->dp[(pa + pb + 1) - 1] = - (mp_digit) (W[(pa + pb + 1) - 1] & ((mp_word) MP_MASK)); + c->dp[(pa + pb + 1) - 1] = (mp_digit) (W[(pa + pb + 1) - 1] & ((mp_word) MP_MASK)); for (; ix < oldused; ix++) { c->dp[ix] = 0; @@ -578,7 +584,7 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -694,12 +700,8 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) for (; ix < olduse; ix++) { *tmpb++ = 0; } - } - /* fix the sign (since we no longer make a fresh temp) */ - b->sign = MP_ZPOS; - mp_clamp (b); return MP_OKAY; } @@ -719,7 +721,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -758,7 +760,7 @@ mp_2expt (mp_int * a, int b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -792,7 +794,7 @@ mp_abs (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -852,7 +854,7 @@ mp_add (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -891,7 +893,7 @@ mp_addmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -927,7 +929,7 @@ mp_add_d (mp_int * a, mp_digit b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -982,7 +984,7 @@ mp_and (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1018,7 +1020,7 @@ mp_clamp (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1032,7 +1034,7 @@ mp_clear (mp_int * a) memset (a->dp, 0, sizeof (mp_digit) * a->used); /* free ram */ - free (a->dp); + XFREE(a->dp); /* reset members to make debugging easier */ a->dp = NULL; @@ -1055,7 +1057,7 @@ mp_clear (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1087,7 +1089,7 @@ mp_cmp (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1128,7 +1130,7 @@ mp_cmp_d (mp_int * a, mp_digit b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1171,7 +1173,7 @@ mp_cmp_mag (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1229,7 +1231,7 @@ mp_copy (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1268,7 +1270,7 @@ mp_count_bits (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1333,8 +1335,7 @@ mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d) /* normalize both x and y, ensure that y >= b/2, [b == 2^DIGIT_BIT] */ norm = 0; - while ((y.dp[y.used - 1] & (((mp_digit) 1) << (DIGIT_BIT - 1))) == - ((mp_digit) 0)) { + while ((y.dp[y.used - 1] & (((mp_digit) 1) << (DIGIT_BIT - 1))) == ((mp_digit) 0)) { ++norm; if ((res = mp_mul_2 (&x, &x)) != MP_OKAY) { goto __Y; @@ -1471,7 +1472,7 @@ __Q:mp_clear (&q); * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1507,6 +1508,7 @@ mp_div_2 (mp_int * a, mp_int * b) *tmpb++ = 0; } } + b->sign = a->sign; mp_clamp (b); return MP_OKAY; } @@ -1526,7 +1528,7 @@ mp_div_2 (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1567,7 +1569,9 @@ mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d) } /* shift by as many digits in the bit count */ - mp_rshd (c, b / DIGIT_BIT); + if (b >= DIGIT_BIT) { + mp_rshd (c, b / DIGIT_BIT); + } /* shift any bit count < DIGIT_BIT */ D = (mp_digit) (b % DIGIT_BIT); @@ -1608,7 +1612,7 @@ mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1656,7 +1660,7 @@ mp_div_d (mp_int * a, mp_digit b, mp_int * c, mp_digit * d) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1685,24 +1689,35 @@ mp_exch (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include +static int f_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y); + +/* this is a shell function that calls either the normal or Montgomery + * exptmod functions. Originally the call to the montgomery code was + * embedded in the normal function but that wasted alot of stack space + * for nothing (since 99% of the time the Montgomery code would be called) + */ int mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) +{ + /* if the modulus is odd use the fast method */ + if (mp_isodd (P) == 1 && P->used > 4 && P->used < MONTGOMERY_EXPT_CUTOFF) { + return mp_exptmod_fast (G, X, P, Y); + } else { + return f_mp_exptmod (G, X, P, Y); + } +} + +static int +f_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) { mp_int M[256], res, mu; mp_digit buf; int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; - - /* if the modulus is odd use the fast method */ - if (mp_isodd (P) == 1 && P->used > 4 && P->used < MONTGOMERY_EXPT_CUTOFF) { - err = mp_exptmod_fast (G, X, P, Y); - return err; - } - /* find window size */ x = mp_count_bits (X); if (x <= 7) { @@ -1755,9 +1770,7 @@ mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) } for (x = 0; x < (winsize - 1); x++) { - if ((err = - mp_sqr (&M[1 << (winsize - 1)], - &M[1 << (winsize - 1)])) != MP_OKAY) { + if ((err = mp_sqr (&M[1 << (winsize - 1)], &M[1 << (winsize - 1)])) != MP_OKAY) { goto __MU; } if ((err = mp_reduce (&M[1 << (winsize - 1)], P, &mu)) != MP_OKAY) { @@ -1902,7 +1915,7 @@ __M: * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -1958,39 +1971,32 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) goto __RES; } - /* now we need R mod m */ - if ((err = mp_montgomery_calc_normalization (&res, P)) != MP_OKAY) { - goto __RES; - } - /* create M table * * The M table contains powers of the input base, e.g. M[x] = G^x mod P * * The first half of the table is not computed though accept for M[0] and M[1] */ - if ((err = mp_mod (G, P, &M[1])) != MP_OKAY) { + + /* now we need R mod m */ + if ((err = mp_montgomery_calc_normalization (&res, P)) != MP_OKAY) { goto __RES; } /* now set M[1] to G * R mod m */ - if ((err = mp_mulmod (&M[1], &res, P, &M[1])) != MP_OKAY) { + if ((err = mp_mulmod (G, &res, P, &M[1])) != MP_OKAY) { goto __RES; } - /* compute the value at M[1<<(winsize-1)] by squaring M[1] (winsize-1) times */ if ((err = mp_copy (&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { goto __RES; } for (x = 0; x < (winsize - 1); x++) { - if ((err = - mp_sqr (&M[1 << (winsize - 1)], - &M[1 << (winsize - 1)])) != MP_OKAY) { + if ((err = mp_sqr (&M[1 << (winsize - 1)], &M[1 << (winsize - 1)])) != MP_OKAY) { goto __RES; } - if ((err = - mp_montgomery_reduce (&M[1 << (winsize - 1)], P, mp)) != MP_OKAY) { + if ((err = mp_montgomery_reduce (&M[1 << (winsize - 1)], P, mp)) != MP_OKAY) { goto __RES; } } @@ -2130,7 +2136,7 @@ __M: * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2183,7 +2189,7 @@ mp_expt_d (mp_int * a, mp_digit b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2230,10 +2236,10 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) k = 0; while ((u.dp[0] & 1) == 0 && (v.dp[0] & 1) == 0) { ++k; - if ((res = mp_div_2d (&u, 1, &u, NULL)) != MP_OKAY) { + if ((res = mp_div_2 (&u, &u)) != MP_OKAY) { goto __T; } - if ((res = mp_div_2d (&v, 1, &v, NULL)) != MP_OKAY) { + if ((res = mp_div_2 (&v, &v)) != MP_OKAY) { goto __T; } } @@ -2253,7 +2259,7 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) do { /* B3 (and B4). Halve t, if even */ while (t.used != 0 && (t.dp[0] & 1) == 0) { - if ((res = mp_div_2d (&t, 1, &t, NULL)) != MP_OKAY) { + if ((res = mp_div_2 (&t, &t)) != MP_OKAY) { goto __T; } } @@ -2305,7 +2311,7 @@ __U:mp_clear (&v); * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2319,7 +2325,7 @@ mp_grow (mp_int * a, int size) if (a->alloc < size) { size += (MP_PREC * 2) - (size & (MP_PREC - 1)); /* ensure there are always at least MP_PREC digits extra on top */ - a->dp = realloc (a->dp, sizeof (mp_digit) * size); + a->dp = XREALLOC (a->dp, sizeof (mp_digit) * size); if (a->dp == NULL) { return MP_MEM; } @@ -2348,7 +2354,7 @@ mp_grow (mp_int * a, int size) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2358,7 +2364,7 @@ mp_init (mp_int * a) { /* allocate ram required and clear it */ - a->dp = calloc (sizeof (mp_digit), MP_PREC); + a->dp = XCALLOC (sizeof (mp_digit), MP_PREC); if (a->dp == NULL) { return MP_MEM; } @@ -2387,7 +2393,7 @@ mp_init (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2400,8 +2406,7 @@ mp_init_copy (mp_int * a, mp_int * b) if ((res = mp_init (a)) != MP_OKAY) { return res; } - res = mp_copy (b, a); - return res; + return mp_copy (b, a); } /* End: bn_mp_init_copy.c */ @@ -2419,7 +2424,7 @@ mp_init_copy (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2430,7 +2435,7 @@ mp_init_size (mp_int * a, int size) /* pad up so there are at least 16 zero digits */ size += (MP_PREC * 2) - (size & (MP_PREC - 1)); /* ensure there are always at least 16 digits extra on top */ - a->dp = calloc (sizeof (mp_digit), size); + a->dp = XCALLOC (sizeof (mp_digit), size); if (a->dp == NULL) { return MP_MEM; } @@ -2456,7 +2461,7 @@ mp_init_size (mp_int * a, int size) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2661,7 +2666,7 @@ __ERR: * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2779,7 +2784,7 @@ __A1:mp_clear (&a1); * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2806,8 +2811,7 @@ int mp_karatsuba_mul (mp_int * a, mp_int * b, mp_int * c) { mp_int x0, x1, y0, y1, t1, t2, x0y0, x1y1; - int B, err, x; - + int B, err; err = MP_MEM; @@ -2828,13 +2832,13 @@ mp_karatsuba_mul (mp_int * a, mp_int * b, mp_int * c) goto Y0; /* init temps */ - if (mp_init (&t1) != MP_OKAY) + if (mp_init_size (&t1, B * 2) != MP_OKAY) goto Y1; - if (mp_init (&t2) != MP_OKAY) + if (mp_init_size (&t2, B * 2) != MP_OKAY) goto T1; - if (mp_init (&x0y0) != MP_OKAY) + if (mp_init_size (&x0y0, B * 2) != MP_OKAY) goto T2; - if (mp_init (&x1y1) != MP_OKAY) + if (mp_init_size (&x1y1, B * 2) != MP_OKAY) goto X0Y0; /* now shift the digits */ @@ -2845,18 +2849,32 @@ mp_karatsuba_mul (mp_int * a, mp_int * b, mp_int * c) x1.used = a->used - B; y1.used = b->used - B; - /* we copy the digits directly instead of using higher level functions - * since we also need to shift the digits - */ - for (x = 0; x < B; x++) { - x0.dp[x] = a->dp[x]; - y0.dp[x] = b->dp[x]; - } - for (x = B; x < a->used; x++) { - x1.dp[x - B] = a->dp[x]; - } - for (x = B; x < b->used; x++) { - y1.dp[x - B] = b->dp[x]; + { + register int x; + register mp_digit *tmpa, *tmpb, *tmpx, *tmpy; + + /* we copy the digits directly instead of using higher level functions + * since we also need to shift the digits + */ + tmpa = a->dp; + tmpb = b->dp; + + tmpx = x0.dp; + tmpy = y0.dp; + for (x = 0; x < B; x++) { + *tmpx++ = *tmpa++; + *tmpy++ = *tmpb++; + } + + tmpx = x1.dp; + for (x = B; x < a->used; x++) { + *tmpx++ = *tmpa++; + } + + tmpy = y1.dp; + for (x = B; x < b->used; x++) { + *tmpy++ = *tmpb++; + } } /* only need to clamp the lower words since by definition the upper words x1/y1 must @@ -2925,7 +2943,7 @@ ERR: * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -2938,8 +2956,7 @@ int mp_karatsuba_sqr (mp_int * a, mp_int * b) { mp_int x0, x1, t1, t2, x0x0, x1x1; - int B, err, x; - + int B, err; err = MP_MEM; @@ -2956,22 +2973,31 @@ mp_karatsuba_sqr (mp_int * a, mp_int * b) goto X0; /* init temps */ - if (mp_init (&t1) != MP_OKAY) + if (mp_init_size (&t1, a->used * 2) != MP_OKAY) goto X1; - if (mp_init (&t2) != MP_OKAY) + if (mp_init_size (&t2, a->used * 2) != MP_OKAY) goto T1; - if (mp_init (&x0x0) != MP_OKAY) + if (mp_init_size (&x0x0, B * 2) != MP_OKAY) goto T2; - if (mp_init (&x1x1) != MP_OKAY) + if (mp_init_size (&x1x1, (a->used - B) * 2) != MP_OKAY) goto X0X0; - /* now shift the digits */ - for (x = 0; x < B; x++) { - x0.dp[x] = a->dp[x]; - } + { + register int x; + register mp_digit *dst, *src; - for (x = B; x < a->used; x++) { - x1.dp[x - B] = a->dp[x]; + src = a->dp; + + /* now shift the digits */ + dst = x0.dp; + for (x = 0; x < B; x++) { + *dst++ = *src++; + } + + dst = x1.dp; + for (x = B; x < a->used; x++) { + *dst++ = *src++; + } } x0.used = B; @@ -2992,7 +3018,7 @@ mp_karatsuba_sqr (mp_int * a, mp_int * b) goto X1X1; /* t1 = (x1 - x0) * (y1 - y0) */ /* add x0y0 */ - if (mp_add (&x0x0, &x1x1, &t2) != MP_OKAY) + if (s_mp_add (&x0x0, &x1x1, &t2) != MP_OKAY) goto X1X1; /* t2 = x0y0 + x1y1 */ if (mp_sub (&t2, &t1, &t1) != MP_OKAY) goto X1X1; /* t1 = x0y0 + x1y1 - (x1-x0)*(y1-y0) */ @@ -3035,7 +3061,7 @@ ERR: * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3081,7 +3107,7 @@ mp_lcm (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3102,17 +3128,32 @@ mp_lshd (mp_int * a, int b) return res; } - /* increment the used by the shift amount than copy upwards */ - a->used += b; - for (x = a->used - 1; x >= b; x--) { - a->dp[x] = a->dp[x - b]; - } + { + register mp_digit *tmpa, *tmpaa; - /* zero the lower digits */ - for (x = 0; x < b; x++) { - a->dp[x] = 0; + /* increment the used by the shift amount than copy upwards */ + a->used += b; + + /* top */ + tmpa = a->dp + a->used - 1; + + /* base */ + tmpaa = a->dp + a->used - 1 - b; + + /* much like mp_rshd this is implemented using a sliding window + * except the window goes the otherway around. Copying from + * the bottom to the top. see bn_mp_rshd.c for more info. + */ + for (x = a->used - 1; x >= b; x--) { + *tmpa-- = *tmpaa--; + } + + /* zero the lower digits */ + tmpa = a->dp; + for (x = 0; x < b; x++) { + *tmpa++ = 0; + } } - mp_clamp (a); return MP_OKAY; } @@ -3131,7 +3172,7 @@ mp_lshd (mp_int * a, int b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3178,7 +3219,7 @@ mp_mod (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3212,8 +3253,7 @@ mp_mod_2d (mp_int * a, int b, mp_int * c) } /* clear the digit that is not completely outside/inside the modulus */ c->dp[b / DIGIT_BIT] &= - (mp_digit) ((((mp_digit) 1) << (((mp_digit) b) % DIGIT_BIT)) - - ((mp_digit) 1)); + (mp_digit) ((((mp_digit) 1) << (((mp_digit) b) % DIGIT_BIT)) - ((mp_digit) 1)); mp_clamp (c); return MP_OKAY; } @@ -3233,7 +3273,7 @@ mp_mod_2d (mp_int * a, int b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3284,7 +3324,7 @@ mp_mod_d (mp_int * a, mp_digit b, mp_digit * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3341,7 +3381,7 @@ mp_montgomery_calc_normalization (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3381,9 +3421,7 @@ mp_montgomery_reduce (mp_int * a, mp_int * m, mp_digit mp) mu = 0; for (iy = 0; iy < m->used; iy++) { - r = - ((mp_word) ui) * ((mp_word) * tmpx++) + ((mp_word) mu) + - ((mp_word) * tmpy); + r = ((mp_word) ui) * ((mp_word) * tmpx++) + ((mp_word) mu) + ((mp_word) * tmpy); mu = (r >> ((mp_word) DIGIT_BIT)); *tmpy++ = (r & ((mp_word) MP_MASK)); } @@ -3422,7 +3460,7 @@ mp_montgomery_reduce (mp_int * a, mp_int * m, mp_digit mp) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3430,38 +3468,31 @@ mp_montgomery_reduce (mp_int * a, mp_int * m, mp_digit mp) int mp_montgomery_setup (mp_int * a, mp_digit * mp) { - mp_int t, tt; - int res; + unsigned long x, b; - if ((res = mp_init (&t)) != MP_OKAY) { - return res; +/* fast inversion mod 2^32 + * + * Based on the fact that + * + * XA = 1 (mod 2^n) => (X(2-XA)) A = 1 (mod 2^2n) + * => 2*X*A - X*X*A*A = 1 + * => 2*(1) - (1) = 1 + */ + b = a->dp[0]; + + if ((b & 1) == 0) { + return MP_VAL; } - if ((res = mp_init (&tt)) != MP_OKAY) { - goto __T; - } - - /* tt = b */ - tt.dp[0] = 0; - tt.dp[1] = 1; - tt.used = 2; - - /* t = m mod b */ - t.dp[0] = a->dp[0]; - t.used = 1; - - /* t = 1/m mod b */ - if ((res = mp_invmod (&t, &tt, &t)) != MP_OKAY) { - goto __TT; - } + x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2^4 */ + x *= 2 - b * x; /* here x*a==1 mod 2^8 */ + x *= 2 - b * x; /* here x*a==1 mod 2^16; each step doubles the nb of bits */ + x *= 2 - b * x; /* here x*a==1 mod 2^32 */ /* t = -1/m mod b */ - *mp = ((mp_digit) 1 << ((mp_digit) DIGIT_BIT)) - t.dp[0]; + *mp = ((mp_digit) 1 << ((mp_digit) DIGIT_BIT)) - (x & MP_MASK); - res = MP_OKAY; -__TT:mp_clear (&tt); -__T:mp_clear (&t); - return res; + return MP_OKAY; } /* End: bn_mp_montgomery_setup.c */ @@ -3479,7 +3510,7 @@ __T:mp_clear (&t); * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3492,7 +3523,21 @@ mp_mul (mp_int * a, mp_int * b, mp_int * c) if (MIN (a->used, b->used) > KARATSUBA_MUL_CUTOFF) { res = mp_karatsuba_mul (a, b, c); } else { - res = s_mp_mul (a, b, c); + + /* can we use the fast multiplier? + * + * The fast multiplier can be used if the output will have less than + * 512 digits and the number of digits won't affect carry propagation + */ + int digs = a->used + b->used + 1; + + if ((digs < 512) + && digs < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { + res = fast_s_mp_mul_digs (a, b, c, digs); + } else { + res = s_mp_mul (a, b, c); + } + } c->sign = neg; return res; @@ -3513,7 +3558,7 @@ mp_mul (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3553,7 +3598,7 @@ mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3593,6 +3638,11 @@ mp_mul_2 (mp_int * a, mp_int * b) if ((res = mp_grow (b, b->used + 1)) != MP_OKAY) { return res; } + + /* after the grow *tmpb is no longer valid so we have to reset it! + * (this bug took me about 17 minutes to find...!) + */ + tmpb = b->dp + b->used; } /* add a MSB of 1 */ *tmpb = 1; @@ -3604,6 +3654,7 @@ mp_mul_2 (mp_int * a, mp_int * b) *tmpb++ = 0; } } + b->sign = a->sign; return MP_OKAY; } @@ -3622,7 +3673,7 @@ mp_mul_2 (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3644,9 +3695,11 @@ mp_mul_2d (mp_int * a, int b, mp_int * c) } /* shift by as many digits in the bit count */ - if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) { - return res; - } + if (b >= DIGIT_BIT) { + if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) { + return res; + } + } c->used = c->alloc; /* shift any bit count < DIGIT_BIT */ @@ -3683,7 +3736,7 @@ mp_mul_2d (mp_int * a, int b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3744,7 +3797,7 @@ mp_mul_d (mp_int * a, mp_digit b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3775,7 +3828,7 @@ mp_neg (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3898,7 +3951,7 @@ __T1:mp_clear (&t1); * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -3947,7 +4000,7 @@ mp_or (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4000,7 +4053,7 @@ mp_rand (mp_int * a, int digits) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4032,7 +4085,7 @@ mp_read_signed_bin (mp_int * a, unsigned char *b, int c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4075,7 +4128,7 @@ mp_read_unsigned_bin (mp_int * a, unsigned char *b, int c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4174,7 +4227,7 @@ CLEANUP: * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4184,7 +4237,6 @@ mp_rshd (mp_int * a, int b) { int x; - /* if b <= 0 then ignore it */ if (b <= 0) { return; @@ -4196,14 +4248,34 @@ mp_rshd (mp_int * a, int b) return; } - /* shift the digits down */ - for (x = 0; x < (a->used - b); x++) { - a->dp[x] = a->dp[x + b]; - } + { + register mp_digit *tmpa, *tmpaa; - /* zero the top digits */ - for (; x < a->used; x++) { - a->dp[x] = 0; + /* shift the digits down */ + + /* base */ + tmpa = a->dp; + + /* offset into digits */ + tmpaa = a->dp + b; + + /* this is implemented as a sliding window where the window is b-digits long + * and digits from the top of the window are copied to the bottom + * + * e.g. + + b-2 | b-1 | b0 | b1 | b2 | ... | bb | ----> + /\ | ----> + \-------------------/ ----> + */ + for (x = 0; x < (a->used - b); x++) { + *tmpa++ = *tmpaa++; + } + + /* zero the top digits */ + for (; x < a->used; x++) { + *tmpa++ = 0; + } } mp_clamp (a); } @@ -4223,7 +4295,7 @@ mp_rshd (mp_int * a, int b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4251,7 +4323,7 @@ mp_set (mp_int * a, mp_digit b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4300,7 +4372,7 @@ mp_set_int (mp_int * a, unsigned long b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4309,7 +4381,7 @@ int mp_shrink (mp_int * a) { if (a->alloc != a->used) { - if ((a->dp = realloc (a->dp, sizeof (mp_digit) * a->used)) == NULL) { + if ((a->dp = XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) { return MP_MEM; } a->alloc = a->used; @@ -4332,7 +4404,7 @@ mp_shrink (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4358,7 +4430,7 @@ mp_signed_bin_size (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4370,7 +4442,14 @@ mp_sqr (mp_int * a, mp_int * b) if (a->used > KARATSUBA_SQR_CUTOFF) { res = mp_karatsuba_sqr (a, b); } else { - res = s_mp_sqr (a, b); + + /* can we use the fast multiplier? */ + if (((a->used * 2 + 1) < 512) + && a->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT) - 1))) { + res = fast_s_mp_sqr (a, b); + } else { + res = s_mp_sqr (a, b); + } } b->sign = MP_ZPOS; return res; @@ -4391,7 +4470,7 @@ mp_sqr (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4431,7 +4510,7 @@ mp_sqrmod (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4493,7 +4572,7 @@ mp_sub (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4533,7 +4612,7 @@ mp_submod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4570,7 +4649,7 @@ mp_sub_d (mp_int * a, mp_digit b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4602,7 +4681,7 @@ mp_to_signed_bin (mp_int * a, unsigned char *b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4649,7 +4728,7 @@ mp_to_unsigned_bin (mp_int * a, unsigned char *b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4676,7 +4755,7 @@ mp_unsigned_bin_size (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4725,7 +4804,7 @@ mp_xor (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4753,13 +4832,12 @@ mp_zero (mp_int * a) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include /* chars used in radix conversions */ -static const char *s_rmap = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; +static const char *s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; /* read a string [ASCII] in a given radix */ @@ -4896,7 +4974,7 @@ mp_radix_size (mp_int * a, int radix) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4933,7 +5011,7 @@ bn_reverse (unsigned char *s, int len) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -4978,8 +5056,14 @@ s_mp_add (mp_int * a, mp_int * b, mp_int * c) register int i; /* alias for digit pointers */ + + /* first input */ tmpa = a->dp; + + /* second input */ tmpb = b->dp; + + /* destination */ tmpc = c->dp; u = 0; @@ -5036,7 +5120,7 @@ s_mp_add (mp_int * a, mp_int * b, mp_int * c) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -5053,17 +5137,6 @@ s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) mp_word r; mp_digit tmpx, *tmpt, *tmpy; - - /* can we use the fast multiplier? - * - * The fast multiplier can be used if the output will have less than - * 512 digits and the number of digits won't affect carry propagation - */ - if ((digs < 512) - && digs < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { - return fast_s_mp_mul_digs (a, b, c, digs); - } - if ((res = mp_init_size (&t, digs)) != MP_OKAY) { return res; } @@ -5086,9 +5159,7 @@ s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) /* compute the columns of the output and propagate the carry */ for (iy = 0; iy < pb; iy++) { /* compute the column as a mp_word */ - r = - ((mp_word) * tmpt) + ((mp_word) tmpx) * ((mp_word) * tmpy++) + - ((mp_word) u); + r = ((mp_word) * tmpt) + ((mp_word) tmpx) * ((mp_word) * tmpy++) + ((mp_word) u); /* the new column is the lower part of the result */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -5122,7 +5193,7 @@ s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -5141,9 +5212,7 @@ s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) /* can we use the fast multiplier? */ if (((a->used + b->used + 1) < 512) - && MAX (a->used, - b->used) < - (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { + && MAX (a->used, b->used) < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { return fast_s_mp_mul_high_digs (a, b, c, digs); } @@ -5169,9 +5238,7 @@ s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) for (iy = digs - ix; iy < pb; iy++) { /* calculate the double precision result */ - r = - ((mp_word) * tmpt) + ((mp_word) tmpx) * ((mp_word) * tmpy++) + - ((mp_word) u); + r = ((mp_word) * tmpt) + ((mp_word) tmpx) * ((mp_word) * tmpy++) + ((mp_word) u); /* get the lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -5202,7 +5269,7 @@ s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include @@ -5215,13 +5282,6 @@ s_mp_sqr (mp_int * a, mp_int * b) mp_word r, u; mp_digit tmpx, *tmpt; - /* can we use the fast multiplier? */ - if (((a->used * 2 + 1) < 512) - && a->used < - (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT) - 1))) { - return fast_s_mp_sqr (a, b); - } - pa = a->used; if ((res = mp_init_size (&t, pa + pa + 1)) != MP_OKAY) { return res; @@ -5231,9 +5291,7 @@ s_mp_sqr (mp_int * a, mp_int * b) for (ix = 0; ix < pa; ix++) { /* first calculate the digit at 2*ix */ /* calculate double precision result */ - r = - ((mp_word) t.dp[ix + ix]) + - ((mp_word) a->dp[ix]) * ((mp_word) a->dp[ix]); + r = ((mp_word) t.dp[ix + ix]) + ((mp_word) a->dp[ix]) * ((mp_word) a->dp[ix]); /* store lower part in result */ t.dp[ix + ix] = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -5294,7 +5352,7 @@ s_mp_sqr (mp_int * a, mp_int * b) * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ #include diff --git a/mycrypt.h b/mycrypt.h index a695c18..aef7476 100644 --- a/mycrypt.h +++ b/mycrypt.h @@ -16,8 +16,8 @@ extern "C" { #endif /* version */ -#define CRYPT 0x0081 -#define SCRYPT "0.81" +#define CRYPT 0x0082 +#define SCRYPT "0.82" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 diff --git a/mycrypt_hash.h b/mycrypt_hash.h index c6d9771..2b277a7 100644 --- a/mycrypt_hash.h +++ b/mycrypt_hash.h @@ -177,8 +177,10 @@ extern int hmac_process(hmac_state *hmac, const unsigned char *buf, unsigned lon extern int hmac_done(hmac_state *hmac, unsigned char *hash); extern int hmac_test(void); extern int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, - const unsigned char *data, unsigned long len, unsigned char *dst); + const unsigned char *data, unsigned long len, + unsigned char *dst, unsigned long *dstlen); extern int hmac_file(int hash, const char *fname, const unsigned char *key, - unsigned long keylen, unsigned char *dst); + unsigned long keylen, + unsigned char *dst, unsigned long *dstlen); #endif diff --git a/ofb.c b/ofb.c index 38609d0..808e32c 100644 --- a/ofb.c +++ b/ofb.c @@ -36,6 +36,13 @@ int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) { return err; } + + /* is blocklen/padlen valid? */ + if (ofb->blocklen < 0 || ofb->blocklen > (int)sizeof(ofb->IV) || + ofb->padlen < 0 || ofb->padlen > (int)sizeof(ofb->IV)) { + return CRYPT_INVALID_ARG; + } + while (len-- > 0) { if (ofb->padlen == ofb->blocklen) { cipher_descriptor[ofb->cipher].ecb_encrypt(ofb->IV, ofb->IV, &ofb->key); diff --git a/rsa_sys.c b/rsa_sys.c index 9a12db9..4caef8d 100644 --- a/rsa_sys.c +++ b/rsa_sys.c @@ -13,6 +13,11 @@ int rsa_encrypt_key(const unsigned char *inkey, unsigned long inlen, _ARGCHK(outkey != NULL); _ARGCHK(outlen != NULL); _ARGCHK(key != NULL); + + /* only allow keys from 64 to 256 bits */ + if (inlen < 8 || inlen > 32) { + return CRYPT_INVALID_ARG; + } /* are the parameters valid? */ if ((err = prng_is_valid(wprng)) != CRYPT_OK) { @@ -147,6 +152,11 @@ int rsa_sign_hash(const unsigned char *in, unsigned long inlen, _ARGCHK(out != NULL); _ARGCHK(outlen != NULL); _ARGCHK(key != NULL); + + /* reject nonsense sizes */ + if (inlen < 16) { + return CRYPT_INVALID_ARG; + } /* type of key? */ if (key->type != PK_PRIVATE && key->type != PK_PRIVATE_OPTIMIZED) { diff --git a/safer+.c b/safer+.c index f2846a5..b3bed1f 100644 --- a/safer+.c +++ b/safer+.c @@ -154,7 +154,7 @@ static void _ilt(unsigned char *b, unsigned char *b2) #endif /* These are the 33, 128-bit bias words for the key schedule */ -const unsigned char safer_bias[33][16] = { +static const unsigned char safer_bias[33][16] = { { 70, 151, 177, 186, 163, 183, 16, 10, 197, 55, 179, 201, 90, 40, 172, 100}, { 236, 171, 170, 198, 103, 149, 88, 13, 248, 154, 246, 110, 102, 220, 5, 61}, { 138, 195, 216, 137, 106, 233, 54, 73, 67, 191, 235, 212, 150, 155, 104, 160}, @@ -469,14 +469,12 @@ int saferp_keysize(int *desired_keysize) return CRYPT_INVALID_KEYSIZE; if (*desired_keysize < 24) { *desired_keysize = 16; - return CRYPT_OK; } else if (*desired_keysize < 32) { *desired_keysize = 24; - return CRYPT_OK; } else { *desired_keysize = 32; - return CRYPT_OK; } + return CRYPT_OK; } #endif diff --git a/sha256.c b/sha256.c index 1b702e4..20f161a 100644 --- a/sha256.c +++ b/sha256.c @@ -33,7 +33,7 @@ static const unsigned long K[64] = { /* Various logical functions */ #define Ch(x,y,z) ((x & y) | (~x & z)) -#define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z)) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) #define S(x, n) ROR((x),(n)) #define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) #define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) @@ -85,6 +85,7 @@ static void sha256_compress(hash_state * md) for (i = 0; i < 8; i++) { md->sha256.state[i] = md->sha256.state[i] + S[i]; } + } #ifdef CLEAN_STACK diff --git a/sha512.c b/sha512.c index 732b799..282733f 100644 --- a/sha512.c +++ b/sha512.c @@ -60,7 +60,7 @@ CONST64(0x5fcb6fab3ad6faec), CONST64(0x6c44198c4a475817) /* Various logical functions */ #define Ch(x,y,z) ((x & y) | (~x & z)) -#define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z)) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) #define S(x, n) ROR64((x),(n)) #define R(x, n) (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)n)) #define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39)) diff --git a/tommath.h b/tommath.h index 9db1781..ff4f1be 100644 --- a/tommath.h +++ b/tommath.h @@ -12,6 +12,8 @@ * * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca */ +#include "mycrypt.h" + #ifndef BN_H_ #define BN_H_ diff --git a/twofish.c b/twofish.c index 35e76d0..cfaa0d1 100644 --- a/twofish.c +++ b/twofish.c @@ -518,7 +518,7 @@ static void _twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, sym void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #endif { - unsigned long a,b,c,d,ta,tb,tc,td,t1,t2; + unsigned long a,b,c,d,ta,tb,tc,td,t1,t2, *k; int r; _ARGCHK(pt != NULL); @@ -531,16 +531,24 @@ void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_k b ^= key->twofish.K[1]; c ^= key->twofish.K[2]; d ^= key->twofish.K[3]; - - for (r = 0; r < 16; ++r) { + + k = key->twofish.K + 8; + for (r = 0; r < 16; r += 2) { t1 = g_func(a, key); t2 = g_func(ROL(b, 8), key); t2 += (t1 += t2); - t1 += key->twofish.K[r+r+8]; - t2 += key->twofish.K[r+r+9]; + t1 += *k++; + t2 += *k++; c ^= t1; c = ROR(c, 1); d = ROL(d, 1) ^ t2; - ta = a; a = c; c = ta; tb = b; b = d; d = tb; + + t1 = g_func(c, key); + t2 = g_func(ROL(d, 8), key); + t2 += (t1 += t2); + t1 += *k++; + t2 += *k++; + a ^= t1; a = ROR(a, 1); + b = ROL(b, 1) ^ t2; } /* output with "undo last swap" */ @@ -568,7 +576,7 @@ static void _twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, sym void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #endif { - unsigned long a,b,c,d,ta,tb,tc,td,t1,t2; + unsigned long a,b,c,d,ta,tb,tc,td,t1,t2, *k; int r; _ARGCHK(pt != NULL); @@ -585,22 +593,21 @@ void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_k c = ta ^ key->twofish.K[4]; d = tb ^ key->twofish.K[5]; - /* loop is kept partially unrolled because it is slower [at least on an Athlon] - * then the tight version. */ + k = key->twofish.K + 39; for (r = 14; r >= 0; r -= 2) { t1 = g_func(c, key); t2 = g_func(ROL(d, 8), key); t2 += (t1 += t2); - t1 += key->twofish.K[r+r+10]; - t2 += key->twofish.K[r+r+11]; + t2 += *k--; + t1 += *k--; a = ROL(a, 1) ^ t1; b = b ^ t2; b = ROR(b, 1); t1 = g_func(a, key); t2 = g_func(ROL(b, 8), key); t2 += (t1 += t2); - t1 += key->twofish.K[r+r+8]; - t2 += key->twofish.K[r+r+9]; + t2 += *k--; + t1 += *k--; c = ROL(c, 1) ^ t1; d = d ^ t2; d = ROR(d, 1); } diff --git a/update_libtomcrypt.sh b/update_libtomcrypt.sh deleted file mode 100644 index 9940827..0000000 --- a/update_libtomcrypt.sh +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/tcsh -# Get latest copy of libtomcrypt and install it using "tcsh" -# -# Tom St Denis -echo libtomcrypt update script, Tom St Denis -echo "http://libtomcrypt.iahu.ca\n" - -if ($1 == "--help") then - echo "update_libtomcrypt.sh [makefile] [sig]-- Download and optionally build the libtomcrypt project.\n" - echo "\t[makefile] --\tYou can optionally specify which makefile you want to build with. If you specify " - echo "\t\t\t'nobuild' then the library is not built, just downloaded and unzipped. If you " - echo "\t\t\tleave it empty the default 'makefile' is used to build the library.\n" - echo "\t[sig] -- \tOptionally verify [via GPG] the signature of the package." - exit -endif - -if ($1 == "" || $1 == "sig") then - set make = "makefile" -else - set make = $1; -endif - -if ($1 == "sig" || $2 == "sig") then - set sig = "sig" -else - set sig = "" -endif - -rm -f latest -echo Getting latest version number from website. -wget -q http://iahu.ca:8080/download/latest -if (-r latest) then - set a = `cat latest` - echo "Latest release is v$a.\n" - if (-d "libtomcrypt-$a" && (-r "libtomcrypt-$a/libtomcrypt.a" || $make == "nobuild")) then - echo Libtomcrypt v$a is already installed on your system. - else - echo "Downloading libtomcrypt v$a ..." - if (-r "crypt-$a.tar.bz2") then - rm -f crypt-$a.tar.bz2 - endif - wget http://iahu.ca:8080/download/crypt-$a.tar.bz2 - if (-r "crypt-$a.tar.bz2") then - if (-d "libtomcrypt-$a") then - echo "WARNING! Directory libtomcrypt-$a already exists. Cannot continue.\n" - exit - endif - if ($sig == "sig") then - if (!(-r public.asc)) then - echo "Downloading and installing code signing key...\n" - wget -q http://iahu.ca:8080/download/public.asc - if (-r public.asc) then - gpg --import public.asc - if ($? != 0) then - echo Could not import signing key required to verify the package. - exit - else - echo "\n********************************************************************************" - echo "A new key has been imported to your keyring. You should check that it is valid." - echo "********************************************************************************" - endif - else - echo "Could not download the key to import." - exit - endif - endif - echo Verifying signature... - wget -q http://iahu.ca:8080/download/crypt-$a.tar.bz2.asc - if (!(-r "crypt-$a.tar.bz2.asc")) then - echo Could not download signature to test. - exit - endif - gpg -q --verify crypt-$a.tar.bz2.asc - if ($? != 0) then - echo "\n\nSignature for crypt-$a.tar.bz2 is ****not**** valid.\n\n" - exit - else - echo "\n\nSignature for crypt-$a.tar.bz2 is valid.\n\n" - endif - endif - bzip2 -d -c crypt-$a.tar.bz2 | tar -x - if (-d "libtomcrypt-$a") then - if (-r "libtomcrypt-$a/$make") then - cd libtomcrypt-$a - make -f $make - if (-r "libtomcrypt.a") then - echo "\n\n*****************************************************************" - echo The library has been built and you can now install it either with - echo - echo "cd libtomcrypt-$a ; make install" - echo - echo Or by editing the makefile and changing the user you wish to install - echo it with, or simply copy "libtomcrypt.a" to your library directory and - echo copy "*.h" to your include directory - echo "*****************************************************************" - else - echo "\n\n*****************************************************************" - echo The library failed to build. Please note the errors and send them to tomstdenis@yahoo.com - echo "*****************************************************************" - endif - else if ($make == "nobuild") then - echo "\n\n*****************************************************************" - echo "The library was downloaded and unzipped into libtomcrypt-$a/" - echo "*****************************************************************" - else - echo "The makefile '$make' was not found in the archive.\n"; - endif - else - echo "Could not unpack the libtomcrypt archive (corrupt?)." - endif - cd .. - else - echo "Could not download the libtomcrypt archive from server." - endif - endif - if (-r "libtomcrypt-$a/changes") then - perl <; print \$a; \$a = ; - while () { - if (\$_ =~ m/^(v\d\.\d\d)/) { close(IN); exit(0); } - print "\$a"; \$a = \$_; - } -! - else - echo "Change log not found. Is the package really installed?" - endif -else - echo "Could not download latest file from server to check version." -endif