From 08efe11a7da159a749514f7226d79901ff410f22 Mon Sep 17 00:00:00 2001 From: maleg Date: Sat, 13 Jan 2018 04:10:40 -0500 Subject: [PATCH] Added functions and updated makefile --- Makefile | 6 +- RIPEMD160.o | Bin 0 -> 7376 bytes common.c | 179 ++++++++++++++++++++++++++++++++++-------------- common.h | 27 +++++--- common.o | Bin 0 -> 7136 bytes libmylibc.a | Bin 38664 -> 17570 bytes obj/RIPEMD160.o | Bin 7392 -> 7376 bytes obj/common.o | Bin 4088 -> 7136 bytes timer.o | Bin 0 -> 2344 bytes 9 files changed, 147 insertions(+), 65 deletions(-) create mode 100644 RIPEMD160.o create mode 100644 common.o create mode 100644 timer.o diff --git a/Makefile b/Makefile index 02faa5d..6a2f4d0 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ LIBS = -lm DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) -OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) +OBJS = $(patsubst %,$(ODIR)/%,$(_OBJ)) $(ODIR)/%.o: $(SDIR)/%.S $(CC) -c $(INC) -o $@ $^ $(CFLAGS) @@ -24,7 +24,7 @@ $(ODIR)/%.o: $(SDIR)/%.c $(CC) -c $(INC) -o $@ $^ $(CFLAGS) $(OUT): $(OBJS) - ar rvs $(OUT) $^ + ar rcs $(OUT) $^ $(DEPS): .PHONY: clean @@ -34,4 +34,4 @@ clean: copy: cp -f $(DEPS) $(GLOBAL_LIBDIR) - cp -f $(OUT) $(GLOBAL_LIBDIR) \ No newline at end of file + cp -f $(OUT) $(GLOBAL_LIBDIR) diff --git a/RIPEMD160.o b/RIPEMD160.o new file mode 100644 index 0000000000000000000000000000000000000000..5a6afaaffd582e3715a1bb0bfaf1f90faa9d864e GIT binary patch literal 7376 zcmds6eP|rV6`#Gkz1_Y2Qd75XVwYY~Vr;OlvSqt%B01-el{fX-K4giy#pNPPXG_HT zKsvd0u!&n^0UJ8JBl$KA1YAmA2vp_uF4D$zFJsbgsv{e~i8&Mia;8kkIVq@oA=fP;yGXQ}UcUsOqOPp0nUP3!XC@jI*9o z_MNil%mw2%&sp@HMbDWJ#>YLU0X>!dz9Ft(`XU6{(%uyngHS3AY5E`g~|k?ek@Yl zDg6hw#=VK#liojl=bkj}IS-(P2z_wJx#v4`6XOX80DOe7eCGiKi>_TBm##T8moCoO z_SL4Pr6n578#I{352tmf+z9Ie;gtT5;Z#^Su;3+{23Y(u4F|FUS%X|bI16GpPeM4j zpftqWG%(y1umbhY9L6;J;dH$-udU5w?c&J_Vp^z&{Rxpk((0Wu#=IN787ERGS?!viG&B-d`$y&ge7C&t#3o@nSn>C9e zuE95}da{BC7!DP@So9`bgXan#U|L~hGw@(bc%9RyFTk?!lp|JwA_9sAFPjPQHhk~_ zFL68@;Kw1Mh%a!wEx_S>7V$F2k5jz;ftPh}ITfrtXmPVh-`b!M3d*ArEt;U1fWiVQ z2`DU}l9+=^0xZ%};|`P^Xbh^n+LheY%JQuN%D0m14bQt?`>cEU;yf9yR&b9(nOVDn zE74-_Y5VGWDiRcY8$Vgx9v!Ep<(8Y?G*nnnz~M5uPdSyrbI_wELB{RGf~*A9nOk&K z*KbEL@NUxe{=f@JDvK<-ex+;K6I8{A@)X1;-iczBheo_QXezEm%SIU9Dz*HJCb;5m zac1vRH4LTJytAv%3&}(CE9RYDIq!WP7IT)^S3df9X{lN)2SvCyTt>HW;-V{|&)2>| zT|n<|Odg1+mpH%aYiHMCACi{F7DKqa$U^XmhkjJNY`}x~CrU|<9T4>nalNAJ0Wx)0DpTCT{svNUC>Ed%yhM`ybDZ-8kE}qpo~+W~I0kiN@r( zqG}1BFrrBjTb81V71wkXjF6bA#$!@cw~1^- zOif8xhMkB>vZ}-*rbVKf9=45r-Lef}YdZKIS2Pe*OjEvMpOvHE>=9M6+cbR16t{*Ht+#+E+C&ZQHVC;Lp&7ERsxXBiTQEgj265{DOXt7;?N{#qxo_@`4KE(~=-4m9bN=0b zHT(D<51;s8&p_{cXM3MVUh6Yi=kS5;yBkuSWGH{;)V4h*hffXk4<(zMle>44f#jE) zlSkS!ndGKT$us%B(}nKjp5|o3O4%k9C1kK?Am7^swsM{Qy#s^!p`q~XVgA5iew82o+ z5xCkm0)`)?YhL*P#@S^=J!aPe}Qrd z`8l>+Kk{nT{!bYH{0e@7@)_%)2B(UVe=I%303cfPFA0c8Yl#CITLq^-saNpuAW38y z=j*zj;YlW)W$j}Oza-#aWca**CmEi`0D-ujdg$Z4m@_0k?$9 z47ER61^@9X_$#a6zXlxVU7vss5Z$BDPQVB8E9~Z?dlRr}hHo{X14Q>Ew10t5Ek9RW z0zG{_g`SQxxo*;$A+4?CScV*HC5JNPP;0FNp37xhowl}b~DMK=#gA51qXH) zsm<86BV+`pBDsT^qx<$|az|TQjyY|)w!Ql@PLA~EdpiftV>6TonOw)vP=2tGJJr#1 zCS-tLBg+?0SASoASpXD=3LTx#lmNg*~sLc7Vsak@v{Ox z$K?Me;1?KfF@L%JUop9_2zV32Cj^}PvmoHyACp~G+&=f`x`1{)`DY_ota%h1?GJr(3|eKc0Yde>SiygWKW$v-VM!1+0H1^lmUe;y9m51*qhL7v+m5O8k)y8>Qe_Ajhr|LqVSzBdlAdl};m<4>@A zS;W7?a10;cG=2{hLiiU#_zyxj{)>Uj|1@NOLkLeo9|`TVC8pyv{a(iTyY{Sr^Y`bH zfb;j~WdY~!4@nK3?=5tkgtjmkwB5Wnm_O5zD&)@C2csT%d1Wol@)c-dzAP4^d literal 0 HcmV?d00001 diff --git a/common.c b/common.c index 075364e..0c64a5b 100644 --- a/common.c +++ b/common.c @@ -3,10 +3,13 @@ #include #include #include +#include // For write +#include -#include "common.h" +//#include "common.h" -int memcmppos(void* inl, void* inr, int len){ +int memcmppos(void* inl, void* inr, int len) +{ int rem = len; while(rem>8){ if ( *(uint64_t*)inl != *(uint64_t*)inr ){ @@ -35,7 +38,45 @@ int memcmppos(void* inl, void* inr, int len){ return len-rem; } +void memcpy_swap32(void* dest, void* src, int len) +{ + uint32_t* dest_p = dest; + uint32_t* src_p = src; + int i; + + for (i=0 ; i<(len>>2) ; i++) + { + dest_p[i] = htobe32(src_p[i]); + } + +} + +void bytes_to_file(int file, char* str, int len) +{ + int ret = write(file, str,len); + if (ret != len) + { + printf("write_to_disk : Didn't write all the bytes."); + exit(EXIT_FAILURE); + } +} + +void str_to_file(int file, char* str) +{ + int write_length = strlen(str); + int ret = write(file, str, write_length); + if (ret != write_length) + { + printf("write_to_disk : Didn't write all the bytes."); + exit(EXIT_FAILURE); + } +} +void strline_to_file(int file, char* str) +{ + str_to_file(file, str); + str_to_file(file, "\n"); +} //---------------------------------------------------- //---------------------------------------------------- @@ -76,18 +117,19 @@ void bin2hex(char*out_p, unsigned char*in_p, int len) } - void hex_dump(void *data, size_t len) { + void hex_dump(void *data, size_t len) +{ unsigned char *chr = data; for ( size_t pos = 0; pos < len; pos++, chr++ ) { printf("%02X ", *chr & 0xFF); } } // this function is mostly useless in a real implementation, were only using it for demonstration purposes -void hexdump(const char* header, const uint8_t* data, int len) +void hexdump_bytes_hn(const char* header, void* data_p, int len) { int c; - - printf("%s", header); + unsigned char * data = data_p; + printf("%s", header); c=0; while(c < len) { @@ -96,23 +138,19 @@ void hexdump(const char* header, const uint8_t* data, int len) printf("\n"); } -void DumpBinBigEndian(void* ptr, int size) +void hexdump_uint32_hn(const char* header, uint32_t* data, int len) { - unsigned char *b = (unsigned char*) ptr; - unsigned char byte; - int i, j; + int c; - for (i=0;i=0;j--) - { - byte = (b[i] >> j) & 1; - printf("%u", byte); - } + printf("%.8X", data[c++]); } - puts(""); + printf("\n"); } - + @@ -140,7 +178,63 @@ msg_clear_bit(unsigned char* msg, int offset){ } -static inline void +int +get_bit(unsigned char* msg, int bit_offset){ + int B = bit_offset >> 3; + int b = bit_offset & 0x07; + int ret = (msg[B] >> (7-b)) & 0x1; + return ret; +} + +// Return string length in bytes +int +sprintf_bits(char * dest, void const * const src, int const size) +{ + unsigned char *in_p = (unsigned char*) src; + char *out_p = dest; + unsigned char byte; + int i, j, ret, len; + + for (i=0;i=0;j--) + { + byte = (in_p[i] >> j) & 1; + ret = sprintf(out_p, (byte == 1) ? "1 ":"-1 "); + out_p += ret; + } + } + len = out_p - dest; + dest[len-1] = '\n'; + return len; +} + +// Return string length in bytes +char* +str_bits(void const * const src, int const bytesize) +{ + + static char buf[4096]; + unsigned char *in_p = (unsigned char*) src; + char *out_p = buf; + unsigned char byte; + int i, j, ret, len; + + for (i=0;i=0;j--) + { + byte = (in_p[i] >> j) & 1; + ret = sprintf(out_p, (byte == 1) ? "1 ":"0 "); + out_p += ret; + } + } + len = out_p - buf; + buf[len-1] = '\0'; + return (char*)buf; +} + +void incr_256bit(uint64_t* p_data, int qty) { //printf("Increment\n"); @@ -187,6 +281,7 @@ int get_entropy8b(unsigned char * msg_p) } return max_consec; } + int get_entropy16b(unsigned char * msg_p) { int consec = 0, max_consec = 0; @@ -211,49 +306,27 @@ int get_entropy16b(unsigned char * msg_p) return max_consec; } -void* ProcessBits(int startBit, int endBit, int level){ - int idx; - int hashValid; - int bit, B, b; - static int mem[128][3] = {{0,0,0}}; +void ProcessBits(unsigned char hashIn[], int startBit, int endBit, int level) +{ + int bit, B, b, iter; for (bit=startBit ; bit<=endBit ; bit++){ B = bit >> 3; b = bit & 0x7; hashIn[B] ^= 0x80>>b; - if (level == 1){ + if (level == 1) + { iter++; - //hexdump(hashIn, SHA256_DIGEST_LENGTH); - //same as above - sha256_init(&sha256_pass2); - sha256_update(&sha256_pass2, hashIn, SHA256_DIGEST_LENGTH); - sha256_final(&sha256_pass2, hash2); - - hashValid = 1; - for (idx = 28 ; idx >b; } } + diff --git a/common.h b/common.h index bf0d86c..f8717ea 100644 --- a/common.h +++ b/common.h @@ -1,33 +1,42 @@ #ifndef _COMMON_H_ #define _COMMON_H_ -#include "stdint.h" +#include -#ifndef _COMMON_C_ - int memcmppos(void* inl, void* inr, int len); + //---------------------------------------------------- + // MEMORY Manipulation functions + //---------------------------------------------------- + int memcmp_pos(void* inl, void* inr, int len); + void memcpy_swap32(void* dest, void* src, int len); + void bytes_to_file(int file, char* str, int len); + void str_to_file(int file, char* str); + void strline_to_file(int file, char* str); //---------------------------------------------------- // HEXADECIMAL Manipulation functions //---------------------------------------------------- void hex2bin(void* dest, const char* src); void bin2hex(char*out_p, unsigned char*in_p, int len); - void hexdump(const char* header, const uint8_t* data, int len); + void hexdump_bytes_hn(const char* header, void* data_p, int len); + void hexdump_uint32_hn(const char* header, uint32_t* data_p, int len); void DumpBinBigEndian(void* ptr, int size); //---------------------------------------------------- - // Bit Manipulation Functions + // BITS Manipulation Functions //---------------------------------------------------- void msg_set_bit(unsigned char* msg, int offset); void msg_clear_bit(unsigned char* msg, int offset); + int get_bit(unsigned char* msg, int bit_offset); + int sprintf_bits(char * dest, void const * const src, int const size); + char* str_bits(void const * const src, int const size); uint64_t Get_mask_left_64bit(int mask_len, int mask_offset); uint64_t Get_mask_right_64bit(int mask_len, int mask_offset); - static inline void - incr_256bit(uint64_t* p_data, int qty); - void* ProcessBits(int startBit, int endBit, int level); -#endif + void incr_256bit(uint64_t* p_data, int qty); + void ProcessBits(unsigned char hashIn[], int startBit, int endBit, int level); + #endif diff --git a/common.o b/common.o new file mode 100644 index 0000000000000000000000000000000000000000..7e4b40095f46239ba0eccbfc11073d5523aca2dc GIT binary patch literal 7136 zcmc&&Z){Y@5#M)qupy9hDNTup=%GMynsBjAAWlpo^XI{%G6{h=C25-DY@hKJ`+U7W z!mcnN9aMh082MYHR;~DeD%AD^Q7d9aNifF3rlP485G9G#+y~RTI#;<=R(q{1+~4e* zefRG9T(#+kE_%1SznPtxot>Fob5d{G?a?%$nkJqTg_%NyIJdemZj{4Du|g~t&4zi` z?3+vLbKddqT&0;|_DvgRGGjJRru9ivpUbW@()zTKu0oeF(!zLpB>A9`(x)~2WVBS* zTxF_nuJYtZ*>!{2wZv<&ro{rraxj*koXkElnDr5(_mULqy(H@0GBvPjCqK?=gRtT; zea+!W-mM*miGcMx=r0yby)~v!keo67 z26fl;KZ)$?Y5m5)e$8yYAvXbbZ35@puissa@JF1XTrpv-xI;%}4Cr^?se;h=NwQMe zUj`u!`mN(X8iXa&ZN_HH$i#ipwKy=Na9}l#NG5LBpC8j_NnUnKTA#JFWi0!=mvEkN zyyY0^D;yo-NYnEveHOtn+n`S#zv?(brGpjZj4?egHEaZu!^XXrhRtgW!U36+r}W8b zQfq^riT$o1)nz$?1D44hER>{n^f-)@UgUk{)xJup=Z)OBybQLwqSB=tZY!m9PHyrE z#FA7xSCnkzQ{>gcbuv9Bk6&M?7e&WRP9Z_B5Pd#4Bm{0mES_lQV4F!Ib77MsCXe58}zvoUi9=vs9=dyCR2U0Yftayj zUpY9t7H^dSV;-4=st6?mQOk4o&HG;zGpPg@1jOKa@SZj1=jU-nkpCR*SS*|f1rptX zws8EY?-}2&a9dsZh9my75x+Vova?<=DB*z`807x}>xx9O*u z{$kPkCYyeq=?9DG&)f7-rtdAH@3QGrOqY*7{zo>*L!@p9k43gZ99$FrU z9GL^mR3_wwS+wLUm}yQq^cLn;Cg@qPu$2kQq=l_aELi}q1+o$vlpQkXfK@a83tk~( z3}eb|;(vtCUgj6DUHBZPVP>^g(UrpAS_D752p$4XdXubI<}I-AEy7Rs68}x+mw61V zpYaNg4Vk~d2Jw}$^M{Mz7g)|MmLqc<*u_QohnT;fLq+C1uq%w8WnAVuun+N-vgc#w zzn?=(oeSNkwBHotGUtKi8NbE2%ynQ(;1}ZG$RQ_l9QXr_M;Vv74SWsb+c<<|P6J=h zxR*mQ1B_Y?7k2MHsJ|3=Y5R^Q zJs{-OC_+8qgor0%HZ#VZp$I{p;fTCZrHqbHPhCq`;)(7~7!ywfTaN}>JB|k0gW*mA zS{-;qJQ@o}672%xKwGjaN(1TxmPs8E5ltpqJAyHrkOcqcx&SC$@gsqFC=qCZNi=Tl z3C&QK%~>yGx;w>W3DTU*5bSa)kE9^XN$xf$>~ zH3|SF?b-@4LBK*@X{(320h`%nvU(WS|I(k1TJF6L2 z`%-%A9Q;l@54-rEWxd~Bg#Wk$cj}$s`lR&kU^ySTaGmkLFizr}etwzj8Ob4<+SiXA zI1QEj^DbP~%^}9!^6xtMo$~K3f-mKI>9*&V1E-};_^ADXagy!y^RxqZ=EdHna+%z# z)1P6+N$=P3DL?oucDz~W-BM_cJXE-PKOA=9>iuxqg{$|&c^9tk_fZ$F?(r!XuI}+l zM_!Xn>RzsP;p+ZXbx+x^?%xgYlB3 z;p(0>T)4VtJ6yQBXZu~ax@Uzy-rJQ3wxCbMtiD5yVxi8UKN0Fl2!C5J5fuKGcwG2n z-PVLIX52KwAL&kn{Cl2n-XyO?FwnA4N1#0x>`% zqU3cnpJPnJT6`pvkC7m&k-=z(iiDT<%^bKg(QyFs`cvpi0o1U1pZhdJ8^*z=6+1+ jbFZgkUT}86?(n(2;@YrlDyRmRT3^ow20?c=_xgVU@0^RX literal 0 HcmV?d00001 diff --git a/libmylibc.a b/libmylibc.a index c2f034da1b3f2cb2754ff8daf2d6322845689211..ec2453d8ef95b993e77283d494f17ce10ca8deca 100644 GIT binary patch delta 4408 zcmb_geQZ!10|3T9G3<#D>zO<9Iq+aO7o%HwCm-zvhSC%N72wyQE=CWJH)BGxW%O&bXLf3>b| zLYCTSI7;(E=TpO>;lOY-Iuaw;iyrpH4*H|*ZDil!cqrzJkN5_|2SOwkAJz8{gd-ts zOb5hA>wT*FP=pMH4h0j#QC}h)iMO};hUhOu`-XktIEh6^0UGo{KgR5_PB;=6^|f`l z>9p`@b^qu{AQX%31P$6M?4Um|wV!=I`e`Gb-r_3jY;AYbNxMrtxsKkC)|-{Fdui#O zW%i|uG&k_Oq(@f9va*txRlGBDT7s@rfcGrC=Pyfn2rs$gNlSV84LS43aU23$kTZ>< z5uBHWY?>&S3;(#kxTu&?QeH?)Gv|w9my}PwHz}uPJU@BqqE}YFkW+JZWo!;s%_S9Y z0qq5{a=I^_B7+AB;OEXuZiRMw8%QPA=IfrlsOHSoccB zZ)x5Nfdh}{<+OJm{F0R$d<`6AI?y!^OkO#A#D79CgBP$i?vCybtZuw4Euhk!t!Zf? z(=RCA1?Cs12wCddT4w^B?hmY|mVje@3s_}J_m%}d$6^fT>P=V9nd$Crf1!JW)yV}o zi&U-xmIE8A)dFZ*-XWHEvQrhX>f=&TIe+b6N;Z`f)WDXGq8~B~AkC+S^FnGYPY$0*Njb=zT$l9j5rxgdblh@5RR>qbQ~MM4 zo^UX-Ic{gL-GAVKJw6n&v+C_6X0p-Mwue3JWMhnMbmGYA*+W|GWE(V>o%F@_!(@Nd zUhW?qNkoG5)!r65v0+nP4X*lBjrC{Z(<{n*zgtlW!$xRN(yu~I$rq6YIfM^QOG=r< z$dcwU(7A)wyIsO>8&rTMw z9@^TxR(OFu-)7GNeAb1yeuC?>lLqWnWLwcHu6~WP?3@7`=XeF*=7%swnPirK#VntO zG0wftb%IQTkUulaQ=IjfRQP$$p6B=k$61m9_A$;%e#+Tu9w%+ra~w}`d^e0yiqM!3 z9DkOfgp|X65Z}yxXb55116&Qqqa0^h19*dqC&`oLss)xV&~4@uEcg=#l4DOoTpYj4 z@hHc;Iqt)67384$B7Gdc!Eu&1$OT4*hesmL0P*?u#X8`k=);?0V$j*{Zu77U_4Q8g7=M2txV`CSEDq_J!%)@Dm%B?wQdnM0c7HIdNsG_{UaZDeKx`qeo?N`?NBf42Db?nb|_-Y;gdmXM{W$GcTT)vwV-_pbN$4=PSC)~^(=h}70l`^+l-K_G*szXuJa ziQ{OZ4w@FGutC2Cl|f=A+P%HD{;Yv!w@{$pQ|W?%_OQ8x{GHKlW&C@>7nVD1Q3uC0 zCpD{WWo*#_1I@1HF#Q!qCyzYDYLo-+A z2~}B*t+v1^-307vWnzls#s$96>FXD`{}8;2R|nOh<|U7=>j<3tBWNg}S701>6gZ7* z=+m;difOUU>5nDMaa?B;ZEb89YUu5aYsI$+J<(BHul-h>QfIR;plU*(S37ExTJg^t zXs!5H>XII(X$9Y5z_n7ZeekG@O)K?727O-SlVsdLXjT5S0l$v%0GT!5T9q#taIMN$ zq8A{VLt2q{F#NeCLaXw!VS-lWhYYw@<;M;9jY@i^@v8WC6+OD%UFE@w0Ai>9=Q_o& ztEk^vOQV||X1E=yVx>oIwqJVdDmgGfZ*T4t2h4Prr(2vbs}md!^Cag_inP1QZQcWa yZJ^`?dbG*C#P4w87b)sk8*`t})tNsnh0$h6l delta 3587 zcmeHIZ%kWN6hHS;Ht87U-wFj<$^c=Lt)-H#pi_Sj@F~%$|8ciozViwVm;1`j^eZXikj30@@2ND<8WZv_7Uwvz0G=7y|a?ZQ= z_q+GJd(S)X-uEZj#3y{lGkU;XXHOtt1b`ZVG~a_}?*`D@o_Tn+d= z5NIX$4;Fa~KyT9@0Q_aI->AnQSYt-0FBA+#A_Gx$u(E7u9|}d<`onGg&nV&E{vNc~ z+VKXn{HM`q<}U7a;UVs1v$0|RPL?4$7<8aHr!zxrDuI|kC(12$p6KOC_JnvcNC#hR zE$=*MB^We2*m4Zb1!=4iuUj1K7yME9M%+>4VDVT(Q443^;Bd(zKg!YWwc*R&LUt5~ ztu1`agg+OX@i%WZ8^e3n7B-I!wif2WVc}Qs3$=aERuyY*=*__0rA|Yg)8nC4^P8DC z!i({<(%IO@Wmgz}S#Hg*nNs4@U2O71yd${WF{P|_uw{(zwxkIj-z>MbuS^cz7W_)b zq;hvr*`OV*buB8J+o{nsrEDbT-4*jpb6}cVo>Dd^zxw`<$>s4?HleJW=9G23Se|DY z4{fsXmp0+WTjRnR{-hsr2a?x)@m z;H^Cl{5q!sU3&{froP)-J{q9a2#C@FXwAyL#2?$ajr%jVKLk)Bs4?ONPLfONN0Rz1 z@d88Sl6oYm&l4~38o8wYil&#tDhUEd$R!7KY6HYq$4{GV^>#+Os9$o)Vb7|=?1J)1 z{rm&^pwPv)w&9000i4e@;HBp7TKYY6MKNi3Pd4%;ul2u`d%iHHCtEn$(;gsV+(NB(Co(wVaV`g)DD1ZGszABVLf|RjH~;6WkQ3qcc*qr-_Du znlbTwR~W71tmKc8DDaUm;uj>ZrcQ7-C0}O{4FNS})CdlQLIdIbK}a3}aJugW*Qx$6 z_#f{qJlxjW=|6n%;4$U6|9ER#r{ag`xxwf9aKTw`gUHai;OU;h)bk=tLKMqtOX<`& z1zJ++-I>DT_Y?5RG!eg3$NP1BmX5zBdCF9}j{h86Tm_@|Q&ic744GJZORjEKtK_w4 z^k)*D_?z+1r;MkPB8(;YQAmBk8@fPLXWF)ZO$lUD!vOrQ8?RqzzWkOX)3!+?SR_yH zH3RRPRod(}YzG>uFv*;iBeB{aDUinQWfNKvnH^tsK4wE8pXl1xFh`m0Fc zwfbvM;p+@Ib6|;IH(l{(4Wg&7lKI0|MWum6R<}10{{R3 diff --git a/obj/RIPEMD160.o b/obj/RIPEMD160.o index 373c3d1ca009184f76e11b765af1971f7e5c5c1a..5a6afaaffd582e3715a1bb0bfaf1f90faa9d864e 100644 GIT binary patch delta 143 zcmaE0dBJjm2IGW{nzQ*PpWySE%qT3p*_c0;iBVwkL_u*zgUu@i%b6H?CM$~QGoINT zC?d|xs53cJT%Ym&aeF4l9g{7kjx#zii?uN4irX_Wo|vpDb(}G1@<%CiAgL*B y&(y#_d7`A)Fob5d{G?a?%$nkJqTg_%NyIJdemZj{4Du|g~t&4zi` z?3+vLbKddqT&0;|_DvgRGGjJRru9ivpUbW@()zTKu0oeF(!zLpB>A9`(x)~2WVBS* zTxF_nuJYtZ*>!{2wZv<&ro{rraxj*koXkElnDr5(_mULqy(H@0GBvPjCqK?=gRtT; zea+!W-mM*miGcMx=r0yby)~v!keo67 z26fl;KZ)$?Y5m5)e$8yYAvXbbZ35@puissa@JF1XTrpv-xI;%}4Cr^?se;h=NwQMe zUj`u!`mN(X8iXa&ZN_HH$i#ipwKy=Na9}l#NG5LBpC8j_NnUnKTA#JFWi0!=mvEkN zyyY0^D;yo-NYnEveHOtn+n`S#zv?(brGpjZj4?egHEaZu!^XXrhRtgW!U36+r}W8b zQfq^riT$o1)nz$?1D44hER>{n^f-)@UgUk{)xJup=Z)OBybQLwqSB=tZY!m9PHyrE z#FA7xSCnkzQ{>gcbuv9Bk6&M?7e&WRP9Z_B5Pd#4Bm{0mES_lQV4F!Ib77MsCXe58}zvoUi9=vs9=dyCR2U0Yftayj zUpY9t7H^dSV;-4=st6?mQOk4o&HG;zGpPg@1jOKa@SZj1=jU-nkpCR*SS*|f1rptX zws8EY?-}2&a9dsZh9my75x+Vova?<=DB*z`807x}>xx9O*u z{$kPkCYyeq=?9DG&)f7-rtdAH@3QGrOqY*7{zo>*L!@p9k43gZ99$FrU z9GL^mR3_wwS+wLUm}yQq^cLn;Cg@qPu$2kQq=l_aELi}q1+o$vlpQkXfK@a83tk~( z3}eb|;(vtCUgj6DUHBZPVP>^g(UrpAS_D752p$4XdXubI<}I-AEy7Rs68}x+mw61V zpYaNg4Vk~d2Jw}$^M{Mz7g)|MmLqc<*u_QohnT;fLq+C1uq%w8WnAVuun+N-vgc#w zzn?=(oeSNkwBHotGUtKi8NbE2%ynQ(;1}ZG$RQ_l9QXr_M;Vv74SWsb+c<<|P6J=h zxR*mQ1B_Y?7k2MHsJ|3=Y5R^Q zJs{-OC_+8qgor0%HZ#VZp$I{p;fTCZrHqbHPhCq`;)(7~7!ywfTaN}>JB|k0gW*mA zS{-;qJQ@o}672%xKwGjaN(1TxmPs8E5ltpqJAyHrkOcqcx&SC$@gsqFC=qCZNi=Tl z3C&QK%~>yGx;w>W3DTU*5bSa)kE9^XN$xf$>~ zH3|SF?b-@4LBK*@X{(320h`%nvU(WS|I(k1TJF6L2 z`%-%A9Q;l@54-rEWxd~Bg#Wk$cj}$s`lR&kU^ySTaGmkLFizr}etwzj8Ob4<+SiXA zI1QEj^DbP~%^}9!^6xtMo$~K3f-mKI>9*&V1E-};_^ADXagy!y^RxqZ=EdHna+%z# z)1P6+N$=P3DL?oucDz~W-BM_cJXE-PKOA=9>iuxqg{$|&c^9tk_fZ$F?(r!XuI}+l zM_!Xn>RzsP;p+ZXbx+x^?%xgYlB3 z;p(0>T)4VtJ6yQBXZu~ax@Uzy-rJQ3wxCbMtiD5yVxi8UKN0Fl2!C5J5fuKGcwG2n z-PVLIX52KwAL&kn{Cl2n-XyO?FwnA4N1#0x>`% zqU3cnpJPnJT6`pvkC7m&k-=z(iiDT<%^bKg(QyFs`cvpi0o1U1pZhdJ8^*z=6+1+ jbFZgkUT}86?(n(2;@YrlDyRmRT3^ow20?c=_xgVU@0^RX delta 1549 zcmZ{jU1$?q5XWcNZEMmb)mYQrRNIIxl&ff4w1sM=jjjf6y{(^kLD;5g)Tl{g()fjv zYDEn}NF5Xe6@Bx1K@hR{BKSp%4@%+o!8dck2cd|4C|abTXLirlb-{si_MG2;X3p8! z*<$N#ZJ|MY;u`tGKeF@gqi*qy={5l%DZ4S8s4tuM=Z= zQnLlF1{SadGdiE_CL46~W1R2ODZqWsUvaJ%k}>KF@?R$zj(P!U85xMj2NG){5Rb+q z@nmu!4Tqv9oBLu3(6)8S-NDW-t$XX%UFvRacW1Cm)gV2XIvT|Ti`&*iGBX%C6i&gG zOgtHkC4#YoYN9_DPLPm>c>180jt**lu|a(uIT{V8G?ct6`oOF-UB|`7+;_t|c;$$@ zEnKs3kA>gkoQhXs;g9iuZ&miYP32o~@LJO;UQ1Lb=Vmtg1#o1eKY^MRm>XxO2Qe%6W-h>&c4%}Y7$|3VhjO)4YRLhPY>SAVLB0m5WO*m8l diff --git a/timer.o b/timer.o new file mode 100644 index 0000000000000000000000000000000000000000..6e8cbf78651dd7f2e9dee78e2d74eddc22f1f295 GIT binary patch literal 2344 zcmb`I-AhzK6u{5Anw8qFWf0lJK9p$WWz|snpmvqjc`yZasUW(p>)kY6rQK_o1qwlM zk-&!@s(+)G=%rO5R1oZ?=U##(g4BmvBCvDj&aBgTeaVi@oio4lG2=NiIveZmEb;k3 ziVv>A?n+XCeA%uZ;c5h`pc3ND`NE!l3k|dR(sT7_U{0*ilw;3hpPBRFJ*CQ%JDW!^ zAJ4P-8--!kQptVoGHzR4mRXonV9pkE)-Vgk$MbI~)=l8VHjxxC$tF+Mu*94VHkyOA z*HZjR zJiyke!1vW{7C681_vVOmgmc@0;7KaTcHr*PcHq|H>N2gsT3?SsS4YR?P!mLFcgZk<6+gQSx_(PP19 zB^_0VN}}lD+O85u>8DT8-cz*SA&&BxK1KV(qWuYRlrj1g?I~_2gMj@e)5~@)AENmt1l1L%FirRsDbk@en^8+Cz^ZIj)?O*B03c9Kk)_01f-_wtYB5 zPWfeC-Wz1M1%HJz3GWHc_i>Pajd<+57vx}%rmc*TgnO24CdVg}V_{nZRu(dQkwFX4Xz5$IRr&n3+n9j_-yKkET-QL{5l(X){J5+)C z?;Ten3a?bSC3p$WRAcGS|8U@1=Ply*)%gR3(=CvBLa39FKMg4np-3+4KB#e7_c@Kr zx`UB@l(rK?INKR_9+6tc8c!IuHEn}2oUjvM3}v%mWG3B3ax$H^CeSu9XNeJ^$iS(NtK}Iqw>gTRpU#Zhvi-TTW1cxdM;wdf&cob(!C12Jl z!RrLqUo`&@BYf0JI}ThxBjx