home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / unix / volume26 / tripwire / part03 < prev    next >
Encoding:
Text File  |  1993-04-19  |  65.0 KB  |  1,557 lines

  1. Newsgroups: comp.sources.unix
  2. From: spaf@cs.purdue.edu (Gene Spafford)
  3. Subject: v26i175: tripwire - security integrity monitor, Part03/08
  4. Sender: unix-sources-moderator@vix.com
  5. Approved: paul@vix.com
  6.  
  7. Submitted-By: spaf@cs.purdue.edu (Gene Spafford)
  8. Posting-Number: Volume 26, Issue 175
  9. Archive-Name: tripwire/part03
  10.  
  11. #! /bin/sh
  12. # This is a shell archive.  Remove anything before this line, then unpack
  13. # it by saving it into a file and typing "sh file".  To overwrite existing
  14. # files, type "sh file -c".  You can also feed this as standard input via
  15. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  16. # will see the following message at the end:
  17. #        "End of archive 3 (of 8)."
  18. # Contents:  tripwire-1.0 tripwire-1.0/sigs tripwire-1.0/sigs/crc32
  19. #   tripwire-1.0/sigs/md4 tripwire-1.0/sigs/md5 tripwire-1.0/src
  20. #   tripwire-1.0/tests tripwire-1.0/tests/tw.db_TEST
  21. #   tripwire-1.0/sigs/md5/md5.doc tripwire-1.0/src/list.c
  22. #   tripwire-1.0/sigs/md4/Makefile tripwire-1.0/sigs/crc32/crc32.h
  23. # Wrapped by spaf@uther.cs.purdue.edu on Tue Nov  3 16:31:55 1992
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test ! -d 'tripwire-1.0' ; then
  26.     echo shar: Creating directory \"'tripwire-1.0'\"
  27.     mkdir 'tripwire-1.0'
  28. fi
  29. if test ! -d 'tripwire-1.0/sigs' ; then
  30.     echo shar: Creating directory \"'tripwire-1.0/sigs'\"
  31.     mkdir 'tripwire-1.0/sigs'
  32. fi
  33. if test ! -d 'tripwire-1.0/sigs/crc32' ; then
  34.     echo shar: Creating directory \"'tripwire-1.0/sigs/crc32'\"
  35.     mkdir 'tripwire-1.0/sigs/crc32'
  36. fi
  37. if test ! -d 'tripwire-1.0/sigs/md4' ; then
  38.     echo shar: Creating directory \"'tripwire-1.0/sigs/md4'\"
  39.     mkdir 'tripwire-1.0/sigs/md4'
  40. fi
  41. if test ! -d 'tripwire-1.0/sigs/md5' ; then
  42.     echo shar: Creating directory \"'tripwire-1.0/sigs/md5'\"
  43.     mkdir 'tripwire-1.0/sigs/md5'
  44. fi
  45. if test ! -d 'tripwire-1.0/src' ; then
  46.     echo shar: Creating directory \"'tripwire-1.0/src'\"
  47.     mkdir 'tripwire-1.0/src'
  48. fi
  49. if test ! -d 'tripwire-1.0/tests' ; then
  50.     echo shar: Creating directory \"'tripwire-1.0/tests'\"
  51.     mkdir 'tripwire-1.0/tests'
  52. fi
  53. if test -f 'tripwire-1.0/tests/tw.db_TEST' -a "${1}" != "-c" ; then 
  54.   echo shar: Will not clobber existing file \"'tripwire-1.0/tests/tw.db_TEST'\"
  55. else
  56. echo shar: Extracting \"'tripwire-1.0/tests/tw.db_TEST'\" \(23405 characters\)
  57. sed "s/^X//" >'tripwire-1.0/tests/tw.db_TEST' <<'END_OF_FILE'
  58. X# Generated by Tripwire, version 1.0 on Tue Nov  3 16:15:43 1992
  59. X@@dbaseversion 1
  60. X/tmp/genek/tripwire-1.0 0 ....5P 40700 51200 12 31018 0 512 .exijy .exiiT .exijt 0 0 0 0 0 0 0 0 0 0 
  61. X/tmp/genek/tripwire-1.0/aux 0 ....5P 40700 14336 2 31018 0 512 .exijv .exiiU .exijR 0 0 0 0 0 0 0 0 0 0 
  62. X/tmp/genek/tripwire-1.0/aux/types.c 0 ....5P 100600 14337 1 31018 0 1419 .exijQ .exihR .exijQ 0 1H8c6q.HR0nJ16mAQP0nNdh3 /28KZJ.2dvXE0w2a5G15.ln6 .Uovet ...BfA 1SpDHr1Hwj/I.PfrHy/3pt0Q 15rFUi.Xy3KE1M9Qe7.DzU/V 0 0 0 
  63. X/tmp/genek/tripwire-1.0/aux/ntohl.h 0 ....5P 100600 14340 1 31018 0 741 .exijQ .exihS .exijQ 0 0OvjLH103I5P08/w3N176YOi /x/TSN1BrCRB1dC4N0.V1eEC /4dh1. ...8yb 1d7Rb/1aTWFp/pg2do0qL94N /l3Cb01XK4g713Ub6z1cCoR5 0 0 0 
  64. X/tmp/genek/tripwire-1.0/aux/Makefile 0 ....5P 100600 14345 1 31018 0 492 .exijQ .exihS .exijQ 0 14LI1b1.NFLI/xvHZG.O9VIq .Xi8bq.kgYmE/ma.i01AY2xW 0IHz2S ...0rJ 002gbU/NnjeF1YrWbl/8dfWX .c8C.5/x7vVR0kcQhW/dr/5i 0 0 0 
  65. X/tmp/genek/tripwire-1.0/aux/byteorder.c 0 ....5P 100600 14346 1 31018 0 687 .exijQ .exihS .exijQ 0 /9v0Gz0abyKf089Qtl1Jpf3/ 0wuooS1DwM5E16QPAg.XMpio 0/hCnd ...4cp /nxsBQ1e6jvB/hFOCy.w0OPI /dQZDN/kg4KS0dA41a1oW548 0 0 0 
  66. X/tmp/genek/tripwire-1.0/aux/types.sh 0 ....5P 100700 14347 1 31018 0 1153 .exijR .exihT .exijR 0 01HqdM1aPed4.oqIS50odnSP 01FbKv/ndLwY0pwCB2.5bIbl .c5V8R .../Ay .WE94a0GfAFi0kk0gc0TzQAa 1gWYmJ1SI4wk0N5yqF0kA0Vb 0 0 0 
  67. X/tmp/genek/tripwire-1.0/lib 0 ....5P 40700 43008 2 31018 0 512 .exijv .exiiV .exijR 0 0 0 0 0 0 0 0 0 0 
  68. X/tmp/genek/tripwire-1.0/lib/tw.config 0 ....5P 100600 43018 1 31018 0 4132 .exijR .exihU .exijR 0 0N20tV/XBLYJ.es9y10QbeRL 0heWH01g/3vy.l3OP91dmGtO 0JcCMX ...9g5 .18jtG1EQ7j/0CA0ZG/r96kR /891/S/27/fl1hfhwu.JSfUB 0 0 0 
  69. X/tmp/genek/tripwire-1.0/README 0 ....5P 100600 51203 1 31018 0 29570 .exijR .exihV .exijR 0 /NfOYR/F4ntU1EhLVu1cymnD .PiCkR0mRUjC/yB5Or.UwjpK /Nrku4 ...DS2 /m4Jsd14Q4Fy.BO0BX0UbLYQ /vouxa1GoRdA1gPlvO.0DP6s 0 0 0 
  70. X/tmp/genek/tripwire-1.0/databases 2 ../zzz 40700 51205 2 31018 0 24 .exijy .exiih .exijS 0 0 0 0 0 0 0 0 0 0 
  71. X/tmp/genek/tripwire-1.0/Ported 0 ....5P 100600 51207 1 31018 0 6820 .exijS .exihW .exijS 0 0n00Dc/z3/bC13fCU1/hZ33n 0TU5tQ.0KyW71iZJzf/8V3Zd 1Kys.i ...3xx .3FOlG1nl3Gz1.P/fP1d6kOK /xzTLU1AjUPR.4obJr.07j2J 0 0 0 
  72. X/tmp/genek/tripwire-1.0/TODO 0 ....5P 100600 51208 1 31018 0 485 .exijS .exihW .exijS 0 00Zlic.7DcJx/XufDO1YrL2f .fVfVm18VhZm0KOHj11hUNoT .Q2Zsl ...Dea /Vz5tC.8.HZV1OoFX0.R295U 1EieKB0tOvXm1BGoSS0oB.p0 0 0 0 
  73. X/tmp/genek/tripwire-1.0/Changelog 0 ....5P 100600 51209 1 31018 0 6891 .exijS .exihX .exijS 0 .lYmGK..8Kqj.L41Oj.1QIa7 0796ZX0NFZKH0HQ44q.Ovl8a .UyZnL ...6kP 1WunNg./8ntj/dUxvx.EFjvr 0TUa7m.B0CT81hT9fF.4a1pD 0 0 0 
  74. X/tmp/genek/tripwire-1.0/FAQ 0 ....5P 100600 51210 1 31018 0 2127 .exijS .exihX .exijS 0 1o8lmk.9gnty1nnMkt0C1tMe 0IvgUc0nsFfc/wptS115jSWu 01Q5AY ...BTN 1jIqXR/zbQsE1xWt3W.GREV4 /q8ime/3M6.F.pNFvm1MJWzm 0 0 0 
  75. X/tmp/genek/tripwire-1.0/configs 0 ....5P 40700 4096 2 31018 0 1024 .exijw .exiiV .exijX 0 0 0 0 0 0 0 0 0 0 
  76. X/tmp/genek/tripwire-1.0/configs/conf-aix.h 0 ....5P 100600 4098 1 31018 0 985 .exijS .exihY .exijS 0 0EtLXL/9qv7m/PoBGs1kjsQv 0NrrKp0Usuda.RCHYa/V3MaS 193CRp ...2vB /iYPnJ0jofjD.ID7w30lx4Ir /XO4WS1mPj/l0xGOQ4.xc9T2 0 0 0 
  77. X/tmp/genek/tripwire-1.0/configs/conf-aux3.h 0 ....5P 100600 4107 1 31018 0 1014 .exijS .exihY .exijS 0 0sOrCj.CY2eV1.oBer/O0t3n .KngT0/juynf/L4ITG1XxQDu 0.OjHe ...8wH 1kaLvJ/B4fU9.UB/9z/EtxZs 0JcXsZ/GngLa.LNuze1CypHb 0 0 0 
  78. X/tmp/genek/tripwire-1.0/configs/conf-bsd.h 0 ....5P 100600 4108 1 31018 0 869 .exijT .exihZ .exijT 0 /m3I3b0JOa3i/Wg5FH/Ro49i /T/VYV0lkLyV.FhU.S//fmVA 0zhRVs .../B2 .lEiMG1afey200ac2k/6apOo .kd/420bTGiS09IN5T1S3S.z 0 0 0 
  79. X/tmp/genek/tripwire-1.0/configs/conf-dynix.h 0 ....5P 100600 4109 1 31018 0 873 .exijT .exihZ .exijT 0 ./RwWR1T704q.bDseG.bbMe3 0kPDVc0kPpLA1T8ktb0LeTqg 0z8bxN ...CRn 0/1a3S1k10Vq.mSeZ00ET8Eh /mhOXl0pNVCp.0uNhL1OI798 0 0 0 
  80. X/tmp/genek/tripwire-1.0/configs/conf-epix.h 0 ....5P 100600 4110 1 31018 0 844 .exijT .exihZ .exijT 0 /i1iTL/kjbi11kWaep1EVXaS /irPd5.FpvIv1AXGWe.g7bkT /GQxvK ...3.8 0WsHzL/bPMQL0P7UPt1RZlon 04tZxN1f7H8t00g2vp/jlLYa 0 0 0 
  81. X/tmp/genek/tripwire-1.0/configs/conf-hpux.h 0 ....5P 100600 4111 1 31018 0 995 .exijT .exihZ .exijT 0 0ziYYN0GVGuG/17YfD/SGUdu 0EmV6M1qkR4k0H8GDM.y9bMe 16FDBA ...2v7 /1tsRx.fyyEq1lhrRz0TdRKb 0sIeqI.ru6iQ1Fvx7T10.NOR 0 0 0 
  82. X/tmp/genek/tripwire-1.0/configs/conf-irix4.h 0 ....5P 100600 4112 1 31018 0 951 .exijT .exihZ .exijT 0 /D3ayV/SaLRC1S9ZQv/yWn6y 0N4Vtq0ooyCi0wvde7.X9U6x 0PrqNf ...8Gi /Gm1fq/rM.kO/gYAh21w0k8F .V5QNr/GJhPr0HXrl8.y2udz 0 0 0 
  83. X/tmp/genek/tripwire-1.0/configs/conf-mach.h 0 ....5P 100600 4113 1 31018 0 1119 .exijU .exihb .exijU 0 1S4mAt.PLHqe0jVC7v.ZICLT .dgBWk1cvc/d0qzfwP/nBC6t 0Mzx9U ...3Tq 1aHFDi/vsdhQ0nduO81nNKJk 1olfU8.wm0xD1KVm2r0FvaaJ 0 0 0 
  84. X/tmp/genek/tripwire-1.0/configs/conf-osf1.h 0 ....5P 100600 4114 1 31018 0 921 .exijU .exihb .exijU 0 0d5glk/Q9pVJ.c3J0T1AYqCp 0Uzq64/F.Atb.SIYFJ0csmNF 0HnZfh ...9.0 /lBCbI1drCEx0HNvu5/dVHQw 1M1it90wSbeA.gTevz/ML1La 0 0 0 
  85. X/tmp/genek/tripwire-1.0/configs/conf-osx-att.h 0 ....5P 100600 4115 1 31018 0 755 .exijU .exihb .exijU 0 .MWtCn16zn4r1uuqXg1D3Irx 1m/W1H/Bm0Eh/6scop/InfQb 1epMyZ ...2YP /sFYUd/D3rWz/Sc.Vm1oFBVW /20CwV.r06N2/.SFta0hnCN6 0 0 0 
  86. X/tmp/genek/tripwire-1.0/configs/conf-osx-ucb.h 0 ....5P 100600 4116 1 31018 0 806 .exijU .exihc .exijU 0 .r9iQ5/n5fwu0h7jea1A5FHT /yTmzx1AmAgb1wyV771AorD8 0kGvuY ...79c .t0/ib/wxoDq0tv.6d1IcGCd .VdWQQ.6ZPEs/mSmGw.cokAz 0 0 0 
  87. X/tmp/genek/tripwire-1.0/configs/conf-riscos.h 0 ....5P 100600 4117 1 31018 0 960 .exijU .exihc .exijU 0 .O6iBs1ELUJu.Nfw/60XriSl 07R2Af/ALKWs/8Oygr0hSXDE .EXBVg ...0.h /paSUQ1r4NXS/87J590X6189 .Pl0Pe0XpEh31.vSdH/61/i1 0 0 0 
  88. X/tmp/genek/tripwire-1.0/configs/conf-sunos-4.0.h 0 ....5P 100600 4118 1 31018 0 914 .exijV .exihc .exijV 0 /540g4/aEVTm0A3ZYV0ylZRZ 1nZqpc/ktTfU/q0UEa/AT58b 0hxc08 ...87w 1gOVs91EyRDe.tm1Lo/w4Fpk 1Ym.w9.LD9370.7BA1.kKc9h 0 0 0 
  89. X/tmp/genek/tripwire-1.0/configs/conf-sunos-4.1.h 0 ....5P 100600 4119 1 31018 0 909 .exijV .exihd .exijV 0 0QfpK91pec8./CSZsG1VCFu2 /P973l/Z1FuF1PafPP0a2kSy .4srjd ...1ru 1jq2j6/sGnX40F02S1/vdgVe .pzEg91886P3.Ts3Si1OfZlX 0 0 0 
  90. X/tmp/genek/tripwire-1.0/configs/conf-svr3.h 0 ....5P 100600 4120 1 31018 0 936 .exijV .exihd .exijV 0 .Ovslg.vNknA1NVPjp.VbBxS .0XMbt/g2VqR0UbMVE/o4yo2 .ZKoL5 ...3jw 1YKayF1J0qm606gfPU/JiOni 0.BCW6.z3CnU/pRljY1cZKDa 0 0 0 
  91. X/tmp/genek/tripwire-1.0/configs/conf-svr4.h 0 ....5P 100600 4121 1 31018 0 876 .exijV .exihd .exijV 0 .a0Bwc0e5atl1Hizrx0DQvbq .vY4rY0avyn./LVEXX.ypsc. 04C9.4 .../Ye 1johQZ0UIeqh1nFKLt0X4hZ. 0Es/x9/lxGAK1K3UOX/eu1Aw 0 0 0 
  92. X/tmp/genek/tripwire-1.0/configs/conf-umaxv.h 0 ....5P 100600 4122 1 31018 0 1019 .exijV .exihd .exijV 0 0aILx6.mVHtx/nWbjT.URNyS /OTNOw064C4y.v5k9408uK0t 02m9hD ...3tI /mRbeM.89jiY0/exjB/BPS93 13jdt60CtzFb0bBg5t05FlVp 0 0 0 
  93. X/tmp/genek/tripwire-1.0/configs/conf-unicos.h 0 ....5P 100600 4123 1 31018 0 1034 .exijV .exihd .exijV 0 09thVS/0oF9K0C.0tn1EuP/O /BhUR40MDw970IsK4r1d6J7. 0PGWnV ...7fI .OXtd./dSkgP1aMTFZ0gek23 0a.2qA/9iak4/iMZAh//N8vl 0 0 0 
  94. X/tmp/genek/tripwire-1.0/configs/tw.conf.hp2 0 ....5P 100600 4124 1 31018 0 5418 .exijV .exihd .exijV 0 11/UDu0uGKrX.q.YXr.Lzn2F 054nfL.9SsPv/wO57r18kOJV 16Vh/X ...1xV /JUAz60SAymj1EhfNW.oUA7X 1Tw5rM1meaNY/iFymZ0AIb23 0 0 0 
  95. X/tmp/genek/tripwire-1.0/configs/conf-xenix.h 0 ....5P 100600 4125 1 31018 0 977 .exijV .exihe .exijV 0 .BbBAk1LGY0X.9NQEc0yrEbI /m.w8h/JtWS8/kgCmU10XRpz 1.L.9m ...7Jj /OuWDd099zME0TWEj10oCEW. .jtGvV15Eh/o.TckyI0d1ErG 0 0 0 
  96. X/tmp/genek/tripwire-1.0/configs/tw.conf.hpux 0 ....5P 100600 4126 1 31018 0 1776 .exijV .exihe .exijV 0 0fyZSE.TISum/krent170e27 09UxWL1zyE9c1efdtP//vmWN 1xPDw0 ...9kL 1J68kd1WV13J/OCcWN1oC6yo .Qt50B/OcnNe0caifC1U7dTq 0 0 0 
  97. X/tmp/genek/tripwire-1.0/configs/tw.conf.next 0 ....5P 100600 4128 1 31018 0 2892 .exijV .exihe .exijV 0 .Gl7VF/DB5hD/pbbcA.d2V95 .wkEYi04C8eC/JnUh/147TJi .R65ez ...4Ki .t.PBn00ZSpb.m1uGH1j5QlY .cj.sj.eOiwv1dm2ji1doHkC 0 0 0 
  98. X/tmp/genek/tripwire-1.0/configs/tw.conf.s5 0 ....5P 100600 4129 1 31018 0 4729 .exijW .exihe .exijW 0 0v4bvn/AUDpF1QobUF0FWWBW 1RchRx..2ucy.jvY12.iNrmG 0RTy/N ...3vg .h68sL0vrss/0MHkHA0CtmO3 .7hxlC0.itmZ1SdAli08fVbR 0 0 0 
  99. X/tmp/genek/tripwire-1.0/configs/tw.conf.sun 0 ....5P 100600 4130 1 31018 0 5298 .exijW .exihe .exijW 0 1ZnLvo.2IWxk/Oh8oo0yiRUY 1.HoGO0VLhn//o59cc/Ppfc1 .Y2QGn ...1dN /5drxP1nsOr40Pr5cx1ZcVm7 /pFAeb1PyQsG1Jinh41FhgWy 0 0 0 
  100. X/tmp/genek/tripwire-1.0/configs/tw.conf.ultrix 0 ....5P 100600 4131 1 31018 0 592 .exijW .exihe .exijW 0 .3JV811IETxa0VyHms0z14bz 1hX96X.BaqI6.91P.G0Pfb/a /o40p9 ...Dgq .Y1LVe/vU8av/M5dDQ0fiv70 0/TLsC.ps.VA1KZR0O.WsT.P 0 0 0 
  101. X/tmp/genek/tripwire-1.0/configs/conf-convex.h 0 ....5P 100600 4132 1 31018 0 961 .exijW .exihe .exijW 0 .DqGdJ.wFxL2/UEZQ30.sUtI .BTa.l0BIrgY/6UnzH18Dkri .IrMtN ...60r 1RLgEN16TLDD/uES7d/t20Ks .5I/0O/xp/yC1CEYk60Mlw6L 0 0 0 
  102. X/tmp/genek/tripwire-1.0/configs/Makefile.xenix 0 ....5P 100600 4133 1 31018 0 5278 .exijW .exihe .exijW 0 0vOdnW1OLz/k.jMvzF.J86NF .KGc660pOVM30brixx.n8dzm 0ZCbWO ...7wp /nm5Zh19UssQ.4Eop21xKieH 06CfCS/Hu2Ce0OTW1o1FEcGR 0 0 0 
  103. X/tmp/genek/tripwire-1.0/contrib 0 ....5P 40700 10242 2 31018 0 512 .exijw .exiiW .exijZ 0 0 0 0 0 0 0 0 0 0 
  104. X/tmp/genek/tripwire-1.0/contrib/README.ASET 0 ....5P 100600 10254 1 31018 0 27138 .exijX .exihg .exijX 0 //7QTk/PgFYy.z5AD8/ttn/1 .bCFNI1P8Sr/.pYehl.aGC4k /8j3SZ ...76R 0UBtiR0PVEGO1L8A.T1jYkOE 07r74i1z2txK/SOOoI0KYaZM 0 0 0 
  105. X/tmp/genek/tripwire-1.0/contrib/CheckConfig 0 ....5P 100700 10255 1 31018 0 618 .exijX .exihg .exijX 0 /.PD0W15YehF/Cy69L04Z1Wd 0hhDqo.ZLApV/3PSM4.k/EbF /BVFUs ...9aa .Hzo1x.fgWHi0n6Ekv.ENzWI 1b3fKS1q7qoh0tLZl6/SYLHn 0 0 0 
  106. X/tmp/genek/tripwire-1.0/contrib/README.CheckConfig 0 ....5P 100600 10256 1 31018 0 1216 .exijX .exihg .exijX 0 0Ppomg/Tg.L20bETYs0fP2no .Xc1NM0TM4Sv.MgTzC.nU5mG 17NJhb ...6Tz /hZPDm1jP24N1Z9SPd0wdt66 1gcKFP17n1TA15aZk50XlcPG 0 0 0 
  107. X/tmp/genek/tripwire-1.0/contrib/README.TRIPWIRE 0 ....5P 100600 10257 1 31018 0 3136 .exijX .exihg .exijX 0 /.ue0P1zxrsy0Yx5d/.21Z0j .SM6hG0tW0Ct.Y7ql0.v1VY4 /Hl4W. ...0.o 1PDKPQ/sQnEr10mRwT/cHKcx /ss2Va/JVzrp//ZQ96/b/qfP 0 0 0 
  108. X/tmp/genek/tripwire-1.0/contrib/README.chk 0 ....5P 100600 10258 1 31018 0 622 .exijX .exihg .exijX 0 .M5yO8/JFOb1/a2ZEd.x3e6h .N9ltK.L6xuA/wJPQx0wr8vP 08Kwiz ...CiF /9tzdL/9WLun/6WPCL.f1TWM 0BmKBt1srlcS0ch8UP.iImBU 0 0 0 
  109. X/tmp/genek/tripwire-1.0/contrib/TRIPWIRE 0 ....5P 100700 10259 1 31018 0 569 .exijY .exihg .exijY 0 1MRglJ1D5rAm/InVH0.Up6yI 1Vgsq4.qlQq/1R5zyt0jNh18 .8mN9G ...09M .Ray/x/le5jX.oj61E0CfBQV 1pk04a0yY3WQ1UHm0h.Tui/y 0 0 0 
  110. X/tmp/genek/tripwire-1.0/contrib/tripwire.chk 0 ....5P 100700 10260 1 31018 0 458 .exijY .exihg .exijY 0 .Jc8rG.LRBLZ/0KXw8/6GNs8 0US0NP/chto81XbgYk.xcZMk .cKh.y ...28b .D.0Rh/ySAnm/iOMcy1jQ2b6 09kIye1FjpNd.M7uh6/cDGL0 0 0 0 
  111. X/tmp/genek/tripwire-1.0/include 0 ....5P 40700 14349 2 31018 0 512 .exijx .exiih .exija 0 0 0 0 0 0 0 0 0 0 
  112. X/tmp/genek/tripwire-1.0/include/patchlevel.h 0 ....5P 100600 14357 1 31018 0 86 .exijZ .exihh .exijZ 0 .gnkSo0SYIQW0UlEG2/el0bp 0S5jn90w9F1n.RpxTE0AGILb /s3HgJ ...09g /A5bHL1EB5ZT1IzB0D1jOCEJ 0KEu381fd23M0GauJj.LXCiS 0 0 0 
  113. X/tmp/genek/tripwire-1.0/include/list.h 0 ....5P 100600 14383 1 31018 0 1541 .exijZ .exihi .exijZ 0 /fF4He0M2dMI/3TqcG.M17mC 1g3hMU1umN62.ZzT.u.qlaYz /LVjrG ...1YI /qxa4w0j5lD11KtVnQ1HCwHL 1H3cIy1BDI6S1byWLz1oguWX 0 0 0 
  114. X/tmp/genek/tripwire-1.0/include/tripwire.h 0 ....5P 100600 14384 1 31018 0 7233 .exija .exihi .exija 0 .qDxAV0yckmH0E33Qc.IjXXJ 0B89LT.t7kft.6q7Xf/VPOkM 0K11Ez ...3LG 0Pzggy0EWd5O.KTLr50WhQm1 /68Vn8/6XxiI0wQWth0X0Qy/ 0 0 0 
  115. X/tmp/genek/tripwire-1.0/include/sigs.h 0 ....5P 100600 14385 1 31018 0 613 .exija .exihi .exija 0 /hAfN..MjMmK.NVFb81dGnTF 1r91TP/z3oZc.9voWX1.eNep .EHxxi ...BqE .nOHS/0SOUgn.LUtCg.NweQw 1kJL621DCHJd0szgo5/mrU7m 0 0 0 
  116. X/tmp/genek/tripwire-1.0/man 0 ....5P 40700 16384 2 31018 0 512 .exijx .exiiX .exijb 0 0 0 0 0 0 0 0 0 0 
  117. X/tmp/genek/tripwire-1.0/man/tripwire.8 0 ....5P 100600 16385 1 31018 0 7596 .exija .exihl .exija 0 08tWdo.QwqBG1kqYIt/q5TQ7 0BmShx/kgIeS/PT5uX11HUH9 .qBXWe ...3Ya .Mkifa.vmThE19eQNf15yxIB .iEQZ7/mSBeL0DicwM02t97R 0 0 0 
  118. X/tmp/genek/tripwire-1.0/man/Makefile 0 ....5P 100600 16390 1 31018 0 176 .exija .exihl .exija 0 .bfCp//AURO90ffQo8/5SBcm .V.UUs0WlyP01.yWLU.9.cqa 0vIvWe ...C5z 0xUP4D.895hY03Y2MD//sWqc 1cea5P0lQXf5.2Uw1g.7G1Lb 0 0 0 
  119. X/tmp/genek/tripwire-1.0/man/sigfetch.8 0 ....5P 100600 16391 1 31018 0 761 .exijb .exihl .exijb 0 0tb3ER0gMJQK.a8Og5/3NAJJ .KInnp1NmIre0HF7gu/l3wq2 1Up3BX ...C6M 19lWZM15GAMY01.A0x0A1DVw .nBhYJ0sPjKC0WtFbp.RDTuQ 0 0 0 
  120. X/tmp/genek/tripwire-1.0/man/tw.config.5 0 ....5P 100600 16392 1 31018 0 7470 .exijb .exihl .exijb 0 /ILTFM/LMeuo0veAt11S7MbW /mL9Ge.PLEsX/GkEd.0kPUp8 1LOzTD ...BzV 0OpEWi/pEvUf15ajTw.rh8F2 1ZyUF/1z1ABW/gIzeW/Skccs 0 0 0 
  121. X/tmp/genek/tripwire-1.0/sigs 0 ....5P 40700 18432 8 31018 0 512 .exijy .exiiY .exijn 0 0 0 0 0 0 0 0 0 0 
  122. X/tmp/genek/tripwire-1.0/sigs/crc 0 ....5P 40700 20481 2 31018 0 512 .exijx .exiiY .exijc 0 0 0 0 0 0 0 0 0 0 
  123. X/tmp/genek/tripwire-1.0/sigs/crc/Makefile 0 ....5P 100600 20483 1 31018 0 238 .exijc .exihr .exijc 0 /YKxSV/DsaDs/SFjnF0THVtC .QMrrK0Mb2qa1IynZo/URQyt .BaMb7 ...8.t .3gfbU/h6R0L.IvMix1wd0SR 1v6Oaj0dqL5q0a5n5m1LYldp 0 0 0 
  124. X/tmp/genek/tripwire-1.0/sigs/crc/crc.c 0 ....5P 100600 20484 1 31018 0 6511 .exijc .exihr .exijc 0 /D5R.U1MY/Pl1vd.qr/nq8QS 0qIi.j.DFghQ.7/Pjd1qQefu 0DKuKO ....9Q 0yk3K4/jqsp7.61IqF0jhKzb .1rl58.sp9zq.LY1TJ15OIhX 0 0 0 
  125. X/tmp/genek/tripwire-1.0/sigs/crc/crc.h 0 ....5P 100600 20487 1 31018 0 77 .exijc .exihr .exijc 0 .RWsUg0rCtYR1/FkrK1HWVq8 /WNRnG1paTN8.5LOuR.mqKy1 /1Vk9d ...8uu 0u2DTE.1YN2b.FFQXy/GYKIc .zf0lk..OK0i1vquTE1BAg3a 0 0 0 
  126. X/tmp/genek/tripwire-1.0/sigs/crc32 0 ....5P 40700 22531 2 31018 0 512 .exijx .exiiZ .exijd 0 0 0 0 0 0 0 0 0 0 
  127. X/tmp/genek/tripwire-1.0/sigs/crc32/Makefile 0 ....5P 100600 22536 1 31018 0 238 .exijd .exihw .exijd 0 /D.BWf.5Oj7l0hEQ6n/c7Onk 1lvnGE1SE/9T/4xPd8/13TkO .C4akD ...9qW .3gfbU/h6R0L.IvMix1wd0SR /5iAvA0nAdoL0OZp8p1LNk.M 0 0 0 
  128. X/tmp/genek/tripwire-1.0/sigs/crc32/crc32.c 0 ....5P 100600 22559 1 31018 0 8219 .exijd .exihw .exijd 0 06OoUl/6Crbo..Sp1x1BzpKB 0G2bo61RvO.a.eifxL0D4OTV /sqRs5 ...1Oh /cYQzd.R3/AE/9aCUZ.ZR4yc 0R8Ptl.8pPaG/hCn8W0JLa/j 0 0 0 
  129. X/tmp/genek/tripwire-1.0/sigs/crc32/crc32.h 0 ....5P 100600 22560 1 31018 0 81 .exijd .exihw .exijd 0 1CE3OO.3zwMi.rRKxe0fS3dj /30TU./JAUfP.FLnWK1zJYAs 1BzPI4 ...DPp .XzmQb/adio0.4VlPc1smfIq 1YhRSU.4dYrC/yCfWA.awQFL 0 0 0 
  130. X/tmp/genek/tripwire-1.0/sigs/md2 0 ....5P 40700 24580 2 31018 0 512 .exijx .exiia .exijf 0 0 0 0 0 0 0 0 0 0 
  131. X/tmp/genek/tripwire-1.0/sigs/md2/Makefile 0 ....5P 100600 24581 1 31018 0 289 .exije .exihx .exije 0 0gUb3V/5Lr7c/FDtEz1cPJdn /1Mpxv.60qr80ZEsGL1LEKoE /CpLLG ...3Gy /W7XV8/5u8GI/eWmuh/cEpWN /WBt.z/P3wn9/Jkyql.LVBLc 0 0 0 
  132. X/tmp/genek/tripwire-1.0/sigs/md2/global.h 0 ....5P 100600 24584 1 31018 0 858 .exije .exihx .exije 0 0o9h6R1uvzEq0YedjG0tm3AM .KSZYM1o/Vnl0JKlLc/iRh/e 1BmBo7 ...Bb/ /5fnfR0GVb2U1dDjIS.0z4B7 11LG8q0976JB0WVH4d/diDNi 0 0 0 
  133. X/tmp/genek/tripwire-1.0/sigs/md2/md2.c 0 ....5P 100600 24585 1 31018 0 7130 .exije .exihx .exije 0 .ZSRGw/pI3oZ1zcnEE04DNTE .Rskkv/.EdJh05xOaw.oqYvP /II/V8 ...7gR 1d2h1014uV1y.vimRb0p2YfJ /U40iJ1B/HFj0m.adQ.HpdfA 0 0 0 
  134. X/tmp/genek/tripwire-1.0/sigs/md2/md2.h 0 ....5P 100600 24589 1 31018 0 1216 .exije .exihx .exije 0 /WHrUD0gkiLS1SXHUS.Vg6jX .cw/a3/f/4mR.8YCqj/81laO 1cIQCP ...4Ht /4igh9/I4De6/.ysj6/hcn/w 0azs6/.dGlu80pn0Jk1deK5M 0 0 0 
  135. X/tmp/genek/tripwire-1.0/sigs/md2/md2wrapper.c 0 ....5P 100600 24590 1 31018 0 2177 .exijf .exihx .exijf 0 .dkN/r.Q31bx/lyMSj020w25 /GEisV1O/EHq0OH6wB.16phL 1SyKV8 ...2jG .iBJo2.RdU/x1cd3rJ1OBxd5 /nPGRE/bemAF1t7crT.nJXZL 0 0 0 
  136. X/tmp/genek/tripwire-1.0/sigs/md4 0 ....5P 40700 26624 2 31018 0 512 .exijx .exiib .exijh 0 0 0 0 0 0 0 0 0 0 
  137. X/tmp/genek/tripwire-1.0/sigs/md4/Makefile 0 ....5P 100600 26626 1 31018 0 306 .exijg .exihz .exijg 0 0qfw8G.kKrJb18ACno/f.Gel 0ssnyO.Cuct0/A4xkB.ibrn. 06FuXE ...DhW .brLGy0JftVS.QuI.W1BEdEW 1adWm1.J45wT1Ser/20NRacp 0 0 0 
  138. X/tmp/genek/tripwire-1.0/sigs/md4/md4.c 0 ....5P 100600 26629 1 31018 0 9435 .exijg .exihz .exijg 0 .nOzmI0Exocr/1riUd1ouuHh 1uNNcS1eKwwX0VGN6M0WtLYm .Z0cA6 ...03. /qcU2D.deZE4.FpmHB1xJrKG .B9QhH/shK0R0qLf7w/h2BPk 0 0 0 
  139. X/tmp/genek/tripwire-1.0/sigs/md4/md4.h 0 ....5P 100600 26630 1 31018 0 1922 .exijg .exii. .exijg 0 .Ul92U1MJoV00vzPMT13/q.C .6dj//1bhgig.HXT4r1t7055 1mOTXe ...APw .v.Bqc/hRU4W/hAliF1GL2bc 1f7VPa/QgVps/zNGLa0r290R 0 0 0 
  140. X/tmp/genek/tripwire-1.0/sigs/md4/md4wrapper.c 0 ....5P 100600 26641 1 31018 0 1915 .exijg .exii. .exijg 0 0jJ1Rz.Wh1Xg0vtuWJ0n8eAc 0YsLCL0D0MMh1jyYjC0haCIp 1R2t2A ...580 /hoZ2w/67asU.VUmHs1UDrqc /4zkyi0pW96e1Kw9v21Pg8CO 0 0 0 
  141. X/tmp/genek/tripwire-1.0/sigs/md5 0 ....5P 40700 36865 2 31018 0 512 .exijy .exiib .exijm 0 0 0 0 0 0 0 0 0 0 
  142. X/tmp/genek/tripwire-1.0/sigs/md5/Makefile 0 ....5P 100600 36866 1 31018 0 305 .exijh .exii0 .exijh 0 .yD.xZ1uMA.T1TGp/O.MaQjv /KInLr18eDuR.KWnUH01yPha 0/qlWt .../8t 1Sf3c21YnHVs.nWWh6/50ZMR 1HtZiq1BBBO10LFyps.Bz.zu 0 0 0 
  143. X/tmp/genek/tripwire-1.0/sigs/md5/README.md5 0 ....5P 100600 36867 1 31018 0 2577 .exijh .exii0 .exijh 0 .mPgvL0aqaW81VWNcT/c5AZt 1Zqczb.Pcx/z08AC8i/8vg0x 1r8EED ...C0d 1iq55n1mPyZ8/yfVXR0Iae8O /F6llU/ATZoB04AF9d1QHiHE 0 0 0 
  144. X/tmp/genek/tripwire-1.0/sigs/md5/md5.c 0 ....5P 100600 36868 1 31018 0 10291 .exijk .exii0 .exijk 0 05d7Li/Pu5wR.RzUyy.p9VwQ /oPstU.Vb.4w0L2ePq/UJI/S /160AY ...8AY .1zb38/7.MOx07Hf9F0iXDqL 0Phmrk0MPYds/fSw5B1y3Gwg 0 0 0 
  145. X/tmp/genek/tripwire-1.0/sigs/md5/md5.doc 0 ....5P 100600 36869 1 31018 0 19066 .exijl .exii0 .exijl 0 /dLp.d0/aWoT1vF1G610yXLx 0W86/X00iksg.Zp/dg.8mFBo /N9cuU ...0W9 0cAUz6/WE/Uo.YZ2PD1HvtDF .1kuF1.NLftC0xIEvw/oonVz 0 0 0 
  146. X/tmp/genek/tripwire-1.0/sigs/md5/md5.h 0 ....5P 100600 36887 1 31018 0 1019 .exijl .exii1 .exijl 0 1wTREX0mhfVN1BNIs4/N9Kwp 1joNOa.QWNxr/ATmtN.JlkTb /BkP4X ...AfX .iu1Ua0atQ0B/v4.QJ.ey2xJ 1UxFz51Ok42./C/waS.fGct7 0 0 0 
  147. X/tmp/genek/tripwire-1.0/sigs/md5/md5wrapper.c 0 ....5P 100600 36888 1 31018 0 2121 .exijl .exii1 .exijl 0 1w5W3d./abJS.6VF9U0nbB86 .aV7OY/Kug/k0fEBlO1XkUSt /LSL61 ...0ne 0.At2n/ZgJhd1sLBPV/M2vY9 1TqdKe.K33At0V3ZPQ0biKrR 0 0 0 
  148. X/tmp/genek/tripwire-1.0/sigs/snefru 0 ....5P 40700 38913 2 31018 0 512 .exijy .exiie .exijn 0 0 0 0 0 0 0 0 0 0 
  149. X/tmp/genek/tripwire-1.0/sigs/snefru/Makefile 0 ....5P 100600 38916 1 31018 0 246 .exijn .exii3 .exijn 0 0E7xMF0v/25S1Bm.2l/4O5gP 1P4cY01oprbj/c1EF1.BNAuw 0de1zN ...8Pd /tCBnh.8gidF0iKLqy1XcR5R .dY9aw01MqQA/Ls3vT.sOWQI 0 0 0 
  150. X/tmp/genek/tripwire-1.0/sigs/snefru/README.snefru 0 ....5P 100600 38922 1 31018 0 8502 .exijn .exii3 .exijn 0 1Gnglh.en6mY1B/W4L/swo.g /u8m17.RepeN/puZCJ.ljYkH /4o6FR ...7pG .YV6.D0SjYy00Qc8h21I6pX9 0SjSuZ12Iw26.9yITJ0Lbtmz 0 0 0 
  151. X/tmp/genek/tripwire-1.0/sigs/snefru/snefru.c 0 ....5P 100600 38930 1 31018 0 78896 .exijn .exii3 .exijn 0 /5Bj32135rkX.WIoy6.WL.CD /nntHr/uHAdZ.DKXkX/mRaQ4 /yIh.n ....F5 057kum.O.q.w19qJuW.7Zfj3 .SR1gZ.r61N0/M2mRi/bIKmT 0 0 0 
  152. X/tmp/genek/tripwire-1.0/sigs/snefru/snefru.h 0 ....5P 100600 38931 1 31018 0 22 .exijn .exii3 .exijn 0 1aZg/w//cRe10kLzca1MnRe5 1DqjoB..Mcrf.5Irn00/0fJ0 /4m2gz ...9Is 1331DZ1swhQY.swblq/C.ZKh 0w3EOe/G6ViD..ftJ2.nuFb7 0 0 0 
  153. X/tmp/genek/tripwire-1.0/src 0 ....5P 40700 40967 2 31018 0 512 .exijy .exiig .exijs 0 0 0 0 0 0 0 0 0 0 
  154. X/tmp/genek/tripwire-1.0/src/config.pre.l 0 ....5P 100600 40972 1 31018 0 1728 .exijo .exiiA .exijo 0 /EfQ4n1p/kRc/60WyS.a86/Y 1HU4YA.qHu/r/6rZCF04m52Y .rAKXh ...BPV /kH3l20kl66s1AXLbG.WUwjC /cCC010WfnGu.taMJs12ZAWD 0 0 0 
  155. X/tmp/genek/tripwire-1.0/src/config.pre.y 0 ....5P 100600 40973 1 31018 0 9777 .exijo .exiiA .exijo 0 .h4Qa.0uRdxe1qFusk/zrxl. .PbGtS1J4bCk.eQQ0X1Oe1D5 00.CCv ...CgB .ZSEtm.mx9YD0UL/0g0WnGp. .GhTqd15sTep19r94C/dO8Vc 0 0 0 
  156. X/tmp/genek/tripwire-1.0/src/config.prim.c 0 ....5P 100600 40974 1 31018 0 2728 .exijo .exiiB .exijo 0 0Tqzqh/Jfh.Y.Zb3ST/5BknF /hEISU154z2P/7qGT..Mjget 0KHH5Z ....ML /J4Gu1.7OwND/8W8xj04cnmh 1mnLxM01Xqps0s9VMK/eHC3V 0 0 0 
  157. X/tmp/genek/tripwire-1.0/src/dbase.update.c 0 ....5P 100600 40975 1 31018 0 1599 .exijo .exiiC .exijo 0 /BGuhV04IHe6.MtHJM1kEe0r /kDEzi17fCRm0g6Mhd/a8KBI 0UaKML ...DEQ 1taIvS1Wq4UV/mTT8z1zzGKD 0QasDx0crSN80X68Nw.Ey55t 0 0 0 
  158. X/tmp/genek/tripwire-1.0/src/ignorevec.c 0 ....5P 100600 40984 1 31018 0 3545 .exijo .exiiC .exijo 0 .7O1g21g0Maz1Kz4Ow1evm90 /UDtJD.COate/6EdaG/618Ku .EGc6q .../7M /GdpxG.mIlzP1zyvs9/sETjT .KXYC1/q1k5T.tBxK8/tLuZ6 0 0 0 
  159. X/tmp/genek/tripwire-1.0/src/list.c 0 ....5P 100600 40985 1 31018 0 17081 .exijp .exiiC .exijp 0 /NUjEy/oQI50.4gsAg0.KsCI 1q/4Cz0tvvZ51I6r9z/BDVVW 1D2LWC ...Dkn 0SdmsB/xroW91WX13K.jmFeT 142JQk/H0VQ2.lRbvq1C9w87 0 0 0 
  160. X/tmp/genek/tripwire-1.0/src/main.c 0 ....5P 100600 40986 1 31018 0 10112 .exijp .exiiC .exijp 0 1/BMUg/Bj8Bj0vGcgB1wnyF3 0nL7Yh/6sORL11BC2.0tY7QH /UoTnS ...0QD /ynFVa.J/YV8/RUD0l.C32Ug .lEDEA0MzCC9.RfI64/rYhpF 0 0 0 
  161. X/tmp/genek/tripwire-1.0/src/nullsig.c 0 ....5P 100600 40987 1 31018 0 992 .exijp .exiiC .exijp 0 .x.xKv.cR/w50rFnd31PRH5s /iEGuk.bwEeV/rhvH60D57sl 14TSw6 ...04M 1w.0ID1RMk041UMtEU/uLgvX .r7P.V.CmbCm116VqK.8nbEi 0 0 0 
  162. X/tmp/genek/tripwire-1.0/src/preen.c 0 ....5P 100600 40988 1 31018 0 4868 .exijp .exiiC .exijp 0 .YA6d./kUdFQ1zWabC/IKKCe 1zPldI0w..sX/4oky50XIw7. 018Unm .../Du /N4sM412T/AB.dR7uA.jF4nV 1F87Kn1wenw1.Mom81/UoWdu 0 0 0 
  163. X/tmp/genek/tripwire-1.0/src/preen.interp.c 0 ....5P 100600 40989 1 31018 0 2618 .exijp .exiiD .exijp 0 1mNiE/.Q7PcP/v2VeW0Kjd5t 0pBkpZ/YevPi/DmzT..MmOFY .1OsXC ...8Wp /stnvH.sodId0RTHCG0FBnMd 0WxgqT./HnQK//.f4k.MH1A. 0 0 0 
  164. X/tmp/genek/tripwire-1.0/src/preen.report.c 0 ....5P 100600 40990 1 31018 0 15903 .exijp .exiiD .exijp 0 .UnE3X.0ATcD1bGGeb0UHIcP .Q00NY0yCk0K0qFY2d/w18e7 .TAfOX ...1T3 0kVqbl0OjTE5/LaLlC/JSjiE /r3y6m1VpQFU..h0B809w7U5 0 0 0 
  165. X/tmp/genek/tripwire-1.0/src/Makefile 0 ....5P 100600 40991 1 31018 0 7439 .exijq .exiiD .exijq 0 .J5p4p0EFx8j.OgC8Q1fpM.W 0BXFKS.6.3651XJ.XL1j9pjO 1mWivQ ...9zW /cvaB208RTNI1VkvHR08hF/e /NHzCt0OlKw11NjVcV1EgdUk 0 0 0 
  166. X/tmp/genek/tripwire-1.0/src/utils.c 0 ....5P 100600 40992 1 31018 0 13384 .exijq .exiiE .exijq 0 .nm3S./tf5kL0cUsAs.9zH3d 1Lw4uh1b9YFD.nbqUf.UMZa/ 0cpm6l ...Cnm 0aSzc5.68f7m/mDT1l0Zi0sj /q8Zf40/1bHl0aM/1g/fUYXx 0 0 0 
  167. X/tmp/genek/tripwire-1.0/src/dbase.build.c 0 ....5P 100600 40993 1 31018 0 10027 .exijq .exiiF .exijq 0 0V5WPq1wLs2U.gk8nz/clc7W 0DOfQ.0cKHAX.p0US60HHp3I 18BBCY ...D.M 0pB2w80aGxI7.P4FRU/gBKmO /wxlQx.fsbqk0w8BgG0p0Iy5 0 0 0 
  168. X/tmp/genek/tripwire-1.0/src/sigfetch.c 0 ....5P 100600 40994 1 31018 0 3168 .exijr .exiiG .exijr 0 /M.nXI.PpYvU.17uya/C91Ei /kXZ6P.4PnT/040sER.z09lQ .pqKZx ...Dt4 .jE1hm/8jSJq.hvRc3/zq6a8 /OqmS7.em6Bb1AJhlx/qLDUQ 0 0 0 
  169. X/tmp/genek/tripwire-1.0/src/config.parse.c 0 ....5P 100600 40995 1 31018 0 13058 .exijr .exiiH .exijr 0 /d7AKE.tjzGQ.80piF/6F523 ..fdrs.17GVv.Qlz.10hWwW2 .zeOCj ....gP /hxKMX0d/i3z/g2nHb1jNVZG /Cyqmb/2hJ12.Wfweg.g5LkS 0 0 0 
  170. X/tmp/genek/tripwire-1.0/tests 1 ../zzz 40700 32768 2 31018 0 512 .exijy .exiig .exijt 0 0 0 0 0 0 0 0 0 0 
  171. X/tmp/genek/tripwire-1.0/tests/tw.conf.test 1 ../zzz 100600 32784 1 31018 0 4659 .exijs .exiiJ .exijs 0 0 0 0 0 0 0 0 0 0 
  172. X/tmp/genek/tripwire-1.0/tests/Makefile 1 ../zzz 100600 32793 1 31018 0 280 .exijs .exiiJ .exijs 0 0 0 0 0 0 0 0 0 0 
  173. X/tmp/genek/tripwire-1.0/tests/test1.sh 1 ../zzz 100600 32794 1 31018 0 1412 .exijs .exiiJ .exijs 0 0 0 0 0 0 0 0 0 0 
  174. X/tmp/genek/tripwire-1.0/tests/tw.db_TEST 1 ../zzz 100600 32795 1 31018 0 23648 .exijt .exiiJ .exijt 0 0 0 0 0 0 0 0 0 0 
  175. X@@contents /tmp/genek/tripwire-1.0 0
  176. X@@contents /tmp/genek/tripwire-1.0/tests 1
  177. X@@contents /tmp/genek/tripwire-1.0/databases 2
  178. END_OF_FILE
  179. if test 23405 -ne `wc -c <'tripwire-1.0/tests/tw.db_TEST'`; then
  180.     echo shar: \"'tripwire-1.0/tests/tw.db_TEST'\" unpacked with wrong size!
  181. fi
  182. # end of 'tripwire-1.0/tests/tw.db_TEST'
  183. fi
  184. if test -f 'tripwire-1.0/sigs/md5/md5.doc' -a "${1}" != "-c" ; then 
  185.   echo shar: Will not clobber existing file \"'tripwire-1.0/sigs/md5/md5.doc'\"
  186. else
  187. echo shar: Extracting \"'tripwire-1.0/sigs/md5/md5.doc'\" \(19066 characters\)
  188. sed "s/^X//" >'tripwire-1.0/sigs/md5/md5.doc' <<'END_OF_FILE'
  189. X
  190. X
  191. X
  192. X
  193. XNetwork Working Group                                          R. Rivest
  194. XINTERNET-DRAFT                       MIT Laboratory for Computer Science
  195. X                                                                S. Dusse
  196. X                                                 RSA Data Security, Inc.
  197. X                                                            10 July 1991
  198. X
  199. X
  200. X                    The MD5 Message-Digest Algorithm
  201. X
  202. X
  203. XSTATUS OF THIS MEMO
  204. X
  205. X   This draft document will be submitted to the RFC editor as a protocol
  206. X   specification. Comments should be sent to <pem-dev@tis.com> or to the
  207. X   authors. Distribution of this memo is unlimited.
  208. X
  209. X
  210. XACKNOWLEDGEMENT
  211. X
  212. X   We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle,
  213. X   David Chaum, and Noam Nisan for numerous helpful comments and
  214. X   suggestions.
  215. X
  216. X
  217. XTable of Contents
  218. X
  219. X   1. Executive Summary                                                1
  220. X   2. Terminology and Notation                                         2
  221. X   3. MD5 Algorithm Description                                        3
  222. X   4. Summary                                                          7
  223. X   5. Summary of Differences Between MD4 and MD5                       7
  224. X   6. Security Considerations                                          7
  225. X   References                                                          8
  226. X   Authors' Addresses                                                  8
  227. X   APPENDIX - Reference Implementation                                 9
  228. X
  229. X
  230. X
  231. X1. Executive Summary
  232. X
  233. X   This document describes the MD5 message-digest algorithm. The
  234. X   algorithm takes as input an input message of arbitrary length and
  235. X   produces as output a 128-bit "fingerprint" or "message digest" of the
  236. X   input. It is conjectured that it is computationally infeasible to
  237. X   produce two messages having the same message digest, or to produce
  238. X   any message having a given prespecified target message digest. The
  239. X   MD5 algorithm is intended for digital signature applications, where a
  240. X   large file must be "compressed" in a secure manner before being
  241. X   encrypted with a private (secret) key under a public-key cryptosystem
  242. X   such as RSA.
  243. X
  244. X
  245. X
  246. X
  247. XRivest and Dusse                                                [Page 1]
  248. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  249. X
  250. X
  251. X   The MD5 algorithm is designed to be quite fast on 32-bit machines. In
  252. X   addition, the MD5 algorithm does not require any large substitution
  253. X   tables; the algorithm can be coded quite compactly.
  254. X
  255. X   The MD5 algorithm is an extension of the MD4 message digest algorithm
  256. X   [1,2]. MD5 is slightly slower than MD4, but is more "conservative" in
  257. X   design. MD5 was designed because it was felt that MD4 was perhaps
  258. X   being adopted for use more quickly than justified by the existing
  259. X   critical review; because MD4 was designed to be exceptionally fast,
  260. X   it is "at the edge" in terms of risking successful cryptanalytic
  261. X   attack. MD5 backs off a bit, giving up a little in speed for a much
  262. X   greater likelihood of ultimate security. It incorporates some
  263. X   suggestions made by various reviewers, and contains additional
  264. X   optimizations.
  265. X
  266. X   The MD5 algorithm is being placed in the public domain for review and
  267. X   possible adoption as a standard.
  268. X
  269. X   A version of this document including the C source code in the
  270. X   appendix is available by FTP from RSA.COM in the file "pub/md5.doc".
  271. X
  272. X   This document may be referred to, unofficially, as Internet draft
  273. X   [MD5-A].
  274. X
  275. X   For OSI-based applications, MD5's object identifier is
  276. X
  277. X   md5 OBJECT IDENTIFIER ::=
  278. X     {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5}
  279. X
  280. X   In the X.509 type AlgorithmIdentifier [3], the parameters for MD5
  281. X   should have type NULL.
  282. X
  283. X
  284. X2. Terminology and Notation
  285. X
  286. X   In this document a "word" is a 32-bit quantity and a "byte" is an
  287. X   eight-bit quantity. A sequence of bits can be interpreted in a
  288. X   natural manner as a sequence of bytes, where each consecutive group
  289. X   of eight bits is interpreted as a byte with the high-order (most
  290. X   significant) bit of each byte listed first. Similarly, a sequence of
  291. X   bytes can be interpreted as a sequence of 32-bit words, where each
  292. X   consecutive group of four bytes is interpreted as a word with the
  293. X   low-order (least significant) byte given first.
  294. X
  295. X   Let x_i denote "x sub i". If the subscript is an expression, we
  296. X   surround it in braces, as in x_{i+1}. Similarly, we use ^ for
  297. X   superscripts (exponentiation), so that x^i denotes x to the i-th
  298. X   power.
  299. X
  300. X   Let the symbol "+" denote addition of words (i.e., modulo-2^32
  301. X   addition). Let X <<< s denote the 32-bit value obtained by circularly
  302. X   shifting (rotating) X left by s bit positions. Let not(X) denote the
  303. X
  304. X
  305. XRivest and Dusse                                                [Page 2]
  306. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  307. X
  308. X
  309. X   bit-wise complement of X, and let X v Y denote the bit-wise OR of X
  310. X   and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY
  311. X   denote the bit-wise AND of X and Y.
  312. X
  313. X
  314. X3. MD5 Algorithm Description
  315. X
  316. X   We begin by supposing that we have a b-bit message as input, and that
  317. X   we wish to find its message digest. Here b is an arbitrary
  318. X   nonnegative integer; b may be zero, it need not be a multiple of
  319. X   eight, and it may be arbitrarily large. We imagine the bits of the
  320. X   message written down as follows:
  321. X
  322. X                            m_0 m_1 ... m_{b-1}
  323. X
  324. X   The following five steps are performed to compute the message digest
  325. X   of the message.
  326. X
  327. X
  328. X3.1 Step 1. Append Padding Bits
  329. X
  330. X   The message is "padded" (extended) so that its length (in bits) is
  331. X   congruent to 448, modulo 512. That is, the message is extended so
  332. X   that it is just 64 bits shy of being a multiple of 512 bits long.
  333. X   Padding is always performed, even if the length of the message is
  334. X   already congruent to 448, modulo 512 (in which case 512 bits of
  335. X   padding are added).
  336. X
  337. X   Padding is performed as follows: a single "1" bit is appended to the
  338. X   message, and then enough zero bits are appended so that the length in
  339. X   bits of the padded message becomes congruent to 448, modulo 512.
  340. X
  341. X
  342. X3.2 Step 2. Append Length
  343. X
  344. X   A 64-bit representation of b (the length of the message before the
  345. X   padding bits were added) is appended to the result of the previous
  346. X   step. In the unlikely event that b is greater than 2^64, then only
  347. X   the low-order 64 bits of b are used. (These bits are appended as two
  348. X   32-bit words and appended low-order word first in accordance with the
  349. X   previous conventions.)
  350. X
  351. X   At this point the resulting message (after padding with bits and with
  352. X   b) has a length that is an exact multiple of 512 bits. Equivalently,
  353. X   this message has a length that is an exact multiple of 16 (32-bit)
  354. X   words. Let M[0 ... N-1] denote the words of the resulting message,
  355. X   where N is a multiple of 16.
  356. X
  357. X
  358. X
  359. X
  360. X
  361. X
  362. X
  363. XRivest and Dusse                                                [Page 3]
  364. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  365. X
  366. X
  367. X3.3 Step 3. Initialize MD Buffer
  368. X
  369. X   A four-word buffer (A,B,C,D) is used to compute the message digest.
  370. X   Here each of A, B, C, D is a 32-bit register. These registers are
  371. X   initialized to the following values in hexadecimal, low-order bytes
  372. X   first):
  373. X
  374. X                            word A: 01 23 45 67
  375. X                            word B: 89 ab cd ef
  376. X                            word C: fe dc ba 98
  377. X                            word D: 76 54 32 10
  378. X
  379. X
  380. X3.4 Step 4. Process Message in 16-Word Blocks
  381. X
  382. X   We first define four auxiliary functions that each take as input
  383. X   three 32-bit words and produce as output one 32-bit word.
  384. X
  385. X                         F(X,Y,Z) = XY v not(X) Z
  386. X                         G(X,Y,Z) = XZ v Y not(Z)
  387. X                         H(X,Y,Z) = X xor Y xor Z
  388. X                       I(X,Y,Z) = Y xor (X v not(Z))
  389. X
  390. X   In each bit position F acts as a conditional: if X then Y else Z.
  391. X   (The function F could have been defined using + instead of v since XY
  392. X   and not(X)Z will never have 1's in the same bit position.) It is
  393. X   interesting to note that if the bits of X, Y, and Z are independent
  394. X   and unbiased, the each bit of F(X,Y,Z) will be independent and
  395. X   unbiased.
  396. X
  397. X   The functions G, H, and I are similar to the function F, in that they
  398. X   act in "bitwise parallel" to produce their output from the bits of X,
  399. X   Y, and Z, in such a manner that if the corresponding bits of X, Y,
  400. X   and Z are independent and unbiased, then each bit of G(X,Y,Z),
  401. X   H(X,Y,Z), and I(X,Y,Z) will be independent and unbiased. Note that
  402. X   the function H is the bit-wise "xor" or "parity" function of its
  403. X   inputs.
  404. X
  405. X   Do the following:
  406. X
  407. X   /* Process each 16-word block. */
  408. X   For i = 0 to N/16-1 do
  409. X
  410. X       /* Copy block i into X. */
  411. X       For j = 0 to 15 do
  412. X           Set X[j] to M[i*16+j].
  413. X       end /* of loop on j */
  414. X
  415. X       /* Save A as AA, B as BB, C as CC, and D as DD. */
  416. X       AA = A
  417. X       BB = B
  418. X       CC = C
  419. X
  420. X
  421. XRivest and Dusse                                                [Page 4]
  422. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  423. X
  424. X
  425. X       DD = D
  426. X
  427. X       /* Round 1. */
  428. X       /* Let FF(a,b,c,d,X[k],s,t) denote the operation
  429. X           a = b + ((a + F(b,c,d) + X[k] + t) <<< s). */
  430. X       /* Here the additive constants t are chosen as follows:
  431. X          In step i, the additive constant is the integer part of
  432. X          4294967296 times abs(sin(i)), where i is in radians. */
  433. X       /* Let S11 = 7, S12 = 12, S13 = 17, and S14 = 22. */
  434. X       /* Do the following 16 operations. */
  435. X       FF (a, b, c, d, X[ 0], S11, 3614090360); /* Step 1 */
  436. X       FF (d, a, b, c, X[ 1], S12, 3905402710); /* 2 */
  437. X       FF (c, d, a, b, X[ 2], S13,  606105819); /* 3 */
  438. X       FF (b, c, d, a, X[ 3], S14, 3250441966); /* 4 */
  439. X       FF (a, b, c, d, X[ 4], S11, 4118548399); /* 5 */
  440. X       FF (d, a, b, c, X[ 5], S12, 1200080426); /* 6 */
  441. X       FF (c, d, a, b, X[ 6], S13, 2821735955); /* 7 */
  442. X       FF (b, c, d, a, X[ 7], S14, 4249261313); /* 8 */
  443. X       FF (a, b, c, d, X[ 8], S11, 1770035416); /* 9 */
  444. X       FF (d, a, b, c, X[ 9], S12, 2336552879); /* 10 */
  445. X       FF (c, d, a, b, X[10], S13, 4294925233); /* 11 */
  446. X       FF (b, c, d, a, X[11], S14, 2304563134); /* 12 */
  447. X       FF (a, b, c, d, X[12], S11, 1804603682); /* 13 */
  448. X       FF (d, a, b, c, X[13], S12, 4254626195); /* 14 */
  449. X       FF (c, d, a, b, X[14], S13, 2792965006); /* 15 */
  450. X       FF (b, c, d, a, X[15], S14, 1236535329); /* 16 */
  451. X
  452. X       /* Round 2. */
  453. X       /* Let GG(a,b,c,d,X[k],s,t) denote the operation
  454. X           a = b + ((a + G(b,c,d) + X[k] + t) <<< s). */
  455. X       /* Let S21 = 5, S22 = 9, S23 = 14, and S24 = 20. */
  456. X
  457. X       /* Do the following 16 operations. */
  458. X       GG (a, b, c, d, X[ 1], S21, 4129170786); /* 17 */
  459. X       GG (d, a, b, c, X[ 6], S22, 3225465664); /* 18 */
  460. X       GG (c, d, a, b, X[11], S23,  643717713); /* 19 */
  461. X       GG (b, c, d, a, X[ 0], S24, 3921069994); /* 20 */
  462. X       GG (a, b, c, d, X[ 5], S21, 3593408605); /* 21 */
  463. X       GG (d, a, b, c, X[10], S22,   38016083); /* 22 */
  464. X       GG (c, d, a, b, X[15], S23, 3634488961); /* 23 */
  465. X       GG (b, c, d, a, X[ 4], S24, 3889429448); /* 24 */
  466. X       GG (a, b, c, d, X[ 9], S21,  568446438); /* 25 */
  467. X       GG (d, a, b, c, X[14], S22, 3275163606); /* 26 */
  468. X       GG (c, d, a, b, X[ 3], S23, 4107603335); /* 27 */
  469. X       GG (b, c, d, a, X[ 8], S24, 1163531501); /* 28 */
  470. X       GG (a, b, c, d, X[13], S21, 2850285829); /* 29 */
  471. X       GG (d, a, b, c, X[ 2], S22, 4243563512); /* 30 */
  472. X       GG (c, d, a, b, X[ 7], S23, 1735328473); /* 31 */
  473. X       GG (b, c, d, a, X[12], S24, 2368359562); /* 32 */
  474. X
  475. X       /* Round 3. */
  476. X       /* Let HH(a,b,c,d,X[k],s,t) denote the operation
  477. X
  478. X
  479. XRivest and Dusse                                                [Page 5]
  480. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  481. X
  482. X
  483. X           a = b + ((a + H(b,c,d) + X[k] + t) <<< s). */
  484. X       /* Let S31 = 4, S32 = 11, S33 = 16, and S34 = 23. */
  485. X
  486. X       /* Do the following 16 operations. */
  487. X       HH (a, b, c, d, X[ 5], S31, 4294588738); /* 33 */
  488. X       HH (d, a, b, c, X[ 8], S32, 2272392833); /* 34 */
  489. X       HH (c, d, a, b, X[11], S33, 1839030562); /* 35 */
  490. X       HH (b, c, d, a, X[14], S34, 4259657740); /* 36 */
  491. X       HH (a, b, c, d, X[ 1], S31, 2763975236); /* 37 */
  492. X       HH (d, a, b, c, X[ 4], S32, 1272893353); /* 38 */
  493. X       HH (c, d, a, b, X[ 7], S33, 4139469664); /* 39 */
  494. X       HH (b, c, d, a, X[10], S34, 3200236656); /* 40 */
  495. X       HH (a, b, c, d, X[13], S31,  681279174); /* 41 */
  496. X       HH (d, a, b, c, X[ 0], S32, 3936430074); /* 42 */
  497. X       HH (c, d, a, b, X[ 3], S33, 3572445317); /* 43 */
  498. X       HH (b, c, d, a, X[ 6], S34,   76029189); /* 44 */
  499. X       HH (a, b, c, d, X[ 9], S31, 3654602809); /* 45 */
  500. X       HH (d, a, b, c, X[12], S32, 3873151461); /* 46 */
  501. X       HH (c, d, a, b, X[15], S33,  530742520); /* 47 */
  502. X       HH (b, c, d, a, X[ 2], S34, 3299628645); /* 48 */
  503. X
  504. X       /* Round 4. */
  505. X       /* Let II(a,b,c,d,X[k],s,t) denote the operation
  506. X           a = b + ((a + I(b,c,d) + X[k] + t) <<< s). */
  507. X       /* Let S41 = 6, S42 = 10, S43 = 15, and S44 = 21. */
  508. X
  509. X       /* Do the following 16 operations. */
  510. X       II (a, b, c, d, X[ 0], S41, 4096336452); /* 49 */
  511. X       II (d, a, b, c, X[ 7], S42, 1126891415); /* 50 */
  512. X       II (c, d, a, b, X[14], S43, 2878612391); /* 51 */
  513. X       II (b, c, d, a, X[ 5], S44, 4237533241); /* 52 */
  514. X       II (a, b, c, d, X[12], S41, 1700485571); /* 53 */
  515. X       II (d, a, b, c, X[ 3], S42, 2399980690); /* 54 */
  516. X       II (c, d, a, b, X[10], S43, 4293915773); /* 55 */
  517. X       II (b, c, d, a, X[ 1], S44, 2240044497); /* 56 */
  518. X       II (a, b, c, d, X[ 8], S41, 1873313359); /* 57 */
  519. X       II (d, a, b, c, X[15], S42, 4264355552); /* 58 */
  520. X       II (c, d, a, b, X[ 6], S43, 2734768916); /* 59 */
  521. X       II (b, c, d, a, X[13], S44, 1309151649); /* 60 */
  522. X       II (a, b, c, d, X[ 4], S41, 4149444226); /* 61 */
  523. X       II (d, a, b, c, X[11], S42, 3174756917); /* 62 */
  524. X       II (c, d, a, b, X[ 2], S43,  718787259); /* 63 */
  525. X       II (b, c, d, a, X[ 9], S44, 3951481745); /* 64 */
  526. X
  527. X       /* Then perform the following additions. (That is, increment each
  528. X          of the four registers by the value it had before this block
  529. X          was started.) */
  530. X       A = A + AA
  531. X       B = B + BB
  532. X       C = C + CC
  533. X       D = D + DD
  534. X
  535. X
  536. X
  537. XRivest and Dusse                                                [Page 6]
  538. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  539. X
  540. X
  541. X
  542. X   end /* of loop on i */
  543. X
  544. X
  545. X3.5 Step 5. Output
  546. X
  547. X   The message digest produced as output is A, B, C, D. That is, we
  548. X   begin with the low-order byte of A, and end with the high-order byte
  549. X   of D.
  550. X
  551. X   This completes the description of MD5. A reference implementation in
  552. X   C is given in the Appendix.
  553. X
  554. X
  555. X4. Summary
  556. X
  557. X   The MD5 message-digest algorithm is simple to implement, and provides
  558. X   a "fingerprint" or message digest of a message of arbitrary length.
  559. X   It is conjectured that the difficulty of coming up with two messages
  560. X   having the same message digest is on the order of 2^64 operations,
  561. X   and that the difficulty of coming up with any message having a given
  562. X   message digest is on the order of 2^128 operations. The MD5 algorithm
  563. X   has been carefully scrutinized for weaknesses. It is, however, a
  564. X   relatively new algorithm and further security analysis is of course
  565. X   justified, as is the case with any new proposal of this sort.
  566. X
  567. X
  568. X5. Summary of Differences Between MD4 and MD5
  569. X
  570. X   The following are the differences between MD4 and MD5:
  571. X
  572. X     --   A fourth round has been added.
  573. X
  574. X     --   Each step now has a unique additive constant.
  575. X
  576. X     --   The function g in round 2 was changed from (XY v XZ v YZ)
  577. X          to (XZ v Y not(Z)) to make g less symmetric.
  578. X
  579. X     --   Each step now adds in the result of the previous step.
  580. X          This promotes a faster "avalanche effect".
  581. X
  582. X     --   The order in which input words are accessed in rounds 2
  583. X          and 3 is changed, to make these patterns less like each
  584. X          other.
  585. X
  586. X     --   The shift amounts in each round have been approximately
  587. X          optimized, to yield a faster "avalanche effect". The
  588. X          shifts in different rounds are distinct.
  589. X
  590. X
  591. X
  592. X
  593. X
  594. X
  595. XRivest and Dusse                                                [Page 7]
  596. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  597. X
  598. X
  599. X6. Security Considerations
  600. X
  601. X   The level of security discussed in this memo is considered to be
  602. X   sufficient for implementing very high security hybrid digital-
  603. X   signature schemes based on MD5 and a public-key cryptosystem.
  604. X
  605. X
  606. XReferences
  607. X
  608. X     [1]  Rivest, R.L., The MD4 Message Digest Algorithm (RFC 1186),
  609. X          October 1990.
  610. X
  611. X     [2]  Rivest, R.L., The MD4 message digest algorithm, presented at
  612. X          CRYPTO '90 (Santa Barbara, CA, August 11-15, 1990).
  613. X
  614. X     [3]  CCITT, The Directory---Authentication Framework
  615. X          (Recommendation X.509), 1988.
  616. X
  617. X
  618. X
  619. X
  620. XAuthors' Addresses
  621. X
  622. X   Ronald L. Rivest
  623. X   Massachusetts Institute of Technology
  624. X   Laboratory for Computer Science
  625. X   NE43-324
  626. X   545 Technology Square
  627. X   Cambridge, MA  02139-1986
  628. X   Phone: (617) 253-5880
  629. X   EMail: rivest@theory.lcs.mit.edu
  630. X
  631. X   Steve Dusse
  632. X   RSA Data Security, Inc.
  633. X   10 Twin Dolphin Drive
  634. X   Redwood City, CA  94065
  635. X   Phone: (415) 595-8782
  636. X   EMail: dusse@rsa.com
  637. X
  638. X
  639. X
  640. X
  641. X
  642. X
  643. X
  644. X
  645. X
  646. X
  647. X
  648. X
  649. X
  650. X
  651. X
  652. X
  653. XRivest and Dusse                                                [Page 8]
  654. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  655. X
  656. X
  657. X
  658. XAPPENDIX - Reference Implementation
  659. X
  660. X   This appendix contains the following files:
  661. X
  662. X     md5.h -- header file for implementation of MD5
  663. X
  664. X     md5.c -- the source code for MD5 routines
  665. X
  666. X     md5driver.c -- sample test routines
  667. X
  668. X     session -- sample results of running md5driver
  669. X
  670. X   It is not difficult to improve this implementation on particular
  671. X   platforms, an exercise left to the reader. Following are some
  672. X   suggestions:
  673. X
  674. X     1.   Change MD5Update so that the context is not used at all
  675. X          if it is empty (mdi == 0) and 64 or more bytes remain
  676. X          (inLen >= 64). In other words, call Transform with inBuf
  677. X          in this case. (This requires that byte ordering is
  678. X          correct in inBuf.)
  679. X
  680. X     2.   Implement a procedure MD5UpdateLong modeled after
  681. X          MD5Update where inBuf is UINT4 * instead of unsigned char
  682. X          *. MD5UpdateLong would call Transform directly with 16-
  683. X          word blocks from inBuf. Call this instead of MD5Update in
  684. X          general. This works well if you have an I/O procedure
  685. X          that can read long words from a file.
  686. X
  687. X     3.   On "little-endian" platforms where the lowest-address
  688. X          byte in a long word is the least significant (and there
  689. X          are no alignment restrictions), change MD5Update to call
  690. X          Transform directly with 64-byte blocks from inBuf
  691. X          (typecast to a UINT4 *).
  692. X
  693. X
  694. X
  695. X
  696. X
  697. X
  698. X
  699. X
  700. X
  701. X
  702. X
  703. X
  704. X
  705. X
  706. X
  707. X
  708. X
  709. X
  710. X
  711. XRivest and Dusse                                                [Page 9]
  712. XINTERNET-DRAFT      The MD5 Message-Digest Algorithm        10 July 1991
  713. X
  714. X
  715. END_OF_FILE
  716. if test 19066 -ne `wc -c <'tripwire-1.0/sigs/md5/md5.doc'`; then
  717.     echo shar: \"'tripwire-1.0/sigs/md5/md5.doc'\" unpacked with wrong size!
  718. fi
  719. # end of 'tripwire-1.0/sigs/md5/md5.doc'
  720. fi
  721. if test -f 'tripwire-1.0/src/list.c' -a "${1}" != "-c" ; then 
  722.   echo shar: Will not clobber existing file \"'tripwire-1.0/src/list.c'\"
  723. else
  724. echo shar: Extracting \"'tripwire-1.0/src/list.c'\" \(17081 characters\)
  725. sed "s/^X//" >'tripwire-1.0/src/list.c' <<'END_OF_FILE'
  726. X#ifndef lint
  727. Xstatic char rcsid[] = "$Id: list.c,v 1.3 92/11/03 04:49:45 genek Exp $";
  728. X#endif
  729. X
  730. X/*
  731. X * list.c
  732. X *
  733. X *    generic linked list routines.
  734. X *
  735. X *    These routines generally use a (struct list **) as an argument
  736. X *    (ie: a pointer to a pointer to the head of the list).  This way,
  737. X *    a NULL list pointer will automatically be malloc()'d into existence.
  738. X *
  739. X *    These routines started as extremely simple routines.  Unfortunately, the
  740. X *    O(n) search times made Tripwire extremely slow.  So, v3.1 of
  741. X *    the linked list routines incorporate a hash table into each of
  742. X *    the list structures.  *whew*  It's faster, but it's not simple
  743. X *    anymore.  (The addition of back pointers didn't help either...)
  744. X *
  745. X *    Why?  Well, we need to preserve order for the list of generated files.
  746. X *    So, a hash table won't do, and a simple linked list is too slow.
  747. X *
  748. X *    However, the neat thing is that the object-oriented nature of
  749. X *    the list routines is preserved.
  750. X *
  751. X * Gene Kim
  752. X * Purdue University
  753. X */
  754. X
  755. X#include "../include/config.h"
  756. X#include <stdio.h>
  757. X#ifdef STDLIBH
  758. X#include <stdlib.h>
  759. X#endif
  760. X#include <assert.h>
  761. X#ifdef MALLOCH
  762. X# include <malloc.h>
  763. X#endif
  764. X#ifdef STRINGH
  765. X#include <string.h>
  766. X#else
  767. X#include <strings.h>
  768. X#endif
  769. X#include "../include/list.h"
  770. X
  771. X/* prototypes */
  772. Xstatic unsigned int string_hash ();
  773. X
  774. Xstatic int listdebug = 0;
  775. X
  776. X#define LISTDEBUG(x) if (listdebug >= (x))
  777. X
  778. X/*
  779. X * list_set(pc_name, pc_value, prioirty, pp_list)
  780. X *
  781. X *    insert structure with (name=pc_name) and (value=pc_value)
  782. X *    into the specified list
  783. X */
  784. X
  785. Xvoid
  786. Xlist_set(pc_name, pc_value, priority, pp_list)
  787. X    int priority;
  788. X    char *pc_name, *pc_value;
  789. X    struct list **pp_list;
  790. X{
  791. X    struct list_elem *p;
  792. X    struct list_hash *phash, *qhash;
  793. X    int    clobber = 0;
  794. X    struct list_elem *head;
  795. X    unsigned int hindex;            /* hash index */
  796. X    struct list_hash *hentry;
  797. X
  798. X    /* get the hash value */
  799. X    hindex = string_hash(pc_name);
  800. X
  801. X    /* were we handed a NULL list pointer? */
  802. X    if (*pp_list == NULL)
  803. X    goto INSERT;
  804. X    else
  805. X    head = (*pp_list)->p_head;
  806. X
  807. X    hentry = &( ((*pp_list)->hashtable)[hindex]);
  808. X
  809. X    /*
  810. X     * 1) if pc_name is already in the list, then we compare priority
  811. X     *        levels.  replace only if new priority is higher than
  812. X     *        existing priority.
  813. X     *
  814. X     * 2) if pc_name is not on the list, then we just add it to the
  815. X     *        end of the list
  816. X     */
  817. X
  818. X    /* walk through hash chain */
  819. X    for (phash = hentry; phash && phash->used; qhash = phash,
  820. X                            phash = phash->next) {
  821. X    if (strcmp(phash->key, pc_name) == 0) {
  822. X        /*
  823. X         * if existing priority is equal or less than this one,
  824. X         * then go ahead and clobber it.
  825. X         */
  826. X        p = phash->lptr;
  827. X        if (p->priority <= priority) {
  828. X
  829. XLISTDEBUG(10)
  830. Xfprintf(stderr, "list_set(): '%s' variable already found.  Clobbering...\n",
  831. X                pc_name);
  832. X
  833. X        clobber++;
  834. X        goto INSERT;
  835. X        }                /* end if clobber */
  836. X        else {
  837. X
  838. XLISTDEBUG(10)
  839. Xfprintf(stderr, "list_set(): variable already found, but not clobbering...\n");
  840. X    
  841. X        return;
  842. X        }                /* end if not clobber */
  843. X    }
  844. X    }
  845. X    /* back up one if we're not at head of chain */
  846. X    if (phash == (struct list_hash *) NULL)
  847. X    phash = qhash;
  848. X
  849. XINSERT:
  850. X    /* insert the element into the list */
  851. X
  852. X    /*         do we first need to create the list object? */
  853. X    if (*pp_list == NULL) {
  854. X
  855. X    int i;
  856. X    struct list *pl;
  857. X
  858. X    /* create the list structure pointer */
  859. X    if ((pl = *pp_list = (struct list *) malloc(sizeof(struct list)))
  860. X                    == NULL) {
  861. X        fprintf(stderr, "list_insert(): malloc() failed!\n");
  862. X        exit(1);
  863. X    }
  864. X
  865. X    /* create the pointers inside the structure */
  866. X    if ((p = (struct list_elem *) malloc(sizeof(struct list_elem)))
  867. X                    == NULL) {
  868. X        fprintf(stderr, "list_insert(): malloc() failed!\n");
  869. X        exit(1);
  870. X    }
  871. X    /* cauterize the prev pointer */
  872. X    p->prev = NULL;
  873. X    p->varname = NULL;
  874. X
  875. X    /* attach to list structure */
  876. X    pl->p_head = head = pl->p_tail = p;
  877. X    head->next = NULL;
  878. X
  879. X    /* initialize the hash table */
  880. X    for (i = 0; i < LIST_HASHSZ; i++) {
  881. X        hentry = &( ((*pp_list)->hashtable)[i]);
  882. X        hentry->key = (char *) NULL;
  883. X        hentry->used = 0;
  884. X        hentry->lptr = (struct list_elem *) NULL;
  885. X        hentry->next = (struct list_hash *) NULL;
  886. X    }
  887. X
  888. X    /* get correct hash bucket */
  889. X    hentry = &( ((*pp_list)->hashtable)[hindex]);
  890. X    }
  891. X    else if (clobber) {
  892. X        free(p->varname);
  893. X        free(p->varvalue);
  894. X    }
  895. X    else
  896. X    {
  897. X    /* add a list entry at tail of list */
  898. X    p = (*pp_list)->p_tail;
  899. X
  900. X    if ((p->next = (struct list_elem *)
  901. X                malloc(sizeof(struct list_elem))) == NULL) {
  902. X
  903. X        fprintf(stderr, "list_insert(): malloc() failed!\n");
  904. X        exit(1);
  905. X    }
  906. X
  907. X    /* attach the prev pointer */
  908. X    p->next->prev = p;
  909. X
  910. X    /* now the rest */
  911. X    p = p->next;
  912. X    p->next = NULL;
  913. X
  914. X    /* bind to tail */
  915. X    (*pp_list)->p_tail = p;
  916. X
  917. X    if (phash->used) {
  918. X        /* now create the hash chain entry */
  919. X        /*    do we need a new structure to chain on? */
  920. X        if ((qhash = (struct list_hash *) malloc(sizeof(struct list_hash)))
  921. X                    == NULL) {
  922. X        fprintf(stderr, "list_insert(): malloc() failed!\n");
  923. X        exit(1);
  924. X        }
  925. X        qhash->used = 0;
  926. X        qhash->next = NULL;
  927. X
  928. X        phash->next = qhash;
  929. X        hentry = phash = qhash;
  930. X    }
  931. X    }
  932. X
  933. X    /* start filling in fields */
  934. X    if ((p->varname = (char *) malloc((unsigned) (strlen(pc_name) + 1)))
  935. X                == NULL) {
  936. X    fprintf(stderr, "list_insert(): malloc() failed!\n");
  937. X    exit(1);
  938. X    }
  939. X    (void) strcpy(p->varname, pc_name);
  940. X    if ((p->varvalue = (char *) malloc((unsigned) (strlen(pc_value) + 1)))
  941. X                == NULL) {
  942. X    fprintf(stderr, "list_insert(): malloc() failed!\n");
  943. X    exit(1);
  944. X    }
  945. X    (void) strcpy(p->varvalue, pc_value);
  946. X    p->flag = 0;
  947. X    p->priority = 0;
  948. X
  949. X    /* fill in hash chain structure */
  950. X    hentry->key = p->varname;
  951. X    if (hentry->used == 0)
  952. X    hentry->used++;
  953. X    assert(hentry->used == 1);
  954. X    hentry->lptr = p;
  955. X    hentry->next = NULL;
  956. X
  957. X    return;
  958. X
  959. X}
  960. X
  961. X/*
  962. X * char *
  963. X * list_lookup(pc_name, pp_list)
  964. X *
  965. X *    return the string value assigned to the environment value named
  966. X *    pc_name in the specified list.
  967. X *
  968. X *    you must copy the contents of the (char *).
  969. X */
  970. X
  971. Xchar *
  972. Xlist_lookup(pc_name, pp_list)
  973. X    char *pc_name;
  974. X    struct list **pp_list;
  975. X{
  976. X    struct list_elem *p;
  977. X    struct list_hash *phash;
  978. X    char    *s;
  979. X    unsigned int hindex;
  980. X    struct list_hash *hentry;
  981. X
  982. X    /*
  983. X     * 1) if *pp_list is NULL, then we know it's emtpy
  984. X     * 2) if it's not in the hash table, then return NULL
  985. X     * 3) search hash table chain
  986. X     */
  987. X
  988. X    /* check for empty list */
  989. X    if (*pp_list == NULL) {
  990. X    return NULL;
  991. X    }
  992. X
  993. X    /* look in hash table */
  994. X    hindex = string_hash(pc_name);
  995. X    hentry = &(((*pp_list)->hashtable)[hindex]);
  996. X
  997. X    if (hentry->used == 0) {
  998. X    return NULL;
  999. X    }
  1000. X
  1001. X    /* now search through hash chain */
  1002. X    for (phash = hentry; phash; phash = phash->next) {
  1003. X    if (strcmp(phash->key, pc_name) == 0) {
  1004. X        p = phash->lptr;
  1005. X        /*
  1006. X        s = (char *) malloc((unsigned) (strlen(p->varvalue) + 1));
  1007. X        (void) strcpy(s, p->varvalue);
  1008. X        */
  1009. X        s = p->varvalue;
  1010. X        return s;
  1011. X    }
  1012. X    }
  1013. X    return NULL;
  1014. X}
  1015. X
  1016. X/*
  1017. X * int
  1018. X * list_isthere(pc_name, pp_list)
  1019. X *
  1020. X *    returns (1) if pc_name is in the specified list.
  1021. X *    else returns (0).
  1022. X */
  1023. X
  1024. Xint
  1025. Xlist_isthere(pc_name, pp_list)
  1026. X    char *pc_name;
  1027. X    struct list **pp_list;
  1028. X{
  1029. X    struct list_hash *phash;
  1030. X    unsigned int hindex;
  1031. X    struct list_hash *hentry;
  1032. X
  1033. X    /*
  1034. X     * 1) if *pp_list is NULL, then we know it's emtpy
  1035. X     * 2) if it's not in the hash table, then return NULL
  1036. X     * 3) search hash table chain
  1037. X     */
  1038. X
  1039. X    /* check for empty list */
  1040. X    if (*pp_list == NULL) {
  1041. X    return 0;
  1042. X    }
  1043. X
  1044. X    /* look in hash table */
  1045. X    hindex = string_hash(pc_name);
  1046. X    hentry = &(((*pp_list)->hashtable)[hindex]);
  1047. X
  1048. X    if (hentry->used == 0) {
  1049. X    return 0;
  1050. X    }
  1051. X
  1052. X    /* now search through hash chain */
  1053. X    for (phash = hentry; phash; phash = phash->next) {
  1054. X    if (strcmp(phash->key, pc_name) == 0) {
  1055. X        return 1;
  1056. X    }
  1057. X    }
  1058. X    return 0;
  1059. X}
  1060. X
  1061. X/*
  1062. X * list_unset(pc_name, pp_list)
  1063. X *    remove the list entry with (varname == pcname) from the
  1064. X *    environment
  1065. X */
  1066. X
  1067. Xvoid
  1068. Xlist_unset(pc_name, pp_list)
  1069. X    char *pc_name;
  1070. X    struct list **pp_list;
  1071. X{
  1072. X    struct list_hash *phash, *qhash = (struct list_hash *) NULL;
  1073. X    struct list_elem *plist;
  1074. X    unsigned int hindex;
  1075. X    struct list_hash *hentry;
  1076. X
  1077. X    if (*pp_list == NULL)
  1078. X    return;
  1079. X
  1080. X    /*
  1081. X     * 1) if pc_name isn't found in the hash chain, return
  1082. X     * 2) if found, remove the element from the list, and then remove
  1083. X     *        from hash chain.
  1084. X     *        check to see if we're the only element on the hash chain,
  1085. X     *        too.
  1086. X     */
  1087. X
  1088. X    /* look in hash table */
  1089. X    hindex = string_hash(pc_name);
  1090. X    hentry = &(((*pp_list)->hashtable)[hindex]);
  1091. X
  1092. X    /* if not in hash table, return */
  1093. X    if (hentry->used == 0) {
  1094. X
  1095. XLISTDEBUG(0)
  1096. Xfprintf(stderr, "list_unset(): couldn't find '%s' in environment\n", pc_name);
  1097. X
  1098. X    return;
  1099. X    }
  1100. X
  1101. X    /* find the element, but playing pointer tag w/two pointers */
  1102. X    for (phash = hentry; phash; qhash = phash, phash = phash->next) {
  1103. X    assert(qhash == NULL || qhash->next == phash);
  1104. X    if (strcmp(phash->key, pc_name) == 0) {
  1105. X        /* remove the element from the list */
  1106. X        plist = phash->lptr;
  1107. X
  1108. X        /* prev->next = this->next
  1109. X         * next->prev = this->prev
  1110. X         */
  1111. X
  1112. X        /* are we at the head of the list? */
  1113. X        if (plist->prev) {
  1114. X        plist->prev->next = plist->next;
  1115. X        }
  1116. X        /* are we at the end of the list? */
  1117. X        if (plist->next) {
  1118. X        plist->next->prev = plist->prev;
  1119. X        }
  1120. X        free((char *) plist);
  1121. X
  1122. X        /* now remove from hash chain */
  1123. X        /* if it was at top of list */
  1124. X        if (qhash == NULL) {
  1125. X        hentry->used = 0;
  1126. X        hentry->next = (struct list_hash *) NULL;
  1127. X        } else {
  1128. X        qhash->next = phash->next;
  1129. X        free((char *) phash);
  1130. X        }
  1131. X        return;
  1132. X    }
  1133. X    }
  1134. X
  1135. X
  1136. X    return;
  1137. X}
  1138. X
  1139. X/*
  1140. X * list_setflag(pc_name, flag, pp_list)
  1141. X *
  1142. X *    OR the the specified flag to the existing flag value.
  1143. X */
  1144. X
  1145. Xint
  1146. Xlist_setflag(pc_name, flag, pp_list)
  1147. X    char *pc_name;
  1148. X    int    flag;
  1149. X    struct list **pp_list;
  1150. X{
  1151. X    struct list_elem *plist;
  1152. X    struct list_hash *phash, *hentry;
  1153. X    unsigned int hindex;
  1154. X
  1155. X    if (*pp_list == NULL)
  1156. X    return -1;
  1157. X
  1158. X    /*
  1159. X     * 1) look in hash table for entry.  if not found, return with error.
  1160. X     * 2) walk down hash chain until entry is found, then modify the
  1161. X     *        list entry
  1162. X     */
  1163. X
  1164. X    /* look in hash table */
  1165. X    hindex = string_hash(pc_name);
  1166. X    hentry = &(((*pp_list)->hashtable)[hindex]);
  1167. X
  1168. X    /* walk down chain */
  1169. X    for (phash = hentry; phash && phash->used; phash = phash->next) {
  1170. X    if (strcmp(phash->key, pc_name) == 0) {
  1171. X        plist = phash->lptr;
  1172. X        plist->flag |= flag;
  1173. X        return 0;
  1174. X    }
  1175. X    }
  1176. X
  1177. X    return 0;
  1178. X}
  1179. X
  1180. X/*
  1181. X * list_getflag(pc_name, pp_list)
  1182. X *    return the flag value embedded in structure.
  1183. X */
  1184. X
  1185. Xint
  1186. Xlist_getflag(pc_name, pp_list)
  1187. X    char *pc_name;
  1188. X    struct list **pp_list;
  1189. X{
  1190. X
  1191. X    struct list_elem *plist;
  1192. X    struct list_hash *phash, *hentry;
  1193. X    unsigned int hindex;
  1194. X
  1195. X    if (*pp_list == NULL)
  1196. X    return -1;
  1197. X
  1198. X    /*
  1199. X     * 1) look in hash table for entry.  if not found, return with error.
  1200. X     * 2) walk down hash chain until entry is found, then modify the
  1201. X     *        list entry
  1202. X     */
  1203. X
  1204. X    /* look in hash table */
  1205. X    hindex = string_hash(pc_name);
  1206. X    hentry = &(((*pp_list)->hashtable)[hindex]);
  1207. X
  1208. X    /* walk down chain */
  1209. X    for (phash = hentry; phash && phash->used; phash = phash->next) {
  1210. X    if (strcmp(phash->key, pc_name) == 0) {
  1211. X        plist = phash->lptr;
  1212. X        return plist->flag;
  1213. X    }
  1214. X    }
  1215. X
  1216. X    return -1;
  1217. X}
  1218. X
  1219. X/*
  1220. X * list_print()
  1221. X *    print out the entire contents of the linked list
  1222. X */
  1223. X
  1224. Xvoid
  1225. Xlist_print(pp_list)
  1226. X    struct list **pp_list;
  1227. X{
  1228. X    struct list_elem    *p;
  1229. X    struct list_elem *head;
  1230. X
  1231. X    /* check to see if list is empty */
  1232. X    if (*pp_list == NULL)
  1233. X    return;
  1234. X    
  1235. X    head = (*pp_list)->p_head;
  1236. X
  1237. X    /* walk down entire list */
  1238. X    for (p = head; p; p = p->next) {
  1239. X    printf("%-40s\t%20s %d\n", p->varname, p->varvalue, p->flag);
  1240. X    }
  1241. X    return;
  1242. X}
  1243. X
  1244. X/*
  1245. X * list_reset()
  1246. X *    
  1247. X *    given a pointer to a list, delete the entire list, and set the
  1248. X *    pointer to NULL;
  1249. X */
  1250. X
  1251. Xvoid
  1252. Xlist_reset (pp_list)
  1253. X    struct list **pp_list;
  1254. X{
  1255. X    struct list_elem *p, *q;
  1256. X    struct list_hash *phash, *qhash;
  1257. X    int i;
  1258. X
  1259. X    if (*pp_list == NULL)
  1260. X    return;
  1261. X
  1262. X    /* walk down the list, deleting the element that we just came from */
  1263. X    for (p = (*pp_list)->p_head; p; q = p, p = p->next, free((char *) q)) ;
  1264. X
  1265. X    /* walk down the hash table, and remove its hash chain */
  1266. X    for (i = 0; i < LIST_HASHSZ; i++) {
  1267. X    phash = &(((*pp_list)->hashtable)[i]);
  1268. X    if (phash->used) {
  1269. X        /* don't delete the first entry!  it's static! */
  1270. X        for (phash = phash->next; phash; qhash = phash,
  1271. X                phash = qhash->next, free((char *) qhash)) ;
  1272. X    }
  1273. X    }
  1274. X
  1275. X    /* now free up the list structure */
  1276. X    free((char *) *pp_list);
  1277. X
  1278. X    /* now invalidate the list structure pointer */
  1279. X    *pp_list = NULL;
  1280. X
  1281. X    return;
  1282. X}
  1283. X
  1284. X
  1285. X/*
  1286. X * list_init ()
  1287. X * list_open (struct list **pp_list)
  1288. X * list_get  (struct list **pp_list)
  1289. X * list_close(struct list **pp_list)
  1290. X *
  1291. X *    this allows the retrieval of individual list elements through
  1292. X *    successive calls to list_get().
  1293. X *
  1294. X *    0)    list_init() initializes the tables.
  1295. X *    1)     list_open() creates a table entry with *pp_head as the key
  1296. X *    2)     any calls to list_get() will get the next element.  the
  1297. X *            index is stored in the table, with *pp_head as the
  1298. X *            key.
  1299. X *    3)     list_close() removes the table entry, with *pp_head as the
  1300. X *            key.
  1301. X */
  1302. X
  1303. X#define LIST_TABLE_SZ    16
  1304. Xstruct list_table_entry {
  1305. X    struct list *p_key;            /* pointer to head is used as key */
  1306. X    struct list_elem *p_pindex;        /* pointer to current element */
  1307. X};
  1308. X
  1309. Xstatic struct list_table_entry list_table[LIST_TABLE_SZ];
  1310. X
  1311. Xint
  1312. Xlist_init()
  1313. X{
  1314. X    int i;
  1315. X    struct list_table_entry *p;
  1316. X
  1317. X    /* clear all keys and indexes */
  1318. X    for (i = 0; i < LIST_TABLE_SZ; i++) {
  1319. X    p = &list_table[i];
  1320. X    p->p_key = NULL;
  1321. X    p->p_pindex = NULL;
  1322. X    }
  1323. X    return 0;
  1324. X}
  1325. X
  1326. X/*
  1327. X * list_open(struct list **pp_list)
  1328. X *
  1329. X *    create a table entry with *pp_head as a key.
  1330. X *    returns (-1) if an entry with the specified key was already
  1331. X *        in the table, else (0).
  1332. X */
  1333. X
  1334. Xint
  1335. Xlist_open (pp_list)
  1336. X    struct list **pp_list;
  1337. X{
  1338. X    int i;
  1339. X    struct list_table_entry *p;
  1340. X
  1341. X    /* is the list NULL? */
  1342. X    if (*pp_list == NULL) {
  1343. X    return 0;                /* we'll fake it later on */
  1344. X    }
  1345. X
  1346. X    /* is there already an entry with a matching key?  is there any
  1347. X     * an empty table entry for us?
  1348. X     */
  1349. X    for (i = 0; i < LIST_TABLE_SZ; i++) {
  1350. X    p = &list_table[i];
  1351. X    if (p->p_key == NULL)
  1352. X         break;
  1353. X    if (p->p_key == *pp_list)
  1354. X         break;
  1355. X    }                        /* end for loop */
  1356. X
  1357. X    /*
  1358. X     * return with error if there was a collision.  (if the index rolled
  1359. X     * all the way to the top, and its index value was non-null, then
  1360. X     * we overflowed the table.)
  1361. X     */
  1362. X    if (i == LIST_TABLE_SZ && p->p_key != NULL)
  1363. X    return -1;
  1364. X
  1365. X    /*
  1366. X     * create the table entry.  assertion: p already points to an empty
  1367. X     * table entry.   Have index point to the head.
  1368. X     */
  1369. X    p->p_key = *pp_list;
  1370. X    p->p_pindex = (*pp_list)->p_head;
  1371. X
  1372. X    return 0;
  1373. X}
  1374. X
  1375. X/*
  1376. X * struct list_elem *
  1377. X * list_get(struct list **pp_list)
  1378. X *
  1379. X *    get the next entry in the specified list (using *pp_list as the key),
  1380. X *        and bump the internal pointer to the next element, ready
  1381. X *        for the next call to list_get().
  1382. X *    we return NULL if we're sitting on the tail end of the list.
  1383. X */
  1384. X
  1385. Xstruct list_elem *
  1386. Xlist_get (pp_list)
  1387. X    struct list **pp_list;
  1388. X{
  1389. X    int i;
  1390. X    struct list_table_entry *p, *q;
  1391. X    struct list_elem *p_elem;
  1392. X
  1393. X    /* fake it if you pass it a NULL */
  1394. X    if (*pp_list == NULL) {
  1395. X    return NULL;
  1396. X    }
  1397. X
  1398. X    /* find entry with matching key */
  1399. X    for (i = 0; i < LIST_TABLE_SZ; i++) {
  1400. X    p = &list_table[i];
  1401. X    if (p->p_key == *pp_list)
  1402. X         break;
  1403. X    }                        /* end for loop */
  1404. X
  1405. X    /* bounds checking.  if we rolled through the entire array, then
  1406. X     * we never found the key!
  1407. X     */
  1408. X
  1409. X    if (i == LIST_TABLE_SZ)
  1410. X    return NULL;
  1411. X
  1412. X    /* are we already at the end of the list? */
  1413. X
  1414. X    if (p->p_pindex == NULL)
  1415. X    return NULL;
  1416. X
  1417. X    /* if not, return a pointer to the current list element, and increment
  1418. X     * the table pointer.
  1419. X     */
  1420. X
  1421. X    p_elem = p->p_pindex;
  1422. X    q = p;
  1423. X    q->p_pindex = q->p_pindex->next;        /* walk through pointer */
  1424. X
  1425. X    return p_elem;
  1426. X}
  1427. X
  1428. X/*
  1429. X * list_close(struct list **pp_list)
  1430. X *    
  1431. X *     remove the table entry with (*pp_list) as the key.
  1432. X *    return -1 if entry not found.  else 0.
  1433. X */
  1434. X
  1435. Xint
  1436. Xlist_close (pp_list)
  1437. X    struct list **pp_list;
  1438. X{
  1439. X    int i;
  1440. X    struct list_table_entry *p;
  1441. X
  1442. X    /* fake it if you pass it a NULL */
  1443. X    if (*pp_list == NULL) {
  1444. X    return 0;
  1445. X    }
  1446. X
  1447. X    /* find entry with matching key */
  1448. X    for (i = 0; i < LIST_TABLE_SZ; i++) {
  1449. X    p = &list_table[i];
  1450. X    if (p->p_key == *pp_list)
  1451. X         break;
  1452. X    }                        /* end for loop */
  1453. X
  1454. X    /* bounds checking.  if we rolled through the entire array, then
  1455. X     * we never found the key!
  1456. X     */
  1457. X
  1458. X    if (i == LIST_TABLE_SZ)
  1459. X    return -1;
  1460. X
  1461. X    /* remove the entry.  assertion:  p is pointing to our entry */
  1462. X    p->p_key = NULL;
  1463. X    p->p_pindex = NULL;
  1464. X
  1465. X    return 0;
  1466. X}
  1467. X
  1468. Xstatic unsigned int
  1469. Xstring_hash (string)
  1470. X    char *string;
  1471. X{
  1472. X    unsigned int hindex;
  1473. X    char *pc = string;
  1474. X
  1475. X    hindex = *pc;
  1476. X    while (*pc) {
  1477. X    hindex = ((hindex << 9) ^ *pc++) % LIST_HASHSZ;
  1478. X    /*
  1479. X    hindex = ((hindex << 7) | (string[i] + len)) % LIST_HASHSZ;
  1480. X    */
  1481. X    }
  1482. X    return hindex;
  1483. X}
  1484. END_OF_FILE
  1485. if test 17081 -ne `wc -c <'tripwire-1.0/src/list.c'`; then
  1486.     echo shar: \"'tripwire-1.0/src/list.c'\" unpacked with wrong size!
  1487. fi
  1488. # end of 'tripwire-1.0/src/list.c'
  1489. fi
  1490. if test -f 'tripwire-1.0/sigs/md4/Makefile' -a "${1}" != "-c" ; then 
  1491.   echo shar: Will not clobber existing file \"'tripwire-1.0/sigs/md4/Makefile'\"
  1492. else
  1493. echo shar: Extracting \"'tripwire-1.0/sigs/md4/Makefile'\" \(306 characters\)
  1494. sed "s/^X//" >'tripwire-1.0/sigs/md4/Makefile' <<'END_OF_FILE'
  1495. X# $Id: Makefile,v 1.1.1.2 92/11/02 18:21:37 genek Exp $
  1496. X#
  1497. X# Makefile for MD4 wrapper
  1498. X#
  1499. X# Gene Kim
  1500. X# Purdue University
  1501. X# October 18, 1992
  1502. X#
  1503. X
  1504. Xall:    md4.o md4wrapper.o
  1505. X
  1506. X.c.o:    
  1507. X    $(CC) $(CFLAGS) -c $<
  1508. X    
  1509. Xclean:
  1510. X    -rm -rf md4.o md4wrapper.o
  1511. X
  1512. Xmd4.o: ../../include/byteorder.h
  1513. Xmd4wrapper.o: ../../include/byteorder.h
  1514. END_OF_FILE
  1515. if test 306 -ne `wc -c <'tripwire-1.0/sigs/md4/Makefile'`; then
  1516.     echo shar: \"'tripwire-1.0/sigs/md4/Makefile'\" unpacked with wrong size!
  1517. fi
  1518. # end of 'tripwire-1.0/sigs/md4/Makefile'
  1519. fi
  1520. if test -f 'tripwire-1.0/sigs/crc32/crc32.h' -a "${1}" != "-c" ; then 
  1521.   echo shar: Will not clobber existing file \"'tripwire-1.0/sigs/crc32/crc32.h'\"
  1522. else
  1523. echo shar: Extracting \"'tripwire-1.0/sigs/crc32/crc32.h'\" \(81 characters\)
  1524. sed "s/^X//" >'tripwire-1.0/sigs/crc32/crc32.h' <<'END_OF_FILE'
  1525. X/* $Id: crc32.h,v 1.1.1.2 92/11/02 18:21:03 genek Exp $ */
  1526. X
  1527. Xint sig_crc32_get();
  1528. END_OF_FILE
  1529. if test 81 -ne `wc -c <'tripwire-1.0/sigs/crc32/crc32.h'`; then
  1530.     echo shar: \"'tripwire-1.0/sigs/crc32/crc32.h'\" unpacked with wrong size!
  1531. fi
  1532. # end of 'tripwire-1.0/sigs/crc32/crc32.h'
  1533. fi
  1534. echo shar: End of archive 3 \(of 8\).
  1535. cp /dev/null ark3isdone
  1536. MISSING=""
  1537. for I in 1 2 3 4 5 6 7 8 ; do
  1538.     if test ! -f ark${I}isdone ; then
  1539.     MISSING="${MISSING} ${I}"
  1540.     fi
  1541. done
  1542. if test "${MISSING}" = "" ; then
  1543.     echo You have unpacked all 8 archives.
  1544.     echo "Now read the README file"
  1545.     rm -f ark[1-9]isdone
  1546. else
  1547.     echo You still need to unpack the following archives:
  1548.     echo "        " ${MISSING}
  1549. fi
  1550. ##  End of shell archive.
  1551. exit 0
  1552. -- 
  1553. Gene Spafford
  1554. Software Engineering Research Center & Dept. of Computer Sciences
  1555. Purdue University, W. Lafayette IN 47907-1398
  1556. Internet:  spaf@cs.purdue.edu    phone:  (317) 494-7825
  1557.