From: <wis...@us...> - 2012-09-08 00:48:06
|
Revision: 10153 http://xoops.svn.sourceforge.net/xoops/?rev=10153&view=rev Author: wishcraft Date: 2012-09-08 00:47:59 +0000 (Sat, 08 Sep 2012) Log Message: ----------- XOOPS CRC - Symposium Replacement for MD5 only has collision for symaltyping reversible at length 12< Added Paths: ----------- ThirdParty/checksums/ ThirdParty/checksums/xoopscrc/ ThirdParty/checksums/xoopscrc/XOOPSCRC-Logo.png ThirdParty/checksums/xoopscrc/XOOPSCRC-background.png ThirdParty/checksums/xoopscrc/class/ ThirdParty/checksums/xoopscrc/class/xoops.crc.base.php ThirdParty/checksums/xoopscrc/class/xoops.crc.class.php ThirdParty/checksums/xoopscrc/class/xoops.crc.enumerator.php ThirdParty/checksums/xoopscrc/class/xoops.crc.leaver.php ThirdParty/checksums/xoopscrc/debug_base.php ThirdParty/checksums/xoopscrc/debug_enumerator.php ThirdParty/checksums/xoopscrc/debug_leaver.php ThirdParty/checksums/xoopscrc/index.php Added: ThirdParty/checksums/xoopscrc/XOOPSCRC-Logo.png =================================================================== (Binary files differ) Property changes on: ThirdParty/checksums/xoopscrc/XOOPSCRC-Logo.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: ThirdParty/checksums/xoopscrc/XOOPSCRC-background.png =================================================================== (Binary files differ) Property changes on: ThirdParty/checksums/xoopscrc/XOOPSCRC-background.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: ThirdParty/checksums/xoopscrc/class/xoops.crc.base.php =================================================================== --- ThirdParty/checksums/xoopscrc/class/xoops.crc.base.php (rev 0) +++ ThirdParty/checksums/xoopscrc/class/xoops.crc.base.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,553 @@ +<?php +// $Id: xoops.crc.base.php 1.1.0 - XOOPSCRC 2008-08-15 9:22:20 wishcraft $ +// ------------------------------------------------------------------------ // +// CLORA - Chronolabs Australia // +// Copyright (c) 2008 // +// <http://www.chronolabs.org.au/> // +// ------------------------------------------------------------------------ // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the SDPL Source Directive Public Licence // +// as published by Chronolabs Australia; either version 2 of the License, // +// (at your option) any later version. // +// // +// You may not change or alter any portion of this comment or credits // +// of supporting developers from this source code or any supporting // +// source code which is considered copyrighted (c) material of the // +// original comment or credit authors. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program; if not, write to the Chronolab Australia // +// Chronolabs International PO BOX 699, DULWICH HILL, NSW, 2203, Australia // +// ------------------------------------------------------------------------ // + +if (!class_exists('xoops_crc_base')) +{ + error_reporting(0); + + class xoops_crc_base extends xoops_crc + { + + var $base; + var $seed; + var $mode; + var $roll; + var $num_evr; + + function __construct ($seed = 127) + { + if ($seed<1) + { + $this->seed = 1; + } elseif ($seed>255) { + $this->seed = 256; + } else { + $this->seed = $seed; + } + $base = $this->_set_base(); + return $this->get_base(); + } + + private function _set_base() + { + + if ($this->seed < 65) + { + $case=true; + } else { + $case=false; + } + + $this->roll = ($this->seed / (3+(1/6))); + $this->num_evr = floor((34.32 / ($this->roll/$this->seed))/($this->seed*($this->roll/17.8))); + + if ($this->roll<16) + { + $this->mode = '1'; + } elseif ($this->roll >15 && $this->roll<32) { + $this->mode = '2'; + } elseif ($this->roll >32 && $this->roll<48) { + $this->mode = '3'; + } elseif ($this->roll >48 ) { + $this->mode = '4'; + } + + if ($this->num_evr==0) + { + $this->num_evr = floor((($this->seed/$this->mode)/($this->mode*3.015))); + } elseif ($this->num_evr>8) { + $this->num_evr = $this->num_evr - floor($this->mode*1.35); + } + + + + $this->base = array(); + switch ($this->mode){ + case 1: + $ii = 0; + $num = 0; + $letter = "a"; + for ($qcb=1;$qcb<32;$qcb++) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + + for ($qcb=64;$qcb>31;$qcb--) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + break; + case 2: + $ii = 0; + $num = 0; + $letter = "a"; + for ($qcb=32;$qcb>0;$qcb--) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + + for ($qcb=32;$qcb<65;$qcb++) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + break; + case 3: + $ii = 0; + $num = 0; + $letter = "a"; + for ($qcb=1;$qcb<17;$qcb++) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + + for ($qcb=64;$qcb>47;$qcb--) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + + for ($qcb=32;$qcb>16;$qcb--) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + + + for ($qcb=32;$qcb<48;$qcb++) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + break; + case 4: + $ii = 0; + $num = 0; + $letter = "a"; + + for ($qcb=17;$qcb>0;$qcb--) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + + for ($qcb=17;$qcb<49;$qcb++) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + + for ($qcb=64;$qcb>48;$qcb--) + { + $ii++; + $done = false; + if ($sofar == $this->num_evr) + { + if ($num < 9) + { + $this->base[$qcb] = $num; + $num++; + $sofar = 0; + $done = true; + } + } else { + $sofar++; + } + + if ($done == false) + { + if (floor($qcb / ($this->roll/$this->num_evr))>$this->mode) + { + switch ($case) + { + case true: + $this->base[$qcb] = $letter; + break; + case false: + $this->base[$qcb] = strtoupper($letter); + break; + } + } else { + $this->base[$qcb] = $letter; + } + $letter++; + if (strlen($letter++)>1) { $letter="a"; } + } + } + break; + } + } + + function get_base() + { + return $this->base; + + } + + function debug_base() + { + $base = array(); + foreach ($this->base as $key => $data) + { + $base[$key] = array("char" => $data, + "ord" => ord($data), + "bin" => decbin(ord($data))); + } + + return array("mode" => $this->mode, "roll" => $this->roll, + "seed" => $this->seed, "mode" => $this->mode, + "num_evr" => $this->num_evr, "base" => $this->base, + "debug" => $base); + } + } +} + +?> \ No newline at end of file Added: ThirdParty/checksums/xoopscrc/class/xoops.crc.class.php =================================================================== --- ThirdParty/checksums/xoopscrc/class/xoops.crc.class.php (rev 0) +++ ThirdParty/checksums/xoopscrc/class/xoops.crc.class.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,75 @@ +<?php +// $Id: xoops.crc.class.php 1.1.0 - XOOPSCRC 2008-08-15 9:22:20 wishcraft $ +// ------------------------------------------------------------------------ // +// CLORA - Chronolabs Australia // +// Copyright (c) 2008 // +// <http://www.chronolabs.org.au/> // +// ------------------------------------------------------------------------ // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the SDPL Source Directive Public Licence // +// as published by Chronolabs Australia; either version 2 of the License, // +// (at your option) any later version. // +// // +// You may not change or alter any portion of this comment or credits // +// of supporting developers from this source code or any supporting // +// source code which is considered copyrighted (c) material of the // +// original comment or credit authors. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program; if not, write to the Chronolab Australia // +// Chronolabs International PO BOX 699, DULWICH HILL, NSW, 2203, Australia // +// ------------------------------------------------------------------------ // + +if (!class_exists('xoops_crc')) +{ + + error_reporting(E_ERROR); + + class xoops_crc + { + var $base; + var $enum; + var $seed; + var $crc; + + function __construct($data, $seed, $len=29) + { + $this->seed = $seed; + $this->length = $len; + $this->base = new xoops_crc_base((int)$seed); + $this->enum = new xoops_crc_enumerator($this->base); + + if (!empty($data)) + { + for ($i=1; $i<strlen($data); $i++) + { + $enum_calc = $this->enum->enum_calc(substr($data,$i,1),$enum_calc); + } + $xoops_crc_crc = new xoops_crc_leaver($enum_calc, $this->base, $this->length); + $this->crc = $xoops_crc_crc->crc; + } + + } + + function calc($data) + { + for ($i=1; $i<strlen($data); $i++) + { + $enum_calc = $this->enum->enum_calc(substr($data,$i,1),$enum_calc); + } + $xoops_crc_crc = new xoops_crc_leaver($enum_calc, $this->base, $this->length); + return $xoops_crc_crc->crc; + } + } +} + +require ('xoops.crc.base.php'); +require ('xoops.crc.enumerator.php'); +require ('xoops.crc.leaver.php'); + + Added: ThirdParty/checksums/xoopscrc/class/xoops.crc.enumerator.php =================================================================== --- ThirdParty/checksums/xoopscrc/class/xoops.crc.enumerator.php (rev 0) +++ ThirdParty/checksums/xoopscrc/class/xoops.crc.enumerator.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,325 @@ +<?php +// $Id: xoops.crc.enumerator.php 1.1.0 - XOOPSCRC 2008-08-15 9:22:20 wishcraft $ +// ------------------------------------------------------------------------ // +// CLORA - Chronolabs Australia // +// Copyright (c) 2008 // +// <http://www.chronolabs.org.au/> // +// ------------------------------------------------------------------------ // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the SDPL Source Directive Public Licence // +// as published by Chronolabs Australia; either version 2 of the License, // +// (at your option) any later version. // +// // +// You may not change or alter any portion of this comment or credits // +// of supporting developers from this source code or any supporting // +// source code which is considered copyrighted (c) material of the // +// original comment or credit authors. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program; if not, write to the Chronolab Australia // +// Chronolabs International PO BOX 699, DULWICH HILL, NSW, 2203, Australia // +// ------------------------------------------------------------------------ // + +if (!class_exists('xoops_crc_enumerator')) +{ + error_reporting(0); + + class xoops_crc_enumerator extends xoops_crc + { + + var $elekey; + var $base; + var $len; + + function __construct ($base, $len) + { + @$this->len = $len; + @$this->setElements($base); + } + + private function setElements($base) + { + @$this->base = $base; + @$this->elekey = array(); + + foreach ($base->base as $key => $data) + { + if (strlen((string)$data)==1) + { + if (strlen(bindec(ord($data)))==5) + { + $offset = array("ice" => (int)substr(decbin(ord($data)),5,1), + "icd" => (int)substr(decbin(ord($data)),4,1), + "icc" => (int)substr(decbin(ord($data)),3,1), + "icb" => (int)substr(decbin(ord($data)),2,1), + "ica" => (int)substr(decbin(ord($data)),1,1)); + if (substr(decbin(ord($data)),5,1)==1) + { + $offset['icf'] = 1; + } else { + $offset['icf'] = 0; + } + } elseif (strlen(decbin(ord($data)))==6) + { + $offset = array("icf" => (int)substr(decbin(ord($data)),6,1), + "ice" => (int)substr(decbin(ord($data)),5,1), + "icd" => (int)substr(decbin(ord($data)),4,1), + "icc" => (int)substr(decbin(ord($data)),3,1), + "icb" => (int)substr(decbin(ord($data)),2,1), + "ica" => (int)substr(decbin(ord($data)),1,1)); + } elseif (strlen(decbin(ord($data)))==7) + { + $offset = array("ica" => (int)substr(decbin(ord($data)),6,1), + "icb" => (int)substr(decbin(ord($data)),5,1), + "icc" => (int)substr(decbin(ord($data)),4,1), + "icd" => (int)substr(decbin(ord($data)),3,1), + "ice" => (int)substr(decbin(ord($data)),2,1), + "icf" => (int)substr(decbin(ord($data)),1,1)); + } + } else { + $offset = array("ica" => (int)substr(decbin(ord(substr($key,strlen($key)-1,1))),6,1), + "icb" => (int)substr(decbin(ord(substr($key,strlen($key)-1,1))),5,1), + "icc" => (int)substr(decbin(ord(substr($key,strlen($key)-1,1))),4,1), + "icd" => (int)substr(decbin(ord(substr($key,strlen($key)-1,1))),2,1), + "ice" => (int)substr(decbin(ord(substr($key,strlen($key)-1,1))),1,1), + "icf" => (int)substr(decbin(ord(substr($key,strlen($key)-1,1))),0,1)); + + } + + if (strlen(decbin(ord($data)))==7) + { + if (strlen($data)==1) + { + $cycle = array("icf", "ice", "icd", "icc", "icb", "ica"); + foreach ($cycle as $element) + { + if ($done==false) + { + if ($offset[$element]=='0') + { + if ($prev_ele!='') + { + if ($offset[$prev_ele] == '1') + { + $offset[$prev_ele] = '0'; + } else { + $offset[$prev_ele] = '1'; + } + } + $offset[$element]= '1'; + $done=true; + } + } + } + + } else { + $cycle = array("ica", "icb", "icc", "icd", "ice", "icf"); + foreach ($cycle as $element) + { + if ($done==false) + { + if ($offset[$element]=='0') + { + if ($prev_ele!='') + { + if ($offset[$prev_ele] == '0') + { + $offset[$prev_ele] = '1'; + } else { + $offset[$prev_ele] = '0'; + } + } + $offset[$element]= '1'; + $done=true; + } + } + } + } + } + $done=false; + if (strlen($data)==1) + { + @$this->elekey[$key] = array("key" => $data, + "bin" => decbin(ord($data)), + "offset" => $offset, + "flip" => 0); + } else { + @$this->elekey[$key] = array("key" => $data, + "bin" => decbin(ord($data)), + "offset" => $offset, + "flip" => 1); + } + } + + } + + private function getBytePos($char) + { + return floor((ord($char)+1)/4); + } + + function enum_calc ($char, $enum_calc, $debug=false) + { + static $flip; + + foreach ($enum_calc as $key => $value) + { + ${$key} = $value; + } + + static $charnum; + $charnum++; + if ($charnum>3) + { + $charnum=1; + } + + $nx_key.= $char; + + if ($this->len>15) + { + if (strlen($nx_key)>$this->len) + { + $nx_key = substr($nx_key, strlen($nx_key)/($charnum+1), strlen($nx_key) - (strlen($nx_key)/($charnum+1))).substr($nx_key, 1, strlen($nx_key)-(strlen($nx_key) - (strlen($nx_key)/($charnum+1)))); + } + } else { + if (strlen($nx_key)>32) + { + $nx_key = substr($nx_key, strlen($nx_key)/($charnum+1), strlen($nx_key) - (strlen($nx_key)/($charnum+1))).substr($nx_key, 1, strlen($nx_key)-(strlen($nx_key) - (strlen($nx_key)/($charnum+1)))); + } + } + + if ($this->elekey[$this->getBytePos($char)]['flip']==0) + { + $ica = $this->elekey[$this->getBytePos($char)]['offset']['ica']; + $icb = $this->elekey[$this->getBytePos($char)]['offset']['icb']; + $icc = $this->elekey[$this->getBytePos($char)]['offset']['icc']; + $icd = $this->elekey[$this->getBytePos($char)]['offset']['icd']; + $ice = $this->elekey[$this->getBytePos($char)]['offset']['ice']; + $icf = $this->elekey[$this->getBytePos($char)]['offset']['icf']; + } else { + if ($charnum==1) + { + $icf = $this->elekey[$this->getBytePos($char)]['offset']['ica']; + $ice = $this->elekey[$this->getBytePos($char)]['offset']['icb']; + $icd = $this->elekey[$this->getBytePos($char)]['offset']['icc']; + $icc = $this->elekey[$this->getBytePos($char)]['offset']['icd']; + $icb = $this->elekey[$this->getBytePos($char)]['offset']['ice']; + $ica = $this->elekey[$this->getBytePos($char)]['offset']['icf']; + } elseif ($charnum==2) + { + $icf = $this->elekey[$this->getBytePos($char)]['offset']['ica']; + $ice = $this->elekey[$this->getBytePos($char)]['offset']['icb']; + $icd = $this->elekey[$this->getBytePos($char)]['offset']['icc']; + $icc = $this->elekey[$this->getBytePos($char)]['offset']['icf']; + $icb = $this->elekey[$this->getBytePos($char)]['offset']['ice']; + $ica = $this->elekey[$this->getBytePos($char)]['offset']['icd']; + } else + { + $icf = $this->elekey[$this->getBytePos($char)]['offset']['icc']; + $ice = $this->elekey[$this->getBytePos($char)]['offset']['icb']; + $icd = $this->elekey[$this->getBytePos($char)]['offset']['ica']; + $icc = $this->elekey[$this->getBytePos($char)]['offset']['icd']; + $icb = $this->elekey[$this->getBytePos($char)]['offset']['ice']; + $ica = $this->elekey[$this->getBytePos($char)]['offset']['icf']; + } + } + for ($icount=1; $icount<65; $icount++) + { + if ($this->elekey[$icount]['offset']['ica'] == $icb && $this->elekey[$icount]['offset']['icb'] == $icc && $this->elekey[$icount]['offset']['icc'] == $icd) { + $nuclear .= '10'; + if ($icb = $this->elekey[$icount]['flip']) { + $nuclear .= '1'; + } else { + $nuclear .= '0'; + } + if ($icc = $this->elekey[$icount]['flip']) { + $nuclear .= '1'; + } else { + $nuclear .= '0'; + } + if ($icd = $this->elekey[$icount]['flip']) { + $nuclear .= '0'; + } else { + $nuclear .= '1'; + } + } + + if ($this->elekey[$icount]['offset']['ica'] == $icc && $this->elekey[$icount]['offset']['icb'] == $icd && $this->elekey[$icount]['offset']['icc'] == $ice) { + $nuclear .= '01'; + if ($icb = $this->elekey[$icount]['flip']) { + $nuclear .= '0'; + } else { + $nuclear .= '1'; + } + if ($icc = $this->elekey[$icount]['flip']) { + $nuclear .= '1'; + } else { + $nuclear .= '0'; + } + if ($icd = $this->elekey[$icount]['flip']) { + $nuclear .= '1'; + } else { + $nuclear .= '0'; + } + } + } + + // Change in version 1.6.4 + if (strlen($nuclear)>32768) + $nuclear = substr($nuclear,strlen($nuclear)-32768,32768); + + $result = $result + $ica; + $prince = $prince + $icb; + $karma = $karma + $icc; + $motivation = $motivation + $icd; + $official = $official + $ice; + $outsidecause = $outsidecause + $icf; + + if ($ica == '0') {$yang = $yang + 1;} else {$yin = $yin + 1;} + if ($icb == '0') {$yang = yang + 1;} else {$yin = $yin + 1;} + if ($icc == '0') {$yang = $yang+ 1;} else {$yin = $yin + 1;} + if ($icd == '0') {$yang = $yang + 1;} else {$yin = $yin + 1;} + if ($ice == '0') {$yang = yang + 1;} else {$yin = $yin + 1;} + if ($icf == '0') {$yang = $yang+ 1;} else {$yin = $yin + 1;} + + if ($debug==true) + { + + $data[sizeof($data)+1] = array("pos" => $this->getBytePos($char), + "elements" => $this->elekey); + + $result = array("result" => $result, + "prince" => $prince, + "karma" => $karma, + "motivation" => $motivation, + "official" => $official, + "outsidecause" => $outsidecause, + "nuclear" => $nuclear, + "yin" => $yin, + "yang" => $yang, + "nx_key" => $nx_key, + "data"=> $data); + } else { + $result = array("result" => $result, + "prince" => $prince, + "karma" => $karma, + "motivation" => $motivation, + "official" => $official, + "outsidecause" => $outsidecause, + "nuclear" => $nuclear, + "yin" => $yin, + "yang" => $yang, + "nx_key" => $nx_key); + + } + + return $result; + } + } +} \ No newline at end of file Added: ThirdParty/checksums/xoopscrc/class/xoops.crc.leaver.php =================================================================== --- ThirdParty/checksums/xoopscrc/class/xoops.crc.leaver.php (rev 0) +++ ThirdParty/checksums/xoopscrc/class/xoops.crc.leaver.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,162 @@ +<?php +// $Id: xoops.crc.leaver.php 1.1.0 - XOOPSCRC 2008-08-15 9:22:20 wishcraft $ +// ------------------------------------------------------------------------ // +// CLORA - Chronolabs Australia // +// Copyright (c) 2008 // +// <http://www.chronolabs.org.au/> // +// ------------------------------------------------------------------------ // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the SDPL Source Directive Public Licence // +// as published by Chronolabs Australia; either version 2 of the License, // +// (at your option) any later version. // +// // +// You may not change or alter any portion of this comment or credits // +// of supporting developers from this source code or any supporting // +// source code which is considered copyrighted (c) material of the // +// original comment or credit authors. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program; if not, write to the Chronolab Australia // +// Chronolabs International PO BOX 699, DULWICH HILL, NSW, 2203, Australia // +// ------------------------------------------------------------------------ // + +if (!class_exists('xoops_crc_leaver')) +{ + error_reporting(E_ERROR); + + class xoops_crc_leaver extends xoops_crc + { + var $crc; + + function __construct($enum_calc, $base, $len=29) + { + @$this->crc = $this->calc_crc($enum_calc, $base, $len); + } + + function calc_crc ($enum_calc, $base, $len) + { + for ($qi=0; $qi<$len+1; $qi++) + { + $da = floor(9*($qi/$len)); + $pos = $this->GetPosition($enum_calc, $len, $qi); + $pos = ceil($pos / ($len/ ($qi-1))); + for($v=-$qi;$v<$pos;$v++) + { + if ($c>64) + $c=0; + + $c++; + } + if (strlen($base->base[$c])>1) + { + $crc .= $da; + } else { + $crc .= $base->base[$c]; + } + + + if ($qi<ceil($len/3)) + { + $crc = $this->nux_cycle($crc, $enum_calc['result'], $len); + $crc = $this->nux_cycle($crc, $enum_calc['prince'], $len); + } elseif ($qi<(ceil($len/3)*2)) { + $crc = $this->nux_cycle($crc, $enum_calc['karma'], $len); + $crc = $this->nux_cycle($crc, $enum_calc['motivation'], $len); + } else { + $crc = $this->nux_cycle($crc, $enum_calc['official'], $len); + $crc = $this->nux_cycle($crc, $enum_calc['outsidecause'], $len); + } + + $crc = $this->nux_cycle($crc, $enum_calc['yang'], $len); + } + + $crc = $this->nux_cycle($crc, $enum_calc['yin'], $len); + + $crc = $this->nux_xor($crc, $enum_calc['nx_key']); + + for ($qi=0; $qi<$len+1; $qi++) + { + $da = $len-floor(9*($qi/$len)); + $pos = ceil(ord($crc{$qi}) / 4); + for($v=-$qi;$v<$pos;$v++) + { + if ($c>64) + $c=0; + + $c++; + } + if (strlen($base->base[$c])>1) + { + $final_crc .= $da; + } else { + $final_crc .= $base->base[$c]; + } + } + return $final_crc; + } + + private function GetPosition($enum_calc, $len, $qi) + { + if ($enum_calc['yin']>$enum_calc['yang']) + { + $cycle = floor((256*($enum_calc['yin']/$enum_calc['yang']))/(256*($enum_calc['yang']/$enum_calc['yin'])))+($len - $qi); + } else { + $cycle = ceil((256*($enum_calc['yang']/$enum_calc['yin']))/(256*($enum_calc['yin']/$enum_calc['yang'])))+($len - $qi); + } + + $result = $this->nuc_step($enum_calc['nuclear'], $enum_calc['result'], $cycle+$qi); + $prince = $this->nuc_step($enum_calc['nuclear'], $enum_calc['prince'], $cycle+$qi); + $karma = $this->nuc_step($enum_calc['nuclear'], $enum_calc['karma'], $cycle+$qi); + $motivation = $this->nuc_step($enum_calc['nuclear'], $enum_calc['motivation'], $cycle+$qi); + $official = $this->nuc_step($enum_calc['nuclear'], $enum_calc['official'], $cycle+$qi); + $outsidecause = $this->nuc_step($enum_calc['nuclear'], $enum_calc['outsidecause'], $cycle+$qi); + + $char = decbin($result.$prince.$karma.$motivation.$official.$outsidecause); + + return (ord($char)); + } + + private function nuc_step($nuclear, $var, $cycle) + { + $c=1; + for($v=0;$v<($var+$cycle);$v++) + { + if ($c>strlen($nuclear)) + $c=0; + + $c++; + } + return substr($nuclear,$c,1); + } + + private function nux_cycle($crc, $var, $len) + { + for($v=0;$v<($var+1);$v++) + { + for($y=1;$y<$len;$y++) + { + $crc = substr($crc, $y, $len - $y).substr($crc, 0, $len-($len - $y)); + } + } + return $crc; + } + + private function nux_xor($text_crc, $key) + { + for($i=0;$i<strlen($text_crc);) // Dont need to increment here + { + for($j=0;$j<strlen($key);$j++,$i++) + { + $crc .= $text_crc{$i} ^ $key{$j}; + } + } + return $crc; + } + + } +} \ No newline at end of file Added: ThirdParty/checksums/xoopscrc/debug_base.php =================================================================== --- ThirdParty/checksums/xoopscrc/debug_base.php (rev 0) +++ ThirdParty/checksums/xoopscrc/debug_base.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,103 @@ +<?php +// $Id: debug_base.php 1.1.0 - XOOPSCRC 2008-08-15 9:22:20 wishcraft $ +// ------------------------------------------------------------------------ // +// CLORA - Chronolabs Australia // +// Copyright (c) 2008 // +// <http://www.chronolabs.org.au/> // +// ------------------------------------------------------------------------ // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the SDPL Source Directive Public Licence // +// as published by Chronolabs Australia; either version 2 of the License, // +// (at your option) any later version. // +// // +// You may not change or alter any portion of this comment or credits // +// of supporting developers from this source code or any supporting // +// source code which is considered copyrighted (c) material of the // +// original comment or credit authors. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program; if not, write to the Chronolab Australia // +// Chronolabs International PO BOX 699, DULWICH HILL, NSW, 2203, Australia // +// ------------------------------------------------------------------------ // +$mt=time()+microtime(); +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>XOOPSCRC Base Debug Test</title> +<style type="text/css"> +<!-- +body,td,th { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + color: #006699; +} +body { + background-color: #FFFFCC; + background-image: url(XOOPSCRC-background.png); + background-repeat: repeat; + margin-left: 35px; + margin-top: 45px; + margin-right: 35px; + margin-bottom: 80px; +} +--> +</style></head> + +<body> +<div style="float:left; "><a style="border:hidden;" href="http://www.chronolabs.org.au/articles/Source-Code/XOOPSCRC-Variable-Checksum/"><img src="XOOPSCRC-Logo.png" /></a></div> + +<?php if (!isset($_POST['seed'])) { ?> +<form id="form1" name="form1" method="post" action=""> + <label>Seed (0-255) + <input name="seed" type="text" id="seed" value="128" size="5" maxlength="3" /> + </label> + <label> + <input type="submit" name="Submit" id="Submit" value="Submit" /> + </label> +</form> +<?php } ?> +<div style="clear:both"> </div> +<h2>Debug Examples:</h2> +<ol> + <li> + Test Enumerator (<a href="debug_enumerator.php">debug_enumerator.php</a>) + </li> + <li> + Test Leaver (<a href="debug_leaver.php">debug_leaver.php</a>)<br /> + + </li> + <li> + Index (<a href="index.php">index.php</a>) + </li> +</ol> + +<pre> + +<?php + if (isset($_POST['seed'])) + { + error_reporting(0); + class xoops_crc + { + + } + + require ('class/xoops.crc.base.php'); + + $obj_base = new xoops_crc_base((int)$_POST['seed']); + echo "Milliseconds: ".(abs((time()+microtime())-$mt)*1000)."\n"; + print_r($obj_base->debug_base()); + } +?> + +</pre> + +</body> +</html> Added: ThirdParty/checksums/xoopscrc/debug_enumerator.php =================================================================== --- ThirdParty/checksums/xoopscrc/debug_enumerator.php (rev 0) +++ ThirdParty/checksums/xoopscrc/debug_enumerator.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,114 @@ +<?php +// $Id: debug_enumerator.php 1.1.0 - XOOPSCRC 2008-08-15 9:22:20 wishcraft $ +// ------------------------------------------------------------------------ // +// CLORA - Chronolabs Australia // +// Copyright (c) 2008 // +// <http://www.chronolabs.org.au/> // +// ------------------------------------------------------------------------ // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the SDPL Source Directive Public Licence // +// as published by Chronolabs Australia; either version 2 of the License, // +// (at your option) any later version. // +// // +// You may not change or alter any portion of this comment or credits // +// of supporting developers from this source code or any supporting // +// source code which is considered copyrighted (c) material of the // +// original comment or credit authors. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program; if not, write to the Chronolab Australia // +// Chronolabs International PO BOX 699, DULWICH HILL, NSW, 2203, Australia // +// ------------------------------------------------------------------------ // +$mt=time()+microtime(); +?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>XOOPSCRC Enumerator Debug Test</title> +<style type="text/css"> +<!-- +body,td,th { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + color: #006699; +} +body { + background-color: #FFFFCC; + background-image: url(XOOPSCRC-background.png); + background-repeat: repeat; + margin-left: 35px; + margin-top: 45px; + margin-right: 35px; + margin-bottom: 80px; +} +--> +</style></head> + +<body> +<div style="float:left; "><a style="border:hidden;" href="http://www.chronolabs.org.au/articles/Source-Code/XOOPSCRC-Variable-Checksum/"><img src="XOOPSCRC-Logo.png" /></a></div> + +<?php if (!isset($_POST['charstring'])&&!isset($_POST['seed'])&&!isset($_POST['length'])) { ?> +<form id="form1" name="form1" method="post" action="" target="_blank"> + <label>Seed (0-255) + <input name="seed" type="text" id="seed" value="128" size="5" maxlength="3" /> + </label> + <label>Length + <input name="length" type="text" id="length" value="28" size="5" maxlength="3" /> + </label> + <label>Characters to test + <input name="charstring" type="text" id="charstring" value="" size="45" maxlength="2600" /> + </label> + <label> + <input type="submit" name="Submit" id="Submit" value="Submit" /> + </label> +</form> +<?php } ?> +<div style="clear:both"> </div> +<h2>Debug Examples:</h2> +<ol> + <li> + Test Base (<a href="debug_base.php">debug_base.php</a>) + </li> + <li> + Test Leaver (<a href="debug_leaver.php">debug_leaver.php</a>)<br /> + </li> + <li> + Index (<a href="index.php">index.php</a>) + </li> + +</ol> +<pre> + +<?php + if (isset($_POST['charstring'])&&isset($_POST['seed'])&&isset($_POST['length'])) + { + error_reporting(E_ERROR); + class xoops_crc + { + + } + + require ('class/xoops.crc.base.php'); + require ('class/xoops.crc.enumerator.php'); + + $xoops_crc_base = new xoops_crc_base((int)$_POST['seed']); + $enumerator = new xoops_crc_enumerator($xoops_crc_base, $_POST['length']); + + for ($i=1; $i<strlen($_POST['charstring']); $i++) + { + $enum_calc = $enumerator->enum_calc(substr($_POST['charstring'],$i,1),$enum_calc,true); + } + echo "Milliseconds: ".(abs((time()+microtime())-$mt)*1000)."\n"; + print_r($enum_calc); + } +?> + +</pre> + +</body> +</html> Added: ThirdParty/checksums/xoopscrc/debug_leaver.php =================================================================== --- ThirdParty/checksums/xoopscrc/debug_leaver.php (rev 0) +++ ThirdParty/checksums/xoopscrc/debug_leaver.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,118 @@ +<?php +// $Id: debug_leaver.php 1.1.0 - XOOPSCRC 2008-08-15 9:22:20 wishcraft $ +// ------------------------------------------------------------------------ // +// CLORA - Chronolabs Australia // +// Copyright (c) 2008 // +// <http://www.chronolabs.org.au/> // +// ------------------------------------------------------------------------ // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the SDPL Source Directive Public Licence // +// as published by Chronolabs Australia; either version 2 of the License, // +// (at your option) any later version. // +// // +// You may not change or alter any portion of this comment or credits // +// of supporting developers from this source code or any supporting // +// source code which is considered copyrighted (c) material of the // +// original comment or credit authors. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program; if not, write to the Chronolab Australia // +// Chronolabs International PO BOX 699, DULWICH HILL, NSW, 2203, Australia // +// ------------------------------------------------------------------------ // +$mt=time()+microtime(); +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>XOOPSCRC Leaver Debug</title> +<style type="text/css"> +<!-- +body,td,th { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + color: #006699; +} +body { + background-color: #FFFFCC; + background-image: url(XOOPSCRC-background.png); + background-repeat: repeat; + margin-left: 35px; + margin-top: 45px; + margin-right: 35px; + margin-bottom: 80px; +} +--> +</style></head> + +<body> +<div style="float:left; "><a style="border:hidden;" href="http://www.chronolabs.org.au/articles/Source-Code/XOOPSCRC-Variable-Checksum/"><img src="XOOPSCRC-Logo.png" /></a></div> +<?php if (!isset($_POST['charstring'])&&!isset($_POST['seed'])&&!isset($_POST['length'])) { ?> +<form id="form1" name="form1" method="post" action="" target="_blank"> + <label>Seed (0-255) + <input name="seed" type="text" id="seed" value="128" size="5" maxlength="3" /> + </label> + <label>Length + <input name="length" type="text" id="length" value="28" size="5" maxlength="3" /> + </label> + <label>Characters to test + <input name="charstring" type="text" id="charstring" value="" size="15" maxlength="11" /> + </label> + <label> + <input type="submit" name="Submit" id="Submit" value="Submit" /> + </label> +</form> +<?php } ?> +<div style="clear:both"> </div> +<h2>Debug Examples:</h2> +<ol> + <li> + Test Base (<a href="debug_base.php">debug_base.php</a>) + </li> + <li> + Test Enumerator (<a href="debug_enumerator.php">debug_enumerator.php</a>) + </li> + <li> + Index (<a href="index.php">index.php</a>)<br /> + </li> +</ol> +<pre> + +<?php + if (isset($_POST['charstring'])&&isset($_POST['seed'])&&isset($_POST['length'])) + { + error_reporting(0); + class xoops_crc + { + + } + + require ('class/xoops.crc.base.php'); + require ('class/xoops.crc.enumerator.php'); + require ('class/xoops.crc.leaver.php'); + + $xoops_crc_base = new xoops_crc_base((int)$_POST['seed']); + $enumerator = new xoops_crc_enumerator($xoops_crc_base); + + for ($i=1; $i<strlen($_POST['charstring']); $i++) + { + $enum_calc = $enumerator->enum_calc(substr($_POST['charstring'],$i,1),$enum_calc); + } + + error_reporting(0); + + $crc = new xoops_crc_leaver($enum_calc, $xoops_crc_base, $_POST['length']); + echo "Milliseconds: ".(abs((time()+microtime())-$mt)*1000)."\n"; + print_r($crc); + } +?> + +</pre> + +</body> +</html> Added: ThirdParty/checksums/xoopscrc/index.php =================================================================== --- ThirdParty/checksums/xoopscrc/index.php (rev 0) +++ ThirdParty/checksums/xoopscrc/index.php 2012-09-08 00:47:59 UTC (rev 10153) @@ -0,0 +1,98 @@ +<?php +$mt=time()+microtime(); +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<title>XOOPSCRC Variable None Reversible Checksum</title> +<style type="text/css"> +<!-- +body,td,th { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + color: #006699; +} +body { + background-color: #FFFFCC; + background-image: url(XOOPSCRC-background.png); + background-repeat: repeat; + margin-left: 35px; + margin-top: 45px; + margin-right: 35px; + margin-bottom: 80px; +} +--> +</style></head> + +<body> +<h1>Symposium Checksum with Complexity Divinations</h1> +<p>At lengths of 10 or less this forumula is good for passwords as it has collisions at low lengths meaning the result of the checksum can have multiple outcomes and be none reversed. At lengths of 28 characters or more there are no collisions!</p> +<?php if (!isset($_POST['charstring'])&&!isset($_POST['seed'])&&!isset($_POST['length'])) { ?> +<form id="form1" name="form1" method="post" action="" target="_blank"> + <label>Seed (0-255) + <input name="seed" type="text" id="seed" value="128" size="5" maxlength="3" /> + </label> + <label>Length + <input name="length" type="text" id="length" value="28" size="8" maxlength="7" /> + </label> + <label>Characters to test + <input name="charstring" type="text" id="charstring" value="" size="21" maxlength="32" /> + </label> + <label> + <input type="submit" name="Submit" id="Submit" value="Submit" /> + </label> + <label> + <input name="debug" type="checkbox" id="debug" value="1" /> + Show Debug</label> +</form> +<?php } ?> +<div style="clear:both"> </div> +<h2>Debug Examples:</h2> +<ol> + <li> + Test Base (<a href="debug_base.php">debug_base.php</a>) + </li> + <li> + Test Enumerator (<a href="debug_enumerator.php">debug_enumerator.php</a>) + </li> + <li> + Test Leaver (<a href="debug_leaver.php">debug_leaver.php</a>)<br /> + </li> + <li> + Index (<a href="index.php">index.php</a>) + </li> +</ol> + +<pre> + +<?php + if (isset($_POST['charstring'])&&isset($_POST['seed'])&&isset($_POST['length'])) + { + error_reporting(0); + require ('class/xoops.crc.class.php'); + set_time_limit(120); + $crc = new xoops_crc($_POST['charstring'], $_POST['seed'], $_POST['length']); + + echo "Seed: ".$crc->seed."\n"; + echo "Lenght: ".$crc->length."\n"; + echo "Milliseconds: ".(abs((time()+microtime())-$mt)*1000)."\n\n"; + echo "Data sha1: ".sha1($_POST['charstring'])."\n"; + echo "Data md5: ".md5($_POST['charstring'])."\n"; + echo "XOOPSCRC sha1: ".sha1($crc->crc)."\n"; + echo "XOOPSCRC md5: ".md5($crc->crc)."\n"; + + echo '</pre>'."\n\n".'<h2>XOOPSCRC Checksum</h2>'."\n".'<p> <textarea name="textarea" id="textarea" cols="120" rows="24">'.$crc->crc.'</textarea></p>'; + if ($_POST['debug']==1) + { + echo "<h3>Debug</h3><pre>"; + print_r($crc); + } + } +?> + +</pre> +<div style="float:right; clear:none;"><a style="border:hidden;" href="http://xoops.org"><img src="XOOPSCRC-Logo.png" /></a></div> + +</body> +</html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |